<?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>216148</bug_id>
          
          <creation_ts>2020-09-03 15:26:33 -0700</creation_ts>
          <short_desc>[WebIDL] Replace &apos;serializable&apos; with &apos;[Default] object toJSON()&apos;</short_desc>
          <delta_ts>2020-09-14 10:21:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1685462</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-03 15:26:33 -0700</bug_when>
    <thetext>[WebIDL] Replace &apos;serializable&apos; with &apos;[Default] object toJSON()&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685464</commentid>
    <comment_count>1</comment_count>
      <attachid>407921</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-03 15:27:18 -0700</bug_when>
    <thetext>Created attachment 407921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685496</commentid>
    <comment_count>2</comment_count>
      <attachid>407930</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-03 17:00:26 -0700</bug_when>
    <thetext>Created attachment 407930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685689</commentid>
    <comment_count>3</comment_count>
      <attachid>407982</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-04 09:22:45 -0700</bug_when>
    <thetext>Created attachment 407982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685775</commentid>
    <comment_count>4</comment_count>
      <attachid>408002</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-04 11:23:35 -0700</bug_when>
    <thetext>Created attachment 408002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685777</commentid>
    <comment_count>5</comment_count>
      <attachid>408004</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-04 11:25:58 -0700</bug_when>
    <thetext>Created attachment 408004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685837</commentid>
    <comment_count>6</comment_count>
      <attachid>408016</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-04 13:28:00 -0700</bug_when>
    <thetext>Created attachment 408016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685847</commentid>
    <comment_count>7</comment_count>
      <attachid>408021</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-04 13:52:35 -0700</bug_when>
    <thetext>Created attachment 408021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685870</commentid>
    <comment_count>8</comment_count>
      <attachid>408029</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-04 15:18:35 -0700</bug_when>
    <thetext>Created attachment 408029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687569</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-10 15:27:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/68668407&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688172</commentid>
    <comment_count>10</comment_count>
      <attachid>408675</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-13 20:12:09 -0700</bug_when>
    <thetext>Created attachment 408675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688180</commentid>
    <comment_count>11</comment_count>
      <attachid>408679</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-13 21:11:53 -0700</bug_when>
    <thetext>Created attachment 408679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688241</commentid>
    <comment_count>12</comment_count>
      <attachid>408679</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-09-14 08:12:28 -0700</bug_when>
    <thetext>Comment on attachment 408679
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:13
&gt; +        result. Rather, all attributes that quality as have a &apos;JSON type&apos; are included

&quot;attributes that quality as have a &apos;JSON type&apos;&quot; isn&apos;t quite right, maybe &quot;attributes that qualify have a &apos;JSON type&apos;&quot; or &quot;attributes that have a &apos;JSON type&apos;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688279</commentid>
    <comment_count>13</comment_count>
      <attachid>408717</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-14 09:49:29 -0700</bug_when>
    <thetext>Created attachment 408717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688292</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-14 10:21:54 -0700</bug_when>
    <thetext>Committed r267020: &lt;https://trac.webkit.org/changeset/267020&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408717.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407921</attachid>
            <date>2020-09-03 15:27:18 -0700</date>
            <delta_ts>2020-09-03 17:00:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200903152717.patch</filename>
            <type>text/plain</type>
            <size>86404</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA5LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRsOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0lj
ZUNhbmRpZGF0ZTo6dG9KU09OIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNl
Q2FuZGlkYXRlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25E
ZXNjcmlwdGlvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50
QWRkcmVzcy5pZGw6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVz
cG9uc2UuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToK
KyAgICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAo
SXNKU09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxp
emFibGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAg
ICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRh
YmxlKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJh
dGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlv
bkRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVm
aW5pdGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgor
ICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6CisgICAg
ICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlNZW1iZXJM
aXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAgIChwYXJz
ZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBh
dHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6
IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVm
YXVsdFRvSlNPTkNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEds
b2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT05Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRvSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzZXJpYWxpemUpOiBE
ZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iajo6c2VyaWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6IERlbGV0ZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNP
TkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZSk6IERlbGV0
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxl
bWVudGFsRGVwZW5kZW5jaWVzLmRlcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE5vZGUuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRs
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbC5pZGw6CisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoK
KyAgICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1
YWQuaWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBh
Z2UvUGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291
cmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlk
bDoKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKwogMjAyMC0wOS0wMyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1ZGlvRGVzdGluYXRp
b25Ob2RlLm1heENoYW5uZWxDb3VudCBhbHdheXMgcmV0dXJucyAwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRs
CShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWFEZXZpY2VLaW5kIGtpbmQ7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBsYWJlbDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGdyb3VwSWQ7Ci0gICAgc2VyaWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwogCiAvLyBGSVhNRSAxNjk4NzE6IG1pc3NpbmcgSW5wdXRE
ZXZpY2VJbmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuY3BwCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDE1IEBAIFJlZjxSVENJY2VDYW5kaWRhdGU+IFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlk
YXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXgpKTsKIH0KIAorUlRDSWNlQ2FuZGlkYXRlSW5pdCBS
VENJY2VDYW5kaWRhdGU6OnRvSlNPTigpIGNvbnN0Cit7CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5p
dCByZXN1bHQ7CisgICAgcmVzdWx0LmNhbmRpZGF0ZSA9IG1fY2FuZGlkYXRlOworICAgIHJlc3Vs
dC5zZHBNaWQgPSBtX3NkcE1pZDsKKyAgICByZXN1bHQuc2RwTUxpbmVJbmRleCA9IG1fc2RwTUxp
bmVJbmRleDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAkocmV2aXNpb24gMjY2
NTI5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldENhbmRpZGF0ZShTdHJpbmcmJiBjYW5kaWRhdGUpIHsgbV9jYW5kaWRhdGUgPSBXVEZNb3Zl
KGNhbmRpZGF0ZSk7IH0KIAorICAgIFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9KU09OKCkgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgUlRDSWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRl
LCBjb25zdCBTdHJpbmcmIHNkcE1pZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHNkcE1MaW5l
SW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDYgKzUzLDUgQEAKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgcmVs
YXRlZFBvcnQKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgdWZyYWcKIAotICAgIC8vIEZJ
WE1FIDE2OTY2MjogYWRkIHVmcmFnIHRvIHRoZSBsaXN0Ci0gICAgc2VyaWFsaXplciA9IHtjYW5k
aWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0
b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZpc2lvbiAyNjY1
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgUlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc2RwOwogCi0gICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXlt
ZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJldmlzaW9uIDI2
NjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEFk
ZHJlc3MuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgSW1wbGVtZW50
YXRpb25MYWNrc1ZUYWJsZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFjZSBQYXltZW50
QWRkcmVzcyB7Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRd
IG9iamVjdCB0b0pTT04oKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvdW50
cnk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmluZz4gYWRkcmVz
c0xpbmU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXlt
ZW50UmVzcG9uc2UuaWRsCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTZWN1cmVDb250
ZXh0LAogXSBpbnRlcmZhY2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQgewotICAgIHNl
cmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7
CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAyNjY1
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0J
KHdvcmtpbmcgY29weSkKQEAgLTExMDEsNTAgKzExMDEsNjEgQEAgc3ViIElzV3JhcHBlclR5cGUK
ICAgICByZXR1cm4gMDsKIH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitzdWIgSW50ZXJm
YWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJm
YWNlKSA9IEBfOwogCi0gICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMDsKLSAgICAk
b2JqZWN0LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAgIG15ICRwYXJl
bnRJbnRlcmZhY2UgPSBzaGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0g
MSBpZiAkcGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7Ci0KLSAgICBy
ZXR1cm4gJGFueVBhcmVudElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlv
biAoQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRvcGVyYXRpb24t
PmlzU3RhdGljICYmICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+
dHlwZS0+bmFtZSBlcSAib2JqZWN0IikgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKLXN1YiBJc1NlcmlhbGl6YWJsZVR5cGUKKyMg
aHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLWpzb24tdHlwZXMKK3N1YiBJc0pT
T05UeXBlCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICR0eXBlKSA9IEBfOwogCi0g
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tc2VyaWFsaXphYmxlLXR5
cGUKLQorICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwogICAgIHJldHVy
biAxIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gMSBpZiAkb2JqZWN0
LT5Jc051bWVyaWNUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc0VudW1U
eXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmluZ1R5cGUoJHR5cGUp
OwotICAgIHJldHVybiAwIGlmICR0eXBlLT5uYW1lIGVxICJFdmVudEhhbmRsZXIiOwotCi0gICAg
aWYgKCR0eXBlLT5pc1VuaW9uIHx8ICRvYmplY3QtPklzRGljdGlvbmFyeVR5cGUoJHR5cGUpKSB7
Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHVuaW9uIGFuZCBkaWN0aW9uYXJ5IHR5cGVz
IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQorICAgIHJldHVybiAxIGlm
ICRvYmplY3QtPklzU3RyaW5nT3JFbnVtVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoJG9iamVjdC0+
SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCR0eXBlKSkgewogICAgICAgICBteSAkc3VidHlw
ZSA9IEB7JHR5cGUtPnN1YnR5cGVzfVswXTsKLQotICAgICAgICAjIEZJWE1FOiB3ZWJraXQub3Jn
L2IvMTk0NDM5IFtXZWJJRExdIFN1cHBvcnQgc2VyaWFsaXppbmcgc2VxdWVuY2VzIGFuZCBGcm96
ZW5BcnJheXMgb2YgaW50ZXJmYWNlcwotICAgICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0lu
dGVyZmFjZVR5cGUoJHN1YnR5cGUpOwotCi0gICAgICAgIHJldHVybiAkb2JqZWN0LT5Jc1Nlcmlh
bGl6YWJsZVR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgICAgICByZXR1cm4gJG9iamVj
dC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkc3VidHlwZSk7CisgICAgfQorICAgIGlmICgkb2Jq
ZWN0LT5Jc1JlY29yZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICR2YWx1ZVN1YnR5cGUgPSBA
eyR0eXBlLT5zdWJ0eXBlc31bMF07CisgICAgICAgIHJldHVybiAkb2JqZWN0LT5Jc0pTT05UeXBl
KCRpbnRlcmZhY2UsICR2YWx1ZVN1YnR5cGUpOwogICAgIH0KIAotICAgIHJldHVybiAwIGlmICEk
b2JqZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHR5cGUpOworICAgIGlmICgkb2JqZWN0LT5Jc0ludGVy
ZmFjZVR5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICRpbnRlcmZhY2UgPSAkb2JqZWN0LT5HZXRJ
bnRlcmZhY2VGb3JUeXBlKCRpbnRlcmZhY2UsICR0eXBlKTsKKyAgICAgICAgaWYgKCRvYmplY3Qt
PkludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24oJGludGVyZmFjZSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICB9CiAKLSAgICBteSAkaW50ZXJmYWNlRm9yVHlwZSA9
ICRvYmplY3QtPkdldEludGVyZmFjZUZvclR5cGUoJGludGVyZmFjZSwgJHR5cGUpOwotICAgIGlm
ICgkaW50ZXJmYWNlRm9yVHlwZSkgewotICAgICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlRm9y
VHlwZS0+c2VyaWFsaXphYmxlOwotICAgICAgICByZXR1cm4gJG9iamVjdC0+SW5oZXJpdHNTZXJp
YWxpemFibGUoJGludGVyZmFjZUZvclR5cGUpOworICAgICAgICBteSAkYW55UGFyZW50SGFzUmVn
dWxhclRvSlNPTk9wZXJhdGlvbiA9IDA7CisgICAgICAgICRvYmplY3QtPkZvckFsbFBhcmVudHMo
JGludGVyZmFjZSwgc3ViIHsKKyAgICAgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSBzaGlm
dDsKKyAgICAgICAgICAgICRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uID0gMSBp
ZiAkb2JqZWN0LT5JbnRlcmZhY2VIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uKCRwYXJlbnRJbnRl
cmZhY2UpOworICAgICAgICB9LCAwKTsKKyAgICAgICAgCisgICAgICAgIGlmICgkYW55UGFyZW50
SGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCR0eXBlLT5pc1VuaW9uKSB7CisgICAgICAgICMg
RklYTUU6IFVuaW9uIHR5cGVzIHNob3VsZCBiZSBzdXBwb3J0ZWQgaWYgYWxsIHRoZSBtZW1iZXIg
dHlwZXMgYXJlIEpTT04gdHlwZXMuCisgICAgICAgIGRpZSAiRGVmYXVsdCB0b0pTT04gaXMgY3Vy
cmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIHVuaW9uIHR5cGVzLlxuIjsKKyAgICB9CisgICAgaWYg
KCRvYmplY3QtPklzRGljdGlvbmFyeVR5cGUoJHR5cGUpKSB7CisgICAgICAgICMgRklYTUU6IERp
Y3Rpb25hcnkgdHlwZXMgc2hvdWxkIGJlIHN1cHBvcnRlZCBpZiBhbGwgbWVtYmVycyBkZWNsYXJl
ZCBvbiB0aGUgZGljdGlvbmFyeSBhbmQgYWxsIGl0cyBpbmhlcml0ZWQgZGljdGlvbmFyaWVzIGFy
ZSBKU09OIHR5cGVzLgorICAgICAgICBkaWUgIkRlZmF1bHQgdG9KU09OIGlzIGN1cnJlbnRseSBu
b3Qgc3VwcG9ydGVkIGZvciBkaWN0aW9uYXJ5IHR5cGVzLlxuIjsKICAgICB9CiAKICAgICByZXR1
cm4gMDsKQEAgLTExNTYsMTcgKzExNjcsNiBAQCBzdWIgaGFzQ2FjaGVkQXR0cmlidXRlT3JDdXN0
b21HZXR0ZXJFeHRlCiAgICAgcmV0dXJuICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0NhY2hlZEF0dHJpYnV0ZX0gfHwgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3Vz
dG9tR2V0dGVyfTsKIH0KIAotc3ViIElzU2VyaWFsaXphYmxlQXR0cmlidXRlCi17Ci0gICAgbXkg
KCRvYmplY3QsICRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpID0gQF87Ci0KLSAgICBpZiAoJG9iamVj
dC0+SXNTZXF1ZW5jZVR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkgJiYgaGFzQ2FjaGVkQXR0cmlidXRl
T3JDdXN0b21HZXR0ZXJFeHRlbmRlZEF0dHJpYnV0ZSgkYXR0cmlidXRlKSkgewotICAgICAgICBk
aWUgIlNlcmlhbGl6ZXJzIGZvciBzZXF1ZW5jZSB0eXBlcyB3aXRoIENhY2hlZEF0dHJpYnV0ZSBv
ciBDdXN0b21HZXR0ZXIgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBw
b3J0ZWQuXG4iOwotICAgIH0KLQotICAgIHJldHVybiAkb2JqZWN0LT5Jc1NlcmlhbGl6YWJsZVR5
cGUoJGludGVyZmFjZSwgJGF0dHJpYnV0ZS0+dHlwZSk7Ci19Ci0KIHN1YiBHZXRJbnRlcmZhY2VF
eHRlbmRlZEF0dHJpYnV0ZXNGcm9tTmFtZQogewogICAgICMgRklYTUU6IEl0J3MgYmFkIHRvIGhh
dmUgYSBmdW5jdGlvbiBsaWtlIHRoaXMgdGhhdCBvcGVucyBhbm90aGVyIElETCBmaWxlIHRvIGFu
c3dlciBhIHF1ZXN0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI2NjUyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0xODY4LDcgKzE4NjgsNiBAQCBzdWIgUHJvdG90eXBlT3BlcmF0aW9uQ291bnQKICAgICAk
Y291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9IGlmICRp
bnRlcmZhY2UtPml0ZXJhYmxlOwogICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5t
YXBMaWtlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgICRjb3VudCAr
PSBzY2FsYXIgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNl
LT5zZXRMaWtlOwotICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIHJldHVy
biAkY291bnQ7CiB9CkBAIC0yNzgxLDExICsyNzgwLDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRO
YW1lZENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4iKSBpZiAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOYW1lZENvbnN0cnVjdG9yfTsKICAgICB9
CiAKLSAgICAjIFNlcmlhbGl6ZXIgZnVuY3Rpb24uCi0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsICR7Y2xhc3NOYW1lfSYg
dGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTtcbiIpOwotICAgIH0KLSAgICAKICAgICBt
eSAkbnVtQ3VzdG9tT3BlcmF0aW9ucyA9IDA7CiAgICAgbXkgJG51bUN1c3RvbUF0dHJpYnV0ZXMg
PSAwOwogCkBAIC0zMTg3LDcgKzMxODEsNiBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRh
YmxlCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0
aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBw
dXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAk
aW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+
c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3Bl
cmF0aW9ucykgewogICAgICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CiAgICAgICAgIG5leHQgaWYgKCRvcGVyYXRpb24t
PmlzU3RhdGljKTsKQEAgLTM5OTUsNyArMzk4OCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0
aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBw
dXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAk
aW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+
c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAKICAgICBteSBAYXR0cmlidXRlcyA9IEB7JGludGVy
ZmFjZS0+YXR0cmlidXRlc307CiAgICAgcHVzaChAYXR0cmlidXRlcywgQHskaW50ZXJmYWNlLT5t
YXBMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKQEAgLTQ2NzQsNyAr
NDY2Niw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogICAgIAogICAgIEdl
bmVyYXRlSXRlcmFibGVEZWZpbml0aW9uKCRpbnRlcmZhY2UpIGlmICRpbnRlcmZhY2UtPml0ZXJh
YmxlOwotICAgIEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24oJGludGVyZmFjZSwgJGNsYXNz
TmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVK
U0NsaWVudERhdGEuaCIpOwpAQCAtNTQyMCw3ICs1NDExLDEwIEBAIHN1YiBHZW5lcmF0ZU9wZXJh
dGlvbkRlZmluaXRpb24KIAogICAgIHJldHVybiBpZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAk
b3BlcmF0aW9uKTsKICAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNJdGVyYWJsZTsKLSAgICBy
ZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNTZXJpYWxpemVyOworICAgIAorICAgIGlmICgkb3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEZWZhdWx0fSkgeworICAgICAgICByZXR1cm4gR2Vu
ZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2Us
ICRjbGFzc05hbWUsICRvcGVyYXRpb24pOworICAgIH0KIAogICAgIG15ICRpc0N1c3RvbSA9IEhh
c0N1c3RvbU1ldGhvZCgkb3BlcmF0aW9uKTsKICAgICBteSAkaXNPdmVybG9hZGVkID0gJG9wZXJh
dGlvbi0+e292ZXJsb2Fkc30gJiYgQHskb3BlcmF0aW9uLT57b3ZlcmxvYWRzfX0gPiAxOwpAQCAt
NTU0MCwxMDAgKzU1MzQsOTUgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlvbgogICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgJGVuZEFwcGxlQ29weXJpZ2h0KSBpZiAkaW5BcHBsZUNvcHly
aWdodDsKIH0KIAotc3ViIEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24KK3N1YiBHZW5lcmF0
ZURlZmF1bHRPcGVyYXRpb25EZWZpbml0aW9uCiB7Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRjbGFz
c05hbWUpID0gQF87Ci0KLSAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPnR5cGUt
Pm5hbWU7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9w
ZXJhdGlvbikgPSBAXzsKIAotICAgIG15ICRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlID0gMDsK
LSAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5oYXNJbmhlcml0KSB7Ci0gICAgICAg
ICRjb2RlR2VuZXJhdG9yLT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAg
ICAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgICAgICAgICBpZiAoJHBhcmVu
dEludGVyZmFjZS0+c2VyaWFsaXphYmxlICYmICEkcGFyZW50U2VyaWFsaXplckludGVyZmFjZSkg
ewotICAgICAgICAgICAgICAgICRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlID0gJHBhcmVudElu
dGVyZmFjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwgMCk7Ci0gICAgICAgIGRpZSAiRmFp
bGVkIHRvIGZpbmQgcGFyZW50IGludGVyZmFjZSB3aXRoIFwic2VyaWFsaXplclwiIGZvciBcImlu
aGVyaXRcIiBzZXJpYWxpemVyIGluICRpbnRlcmZhY2VOYW1lXG4iIGlmICEkcGFyZW50U2VyaWFs
aXplckludGVyZmFjZTsKKyAgICBpZiAoJG9wZXJhdGlvbi0+bmFtZSBlcSAidG9KU09OIiAmJiAk
b3BlcmF0aW9uLT50eXBlLT5uYW1lIGVxICJvYmplY3QiKSB7CisgICAgICAgIHJldHVybiBHZW5l
cmF0ZURlZmF1bHRUb0pTT05PcGVyYXRpb25EZWZpbml0aW9uKCRvdXRwdXRBcnJheSwgJGludGVy
ZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgbXkgQHNlcmlhbGl6
ZWRBdHRyaWJ1dGVzID0gKCk7CisgICAgZGllICJbRGVmYXVsdF0gaXMgbm90IHN1cHBvcnQgZm9y
IGZvciB0aGlzIG9wZXJhdGlvbiAoIiAuICRvcGVyYXRpb24tPm5hbWUgLiAiKS4gSXQgaXMgb25s
eSBjdXJyZW50bHkgZGVmaW5lZCBmb3IgJ29iamVjdCB0b0pTT04oKTsnLiIKK30KIAotICAgIGZv
cmVhY2ggbXkgJGF0dHJpYnV0ZU5hbWUgKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRy
aWJ1dGVzfSkgewotICAgICAgICBteSAkZm91bmRBdHRyaWJ1dGUgPSAwOwotICAgICAgICBmb3Jl
YWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAg
ICAgIGlmICgkYXR0cmlidXRlTmFtZSBlcSAkYXR0cmlidXRlLT5uYW1lKSB7Ci0gICAgICAgICAg
ICAgICAgJGZvdW5kQXR0cmlidXRlID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzU2VyaWFsaXphYmxlQXR0cmlidXRlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQHNlcmlhbGl6ZWRBdHRyaWJ1dGVzLCAkYXR0cmli
dXRlKTsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAg
ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGllICJFeHBs
aWNpdCBcInNlcmlhbGl6ZXJcIiBhdHRyaWJ1dGUgXCIkYXR0cmlidXRlTmFtZVwiIGlzIG5vdCBz
ZXJpYWxpemFibGVcbiIgaWYgISRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzQXR0cmlidXRl
OwotICAgICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZGllICJGYWlsZWQgdG8gZmluZCBcInNlcmlhbGl6ZXJcIiBhdHRyaWJ1dGUgXCIkYXR0cmli
dXRlTmFtZVwiIGluICRpbnRlcmZhY2VOYW1lXG4iIGlmICEkZm91bmRBdHRyaWJ1dGU7Ci0gICAg
fQorc3ViIEdlbmVyYXRlRGVmYXVsdFRvSlNPTk9wZXJhdGlvbkRlZmluaXRpb24KK3sKKyAgICBt
eSAoJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKSA9IEBf
OwogCi0gICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUgPSAidG9KU09OIjsKLSAgICBteSAk
c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0
KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdp
dGh1Yi5pby93ZWJpZGwvI2VzLWRlZmF1bHQtdG9qc29uCiAKLSAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+Iik7CisgICAgbXkgQGluaGVy
aXRlbmNlU3RhY2sgPSAoKTsKKyAgICBwdXNoKEBpbmhlcml0ZW5jZVN0YWNrLCAkaW50ZXJmYWNl
KTsKKyAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBzdWIgewor
ICAgICAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gc2hpZnQ7CisgICAgICAgIHB1c2goQGluaGVy
aXRlbmNlU3RhY2ssICRwYXJlbnRJbnRlcmZhY2UpOworICAgIH0sIDApOwogCi0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU0M6OkpTT2JqZWN0KiBKUyR7aW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6
ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9JiB0aGlz
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KVxuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7CisgICAgbXkgJGZ1bmN0
aW9uTmFtZSA9IEdldEZ1bmN0aW9uTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0
aW9uKTsKKworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgJHtmdW5jdGlvbk5hbWV9Qm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiwgJHtjbGFzc05hbWV9KiBjYXN0ZWRUaGlzKVxuIik7CisgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpO1xuIik7CiAKLSAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXph
YmxlLT5oYXNJbmhlcml0KSB7Ci0gICAgICAgIG15ICRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNl
TmFtZSA9ICRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlLT50eXBlLT5uYW1lOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBKUyR7cGFyZW50U2VyaWFsaXpl
ckludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0KTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpO1xuIik7Ci0gICAg
fQotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+Iik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEds
b2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBlKCkp
O1xuIik7CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJpYWxpemVkQXR0cmlidXRl
cykgewotICAgICAgICAjIEZJWE1FOiBBdHRyaWJ1dGVzIHRoYXQgdGhyb3cgZXhjZXB0aW9ucyBh
cmUgbm90IHN1cHBvcnRlZCB3aXRoIHNlcmlhbGl6ZXJzIHlldC4KKyAgICAgd2hpbGUgKEBpbmhl
cml0ZW5jZVN0YWNrKSB7CisgICAgICAgIG15ICRjdXJyZW50SW50ZXJmYWNlID0gcG9wKEBpbmhl
cml0ZW5jZVN0YWNrKTsKIAotICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7Ci0g
ICAgICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRl
cmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvICR7bmFtZX1WYWx1ZSA9ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKLQotICAgICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzSW50ZXJmYWNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSkg
ewotICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUludGVyZmFjZU5hbWUgPSAkYXR0cmlidXRlLT50
eXBlLT5uYW1lOwotICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPmlzTnVsbGFibGUp
IHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISR7bmFtZX1W
YWx1ZS5pc051bGwoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50
ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHth
dHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7XG4i
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtu
YW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB9IGVsc2VcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qICR7bmFtZX1T
ZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+
KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOwor
ICAgICAgICBteSAkaGFzRGVmYXVsdFRvSlNPTk9wZXJhdGlvbiA9IDA7CisgICAgICAgIGZvcmVh
Y2ggbXkgJG9wZXJhdGlvbiAoQHskY3VycmVudEludGVyZmFjZS0+b3BlcmF0aW9uc30pIHsKKyAg
ICAgICAgICAgIGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEZWZhdWx0fSAm
JiAkb3BlcmF0aW9uLT5uYW1lIGVxICJ0b0pTT04iICYmICRvcGVyYXRpb24tPnR5cGUtPm5hbWUg
ZXEgIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICAkaGFzRGVmYXVsdFRvSlNPTk9wZXJhdGlv
biA9IDE7CisgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1W
YWx1ZSk7XG4iKTsKICAgICAgICAgfQorICAgICAgICBpZiAoJGhhc0RlZmF1bHRUb0pTT05PcGVy
YXRpb24pIHsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskY3VycmVudElu
dGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBuZXh0IGlmICRhdHRyaWJ1
dGUtPmlzU3RhdGljOworICAgICAgICAgICAgICAgIG5leHQgaWYgISRjb2RlR2VuZXJhdG9yLT5J
c0pTT05UeXBlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUpOwogCi0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAk
YXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH07CisgICAgICAgICAg
ICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAgICAgICAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zy
b21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpOzsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1
dGUtPm5hbWU7CisgICAgICAgICAgICAgICAgbXkgKCRiYXNlRnVuY3Rpb25OYW1lLCBAYXJndW1l
bnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAk
Y3VycmVudEludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAg
ICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bGx5UXVhbGlmaWVkSW1wbGVtZW50YXRpb25DYWxs
TmFtZSgkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSwgJGJhc2VGdW5jdGlvbk5hbWUsICJp
bXBsIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgICAgICBteSAkdG9KU0V4cHJlc3Npb24g
PSBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZSwgJGN1cnJlbnRJbnRl
cmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIs
ICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiKTsKKworICAgICAgICAgICAgICAgIG15ICRu
ZWVkc1J1bnRpbWVDaGVjayA9IE5lZWRzUnVudGltZUNoZWNrKCRjdXJyZW50SW50ZXJmYWNlLCAk
YXR0cmlidXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoJG5lZWRzUnVudGltZUNoZWNrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG15ICRydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcgPSBH
ZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZygkY3VycmVudEludGVyZmFjZSwg
JGF0dHJpYnV0ZSwgImNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoJHtydW50aW1lRW5hYmxlQ29uZGl0
aW9uYWxTdHJpbmd9KSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgXCIke2F0dHJpYnV0ZU5hbWV9XCIpLCAke3RvSlNFeHByZXNzaW9ufSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
XCIke2F0dHJpYnV0ZU5hbWV9XCIpLCAke3RvSlNFeHByZXNzaW9ufSk7XG4iKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiNlbmRpZlxuXG4iKSA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCi0gICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJc
biIpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1Cb2R5KEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3Qp
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlMke2ludGVyZmFjZU5hbWV9OjpzZXJp
YWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSlc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKUyR7aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7
c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgXCIke3NlcmlhbGl6ZXJGdW5jdGlvbk5hbWV9XCIpO1xuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Cisg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOworICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5h
bWV9KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTJHtpbnRlcmZhY2VOYW1lfT46
OmNhbGw8JHtmdW5jdGlvbk5hbWV9Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsIFwidG9KU09OXCIpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKIH0KIAogc3ViIEdlbmVyYXRlR2V0Q2FsbERh
dGEKQEAgLTc1ODUsNyArNzU3NCw2IEBAIHN1YiBHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3Bl
cnRpZXMKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVy
YXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogICAg
IHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlm
ICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNl
LT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLSAgICBwdXNo
KEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30pIGlm
ICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEBv
cGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmli
dXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQgbm90ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsKICAgICAgICAgbmV4dCBpZiAkb3BlcmF0aW9u
LT57b3ZlcmxvYWRJbmRleH0gJiYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9ID4gMTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5qc29uCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRl
cy5qc29uCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETEF0dHJpYnV0ZXMuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw5IEBA
CiAgICAgICAgICAgICAidmFsdWVzIjogWyIiLCAiUmVhZERPTSIsICJHZXR0ZXIiXSwKICAgICAg
ICAgICAgICJzdXBwb3J0c0Nvbmp1bmN0aW9uIjogdHJ1ZQogICAgICAgICB9LAorICAgICAgICAi
RGVmYXVsdCI6IHsKKyAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbIm9wZXJhdGlvbiJd
CisgICAgICAgIH0sCiAgICAgICAgICJEZWZhdWx0RGVmaW5lT3duUHJvcGVydHkiOiB7CiAgICAg
ICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQogICAgICAgICB9LApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0JKHJldmlz
aW9uIDI2NjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2Vy
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw2IEBAIHN0cnVjdCggSURMSW50ZXJmYWNl
ID0+IHsKICAgICBhc3luY0l0ZXJhYmxlID0+ICckJywgIyBVc2VkIGZvciBhc3ljbiBpdGVyYWJs
ZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExBc3luY0l0ZXJhYmxlJwogICAgIG1hcExpa2UgPT4g
JyQnLCAjIFVzZWQgZm9yIG1hcExpa2UgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMTWFwTGlrZScK
ICAgICBzZXRMaWtlID0+ICckJywgIyBVc2VkIGZvciBzZXRMaWtlIGludGVyZmFjZXMsIG9mIHR5
cGUgJ0lETFNldExpa2UnCi0gICAgc2VyaWFsaXphYmxlID0+ICckJywgIyBVc2VkIGZvciBzZXJp
YWxpemFibGUgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMU2VyaWFsaXphYmxlJwogICAgIGV4dGVu
ZGVkQXR0cmlidXRlcyA9PiAnJCcsCiB9KTsKIApAQCAtOTQsNyArOTMsNiBAQCBzdHJ1Y3QoIElE
TE9wZXJhdGlvbiA9PiB7CiAgICAgaXNDb25zdHJ1Y3RvciA9PiAnJCcsCiAgICAgaXNTdGF0aWMg
PT4gJyQnLAogICAgIGlzSXRlcmFibGUgPT4gJyQnLAotICAgIGlzU2VyaWFsaXplciA9PiAnJCcs
CiAgICAgaXNTdHJpbmdpZmllciA9PiAnJCcsCiAgICAgaXNNYXBMaWtlID0+ICckJywKICAgICBp
c1NldExpa2UgPT4gJyQnLApAQCAtMTU0LDE1ICsxNTIsNiBAQCBzdHJ1Y3QoIElETFNldExpa2Ug
PT4gewogICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCiB9KTsKIAotIyBodHRwczovL2hl
eWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtc2VyaWFsaXplcnMKLXN0cnVjdCggSURMU2VyaWFs
aXphYmxlID0+IHsKLSAgICBhdHRyaWJ1dGVzID0+ICdAJywgIyBMaXN0IG9mIGF0dHJpYnV0ZXMg
dG8gc2VyaWFsaXplCi0gICAgaGFzQXR0cmlidXRlID0+ICckJywgIyBzZXJpYWxpemVyID0geyBh
dHRyaWJ1dGUgfQotICAgIGhhc0luaGVyaXQgPT4gJyQnLCAjIHNlcmlhbGl6ZXIgPSB7IGluaGVy
aXQgfQotICAgIGhhc0dldHRlciA9PiAnJCcsICMgc2VyaWFsaXplciA9IHsgZ2V0dGVyIH0KLSAg
ICBvcGVyYXRpb25zID0+ICdAJywgIyB0b0pTT04gb3BlcmF0aW9uCi19KTsKLQogIyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtY29uc3RhbnRzCiBzdHJ1Y3QoIElETENvbnN0
YW50ID0+IHsKICAgICBuYW1lID0+ICckJywKQEAgLTU5OSw3ICs1ODgsNiBAQCBzdWIgY2xvbmVP
cGVyYXRpb24KICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKCRvcGVyYXRpb24t
PmlzQ29uc3RydWN0b3IpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzU3RhdGljKCRvcGVyYXRp
b24tPmlzU3RhdGljKTsKICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc0l0ZXJhYmxlKCRvcGVyYXRp
b24tPmlzSXRlcmFibGUpOwotICAgICRjbG9uZWRPcGVyYXRpb24tPmlzU2VyaWFsaXplcigkb3Bl
cmF0aW9uLT5pc1NlcmlhbGl6ZXIpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzU3RyaW5naWZp
ZXIoJG9wZXJhdGlvbi0+aXNTdHJpbmdpZmllcik7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNN
YXBMaWtlKCRvcGVyYXRpb24tPmlzTWFwTGlrZSk7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNT
ZXRMaWtlKCRvcGVyYXRpb24tPmlzU2V0TGlrZSk7CkBAIC02NTEsOSArNjM5LDkgQEAgbXkgJG5l
eHRUeXBlXzEgPSAnXihCeXRlU3RyaW5nfERPTVN0cmluZwogbXkgJG5leHRTcGVjaWFsc18xID0g
J14oZGVsZXRlcnxnZXR0ZXJ8bGVnYWN5Y2FsbGVyfHNldHRlcikkJzsKIG15ICRuZXh0RGVmaW5p
dGlvbnNfMSA9ICdeKGNhbGxiYWNrfGRpY3Rpb25hcnl8ZW51bXxleGNlcHRpb258aW50ZXJmYWNl
fG5hbWVzcGFjZXxwYXJ0aWFsfHR5cGVkZWYpJCc7CiBteSAkbmV4dEV4Y2VwdGlvbk1lbWJlcnNf
MSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xcW3xhbnl8Ym9vbGVhbnxi
eXRlfGNvbnN0fGRvdWJsZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxvcHRpb25hbHxzZXF1ZW5j
ZXxzaG9ydHxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKLW15ICRu
ZXh0SW50ZXJmYWNlTWVtYmVyc18xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3Ry
aW5nfGFueXxhdHRyaWJ1dGV8Ym9vbGVhbnxieXRlfGNvbnN0fGNvbnN0cnVjdG9yfGRlbGV0ZXJ8
ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGxlZ2FjeWNhbGxlcnxsb25nfG9iamVjdHxvY3Rl
dHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5n
aWZpZXJ8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4
dEludGVyZmFjZU1lbWJlcnNfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmlu
Z3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxjb25zdHJ1Y3RvcnxkZWxldGVyfGRv
dWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsZWdhY3ljYWxsZXJ8bG9uZ3xvYmplY3R8b2N0ZXR8
cmVhZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8
dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0TmFtZXNwYWNlTWVt
YmVyc18xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFu
fGJ5dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNo
b3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRQ
YXJ0aWFsSW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZT
dHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8ZGVsZXRlcnxkb3VibGV8Zmxv
YXR8Z2V0dGVyfGluaGVyaXR8bGVnYWN5Y2FsbGVyfGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRvbmx5
fHNlcXVlbmNlfHNlcmlhbGl6ZXJ8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1i
b2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKK215ICRuZXh0UGFydGlhbElu
dGVyZmFjZU1lbWJlcl8xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFu
eXxhdHRyaWJ1dGV8Ym9vbGVhbnxieXRlfGNvbnN0fGRlbGV0ZXJ8ZG91YmxlfGZsb2F0fGdldHRl
cnxpbmhlcml0fGxlZ2FjeWNhbGxlcnxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5j
ZXxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRTaW5nbGVUeXBlXzEgPSAnXihCeXRlU3RyaW5n
fERPTVN0cmluZ3xVU1ZTdHJpbmd8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25nfG9iamVj
dHxvY3RldHxzZXF1ZW5jZXxzaG9ydHxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNp
Z25lZCkkJzsKIG15ICRuZXh0QXJndW1lbnROYW1lXzEgPSAnXihhc3luY3xhdHRyaWJ1dGV8Y2Fs
bGJhY2t8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5fGVudW18Z2V0dGVyfGlu
Y2x1ZGVzfGluaGVyaXR8aW50ZXJmYWNlfGl0ZXJhYmxlfG1hcGxpa2V8bWl4aW58bmFtZXNwYWNl
fHBhcnRpYWx8cmVhZG9ubHl8cmVxdWlyZWR8c2V0bGlrZXxzZXR0ZXJ8c3RhdGljfHN0cmluZ2lm
aWVyfHR5cGVkZWZ8dW5yZXN0cmljdGVkKSQnOwogbXkgJG5leHRDb25zdFZhbHVlXzEgPSAnXihm
YWxzZXx0cnVlKSQnOwpAQCAtMTE4NiwxMiArMTE3NCw2IEBAIHN1YiBwYXJzZVBhcnRpYWxJbnRl
cmZhY2VNZW1iZXIKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7CiAgICAg
ICAgIHJldHVybiAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRleHRlbmRlZEF0dHJpYnV0
ZUxpc3QpOwogICAgIH0KLQotICAgICMgRklYTUU6IFJlbW92ZS4gVGhpcyBpcyBubyBsb25nZXIg
cGFydCBvZiBXZWJJREwuIFJlcGxhY2Ugd2l0aCBbU2VyaWFsaXphYmxlXS4KLSAgICBpZiAoJG5l
eHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFy
c2VTZXJpYWxpemVyKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIH0KLQogICAgIGlmICgk
bmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSA9fiAvJG5l
eHRPcGVyYXRpb25fMS8pIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvbigk
ZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICAgfQpAQCAtMTcxNCwxMTQgKzE2OTYsNiBAQCBz
dWIgcGFyc2VDb25zdHJ1Y3RvcgogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5l
eHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0KIAotc3ViIHBhcnNlU2VyaWFsaXplcgotewotICAg
IG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0
OwotCi0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52
YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInNlcmlhbGl6ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIG15
ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgICAgICBteSAkbmV3RGF0YU5vZGU7Ci0g
ICAgICAgIGlmICgkbmV4dC0+dmFsdWUoKSBuZSAiOyIpIHsKLSAgICAgICAgICAgICRuZXdEYXRh
Tm9kZSA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6ZXJSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3Qp
OwotICAgICAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSBJRExTZXJpYWxpemFibGUtPm5ldygp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbXkgJHRvSlNPTk9wZXJhdGlvbiA9IElETE9wZXJhdGlv
bi0+bmV3KCk7Ci0gICAgICAgICR0b0pTT05PcGVyYXRpb24tPm5hbWUoInRvSlNPTiIpOwotCi0g
ICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNWYWxpZEZvckNvbnRleHQoJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCwgIm9wZXJhdGlvbiIpOwotICAgICAgICAkdG9KU09OT3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgICAg
ICR0b0pTT05PcGVyYXRpb24tPmlzU2VyaWFsaXplcigxKTsKLSAgICAgICAgcHVzaChAeyRuZXdE
YXRhTm9kZS0+b3BlcmF0aW9uc30sICR0b0pTT05PcGVyYXRpb24pOwotCi0gICAgICAgICRzZWxm
LT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiOyIsIF9fTElORV9fKTsKLSAg
ICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAgICB9Ci0gICAgJHNlbGYtPmFzc2VydFVuZXhw
ZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQotCi1zdWIgcGFyc2VTZXJp
YWxpemVyUmVzdAotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0
cmlidXRlTGlzdCA9IHNoaWZ0OwotCi0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7
Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0
VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVfXyk7Ci0KLSAgICAgICAg
cmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCk7Ci0KLSAgICB9Ci0gICAg
aWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuIHx8ICRuZXh0LT52YWx1ZSgpIGVx
ICIoIikgewotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlT3BlcmF0aW9uUmVzdCgkZXh0ZW5k
ZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICB9Ci19Ci0KLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0
ZXJuCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5l
eHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAieyIpIHsKLSAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ7IiwgX19MSU5FX18pOwot
ICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBJRExTZXJpYWxpemFibGUtPm5ldygpOwotICAgICAg
ICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcygkbmV3RGF0YU5vZGUpOwotICAg
ICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIn0iLCBfX0xJ
TkVfXyk7Ci0gICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7Ci0gICAgfQotICAgIGlmICgkbmV4
dC0+dmFsdWUoKSBlcSAiWyIpIHsKLSAgICAgICAgZGllICJTZXJpYWxpemF0aW9uIG9mIGxpc3Rz
IHBhdHRlcm4gaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKLSAgICB9Ci0gICAgaWYgKCRu
ZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgIG15IEBhdHRyaWJ1dGVz
ID0gKCk7Ci0gICAgICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOwotICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAg
cHVzaChAYXR0cmlidXRlcywgJHRva2VuLT52YWx1ZSgpKTsKLQotICAgICAgICBteSAkbmV3RGF0
YU5vZGUgPSBJRExTZXJpYWxpemFibGUtPm5ldygpOwotICAgICAgICAkbmV3RGF0YU5vZGUtPmF0
dHJpYnV0ZXMoXEBhdHRyaWJ1dGVzKTsKLQotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwot
ICAgIH0KLSAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBf
X0xJTkVfXyk7Ci19Ci0KLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzCi17Ci0gICAg
bXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkc2VyaWFsaXphYmxlID0gc2hpZnQ7Ci0KLSAgICBt
eSBAYXR0cmlidXRlcyA9ICgpOwotICAgIG15IEBpZGVudGlmaWVycyA9ICRzZWxmLT5wYXJzZUlk
ZW50aWZpZXJMaXN0KCk7Ci0KLSAgICBmb3IgbXkgJGlkZW50aWZpZXIgKEBpZGVudGlmaWVycykg
ewotICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImdldHRlciIpIHsKLSAgICAgICAgICAgICRz
ZXJpYWxpemFibGUtPmhhc0dldHRlcigxKTsKLSAgICAgICAgICAgIGRpZSAiU2VyaWFsaXplciBn
ZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJpbmhlcml0IikgewotICAgICAgICAgICAgJHNl
cmlhbGl6YWJsZS0+aGFzSW5oZXJpdCgxKTsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImF0dHJpYnV0ZSIpIHsKLSAgICAgICAgICAg
ICRzZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSgxKTsKLSAgICAgICAgICAgICMgQXR0cmlidXRl
cyB3aWxsIGJlIGZpbGxlZCBpbiB2aWEgYXBwbHlNZW1iZXJMaXN0KCkKLSAgICAgICAgICAgIG5l
eHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkaWRlbnRpZmllcik7
Ci0gICAgfQotCi0gICAgJHNlcmlhbGl6YWJsZS0+YXR0cmlidXRlcyhcQGF0dHJpYnV0ZXMpOwot
fQotCiBzdWIgcGFyc2VJZGVudGlmaWVyTGlzdAogewogICAgIG15ICRzZWxmID0gc2hpZnQ7CkBA
IC0zMzYyLDIzICszMjM2LDYgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQotICAgICAgICBpZiAocmVmKCRpdGVtKSBlcSAi
SURMU2VyaWFsaXphYmxlIikgewotICAgICAgICAgICAgJGludGVyZmFjZS0+c2VyaWFsaXphYmxl
KCRpdGVtKTsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
JGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7Ci0gICAgICAgIG15ICRudW1TZXJpYWxpemVyQXR0
cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfTsKLSAgICAg
ICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzQXR0cmlidXRlKSB7Ci0gICAgICAg
ICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsK
LSAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1
dGVzfSwgJGF0dHJpYnV0ZS0+bmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzaWYg
KCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7Ci0gICAgICAgICAgICBmb3JlYWNoIG15
ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgICAgICAg
ICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSwgJGF0dHJpYnV0
ZS0+bmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNp
ZXMuZGVwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVz
LmRlcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQCBXZWJET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IuCiBKU1Rlc3RET01KSVQuaDogCiBET01UZXN0RE9NSklULmg6
IAogV2ViRE9NVGVzdERPTUpJVC5oOiAKK0pTVGVzdERlZmF1bHRUb0pTT04uaDogCitET01UZXN0
RGVmYXVsdFRvSlNPTi5oOiAKK1dlYkRPTVRlc3REZWZhdWx0VG9KU09OLmg6IAogSlNUZXN0RGVy
aXZlZERpY3Rpb25hcnkuaDogCiBET01UZXN0RGVyaXZlZERpY3Rpb25hcnkuaDogCiBXZWJET01U
ZXN0RGVyaXZlZERpY3Rpb25hcnkuaDogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwJKHJldmlzaW9uIDI2NjUyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDUgKzM1LDUgQEAKICAgICBbU2VjdXJlQ29udGV4dF0gYm9vbGVhbiBnZXRT
ZWNyZXRCb29sZWFuKCk7CiAgICAgW0NvbmRpdGlvbmFsPVRFU1RfRkVBVFVSRSwgU2VjdXJlQ29u
dGV4dCwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gYm9vbGVhbiB0ZXN0RmVhdHVyZUdl
dFNlY3JldEJvb2xlYW4oKTsKIAotICAgIHNlcmlhbGl6ZXI7CisgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQz
NSw4ICs0MzUsNiBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93CiAK
ICAgICBzdHJpbmdpZmllciBhdHRyaWJ1dGUgVVNWU3RyaW5nIHN0cmluZ2lmaWVyQXR0cmlidXRl
OwogCi0gICAgc2VyaWFsaXplciA9IHtjcmVhdGUsIHJlYWRPbmx5U3RyaW5nQXR0ciwgZW51bUF0
dHIsIGxvbmdBdHRyfTsKLQogICAgIHVuZGVmaW5lZCBidWZmZXJTb3VyY2VQYXJhbWV0ZXIoQnVm
ZmVyU291cmNlIGRhdGEpOwogCiAgICAgbGVnYWN5Y2FsbGVyIHVuZGVmaW5lZCBsZWdhY3lDYWxs
ZXJOYW1lZChsb25nIHBhcmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkocmV2aXNpb24g
MjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJp
YWxpemF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNSArNDEsNSBAQCBpbnRlcmZhY2Ug
VGVzdFNlcmlhbGl6YXRpb24gewogICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxET01TdHJpbmc+IGVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGU7CiAgICAgYXR0cmlidXRlIHNlcXVlbmNlPFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsPiB0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGU7
CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCShy
ZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjYsNSArMjYs
NSBAQAogaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA6IFRlc3RTZXJpYWxpemF0
aW9uIHsKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGluaGVyaXRMb25nQXR0
cmlidXRlOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwgYXR0cmlidXRlIH07CisgICAg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbC5pZGwJKHJldmlzaW9uIDI2NjUyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDUgKzI3LDUgQEAgaW50ZXJmYWNlIFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsIAogICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAg
ZmluYWxMb25nQXR0cmlidXRlRm9vOwogICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAg
ICAgZmluYWxMb25nQXR0cmlidXRlQmFyOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwg
ZmluYWxMb25nQXR0cmlidXRlQmFyIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjY2NTI5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU1Rl
c3RDYWxsVHJhY2VyLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJKU1Rlc3RET01KSVQuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZh
dWx0VG9KU09OLmgiCiAjaW5jbHVkZSAiSlNUZXN0RG9tYWluU2VjdXJpdHkuaCIKICNpbmNsdWRl
ICJKU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgiCiAjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQuaCIKQEAgLTE3OCw2ICsxNzksOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RE
b21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwpAQCAtMzA3LDExICszMTAsMTEgQEAgdXNpbmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0
b3IgPSBKUwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xv
YmFsT2JqZWN0VGFibGVJbmRleFsyNjddID0gewogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzNiwg
LTEgfSwKKyAgICB7IDM3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAwLCAtMSB9LAog
ICAgIHsgNCwgMjYzIH0sCi0gICAgeyA0MCwgLTEgfSwKKyAgICB7IDQxLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzE5LDE1ICsz
MjIsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTEsIC0x
IH0sCisgICAgeyA1MiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDE5LCAtMSB9LAorICAgIHsgMjAsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2MywgLTEg
fSwKKyAgICB7IDY0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzQxLDE0ICszNDQsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMzAsIC0xIH0sCisgICAgeyAzMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NiwgLTEgfSwKLSAgICB7IDksIDI1OCB9LAorICAg
IHsgNjcsIC0xIH0sCisgICAgeyAxMCwgMjU4IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zNTYsOCArMzU5LDggQEAgc3RhdGljIGNvbnN0
IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzQsIC0xIH0sCi0gICAgeyAxNiwgMjY0IH0s
CisgICAgeyAzNSwgLTEgfSwKKyAgICB7IDE3LCAyNjQgfSwKICAgICB7IDYsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzY5LDE0ICszNzIsMTQgQEAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0xIH0sCisgICAgeyAzMywg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDE4LCAyNjUgfSwKKyAgICB7IDE5LCAyNjUgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM5MSw2NCArMzk0LDY0IEBAIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU3LCAtMSB9LAotICAgIHsgLTEsIC0xIH0s
CisgICAgeyA1OCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyMCwg
MjU2IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU4LCAtMSB9LAotICAgIHsgMTUsIC0xIH0s
CisgICAgeyAyMSwgMjU2IH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDU5LCAtMSB9LAorICAg
IHsgMTYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQyLCAtMSB9LAotICAgIHsgMTQs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDQzLCAtMSB9LAorICAgIHsgMTUsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyAzMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMzIsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDcsIC0xIH0sCi0gICAgeyAyMSwgLTEgfSwKKyAgICB7
IDksIC0xIH0sCisgICAgeyA0OCwgLTEgfSwKKyAgICB7IDIyLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAyLCAtMSB9LAotICAgIHsgMzMsIC0xIH0sCisgICAgeyAzNCwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE3
LCAtMSB9LAorICAgIHsgMTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAg
IHsgNTUsIC0xIH0sCisgICAgeyA1NiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyAyNywgLTEgfSwKKyAgICB7IDI4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDM4LCAtMSB9LAorICAgIHsgMzksIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTAsIC0xIH0sCisgICAgeyA1MSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgMTAsIC0xIH0sCisgICAgeyAxMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ2NCwxMiArNDY3LDEy
IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY0LCAtMSB9LAor
ICAgIHsgNjUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCi0gICAgeyAyOCwgLTEgfSwKLSAgICB7IDI1LCAyNjIgfSwKKyAgICB7IDI5LCAt
MSB9LAorICAgIHsgMjYsIDI2MiB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LApAQCAtNDc5LDkgKzQ4Miw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDEyLCAyNTcgfSwKKyAgICB7IDEzLCAyNTcgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgNTksIC0xIH0sCisgICAgeyA2MCwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ5MCwxNyArNDkzLDE3
IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI5LCAyNjYgfSwK
KyAgICB7IDMwLCAyNjYgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTMsIC0xIH0sCisgICAg
eyAxNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjIsIC0xIH0sCisgICAgeyA2Mywg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NSwgLTEgfSwKKyAgICB7
IDQ2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LApAQCAtNTEzLDcgKzUxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDUzLCAtMSB9LAorICAgIHsgNTQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01MzUsNDQgKzUzOCw0NCBAQCBzdGF0
aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NCwgMjYxIH0sCisgICAgeyA0
NSwgMjYxIH0sCiAgICAgeyA3LCAyNjAgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjAsIC0x
IH0sCisgICAgeyA2MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDMsIC0xIH0sCisg
ICAgeyA0NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTEsIC0xIH0sCisgICAgeyAxMiwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjIsIC0xIH0sCisgICAgeyAyMywgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNCwgLTEgfSwKKyAgICB7IDI1
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQxLCAtMSB9
LAorICAgIHsgNDIsIC0xIH0sCiAgICAgeyAzLCAtMSB9LAotICAgIHsgNDgsIC0xIH0sCi0gICAg
eyAtMSwgLTEgfSwKICAgICB7IDQ5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA1MCwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDIzLCAyNTkgfSwKLSAgICB7IDI2LCAtMSB9LAotICAgIHsgMzUsIC0xIH0sCi0gICAg
eyAzNywgLTEgfSwKLSAgICB7IDM5LCAtMSB9LAotICAgIHsgNDYsIC0xIH0sCi0gICAgeyA1Miwg
LTEgfSwKLSAgICB7IDU0LCAtMSB9LAotICAgIHsgNTYsIC0xIH0sCi0gICAgeyA2MSwgLTEgfSwK
LSAgICB7IDY1LCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAyNCwgMjU5IH0sCisgICAg
eyAyNywgLTEgfSwKKyAgICB7IDM2LCAtMSB9LAorICAgIHsgMzgsIC0xIH0sCisgICAgeyA0MCwg
LTEgfSwKKyAgICB7IDQ3LCAtMSB9LAorICAgIHsgNTMsIC0xIH0sCisgICAgeyA1NSwgLTEgfSwK
KyAgICB7IDU3LCAtMSB9LAorICAgIHsgNjIsIC0xIH0sCisgICAgeyA2NiwgLTEgfSwKIH07CiAK
IApAQCAtNTk1LDYgKzU5OCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RH
bG9iYWwKICNlbmRpZgogICAgIHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RET01KSVQiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIlRlc3REZWZhdWx0VG9KU09O
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9y
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcikgfSB9LAog
ICAgIHsgIlRlc3REb21haW5TZWN1cml0eSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVz
dERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWlu
U2VjdXJpdHlDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RFbmFibGVkQnlTZXR0aW5nIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9y
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcikgfSB9
LAogICAgIHsgIlRlc3RFdmVudENvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcikgfSB9LApAQCAtNjY3LDcgKzY3MSw3IEBAIHN0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWwKICAgICB7ICJyZWd1bGFyT3Bl
cmF0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1
bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlv
biksIChpbnRwdHJfdCkgKDEpIH0gfSwKIH07CiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNU
ZXN0R2xvYmFsT2JqZWN0VGFibGUgPSB7IDY3LCAyNTUsIHRydWUsIEpTVGVzdEdsb2JhbE9iamVj
dDo6aW5mbygpLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZVZhbHVlcywgSlNUZXN0R2xvYmFsT2Jq
ZWN0VGFibGVJbmRleCB9Oworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RHbG9iYWxPYmpl
Y3RUYWJsZSA9IHsgNjgsIDI1NSwgdHJ1ZSwgSlNUZXN0R2xvYmFsT2JqZWN0OjppbmZvKCksIEpT
VGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4
IH07CiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0K
QEAgLTEwOTcsNiArMTEwMSwyOSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01K
SVRDb25zCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RE9NSklUIik7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OOjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9i
amVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTiIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RE
ZWZhdWx0VG9KU09OIiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT04iKSksIHZhbHVlKTsKK30K
KworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTiIpOworfQorCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDEyICs2MCwxMiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNl
Y3JldEJvb2xlYW4oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiAjZW5k
aWYKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uU3ltYm9sSXRlcmF0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uRW50cmllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25LZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVl
cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAogLy8gQXR0cmlidXRlcwogCkBAIC0x
NTAsMTEgKzE1MCwxMSBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9kZVBy
CiAjZWxzZQogICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCiAjZW5kaWYKKyAg
ICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJf
dCkgKDApIH0gfSwKICAgICB7ICJlbnRyaWVzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25F
bnRyaWVzKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImtleXMiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvbktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidmFsdWVzIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAg
ICAgeyAiZm9yRWFjaCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdO
YXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCksIChpbnRw
dHJfdCkgKDEpIH0gfSwKLSAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
blRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rl
c3ROb2RlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZSIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9kZVByb3RvdHlwZSkg
fTsKQEAgLTM4Myw2ICszODMsMjIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3ROb2RlUAogCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzKQoreworICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRv
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIHRvSlM8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm5hbWUoKSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJ0b0pTT04iKTsKK30KKwogc3RydWN0IFRlc3ROb2RlSXRlcmF0b3JUcmFpdHMgewogICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNET01JdGVyYXRvclR5cGUgdHlwZSA9IEpTRE9NSXRlcmF0b3JUeXBl
OjpTZXQ7CiAgICAgdXNpbmcgS2V5VHlwZSA9IHZvaWQ7CkBAIC00ODYsMjkgKzUwMiw2IEBAIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVh
Y2hDYWxsZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIpOwog
fQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1
dG8gbmFtZVZhbHVlID0ganNUZXN0Tm9kZU5hbWVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBu
YW1lVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3ROb2RlKiB0aGlz
T2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9kZTo6c2VyaWFs
aXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9k
ZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHJldmlzaW9uIDI2NjUyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
LSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3Qm
LCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAkocmV2aXNpb24gMjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTQsNyArMTU5
NCw2IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRp
dGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJG
dW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3Ry
aW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAK
QEAgLTIzMzQsNyArMjMzMyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm8KICAgICB7ICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9u
KSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5k
b3dBbmRXb3JrZXJGdW5jdGlvbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24pLCAoaW50cHRyX3QpICgwKSB9IH0s
CiAgICAgeyAidG9TdHJpbmciLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcpLCAo
aW50cHRyX3QpICgwKSB9IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkK
ICAgICB7ICJDT05ESVRJT05BTF9DT05TVCIsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkNvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9uZykoMCkg
fSB9LAogI2Vsc2UKQEAgLTk0MDEsNDEgKzkzOTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+Ojpj
YWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SlNPYmplY3QqIEpT
VGVzdE9iajo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gY3JlYXRlVmFsdWUgPSBqc1Rlc3RP
YmpDcmVhdGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlIiksIGNyZWF0ZVZhbHVlKTsKLQotICAg
IGF1dG8gcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0
dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5n
QXR0clZhbHVlKTsKLQotICAgIGF1dG8gZW51bUF0dHJWYWx1ZSA9IGpzVGVzdE9iakVudW1BdHRy
R2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImVudW1BdHRyIiksIGVudW1BdHRyVmFsdWUpOwotCi0gICAgYXV0
byBsb25nQXR0clZhbHVlID0ganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9u
Z0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
Qm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
T2JqOjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKLX0KLQog
SlNDOjpJc29TdWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMjY2NTI5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIG11
dGFibGUgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0ZTE7
CiAgICAgbXV0YWJsZSBKU0M6OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1fY2FjaGVkQXR0
cmlidXRlMjsKICNpZiBFTkFCTEUoQ09ORElUSU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uLmNwcAkocmV2aXNpb24gMjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDksNjQgKzYwOSwyNSBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50
ZXJmCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3ZWxm
dGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rl
c3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb24qIGNhc3RlZFRo
aXMpCiB7Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGZpcnN0U3RyaW5nQXR0cmlidXRlVmFs
dWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7
Ci0KLSAgICBhdXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRp
b25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1
dGUiKSwgc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5y
ZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZSIpLCBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVW
YWx1ZSk7Ci0KLSAgICBhdXRvIGZpZnRoTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFs
aXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdBdHRy
aWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1
dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHNpeHRoVHlwZWRl
ZkF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxl
QXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwot
ICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBhdXRvKiBzZXZlbnRoRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKj4oc2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNl
cmlhbGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVWYWx1
ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKLSAgICBhdXRvKiBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXpl
ZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgaWYg
KCFuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZS5pc051bGwo
KSkgewotICAgICAgICBhdXRvKiBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpz
ZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsKj4obmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
VmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVT
ZXJpYWxpemVkVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdGVudGhGcm96ZW5BcnJheUF0dHJp
YnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlID0g
anNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmli
dXRlVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJp
bmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0
ZSIpLCB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
c2Vjb25kTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUi
KSwgdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9u
Z0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuZmlmdGhMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCB0
b0pTPElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0
aFR5cGVkZWZBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
IiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkp
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
Im5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51
bGxhYmxlPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwubmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRo
RnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxP
YmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2
ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0
ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMjY2NTI5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxp
emUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0LmNwcAkocmV2aXNpb24gMjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDIyIEBACiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJvb2xlYW4uaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRO
dWxsYWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgi
CiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RP
TVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlLmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3Jl
SlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheS5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVj
dENvbnN0cnVjdG9yLmg+CkBAIC0yMTcsMjIgKzIyNiwyNiBAQCBib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0SW5oZXJpCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdD46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwogfQogCi1KU0M6OkpTT2JqZWN0
KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVj
dCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3N0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNP
TkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiBjYXN0ZWRUaGlzKQogewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb246
OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qp
OwotCi0gICAgYXV0byBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbmhlcml0
TG9uZ0F0dHJpYnV0ZSIpLCBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0KiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQ6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5n
QXR0cmlidXRlIiksIHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUi
KSwgdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNl
Y29uZExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiks
IHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdB
dHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9K
UzxJRExEb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhU
eXBlZGVmQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIp
LCB0b0pTPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KGxleGlj
YWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5zZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJl
Y3RseUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZW50aEZy
b3plbkFycmF5QXR0cmlidXRlIiksIHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUi
KSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJp
bmhlcml0TG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCShyZXZpc2lvbiAyNjY1
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAo
bW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShyZXZpc2lvbiAy
NjY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
NiwyMiBAQAogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnRCb29sZWFuLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50
ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVsbGFibGUuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVuY2VzLmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUg
IkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNs
dWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUg
IkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgpAQCAtMjUx
LDIyICsyNjAsMjggQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRgog
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46
OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
QmFyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKTsKIH0KIAotSlNDOjpKU09iamVjdCogSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25U
b0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiBjYXN0ZWRUaGlzKQogewotICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0KTsKLQotICAgIGF1dG8gZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUg
PSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0
dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCBmaW5hbExvbmdBdHRyaWJ1
dGVCYXJWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5j
dGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIHRoaXNPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
OjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKS5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pT
PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJz
dFN0cmluZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRl
KCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJp
Y3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIHRvSlM8
SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdB
dHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHRvSlM8SURMRG91YmxlPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgp
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZh
Y2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwg
dG9KUzxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFs
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0
ZSIpLCB0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURM
U2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1
dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVu
Y2U8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxH
bG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC50d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1
dGUiKSwgdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmluaGVyaXRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpLCB0b0pTPElE
TExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0
cmlidXRlRm9vKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCB0b0pTPElETExvbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuaAkocmV2aXNpb24gMjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01N
YXRyaXhSZWFkT25seS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1h
dHJpeFJlYWRPbmx5LmlkbAkocmV2aXNpb24gMjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtOTcsNSArOTcsNSBAQAog
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFycmF5KCk7CiAK
ICAgICBbRXhwb3NlZD1XaW5kb3csIE1heVRocm93RXhjZXB0aW9uXSBzdHJpbmdpZmllcjsKLSAg
ICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNP
TigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHJl
dmlzaW9uIDI2NjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtNDUsNSArNDUsNSBAQAogCiAgICAgW01heVRocm93RXhjZXB0
aW9uXSBET01Qb2ludCBtYXRyaXhUcmFuc2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4SW5pdCBtYXRy
aXgpOwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCShyZXZpc2lvbiAy
NjY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9pbnQgcDQ7IC8v
IEZJWE1FOiBTaG91bGQgYmUgW1NhbWVPYmplY3RdLgogICAgIFtOZXdPYmplY3RdIERPTVJlY3Qg
Z2V0Qm91bmRzKCk7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVm
YXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01S
ZWN0UmVhZE9ubHkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0
UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAyNjY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
UmVjdFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBAQAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZG91YmxlIGJvdHRvbTsKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSBsZWZ0OwogCi0gICAgc2VyaWFsaXplciA9
IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHJldmlzaW9uIDI2NjUy
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDUgKzQxLDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFt
cDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBzdGFydFRpbWU7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247Ci0gICAgc2VyaWFsaXpl
ciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWlu
Zy5pZGwJKHJldmlzaW9uIDI2NjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2VSZXNvdXJjZVRpbWluZy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUzLDUgKzUzLDUgQEAgdHlw
ZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NSGlnaFJlc1RpbWVTdGFtcCByZXNwb25zZUVuZDsKICAgICBbRW5hYmxlZEF0UnVudGltZT1T
ZXJ2ZXJUaW1pbmddIHJlYWRvbmx5IGF0dHJpYnV0ZSBGcm96ZW5BcnJheTxQZXJmb3JtYW5jZVNl
cnZlclRpbWluZz4gc2VydmVyVGltaW5nOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwg
YXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAkocmV2
aXNpb24gMjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRp
bWluZy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDUgKzM2LDUgQEAgdHlwZWRlZiBkb3VibGUg
RE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5h
bWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICBzZXJp
YWxpemVyID0ge2F0dHJpYnV0ZX07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAkocmV2aXNp
b24gMjY2NTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDUgKzU0LDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBsb25nIGxvYWRFdmVudFN0YXJ0OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZEV2ZW50RW5kOwogCi0gICAgc2VyaWFsaXplciA9IHsg
YXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407930</attachid>
            <date>2020-09-03 17:00:26 -0700</date>
            <delta_ts>2020-09-04 09:22:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200903170025.patch</filename>
            <type>text/plain</type>
            <size>119281</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA5LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRsOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0lj
ZUNhbmRpZGF0ZTo6dG9KU09OIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNl
Q2FuZGlkYXRlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25E
ZXNjcmlwdGlvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50
QWRkcmVzcy5pZGw6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVz
cG9uc2UuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToK
KyAgICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAo
SXNKU09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxp
emFibGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAg
ICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRh
YmxlKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJh
dGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlv
bkRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVm
aW5pdGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgor
ICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6CisgICAg
ICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlNZW1iZXJM
aXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAgIChwYXJz
ZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBh
dHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6
IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVm
YXVsdFRvSlNPTkNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEds
b2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT05Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRvSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzZXJpYWxpemUpOiBE
ZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iajo6c2VyaWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6IERlbGV0ZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNP
TkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZSk6IERlbGV0
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxl
bWVudGFsRGVwZW5kZW5jaWVzLmRlcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE5vZGUuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRs
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbC5pZGw6CisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoK
KyAgICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1
YWQuaWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBh
Z2UvUGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291
cmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlk
bDoKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKwogMjAyMC0wOS0wMyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1ZGlvRGVzdGluYXRp
b25Ob2RlLm1heENoYW5uZWxDb3VudCBhbHdheXMgcmV0dXJucyAwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRs
CShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWFEZXZpY2VLaW5kIGtpbmQ7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBsYWJlbDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGdyb3VwSWQ7Ci0gICAgc2VyaWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwogCiAvLyBGSVhNRSAxNjk4NzE6IG1pc3NpbmcgSW5wdXRE
ZXZpY2VJbmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuY3BwCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDE1IEBAIFJlZjxSVENJY2VDYW5kaWRhdGU+IFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlk
YXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXgpKTsKIH0KIAorUlRDSWNlQ2FuZGlkYXRlSW5pdCBS
VENJY2VDYW5kaWRhdGU6OnRvSlNPTigpIGNvbnN0Cit7CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5p
dCByZXN1bHQ7CisgICAgcmVzdWx0LmNhbmRpZGF0ZSA9IG1fY2FuZGlkYXRlOworICAgIHJlc3Vs
dC5zZHBNaWQgPSBtX3NkcE1pZDsKKyAgICByZXN1bHQuc2RwTUxpbmVJbmRleCA9IG1fc2RwTUxp
bmVJbmRleDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAkocmV2aXNpb24gMjY2
NTU5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldENhbmRpZGF0ZShTdHJpbmcmJiBjYW5kaWRhdGUpIHsgbV9jYW5kaWRhdGUgPSBXVEZNb3Zl
KGNhbmRpZGF0ZSk7IH0KIAorICAgIFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9KU09OKCkgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgUlRDSWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRl
LCBjb25zdCBTdHJpbmcmIHNkcE1pZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHNkcE1MaW5l
SW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDYgKzUzLDUgQEAKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgcmVs
YXRlZFBvcnQKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgdWZyYWcKIAotICAgIC8vIEZJ
WE1FIDE2OTY2MjogYWRkIHVmcmFnIHRvIHRoZSBsaXN0Ci0gICAgc2VyaWFsaXplciA9IHtjYW5k
aWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0
b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZpc2lvbiAyNjY1
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgUlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc2RwOwogCi0gICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXlt
ZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJldmlzaW9uIDI2
NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEFk
ZHJlc3MuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgSW1wbGVtZW50
YXRpb25MYWNrc1ZUYWJsZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFjZSBQYXltZW50
QWRkcmVzcyB7Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRd
IG9iamVjdCB0b0pTT04oKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvdW50
cnk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmluZz4gYWRkcmVz
c0xpbmU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXlt
ZW50UmVzcG9uc2UuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTZWN1cmVDb250
ZXh0LAogXSBpbnRlcmZhY2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQgewotICAgIHNl
cmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7
CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAyNjY1
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0J
KHdvcmtpbmcgY29weSkKQEAgLTExMDEsNTAgKzExMDEsNjQgQEAgc3ViIElzV3JhcHBlclR5cGUK
ICAgICByZXR1cm4gMDsKIH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitzdWIgSW50ZXJm
YWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJm
YWNlKSA9IEBfOwogCi0gICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMDsKLSAgICAk
b2JqZWN0LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAgIG15ICRwYXJl
bnRJbnRlcmZhY2UgPSBzaGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0g
MSBpZiAkcGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7Ci0KLSAgICBy
ZXR1cm4gJGFueVBhcmVudElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlv
biAoQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRvcGVyYXRpb24t
PmlzU3RhdGljICYmICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+
dHlwZS0+bmFtZSBlcSAib2JqZWN0IikgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKLXN1YiBJc1NlcmlhbGl6YWJsZVR5cGUKKyMg
aHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLWpzb24tdHlwZXMKK3N1YiBJc0pT
T05UeXBlCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICR0eXBlKSA9IEBfOwogCi0g
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tc2VyaWFsaXphYmxlLXR5
cGUKLQorICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwogICAgIHJldHVy
biAxIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gMSBpZiAkb2JqZWN0
LT5Jc051bWVyaWNUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc0VudW1U
eXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmluZ1R5cGUoJHR5cGUp
OwotICAgIHJldHVybiAwIGlmICR0eXBlLT5uYW1lIGVxICJFdmVudEhhbmRsZXIiOwotCi0gICAg
aWYgKCR0eXBlLT5pc1VuaW9uIHx8ICRvYmplY3QtPklzRGljdGlvbmFyeVR5cGUoJHR5cGUpKSB7
Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHVuaW9uIGFuZCBkaWN0aW9uYXJ5IHR5cGVz
IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQorICAgIHJldHVybiAxIGlm
ICRvYmplY3QtPklzU3RyaW5nT3JFbnVtVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoJG9iamVjdC0+
SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCR0eXBlKSkgewogICAgICAgICBteSAkc3VidHlw
ZSA9IEB7JHR5cGUtPnN1YnR5cGVzfVswXTsKLQotICAgICAgICAjIEZJWE1FOiB3ZWJraXQub3Jn
L2IvMTk0NDM5IFtXZWJJRExdIFN1cHBvcnQgc2VyaWFsaXppbmcgc2VxdWVuY2VzIGFuZCBGcm96
ZW5BcnJheXMgb2YgaW50ZXJmYWNlcwotICAgICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0lu
dGVyZmFjZVR5cGUoJHN1YnR5cGUpOwotCi0gICAgICAgIHJldHVybiAkb2JqZWN0LT5Jc1Nlcmlh
bGl6YWJsZVR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgICAgICByZXR1cm4gJG9iamVj
dC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkc3VidHlwZSk7CisgICAgfQorICAgIGlmICgkb2Jq
ZWN0LT5Jc1JlY29yZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICR2YWx1ZVN1YnR5cGUgPSBA
eyR0eXBlLT5zdWJ0eXBlc31bMF07CisgICAgICAgIHJldHVybiAkb2JqZWN0LT5Jc0pTT05UeXBl
KCRpbnRlcmZhY2UsICR2YWx1ZVN1YnR5cGUpOwogICAgIH0KIAotICAgIHJldHVybiAwIGlmICEk
b2JqZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHR5cGUpOworICAgIGlmICgkb2JqZWN0LT5Jc0ludGVy
ZmFjZVR5cGUoJHR5cGUpKSB7CisgICAgICAgICMgU3BlY2lhbCBjYXNlIEV2ZW50SGFuZGxlciwg
c2luY2UgdGhlcmUgaXMgbm8gcmVhbCBJREwgZm9yIGl0LgorICAgICAgICByZXR1cm4gMCBpZiAk
dHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsKKworICAgICAgICBteSAkaW50ZXJmYWNlID0g
JG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7CisgICAgICAg
IGlmICgkb2JqZWN0LT5JbnRlcmZhY2VIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uKCRpbnRlcmZh
Y2UpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogCi0gICAgbXkgJGludGVy
ZmFjZUZvclR5cGUgPSAkb2JqZWN0LT5HZXRJbnRlcmZhY2VGb3JUeXBlKCRpbnRlcmZhY2UsICR0
eXBlKTsKLSAgICBpZiAoJGludGVyZmFjZUZvclR5cGUpIHsKLSAgICAgICAgcmV0dXJuIDEgaWYg
JGludGVyZmFjZUZvclR5cGUtPnNlcmlhbGl6YWJsZTsKLSAgICAgICAgcmV0dXJuICRvYmplY3Qt
PkluaGVyaXRzU2VyaWFsaXphYmxlKCRpbnRlcmZhY2VGb3JUeXBlKTsKKyAgICAgICAgbXkgJGFu
eVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24gPSAwOworICAgICAgICAkb2JqZWN0LT5G
b3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7CisgICAgICAgICAgICBteSAkcGFyZW50SW50
ZXJmYWNlID0gc2hpZnQ7CisgICAgICAgICAgICAkYW55UGFyZW50SGFzUmVndWxhclRvSlNPTk9w
ZXJhdGlvbiA9IDEgaWYgJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlv
bigkcGFyZW50SW50ZXJmYWNlKTsKKyAgICAgICAgfSwgMCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICgkdHlwZS0+aXNVbmlvbikg
eworICAgICAgICAjIEZJWE1FOiBVbmlvbiB0eXBlcyBzaG91bGQgYmUgc3VwcG9ydGVkIGlmIGFs
bCB0aGUgbWVtYmVyIHR5cGVzIGFyZSBKU09OIHR5cGVzLgorICAgICAgICBkaWUgIkRlZmF1bHQg
dG9KU09OIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGZvciB1bmlvbiB0eXBlcy5cbiI7Cisg
ICAgfQorICAgIGlmICgkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBlKSkgeworICAgICAg
ICAjIEZJWE1FOiBEaWN0aW9uYXJ5IHR5cGVzIHNob3VsZCBiZSBzdXBwb3J0ZWQgaWYgYWxsIG1l
bWJlcnMgZGVjbGFyZWQgb24gdGhlIGRpY3Rpb25hcnkgYW5kIGFsbCBpdHMgaW5oZXJpdGVkIGRp
Y3Rpb25hcmllcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJEZWZhdWx0IHRvSlNPTiBp
cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgZGljdGlvbmFyeSB0eXBlcy5cbiI7CiAgICAg
fQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMTU2LDE3ICsxMTcwLDYgQEAgc3ViIGhhc0NhY2hlZEF0
dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZQogICAgIHJldHVybiAkYXR0cmlidXRlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDYWNoZWRBdHRyaWJ1dGV9IHx8ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0N1c3RvbUdldHRlcn07CiB9CiAKLXN1YiBJc1NlcmlhbGl6YWJsZUF0dHJpYnV0
ZQotewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSA9IEBfOwotCi0g
ICAgaWYgKCRvYmplY3QtPklzU2VxdWVuY2VUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpICYmIGhhc0Nh
Y2hlZEF0dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZW5kZWRBdHRyaWJ1dGUoJGF0dHJpYnV0ZSkp
IHsKLSAgICAgICAgZGllICJTZXJpYWxpemVycyBmb3Igc2VxdWVuY2UgdHlwZXMgd2l0aCBDYWNo
ZWRBdHRyaWJ1dGUgb3IgQ3VzdG9tR2V0dGVyIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCBj
dXJyZW50bHkgc3VwcG9ydGVkLlxuIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gJG9iamVjdC0+SXNT
ZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUpOwotfQotCiBzdWIg
R2V0SW50ZXJmYWNlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbU5hbWUKIHsKICAgICAjIEZJWE1FOiBJ
dCdzIGJhZCB0byBoYXZlIGEgZnVuY3Rpb24gbGlrZSB0aGlzIHRoYXQgb3BlbnMgYW5vdGhlciBJ
REwgZmlsZSB0byBhbnN3ZXIgYSBxdWVzdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNjY1NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMTg2OCw3ICsxODY4LDYgQEAgc3ViIFByb3RvdHlwZU9wZXJhdGlv
bkNvdW50CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVy
YXRpb25zfSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKICAgICAkY291bnQgKz0gc2NhbGFyIEB7
JGludGVyZmFjZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+bWFwTGlrZTsK
ICAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30g
aWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLSAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7
CiAKICAgICByZXR1cm4gJGNvdW50OwogfQpAQCAtMjc4MSwxMSArMjc4MCw2IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZ2V0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TmFtZWRDb25zdHJ1
Y3Rvcn07CiAgICAgfQogCi0gICAgIyBTZXJpYWxpemVyIGZ1bmN0aW9uLgotICAgIGlmICgkaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCAk
e2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7XG4iKTsKLSAgICB9
Ci0gICAgCiAgICAgbXkgJG51bUN1c3RvbU9wZXJhdGlvbnMgPSAwOwogICAgIG15ICRudW1DdXN0
b21BdHRyaWJ1dGVzID0gMDsKIApAQCAtMzE4Nyw3ICszMTgxLDYgQEAgc3ViIEdlbmVyYXRlUHJv
cGVydGllc0hhc2hUYWJsZQogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+aXRl
cmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBA
eyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtl
OwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogICAgIGZvcmVhY2ggbXkgJG9w
ZXJhdGlvbiAoQG9wZXJhdGlvbnMpIHsKICAgICAgICAgbmV4dCBpZiAoJG9wZXJhdGlvbi0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9IGFuZCBub3QgJG9wZXJhdGlvbi0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHVibGljSWRlbnRpZmllcn0pOwogICAgICAgICBuZXh0IGlm
ICgkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CkBAIC0zOTk1LDcgKzM5ODgsNiBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+aXRl
cmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBA
eyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtl
OwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgbXkgQGF0dHJpYnV0
ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9OwogICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7
JGludGVyZmFjZS0+bWFwTGlrZS0+YXR0cmlidXRlc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7
CkBAIC00Njc0LDcgKzQ2NjYsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0K
ICAgICAKICAgICBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50
ZXJmYWNlLT5pdGVyYWJsZTsKLSAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9uKCRpbnRl
cmZhY2UsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKQEAgLTU0MjAsNyArNTQxMSwxMCBAQCBzdWIg
R2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uCiAKICAgICByZXR1cm4gaWYgSXNKU0J1aWx0aW4o
JGludGVyZmFjZSwgJG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmlzSXRl
cmFibGU7Ci0gICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmlzU2VyaWFsaXplcjsKKyAgICAKKyAg
ICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RGVmYXVsdH0pIHsKKyAgICAg
ICAgcmV0dXJuIEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24oJG91dHB1dEFycmF5
LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKTsKKyAgICB9CiAKICAgICBteSAk
aXNDdXN0b20gPSBIYXNDdXN0b21NZXRob2QoJG9wZXJhdGlvbik7CiAgICAgbXkgJGlzT3Zlcmxv
YWRlZCA9ICRvcGVyYXRpb24tPntvdmVybG9hZHN9ICYmIEB7JG9wZXJhdGlvbi0+e292ZXJsb2Fk
c319ID4gMTsKQEAgLTU1NDAsMTAwICs1NTM0LDk1IEBAIHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRl
ZmluaXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRlbmRBcHBsZUNvcHlyaWdodCkgaWYg
JGluQXBwbGVDb3B5cmlnaHQ7CiB9CiAKLXN1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9u
CitzdWIgR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlvbgogewotICAgIG15ICgkaW50
ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOwotCi0gICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50
ZXJmYWNlLT50eXBlLT5uYW1lOworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkcGFyZW50U2VyaWFsaXplcklu
dGVyZmFjZSA9IDA7Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJp
dCkgewotICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBz
dWIgewotICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OwotICAgICAgICAg
ICAgaWYgKCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAmJiAhJHBhcmVudFNlcmlhbGl6
ZXJJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgICAgICAkcGFyZW50U2VyaWFsaXplckludGVyZmFj
ZSA9ICRwYXJlbnRJbnRlcmZhY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIDApOwotICAg
ICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcmZhY2Ugd2l0aCBcInNlcmlhbGl6
ZXJcIiBmb3IgXCJpbmhlcml0XCIgc2VyaWFsaXplciBpbiAkaW50ZXJmYWNlTmFtZVxuIiBpZiAh
JHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2U7CisgICAgaWYgKCRvcGVyYXRpb24tPm5hbWUgZXEg
InRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAib2JqZWN0IikgeworICAgICAg
ICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5pdGlvbigkb3V0cHV0
QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwogICAgIH0KIAotICAg
IG15IEBzZXJpYWxpemVkQXR0cmlidXRlcyA9ICgpOworICAgIGRpZSAiW0RlZmF1bHRdIGlzIG5v
dCBzdXBwb3J0IGZvciBmb3IgdGhpcyBvcGVyYXRpb24gKCIgLiAkb3BlcmF0aW9uLT5uYW1lIC4g
IikuIEl0IGlzIG9ubHkgY3VycmVudGx5IGRlZmluZWQgZm9yICdvYmplY3QgdG9KU09OKCk7Jy4i
Cit9CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1lIChAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgbXkgJGZvdW5kQXR0cmlidXRlID0gMDsK
LSAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9
KSB7Ci0gICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEgJGF0dHJpYnV0ZS0+bmFtZSkg
ewotICAgICAgICAgICAgICAgICRmb3VuZEF0dHJpYnV0ZSA9IDE7Ci0gICAgICAgICAgICAgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NlcmlhbGl6YWJsZUF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAk
YXR0cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBzZXJpYWxpemVkQXR0cmli
dXRlcywgJGF0dHJpYnV0ZSk7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBs
YXN0OwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGRpZSAiRXhwbGljaXQgXCJzZXJpYWxpemVyXCIgYXR0cmlidXRlIFwiJGF0dHJpYnV0ZU5h
bWVcIiBpcyBub3Qgc2VyaWFsaXphYmxlXG4iIGlmICEkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
Pmhhc0F0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgXCJzZXJpYWxpemVyXCIgYXR0cmli
dXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpbiAkaW50ZXJmYWNlTmFtZVxuIiBpZiAhJGZvdW5kQXR0
cmlidXRlOwotICAgIH0KK3N1YiBHZW5lcmF0ZURlZmF1bHRUb0pTT05PcGVyYXRpb25EZWZpbml0
aW9uCit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9w
ZXJhdGlvbikgPSBAXzsKIAotICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gInRvSlNP
TiI7Ci0gICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRv
ci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAgIyBodHRw
czovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kZWZhdWx0LXRvanNvbgogCi0gICAgQWRk
VG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOwor
ICAgIG15IEBpbmhlcml0ZW5jZVN0YWNrID0gKCk7CisgICAgcHVzaChAaW5oZXJpdGVuY2VTdGFj
aywgJGludGVyZmFjZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkZvckFsbFBhcmVudHMoJGludGVy
ZmFjZSwgc3ViIHsKKyAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OworICAgICAg
ICBwdXNoKEBpbmhlcml0ZW5jZVN0YWNrLCAkcGFyZW50SW50ZXJmYWNlKTsKKyAgICB9LCAwKTsK
IAotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU09iamVjdCogSlMke2ludGVyZmFjZU5h
bWV9OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsICR7Y2xh
c3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdClcbiIp
OwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwor
ICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUoJGludGVyZmFjZSwgJGNsYXNz
TmFtZSwgJG9wZXJhdGlvbik7CisKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUJvZHkoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcylc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwogCi0gICAgaWYgKCRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAgICBteSAkcGFyZW50U2VyaWFs
aXplckludGVyZmFjZU5hbWUgPSAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZS0+dHlwZS0+bmFt
ZTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gSlMke3Bh
cmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgp
KTtcbiIpOwotICAgIH0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVj
dFByb3RvdHlwZSgpKTtcbiIpOwogCi0gICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAc2VyaWFs
aXplZEF0dHJpYnV0ZXMpIHsKLSAgICAgICAgIyBGSVhNRTogQXR0cmlidXRlcyB0aGF0IHRocm93
IGV4Y2VwdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBzZXJpYWxpemVycyB5ZXQuCisgICAg
IHdoaWxlIChAaW5oZXJpdGVuY2VTdGFjaykgeworICAgICAgICBteSAkY3VycmVudEludGVyZmFj
ZSA9IHBvcChAaW5oZXJpdGVuY2VTdGFjayk7CiAKLSAgICAgICAgbXkgJG5hbWUgPSAkYXR0cmli
dXRlLT5uYW1lOwotICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0QXR0cmlidXRlR2V0
dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAke2dldEZ1bmN0aW9uTmFt
ZX1HZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7XG4iKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xu
Iik7Ci0KLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0ludGVyZmFjZVR5cGUoJGF0dHJp
YnV0ZS0+dHlwZSkpIHsKLSAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVJbnRlcmZhY2VOYW1lID0g
JGF0dHJpYnV0ZS0+dHlwZS0+bmFtZTsKLSAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBl
LT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCEke25hbWV9VmFsdWUuaXNOdWxsKCkpIHtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMk
e2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwg
KmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9i
YWxPYmplY3QpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7
bmFtZX1cIiksICR7bmFtZX1TZXJpYWxpemVkVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgfSBlbHNlXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9
OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50
ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRW
YWx1ZSk7XG4iKTsKKyAgICAgICAgbXkgJGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24gPSAwOwor
ICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGN1cnJlbnRJbnRlcmZhY2UtPm9wZXJh
dGlvbnN9KSB7CisgICAgICAgICAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57RGVmYXVsdH0gJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAidG9KU09OIiAmJiAkb3BlcmF0aW9u
LT50eXBlLT5uYW1lIGVxICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgJGhhc0RlZmF1bHRU
b0pTT05PcGVyYXRpb24gPSAxOworICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9
XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCRoYXNEZWZh
dWx0VG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUg
KEB7JGN1cnJlbnRJbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICAgICAgbmV4
dCBpZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAgICAgICAgICBuZXh0IGlmICEkY29k
ZUdlbmVyYXRvci0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBlKTsKIAot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgICAgICAgICAgICAgbXkgJGNv
bmRpdGlvbmFsID0gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9
OworICAgICAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0
aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KTs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZU5h
bWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAgICAgICAgICAgIG15ICgkYmFzZUZ1bmN0aW9u
TmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWlt
cGxJbmNsdWRlcywgJGN1cnJlbnRJbnRlcmZhY2UtPnR5cGUtPm5hbWUsICRhdHRyaWJ1dGUpOwor
ICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdWxseVF1YWxpZmllZEltcGxl
bWVudGF0aW9uQ2FsbE5hbWUoJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICRiYXNlRnVu
Y3Rpb25OYW1lLCAiaW1wbCIsICRjb25kaXRpb25hbCk7CisgICAgICAgICAgICAgICAgbXkgJHRv
SlNFeHByZXNzaW9uID0gTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUs
ICRjdXJyZW50SW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1
bWVudHMpIC4gIikiLCAiKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpIik7CisKKyAgICAgICAg
ICAgICAgICBteSAkbmVlZHNSdW50aW1lQ2hlY2sgPSBOZWVkc1J1bnRpbWVDaGVjaygkY3VycmVu
dEludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCRuZWVkc1J1bnRp
bWVDaGVjaykgeworICAgICAgICAgICAgICAgICAgICBteSAkcnVudGltZUVuYWJsZUNvbmRpdGlv
bmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcoJGN1cnJl
bnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCR7cnVudGlt
ZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVzc2lv
bn0pO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9
XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0pO1xu
Iik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRpb25h
bCkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIjZW5kaWZcblxu
IikgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
IAotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsK
KyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuIik7CisgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiXG4iKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Qm9keShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgJHtjbGFzc05hbWV9
KiB0aGlzT2JqZWN0KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTJHtpbnRlcmZh
Y2VOYW1lfTo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVu
Y3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJRExPcGVyYXRpb248SlMke2ludGVyZmFjZU5h
bWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Qm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtzZXJpYWxpemVyRnVuY3Rpb25OYW1lfVwiKTtc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIpOworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFt
ZTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
ICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsK
KyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKUyR7aW50
ZXJmYWNlTmFtZX0+OjpjYWxsPCR7ZnVuY3Rpb25OYW1lfUJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCBcInRvSlNPTlwiKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiB9CiAKIHN1YiBHZW5l
cmF0ZUdldENhbGxEYXRhCkBAIC03NTg1LDcgKzc1NzQsNiBAQCBzdWIgR2V0UnVudGltZUVuYWJs
ZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5p
dGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50
ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9w
ZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMs
IEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExp
a2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9w
ZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAgICAgZm9yZWFjaCBteSAk
b3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAgICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CiAgICAgICAgIG5leHQg
aWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9ICYmICRvcGVyYXRpb24tPntvdmVybG9hZElu
ZGV4fSA+IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJp
YnV0ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE2
Miw2ICsxNjIsOSBAQAogICAgICAgICAgICAgInZhbHVlcyI6IFsiIiwgIlJlYWRET00iLCAiR2V0
dGVyIl0sCiAgICAgICAgICAgICAic3VwcG9ydHNDb25qdW5jdGlvbiI6IHRydWUKICAgICAgICAg
fSwKKyAgICAgICAgIkRlZmF1bHQiOiB7CisgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjog
WyJvcGVyYXRpb24iXQorICAgICAgICB9LAogICAgICAgICAiRGVmYXVsdERlZmluZU93blByb3Bl
cnR5IjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAg
ICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2Vy
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNiBAQCBzdHJ1Y3Qo
IElETEludGVyZmFjZSA9PiB7CiAgICAgYXN5bmNJdGVyYWJsZSA9PiAnJCcsICMgVXNlZCBmb3Ig
YXN5Y24gaXRlcmFibGUgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMQXN5bmNJdGVyYWJsZScKICAg
ICBtYXBMaWtlID0+ICckJywgIyBVc2VkIGZvciBtYXBMaWtlIGludGVyZmFjZXMsIG9mIHR5cGUg
J0lETE1hcExpa2UnCiAgICAgc2V0TGlrZSA9PiAnJCcsICMgVXNlZCBmb3Igc2V0TGlrZSBpbnRl
cmZhY2VzLCBvZiB0eXBlICdJRExTZXRMaWtlJwotICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcsICMg
VXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETFNlcmlhbGl6YWJs
ZScKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKQEAgLTk0LDcgKzkzLDYg
QEAgc3RydWN0KCBJRExPcGVyYXRpb24gPT4gewogICAgIGlzQ29uc3RydWN0b3IgPT4gJyQnLAog
ICAgIGlzU3RhdGljID0+ICckJywKICAgICBpc0l0ZXJhYmxlID0+ICckJywKLSAgICBpc1Nlcmlh
bGl6ZXIgPT4gJyQnLAogICAgIGlzU3RyaW5naWZpZXIgPT4gJyQnLAogICAgIGlzTWFwTGlrZSA9
PiAnJCcsCiAgICAgaXNTZXRMaWtlID0+ICckJywKQEAgLTE1NCwxNSArMTUyLDYgQEAgc3RydWN0
KCBJRExTZXRMaWtlID0+IHsKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAK
LSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCi1zdHJ1
Y3QoIElETFNlcmlhbGl6YWJsZSA9PiB7Ci0gICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBv
ZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQotICAgIGhhc0F0dHJpYnV0ZSA9PiAnJCcsICMgc2Vy
aWFsaXplciA9IHsgYXR0cmlidXRlIH0KLSAgICBoYXNJbmhlcml0ID0+ICckJywgIyBzZXJpYWxp
emVyID0geyBpbmhlcml0IH0KLSAgICBoYXNHZXR0ZXIgPT4gJyQnLCAjIHNlcmlhbGl6ZXIgPSB7
IGdldHRlciB9Ci0gICAgb3BlcmF0aW9ucyA9PiAnQCcsICMgdG9KU09OIG9wZXJhdGlvbgotfSk7
Ci0KICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWNvbnN0YW50cwogc3Ry
dWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCkBAIC01OTksNyArNTg4LDYg
QEAgc3ViIGNsb25lT3BlcmF0aW9uCiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rv
cigkb3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKTsKICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1N0
YXRpYygkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNJdGVy
YWJsZSgkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlKTsKLSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1Nl
cmlhbGl6ZXIoJG9wZXJhdGlvbi0+aXNTZXJpYWxpemVyKTsKICAgICAkY2xvbmVkT3BlcmF0aW9u
LT5pc1N0cmluZ2lmaWVyKCRvcGVyYXRpb24tPmlzU3RyaW5naWZpZXIpOwogICAgICRjbG9uZWRP
cGVyYXRpb24tPmlzTWFwTGlrZSgkb3BlcmF0aW9uLT5pc01hcExpa2UpOwogICAgICRjbG9uZWRP
cGVyYXRpb24tPmlzU2V0TGlrZSgkb3BlcmF0aW9uLT5pc1NldExpa2UpOwpAQCAtNjUxLDkgKzYz
OSw5IEBAIG15ICRuZXh0VHlwZV8xID0gJ14oQnl0ZVN0cmluZ3xET01TdHJpbmcKIG15ICRuZXh0
U3BlY2lhbHNfMSA9ICdeKGRlbGV0ZXJ8Z2V0dGVyfGxlZ2FjeWNhbGxlcnxzZXR0ZXIpJCc7CiBt
eSAkbmV4dERlZmluaXRpb25zXzEgPSAnXihjYWxsYmFja3xkaWN0aW9uYXJ5fGVudW18ZXhjZXB0
aW9ufGludGVyZmFjZXxuYW1lc3BhY2V8cGFydGlhbHx0eXBlZGVmKSQnOwogbXkgJG5leHRFeGNl
cHRpb25NZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8XFt8
YW55fGJvb2xlYW58Ynl0ZXxjb25zdHxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8b3B0
aW9uYWx8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWdu
ZWQpJCc7Ci1teSAkbmV4dEludGVyZmFjZU1lbWJlcnNfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9N
U3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxjb25zdHJ1
Y3RvcnxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsZWdhY3ljYWxsZXJ8bG9u
Z3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8
c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVk
KSQnOworbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0
cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0
b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bGVnYWN5Y2FsbGVyfGxvbmd8
b2JqZWN0fG9jdGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5n
aWZpZXJ8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4
dE5hbWVzcGFjZU1lbWJlcnNfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmlu
Z3xhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxyZWFkb25s
eXxzZXF1ZW5jZXxzaG9ydHxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkk
JzsKLW15ICRuZXh0UGFydGlhbEludGVyZmFjZU1lbWJlcl8xID0gJ14oXCh8Qnl0ZVN0cmluZ3xE
T01TdHJpbmd8VVNWU3RyaW5nfGFueXxhdHRyaWJ1dGV8Ym9vbGVhbnxieXRlfGNvbnN0fGRlbGV0
ZXJ8ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGxlZ2FjeWNhbGxlcnxsb25nfG9iamVjdHxv
Y3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9ydHxzdGF0aWN8c3Ry
aW5naWZpZXJ8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAk
bmV4dFBhcnRpYWxJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5n
fFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxkZWxldGVyfGRvdWJs
ZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsZWdhY3ljYWxsZXJ8bG9uZ3xvYmplY3R8b2N0ZXR8cmVh
ZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5k
ZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0U2luZ2xlVHlwZV8xID0g
J14oQnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGJvb2xlYW58Ynl0ZXxkb3VibGV8Zmxv
YXR8bG9uZ3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJl
c3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dEFyZ3VtZW50TmFtZV8xID0gJ14oYXN5bmN8
YXR0cmlidXRlfGNhbGxiYWNrfGNvbnN0fGNvbnN0cnVjdG9yfGRlbGV0ZXJ8ZGljdGlvbmFyeXxl
bnVtfGdldHRlcnxpbmNsdWRlc3xpbmhlcml0fGludGVyZmFjZXxpdGVyYWJsZXxtYXBsaWtlfG1p
eGlufG5hbWVzcGFjZXxwYXJ0aWFsfHJlYWRvbmx5fHJlcXVpcmVkfHNldGxpa2V8c2V0dGVyfHN0
YXRpY3xzdHJpbmdpZmllcnx0eXBlZGVmfHVucmVzdHJpY3RlZCkkJzsKIG15ICRuZXh0Q29uc3RW
YWx1ZV8xID0gJ14oZmFsc2V8dHJ1ZSkkJzsKQEAgLTExODYsMTIgKzExNzQsNiBAQCBzdWIgcGFy
c2VQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyCiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJpbmhl
cml0IikgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlSW5oZXJpdEF0dHJpYnV0ZSgkZXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICB9Ci0KLSAgICAjIEZJWE1FOiBSZW1vdmUuIFRoaXMg
aXMgbm8gbG9uZ2VyIHBhcnQgb2YgV2ViSURMLiBSZXBsYWNlIHdpdGggW1NlcmlhbGl6YWJsZV0u
Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewotICAgICAgICByZXR1
cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXplcigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICB9
Ci0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQtPnZh
bHVlKCkgPX4gLyRuZXh0T3BlcmF0aW9uXzEvKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFy
c2VPcGVyYXRpb24oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CiAgICAgIH0KQEAgLTE3MTQsMTE0
ICsxNjk2LDYgQEAgc3ViIHBhcnNlQ29uc3RydWN0b3IKICAgICAkc2VsZi0+YXNzZXJ0VW5leHBl
Y3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlh
bGl6ZXIKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0
ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAg
IGlmICgkbmV4dC0+dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18p
OwotICAgICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICAgICAgbXkgJG5l
d0RhdGFOb2RlOwotICAgICAgICBpZiAoJG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7Ci0gICAgICAg
ICAgICAkbmV3RGF0YU5vZGUgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRB
dHRyaWJ1dGVMaXN0KTsKLSAgICAgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFs
aXphYmxlLT5uZXcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG15ICR0b0pTT05PcGVyYXRpb24g
PSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5uYW1lKCJ0
b0pTT04iKTsKLQotICAgICAgICAkc2VsZi0+YXNzZXJ0RXh0ZW5kZWRBdHRyaWJ1dGVzVmFsaWRG
b3JDb250ZXh0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsICJvcGVyYXRpb24iKTsKLSAgICAgICAg
JHRvSlNPTk9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxp
c3QpOwotICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIoMSk7Ci0gICAgICAg
IHB1c2goQHskbmV3RGF0YU5vZGUtPm9wZXJhdGlvbnN9LCAkdG9KU09OT3BlcmF0aW9uKTsKLQot
ICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBf
X0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7Ci0gICAgfQotICAgICRzZWxm
LT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KLQot
c3ViIHBhcnNlU2VyaWFsaXplclJlc3QKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15
ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYt
Pm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKLSAgICAgICAg
JHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5FX18p
OwotCi0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigpOwot
Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4
dC0+dmFsdWUoKSBlcSAiKCIpIHsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlv
blJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgfQotfQotCi1zdWIgcGFyc2VTZXJp
YWxpemF0aW9uUGF0dGVybgotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4
dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsiKSB7
Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAieyIs
IF9fTElORV9fKTsKLSAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5u
ZXcoKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoJG5ld0Rh
dGFOb2RlKTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2Vu
KCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAgIH0K
LSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXph
dGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7Ci0gICAg
fQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICBt
eSBAYXR0cmlidXRlcyA9ICgpOwotICAgICAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4o
KTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tl
bik7Ci0gICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7Ci0KLSAgICAg
ICAgbXkgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAgJG5l
d0RhdGFOb2RlLT5hdHRyaWJ1dGVzKFxAYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgcmV0dXJuICRu
ZXdEYXRhTm9kZTsKLSAgICB9Ci0gICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4
dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQotCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmli
dXRlcwotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJHNlcmlhbGl6YWJsZSA9IHNo
aWZ0OwotCi0gICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICBteSBAaWRlbnRpZmllcnMgPSAk
c2VsZi0+cGFyc2VJZGVudGlmaWVyTGlzdCgpOwotCi0gICAgZm9yIG15ICRpZGVudGlmaWVyIChA
aWRlbnRpZmllcnMpIHsKLSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJnZXR0ZXIiKSB7Ci0g
ICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNHZXR0ZXIoMSk7Ci0gICAgICAgICAgICBkaWUg
IlNlcmlhbGl6ZXIgZ2V0dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiaW5oZXJpdCIpIHsKLSAg
ICAgICAgICAgICRzZXJpYWxpemFibGUtPmhhc0luaGVyaXQoMSk7Ci0gICAgICAgICAgICBuZXh0
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJhdHRyaWJ1dGUiKSB7
Ci0gICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGUoMSk7Ci0gICAgICAgICAg
ICAjIEF0dHJpYnV0ZXMgd2lsbCBiZSBmaWxsZWQgaW4gdmlhIGFwcGx5TWVtYmVyTGlzdCgpCi0g
ICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVzaChAYXR0cmlidXRlcywg
JGlkZW50aWZpZXIpOwotICAgIH0KLQotICAgICRzZXJpYWxpemFibGUtPmF0dHJpYnV0ZXMoXEBh
dHRyaWJ1dGVzKTsKLX0KLQogc3ViIHBhcnNlSWRlbnRpZmllckxpc3QKIHsKICAgICBteSAkc2Vs
ZiA9IHNoaWZ0OwpAQCAtMzM2MiwyMyArMzIzNiw2IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJl
ZigkaXRlbSkgZXEgIklETFNlcmlhbGl6YWJsZSIpIHsKLSAgICAgICAgICAgICRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZSgkaXRlbSk7Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgewotICAgICAgICBteSAkbnVt
U2VyaWFsaXplckF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmli
dXRlc307Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0
ZSkgewotICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0
dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6
YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2lmICgkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgewotICAgICAgICAg
ICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRl
c30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVu
dGFsRGVwZW5kZW5jaWVzLmRlcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAkocmV2aXNpb24gMjY2
NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRh
bERlcGVuZGVuY2llcy5kZXAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAgV2ViRE9N
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLgogSlNUZXN0RE9NSklULmg6IAogRE9N
VGVzdERPTUpJVC5oOiAKIFdlYkRPTVRlc3RET01KSVQuaDogCitKU1Rlc3REZWZhdWx0VG9KU09O
Lmg6IAorRE9NVGVzdERlZmF1bHRUb0pTT04uaDogCitXZWJET01UZXN0RGVmYXVsdFRvSlNPTi5o
OiAKIEpTVGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6IAogRE9NVGVzdERlcml2ZWREaWN0aW9uYXJ5
Lmg6IAogV2ViRE9NVGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6IApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pT
T04uaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2VudW0gVGVzdERlZmF1bHRUb0pTT05FbnVtIHsKKyAgICAiRW51bVZh
bHVlMSIsCisgICAgIkVudW1WYWx1ZTIiCit9OworCitpbnRlcmZhY2UgVGVzdERlZmF1bHRUb0pT
T04geworICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgc3RyaW5nQXR0cmlidXRlOworICAgIFtFbmFi
bGVkQXRSdW50aW1lPVRlc3RSdW50aW1lRW5hYmxlZF1yZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBs
b25nQXR0cmlidXRlOworICAgIFtFbmFibGVkQnlTZXR0aW5nPVRlc3RTZXR0aW5nXSByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGU7Cisg
ICAgW0NvbmRpdGlvbmFsPVRFU1RfQ09ORElUSU9OQUxdIHJlYWRvbmx5IGF0dHJpYnV0ZSBUZXN0
RGVmYXVsdFRvSlNPTkVudW0gZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGU7CisgICAgYXR0
cmlidXRlIEV2ZW50SGFuZGxlciBldmVudEhhbmRsZXJBdHRyaWJ1dGU7CisgICAgCisgICAgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwJKHJldmlzaW9uIDI2NjU1OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDUgKzM1LDUgQEAKICAgICBbU2VjdXJlQ29udGV4dF0gYm9vbGVhbiBn
ZXRTZWNyZXRCb29sZWFuKCk7CiAgICAgW0NvbmRpdGlvbmFsPVRFU1RfRkVBVFVSRSwgU2VjdXJl
Q29udGV4dCwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gYm9vbGVhbiB0ZXN0RmVhdHVy
ZUdldFNlY3JldEJvb2xlYW4oKTsKIAotICAgIHNlcmlhbGl6ZXI7CisgICAgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTQzNSw4ICs0MzUsNiBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93
CiAKICAgICBzdHJpbmdpZmllciBhdHRyaWJ1dGUgVVNWU3RyaW5nIHN0cmluZ2lmaWVyQXR0cmli
dXRlOwogCi0gICAgc2VyaWFsaXplciA9IHtjcmVhdGUsIHJlYWRPbmx5U3RyaW5nQXR0ciwgZW51
bUF0dHIsIGxvbmdBdHRyfTsKLQogICAgIHVuZGVmaW5lZCBidWZmZXJTb3VyY2VQYXJhbWV0ZXIo
QnVmZmVyU291cmNlIGRhdGEpOwogCiAgICAgbGVnYWN5Y2FsbGVyIHVuZGVmaW5lZCBsZWdhY3lD
YWxsZXJOYW1lZChsb25nIHBhcmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkocmV2aXNp
b24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RT
ZXJpYWxpemF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNSArNDEsNSBAQCBpbnRlcmZh
Y2UgVGVzdFNlcmlhbGl6YXRpb24gewogICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxET01TdHJpbmc+
IGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGU7CiAgICAgYXR0cmlidXRlIHNlcXVlbmNlPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1
dGU7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2Jq
ZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRs
CShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjYsNSAr
MjYsNSBAQAogaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA6IFRlc3RTZXJpYWxp
emF0aW9uIHsKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGluaGVyaXRMb25n
QXR0cmlidXRlOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwgYXR0cmlidXRlIH07Cisg
ICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbC5pZGwJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDUgKzI3LDUgQEAgaW50ZXJmYWNlIFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsIAogICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAg
ICAgZmluYWxMb25nQXR0cmlidXRlRm9vOwogICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAg
ICAgICAgZmluYWxMb25nQXR0cmlidXRlQmFyOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJp
dCwgZmluYWxMb25nQXR0cmlidXRlQmFyIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4MyBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVs
dFRvSlNPTi5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJp
bmdzLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRl
ICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdz
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVh
cEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1
YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCitTdHJpbmcgY29udmVydEVudW1l
cmF0aW9uVG9TdHJpbmcoVGVzdERlZmF1bHRUb0pTT046OkVudW0gZW51bWVyYXRpb25WYWx1ZSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB2YWx1ZXNbXSA9IHsK
KyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkVudW1WYWx1ZTEiKSwKKyAgICAgICAg
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkVudW1WYWx1ZTIiKSwKKyAgICB9OworICAgIHN0YXRp
Y19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0RGVmYXVsdFRvSlNPTjo6RW51bTo6RW51
bVZhbHVlMSkgPT0gMCwgIlRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUxIGlzIG5v
dCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+
KFRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUyKSA9PSAxLCAiVGVzdERlZmF1bHRU
b0pTT046OkVudW06OkVudW1WYWx1ZTIgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5H
VEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1l
cmF0aW9uVmFsdWUpXTsKK30KKwordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0
aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRU
b0pTT046OkVudW0gZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmlu
ZyhlbnVtZXJhdGlvblZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdERlZmF1
bHRUb0pTT046OkVudW0+IHBhcnNlRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT046OkVudW0+
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJFbnVtVmFsdWUxIikKKyAgICAgICAgcmV0
dXJuIFRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUxOworICAgIGlmIChzdHJpbmdW
YWx1ZSA9PSAiRW51bVZhbHVlMiIpCisgICAgICAgIHJldHVybiBUZXN0RGVmYXVsdFRvSlNPTjo6
RW51bTo6RW51bVZhbHVlMjsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0
ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdERlZmF1bHRUb0pT
T046OkVudW0+KCkKK3sKKyAgICByZXR1cm4gIlwiRW51bVZhbHVlMVwiLCBcIkVudW1WYWx1ZTJc
IiI7Cit9CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKyNlbmRp
ZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0
cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlIGZpbmFs
IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFz
ZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNP
TlByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0
RGVmYXVsdFRvSlNPTlByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RGVmYXVs
dFRvSlNPTlByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
ICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUsIEpTVGVz
dERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBKU1Rlc3REZWZhdWx0VG9K
U09OQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RE
ZWZhdWx0VG9KU09OPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05D
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7Cisg
ICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pT
T046OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdERlZmF1bHRUb0pTT04iX3Mp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNz
SW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3REZWZh
dWx0VG9KU09OIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFi
bGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
RGVmYXVsdFRvSlNPTlByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVj
dG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZh
dWx0VG9KU09OQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJzdHJpbmdBdHRyaWJ1dGUiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ig
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERl
ZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0
cmlidXRlKSB9IH0sCisgICAgeyAibG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRl
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyAgICB7
ICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0s
CisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisgICAgeyAiZW5hYmxlZEJ5Q29uZGl0aW9u
YWxBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVs
dFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAorI2Vsc2UKKyAgICB7
IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlmCisgICAgeyAiZXZlbnRIYW5k
bGVyQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRl
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRvSlNP
TiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlv
biksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlv
bj4oanNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90
KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OIiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OUHJv
dG90eXBlKSB9OworCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVp
ZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3REZWZhdWx0VG9KU09OOjppbmZvKCksIEpTVGVz
dERlZmF1bHRUb0pTT05Qcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIGJvb2wgaGFz
RGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IGZhbHNlOworICAgIGlmICghUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0UnVudGltZUVuYWJsZWRFbmFibGVkKCkp
IHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7CisgICAgICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJsb25nQXR0cmlidXRlIiksIHN0cmxlbigibG9uZ0F0dHJp
YnV0ZSIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxl
dGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyAgICBpZiAo
IWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdF
bmFibGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7
CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0
ZSIpLCBzdHJsZW4oImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIikpOworICAgICAgICBWTTo6
RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6
Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90Owor
ICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorICAgIGlmIChoYXNEaXNhYmxlZFJ1bnRpbWVQcm9w
ZXJ0aWVzICYmIHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3Qodm0pOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJ
VElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTjo6c19pbmZv
ID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT04pIH07CisKK0pTVGVzdERl
ZmF1bHRUb0pTT046OkpTVGVzdERlZmF1bHRUb0pTT04oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBp
bXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3REZWZhdWx0VG9K
U09OOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0aWNfYXNz
ZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTj46
OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZl
biB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3Qu
Iik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT046OmNyZWF0ZVByb3RvdHlw
ZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3Qq
IEpTVGVzdERlZmF1bHRUb0pTT046OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3REZWZh
dWx0VG9KU09OPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0
VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdERlZmF1bHRU
b0pTT05Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjpkZXN0cm95KEpT
Qzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdERlZmF1bHRUb0pTT04qIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oY2VsbCk7CisgICAgdGhpc09iamVj
dC0+SlNUZXN0RGVmYXVsdFRvSlNPTjo6fkpTVGVzdERlZmF1bHRUb0pTT04oKTsKK30KKwordGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTiogSURMQXR0cmlidXRlPEpTVGVzdERl
ZmF1bHRUb0pTT04+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0RGVmYXVsdFRvSlNPTio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdERl
ZmF1bHRUb0pTT04qIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Y2FzdChKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCit7
CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBl
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXBy
b3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RGVm
YXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdERlZmF1
bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7
CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
eworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlN0cmlu
Z0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0F0dHJpYnV0ZSgpKSkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmlidXRl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERl
ZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZUdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsK
KyAgICAgICAgcmV0dXJuIGltcGwuc2V0U3RyaW5nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0cmlidXRlIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVs
dFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8
anNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJsb25nQXR0
cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09O
RW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETFVuc2lnbmVkU2hvcnQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
ZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+Ojpn
ZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKTsKK30KKworI2lmIEVOQUJMRShU
RVNUX0NPTkRJVElPTkFMKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pT
T05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT046OkVudW0+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRl
KCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlD
b25kaXRpb25hbEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05F
bmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVuYWJsZWRCeUNv
bmRpdGlvbmFsQXR0cmlidXRlIik7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09i
amVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0
dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1l
cygpLmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudCwgd29ybGRGb3JET01PYmplY3QodGhpc09iamVj
dCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVy
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxl
ckF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0
dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHNldEV2ZW50SGFuZGxl
ckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0Lndy
YXBwZWQoKSwgZXZlbnROYW1lcygpLmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudCwgdmFsdWUpOwor
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0
SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZh
dWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1
dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
ImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdERlZmF1bHRU
b0pTT04qIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVj
dFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBdHRyaWJ1dGUoKSkpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1l
RW5hYmxlZEVuYWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyaWJ1dGUoKSkpOworICAg
IH0KKyAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+
c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZWRCeVNldHRpbmdzQXR0
cmlidXRlIiksIHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSgpKSk7CisgICAgfQorI2lm
IEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUiKSwg
dG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUo
KSkpOworI2VuZGlmCisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1
bHRUb0pTT04+OjpjYWxsPGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNP
TkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Cit9CisK
K0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0
YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OLmdldCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3REZWZhdWx0VG9KU09OPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTjo6bmVlZHNEZXN0cnVj
dGlvbik7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPikKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5n
ZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0
RGVmYXVsdFRvSlNPTik7CisgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3REZWZhdWx0VG9KU09OLmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgIGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAm
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
RU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpT
VGVzdERlZmF1bHRUb0pTT046OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdERlZmF1
bHRUb0pTT04qPihjZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChj
ZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2Vs
bCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5z
dHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCiti
b29sIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsK
KyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcjo6Zmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7
CisgICAgYXV0byoganNUZXN0RGVmYXVsdFRvSlNPTiA9IHN0YXRpY19jYXN0PEpTVGVzdERlZmF1
bHRUb0pTT04qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAq
c3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBw
ZXIod29ybGQsICZqc1Rlc3REZWZhdWx0VG9KU09OLT53cmFwcGVkKCksIGpzVGVzdERlZmF1bHRU
b0pTT04pOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JN
KFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVy
biB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdERlZmF1bHRUb0pTT05AV2ViQ29y
ZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43
V2ViQ29yZTE3VGVzdERlZmF1bHRUb0pTT05FW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkKK3sK
KworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICBjb25zdCB2b2lkKiBhY3R1YWxW
VGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9pbnRlcihpbXBsLnB0cigpKTsKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/
P183VGVzdERlZmF1bHRUb0pTT05AV2ViQ29yZUBANkJAIik7CisjZWxzZQorICAgIHZvaWQqIGV4
cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMTdUZXN0RGVmYXVsdFRvSlNPTkVb
Ml07CisjZW5kaWYKKworICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdERlZmF1bHRUb0pTT04gZG9l
cyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxl
bWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlv
bgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0RGVmYXVsdFRvSlNP
Tj46OnZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04gaXMgbm90IHBvbHltb3JwaGljIik7CisKKyAg
ICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRl
ciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0RGVmYXVsdFRvSlNPTiBoYXMgc3ViY2xhc3Nlcy4g
SWYgVGVzdERlZmF1bHRUb0pTT04gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAg
Ly8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3REZWZhdWx0VG9KU09OIHlvdSB0
byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lw
VlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlv
bgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFi
bGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3REZWZhdWx0
VG9KU09OPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTiYgaW1wbCkKK3sKKyAgICBy
ZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQor
CitUZXN0RGVmYXVsdFRvSlNPTiogSlNUZXN0RGVmYXVsdFRvSlNPTjo6dG9XcmFwcGVkKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPih2bSwgdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1
bHRUb0pTT04uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3REZWZhdWx0VG9KU09OLmgiCisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdERlZmF1
bHRUb0pTT04+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3RE
ZWZhdWx0VG9KU09OPjsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTiogY3JlYXRlKEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVm
YXVsdFRvSlNPTiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RE
ZWZhdWx0VG9KU09OPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pT
T04oc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHBy
b3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdERl
ZmF1bHRUb0pTT04qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgewor
ICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3Vy
cmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOworcHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1
bHRUb0pTT04oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVm
YXVsdFRvSlNPTj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307
CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImLCBjb25zdCBjaGFyKiopOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3REZWZh
dWx0VG9KU09OKikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0RGVmYXVsdFRv
SlNPTk93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUg
dm9pZCogd3JhcHBlcktleShUZXN0RGVmYXVsdFRvSlNPTiogd3JhcHBhYmxlT2JqZWN0KQorewor
ICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3REZWZhdWx0VG9KU09OJik7
CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRU
b0pTT04qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3REZWZhdWx0VG9KU09OPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkg
eyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdERlZmF1bHRU
b0pTT04+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OOwor
ICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0RGVmYXVsdFRvSlNPTio7Cit9Owor
U3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKFRlc3REZWZhdWx0VG9KU09OOjpFbnVt
KTsKK3RlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgVGVzdERlZmF1bHRUb0pTT046OkVudW0pOworCit0ZW1wbGF0ZTw+
IE9wdGlvbmFsPFRlc3REZWZhdWx0VG9KU09OOjpFbnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RE
ZWZhdWx0VG9KU09OOjpFbnVtPihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsK
K3RlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0RGVm
YXVsdFRvSlNPTjo6RW51bT4oKTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RDYWxsVHJhY2Vy
LmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJKU1Rlc3RET01KSVQuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgi
CiAjaW5jbHVkZSAiSlNUZXN0RG9tYWluU2VjdXJpdHkuaCIKICNpbmNsdWRlICJKU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nLmgiCiAjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaCIKQEAg
LTE3OCw2ICsxNzksOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0
eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5T
ZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMzA3LDEx
ICszMTAsMTEgQEAgdXNpbmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IgPSBKUwogCiBz
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFi
bGVJbmRleFsyNjddID0gewogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzNiwgLTEgfSwKKyAgICB7
IDM3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAwLCAtMSB9LAogICAgIHsgNCwgMjYz
IH0sCi0gICAgeyA0MCwgLTEgfSwKKyAgICB7IDQxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzE5LDE1ICszMjIsMTUgQEAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTEsIC0xIH0sCisgICAgeyA1
MiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDE5LCAtMSB9LAorICAgIHsgMjAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2MywgLTEgfSwKKyAgICB7IDY0
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LApAQCAtMzQxLDE0ICszNDQsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaElu
ZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgMzAsIC0xIH0sCisgICAgeyAzMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCi0gICAgeyA2NiwgLTEgfSwKLSAgICB7IDksIDI1OCB9LAorICAgIHsgNjcsIC0xIH0s
CisgICAgeyAxMCwgMjU4IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCkBAIC0zNTYsOCArMzU5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgMzQsIC0xIH0sCi0gICAgeyAxNiwgMjY0IH0sCisgICAgeyAzNSwg
LTEgfSwKKyAgICB7IDE3LCAyNjQgfSwKICAgICB7IDYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LApAQCAtMzY5LDE0ICszNzIsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVj
dCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0xIH0sCisgICAgeyAzMywgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE4LCAyNjUgfSwK
KyAgICB7IDE5LCAyNjUgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKQEAgLTM5MSw2NCArMzk0LDY0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29t
cGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDU3LCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCisgICAgeyA1OCwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyMCwgMjU2IH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDU4LCAtMSB9LAotICAgIHsgMTUsIC0xIH0sCisgICAgeyAyMSwg
MjU2IH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDU5LCAtMSB9LAorICAgIHsgMTYsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQyLCAtMSB9LAotICAgIHsgMTQsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKKyAgICB7IDQzLCAtMSB9LAorICAgIHsgMTUsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAorICAgIHsgMzIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgNDcsIC0xIH0sCi0gICAgeyAyMSwgLTEgfSwKKyAgICB7IDksIC0xIH0sCisg
ICAgeyA0OCwgLTEgfSwKKyAgICB7IDIyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAy
LCAtMSB9LAotICAgIHsgMzMsIC0xIH0sCisgICAgeyAzNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE3LCAtMSB9LAorICAg
IHsgMTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTUsIC0xIH0s
CisgICAgeyA1NiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNywg
LTEgfSwKKyAgICB7IDI4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDM4LCAtMSB9LAorICAgIHsgMzksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgNTAsIC0xIH0sCisgICAgeyA1MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgMTAsIC0xIH0sCisgICAgeyAxMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ2NCwxMiArNDY3LDEyIEBAIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY0LCAtMSB9LAorICAgIHsgNjUsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyAyOCwgLTEgfSwKLSAgICB7IDI1LCAyNjIgfSwKKyAgICB7IDI5LCAtMSB9LAorICAgIHsg
MjYsIDI2MiB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LApAQCAtNDc5LDkgKzQ4Miw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDEyLCAyNTcgfSwKKyAgICB7IDEzLCAyNTcgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgNTksIC0xIH0sCisgICAgeyA2MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ5MCwxNyArNDkzLDE3IEBAIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI5LCAyNjYgfSwKKyAgICB7IDMwLCAy
NjYgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTMsIC0xIH0sCisgICAgeyAxNCwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjIsIC0xIH0sCisgICAgeyA2MywgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NSwgLTEgfSwKKyAgICB7IDQ2LCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTEz
LDcgKzUxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUz
LCAtMSB9LAorICAgIHsgNTQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCkBAIC01MzUsNDQgKzUzOCw0NCBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NCwgMjYxIH0sCisgICAgeyA0NSwgMjYxIH0sCiAg
ICAgeyA3LCAyNjAgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjAsIC0xIH0sCisgICAgeyA2
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDMsIC0xIH0sCisgICAgeyA0NCwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMTEsIC0xIH0sCisgICAgeyAxMiwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAotICAgIHsgMjIsIC0xIH0sCisgICAgeyAyMywgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNCwgLTEgfSwKKyAgICB7IDI1LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQxLCAtMSB9LAorICAgIHsgNDIs
IC0xIH0sCiAgICAgeyAzLCAtMSB9LAotICAgIHsgNDgsIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwK
ICAgICB7IDQ5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA1MCwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIzLCAy
NTkgfSwKLSAgICB7IDI2LCAtMSB9LAotICAgIHsgMzUsIC0xIH0sCi0gICAgeyAzNywgLTEgfSwK
LSAgICB7IDM5LCAtMSB9LAotICAgIHsgNDYsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwKLSAgICB7
IDU0LCAtMSB9LAotICAgIHsgNTYsIC0xIH0sCi0gICAgeyA2MSwgLTEgfSwKLSAgICB7IDY1LCAt
MSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAyNCwgMjU5IH0sCisgICAgeyAyNywgLTEgfSwK
KyAgICB7IDM2LCAtMSB9LAorICAgIHsgMzgsIC0xIH0sCisgICAgeyA0MCwgLTEgfSwKKyAgICB7
IDQ3LCAtMSB9LAorICAgIHsgNTMsIC0xIH0sCisgICAgeyA1NSwgLTEgfSwKKyAgICB7IDU3LCAt
MSB9LAorICAgIHsgNjIsIC0xIH0sCisgICAgeyA2NiwgLTEgfSwKIH07CiAKIApAQCAtNTk1LDYg
KzU5OCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWwKICNlbmRp
ZgogICAgIHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0
b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RET01KSVQiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01K
SVRDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIlRlc3REZWZhdWx0VG9KU09OIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RE
b21haW5TZWN1cml0eSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3Vy
aXR5Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25z
dHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RFbmFibGVkQnlTZXR0aW5nIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRl
c3RFdmVudENvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3RvcikgfSB9LApAQCAtNjY3LDcgKzY3MSw3IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWwKICAgICB7ICJyZWd1bGFyT3BlcmF0aW9uIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbiksIChpbnRwdHJf
dCkgKDEpIH0gfSwKIH07CiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0R2xvYmFsT2Jq
ZWN0VGFibGUgPSB7IDY3LCAyNTUsIHRydWUsIEpTVGVzdEdsb2JhbE9iamVjdDo6aW5mbygpLCBK
U1Rlc3RHbG9iYWxPYmplY3RUYWJsZVZhbHVlcywgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRl
eCB9Oworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZSA9IHsg
NjgsIDI1NSwgdHJ1ZSwgSlNUZXN0R2xvYmFsT2JqZWN0OjppbmZvKCksIEpTVGVzdEdsb2JhbE9i
amVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4IH07CiAvKiBIYXNo
IHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUg
SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KQEAgLTEwOTcsNiAr
MTEwMSwyOSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zCiAgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RE9NSklUIik7CiB9CiAKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9K
U09OQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJUZXN0RGVmYXVsdFRvSlNPTiIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3REZWZhdWx0VG9KU09O
IiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT04iKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTiIpOworfQorCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDEyICs2MCwxMiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAj
aWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4o
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiAjZW5kaWYKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uU3ltYm9sSXRl
cmF0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmll
cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAogLy8gQXR0cmlidXRlcwogCkBAIC0xNTAsMTEgKzE1MCwx
MSBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9kZVByCiAjZWxzZQogICAg
IHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCiAjZW5kaWYKKyAgICB7ICJ0b0pTT04i
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwK
ICAgICB7ICJlbnRyaWVzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJh
d05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAogICAgIHsgImtleXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
bktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidmFsdWVzIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZm9yRWFj
aCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlv
biksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlv
bj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCksIChpbnRwdHJfdCkgKDEpIH0g
fSwKLSAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChp
bnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9kZVByb3RvdHlwZSkgfTsKQEAgLTM4Myw2
ICszODMsMjIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUAogCiAj
ZW5kaWYKIAorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqLCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKS5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIHRvSlM8SURMRE9NU3RyaW5nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm5hbWUoKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsK
K30KKwogc3RydWN0IFRlc3ROb2RlSXRlcmF0b3JUcmFpdHMgewogICAgIHN0YXRpYyBjb25zdGV4
cHIgSlNET01JdGVyYXRvclR5cGUgdHlwZSA9IEpTRE9NSXRlcmF0b3JUeXBlOjpTZXQ7CiAgICAg
dXNpbmcgS2V5VHlwZSA9IHZvaWQ7CkBAIC00ODYsMjkgKzUwMiw2IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIpOwogfQogCi1KU0M6OkpT
T2JqZWN0KiBKU1Rlc3ROb2RlOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gbmFtZVZhbHVl
ID0ganNUZXN0Tm9kZU5hbWVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7
Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBuYW1lVmFsdWUpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0KQotewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9kZTo6c2VyaWFsaXplKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+Ojpj
YWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KIEpTQzo6SXNvU3Vic3BhY2UqIEpT
VGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmgJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3ROb2Rl
JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
LCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9
PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2
aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTQsNyArMTU5NCw2IEBAIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9Xb3JrZXJGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlvbihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTIzMzQsNyAr
MjMzMyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KICAgICB7
ICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uKSwgKGludHB0cl90
KSAoMCkgfSB9LAogICAgIHsgImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJG
dW5jdGlvbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpG
dW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93QW5kV29ya2VyRnVuY3Rpb24pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidG9T
dHJpbmciLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVu
Y3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcpLCAoaW50cHRyX3QpICgw
KSB9IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTiks
IChpbnRwdHJfdCkgKDApIH0gfSwKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKICAgICB7ICJDT05E
SVRJT05BTF9DT05TVCIsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkNv
bnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9uZykoMCkgfSB9LAogI2Vsc2UK
QEAgLTk0MDEsNDEgKzkzOTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SlNPYmplY3QqIEpTVGVzdE9iajo6c2Vy
aWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFBy
b3RvdHlwZSgpKTsKLQotICAgIGF1dG8gY3JlYXRlVmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGVHZXR0
ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiY3JlYXRlIiksIGNyZWF0ZVZhbHVlKTsKLQotICAgIGF1dG8gcmVhZE9u
bHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKTsK
LQotICAgIGF1dG8gZW51bUF0dHJWYWx1ZSA9IGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImVudW1BdHRyIiksIGVudW1BdHRyVmFsdWUpOwotCi0gICAgYXV0byBsb25nQXR0clZh
bHVlID0ganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHIiKSwgbG9u
Z0F0dHJWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpzZXJpYWxp
emUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKLX0KLQogSlNDOjpJc29TdWJz
cGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIG11dGFibGUgSlNDOjpX
cml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0ZTE7CiAgICAgbXV0YWJs
ZSBKU0M6OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1fY2FjaGVkQXR0cmlidXRlMjsKICNp
ZiBFTkFCTEUoQ09ORElUSU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAko
cmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNjQgKzYw
OSwyNSBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmCiAgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZSIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0
aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90
b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb24qIGNhc3RlZFRoaXMpCiB7Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90
b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGZpcnN0U3RyaW5nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RT
ZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RT
dHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRv
IHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25n
QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgc2Vjb25k
TG9uZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0
dHJpYnV0ZSIpLCBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAg
ICBhdXRvIGZpZnRoTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpZnRo
TG9uZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgZmlm
dGhMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVW
YWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZh
bHVlKTsKLQotICAgIGF1dG8gc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFs
dWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBhdXRvKiBzZXZlbnRoRGlyZWN0bHlTZXJpYWxp
emFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsOjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsKj4oc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1
ZSk7Ci0KLSAgICBhdXRvIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNl
cmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
LSAgICBhdXRvKiBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
Kj4oZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUiKSwgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNlcmlhbGl6ZWRW
YWx1ZSk7Ci0KLSAgICBhdXRvIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsK
LSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgaWYgKCFuaW50aE9wdGlv
bmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZS5pc051bGwoKSkgewotICAgICAg
ICBhdXRvKiBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxp
emVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUobGV4
aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
Kj4obmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUpLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIp
LCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFs
dWUpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSk7
Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlh
bGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRo
RnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVlKTsK
LQotICAgIGF1dG8gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFs
aXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9u
KiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFs
aXphdGlvbjo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUi
KSwgdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElE
TExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2Vjb25kTG9uZ0F0
dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExV
bnJlc3RyaWN0ZWREb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
Zm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIp
LCB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlm
dGhMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCB0b0pTPElETERvdWJs
ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIHRvSlM8SURM
SW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVu
dGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0cmli
dXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9u
YWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51bGxhYmxlPElETElu
dGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRl
bnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0
b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNl
QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElE
TFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNv
bmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmNwcAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTMgKzI2LDIyIEBACiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJvb2xlYW4uaCIKKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdWxsYWJsZS5oIgog
I2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRT
ZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgi
CisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNBcnJheS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9y
Lmg+CkBAIC0yMTcsMjIgKzIyNiwyNiBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0SW5oZXJpCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdD46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmli
dXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0KiBjYXN0ZWRUaGlzKQogewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlhbGl6ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QpOwotCi0gICAgYXV0
byBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJ
bmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbmhlcml0TG9uZ0F0dHJpYnV0
ZSIpLCBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiB0aGlzT2Jq
ZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiks
IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIHRvSlM8SURMVW5y
ZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwg
dG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRo
TG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhUeXBlZGVmQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETElu
dGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRo
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuaW50aE9wdGlvbmFs
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZW50aEZyb3plbkFycmF5QXR0
cmlidXRlIiksIHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxP
YmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50
aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9K
UzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExT
ZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbmhlcml0TG9uZ0F0
dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxp
emUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlz
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6
OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6
OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShyZXZpc2lvbiAyNjY1NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwyMiBAQAogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRCb29sZWFuLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAiSlNET01Db252ZXJ0TnVsbGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRO
dW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVuY2VzLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUgIkpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0hlYXBBbmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXku
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgpAQCAtMjUxLDIyICsyNjAsMjgg
QEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRgogICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnNldDxzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExvbmdB
dHRyaWJ1dGVCYXIiKTsKIH0KIAotSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbDo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsKiBjYXN0ZWRUaGlzKQogewotICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0KTsKLQotICAgIGF1dG8gZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUgPSBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCBmaW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJv
ZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUo
KmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS5v
YmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUoKSkp
OworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHRvSlM8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVp
Z2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlIiksIHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElE
TEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGVudGhGcm96ZW5BcnJheUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURM
RE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHdlbGZ0
aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJm
YWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmluaGVyaXRMb25n
QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpLCB0b0pTPElETExvbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkp
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwuaAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCop
OwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVj
dCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQog
ICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25s
eS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5
LmlkbAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJl
YWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtOTcsNSArOTcsNSBAQAogICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gRmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFycmF5KCk7CiAKICAgICBbRXhwb3Nl
ZD1XaW5kb3csIE1heVRocm93RXhjZXB0aW9uXSBzdHJpbmdpZmllcjsKLSAgICBzZXJpYWxpemVy
ID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHJldmlzaW9uIDI2NjU1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNSArNDUsNSBAQAogCiAgICAgW01heVRocm93RXhjZXB0aW9uXSBET01Qb2lu
dCBtYXRyaXhUcmFuc2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4SW5pdCBtYXRyaXgpOwogCi0gICAg
c2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQx
LDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9pbnQgcDQ7IC8vIEZJWE1FOiBTaG91
bGQgYmUgW1NhbWVPYmplY3RdLgogICAgIFtOZXdPYmplY3RdIERPTVJlY3QgZ2V0Qm91bmRzKCk7
CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHku
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHkuaWRs
CShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSB1bnJlc3RyaWN0ZWQgZG91YmxlIGJvdHRvbTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
dW5yZXN0cmljdGVkIGRvdWJsZSBsZWZ0OwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRl
IH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDUgKzQxLDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBzdGFydFRpbWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmli
dXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5pZGwJKHJldmlz
aW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRp
bWluZy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUzLDUgKzUzLDUgQEAgdHlwZWRlZiBkb3VibGUg
RE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1Rp
bWVTdGFtcCByZXNwb25zZUVuZDsKICAgICBbRW5hYmxlZEF0UnVudGltZT1TZXJ2ZXJUaW1pbmdd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBGcm96ZW5BcnJheTxQZXJmb3JtYW5jZVNlcnZlclRpbWluZz4g
c2VydmVyVGltaW5nOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwgYXR0cmlidXRlIH07
CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAkocmV2aXNpb24gMjY2NTU5
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRpbWluZy5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDUgKzM2LDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1Rp
bWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICBzZXJpYWxpemVyID0ge2F0
dHJpYnV0ZX07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAkocmV2aXNpb24gMjY2NTU5KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDUgKzU0LDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsb25nIGxvYWRFdmVudFN0YXJ0OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxvbmcgbG9hZEV2ZW50RW5kOwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07
CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407982</attachid>
            <date>2020-09-04 09:22:45 -0700</date>
            <delta_ts>2020-09-04 11:23:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200904092244.patch</filename>
            <type>text/plain</type>
            <size>119321</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjU2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIwLTA5LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRsOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0lj
ZUNhbmRpZGF0ZTo6dG9KU09OIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNl
Q2FuZGlkYXRlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25E
ZXNjcmlwdGlvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50
QWRkcmVzcy5pZGw6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVz
cG9uc2UuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToK
KyAgICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAo
SXNKU09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxp
emFibGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAg
ICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRh
YmxlKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJh
dGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlv
bkRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVm
aW5pdGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgor
ICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6CisgICAg
ICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlNZW1iZXJM
aXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAgIChwYXJz
ZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBh
dHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6
IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVm
YXVsdFRvSlNPTkNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEds
b2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT05Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRvSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzZXJpYWxpemUpOiBE
ZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE9iajo6c2VyaWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6IERlbGV0ZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNP
TkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZSk6IERlbGV0
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxl
bWVudGFsRGVwZW5kZW5jaWVzLmRlcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE5vZGUuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRs
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbC5pZGw6CisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoK
KyAgICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1
YWQuaWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBh
Z2UvUGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291
cmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlk
bDoKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKwogMjAyMC0wOS0wMyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1ZGlvRGVzdGluYXRp
b25Ob2RlLm1heENoYW5uZWxDb3VudCBhbHdheXMgcmV0dXJucyAwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRs
CShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWFEZXZpY2VLaW5kIGtpbmQ7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBsYWJlbDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGdyb3VwSWQ7Ci0gICAgc2VyaWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwogCiAvLyBGSVhNRSAxNjk4NzE6IG1pc3NpbmcgSW5wdXRE
ZXZpY2VJbmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuY3BwCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDE1IEBAIFJlZjxSVENJY2VDYW5kaWRhdGU+IFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlk
YXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXgpKTsKIH0KIAorUlRDSWNlQ2FuZGlkYXRlSW5pdCBS
VENJY2VDYW5kaWRhdGU6OnRvSlNPTigpIGNvbnN0Cit7CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5p
dCByZXN1bHQ7CisgICAgcmVzdWx0LmNhbmRpZGF0ZSA9IG1fY2FuZGlkYXRlOworICAgIHJlc3Vs
dC5zZHBNaWQgPSBtX3NkcE1pZDsKKyAgICByZXN1bHQuc2RwTUxpbmVJbmRleCA9IG1fc2RwTUxp
bmVJbmRleDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAkocmV2aXNpb24gMjY2
NTU5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldENhbmRpZGF0ZShTdHJpbmcmJiBjYW5kaWRhdGUpIHsgbV9jYW5kaWRhdGUgPSBXVEZNb3Zl
KGNhbmRpZGF0ZSk7IH0KIAorICAgIFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9KU09OKCkgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgUlRDSWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRl
LCBjb25zdCBTdHJpbmcmIHNkcE1pZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHNkcE1MaW5l
SW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDYgKzUzLDUgQEAKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgcmVs
YXRlZFBvcnQKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgdWZyYWcKIAotICAgIC8vIEZJ
WE1FIDE2OTY2MjogYWRkIHVmcmFnIHRvIHRoZSBsaXN0Ci0gICAgc2VyaWFsaXplciA9IHtjYW5k
aWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0
b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZpc2lvbiAyNjY1
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgUlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc2RwOwogCi0gICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXlt
ZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJldmlzaW9uIDI2
NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEFk
ZHJlc3MuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgSW1wbGVtZW50
YXRpb25MYWNrc1ZUYWJsZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFjZSBQYXltZW50
QWRkcmVzcyB7Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRd
IG9iamVjdCB0b0pTT04oKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvdW50
cnk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmluZz4gYWRkcmVz
c0xpbmU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXlt
ZW50UmVzcG9uc2UuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTZWN1cmVDb250
ZXh0LAogXSBpbnRlcmZhY2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQgewotICAgIHNl
cmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7
CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAyNjY1
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0J
KHdvcmtpbmcgY29weSkKQEAgLTExMDEsNTAgKzExMDEsNjQgQEAgc3ViIElzV3JhcHBlclR5cGUK
ICAgICByZXR1cm4gMDsKIH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitzdWIgSW50ZXJm
YWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJm
YWNlKSA9IEBfOwogCi0gICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMDsKLSAgICAk
b2JqZWN0LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAgIG15ICRwYXJl
bnRJbnRlcmZhY2UgPSBzaGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0g
MSBpZiAkcGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7Ci0KLSAgICBy
ZXR1cm4gJGFueVBhcmVudElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlv
biAoQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRvcGVyYXRpb24t
PmlzU3RhdGljICYmICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+
dHlwZS0+bmFtZSBlcSAib2JqZWN0IikgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKLXN1YiBJc1NlcmlhbGl6YWJsZVR5cGUKKyMg
aHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLWpzb24tdHlwZXMKK3N1YiBJc0pT
T05UeXBlCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICR0eXBlKSA9IEBfOwogCi0g
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tc2VyaWFsaXphYmxlLXR5
cGUKLQorICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwogICAgIHJldHVy
biAxIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gMSBpZiAkb2JqZWN0
LT5Jc051bWVyaWNUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc0VudW1U
eXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmluZ1R5cGUoJHR5cGUp
OwotICAgIHJldHVybiAwIGlmICR0eXBlLT5uYW1lIGVxICJFdmVudEhhbmRsZXIiOwotCi0gICAg
aWYgKCR0eXBlLT5pc1VuaW9uIHx8ICRvYmplY3QtPklzRGljdGlvbmFyeVR5cGUoJHR5cGUpKSB7
Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHVuaW9uIGFuZCBkaWN0aW9uYXJ5IHR5cGVz
IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQorICAgIHJldHVybiAxIGlm
ICRvYmplY3QtPklzU3RyaW5nT3JFbnVtVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoJG9iamVjdC0+
SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCR0eXBlKSkgewogICAgICAgICBteSAkc3VidHlw
ZSA9IEB7JHR5cGUtPnN1YnR5cGVzfVswXTsKLQotICAgICAgICAjIEZJWE1FOiB3ZWJraXQub3Jn
L2IvMTk0NDM5IFtXZWJJRExdIFN1cHBvcnQgc2VyaWFsaXppbmcgc2VxdWVuY2VzIGFuZCBGcm96
ZW5BcnJheXMgb2YgaW50ZXJmYWNlcwotICAgICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0lu
dGVyZmFjZVR5cGUoJHN1YnR5cGUpOwotCi0gICAgICAgIHJldHVybiAkb2JqZWN0LT5Jc1Nlcmlh
bGl6YWJsZVR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgICAgICByZXR1cm4gJG9iamVj
dC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkc3VidHlwZSk7CisgICAgfQorICAgIGlmICgkb2Jq
ZWN0LT5Jc1JlY29yZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICR2YWx1ZVN1YnR5cGUgPSBA
eyR0eXBlLT5zdWJ0eXBlc31bMF07CisgICAgICAgIHJldHVybiAkb2JqZWN0LT5Jc0pTT05UeXBl
KCRpbnRlcmZhY2UsICR2YWx1ZVN1YnR5cGUpOwogICAgIH0KIAotICAgIHJldHVybiAwIGlmICEk
b2JqZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHR5cGUpOworICAgIGlmICgkb2JqZWN0LT5Jc0ludGVy
ZmFjZVR5cGUoJHR5cGUpKSB7CisgICAgICAgICMgU3BlY2lhbCBjYXNlIEV2ZW50SGFuZGxlciwg
c2luY2UgdGhlcmUgaXMgbm8gcmVhbCBJREwgZm9yIGl0LgorICAgICAgICByZXR1cm4gMCBpZiAk
dHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsKKworICAgICAgICBteSAkaW50ZXJmYWNlID0g
JG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7CisgICAgICAg
IGlmICgkb2JqZWN0LT5JbnRlcmZhY2VIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uKCRpbnRlcmZh
Y2UpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogCi0gICAgbXkgJGludGVy
ZmFjZUZvclR5cGUgPSAkb2JqZWN0LT5HZXRJbnRlcmZhY2VGb3JUeXBlKCRpbnRlcmZhY2UsICR0
eXBlKTsKLSAgICBpZiAoJGludGVyZmFjZUZvclR5cGUpIHsKLSAgICAgICAgcmV0dXJuIDEgaWYg
JGludGVyZmFjZUZvclR5cGUtPnNlcmlhbGl6YWJsZTsKLSAgICAgICAgcmV0dXJuICRvYmplY3Qt
PkluaGVyaXRzU2VyaWFsaXphYmxlKCRpbnRlcmZhY2VGb3JUeXBlKTsKKyAgICAgICAgbXkgJGFu
eVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24gPSAwOworICAgICAgICAkb2JqZWN0LT5G
b3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7CisgICAgICAgICAgICBteSAkcGFyZW50SW50
ZXJmYWNlID0gc2hpZnQ7CisgICAgICAgICAgICAkYW55UGFyZW50SGFzUmVndWxhclRvSlNPTk9w
ZXJhdGlvbiA9IDEgaWYgJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlv
bigkcGFyZW50SW50ZXJmYWNlKTsKKyAgICAgICAgfSwgMCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICgkdHlwZS0+aXNVbmlvbikg
eworICAgICAgICAjIEZJWE1FOiBVbmlvbiB0eXBlcyBzaG91bGQgYmUgc3VwcG9ydGVkIGlmIGFs
bCB0aGUgbWVtYmVyIHR5cGVzIGFyZSBKU09OIHR5cGVzLgorICAgICAgICBkaWUgIkRlZmF1bHQg
dG9KU09OIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGZvciB1bmlvbiB0eXBlcy5cbiI7Cisg
ICAgfQorICAgIGlmICgkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBlKSkgeworICAgICAg
ICAjIEZJWE1FOiBEaWN0aW9uYXJ5IHR5cGVzIHNob3VsZCBiZSBzdXBwb3J0ZWQgaWYgYWxsIG1l
bWJlcnMgZGVjbGFyZWQgb24gdGhlIGRpY3Rpb25hcnkgYW5kIGFsbCBpdHMgaW5oZXJpdGVkIGRp
Y3Rpb25hcmllcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJEZWZhdWx0IHRvSlNPTiBp
cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgZGljdGlvbmFyeSB0eXBlcy5cbiI7CiAgICAg
fQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMTU2LDE3ICsxMTcwLDYgQEAgc3ViIGhhc0NhY2hlZEF0
dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZQogICAgIHJldHVybiAkYXR0cmlidXRlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDYWNoZWRBdHRyaWJ1dGV9IHx8ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0N1c3RvbUdldHRlcn07CiB9CiAKLXN1YiBJc1NlcmlhbGl6YWJsZUF0dHJpYnV0
ZQotewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSA9IEBfOwotCi0g
ICAgaWYgKCRvYmplY3QtPklzU2VxdWVuY2VUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpICYmIGhhc0Nh
Y2hlZEF0dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZW5kZWRBdHRyaWJ1dGUoJGF0dHJpYnV0ZSkp
IHsKLSAgICAgICAgZGllICJTZXJpYWxpemVycyBmb3Igc2VxdWVuY2UgdHlwZXMgd2l0aCBDYWNo
ZWRBdHRyaWJ1dGUgb3IgQ3VzdG9tR2V0dGVyIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCBj
dXJyZW50bHkgc3VwcG9ydGVkLlxuIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gJG9iamVjdC0+SXNT
ZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUpOwotfQotCiBzdWIg
R2V0SW50ZXJmYWNlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbU5hbWUKIHsKICAgICAjIEZJWE1FOiBJ
dCdzIGJhZCB0byBoYXZlIGEgZnVuY3Rpb24gbGlrZSB0aGlzIHRoYXQgb3BlbnMgYW5vdGhlciBJ
REwgZmlsZSB0byBhbnN3ZXIgYSBxdWVzdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNjY1NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMTg2OCw3ICsxODY4LDYgQEAgc3ViIFByb3RvdHlwZU9wZXJhdGlv
bkNvdW50CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVy
YXRpb25zfSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKICAgICAkY291bnQgKz0gc2NhbGFyIEB7
JGludGVyZmFjZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+bWFwTGlrZTsK
ICAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30g
aWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLSAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7
CiAKICAgICByZXR1cm4gJGNvdW50OwogfQpAQCAtMjc4MSwxMSArMjc4MCw2IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZ2V0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TmFtZWRDb25zdHJ1
Y3Rvcn07CiAgICAgfQogCi0gICAgIyBTZXJpYWxpemVyIGZ1bmN0aW9uLgotICAgIGlmICgkaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCAk
e2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7XG4iKTsKLSAgICB9
Ci0gICAgCiAgICAgbXkgJG51bUN1c3RvbU9wZXJhdGlvbnMgPSAwOwogICAgIG15ICRudW1DdXN0
b21BdHRyaWJ1dGVzID0gMDsKIApAQCAtMzE4Nyw3ICszMTgxLDYgQEAgc3ViIEdlbmVyYXRlUHJv
cGVydGllc0hhc2hUYWJsZQogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+aXRl
cmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBA
eyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtl
OwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogICAgIGZvcmVhY2ggbXkgJG9w
ZXJhdGlvbiAoQG9wZXJhdGlvbnMpIHsKICAgICAgICAgbmV4dCBpZiAoJG9wZXJhdGlvbi0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9IGFuZCBub3QgJG9wZXJhdGlvbi0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHVibGljSWRlbnRpZmllcn0pOwogICAgICAgICBuZXh0IGlm
ICgkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CkBAIC0zOTk1LDcgKzM5ODgsNiBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+aXRl
cmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBA
eyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtl
OwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgbXkgQGF0dHJpYnV0
ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9OwogICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7
JGludGVyZmFjZS0+bWFwTGlrZS0+YXR0cmlidXRlc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7
CkBAIC00Njc0LDcgKzQ2NjYsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0K
ICAgICAKICAgICBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50
ZXJmYWNlLT5pdGVyYWJsZTsKLSAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9uKCRpbnRl
cmZhY2UsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKQEAgLTU0MjAsNyArNTQxMSwxMCBAQCBzdWIg
R2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uCiAKICAgICByZXR1cm4gaWYgSXNKU0J1aWx0aW4o
JGludGVyZmFjZSwgJG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmlzSXRl
cmFibGU7Ci0gICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmlzU2VyaWFsaXplcjsKKyAgICAKKyAg
ICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RGVmYXVsdH0pIHsKKyAgICAg
ICAgcmV0dXJuIEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24oJG91dHB1dEFycmF5
LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKTsKKyAgICB9CiAKICAgICBteSAk
aXNDdXN0b20gPSBIYXNDdXN0b21NZXRob2QoJG9wZXJhdGlvbik7CiAgICAgbXkgJGlzT3Zlcmxv
YWRlZCA9ICRvcGVyYXRpb24tPntvdmVybG9hZHN9ICYmIEB7JG9wZXJhdGlvbi0+e292ZXJsb2Fk
c319ID4gMTsKQEAgLTU1NDAsMTAwICs1NTM0LDk1IEBAIHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRl
ZmluaXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRlbmRBcHBsZUNvcHlyaWdodCkgaWYg
JGluQXBwbGVDb3B5cmlnaHQ7CiB9CiAKLXN1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9u
CitzdWIgR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlvbgogewotICAgIG15ICgkaW50
ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOwotCi0gICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50
ZXJmYWNlLT50eXBlLT5uYW1lOworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkcGFyZW50U2VyaWFsaXplcklu
dGVyZmFjZSA9IDA7Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJp
dCkgewotICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBz
dWIgewotICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OwotICAgICAgICAg
ICAgaWYgKCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAmJiAhJHBhcmVudFNlcmlhbGl6
ZXJJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgICAgICAkcGFyZW50U2VyaWFsaXplckludGVyZmFj
ZSA9ICRwYXJlbnRJbnRlcmZhY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIDApOwotICAg
ICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcmZhY2Ugd2l0aCBcInNlcmlhbGl6
ZXJcIiBmb3IgXCJpbmhlcml0XCIgc2VyaWFsaXplciBpbiAkaW50ZXJmYWNlTmFtZVxuIiBpZiAh
JHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2U7CisgICAgaWYgKCRvcGVyYXRpb24tPm5hbWUgZXEg
InRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAib2JqZWN0IikgeworICAgICAg
ICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5pdGlvbigkb3V0cHV0
QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwogICAgIH0KIAotICAg
IG15IEBzZXJpYWxpemVkQXR0cmlidXRlcyA9ICgpOworICAgIGRpZSAiW0RlZmF1bHRdIGlzIG5v
dCBzdXBwb3J0IGZvciBmb3IgdGhpcyBvcGVyYXRpb24gKCIgLiAkb3BlcmF0aW9uLT5uYW1lIC4g
IikuIEl0IGlzIG9ubHkgY3VycmVudGx5IGRlZmluZWQgZm9yICdvYmplY3QgdG9KU09OKCk7Jy4i
Cit9CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1lIChAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgbXkgJGZvdW5kQXR0cmlidXRlID0gMDsK
LSAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9
KSB7Ci0gICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEgJGF0dHJpYnV0ZS0+bmFtZSkg
ewotICAgICAgICAgICAgICAgICRmb3VuZEF0dHJpYnV0ZSA9IDE7Ci0gICAgICAgICAgICAgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NlcmlhbGl6YWJsZUF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAk
YXR0cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBzZXJpYWxpemVkQXR0cmli
dXRlcywgJGF0dHJpYnV0ZSk7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBs
YXN0OwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGRpZSAiRXhwbGljaXQgXCJzZXJpYWxpemVyXCIgYXR0cmlidXRlIFwiJGF0dHJpYnV0ZU5h
bWVcIiBpcyBub3Qgc2VyaWFsaXphYmxlXG4iIGlmICEkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
Pmhhc0F0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgXCJzZXJpYWxpemVyXCIgYXR0cmli
dXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpbiAkaW50ZXJmYWNlTmFtZVxuIiBpZiAhJGZvdW5kQXR0
cmlidXRlOwotICAgIH0KK3N1YiBHZW5lcmF0ZURlZmF1bHRUb0pTT05PcGVyYXRpb25EZWZpbml0
aW9uCit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9w
ZXJhdGlvbikgPSBAXzsKIAotICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gInRvSlNP
TiI7Ci0gICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRv
ci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAgIyBodHRw
czovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kZWZhdWx0LXRvanNvbgogCi0gICAgQWRk
VG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOwor
ICAgIG15IEBpbmhlcml0ZW5jZVN0YWNrID0gKCk7CisgICAgcHVzaChAaW5oZXJpdGVuY2VTdGFj
aywgJGludGVyZmFjZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkZvckFsbFBhcmVudHMoJGludGVy
ZmFjZSwgc3ViIHsKKyAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OworICAgICAg
ICBwdXNoKEBpbmhlcml0ZW5jZVN0YWNrLCAkcGFyZW50SW50ZXJmYWNlKTsKKyAgICB9LCAwKTsK
IAotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU09iamVjdCogSlMke2ludGVyZmFjZU5h
bWV9OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsICR7Y2xh
c3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdClcbiIp
OwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwor
ICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUoJGludGVyZmFjZSwgJGNsYXNz
TmFtZSwgJG9wZXJhdGlvbik7CisKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUJvZHkoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcylc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwogCi0gICAgaWYgKCRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAgICBteSAkcGFyZW50U2VyaWFs
aXplckludGVyZmFjZU5hbWUgPSAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZS0+dHlwZS0+bmFt
ZTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gSlMke3Bh
cmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgp
KTtcbiIpOwotICAgIH0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVj
dFByb3RvdHlwZSgpKTtcbiIpOwogCi0gICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAc2VyaWFs
aXplZEF0dHJpYnV0ZXMpIHsKLSAgICAgICAgIyBGSVhNRTogQXR0cmlidXRlcyB0aGF0IHRocm93
IGV4Y2VwdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBzZXJpYWxpemVycyB5ZXQuCisgICAg
IHdoaWxlIChAaW5oZXJpdGVuY2VTdGFjaykgeworICAgICAgICBteSAkY3VycmVudEludGVyZmFj
ZSA9IHBvcChAaW5oZXJpdGVuY2VTdGFjayk7CiAKLSAgICAgICAgbXkgJG5hbWUgPSAkYXR0cmli
dXRlLT5uYW1lOwotICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0QXR0cmlidXRlR2V0
dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAke2dldEZ1bmN0aW9uTmFt
ZX1HZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7XG4iKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xu
Iik7Ci0KLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0ludGVyZmFjZVR5cGUoJGF0dHJp
YnV0ZS0+dHlwZSkpIHsKLSAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVJbnRlcmZhY2VOYW1lID0g
JGF0dHJpYnV0ZS0+dHlwZS0+bmFtZTsKLSAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBl
LT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCEke25hbWV9VmFsdWUuaXNOdWxsKCkpIHtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMk
e2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwg
KmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9i
YWxPYmplY3QpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7
bmFtZX1cIiksICR7bmFtZX1TZXJpYWxpemVkVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgfSBlbHNlXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9
OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50
ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRW
YWx1ZSk7XG4iKTsKKyAgICAgICAgbXkgJGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24gPSAwOwor
ICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGN1cnJlbnRJbnRlcmZhY2UtPm9wZXJh
dGlvbnN9KSB7CisgICAgICAgICAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57RGVmYXVsdH0gJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAidG9KU09OIiAmJiAkb3BlcmF0aW9u
LT50eXBlLT5uYW1lIGVxICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgJGhhc0RlZmF1bHRU
b0pTT05PcGVyYXRpb24gPSAxOworICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9
XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCRoYXNEZWZh
dWx0VG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUg
KEB7JGN1cnJlbnRJbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICAgICAgbmV4
dCBpZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAgICAgICAgICBuZXh0IGlmICEkY29k
ZUdlbmVyYXRvci0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBlKTsKIAot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgICAgICAgICAgICAgbXkgJGNv
bmRpdGlvbmFsID0gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9
OworICAgICAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0
aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KTs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZU5h
bWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAgICAgICAgICAgIG15ICgkYmFzZUZ1bmN0aW9u
TmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWlt
cGxJbmNsdWRlcywgJGN1cnJlbnRJbnRlcmZhY2UtPnR5cGUtPm5hbWUsICRhdHRyaWJ1dGUpOwor
ICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdWxseVF1YWxpZmllZEltcGxl
bWVudGF0aW9uQ2FsbE5hbWUoJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICRiYXNlRnVu
Y3Rpb25OYW1lLCAiaW1wbCIsICRjb25kaXRpb25hbCk7CisgICAgICAgICAgICAgICAgbXkgJHRv
SlNFeHByZXNzaW9uID0gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkYXR0cmlidXRlLCAk
Y3VycmVudEludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1l
bnRzKSAuICIpIiwgIipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpOworCisgICAgICAgICAg
ICAgICAgbXkgJG5lZWRzUnVudGltZUNoZWNrID0gTmVlZHNSdW50aW1lQ2hlY2soJGN1cnJlbnRJ
bnRlcmZhY2UsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgICAgIGlmICgkbmVlZHNSdW50aW1l
Q2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJHJ1bnRpbWVFbmFibGVDb25kaXRpb25h
bFN0cmluZyA9IEdlbmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nKCRjdXJyZW50
SW50ZXJmYWNlLCAkYXR0cmlidXRlLCAiY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICgke3J1bnRpbWVF
bmFibGVDb25kaXRpb25hbFN0cmluZ30pIHtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBcIiR7YXR0cmlidXRlTmFtZX1cIiksICR7dG9KU0V4cHJlc3Npb259
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxu
Iik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBcIiR7YXR0cmlidXRlTmFtZX1cIiksICR7dG9KU0V4cHJlc3Npb259KTtcbiIp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiI2VuZGlmXG5cbiIp
IDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIlxuIik7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfUJvZHkoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NOYW1lfSog
dGhpc09iamVjdClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyR7aW50ZXJmYWNl
TmFtZX06OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0
aW9uTmFtZX0oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTJHtpbnRlcmZhY2VOYW1l
fT46OmNhbGw8JHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfUJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBcIiR7c2VyaWFsaXplckZ1bmN0aW9uTmFtZX1cIik7XG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4iKTsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPnR5cGUtPm5hbWU7
CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAk
e2Z1bmN0aW9uTmFtZX0oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBJRExPcGVyYXRpb248SlMke2ludGVy
ZmFjZU5hbWV9Pjo6Y2FsbDwke2Z1bmN0aW9uTmFtZX1Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgXCJ0b0pTT05cIik7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ9XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiIpOwogfQogCiBzdWIgR2VuZXJh
dGVHZXRDYWxsRGF0YQpAQCAtNzU4NSw3ICs3NTc0LDYgQEAgc3ViIEdldFJ1bnRpbWVFbmFibGVk
U3RhdGljUHJvcGVydGllcwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+aXRl
cmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVy
ZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBA
eyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXRMaWtl
OwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5vcGVy
YXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogICAgIGZvcmVhY2ggbXkgJG9w
ZXJhdGlvbiAoQG9wZXJhdGlvbnMpIHsKICAgICAgICAgbmV4dCBpZiAoJG9wZXJhdGlvbi0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9IGFuZCBub3QgJG9wZXJhdGlvbi0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHVibGljSWRlbnRpZmllcn0pOwogICAgICAgICBuZXh0IGlm
ICRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fSAmJiAkb3BlcmF0aW9uLT57b3ZlcmxvYWRJbmRl
eH0gPiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1
dGVzLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9J
RExBdHRyaWJ1dGVzLmpzb24JKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIs
NiArMTYyLDkgQEAKICAgICAgICAgICAgICJ2YWx1ZXMiOiBbIiIsICJSZWFkRE9NIiwgIkdldHRl
ciJdLAogICAgICAgICAgICAgInN1cHBvcnRzQ29uanVuY3Rpb24iOiB0cnVlCiAgICAgICAgIH0s
CisgICAgICAgICJEZWZhdWx0IjogeworICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsi
b3BlcmF0aW9uIl0KKyAgICAgICAgfSwKICAgICAgICAgIkRlZmF1bHREZWZpbmVPd25Qcm9wZXJ0
eSI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCiAgICAg
ICAgIH0sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNl
ci5wbQkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExQYXJzZXIucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDYgQEAgc3RydWN0KCBJ
RExJbnRlcmZhY2UgPT4gewogICAgIGFzeW5jSXRlcmFibGUgPT4gJyQnLCAjIFVzZWQgZm9yIGFz
eWNuIGl0ZXJhYmxlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETEFzeW5jSXRlcmFibGUnCiAgICAg
bWFwTGlrZSA9PiAnJCcsICMgVXNlZCBmb3IgbWFwTGlrZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJ
RExNYXBMaWtlJwogICAgIHNldExpa2UgPT4gJyQnLCAjIFVzZWQgZm9yIHNldExpa2UgaW50ZXJm
YWNlcywgb2YgdHlwZSAnSURMU2V0TGlrZScKLSAgICBzZXJpYWxpemFibGUgPT4gJyQnLCAjIFVz
ZWQgZm9yIHNlcmlhbGl6YWJsZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExTZXJpYWxpemFibGUn
CiAgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKIH0pOwogCkBAIC05NCw3ICs5Myw2IEBA
IHN0cnVjdCggSURMT3BlcmF0aW9uID0+IHsKICAgICBpc0NvbnN0cnVjdG9yID0+ICckJywKICAg
ICBpc1N0YXRpYyA9PiAnJCcsCiAgICAgaXNJdGVyYWJsZSA9PiAnJCcsCi0gICAgaXNTZXJpYWxp
emVyID0+ICckJywKICAgICBpc1N0cmluZ2lmaWVyID0+ICckJywKICAgICBpc01hcExpa2UgPT4g
JyQnLAogICAgIGlzU2V0TGlrZSA9PiAnJCcsCkBAIC0xNTQsMTUgKzE1Miw2IEBAIHN0cnVjdCgg
SURMU2V0TGlrZSA9PiB7CiAgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKIH0pOwogCi0j
IGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1zZXJpYWxpemVycwotc3RydWN0
KCBJRExTZXJpYWxpemFibGUgPT4gewotICAgIGF0dHJpYnV0ZXMgPT4gJ0AnLCAjIExpc3Qgb2Yg
YXR0cmlidXRlcyB0byBzZXJpYWxpemUKLSAgICBoYXNBdHRyaWJ1dGUgPT4gJyQnLCAjIHNlcmlh
bGl6ZXIgPSB7IGF0dHJpYnV0ZSB9Ci0gICAgaGFzSW5oZXJpdCA9PiAnJCcsICMgc2VyaWFsaXpl
ciA9IHsgaW5oZXJpdCB9Ci0gICAgaGFzR2V0dGVyID0+ICckJywgIyBzZXJpYWxpemVyID0geyBn
ZXR0ZXIgfQotICAgIG9wZXJhdGlvbnMgPT4gJ0AnLCAjIHRvSlNPTiBvcGVyYXRpb24KLX0pOwot
CiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1jb25zdGFudHMKIHN0cnVj
dCggSURMQ29uc3RhbnQgPT4gewogICAgIG5hbWUgPT4gJyQnLApAQCAtNTk5LDcgKzU4OCw2IEBA
IHN1YiBjbG9uZU9wZXJhdGlvbgogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzQ29uc3RydWN0b3Io
JG9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcik7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNTdGF0
aWMoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzSXRlcmFi
bGUoJG9wZXJhdGlvbi0+aXNJdGVyYWJsZSk7Ci0gICAgJGNsb25lZE9wZXJhdGlvbi0+aXNTZXJp
YWxpemVyKCRvcGVyYXRpb24tPmlzU2VyaWFsaXplcik7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+
aXNTdHJpbmdpZmllcigkb3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKTsKICAgICAkY2xvbmVkT3Bl
cmF0aW9uLT5pc01hcExpa2UoJG9wZXJhdGlvbi0+aXNNYXBMaWtlKTsKICAgICAkY2xvbmVkT3Bl
cmF0aW9uLT5pc1NldExpa2UoJG9wZXJhdGlvbi0+aXNTZXRMaWtlKTsKQEAgLTY1MSw5ICs2Mzks
OSBAQCBteSAkbmV4dFR5cGVfMSA9ICdeKEJ5dGVTdHJpbmd8RE9NU3RyaW5nCiBteSAkbmV4dFNw
ZWNpYWxzXzEgPSAnXihkZWxldGVyfGdldHRlcnxsZWdhY3ljYWxsZXJ8c2V0dGVyKSQnOwogbXkg
JG5leHREZWZpbml0aW9uc18xID0gJ14oY2FsbGJhY2t8ZGljdGlvbmFyeXxlbnVtfGV4Y2VwdGlv
bnxpbnRlcmZhY2V8bmFtZXNwYWNlfHBhcnRpYWx8dHlwZWRlZikkJzsKIG15ICRuZXh0RXhjZXB0
aW9uTWVtYmVyc18xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfFxbfGFu
eXxib29sZWFufGJ5dGV8Y29uc3R8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fG9wdGlv
bmFsfHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVk
KSQnOwotbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0
cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0
b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bGVnYWN5Y2FsbGVyfGxvbmd8
b2JqZWN0fG9jdGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNlcmlhbGl6ZXJ8c2V0dGVyfHNob3J0fHN0
YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkk
JzsKK215ICRuZXh0SW50ZXJmYWNlTWVtYmVyc18xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJp
bmd8VVNWU3RyaW5nfGFueXxhdHRyaWJ1dGV8Ym9vbGVhbnxieXRlfGNvbnN0fGNvbnN0cnVjdG9y
fGRlbGV0ZXJ8ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGxlZ2FjeWNhbGxlcnxsb25nfG9i
amVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lm
aWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRO
YW1lc3BhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8
YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8
c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7
Ci1teSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9N
U3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxkZWxldGVy
fGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsZWdhY3ljYWxsZXJ8bG9uZ3xvYmplY3R8b2N0
ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmlu
Z2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5l
eHRQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xV
U1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8ZGVsZXRlcnxkb3VibGV8
ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bGVnYWN5Y2FsbGVyfGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRv
bmx5fHNlcXVlbmNlfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8c3ltYm9sfHVuZGVm
aW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dFNpbmdsZVR5cGVfMSA9ICde
KEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0
fGxvbmd8b2JqZWN0fG9jdGV0fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRBcmd1bWVudE5hbWVfMSA9ICdeKGFzeW5jfGF0
dHJpYnV0ZXxjYWxsYmFja3xjb25zdHxjb25zdHJ1Y3RvcnxkZWxldGVyfGRpY3Rpb25hcnl8ZW51
bXxnZXR0ZXJ8aW5jbHVkZXN8aW5oZXJpdHxpbnRlcmZhY2V8aXRlcmFibGV8bWFwbGlrZXxtaXhp
bnxuYW1lc3BhY2V8cGFydGlhbHxyZWFkb25seXxyZXF1aXJlZHxzZXRsaWtlfHNldHRlcnxzdGF0
aWN8c3RyaW5naWZpZXJ8dHlwZWRlZnx1bnJlc3RyaWN0ZWQpJCc7CiBteSAkbmV4dENvbnN0VmFs
dWVfMSA9ICdeKGZhbHNlfHRydWUpJCc7CkBAIC0xMTg2LDEyICsxMTc0LDYgQEAgc3ViIHBhcnNl
UGFydGlhbEludGVyZmFjZU1lbWJlcgogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiaW5oZXJp
dCIpIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZUluaGVyaXRBdHRyaWJ1dGUoJGV4dGVu
ZGVkQXR0cmlidXRlTGlzdCk7CiAgICAgfQotCi0gICAgIyBGSVhNRTogUmVtb3ZlLiBUaGlzIGlz
IG5vIGxvbmdlciBwYXJ0IG9mIFdlYklETC4gUmVwbGFjZSB3aXRoIFtTZXJpYWxpemFibGVdLgot
ICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKLSAgICAgICAgcmV0dXJu
ICRzZWxmLT5wYXJzZVNlcmlhbGl6ZXIoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgfQot
CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuIHx8ICRuZXh0LT52YWx1
ZSgpID1+IC8kbmV4dE9wZXJhdGlvbl8xLykgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNl
T3BlcmF0aW9uKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgICB9CkBAIC0xNzE0LDExNCAr
MTY5Niw2IEBAIHN1YiBwYXJzZUNvbnN0cnVjdG9yCiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0
ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXJpYWxp
emVyCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1dGVM
aXN0ID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBp
ZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAic2VyaWFsaXplciIsIF9fTElORV9fKTsK
LSAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgICAgIG15ICRuZXdE
YXRhTm9kZTsKLSAgICAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIG5lICI7IikgewotICAgICAgICAg
ICAgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0
cmlidXRlTGlzdCk7Ci0gICAgICAgICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6
YWJsZS0+bmV3KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBteSAkdG9KU09OT3BlcmF0aW9uID0g
SURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+bmFtZSgidG9K
U09OIik7Ci0KLSAgICAgICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlkRm9y
Q29udGV4dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAib3BlcmF0aW9uIik7Ci0gICAgICAgICR0
b0pTT05PcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0
KTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+aXNTZXJpYWxpemVyKDEpOwotICAgICAgICBw
dXNoKEB7JG5ld0RhdGFOb2RlLT5vcGVyYXRpb25zfSwgJHRvSlNPTk9wZXJhdGlvbik7Ci0KLSAg
ICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19M
SU5FX18pOwotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAgIH0KLSAgICAkc2VsZi0+
YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7Ci19Ci0KLXN1
YiBwYXJzZVNlcmlhbGl6ZXJSZXN0Ci17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAk
ZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxmLT5u
ZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7Ci0gICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9fTElORV9fKTsK
LQotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsKLQot
ICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQt
PnZhbHVlKCkgZXEgIigiKSB7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRpb25S
ZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIH0KLX0KLQotc3ViIHBhcnNlU2VyaWFs
aXphdGlvblBhdHRlcm4KLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotCi0gICAgbXkgJG5leHQg
PSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7Iikgewot
ICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInsiLCBf
X0xJTkVfXyk7Ci0gICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+bmV3
KCk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCRuZXdEYXRh
Tm9kZSk7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAifSIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAgICB9Ci0g
ICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJbIikgewotICAgICAgICBkaWUgIlNlcmlhbGl6YXRp
b24gb2YgbGlzdHMgcGF0dGVybiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwotICAgIH0K
LSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgbXkg
QGF0dHJpYnV0ZXMgPSAoKTsKLSAgICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7
Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4p
OwotICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOwotCi0gICAgICAg
IG15ICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+bmV3KCk7Ci0gICAgICAgICRuZXdE
YXRhTm9kZS0+YXR0cmlidXRlcyhcQGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIHJldHVybiAkbmV3
RGF0YU5vZGU7Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQt
PnZhbHVlKCksIF9fTElORV9fKTsKLX0KLQotc3ViIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0
ZXMKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRzZXJpYWxpemFibGUgPSBzaGlm
dDsKLQotICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7Ci0gICAgbXkgQGlkZW50aWZpZXJzID0gJHNl
bGYtPnBhcnNlSWRlbnRpZmllckxpc3QoKTsKLQotICAgIGZvciBteSAkaWRlbnRpZmllciAoQGlk
ZW50aWZpZXJzKSB7Ci0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiZ2V0dGVyIikgewotICAg
ICAgICAgICAgJHNlcmlhbGl6YWJsZS0+aGFzR2V0dGVyKDEpOwotICAgICAgICAgICAgZGllICJT
ZXJpYWxpemVyIGdldHRlciBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImluaGVyaXQiKSB7Ci0gICAg
ICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNJbmhlcml0KDEpOwotICAgICAgICAgICAgbmV4dDsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiYXR0cmlidXRlIikgewot
ICAgICAgICAgICAgJHNlcmlhbGl6YWJsZS0+aGFzQXR0cmlidXRlKDEpOwotICAgICAgICAgICAg
IyBBdHRyaWJ1dGVzIHdpbGwgYmUgZmlsbGVkIGluIHZpYSBhcHBseU1lbWJlckxpc3QoKQotICAg
ICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICRp
ZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICAkc2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzKFxAYXR0
cmlidXRlcyk7Ci19Ci0KIHN1YiBwYXJzZUlkZW50aWZpZXJMaXN0CiB7CiAgICAgbXkgJHNlbGYg
PSBzaGlmdDsKQEAgLTMzNjIsMjMgKzMyMzYsNiBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBuZXh0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChyZWYo
JGl0ZW0pIGVxICJJRExTZXJpYWxpemFibGUiKSB7Ci0gICAgICAgICAgICAkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUoJGl0ZW0pOwotICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgbXkgJG51bVNl
cmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0
ZXN9OwotICAgICAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGUp
IHsKLSAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRy
aWJ1dGVzfSkgewotICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNpZiAoJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKLSAgICAgICAgICAg
IGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9
LCAkYXR0cmlidXRlLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRh
bERlcGVuZGVuY2llcy5kZXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAJKHJldmlzaW9uIDI2NjU1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxE
ZXBlbmRlbmNpZXMuZGVwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBAIFdlYkRPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci4KIEpTVGVzdERPTUpJVC5oOiAKIERPTVRl
c3RET01KSVQuaDogCiBXZWJET01UZXN0RE9NSklULmg6IAorSlNUZXN0RGVmYXVsdFRvSlNPTi5o
OiAKK0RPTVRlc3REZWZhdWx0VG9KU09OLmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pTT04uaDog
CiBKU1Rlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIERPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5o
OiAKIFdlYkRPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09O
LmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCitlbnVtIFRlc3REZWZhdWx0VG9KU09ORW51bSB7CisgICAgIkVudW1WYWx1
ZTEiLAorICAgICJFbnVtVmFsdWUyIgorfTsKKworaW50ZXJmYWNlIFRlc3REZWZhdWx0VG9KU09O
IHsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0cmluZ0F0dHJpYnV0ZTsKKyAgICBbRW5hYmxl
ZEF0UnVudGltZT1UZXN0UnVudGltZUVuYWJsZWRdcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbG9u
Z0F0dHJpYnV0ZTsKKyAgICBbRW5hYmxlZEJ5U2V0dGluZz1UZXN0U2V0dGluZ10gcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlOworICAg
IFtDb25kaXRpb25hbD1URVNUX0NPTkRJVElPTkFMXSByZWFkb25seSBhdHRyaWJ1dGUgVGVzdERl
ZmF1bHRUb0pTT05FbnVtIGVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlOworICAgIGF0dHJp
YnV0ZSBFdmVudEhhbmRsZXIgZXZlbnRIYW5kbGVyQXR0cmlidXRlOworICAgIAorICAgIFtEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw1ICszNSw1IEBACiAgICAgW1NlY3VyZUNvbnRleHRdIGJvb2xlYW4gZ2V0
U2VjcmV0Qm9vbGVhbigpOwogICAgIFtDb25kaXRpb25hbD1URVNUX0ZFQVRVUkUsIFNlY3VyZUNv
bnRleHQsIEVuYWJsZWRBdFJ1bnRpbWU9VGVzdEZlYXR1cmVdIGJvb2xlYW4gdGVzdEZlYXR1cmVH
ZXRTZWNyZXRCb29sZWFuKCk7CiAKLSAgICBzZXJpYWxpemVyOworICAgIFtEZWZhdWx0XSBvYmpl
Y3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00
MzUsOCArNDM1LDYgQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdwog
CiAgICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0cmluZyBzdHJpbmdpZmllckF0dHJpYnV0
ZTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7Y3JlYXRlLCByZWFkT25seVN0cmluZ0F0dHIsIGVudW1B
dHRyLCBsb25nQXR0cn07Ci0KICAgICB1bmRlZmluZWQgYnVmZmVyU291cmNlUGFyYW1ldGVyKEJ1
ZmZlclNvdXJjZSBkYXRhKTsKIAogICAgIGxlZ2FjeWNhbGxlciB1bmRlZmluZWQgbGVnYWN5Q2Fs
bGVyTmFtZWQobG9uZyBwYXJhbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwJKHJldmlzaW9u
IDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2Vy
aWFsaXphdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAgaW50ZXJmYWNl
IFRlc3RTZXJpYWxpemF0aW9uIHsKICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8RE9NU3RyaW5nPiBl
bGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlOwogICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD4gdHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRl
OwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbAko
cmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDUgKzI2
LDUgQEAKIGludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgOiBUZXN0U2VyaWFsaXph
dGlvbiB7CiAgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBpbmhlcml0TG9uZ0F0
dHJpYnV0ZTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGluaGVyaXQsIGF0dHJpYnV0ZSB9OworICAg
IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw1ICsyNyw1IEBAIGludGVyZmFjZSBUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbCAKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAg
IGZpbmFsTG9uZ0F0dHJpYnV0ZUZvbzsKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAg
ICAgIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhcjsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGluaGVyaXQs
IGZpbmFsTG9uZ0F0dHJpYnV0ZUJhciB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT04uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRU
b0pTT04uaCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5n
cy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAi
SlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgor
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBB
bmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJz
cGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bv
aW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworU3RyaW5nIGNvbnZlcnRFbnVtZXJh
dGlvblRvU3RyaW5nKFRlc3REZWZhdWx0VG9KU09OOjpFbnVtIGVudW1lcmF0aW9uVmFsdWUpCit7
CisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdmFsdWVzW10gPSB7Cisg
ICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFbnVtVmFsdWUxIiksCisgICAgICAgIE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJFbnVtVmFsdWUyIiksCisgICAgfTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdERlZmF1bHRUb0pTT046OkVudW06OkVudW1W
YWx1ZTEpID09IDAsICJUZXN0RGVmYXVsdFRvSlNPTjo6RW51bTo6RW51bVZhbHVlMSBpcyBub3Qg
MCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihU
ZXN0RGVmYXVsdFRvSlNPTjo6RW51bTo6RW51bVZhbHVlMikgPT0gMSwgIlRlc3REZWZhdWx0VG9K
U09OOjpFbnVtOjpFbnVtVmFsdWUyIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVOR1RI
KHZhbHVlcykpOworICAgIHJldHVybiB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJh
dGlvblZhbHVlKV07Cit9CisKK3RlbXBsYXRlPD4gSlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFRlc3REZWZhdWx0VG9K
U09OOjpFbnVtIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmco
ZW51bWVyYXRpb25WYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3REZWZhdWx0
VG9KU09OOjpFbnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09OOjpFbnVtPihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMSIpCisgICAgICAgIHJldHVy
biBUZXN0RGVmYXVsdFRvSlNPTjo6RW51bTo6RW51bVZhbHVlMTsKKyAgICBpZiAoc3RyaW5nVmFs
dWUgPT0gIkVudW1WYWx1ZTIiKQorICAgICAgICByZXR1cm4gVGVzdERlZmF1bHRUb0pTT046OkVu
dW06OkVudW1WYWx1ZTI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8
PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3REZWZhdWx0VG9KU09O
OjpFbnVtPigpCit7CisgICAgcmV0dXJuICJcIkVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIi
OworfQorCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
KyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisjZW5kaWYK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSBmaW5hbCA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05Q
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdERl
ZmF1bHRUb0pTT05Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdERlZmF1bHRU
b0pTT05Qcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
REVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4g
JnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAg
ICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlLCBKU1Rlc3RE
ZWZhdWx0VG9KU09OUHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RGVm
YXVsdFRvSlNPTj47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OQ29u
c3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAg
IHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8
PiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRp
ZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09O
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3REZWZhdWx0VG9KU09OIl9zKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVs
dFRvSlNPTiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxl
IGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdERl
ZmF1bHRUb0pTT05Qcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3Rv
ciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVs
dFRvSlNPTkNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAic3RyaW5nQXR0cmlidXRlIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZh
dWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJp
YnV0ZSkgfSB9LAorICAgIHsgImxvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisgICAgeyAi
ZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKSwgKGludHB0
cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAor
I2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAgIHsgImVuYWJsZWRCeUNvbmRpdGlvbmFs
QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRU
b0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyNlbHNlCisgICAgeyAw
LCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorICAgIHsgImV2ZW50SGFuZGxl
ckF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0b0pTT04i
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkg
KDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3Rv
dHlwZSkgfTsKKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5
U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6aW5mbygpLCBKU1Rlc3RE
ZWZhdWx0VG9KU09OUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBib29sIGhhc0Rp
c2FibGVkUnVudGltZVByb3BlcnRpZXMgPSBmYWxzZTsKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdFJ1bnRpbWVFbmFibGVkRW5hYmxlZCgpKSB7
CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOworICAgICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigibG9uZ0F0dHJpYnV0ZSIpLCBzdHJsZW4oImxvbmdBdHRyaWJ1
dGUiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06
OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVsZXRl
UHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlz
LCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9CisgICAgaWYgKCFk
b3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5h
YmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwor
ICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUi
KSwgc3RybGVuKCJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgVk06OkRl
bGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJ
Z25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAg
ICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyAgICBpZiAoaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVy
dGllcyAmJiBzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIGZsYXR0ZW5EaWN0
aW9uYXJ5T2JqZWN0KHZtKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJ
T04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT046OnNfaW5mbyA9
IHsgIlRlc3REZWZhdWx0VG9KU09OIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OKSB9OworCitKU1Rlc3REZWZh
dWx0VG9KU09OOjpKU1Rlc3REZWZhdWx0VG9KU09OKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1w
bCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0RGVmYXVsdFRvSlNPTj4oc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNP
Tjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgc3RhdGljX2Fzc2Vy
dCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdERlZmF1bHRUb0pTT04+Ojp2
YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4g
dGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIp
OworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OOjpjcmVhdGVQcm90b3R5cGUo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBK
U1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBK
U1Rlc3REZWZhdWx0VG9KU09OOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0RGVmYXVsdFRv
SlNPTjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3REZWZhdWx0VG9K
U09OQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTjo6ZGVzdHJveShKU0M6
OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09OKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KGNlbGwpOworICAgIHRoaXNPYmplY3Qt
PkpTVGVzdERlZmF1bHRUb0pTT046On5KU1Rlc3REZWZhdWx0VG9KU09OKCk7Cit9CisKK3RlbXBs
YXRlPD4gaW5saW5lIEpTVGVzdERlZmF1bHRUb0pTT04qIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZh
dWx0VG9KU09OPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVz
dERlZmF1bHRUb0pTT04qPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZh
dWx0VG9KU09OKiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTj46OmNhc3QoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQorewor
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSo+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90
b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdERlZmF1
bHRUb0pTT046OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0
VG9KU09OQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBl
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsK
KyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TdHJpbmdB
dHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBdHRyaWJ1dGUoKSkpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZh
dWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGVHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJzdHJpbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Cisg
ICAgICAgIHJldHVybiBpbXBsLnNldFN0cmluZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVs
dFRvSlNPTlN0cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNl
dEpTVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJpYnV0ZSIpOworfQor
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGVH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRU
b0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwubG9uZ0F0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAibG9uZ0F0dHJp
YnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVu
YWJsZWRCeVNldHRpbmdzQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVu
YWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0
PGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZUdldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIik7Cit9CisKKyNpZiBFTkFCTEUoVEVT
VF9DT05ESVRJT05BTCkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09O
RW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETEVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09OOjpFbnVtPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSgp
KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29u
ZGl0aW9uYWxBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORW5h
YmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFibGVkQnlDb25k
aXRpb25hbEF0dHJpYnV0ZSIpOworfQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVy
biBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMo
KS5lbnRIYW5kbGVyQXR0cmlidXRlRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3Qp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJB
dHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRy
aWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERl
ZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBzZXRFdmVudEhhbmRsZXJB
dHRyaWJ1dGUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhpc09iamVjdC53cmFw
cGVkKCksIGV2ZW50TmFtZXMoKS5lbnRIYW5kbGVyQXR0cmlidXRlRXZlbnQsIHZhbHVlKTsKKyAg
ICB2bS5oZWFwLndyaXRlQmFycmllcigmdGhpc09iamVjdCwgdmFsdWUpOworICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpT
VGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRl
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJl
dmVudEhhbmRsZXJBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3REZWZhdWx0VG9K
U09OKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS5vYmplY3RQ
cm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJzdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0F0dHJpYnV0ZSgpKSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdFJ1bnRpbWVF
bmFibGVkRW5hYmxlZCgpKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyaWJ1dGUoKSkpOworICAg
IH0KKyAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+
c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZWRCeVNldHRpbmdzQXR0
cmlidXRlIiksIHRvSlM8SURMVW5zaWduZWRTaG9ydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpOworICAgIH0KKyNp
ZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlIiks
IHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT046OkVudW0+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0
ZSgpKSk7CisjZW5kaWYKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVm
YXVsdFRvSlNPTj46OmNhbGw8anNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30K
KworSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnRE
YXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT04+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04+KQorICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsKKyAgICBlbHNlCisgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rl
c3REZWZhdWx0VG9KU09OKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT04uZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
CisgICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9
ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5H
U19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQg
SlNUZXN0RGVmYXVsdFRvSlNPTjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RGVm
YXVsdFRvSlNPTio+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxs
KGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChj
ZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgp
LnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisK
K2Jvb2wgSlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyOjpm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkK
K3sKKyAgICBhdXRvKiBqc1Rlc3REZWZhdWx0VG9KU09OID0gc3RhdGljX2Nhc3Q8SlNUZXN0RGVm
YXVsdFRvSlNPTio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9
ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3Jh
cHBlcih3b3JsZCwgJmpzVGVzdERlZmF1bHRUb0pTT04tPndyYXBwZWQoKSwganNUZXN0RGVmYXVs
dFRvSlNPTik7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZP
Uk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0
ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0RGVmYXVsdFRvSlNPTkBXZWJD
b3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRW
TjdXZWJDb3JlMTdUZXN0RGVmYXVsdFRvSlNPTkVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBsKQor
eworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIGNvbnN0IHZvaWQqIGFjdHVh
bFZUYWJsZVBvaW50ZXIgPSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkpOworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBfX2lkZW50aWZpZXIo
Ij8/XzdUZXN0RGVmYXVsdFRvSlNPTkBXZWJDb3JlQEA2QkAiKTsKKyNlbHNlCisgICAgdm9pZCog
ZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUxN1Rlc3REZWZhdWx0VG9KU09O
RVsyXTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0RGVmYXVsdFRvSlNPTiBk
b2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1w
bGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0
aW9uCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvbHltb3JwaGljPFRlc3REZWZhdWx0VG9K
U09OPjo6dmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTiBpcyBub3QgcG9seW1vcnBoaWMiKTsKKwor
ICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFm
dGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3REZWZhdWx0VG9KU09OIGhhcyBzdWJjbGFzc2Vz
LiBJZiBUZXN0RGVmYXVsdFRvSlNPTiBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAg
ICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdERlZmF1bHRUb0pTT04geW91
IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNr
aXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0
aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZU
YWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdERlZmF1
bHRUb0pTT04+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3REZWZhdWx0VG9KU09OJiBpbXBsKQoreworICAg
IHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9
CisKK1Rlc3REZWZhdWx0VG9KU09OKiBKU1Rlc3REZWZhdWx0VG9KU09OOjp0b1dyYXBwZWQoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KHZtLCB2YWx1ZSkpCisgICAgICAg
IHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVm
YXVsdFRvSlNPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NQ29udmVydEVudW1lcmF0aW9uLmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdERlZmF1bHRUb0pTT04uaCIK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0RGVm
YXVsdFRvSlNPTj4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVz
dERlZmF1bHRUb0pTT04+OworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OKiBjcmVhdGUo
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RE
ZWZhdWx0VG9KU09OKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dERlZmF1bHRUb0pTT04+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRv
SlNPTihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
cHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0
RGVmYXVsdFRvSlNPTiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9i
amVjdCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbCh2bSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0RGVm
YXVsdFRvSlNPTihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RE
ZWZhdWx0VG9KU09OPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwor
fTsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyIDogcHVibGljIEpTQzo6V2Vha0hh
bmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdERl
ZmF1bHRUb0pTT04qKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3REZWZhdWx0
VG9KU09OT3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGlu
ZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3REZWZhdWx0VG9KU09OKiB3cmFwcGFibGVPYmplY3QpCit7
CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdERlZmF1bHRUb0pTT04m
KTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RGVmYXVs
dFRvSlNPTiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdERlZmF1bHRUb0pTT04+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RGVmYXVs
dFRvSlNPTj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdERlZmF1bHRUb0pTT047
CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3REZWZhdWx0VG9KU09OKjsKK307
CitTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdERlZmF1bHRUb0pTT046OkVu
dW0pOwordGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBUZXN0RGVmYXVsdFRvSlNPTjo6RW51bSk7CisKK3RlbXBsYXRl
PD4gT3B0aW9uYWw8VGVzdERlZmF1bHRUb0pTT046OkVudW0+IHBhcnNlRW51bWVyYXRpb248VGVz
dERlZmF1bHRUb0pTT046OkVudW0+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RE
ZWZhdWx0VG9KU09OOjpFbnVtPigpOworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTVGVzdENhbGxUcmFj
ZXIuaCIKICNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTVGVzdERPTUpJVC5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT04u
aCIKICNpbmNsdWRlICJKU1Rlc3REb21haW5TZWN1cml0eS5oIgogI2luY2x1ZGUgIkpTVGVzdEVu
YWJsZWRCeVNldHRpbmcuaCIKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oIgpA
QCAtMTc4LDYgKzE3OSw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGUKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3Vy
aXR5Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFp
blNlY3VyaXR5Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC0zMDcs
MTEgKzMxMCwxMSBAQCB1c2luZyBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvciA9IEpTCiAK
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RU
YWJsZUluZGV4WzI2N10gPSB7CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM2LCAtMSB9LAorICAg
IHsgMzcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDAsIC0xIH0sCiAgICAgeyA0LCAy
NjMgfSwKLSAgICB7IDQwLCAtMSB9LAorICAgIHsgNDEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zMTksMTUgKzMyMiwxNSBAQCBz
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MSwgLTEgfSwKKyAgICB7
IDUyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgMTksIC0xIH0sCisgICAgeyAyMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYzLCAtMSB9LAorICAgIHsg
NjQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCkBAIC0zNDEsMTQgKzM0NCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNo
SW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCi0gICAgeyAzMCwgLTEgfSwKKyAgICB7IDMxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDY2LCAtMSB9LAotICAgIHsgOSwgMjU4IH0sCisgICAgeyA2NywgLTEg
fSwKKyAgICB7IDEwLCAyNTggfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKQEAgLTM1Niw4ICszNTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAzNCwgLTEgfSwKLSAgICB7IDE2LCAyNjQgfSwKKyAgICB7IDM1
LCAtMSB9LAorICAgIHsgMTcsIDI2NCB9LAogICAgIHsgNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zNjksMTQgKzM3MiwxNCBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMiwgLTEgfSwKKyAgICB7IDMzLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTgsIDI2NSB9
LAorICAgIHsgMTksIDI2NSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzkxLDY0ICszOTQsNjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNTcsIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwKKyAgICB7IDU4
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIwLCAyNTYgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNTgsIC0xIH0sCi0gICAgeyAxNSwgLTEgfSwKKyAgICB7IDIx
LCAyNTYgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgNTksIC0xIH0sCisgICAgeyAxNiwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDIsIC0xIH0sCi0gICAgeyAxNCwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAorICAgIHsgNDMsIC0xIH0sCisgICAgeyAxNSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDMxLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAzMiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCi0gICAgeyA0NywgLTEgfSwKLSAgICB7IDIxLCAtMSB9LAorICAgIHsgOSwgLTEgfSwK
KyAgICB7IDQ4LCAtMSB9LAorICAgIHsgMjIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IDIsIC0xIH0sCi0gICAgeyAzMywgLTEgfSwKKyAgICB7IDM0LCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTcsIC0xIH0sCisg
ICAgeyAxOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1NSwgLTEg
fSwKKyAgICB7IDU2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI3
LCAtMSB9LAorICAgIHsgMjgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgMzgsIC0xIH0sCisgICAgeyAzOSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCi0gICAgeyA1MCwgLTEgfSwKKyAgICB7IDUxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyAxMCwgLTEgfSwKKyAgICB7IDExLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDY0LDEyICs0NjcsMTIgQEAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjQsIC0xIH0sCisgICAgeyA2NSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDI4LCAtMSB9LAotICAgIHsgMjUsIDI2MiB9LAorICAgIHsgMjksIC0xIH0sCisgICAg
eyAyNiwgMjYyIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCkBAIC00NzksOSArNDgyLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFz
aEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgMTIsIDI1NyB9LAorICAgIHsgMTMsIDI1NyB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA1OSwgLTEgfSwKKyAgICB7IDYwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDkwLDE3ICs0OTMsMTcgQEAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjksIDI2NiB9LAorICAgIHsgMzAs
IDI2NiB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxMywgLTEgfSwKKyAgICB7IDE0LCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2MiwgLTEgfSwKKyAgICB7IDYzLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ1LCAtMSB9LAorICAgIHsgNDYsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01
MTMsNyArNTE2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsg
NTMsIC0xIH0sCisgICAgeyA1NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTUzNSw0NCArNTM4LDQ0IEBAIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ0LCAyNjEgfSwKKyAgICB7IDQ1LCAyNjEgfSwK
ICAgICB7IDcsIDI2MCB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2MCwgLTEgfSwKKyAgICB7
IDYxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MywgLTEgfSwKKyAgICB7IDQ0LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxMSwgLTEgfSwKKyAgICB7IDEyLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCi0gICAgeyAyMiwgLTEgfSwKKyAgICB7IDIzLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI0LCAtMSB9LAorICAgIHsgMjUsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDEsIC0xIH0sCisgICAgeyA0
MiwgLTEgfSwKICAgICB7IDMsIC0xIH0sCi0gICAgeyA0OCwgLTEgfSwKLSAgICB7IC0xLCAtMSB9
LAogICAgIHsgNDksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDUwLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjMs
IDI1OSB9LAotICAgIHsgMjYsIC0xIH0sCi0gICAgeyAzNSwgLTEgfSwKLSAgICB7IDM3LCAtMSB9
LAotICAgIHsgMzksIC0xIH0sCi0gICAgeyA0NiwgLTEgfSwKLSAgICB7IDUyLCAtMSB9LAotICAg
IHsgNTQsIC0xIH0sCi0gICAgeyA1NiwgLTEgfSwKLSAgICB7IDYxLCAtMSB9LAotICAgIHsgNjUs
IC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDI0LCAyNTkgfSwKKyAgICB7IDI3LCAtMSB9
LAorICAgIHsgMzYsIC0xIH0sCisgICAgeyAzOCwgLTEgfSwKKyAgICB7IDQwLCAtMSB9LAorICAg
IHsgNDcsIC0xIH0sCisgICAgeyA1MywgLTEgfSwKKyAgICB7IDU1LCAtMSB9LAorICAgIHsgNTcs
IC0xIH0sCisgICAgeyA2MiwgLTEgfSwKKyAgICB7IDY2LCAtMSB9LAogfTsKIAogCkBAIC01OTUs
NiArNTk4LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogI2Vu
ZGlmCiAgICAgeyAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdERPTUpJVCIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xv
YmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERP
TUpJVENvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiVGVzdERlZmF1bHRUb0pTT04iLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVz
dERvbWFpblNlY3VyaXR5Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2Vj
dXJpdHlDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNv
bnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdEVuYWJsZWRCeVNldHRpbmciLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAi
VGVzdEV2ZW50Q29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKSB9IH0sCkBAIC02NjcsNyArNjcxLDcgQEAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgInJlZ3VsYXJPcGVyYXRpb24iLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKSwgKGludHB0
cl90KSAoMSkgfSB9LAogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RHbG9iYWxP
YmplY3RUYWJsZSA9IHsgNjcsIDI1NSwgdHJ1ZSwgSlNUZXN0R2xvYmFsT2JqZWN0OjppbmZvKCks
IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUlu
ZGV4IH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlID0g
eyA2OCwgMjU1LCB0cnVlLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNUZXN0R2xvYmFs
T2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXggfTsKIC8qIEhh
c2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQpAQCAtMTA5Nyw2
ICsxMTAxLDI5IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnMKICAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RET01KSVQiKTsKIH0KIAorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdERlZmF1bHRUb0pTT046OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERl
ZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pT
T04iKSwgc3RybGVuKCJUZXN0RGVmYXVsdFRvSlNPTiIpKSwgdmFsdWUpOworfQorCitib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9K
U09OQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OIik7Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsMTIgKzYwLDEyIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QK
ICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVh
bihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKICNlbmRpZgorSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRv
SlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJ
dGVyYXRvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRy
aWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTE1MCwxMSArMTUw
LDExIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHIKICNlbHNlCiAg
ICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRpZgorICAgIHsgInRvSlNP
TiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlv
biksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlv
bj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9
LAogICAgIHsgImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAo
aW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAia2V5cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJmb3JF
YWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0
aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkg
fSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwg
KGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwpAQCAtMzgz
LDYgKzM4MywyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQCiAK
ICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSosIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwgdG9KUzxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm5hbWUoKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04i
KTsKK30KKwogc3RydWN0IFRlc3ROb2RlSXRlcmF0b3JUcmFpdHMgewogICAgIHN0YXRpYyBjb25z
dGV4cHIgSlNET01JdGVyYXRvclR5cGUgdHlwZSA9IEpTRE9NSXRlcmF0b3JUeXBlOjpTZXQ7CiAg
ICAgdXNpbmcgS2V5VHlwZSA9IHZvaWQ7CkBAIC00ODYsMjkgKzUwMiw2IEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIpOwogfQogCi1KU0M6
OkpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gbmFtZVZh
bHVlID0ganNUZXN0Tm9kZU5hbWVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBuYW1lVmFsdWUp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0KQot
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9kZTo6c2VyaWFsaXplKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
KSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+
OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KIEpTQzo6SXNvU3Vic3BhY2Uq
IEpTVGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmgJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RO
b2RlJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9k
ZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAko
cmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTQsNyArMTU5NCw2IEBAIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlF
eHBvc2VkVG9Xb3JrZXJGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJh
bWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlvbihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTIzMzQs
NyArMjMzMyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KICAg
ICB7ICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uKSwgKGludHB0
cl90KSAoMCkgfSB9LAogICAgIHsgImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3Jr
ZXJGdW5jdGlvbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAi
dG9TdHJpbmciLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcpLCAoaW50cHRyX3Qp
ICgwKSB9IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNP
TiksIChpbnRwdHJfdCkgKDApIH0gfSwKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKICAgICB7ICJD
T05ESVRJT05BTF9DT05TVCIsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkNvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9uZykoMCkgfSB9LAogI2Vs
c2UKQEAgLTk0MDEsNDEgKzkzOTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SlNPYmplY3QqIEpTVGVzdE9iajo6
c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVj
dFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gY3JlYXRlVmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGVH
ZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlIiksIGNyZWF0ZVZhbHVlKTsKLQotICAgIGF1dG8gcmVh
ZE9ubHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVl
KTsKLQotICAgIGF1dG8gZW51bUF0dHJWYWx1ZSA9IGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImVudW1BdHRyIiksIGVudW1BdHRyVmFsdWUpOwotCi0gICAgYXV0byBsb25nQXR0
clZhbHVlID0ganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHIiKSwg
bG9uZ0F0dHJWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpzZXJp
YWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKLX0KLQogSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdl
dENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIG11dGFibGUgSlND
OjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0ZTE7CiAgICAgbXV0
YWJsZSBKU0M6OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1fY2FjaGVkQXR0cmlidXRlMjsK
ICNpZiBFTkFCTEUoQ09ORElUSU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNw
cAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNjQg
KzYwOSwyNSBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmCiAgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxp
emF0aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb24qIGNhc3RlZFRoaXMpCiB7Ci0g
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQ
cm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGZpcnN0U3RyaW5nQXR0cmlidXRlVmFsdWUgPSBqc1Rl
c3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmly
c3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBh
dXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRM
b25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgc2Vj
b25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwot
ICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZSIpLCBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSk7Ci0K
LSAgICBhdXRvIGZpZnRoTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZp
ZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsK
LSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwg
ZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzaXh0aFR5cGVkZWZBdHRyaWJ1
dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHNpeHRoVHlwZWRlZkF0dHJpYnV0
ZVZhbHVlKTsKLQotICAgIGF1dG8gc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
VmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBhdXRvKiBzZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsOjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKj4oc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRW
YWx1ZSk7Ci0KLSAgICBhdXRvIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVz
dFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24o
KTsKLSAgICBhdXRvKiBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0g
SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0
aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNlcmlhbGl6
ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgaWYgKCFuaW50aE9w
dGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZS5pc051bGwoKSkgewotICAg
ICAgICBhdXRvKiBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJp
YWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsKj4obmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUpLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVk
VmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1
ZSk7Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNl
cmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRl
bnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVl
KTsKLQotICAgIGF1dG8gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2Vy
aWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0
aW9uKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2Vy
aWFsaXphdGlvbjo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwg
KnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1
dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgdG9K
UzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRM
b25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pT
PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJp
YnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJ
RExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwg
dG9KUzxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVj
dGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhG
cm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1
dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUo
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25U
b0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCShyZXZpc2lvbiAyNjY1NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlh
bGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJz
cGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJz
cGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMjIgQEAKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgor
I2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dE51bGxhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3Mu
aCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01H
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2Jq
ZWN0Q29uc3RydWN0b3IuaD4KQEAgLTIxNywyMiArMjI2LDI2IEBAIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRJbmhlcmkKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5o
ZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7CiB9CiAKLUpTQzo6SlNPYmpl
Y3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlzT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIGNhc3RlZFRoaXMpCiB7Ci0gICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gSlNUZXN0U2VyaWFsaXphdGlv
bjo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCk7Ci0KLSAgICBhdXRvIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVy
aXRMb25nQXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQqIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJp
bmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1
dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRo
TG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUi
KSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9K
UzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZyb3plbkFycmF5PElETEJv
b2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhT
ZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVu
Y2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VB
dHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rp
b25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgJ
KHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAg
aWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5j
cHAJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTMgKzI2LDIyIEBACiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJvb2xlYW4uaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdWxsYWJsZS5o
IgogI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJD
YWNoZS5oIgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
LmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIgogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnRE
YXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVj
dG9yLmg+CkBAIC0yNTEsMjIgKzI2MCwyOCBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxGCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5h
bExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpOwogfQogCi1KU0M6OkpTT2Jq
ZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCitzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90
b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIGNhc3RlZFRo
aXMpCiB7Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0
ID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QpOwotCi0gICAgYXV0byBmaW5hbExvbmdBdHRy
aWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdB
dHRyaWJ1dGVCYXJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIiksIGZp
bmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogdGhp
c09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1
dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0
cmlidXRlIiksIHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiks
IHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2Vj
b25kTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwg
dG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdB
dHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHRv
SlM8SURMRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0
aFR5cGVkZWZBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
IiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIHRvSlM8SURM
TnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwubmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRl
bnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFu
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVu
Y2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0
cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmluYWxM
b25nQXR0cmlidXRlRm9vIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0
ZUJhciIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgJKHJldmlzaW9uIDI2
NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlND
OjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlm
IGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9ubHkuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5pZGwJKHJldmlzaW9uIDI2
NjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDUgKzk3LDUgQEAKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIEZsb2F0
NjRBcnJheSB0b0Zsb2F0NjRBcnJheSgpOwogCiAgICAgW0V4cG9zZWQ9V2luZG93LCBNYXlUaHJv
d0V4Y2VwdGlvbl0gc3RyaW5naWZpZXI7Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07
CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RPTVBvaW50UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDUgKzQ1
LDUgQEAKIAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NUG9pbnQgbWF0cml4VHJhbnNmb3Jt
KG9wdGlvbmFsIERPTU1hdHJpeEluaXQgbWF0cml4KTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGF0
dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9ET01RdWFkLmlkbAkocmV2aXNpb24gMjY2NTU5KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RPTVF1YWQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw1ICs0MSw1IEBACiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVBvaW50IHA0OyAvLyBGSVhNRTogU2hvdWxkIGJlIFtTYW1lT2JqZWN0
XS4KICAgICBbTmV3T2JqZWN0XSBET01SZWN0IGdldEJvdW5kcygpOwogCi0gICAgc2VyaWFsaXpl
ciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAkocmV2aXNpb24gMjY2NTU5
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTVJlY3RSZWFkT25seS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVk
IGRvdWJsZSBib3R0b207CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVucmVzdHJpY3RlZCBkb3Vi
bGUgbGVmdDsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3Jt
YW5jZUVudHJ5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlRW50cnkuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bl
cmZvcm1hbmNlRW50cnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw1ICs0MSw1IEBAIHR5cGVk
ZWYgZG91YmxlIERPTUhpZ2hSZXNUaW1lU3RhbXA7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBlbnRyeVR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1l
U3RhbXAgc3RhcnRUaW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0
YW1wIGR1cmF0aW9uOwotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsCShyZXZpc2lvbiAyNjY1NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw1ICs1Myw1IEBAIHR5cGVkZWYgZG91YmxlIERPTUhpZ2hSZXNUaW1lU3Rh
bXA7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgcmVzcG9uc2VF
bmQ7CiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2VydmVyVGltaW5nXSByZWFkb25seSBhdHRyaWJ1
dGUgRnJvemVuQXJyYXk8UGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmc+IHNlcnZlclRpbWluZzsKIAot
ICAgIHNlcmlhbGl6ZXIgPSB7IGluaGVyaXQsIGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBv
YmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZVNlcnZlclRpbWluZy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZVNlcnZlclRpbWluZy5pZGwJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw1ICszNiw1IEBAIHR5cGVkZWYgZG91YmxlIERPTUhpZ2hSZXNUaW1lU3RhbXA7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01IaWdoUmVzVGltZVN0YW1wIGR1cmF0aW9uOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgZGVzY3JpcHRpb247Ci0gICAgc2VyaWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtE
ZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZVRpbWluZy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZVRpbWluZy5pZGwJKHJldmlzaW9uIDI2NjU1OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01NCw1ICs1NCw1
IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkRXZlbnRT
dGFydDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRFdmVu
dEVuZDsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBv
YmplY3QgdG9KU09OKCk7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408002</attachid>
            <date>2020-09-04 11:23:35 -0700</date>
            <delta_ts>2020-09-04 11:25:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200904112334.patch</filename>
            <type>text/plain</type>
            <size>119920</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDIwLTA5LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSAnc2VyaWFsaXph
YmxlJyBrZXl3b3JkLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGZyb20gV2ViSURMLAorICAgICAg
ICB3aXRoIGl0cyByZXBsYWNlbWVudCwgJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknLgorICAg
ICAgICAKKyAgICAgICAgVGhlIG5ldyB2ZXJzaW9uIGlzIHByZXR0eSBzaW1pbGFyLCBidXQgaGFz
IG11Y2ggbGVzcyByb29tIGZvciBjdXN0b21pemF0aW9uCisgICAgICAgIGluIHRoYXQgeW91IGNh
biBubyBsb25nZXIgc3BlY2lmeSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
SlNPTgorICAgICAgICByZXN1bHQuIFJhdGhlciwgYWxsIGF0dHJpYnV0ZXMgdGhhdCBxdWFsaXR5
IGFzIGhhdmUgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZUluZm8uaWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0ljZUNhbmRpZGF0ZTo6dG9KU09OIGNvbnN0KToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGw6CisgICAgICAgICog
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGw6CisgICAgICAgICogTW9k
dWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2UuaWRsOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEludGVyZmFjZUhhc1JlZ3Vs
YXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNKU09OVHlwZSk6CisgICAgICAgIChJbmhl
cml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChJc1NlcmlhbGl6YWJsZVR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFibGVBdHRyaWJ1dGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
UHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAg
ICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAg
ICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoR2Vu
ZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZXRSdW50
aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVy
RGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLmpzb246CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06Cisg
ICAgICAgIChjbG9uZU9wZXJhdGlvbik6CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VN
ZW1iZXIpOgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFs
aXplcik6IERlbGV0ZWQuCisgICAgICAgIChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAo
cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1l
bnRhbERlcGVuZGVuY2llcy5kZXA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuaWRsOgorICAgICAgICAqIGNzcy9ET01NYXRyaXhSZWFkT25seS5pZGw6Cisg
ICAgICAgICogZG9tL0RPTVBvaW50UmVhZE9ubHkuaWRsOgorICAgICAgICAqIGRvbS9ET01RdWFk
LmlkbDoKKyAgICAgICAgKiBkb20vRE9NUmVjdFJlYWRPbmx5LmlkbDoKKyAgICAgICAgKiBwYWdl
L1BlcmZvcm1hbmNlRW50cnkuaWRsOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VSZXNvdXJj
ZVRpbWluZy5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRpbWluZy5pZGw6
CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGw6CisKIDIwMjAtMDktMDQgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBbGln
biBFVUMtSlAsIElTTy0yMDIyLUpQLCBhbmQgU2hpZnRfSklTIGRlY29kaW5nIHdpdGggQ2hyb21l
LCBGaXJlZm94LCBhbmQgdGhlIHNwZWNpZmljYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VJbmZvLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwJKHJldmlz
aW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFE
ZXZpY2VJbmZvLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBNZWRpYURldmljZUtpbmQga2luZDsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGxhYmVsOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZ3Jv
dXBJZDsKLSAgICBzZXJpYWxpemVyID0ge2F0dHJpYnV0ZX07CisgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKIH07CiAKIC8vIEZJWE1FIDE2OTg3MTogbWlzc2luZyBJbnB1dERldmljZUlu
Zm8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIsNiArNjIsMTUgQEAgUmVmPFJUQ0ljZUNhbmRpZGF0ZT4gUlRDSWNlQ2FuZGlkYXRlOjpj
cgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJUQ0ljZUNhbmRpZGF0ZShjYW5kaWRhdGUsIHNk
cE1pZCwgc2RwTUxpbmVJbmRleCkpOwogfQogCitSVENJY2VDYW5kaWRhdGVJbml0IFJUQ0ljZUNh
bmRpZGF0ZTo6dG9KU09OKCkgY29uc3QKK3sKKyAgICBSVENJY2VDYW5kaWRhdGVJbml0IHJlc3Vs
dDsKKyAgICByZXN1bHQuY2FuZGlkYXRlID0gbV9jYW5kaWRhdGU7CisgICAgcmVzdWx0LnNkcE1p
ZCA9IG1fc2RwTWlkOworICAgIHJlc3VsdC5zZHBNTGluZUluZGV4ID0gbV9zZHBNTGluZUluZGV4
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oCShyZXZpc2lvbiAyNjY2MjApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q2Fu
ZGlkYXRlKFN0cmluZyYmIGNhbmRpZGF0ZSkgeyBtX2NhbmRpZGF0ZSA9IFdURk1vdmUoY2FuZGlk
YXRlKTsgfQogCisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0b0pTT04oKSBjb25zdDsKKwogcHJp
dmF0ZToKICAgICBSVENJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGUsIGNvbnN0
IFN0cmluZyYgc2RwTWlkLCBPcHRpb25hbDx1bnNpZ25lZCBzaG9ydD4gc2RwTUxpbmVJbmRleCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsNSBAQAogICAgIC8vIEZJWE1FIDE2OTY2MjogbWlzc2luZyByZWxhdGVkUG9y
dAogICAgIC8vIEZJWE1FIDE2OTY2MjogbWlzc2luZyB1ZnJhZwogCi0gICAgLy8gRklYTUUgMTY5
NjYyOiBhZGQgdWZyYWcgdG8gdGhlIGxpc3QKLSAgICBzZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwg
c2RwTWlkLCBzZHBNTGluZUluZGV4fTsKKyAgICBSVENJY2VDYW5kaWRhdGVJbml0IHRvSlNPTigp
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNSArNDEsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBSVENTZHBUeXBlIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBz
ZHA7CiAKLSAgICBzZXJpYWxpemVyID0ge3R5cGUsIHNkcH07CisgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1
ZXN0L1BheW1lbnRBZGRyZXNzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRBZGRyZXNzLmlkbAkocmV2aXNpb24gMjY2NjIwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBJbXBsZW1lbnRhdGlvbkxh
Y2tzVlRhYmxlLAogICAgIFNlY3VyZUNvbnRleHQKIF0gaW50ZXJmYWNlIFBheW1lbnRBZGRyZXNz
IHsKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgY291bnRyeTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRnJvemVuQXJyYXk8RE9NU3RyaW5nPiBhZGRyZXNzTGluZTsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlZ2lvbjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlc3BvbnNlLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNw
b25zZS5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlc3BvbnNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgIFNlY3VyZUNvbnRleHQsCiBd
IGludGVyZmFjZSBQYXltZW50UmVzcG9uc2UgOiBFdmVudFRhcmdldCB7Ci0gICAgc2VyaWFsaXpl
ciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIAogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcmVxdWVzdElkOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgbWV0aG9kTmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDI2NjYyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwMSw1MCArMTEwMSw2NCBAQCBzdWIgSXNXcmFwcGVyVHlwZQogICAgIHJl
dHVybiAwOwogfQogCi1zdWIgSW5oZXJpdHNTZXJpYWxpemFibGUKK3N1YiBJbnRlcmZhY2VIYXNS
ZWd1bGFyVG9KU09OT3BlcmF0aW9uCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UpID0g
QF87CiAKLSAgICBteSAkYW55UGFyZW50SXNTZXJpYWxpemFibGUgPSAwOwotICAgICRvYmplY3Qt
PkZvckFsbFBhcmVudHMoJGludGVyZmFjZSwgc3ViIHsKLSAgICAgICAgbXkgJHBhcmVudEludGVy
ZmFjZSA9IHNoaWZ0OwotICAgICAgICAkYW55UGFyZW50SXNTZXJpYWxpemFibGUgPSAxIGlmICRw
YXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKLSAgICB9LCAwKTsKLQotICAgIHJldHVybiAk
YW55UGFyZW50SXNTZXJpYWxpemFibGU7CisgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAeyRp
bnRlcmZhY2UtPm9wZXJhdGlvbnN9KSB7CisgICAgICAgIGlmICghJG9wZXJhdGlvbi0+aXNTdGF0
aWMgJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAidG9KU09OIikgeworICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKLXN1YiBJc1NlcmlhbGl6
YWJsZVR5cGUKKyMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLWpzb24tdHlw
ZXMKK3N1YiBJc0pTT05UeXBlCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICR0eXBl
KSA9IEBfOwogCi0gICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tc2Vy
aWFsaXphYmxlLXR5cGUKLQorICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3Qi
OwogICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4g
MSBpZiAkb2JqZWN0LT5Jc051bWVyaWNUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2Jq
ZWN0LT5Jc0VudW1UeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmlu
Z1R5cGUoJHR5cGUpOwotICAgIHJldHVybiAwIGlmICR0eXBlLT5uYW1lIGVxICJFdmVudEhhbmRs
ZXIiOwotCi0gICAgaWYgKCR0eXBlLT5pc1VuaW9uIHx8ICRvYmplY3QtPklzRGljdGlvbmFyeVR5
cGUoJHR5cGUpKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHVuaW9uIGFuZCBkaWN0
aW9uYXJ5IHR5cGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQorICAg
IHJldHVybiAxIGlmICRvYmplY3QtPklzU3RyaW5nT3JFbnVtVHlwZSgkdHlwZSk7CiAKICAgICBp
ZiAoJG9iamVjdC0+SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCR0eXBlKSkgewogICAgICAg
ICBteSAkc3VidHlwZSA9IEB7JHR5cGUtPnN1YnR5cGVzfVswXTsKLQotICAgICAgICAjIEZJWE1F
OiB3ZWJraXQub3JnL2IvMTk0NDM5IFtXZWJJRExdIFN1cHBvcnQgc2VyaWFsaXppbmcgc2VxdWVu
Y2VzIGFuZCBGcm96ZW5BcnJheXMgb2YgaW50ZXJmYWNlcwotICAgICAgICByZXR1cm4gMCBpZiAk
b2JqZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHN1YnR5cGUpOwotCi0gICAgICAgIHJldHVybiAkb2Jq
ZWN0LT5Jc1NlcmlhbGl6YWJsZVR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgICAgICBy
ZXR1cm4gJG9iamVjdC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkc3VidHlwZSk7CisgICAgfQor
ICAgIGlmICgkb2JqZWN0LT5Jc1JlY29yZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICR2YWx1
ZVN1YnR5cGUgPSBAeyR0eXBlLT5zdWJ0eXBlc31bMF07CisgICAgICAgIHJldHVybiAkb2JqZWN0
LT5Jc0pTT05UeXBlKCRpbnRlcmZhY2UsICR2YWx1ZVN1YnR5cGUpOwogICAgIH0KIAotICAgIHJl
dHVybiAwIGlmICEkb2JqZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHR5cGUpOworICAgIGlmICgkb2Jq
ZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHR5cGUpKSB7CisgICAgICAgICMgU3BlY2lhbCBjYXNlIEV2
ZW50SGFuZGxlciwgc2luY2UgdGhlcmUgaXMgbm8gcmVhbCBJREwgZm9yIGl0LgorICAgICAgICBy
ZXR1cm4gMCBpZiAkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsKKworICAgICAgICBteSAk
aW50ZXJmYWNlID0gJG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJmYWNlLCAkdHlw
ZSk7CisgICAgICAgIGlmICgkb2JqZWN0LT5JbnRlcmZhY2VIYXNSZWd1bGFyVG9KU09OT3BlcmF0
aW9uKCRpbnRlcmZhY2UpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogCi0g
ICAgbXkgJGludGVyZmFjZUZvclR5cGUgPSAkb2JqZWN0LT5HZXRJbnRlcmZhY2VGb3JUeXBlKCRp
bnRlcmZhY2UsICR0eXBlKTsKLSAgICBpZiAoJGludGVyZmFjZUZvclR5cGUpIHsKLSAgICAgICAg
cmV0dXJuIDEgaWYgJGludGVyZmFjZUZvclR5cGUtPnNlcmlhbGl6YWJsZTsKLSAgICAgICAgcmV0
dXJuICRvYmplY3QtPkluaGVyaXRzU2VyaWFsaXphYmxlKCRpbnRlcmZhY2VGb3JUeXBlKTsKKyAg
ICAgICAgbXkgJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24gPSAwOworICAgICAg
ICAkb2JqZWN0LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7CisgICAgICAgICAgICBt
eSAkcGFyZW50SW50ZXJmYWNlID0gc2hpZnQ7CisgICAgICAgICAgICAkYW55UGFyZW50SGFzUmVn
dWxhclRvSlNPTk9wZXJhdGlvbiA9IDEgaWYgJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRv
SlNPTk9wZXJhdGlvbigkcGFyZW50SW50ZXJmYWNlKTsKKyAgICAgICAgfSwgMCk7CisgICAgICAg
IAorICAgICAgICBpZiAoJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pIHsKKyAg
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICgkdHlw
ZS0+aXNVbmlvbikgeworICAgICAgICAjIEZJWE1FOiBVbmlvbiB0eXBlcyBzaG91bGQgYmUgc3Vw
cG9ydGVkIGlmIGFsbCB0aGUgbWVtYmVyIHR5cGVzIGFyZSBKU09OIHR5cGVzLgorICAgICAgICBk
aWUgIkRlZmF1bHQgdG9KU09OIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGZvciB1bmlvbiB0
eXBlcy5cbiI7CisgICAgfQorICAgIGlmICgkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBl
KSkgeworICAgICAgICAjIEZJWE1FOiBEaWN0aW9uYXJ5IHR5cGVzIHNob3VsZCBiZSBzdXBwb3J0
ZWQgaWYgYWxsIG1lbWJlcnMgZGVjbGFyZWQgb24gdGhlIGRpY3Rpb25hcnkgYW5kIGFsbCBpdHMg
aW5oZXJpdGVkIGRpY3Rpb25hcmllcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJEZWZh
dWx0IHRvSlNPTiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgZGljdGlvbmFyeSB0eXBl
cy5cbiI7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMTU2LDE3ICsxMTcwLDYgQEAgc3Vi
IGhhc0NhY2hlZEF0dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZQogICAgIHJldHVybiAkYXR0cmli
dXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWNoZWRBdHRyaWJ1dGV9IHx8ICRhdHRyaWJ1dGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUdldHRlcn07CiB9CiAKLXN1YiBJc1NlcmlhbGl6
YWJsZUF0dHJpYnV0ZQotewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkYXR0cmlidXRl
KSA9IEBfOwotCi0gICAgaWYgKCRvYmplY3QtPklzU2VxdWVuY2VUeXBlKCRhdHRyaWJ1dGUtPnR5
cGUpICYmIGhhc0NhY2hlZEF0dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZW5kZWRBdHRyaWJ1dGUo
JGF0dHJpYnV0ZSkpIHsKLSAgICAgICAgZGllICJTZXJpYWxpemVycyBmb3Igc2VxdWVuY2UgdHlw
ZXMgd2l0aCBDYWNoZWRBdHRyaWJ1dGUgb3IgQ3VzdG9tR2V0dGVyIGV4dGVuZGVkIGF0dHJpYnV0
ZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLlxuIjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
JG9iamVjdC0+SXNTZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUp
OwotfQotCiBzdWIgR2V0SW50ZXJmYWNlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbU5hbWUKIHsKICAg
ICAjIEZJWE1FOiBJdCdzIGJhZCB0byBoYXZlIGEgZnVuY3Rpb24gbGlrZSB0aGlzIHRoYXQgb3Bl
bnMgYW5vdGhlciBJREwgZmlsZSB0byBhbnN3ZXIgYSBxdWVzdGlvbi4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTg2Nyw3ICsxODY3LDYgQEAgc3ViIFByb3Rv
dHlwZU9wZXJhdGlvbkNvdW50CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPml0
ZXJhYmxlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKICAgICAkY291bnQg
Kz0gc2NhbGFyIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFj
ZS0+bWFwTGlrZTsKICAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+
b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLSAgICAkY291bnQgKz0gc2NhbGFy
IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGU7CiAKICAgICByZXR1cm4gJGNvdW50OwogfQpAQCAtMjc4MCwxMSArMjc3OSw2
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
TmFtZWRDb25zdHJ1Y3Rvcn07CiAgICAgfQogCi0gICAgIyBTZXJpYWxpemVyIGZ1bmN0aW9uLgot
ICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
XG4iKTsKLSAgICB9Ci0gICAgCiAgICAgbXkgJG51bUN1c3RvbU9wZXJhdGlvbnMgPSAwOwogICAg
IG15ICRudW1DdXN0b21BdHRyaWJ1dGVzID0gMDsKIApAQCAtMzE4Niw3ICszMTgwLDYgQEAgc3Vi
IEdlbmVyYXRlUHJvcGVydGllc0hhc2hUYWJsZQogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGlu
dGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRl
cmZhY2UoJGludGVyZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5t
YXBMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBv
cGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJm
YWNlLT5zZXRMaWtlOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogICAgIGZv
cmVhY2ggbXkgJG9wZXJhdGlvbiAoQG9wZXJhdGlvbnMpIHsKICAgICAgICAgbmV4dCBpZiAoJG9w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9IGFuZCBub3Qg
JG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHVibGljSWRlbnRpZmllcn0pOwogICAg
ICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CkBAIC0zOTk0LDcgKzM5ODcsNiBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGlu
dGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRl
cmZhY2UoJGludGVyZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5t
YXBMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBv
cGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJm
YWNlLT5zZXRMaWtlOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAg
bXkgQGF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9OwogICAgIHB1c2goQGF0
dHJpYnV0ZXMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+YXR0cmlidXRlc30pIGlmICRpbnRlcmZh
Y2UtPm1hcExpa2U7CkBAIC00NjczLDcgKzQ2NjUsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgIH0KICAgICAKICAgICBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJm
YWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKLSAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZp
bml0aW9uKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJs
ZTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKQEAgLTU0MTksNyArNTQx
MCwxMCBAQCBzdWIgR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uCiAKICAgICByZXR1cm4gaWYg
SXNKU0J1aWx0aW4oJGludGVyZmFjZSwgJG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIGlmICRvcGVy
YXRpb24tPmlzSXRlcmFibGU7Ci0gICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmlzU2VyaWFsaXpl
cjsKKyAgICAKKyAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RGVmYXVs
dH0pIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24o
JG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKTsKKyAgICB9
CiAKICAgICBteSAkaXNDdXN0b20gPSBIYXNDdXN0b21NZXRob2QoJG9wZXJhdGlvbik7CiAgICAg
bXkgJGlzT3ZlcmxvYWRlZCA9ICRvcGVyYXRpb24tPntvdmVybG9hZHN9ICYmIEB7JG9wZXJhdGlv
bi0+e292ZXJsb2Fkc319ID4gMTsKQEAgLTU1MzksMTAwICs1NTMzLDk1IEBAIHN1YiBHZW5lcmF0
ZU9wZXJhdGlvbkRlZmluaXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRlbmRBcHBsZUNv
cHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7CiB9CiAKLXN1YiBHZW5lcmF0ZVNlcmlhbGl6
ZXJEZWZpbml0aW9uCitzdWIgR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlvbgogewot
ICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOwotCi0gICAgbXkgJGludGVyZmFj
ZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOworICAgIG15ICgkb3V0cHV0QXJyYXksICRp
bnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkcGFyZW50
U2VyaWFsaXplckludGVyZmFjZSA9IDA7Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJs
ZS0+aGFzSW5oZXJpdCkgewotICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFyZW50cygk
aW50ZXJmYWNlLCBzdWIgewotICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0
OwotICAgICAgICAgICAgaWYgKCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAmJiAhJHBh
cmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgICAgICAkcGFyZW50U2VyaWFs
aXplckludGVyZmFjZSA9ICRwYXJlbnRJbnRlcmZhY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0sIDApOwotICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcmZhY2Ugd2l0
aCBcInNlcmlhbGl6ZXJcIiBmb3IgXCJpbmhlcml0XCIgc2VyaWFsaXplciBpbiAkaW50ZXJmYWNl
TmFtZVxuIiBpZiAhJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2U7CisgICAgaWYgKCRvcGVyYXRp
b24tPm5hbWUgZXEgInRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAib2JqZWN0
IikgeworICAgICAgICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5p
dGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwog
ICAgIH0KIAotICAgIG15IEBzZXJpYWxpemVkQXR0cmlidXRlcyA9ICgpOworICAgIGRpZSAiW0Rl
ZmF1bHRdIGlzIG5vdCBzdXBwb3J0IGZvciBmb3IgdGhpcyBvcGVyYXRpb24gKCIgLiAkb3BlcmF0
aW9uLT5uYW1lIC4gIikuIEl0IGlzIG9ubHkgY3VycmVudGx5IGRlZmluZWQgZm9yICdvYmplY3Qg
dG9KU09OKCk7Jy4iCit9CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1lIChAeyRpbnRl
cmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgbXkgJGZvdW5kQXR0
cmlidXRlID0gMDsKLSAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2Ut
PmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEgJGF0dHJp
YnV0ZS0+bmFtZSkgewotICAgICAgICAgICAgICAgICRmb3VuZEF0dHJpYnV0ZSA9IDE7Ci0gICAg
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NlcmlhbGl6YWJsZUF0dHJpYnV0ZSgk
aW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBzZXJp
YWxpemVkQXR0cmlidXRlcywgJGF0dHJpYnV0ZSk7ICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGRpZSAiRXhwbGljaXQgXCJzZXJpYWxpemVyXCIgYXR0cmlidXRlIFwi
JGF0dHJpYnV0ZU5hbWVcIiBpcyBub3Qgc2VyaWFsaXphYmxlXG4iIGlmICEkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICBsYXN0OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgXCJzZXJpYWxp
emVyXCIgYXR0cmlidXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpbiAkaW50ZXJmYWNlTmFtZVxuIiBp
ZiAhJGZvdW5kQXR0cmlidXRlOwotICAgIH0KK3N1YiBHZW5lcmF0ZURlZmF1bHRUb0pTT05PcGVy
YXRpb25EZWZpbml0aW9uCit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJG9wZXJhdGlvbikgPSBAXzsKIAotICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25O
YW1lID0gInRvSlNPTiI7Ci0gICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAk
Y29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlv
biIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7
CisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kZWZhdWx0LXRvanNv
bgogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1
Y3Rvci5oPiIpOworICAgIG15IEBpbmhlcml0ZW5jZVN0YWNrID0gKCk7CisgICAgcHVzaChAaW5o
ZXJpdGVuY2VTdGFjaywgJGludGVyZmFjZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkZvckFsbFBh
cmVudHMoJGludGVyZmFjZSwgc3ViIHsKKyAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNo
aWZ0OworICAgICAgICBwdXNoKEBpbmhlcml0ZW5jZVN0YWNrLCAkcGFyZW50SW50ZXJmYWNlKTsK
KyAgICB9LCAwKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU09iamVjdCogSlMk
e2ludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsICR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTtcbiIpOworICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUoJGludGVy
ZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CisKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUJvZHkoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NOYW1lfSog
Y2FzdGVkVGhpcylcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwogCi0gICAg
aWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAgICBteSAk
cGFyZW50U2VyaWFsaXplckludGVyZmFjZU5hbWUgPSAkcGFyZW50U2VyaWFsaXplckludGVyZmFj
ZS0+dHlwZS0+bmFtZTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVz
dWx0ID0gSlMke3BhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVj
dFByb3RvdHlwZSgpKTtcbiIpOwotICAgIH0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7
CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rv
ci5oPiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTtcbiIpOwogCi0gICAgZm9yZWFjaCBteSAkYXR0cmli
dXRlIChAc2VyaWFsaXplZEF0dHJpYnV0ZXMpIHsKLSAgICAgICAgIyBGSVhNRTogQXR0cmlidXRl
cyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBzZXJpYWxpemVy
cyB5ZXQuCisgICAgIHdoaWxlIChAaW5oZXJpdGVuY2VTdGFjaykgeworICAgICAgICBteSAkY3Vy
cmVudEludGVyZmFjZSA9IHBvcChAaW5oZXJpdGVuY2VTdGFjayk7CiAKLSAgICAgICAgbXkgJG5h
bWUgPSAkYXR0cmlidXRlLT5uYW1lOwotICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0
QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAke2dl
dEZ1bmN0aW9uTmFtZX1HZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7XG4i
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpO1xuIik7Ci0KLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0ludGVyZmFj
ZVR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKLSAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVJbnRl
cmZhY2VOYW1lID0gJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZTsKLSAgICAgICAgICAgIGlmICgkYXR0
cmlidXRlLT50eXBlLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKCEke25hbWV9VmFsdWUuaXNOdWxsKCkpIHtcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiAke25hbWV9U2VyaWFsaXpl
ZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEds
b2JhbE9iamVjdCwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX0qPigke25hbWV9
VmFsdWUpLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1TZXJpYWxpemVkVmFsdWUpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfSBlbHNlXG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtc
biIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUlu
dGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKUyR7
YXR0cmlidXRlSW50ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1l
fVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKKyAgICAgICAgbXkgJGhhc0RlZmF1bHRUb0pTT05PcGVy
YXRpb24gPSAwOworICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGN1cnJlbnRJbnRl
cmZhY2UtPm9wZXJhdGlvbnN9KSB7CisgICAgICAgICAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57RGVmYXVsdH0gJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAidG9KU09OIiAm
JiAkb3BlcmF0aW9uLT50eXBlLT5uYW1lIGVxICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAg
JGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24gPSAxOworICAgICAgICAgICAgICAgIGxhc3Q7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0KKyAgICAgICAg
aWYgKCRoYXNEZWZhdWx0VG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15
ICRhdHRyaWJ1dGUgKEB7JGN1cnJlbnRJbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAg
ICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAgICAgICAgICBu
ZXh0IGlmICEkY29kZUdlbmVyYXRvci0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRl
LT50eXBlKTsKIAotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgICAgICAg
ICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q29uZGl0aW9uYWx9OworICAgICAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdl
bmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiI2lmICR7Y29uZGl0aW9u
YWxTdHJpbmd9XG4iKTs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkg
JGF0dHJpYnV0ZU5hbWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAgICAgICAgICAgIG15ICgk
YmFzZUZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhw
cmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGN1cnJlbnRJbnRlcmZhY2UtPnR5cGUtPm5hbWUsICRh
dHRyaWJ1dGUpOworICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdWxseVF1
YWxpZmllZEltcGxlbWVudGF0aW9uQ2FsbE5hbWUoJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1
dGUsICRiYXNlRnVuY3Rpb25OYW1lLCAiaW1wbCIsICRjb25kaXRpb25hbCk7CisgICAgICAgICAg
ICAgICAgbXkgJHRvSlNFeHByZXNzaW9uID0gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygk
YXR0cmlidXRlLCAkY3VycmVudEludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigi
LCAiLCBAYXJndW1lbnRzKSAuICIpIiwgIipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpOwor
CisgICAgICAgICAgICAgICAgbXkgJG5lZWRzUnVudGltZUNoZWNrID0gTmVlZHNSdW50aW1lQ2hl
Y2soJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgICAgIGlmICgk
bmVlZHNSdW50aW1lQ2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJHJ1bnRpbWVFbmFi
bGVDb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3Ry
aW5nKCRjdXJyZW50SW50ZXJmYWNlLCAkYXR0cmlidXRlLCAiY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCkiKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
ICgke3J1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZ30pIHtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7YXR0cmlidXRlTmFtZX1cIiksICR7dG9K
U0V4cHJlc3Npb259KTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7YXR0cmlidXRlTmFtZX1cIiksICR7dG9KU0V4cHJl
c3Npb259KTtcbiIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgk
Y29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
I2VuZGlmXG5cbiIpIDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cbiIpOworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1l
fUJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7
Y2xhc3NOYW1lfSogdGhpc09iamVjdClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
UyR7aW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpO1xuIik7Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXpl
ck5hdGl2ZUZ1bmN0aW9uTmFtZX0oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTJHtp
bnRlcmZhY2VOYW1lfT46OmNhbGw8JHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfUJvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBcIiR7c2VyaWFsaXplckZ1bmN0aW9u
TmFtZX1cIik7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2Ut
PnR5cGUtPm5hbWU7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5
LCAie1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBJRExPcGVyYXRp
b248SlMke2ludGVyZmFjZU5hbWV9Pjo6Y2FsbDwke2Z1bmN0aW9uTmFtZX1Cb2R5PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgXCJ0b0pTT05cIik7XG4iKTsKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ9XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiIpOwogfQog
CiBzdWIgR2VuZXJhdGVHZXRDYWxsRGF0YQpAQCAtNzU4NCw3ICs3NTczLDYgQEAgc3ViIEdldFJ1
bnRpbWVFbmFibGVkU3RhdGljUHJvcGVydGllcwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGlu
dGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRl
cmZhY2UoJGludGVyZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5t
YXBMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBv
cGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJm
YWNlLT5zZXRMaWtlOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogICAgIGZv
cmVhY2ggbXkgJG9wZXJhdGlvbiAoQG9wZXJhdGlvbnMpIHsKICAgICAgICAgbmV4dCBpZiAoJG9w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9IGFuZCBub3Qg
JG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHVibGljSWRlbnRpZmllcn0pOwogICAg
ICAgICBuZXh0IGlmICRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fSAmJiAkb3BlcmF0aW9uLT57
b3ZlcmxvYWRJbmRleH0gPiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5qc29uCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjIsNiArMTYyLDkgQEAKICAgICAgICAgICAgICJ2YWx1ZXMiOiBbIiIsICJSZWFk
RE9NIiwgIkdldHRlciJdLAogICAgICAgICAgICAgInN1cHBvcnRzQ29uanVuY3Rpb24iOiB0cnVl
CiAgICAgICAgIH0sCisgICAgICAgICJEZWZhdWx0IjogeworICAgICAgICAgICAgImNvbnRleHRz
QWxsb3dlZCI6IFsib3BlcmF0aW9uIl0KKyAgICAgICAgfSwKICAgICAgICAgIkRlZmF1bHREZWZp
bmVPd25Qcm9wZXJ0eSI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVy
ZmFjZSJdCiAgICAgICAgIH0sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETFBhcnNlci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETFBhcnNlci5wbQkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDYg
QEAgc3RydWN0KCBJRExJbnRlcmZhY2UgPT4gewogICAgIGFzeW5jSXRlcmFibGUgPT4gJyQnLCAj
IFVzZWQgZm9yIGFzeWNuIGl0ZXJhYmxlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETEFzeW5jSXRl
cmFibGUnCiAgICAgbWFwTGlrZSA9PiAnJCcsICMgVXNlZCBmb3IgbWFwTGlrZSBpbnRlcmZhY2Vz
LCBvZiB0eXBlICdJRExNYXBMaWtlJwogICAgIHNldExpa2UgPT4gJyQnLCAjIFVzZWQgZm9yIHNl
dExpa2UgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMU2V0TGlrZScKLSAgICBzZXJpYWxpemFibGUg
PT4gJyQnLCAjIFVzZWQgZm9yIHNlcmlhbGl6YWJsZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExT
ZXJpYWxpemFibGUnCiAgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKIH0pOwogCkBAIC05
NCw3ICs5Myw2IEBAIHN0cnVjdCggSURMT3BlcmF0aW9uID0+IHsKICAgICBpc0NvbnN0cnVjdG9y
ID0+ICckJywKICAgICBpc1N0YXRpYyA9PiAnJCcsCiAgICAgaXNJdGVyYWJsZSA9PiAnJCcsCi0g
ICAgaXNTZXJpYWxpemVyID0+ICckJywKICAgICBpc1N0cmluZ2lmaWVyID0+ICckJywKICAgICBp
c01hcExpa2UgPT4gJyQnLAogICAgIGlzU2V0TGlrZSA9PiAnJCcsCkBAIC0xNTQsMTUgKzE1Miw2
IEBAIHN0cnVjdCggSURMU2V0TGlrZSA9PiB7CiAgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICck
JywKIH0pOwogCi0jIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1zZXJpYWxp
emVycwotc3RydWN0KCBJRExTZXJpYWxpemFibGUgPT4gewotICAgIGF0dHJpYnV0ZXMgPT4gJ0An
LCAjIExpc3Qgb2YgYXR0cmlidXRlcyB0byBzZXJpYWxpemUKLSAgICBoYXNBdHRyaWJ1dGUgPT4g
JyQnLCAjIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9Ci0gICAgaGFzSW5oZXJpdCA9PiAnJCcs
ICMgc2VyaWFsaXplciA9IHsgaW5oZXJpdCB9Ci0gICAgaGFzR2V0dGVyID0+ICckJywgIyBzZXJp
YWxpemVyID0geyBnZXR0ZXIgfQotICAgIG9wZXJhdGlvbnMgPT4gJ0AnLCAjIHRvSlNPTiBvcGVy
YXRpb24KLX0pOwotCiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1jb25z
dGFudHMKIHN0cnVjdCggSURMQ29uc3RhbnQgPT4gewogICAgIG5hbWUgPT4gJyQnLApAQCAtNTk5
LDcgKzU4OCw2IEBAIHN1YiBjbG9uZU9wZXJhdGlvbgogICAgICRjbG9uZWRPcGVyYXRpb24tPmlz
Q29uc3RydWN0b3IoJG9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcik7CiAgICAgJGNsb25lZE9wZXJh
dGlvbi0+aXNTdGF0aWMoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwogICAgICRjbG9uZWRPcGVyYXRp
b24tPmlzSXRlcmFibGUoJG9wZXJhdGlvbi0+aXNJdGVyYWJsZSk7Ci0gICAgJGNsb25lZE9wZXJh
dGlvbi0+aXNTZXJpYWxpemVyKCRvcGVyYXRpb24tPmlzU2VyaWFsaXplcik7CiAgICAgJGNsb25l
ZE9wZXJhdGlvbi0+aXNTdHJpbmdpZmllcigkb3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKTsKICAg
ICAkY2xvbmVkT3BlcmF0aW9uLT5pc01hcExpa2UoJG9wZXJhdGlvbi0+aXNNYXBMaWtlKTsKICAg
ICAkY2xvbmVkT3BlcmF0aW9uLT5pc1NldExpa2UoJG9wZXJhdGlvbi0+aXNTZXRMaWtlKTsKQEAg
LTY1MSw5ICs2MzksOSBAQCBteSAkbmV4dFR5cGVfMSA9ICdeKEJ5dGVTdHJpbmd8RE9NU3RyaW5n
CiBteSAkbmV4dFNwZWNpYWxzXzEgPSAnXihkZWxldGVyfGdldHRlcnxzZXR0ZXIpJCc7CiBteSAk
bmV4dERlZmluaXRpb25zXzEgPSAnXihjYWxsYmFja3xkaWN0aW9uYXJ5fGVudW18ZXhjZXB0aW9u
fGludGVyZmFjZXxuYW1lc3BhY2V8cGFydGlhbHx0eXBlZGVmKSQnOwogbXkgJG5leHRFeGNlcHRp
b25NZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8XFt8YW55
fGJvb2xlYW58Ynl0ZXxjb25zdHxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8b3B0aW9u
YWx8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQp
JCc7Ci1teSAkbmV4dEludGVyZmFjZU1lbWJlcnNfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3Ry
aW5nfFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxjb25zdHJ1Y3Rv
cnxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsb25nfG9iamVjdHxvY3RldHxy
ZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5naWZp
ZXJ8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dElu
dGVyZmFjZU1lbWJlcnNfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xh
bnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxjb25zdHJ1Y3RvcnxkZWxldGVyfGRvdWJs
ZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5j
ZXxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHROYW1lc3BhY2VNZW1iZXJzXzEgPSAnXihcKHxC
eXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8Zmxv
YXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVm
aW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7Ci1teSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VN
ZW1iZXJfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmli
dXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJp
dHxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxz
aG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5z
aWduZWQpJCc7CitteSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofEJ5dGVT
dHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25z
dHxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsb25nfG9iamVjdHxvY3RldHxy
ZWFkb25seXxzZXF1ZW5jZXxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1
bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRTaW5nbGVUeXBlXzEg
PSAnXihCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8Ym9vbGVhbnxieXRlfGRvdWJsZXxm
bG9hdHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHxzeW1ib2x8dW5kZWZpbmVkfHVu
cmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0QXJndW1lbnROYW1lXzEgPSAnXihhc3lu
Y3xhdHRyaWJ1dGV8Y2FsbGJhY2t8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5
fGVudW18Z2V0dGVyfGluY2x1ZGVzfGluaGVyaXR8aW50ZXJmYWNlfGl0ZXJhYmxlfG1hcGxpa2V8
bWl4aW58bmFtZXNwYWNlfHBhcnRpYWx8cmVhZG9ubHl8cmVxdWlyZWR8c2V0bGlrZXxzZXR0ZXJ8
c3RhdGljfHN0cmluZ2lmaWVyfHR5cGVkZWZ8dW5yZXN0cmljdGVkKSQnOwogbXkgJG5leHRDb25z
dFZhbHVlXzEgPSAnXihmYWxzZXx0cnVlKSQnOwpAQCAtMTE4NiwxMiArMTE3NCw2IEBAIHN1YiBw
YXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImlu
aGVyaXQiKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgIH0KLQotICAgICMgRklYTUU6IFJlbW92ZS4gVGhp
cyBpcyBubyBsb25nZXIgcGFydCBvZiBXZWJJREwuIFJlcGxhY2Ugd2l0aCBbU2VyaWFsaXphYmxl
XS4KLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgIHJl
dHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemVyKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
IH0KLQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+
dmFsdWUoKSA9fiAvJG5leHRPcGVyYXRpb25fMS8pIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5w
YXJzZU9wZXJhdGlvbigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICAgfQpAQCAtMTcxNCwx
MTQgKzE2OTYsNiBAQCBzdWIgcGFyc2VDb25zdHJ1Y3RvcgogICAgICRzZWxmLT5hc3NlcnRVbmV4
cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0KIAotc3ViIHBhcnNlU2Vy
aWFsaXplcgotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmli
dXRlTGlzdCA9IHNoaWZ0OwotCi0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0g
ICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewotICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInNlcmlhbGl6ZXIiLCBfX0xJTkVf
Xyk7Ci0gICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgICAgICBteSAk
bmV3RGF0YU5vZGU7Ci0gICAgICAgIGlmICgkbmV4dC0+dmFsdWUoKSBuZSAiOyIpIHsKLSAgICAg
ICAgICAgICRuZXdEYXRhTm9kZSA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6ZXJSZXN0KCRleHRlbmRl
ZEF0dHJpYnV0ZUxpc3QpOwotICAgICAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2Vu
KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSBJRExTZXJp
YWxpemFibGUtPm5ldygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbXkgJHRvSlNPTk9wZXJhdGlv
biA9IElETE9wZXJhdGlvbi0+bmV3KCk7Ci0gICAgICAgICR0b0pTT05PcGVyYXRpb24tPm5hbWUo
InRvSlNPTiIpOwotCi0gICAgICAgICRzZWxmLT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNWYWxp
ZEZvckNvbnRleHQoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCwgIm9wZXJhdGlvbiIpOwotICAgICAg
ICAkdG9KU09OT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7Ci0gICAgICAgICR0b0pTT05PcGVyYXRpb24tPmlzU2VyaWFsaXplcigxKTsKLSAgICAg
ICAgcHVzaChAeyRuZXdEYXRhTm9kZS0+b3BlcmF0aW9uc30sICR0b0pTT05PcGVyYXRpb24pOwot
Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiOyIs
IF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAgICB9Ci0gICAgJHNl
bGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQot
Ci1zdWIgcGFyc2VTZXJpYWxpemVyUmVzdAotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAg
bXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwotCi0gICAgbXkgJG5leHQgPSAkc2Vs
Zi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewotICAgICAg
ICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVf
Xyk7Ci0KLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCk7
Ci0KLSAgICB9Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuIHx8ICRu
ZXh0LT52YWx1ZSgpIGVxICIoIikgewotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlT3BlcmF0
aW9uUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICB9Ci19Ci0KLXN1YiBwYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLQotICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAieyIp
IHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ7
IiwgX19MSU5FX18pOwotICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBJRExTZXJpYWxpemFibGUt
Pm5ldygpOwotICAgICAgICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcygkbmV3
RGF0YU5vZGUpOwotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9r
ZW4oKSwgIn0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7Ci0gICAg
fQotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiWyIpIHsKLSAgICAgICAgZGllICJTZXJpYWxp
emF0aW9uIG9mIGxpc3RzIHBhdHRlcm4gaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKLSAg
ICB9Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAg
IG15IEBhdHRyaWJ1dGVzID0gKCk7Ci0gICAgICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tl
bigpOwotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRv
a2VuKTsKLSAgICAgICAgcHVzaChAYXR0cmlidXRlcywgJHRva2VuLT52YWx1ZSgpKTsKLQotICAg
ICAgICBteSAkbmV3RGF0YU5vZGUgPSBJRExTZXJpYWxpemFibGUtPm5ldygpOwotICAgICAgICAk
bmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoXEBhdHRyaWJ1dGVzKTsKLQotICAgICAgICByZXR1cm4g
JG5ld0RhdGFOb2RlOwotICAgIH0KLSAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRu
ZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7Ci19Ci0KLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25BdHRy
aWJ1dGVzCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkc2VyaWFsaXphYmxlID0g
c2hpZnQ7Ci0KLSAgICBteSBAYXR0cmlidXRlcyA9ICgpOwotICAgIG15IEBpZGVudGlmaWVycyA9
ICRzZWxmLT5wYXJzZUlkZW50aWZpZXJMaXN0KCk7Ci0KLSAgICBmb3IgbXkgJGlkZW50aWZpZXIg
KEBpZGVudGlmaWVycykgewotICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImdldHRlciIpIHsK
LSAgICAgICAgICAgICRzZXJpYWxpemFibGUtPmhhc0dldHRlcigxKTsKLSAgICAgICAgICAgIGRp
ZSAiU2VyaWFsaXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4i
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJpbmhlcml0Iikgewot
ICAgICAgICAgICAgJHNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCgxKTsKLSAgICAgICAgICAgIG5l
eHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImF0dHJpYnV0ZSIp
IHsKLSAgICAgICAgICAgICRzZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSgxKTsKLSAgICAgICAg
ICAgICMgQXR0cmlidXRlcyB3aWxsIGJlIGZpbGxlZCBpbiB2aWEgYXBwbHlNZW1iZXJMaXN0KCkK
LSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdXNoKEBhdHRyaWJ1dGVz
LCAkaWRlbnRpZmllcik7Ci0gICAgfQotCi0gICAgJHNlcmlhbGl6YWJsZS0+YXR0cmlidXRlcyhc
QGF0dHJpYnV0ZXMpOwotfQotCiBzdWIgcGFyc2VJZGVudGlmaWVyTGlzdAogewogICAgIG15ICRz
ZWxmID0gc2hpZnQ7CkBAIC0zMzU1LDIzICszMjI5LDYgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQotICAgICAgICBpZiAo
cmVmKCRpdGVtKSBlcSAiSURMU2VyaWFsaXphYmxlIikgewotICAgICAgICAgICAgJGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlKCRpdGVtKTsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7Ci0gICAgICAgIG15ICRu
dW1TZXJpYWxpemVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRy
aWJ1dGVzfTsKLSAgICAgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzQXR0cmli
dXRlKSB7Ci0gICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc30pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLT5hdHRyaWJ1dGVzfSwgJGF0dHJpYnV0ZS0+bmFtZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzaWYgKCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7Ci0gICAgICAg
ICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsK
LSAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1
dGVzfSwgJGF0dHJpYnV0ZS0+bmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5n
VGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbAko
cmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtOSw2
ICs5LDcgQEAgcGFydGlhbCBpbnRlcmZhY2UgVGVzdEdsb2JhbE9iamVjdCB7CiAgICAgW0NvbmRp
dGlvbmFsPVRFU1RfQ09ORElUSU9OQUxdIGF0dHJpYnV0ZSBUZXN0Q2FsbGJhY2tJbnRlcmZhY2VD
b25zdHJ1Y3RvciBUZXN0Q2FsbGJhY2tJbnRlcmZhY2U7CiAgICAgYXR0cmlidXRlIFRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIFRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvcjsKICAgICBhdHRyaWJ1dGUgVGVzdERPTUpJVENvbnN0cnVjdG9yIFRlc3RE
T01KSVQ7CisgICAgYXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IgVGVzdERl
ZmF1bHRUb0pTT047CiAgICAgYXR0cmlidXRlIFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9y
IFRlc3REb21haW5TZWN1cml0eTsKICAgICBhdHRyaWJ1dGUgVGVzdEVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvciBUZXN0RW5hYmxlZEJ5U2V0dGluZzsKICAgICBbRW5hYmxlZEZvckNvbnRleHQs
IFNlY3VyZUNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
ciBUZXN0RW5hYmxlZEZvckNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5j
aWVzLmRlcAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDkgQEAgV2ViRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLgog
SlNUZXN0RE9NSklULmg6IAogRE9NVGVzdERPTUpJVC5oOiAKIFdlYkRPTVRlc3RET01KSVQuaDog
CitKU1Rlc3REZWZhdWx0VG9KU09OLmg6IAorRE9NVGVzdERlZmF1bHRUb0pTT04uaDogCitXZWJE
T01UZXN0RGVmYXVsdFRvSlNPTi5oOiAKIEpTVGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6IAogRE9N
VGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6IAogV2ViRE9NVGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0
VG9KU09OLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2VudW0gVGVzdERlZmF1bHRUb0pT
T05FbnVtIHsKKyAgICAiRW51bVZhbHVlMSIsCisgICAgIkVudW1WYWx1ZTIiCit9OworCitpbnRl
cmZhY2UgVGVzdERlZmF1bHRUb0pTT04geworICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgc3RyaW5n
QXR0cmlidXRlOworICAgIFtFbmFibGVkQXRSdW50aW1lPVRlc3RSdW50aW1lRW5hYmxlZF1yZWFk
b25seSBhdHRyaWJ1dGUgbG9uZyBsb25nQXR0cmlidXRlOworICAgIFtFbmFibGVkQnlTZXR0aW5n
PVRlc3RTZXR0aW5nXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZW5hYmxlZEJ5
U2V0dGluZ3NBdHRyaWJ1dGU7CisgICAgW0NvbmRpdGlvbmFsPVRFU1RfQ09ORElUSU9OQUxdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkVudW0gZW5hYmxlZEJ5Q29uZGl0aW9u
YWxBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBldmVudEhhbmRsZXJBdHRy
aWJ1dGU7CisgICAgCisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKK307CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwJ
KHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0Tm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDUgKzM1LDUgQEAKICAgICBbU2Vj
dXJlQ29udGV4dF0gYm9vbGVhbiBnZXRTZWNyZXRCb29sZWFuKCk7CiAgICAgW0NvbmRpdGlvbmFs
PVRFU1RfRkVBVFVSRSwgU2VjdXJlQ29udGV4dCwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVy
ZV0gYm9vbGVhbiB0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKTsKIAotICAgIHNlcmlhbGl6
ZXI7CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAy
NjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTQzNSw4ICs0MzUsNiBAQCBlbnVtIFRlc3RDb25maWRlbmNl
IHsgImhpZ2giLCAia2luZGEtbG93CiAKICAgICBzdHJpbmdpZmllciBhdHRyaWJ1dGUgVVNWU3Ry
aW5nIHN0cmluZ2lmaWVyQXR0cmlidXRlOwogCi0gICAgc2VyaWFsaXplciA9IHtjcmVhdGUsIHJl
YWRPbmx5U3RyaW5nQXR0ciwgZW51bUF0dHIsIGxvbmdBdHRyfTsKLQogICAgIHVuZGVmaW5lZCBi
dWZmZXJTb3VyY2VQYXJhbWV0ZXIoQnVmZmVyU291cmNlIGRhdGEpOwogCiAgICAgW0xlZ2FjeUNh
bGxlcl0gdW5kZWZpbmVkIGxlZ2FjeUNhbGxlck5hbWVkKGxvbmcgcGFyYW0pOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNl
cmlhbGl6YXRpb24uaWRsCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw1ICs0MSw1IEBAIGludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbiB7CiAgICAgYXR0cmli
dXRlIHNlcXVlbmNlPERPTVN0cmluZz4gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZTsKICAgICBh
dHRyaWJ1dGUgc2VxdWVuY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+IHR3ZWxmdGhJ
bnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0
ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw1ICsyNiw1IEBACiBpbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0IDogVGVzdFNlcmlhbGl6YXRpb24gewogICAgIGF0dHJpYnV0ZSBsb25nICAgICAg
ICAgICAgICAgICAgaW5oZXJpdExvbmdBdHRyaWJ1dGU7CiAKLSAgICBzZXJpYWxpemVyID0geyBp
bmhlcml0LCBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbAkocmV2aXNp
b24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNSArMjcs
NSBAQCBpbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwgCiAgICAgYXR0cmli
dXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5hbExvbmdBdHRyaWJ1dGVGb287CiAgICAgYXR0
cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5hbExvbmdBdHRyaWJ1dGVCYXI7CiAKLSAg
ICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBmaW5hbExvbmdBdHRyaWJ1dGVCYXIgfTsKKyAgICBb
RGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDgzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmlu
Zy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK1N0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0RGVmYXVsdFRvSlNPTjo6
RW51bSBlbnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgi
RW51bVZhbHVlMSIpLAorICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW51bVZhbHVl
MiIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RE
ZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUxKSA9PSAwLCAiVGVzdERlZmF1bHRUb0pTT046
OkVudW06OkVudW1WYWx1ZTEgaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdERlZmF1bHRUb0pTT046OkVudW06OkVudW1WYWx1
ZTIpID09IDEsICJUZXN0RGVmYXVsdFRvSlNPTjo6RW51bTo6RW51bVZhbHVlMiBpcyBub3QgMSBh
cyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9u
VmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1cm4gdmFsdWVzW3N0
YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldOworfQorCit0ZW1wbGF0ZTw+IEpT
U3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTjo6RW51bSBlbnVtZXJhdGlvblZhbHVlKQorewor
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKK30KKwordGVtcGxh
dGU8PiBPcHRpb25hbDxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4gcGFyc2VFbnVtZXJhdGlvbjxU
ZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVu
dW1WYWx1ZTEiKQorICAgICAgICByZXR1cm4gVGVzdERlZmF1bHRUb0pTT046OkVudW06OkVudW1W
YWx1ZTE7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJFbnVtVmFsdWUyIikKKyAgICAgICAgcmV0
dXJuIFRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUyOworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlv
blZhbHVlczxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4oKQoreworICAgIHJldHVybiAiXCJFbnVt
VmFsdWUxXCIsIFwiRW51bVZhbHVlMlwiIjsKK30KKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisKKy8v
IEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OQ29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRC
eVNldHRpbmdzQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25h
bEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworI2VuZGlmCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVs
dFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdERlZmF1
bHRUb0pTT05Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0
YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU+
KHZtLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBl
LCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3REZWZhdWx0VG9K
U09OUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVs
dFRvSlNPTlByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6QmFzZSk7CisK
K3VzaW5nIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlPEpTVGVzdERlZmF1bHRUb0pTT04+OworCit0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJv
dG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
ICJUZXN0RGVmYXVsdFRvSlNPTiJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisK
K3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rv
cjo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1
Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlVGFibGVWYWx1ZXNb
XSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05D
b25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcikgfSB9LAorICAgIHsg
InN0cmluZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJsb25nQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05Mb25n
QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oMCkgfSB9LAorICAgIHsgImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlT
ZXR0aW5nc0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyAg
ICB7ICJlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRl
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1
dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PigwKSB9IH0sCisjZWxzZQorICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisj
ZW5kaWYKKyAgICB7ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05FdmVu
dEhhbmRsZXJBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmli
dXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8g
SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pT
T04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRv
SlNPTlByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdERlZmF1
bHRUb0pTT046OmluZm8oKSwgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZVRhYmxlVmFsdWVz
LCAqdGhpcyk7CisgICAgYm9vbCBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gZmFsc2U7
CisgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RS
dW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9w
ZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImxvbmdBdHRyaWJ1
dGUiKSwgc3RybGVuKCJsb25nQXR0cmlidXRlIikpOworICAgICAgICBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZp
Z3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwg
c2xvdCk7CisgICAgfQorICAgIGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+
c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1
bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVu
YWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIiksIHN0cmxlbigiZW5hYmxlZEJ5U2V0dGluZ3NBdHRy
aWJ1dGUiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVs
ZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0
aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9CisgICAgaWYg
KGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgJiYgc3RydWN0dXJlKCktPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICBmbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CisgICAgSlNDX1RPX1NU
UklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rl
c3REZWZhdWx0VG9KU09OOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVs
dFRvSlNPTikgfTsKKworSlNUZXN0RGVmYXVsdFRvSlNPTjo6SlNUZXN0RGVmYXVsdFRvSlNPTihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVm
PFRlc3REZWZhdWx0VG9KU09OPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdERlZmF1
bHRUb0pTT04+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQor
Cit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmpl
Y3QsIFRlc3REZWZhdWx0VG9KU09OPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBh
cyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJj
bGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVs
dFRvSlNPTjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6Y3Jl
YXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBlKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRUb0pTT04+KHZtLCBnbG9iYWxPYmplY3QpOworfQor
CitKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT046OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25z
dCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdERl
ZmF1bHRUb0pTT046OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0RGVm
YXVsdFRvSlNPTiogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdERlZmF1bHRUb0pTT04q
PihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3REZWZhdWx0VG9KU09OOjp+SlNUZXN0RGVm
YXVsdFRvSlNPTigpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09O
KiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmNhc3QoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTiogSURMT3BlcmF0aW9uPEpTVGVzdERl
ZmF1bHRUb0pTT04+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RE
ZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFt
ZS50aGlzVmFsdWUoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05D
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dERlZmF1bHRUb0pTT05Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3REZWZhdWx0VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9
CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRv
SlNPTlByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJv
dG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQorewor
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuc3RyaW5nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9K
U09OU3RyaW5nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0cmlidXRlIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmli
dXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZh
dWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRTdHJpbmdBdHRy
aWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmli
dXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJzdHJpbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERl
ZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyaWJ1
dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZUdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgImxvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYg
dGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSgpKSkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0
dGluZ3NBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0
ZSIpOworfQorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRv
SlNPTjo6RW51bT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxl
ZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+Ojpn
ZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsKK30KKworI2VuZGlm
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVy
QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmpl
Y3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50LCB3b3Js
ZEZvckRPTU9iamVjdCh0aGlzT2JqZWN0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERl
ZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3RE
ZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZXZlbnRI
YW5kbGVyQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZW50SGFuZGxlckF0
dHJpYnV0ZUV2ZW50LCB2YWx1ZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoJnRoaXNPYmpl
Y3QsIHZhbHVlKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZSh2YWx1ZSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZXZlbnRIYW5kbGVyQXR0cmlidXRlIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiwgSlNUZXN0RGVmYXVsdFRvSlNPTiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nQXR0cmlidXRlIiksIHRv
SlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5z
dHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgeworICAgICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvbmdBdHRyaWJ1
dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5sb25nQXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRvd25jYXN0PERvY3VtZW50Pihq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkp
IHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pTPElETFVuc2lnbmVkU2hvcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeVNldHRpbmdz
QXR0cmlidXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVk
QnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1lcmF0aW9uPFRlc3REZWZhdWx0
VG9KU09OOjpFbnVtPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5h
YmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoKSkpOworI2VuZGlmCisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT04+OjpjYWxsPGpzVGVzdERlZmF1bHRU
b0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAidG9KU09OIik7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1
bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Cisg
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpKQorICAg
ICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8fCAhSlNUZXN0
RGVmYXVsdFRvSlNPTjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OPikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IG1h
a2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7Cisg
ICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7CisgICAgYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOworSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAg
cmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihjZWxsKTsKKyAgICBhbmFseXpl
ci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsK
KyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBh
bmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhl
YXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCitib29sIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3sK
KyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpT
VGVzdERlZmF1bHRUb0pTT05Pd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0RGVmYXVsdFRvSlNP
TiA9IHN0YXRpY19jYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihoYW5kbGUuc2xvdCgpLT5hc0Nl
bGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4o
Y29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3REZWZhdWx0VG9KU09O
LT53cmFwcGVkKCksIGpzVGVzdERlZmF1bHRUb0pTT04pOworfQorCisjaWYgRU5BQkxFKEJJTkRJ
TkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/
P183VGVzdERlZmF1bHRUb0pTT05AV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVy
biAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTE3VGVzdERlZmF1bHRUb0pTT05FW107
IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVz
dERlZmF1bHRUb0pTT04+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklU
WSkKKyAgICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9pbnRl
cihpbXBsLnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFi
bGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdERlZmF1bHRUb0pTT05AV2ViQ29yZUBA
NkJAIik7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdX
ZWJDb3JlMTdUZXN0RGVmYXVsdFRvSlNPTkVbMl07CisjZW5kaWYKKworICAgIC8vIElmIHRoaXMg
ZmFpbHMgVGVzdERlZmF1bHRUb0pTT04gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5l
ZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRl
IHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19w
b2x5bW9ycGhpYzxUZXN0RGVmYXVsdFRvSlNPTj46OnZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04g
aXMgbm90IHBvbHltb3JwaGljIik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9u
IHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0RGVm
YXVsdFRvSlNPTiBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdERlZmF1bHRUb0pTT04gaGFzIHN1YmNs
YXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1
aXJlIFRlc3REZWZhdWx0VG9KU09OIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5n
CisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8g
dGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZU
YWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVy
biBjcmVhdGVXcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPihnbG9iYWxPYmplY3QsIFdURk1vdmUo
aW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RGVm
YXVsdFRvSlNPTiYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0RGVmYXVsdFRvSlNPTiogSlNUZXN0RGVm
YXVsdFRvSlNPTjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pT
T04qPih2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1
ZGUgIlRlc3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTiA6IHB1
YmxpYyBKU0RPTVdyYXBwZXI8VGVzdERlZmF1bHRUb0pTT04+IHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPjsKKyAgICBzdGF0aWMgSlNU
ZXN0RGVmYXVsdFRvSlNPTiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBs
KQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNPTiogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT04oc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdERlZmF1bHRUb0pTT04qIHRvV3JhcHBlZChKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkp
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpW
TSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0g
SlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwor
cHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT04oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJik7CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05P
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopOworICAg
IHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KERPTVdyYXBwZXJXb3JsZCYsIFRlc3REZWZhdWx0VG9KU09OKikKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyPiBvd25lcjsKKyAgICByZXR1cm4g
Jm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0RGVmYXVsdFRv
SlNPTiogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9
CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3REZWZhdWx0VG9KU09OJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT04qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0
b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051
bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmKTsKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0
ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxs
KCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VGVzdERlZmF1bHRUb0pTT04+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBUZXN0RGVmYXVsdFRvSlNPTio7Cit9OworU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3Ry
aW5nKFRlc3REZWZhdWx0VG9KU09OOjpFbnVtKTsKK3RlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyog
Y29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgVGVzdERlZmF1bHRU
b0pTT046OkVudW0pOworCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3REZWZhdWx0VG9KU09OOjpF
bnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09OOjpFbnVtPihKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4oKTsKKworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlICJKU1Rlc3RDYWxsVHJhY2VyLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1Rlc3RET01KSVQuaCIKKyNpbmNs
dWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCiAjaW5jbHVkZSAiSlNUZXN0RG9tYWluU2VjdXJp
dHkuaCIKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgiCiAjaW5jbHVkZSAiSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQuaCIKQEAgLTE5MSw2ICsxOTIsOCBAQCBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9K
U09OQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1
bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwpAQCAtMzIyLDExICszMjUsMTEgQEAgdXNpbmcgSlNUZXN0R2xvYmFs
T2JqZWN0Q29uc3RydWN0b3IgPSBKUwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNo
SW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjhdID0gewogICAgIHsgLTEsIC0x
IH0sCi0gICAgeyA0MCwgLTEgfSwKKyAgICB7IDQxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAwLCAtMSB9LAogICAgIHsgOCwgMjYzIH0sCi0gICAgeyA0NCwgLTEgfSwKKyAgICB7IDQ1
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LApAQCAtMzM0LDE1ICszMzcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaElu
ZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgNTQsIC0xIH0sCisgICAgeyA1NSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIzLCAtMSB9LAorICAgIHsgMjQs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA2NiwgLTEgfSwKKyAgICB7IDY3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzU2LDE0ICszNTksMTQgQEAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzQsIC0xIH0sCisgICAgeyAzNSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA3MSwgLTEgfSwKLSAgICB7
IDEzLCAyNTggfSwKKyAgICB7IDcyLCAtMSB9LAorICAgIHsgMTQsIDI1OCB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzcxLDggKzM3NCw4
IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM4LCAtMSB9LAot
ICAgIHsgMjAsIDI2NCB9LAorICAgIHsgMzksIC0xIH0sCisgICAgeyAyMSwgMjY0IH0sCiAgICAg
eyAxMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zODQsMTQg
KzM4NywxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzNiwg
LTEgfSwKKyAgICB7IDM3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgMjIsIDI2NSB9LAorICAgIHsgMjMsIDI2NSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDA2LDY0ICs0MDks
NjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjAsIC0xIH0s
CisgICAgeyA2MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDI0LCAyNTYgfSwKKyAgICB7IDI1LCAyNTYgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgNjEsIC0xIH0sCi0gICAgeyAxOSwgLTEgfSwKKyAgICB7IDYyLCAtMSB9LAorICAg
IHsgMjAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDYs
IC0xIH0sCi0gICAgeyAxOCwgLTEgfSwKKyAgICB7IDQ3LCAtMSB9LAorICAgIHsgMTksIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDM1LCAtMSB9LAorICAgIHsgMzYsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwKLSAgICB7IDUwLCAtMSB9LAotICAgIHsg
MjUsIC0xIH0sCisgICAgeyAxMywgLTEgfSwKKyAgICB7IDUxLCAtMSB9LAorICAgIHsgMjYsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDIsIDI2NyB9LAotICAgIHsgMzcsIC0xIH0sCisg
ICAgeyAzOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDIxLCAtMSB9LAorICAgIHsgMjIsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNTgsIC0xIH0sCisgICAgeyA1OSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMSwgLTEgfSwKKyAgICB7IDMyLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQyLCAtMSB9LAorICAgIHsgNDMs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTMsIC0xIH0sCisgICAg
eyA1NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTQsIC0xIH0sCisgICAgeyAxNSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
QEAgLTQ3OSwxMiArNDgyLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDY3LCAtMSB9LAorICAgIHsgNjgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMiwgLTEgfSwKLSAgICB7IDI5LCAy
NjIgfSwKKyAgICB7IDMzLCAtMSB9LAorICAgIHsgMzAsIDI2MiB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyA1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00OTQsOSArNDk3LDkgQEAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTYsIDI1NyB9LAorICAgIHsg
MTcsIDI1NyB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2MiwgLTEgfSwKKyAgICB7IDYzLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApA
QCAtNTA1LDExICs1MDgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgMzMsIDI2NiB9LAorICAgIHsgMzQsIDI2NiB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyAxNywgLTEgfSwKKyAgICB7IDE4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NSwg
LTEgfSwKKyAgICB7IDY2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LApAQCAtNTIzLDEyICs1MjYsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVj
dCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgNzAsIC0xIH0sCisgICAgeyA3MSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgNTYsIC0xIH0sCisgICAgeyA1NywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAzLCAtMSB9LApAQCAtNTUwLDQ1ICs1NTMsNDUgQEAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDgsIDI2MSB9LAorICAgIHsg
NDksIDI2MSB9LAogICAgIHsgMTEsIDI2MCB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2Mywg
LTEgfSwKKyAgICB7IDY0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NywgLTEgfSwK
KyAgICB7IDQ4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNSwgLTEgfSwKKyAgICB7IDE2LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNiwgLTEgfSwKKyAgICB7IDI3LCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI4LCAtMSB9LAorICAgIHsg
MjksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDUsIC0x
IH0sCisgICAgeyA0NiwgLTEgfSwKICAgICB7IDcsIC0xIH0sCi0gICAgeyA1MSwgLTEgfSwKLSAg
ICB7IC0xLCAtMSB9LAogICAgIHsgNTIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDUz
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgMjcsIDI1OSB9LAotICAgIHsgMzAsIC0xIH0sCi0gICAgeyAzOSwgLTEgfSwKLSAg
ICB7IDQxLCAtMSB9LAotICAgIHsgNDMsIC0xIH0sCi0gICAgeyA0OSwgLTEgfSwKLSAgICB7IDU1
LCAtMSB9LAotICAgIHsgNTcsIC0xIH0sCi0gICAgeyA1OSwgLTEgfSwKLSAgICB7IDY0LCAtMSB9
LAotICAgIHsgNjgsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDI4LCAyNTkgfSwKKyAg
ICB7IDMxLCAtMSB9LAorICAgIHsgNDAsIC0xIH0sCisgICAgeyA0MiwgLTEgfSwKKyAgICB7IDQ0
LCAtMSB9LAorICAgIHsgNTAsIC0xIH0sCisgICAgeyA1NiwgLTEgfSwKKyAgICB7IDU4LCAtMSB9
LAorICAgIHsgNjAsIC0xIH0sCisgICAgeyA2NSwgLTEgfSwKICAgICB7IDY5LCAtMSB9LAorICAg
IHsgNzAsIC0xIH0sCiB9OwogCiAKQEAgLTYxNSw2ICs2MTgsNyBAQCBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0R2xvYmFsCiAjZW5kaWYKICAgICB7ICJUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJU
ZXN0RE9NSklUIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0
b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7
ICJUZXN0RGVmYXVsdFRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1
bHRUb0pTT05Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
Q29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RG9tYWluU2VjdXJpdHkiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0
RW5hYmxlZEJ5U2V0dGluZyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRC
eVNldHRpbmdDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKQEAg
LTY4OCw3ICs2OTIsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xvYmFs
CiAgICAgeyAicmVndWxhck9wZXJhdGlvbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvblJlZ3VsYXJPcGVyYXRpb24pLCAoaW50cHRyX3QpICgxKSB9IH0sCiB9OwogCi1zdGF0aWMg
Y29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlID0geyA3MiwgMjU1LCB0cnVl
LCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVWYWx1
ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXggfTsKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGUgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGUgPSB7IDczLCAyNTUsIHRydWUsIEpTVGVzdEdsb2Jh
bE9iamVjdDo6aW5mbygpLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZVZhbHVlcywgSlNUZXN0R2xv
YmFsT2JqZWN0VGFibGVJbmRleCB9OwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8K
IAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVj
dG9yVGFibGVWYWx1ZXNbXSA9CkBAIC0xMjEwLDYgKzEyMTQsMjkgQEAgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29ucwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1
Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiVGVzdERPTUpJVCIpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0
RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yR2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04iKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0RGVmYXVsdFRvSlNPTiIpLCBzdHJsZW4oIlRlc3REZWZhdWx0VG9K
U09OIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1
bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdERlZmF1bHRUb0pT
T04iKTsKK30KKwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RE
b21haW5TZWN1cml0eUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24g
MjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMiArNjAsMTIgQEAgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkNhbGxGcmFtZSopOwogI2VuZGlmCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25WYWx1ZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1l
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiAKIC8v
IEF0dHJpYnV0ZXMKIApAQCAtMTUwLDExICsxNTAsMTEgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdE5vZGVQcgogI2Vsc2UKICAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAs
IDAgfSB9LAogI2VuZGlmCisgICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZW50cmllcyIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9k
ZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJr
ZXlzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0
aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKSwgKGludHB0cl90KSAoMCkgfSB9
LAogICAgIHsgInZhbHVlcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxS
YXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAogICAgIHsgImZvckVhY2giLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2gpLCAoaW50cHRyX3QpICgxKSB9IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCiB9OwogCiBj
b25zdCBDbGFzc0luZm8gSlNUZXN0Tm9kZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vZGUi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdE5vZGVQcm90b3R5cGUpIH07CkBAIC0zODMsNiArMzgzLDIyIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVAKIAogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0Tm9kZSogY2Fz
dGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBl
KCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibmFtZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwubmFtZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6
Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIpOworfQorCiBzdHJ1Y3QgVGVzdE5vZGVJdGVy
YXRvclRyYWl0cyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBKU0RPTUl0ZXJhdG9yVHlwZSB0eXBl
ID0gSlNET01JdGVyYXRvclR5cGU6OlNldDsKICAgICB1c2luZyBLZXlUeXBlID0gdm9pZDsKQEAg
LTQ4NiwyOSArNTAyLDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dAogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJmb3JFYWNoIik7CiB9CiAKLUpTQzo6SlNPYmplY3QqIEpTVGVzdE5vZGU6OnNlcmlh
bGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZSYgdGhp
c09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJv
dG90eXBlKCkpOwotCi0gICAgYXV0byBuYW1lVmFsdWUgPSBqc1Rlc3ROb2RlTmFtZUdldHRlcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJuYW1lIiksIG5hbWVWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSosIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3ROb2RlOjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pT
T04iKTsKLX0KLQogSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0Tm9kZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkocmV2aXNpb24gMjY2
NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNv
bmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5NCw3ICsxNTk0LDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9z
ZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNh
bGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZy
YW1lKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
CiAKIC8vIEF0dHJpYnV0ZXMKIApAQCAtMjMzNCw3ICsyMzMzLDYgQEAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdE9ialBybwogICAgIHsgImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9X
b3JrZXJGdW5jdGlvbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdO
YXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhw
b3NlZFRvV29ya2VyRnVuY3Rpb24pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiY29uZGl0
aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlvbiks
IChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ0b1N0cmluZyIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Ub1N0cmluZyksIChpbnRwdHJfdCkgKDApIH0gfSwKLSAgICB7ICJ0b0pTT04iLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogI2lm
IEVOQUJMRShDb25kaXRpb24xKQogICAgIHsgIkNPTkRJVElPTkFMX0NPTlNUIiwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNp
YywgeyAobG9uZyBsb25nKSgwKSB9IH0sCiAjZWxzZQpAQCAtOTQwMSw0MSArOTM5OSw2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmlu
Z0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9TdHJpbmciKTsKIH0K
IAotSlNDOjpKU09iamVjdCogSlNUZXN0T2JqOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpOwotCi0gICAgYXV0byBj
cmVhdGVWYWx1ZSA9IGpzVGVzdE9iakNyZWF0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGUiKSwg
Y3JlYXRlVmFsdWUpOwotCi0gICAgYXV0byByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSA9IGpzVGVz
dE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZWFkT25seVN0cmluZ0F0
dHIiKSwgcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUpOwotCi0gICAgYXV0byBlbnVtQXR0clZhbHVl
ID0ganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bUF0dHIiKSwgZW51bUF0
dHJWYWx1ZSk7Ci0KLSAgICBhdXRvIGxvbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpMb25nQXR0ckdl
dHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJsb25nQXR0ciIpLCBsb25nQXR0clZhbHVlKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
LXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgInRvSlNPTiIpOwotfQotCiBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPYmo6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCShyZXZpc2lv
biAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFs
aXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CiAgICAgbXV0YWJsZSBKU0M6OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+
IG1fY2FjaGVkQXR0cmlidXRlMTsKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6
VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUyOwogI2lmIEVOQUJMRShDT05ESVRJT04pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwOSw2NCArNjA5LDI1IEBAIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmYKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNl
cmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIik7CiB9CiAK
LUpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlhbGl6ZShKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3N0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2Vy
aWFsaXphdGlvbiogY2FzdGVkVGhpcykKIHsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gZmly
c3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0
dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCBmaXJzdFN0
cmluZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVl
ID0ganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0g
ICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNl
cmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZmlmdGhMb25nQXR0cmlidXRl
VmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0K
LSAgICBhdXRvIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlv
blNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRy
aWJ1dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzZXZlbnRo
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25T
ZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgIGF1dG8qIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRW
YWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihz
ZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJz
ZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgc2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKLQotICAgIGF1dG8gZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0
bHlBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8qIGVpZ2h0aEluZGlyZWN0
bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZTo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsICpqc0Nhc3Q8SlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UqPihlaWdodGhJbmRpcmVjdGx5QXR0cmli
dXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCBlaWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKLQotICAgIGF1dG8gbmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxp
emF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKLSAgICBpZiAoIW5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZVZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1dG8qIG5pbnRoT3B0aW9uYWxEaXJl
Y3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0
PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihuaW50aE9wdGlvbmFsRGlyZWN0bHlT
ZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25h
bERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJl
Y3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gdGVudGhGcm96ZW5B
cnJheUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBlbGV2ZW50aFNlcXVl
bmNlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIGVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5
cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoKmxleGlj
YWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS5vYmplY3RQ
cm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlIiksIHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNp
eHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCB0b0pTPElETERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhEaXJl
Y3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5l
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIiksIHRvSlM8
SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGVudGhGcm96ZW5BcnJheUF0
dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR3
ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETElu
dGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxm
dGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uLmgJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlm
IGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKHJldmlzaW9u
IDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwy
MiBAQAogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnRCb29sZWFuLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVsbGFibGUuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVuY2VzLmgiCisj
aW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRl
ICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUgIkpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQXJyYXkuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgpAQCAtMjE3LDIy
ICsyMjYsMjYgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaQogICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpzZXQ8c2V0
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW5oZXJpdExvbmdB
dHRyaWJ1dGUiKTsKIH0KIAotSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQ6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCog
Y2FzdGVkVGhpcykKIHsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiByZXN1bHQgPSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0KTsKLQotICAgIGF1dG8gaW5oZXJpdExvbmdB
dHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgaW5oZXJpdExv
bmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCogdGhpc09iamVjdCkKLXsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxp
emUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KS5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdB
dHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIHRvSlM8SURMVW5yZXN0cmljdGVkRG91
YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9u
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCB0b0pTPElETERvdWJsZT4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNl
dmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgdG9K
UzxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRl
IiksIHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURM
U2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVl
bmNlPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbmhlcml0TG9uZ0F0dHJp
YnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXpl
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09i
amVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpT
dWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNpb24gMjY2NjIwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMjIgQEAKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVt
YmVycy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2luY2x1ZGUgIkpT
RE9NQ29udmVydFN0cmluZ3MuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
CisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KQEAgLTI1MSwyMiArMjYwLDI4IEBA
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEYKICAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0
cmlidXRlQmFyIik7CiB9CiAKLUpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWw6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbCogY2FzdGVkVGhpcykKIHsKLSAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dDo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCk7Ci0KLSAgICBhdXRvIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlID0ganNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2Jq
ZWN0UHJvdG90eXBlKCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgp
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRo
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURM
SW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwuZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0
b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJy
YXlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVl
bmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgp
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJ
RExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50
d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUi
KSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5p
bmhlcml0TG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iKSwgdG9KUzxJRExM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRy
aWJ1dGVGb28oKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIiksIHRvSlM8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuaAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01N
YXRyaXhSZWFkT25seS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1h
dHJpeFJlYWRPbmx5LmlkbAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtOTcsNSArOTcsNSBAQAog
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFycmF5KCk7CiAK
ICAgICBbRXhwb3NlZD1XaW5kb3csIE1heVRocm93RXhjZXB0aW9uXSBzdHJpbmdpZmllcjsKLSAg
ICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNP
TigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHJl
dmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtNDUsNSArNDUsNSBAQAogCiAgICAgW01heVRocm93RXhjZXB0
aW9uXSBET01Qb2ludCBtYXRyaXhUcmFuc2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4SW5pdCBtYXRy
aXgpOwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCShyZXZpc2lvbiAy
NjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9pbnQgcDQ7IC8v
IEZJWE1FOiBTaG91bGQgYmUgW1NhbWVPYmplY3RdLgogICAgIFtOZXdPYmplY3RdIERPTVJlY3Qg
Z2V0Qm91bmRzKCk7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVm
YXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01S
ZWN0UmVhZE9ubHkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0
UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
UmVjdFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBAQAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZG91YmxlIGJvdHRvbTsKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSBsZWZ0OwogCi0gICAgc2VyaWFsaXplciA9
IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHJldmlzaW9uIDI2NjYy
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDUgKzQxLDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFt
cDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBzdGFydFRpbWU7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247Ci0gICAgc2VyaWFsaXpl
ciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWlu
Zy5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2VSZXNvdXJjZVRpbWluZy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUzLDUgKzUzLDUgQEAgdHlw
ZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NSGlnaFJlc1RpbWVTdGFtcCByZXNwb25zZUVuZDsKICAgICBbRW5hYmxlZEF0UnVudGltZT1T
ZXJ2ZXJUaW1pbmddIHJlYWRvbmx5IGF0dHJpYnV0ZSBGcm96ZW5BcnJheTxQZXJmb3JtYW5jZVNl
cnZlclRpbWluZz4gc2VydmVyVGltaW5nOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwg
YXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAkocmV2
aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRp
bWluZy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDUgKzM2LDUgQEAgdHlwZWRlZiBkb3VibGUg
RE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5h
bWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICBzZXJp
YWxpemVyID0ge2F0dHJpYnV0ZX07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAkocmV2aXNp
b24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDUgKzU0LDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBsb25nIGxvYWRFdmVudFN0YXJ0OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZEV2ZW50RW5kOwogCi0gICAgc2VyaWFsaXplciA9IHsg
YXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408004</attachid>
            <date>2020-09-04 11:25:58 -0700</date>
            <delta_ts>2020-09-04 13:27:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200904112557.patch</filename>
            <type>text/plain</type>
            <size>119921</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDIwLTA5LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSAnc2VyaWFsaXph
YmxlJyBrZXl3b3JkLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGZyb20gV2ViSURMLAorICAgICAg
ICB3aXRoIGl0cyByZXBsYWNlbWVudCwgJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknLgorICAg
ICAgICAKKyAgICAgICAgVGhlIG5ldyB2ZXJzaW9uIGlzIHByZXR0eSBzaW1pbGFyLCBidXQgaGFz
IG11Y2ggbGVzcyByb29tIGZvciBjdXN0b21pemF0aW9uCisgICAgICAgIGluIHRoYXQgeW91IGNh
biBubyBsb25nZXIgc3BlY2lmeSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
SlNPTgorICAgICAgICByZXN1bHQuIFJhdGhlciwgYWxsIGF0dHJpYnV0ZXMgdGhhdCBxdWFsaXR5
IGFzIGhhdmUgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZUluZm8uaWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0ljZUNhbmRpZGF0ZTo6dG9KU09OIGNvbnN0KToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGw6CisgICAgICAgICog
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGw6CisgICAgICAgICogTW9k
dWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2UuaWRsOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEludGVyZmFjZUhhc1JlZ3Vs
YXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNKU09OVHlwZSk6CisgICAgICAgIChJbmhl
cml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChJc1NlcmlhbGl6YWJsZVR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFibGVBdHRyaWJ1dGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
UHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAg
ICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAg
ICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoR2Vu
ZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZXRSdW50
aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVy
RGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLmpzb246CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06Cisg
ICAgICAgIChjbG9uZU9wZXJhdGlvbik6CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VN
ZW1iZXIpOgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFs
aXplcik6IERlbGV0ZWQuCisgICAgICAgIChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAo
cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1l
bnRhbERlcGVuZGVuY2llcy5kZXA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuaWRsOgorICAgICAgICAqIGNzcy9ET01NYXRyaXhSZWFkT25seS5pZGw6Cisg
ICAgICAgICogZG9tL0RPTVBvaW50UmVhZE9ubHkuaWRsOgorICAgICAgICAqIGRvbS9ET01RdWFk
LmlkbDoKKyAgICAgICAgKiBkb20vRE9NUmVjdFJlYWRPbmx5LmlkbDoKKyAgICAgICAgKiBwYWdl
L1BlcmZvcm1hbmNlRW50cnkuaWRsOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VSZXNvdXJj
ZVRpbWluZy5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRpbWluZy5pZGw6
CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGw6CisKIDIwMjAtMDktMDQgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBbGln
biBFVUMtSlAsIElTTy0yMDIyLUpQLCBhbmQgU2hpZnRfSklTIGRlY29kaW5nIHdpdGggQ2hyb21l
LCBGaXJlZm94LCBhbmQgdGhlIHNwZWNpZmljYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VJbmZvLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwJKHJldmlz
aW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFE
ZXZpY2VJbmZvLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBNZWRpYURldmljZUtpbmQga2luZDsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGxhYmVsOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZ3Jv
dXBJZDsKLSAgICBzZXJpYWxpemVyID0ge2F0dHJpYnV0ZX07CisgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKIH07CiAKIC8vIEZJWE1FIDE2OTg3MTogbWlzc2luZyBJbnB1dERldmljZUlu
Zm8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIsNiArNjIsMTUgQEAgUmVmPFJUQ0ljZUNhbmRpZGF0ZT4gUlRDSWNlQ2FuZGlkYXRlOjpj
cgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJUQ0ljZUNhbmRpZGF0ZShjYW5kaWRhdGUsIHNk
cE1pZCwgc2RwTUxpbmVJbmRleCkpOwogfQogCitSVENJY2VDYW5kaWRhdGVJbml0IFJUQ0ljZUNh
bmRpZGF0ZTo6dG9KU09OKCkgY29uc3QKK3sKKyAgICBSVENJY2VDYW5kaWRhdGVJbml0IHJlc3Vs
dDsKKyAgICByZXN1bHQuY2FuZGlkYXRlID0gbV9jYW5kaWRhdGU7CisgICAgcmVzdWx0LnNkcE1p
ZCA9IG1fc2RwTWlkOworICAgIHJlc3VsdC5zZHBNTGluZUluZGV4ID0gbV9zZHBNTGluZUluZGV4
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oCShyZXZpc2lvbiAyNjY2MjApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q2Fu
ZGlkYXRlKFN0cmluZyYmIGNhbmRpZGF0ZSkgeyBtX2NhbmRpZGF0ZSA9IFdURk1vdmUoY2FuZGlk
YXRlKTsgfQogCisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0b0pTT04oKSBjb25zdDsKKwogcHJp
dmF0ZToKICAgICBSVENJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGUsIGNvbnN0
IFN0cmluZyYgc2RwTWlkLCBPcHRpb25hbDx1bnNpZ25lZCBzaG9ydD4gc2RwTUxpbmVJbmRleCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsNSBAQAogICAgIC8vIEZJWE1FIDE2OTY2MjogbWlzc2luZyByZWxhdGVkUG9y
dAogICAgIC8vIEZJWE1FIDE2OTY2MjogbWlzc2luZyB1ZnJhZwogCi0gICAgLy8gRklYTUUgMTY5
NjYyOiBhZGQgdWZyYWcgdG8gdGhlIGxpc3QKLSAgICBzZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwg
c2RwTWlkLCBzZHBNTGluZUluZGV4fTsKKyAgICBSVENJY2VDYW5kaWRhdGVJbml0IHRvSlNPTigp
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNSArNDEsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBSVENTZHBUeXBlIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBz
ZHA7CiAKLSAgICBzZXJpYWxpemVyID0ge3R5cGUsIHNkcH07CisgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1
ZXN0L1BheW1lbnRBZGRyZXNzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRBZGRyZXNzLmlkbAkocmV2aXNpb24gMjY2NjIwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBJbXBsZW1lbnRhdGlvbkxh
Y2tzVlRhYmxlLAogICAgIFNlY3VyZUNvbnRleHQKIF0gaW50ZXJmYWNlIFBheW1lbnRBZGRyZXNz
IHsKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgY291bnRyeTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRnJvemVuQXJyYXk8RE9NU3RyaW5nPiBhZGRyZXNzTGluZTsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlZ2lvbjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlc3BvbnNlLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNw
b25zZS5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlc3BvbnNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgIFNlY3VyZUNvbnRleHQsCiBd
IGludGVyZmFjZSBQYXltZW50UmVzcG9uc2UgOiBFdmVudFRhcmdldCB7Ci0gICAgc2VyaWFsaXpl
ciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIAogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcmVxdWVzdElkOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgbWV0aG9kTmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDI2NjYyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwMSw1MCArMTEwMSw2NCBAQCBzdWIgSXNXcmFwcGVyVHlwZQogICAgIHJl
dHVybiAwOwogfQogCi1zdWIgSW5oZXJpdHNTZXJpYWxpemFibGUKK3N1YiBJbnRlcmZhY2VIYXNS
ZWd1bGFyVG9KU09OT3BlcmF0aW9uCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UpID0g
QF87CiAKLSAgICBteSAkYW55UGFyZW50SXNTZXJpYWxpemFibGUgPSAwOwotICAgICRvYmplY3Qt
PkZvckFsbFBhcmVudHMoJGludGVyZmFjZSwgc3ViIHsKLSAgICAgICAgbXkgJHBhcmVudEludGVy
ZmFjZSA9IHNoaWZ0OwotICAgICAgICAkYW55UGFyZW50SXNTZXJpYWxpemFibGUgPSAxIGlmICRw
YXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKLSAgICB9LCAwKTsKLQotICAgIHJldHVybiAk
YW55UGFyZW50SXNTZXJpYWxpemFibGU7CisgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAeyRp
bnRlcmZhY2UtPm9wZXJhdGlvbnN9KSB7CisgICAgICAgIGlmICghJG9wZXJhdGlvbi0+aXNTdGF0
aWMgJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAidG9KU09OIikgeworICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKLXN1YiBJc1NlcmlhbGl6
YWJsZVR5cGUKKyMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLWpzb24tdHlw
ZXMKK3N1YiBJc0pTT05UeXBlCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICR0eXBl
KSA9IEBfOwogCi0gICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tc2Vy
aWFsaXphYmxlLXR5cGUKLQorICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3Qi
OwogICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4g
MSBpZiAkb2JqZWN0LT5Jc051bWVyaWNUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2Jq
ZWN0LT5Jc0VudW1UeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmlu
Z1R5cGUoJHR5cGUpOwotICAgIHJldHVybiAwIGlmICR0eXBlLT5uYW1lIGVxICJFdmVudEhhbmRs
ZXIiOwotCi0gICAgaWYgKCR0eXBlLT5pc1VuaW9uIHx8ICRvYmplY3QtPklzRGljdGlvbmFyeVR5
cGUoJHR5cGUpKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHVuaW9uIGFuZCBkaWN0
aW9uYXJ5IHR5cGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQorICAg
IHJldHVybiAxIGlmICRvYmplY3QtPklzU3RyaW5nT3JFbnVtVHlwZSgkdHlwZSk7CiAKICAgICBp
ZiAoJG9iamVjdC0+SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCR0eXBlKSkgewogICAgICAg
ICBteSAkc3VidHlwZSA9IEB7JHR5cGUtPnN1YnR5cGVzfVswXTsKLQotICAgICAgICAjIEZJWE1F
OiB3ZWJraXQub3JnL2IvMTk0NDM5IFtXZWJJRExdIFN1cHBvcnQgc2VyaWFsaXppbmcgc2VxdWVu
Y2VzIGFuZCBGcm96ZW5BcnJheXMgb2YgaW50ZXJmYWNlcwotICAgICAgICByZXR1cm4gMCBpZiAk
b2JqZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHN1YnR5cGUpOwotCi0gICAgICAgIHJldHVybiAkb2Jq
ZWN0LT5Jc1NlcmlhbGl6YWJsZVR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgICAgICBy
ZXR1cm4gJG9iamVjdC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkc3VidHlwZSk7CisgICAgfQor
ICAgIGlmICgkb2JqZWN0LT5Jc1JlY29yZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIG15ICR2YWx1
ZVN1YnR5cGUgPSBAeyR0eXBlLT5zdWJ0eXBlc31bMF07CisgICAgICAgIHJldHVybiAkb2JqZWN0
LT5Jc0pTT05UeXBlKCRpbnRlcmZhY2UsICR2YWx1ZVN1YnR5cGUpOwogICAgIH0KIAotICAgIHJl
dHVybiAwIGlmICEkb2JqZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHR5cGUpOworICAgIGlmICgkb2Jq
ZWN0LT5Jc0ludGVyZmFjZVR5cGUoJHR5cGUpKSB7CisgICAgICAgICMgU3BlY2lhbCBjYXNlIEV2
ZW50SGFuZGxlciwgc2luY2UgdGhlcmUgaXMgbm8gcmVhbCBJREwgZm9yIGl0LgorICAgICAgICBy
ZXR1cm4gMCBpZiAkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsKKworICAgICAgICBteSAk
aW50ZXJmYWNlID0gJG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJmYWNlLCAkdHlw
ZSk7CisgICAgICAgIGlmICgkb2JqZWN0LT5JbnRlcmZhY2VIYXNSZWd1bGFyVG9KU09OT3BlcmF0
aW9uKCRpbnRlcmZhY2UpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogCi0g
ICAgbXkgJGludGVyZmFjZUZvclR5cGUgPSAkb2JqZWN0LT5HZXRJbnRlcmZhY2VGb3JUeXBlKCRp
bnRlcmZhY2UsICR0eXBlKTsKLSAgICBpZiAoJGludGVyZmFjZUZvclR5cGUpIHsKLSAgICAgICAg
cmV0dXJuIDEgaWYgJGludGVyZmFjZUZvclR5cGUtPnNlcmlhbGl6YWJsZTsKLSAgICAgICAgcmV0
dXJuICRvYmplY3QtPkluaGVyaXRzU2VyaWFsaXphYmxlKCRpbnRlcmZhY2VGb3JUeXBlKTsKKyAg
ICAgICAgbXkgJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24gPSAwOworICAgICAg
ICAkb2JqZWN0LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7CisgICAgICAgICAgICBt
eSAkcGFyZW50SW50ZXJmYWNlID0gc2hpZnQ7CisgICAgICAgICAgICAkYW55UGFyZW50SGFzUmVn
dWxhclRvSlNPTk9wZXJhdGlvbiA9IDEgaWYgJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRv
SlNPTk9wZXJhdGlvbigkcGFyZW50SW50ZXJmYWNlKTsKKyAgICAgICAgfSwgMCk7CisgICAgICAg
IAorICAgICAgICBpZiAoJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pIHsKKyAg
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICgkdHlw
ZS0+aXNVbmlvbikgeworICAgICAgICAjIEZJWE1FOiBVbmlvbiB0eXBlcyBzaG91bGQgYmUgc3Vw
cG9ydGVkIGlmIGFsbCB0aGUgbWVtYmVyIHR5cGVzIGFyZSBKU09OIHR5cGVzLgorICAgICAgICBk
aWUgIkRlZmF1bHQgdG9KU09OIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGZvciB1bmlvbiB0
eXBlcy5cbiI7CisgICAgfQorICAgIGlmICgkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBl
KSkgeworICAgICAgICAjIEZJWE1FOiBEaWN0aW9uYXJ5IHR5cGVzIHNob3VsZCBiZSBzdXBwb3J0
ZWQgaWYgYWxsIG1lbWJlcnMgZGVjbGFyZWQgb24gdGhlIGRpY3Rpb25hcnkgYW5kIGFsbCBpdHMg
aW5oZXJpdGVkIGRpY3Rpb25hcmllcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJEZWZh
dWx0IHRvSlNPTiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgZGljdGlvbmFyeSB0eXBl
cy5cbiI7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMTU2LDE3ICsxMTcwLDYgQEAgc3Vi
IGhhc0NhY2hlZEF0dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZQogICAgIHJldHVybiAkYXR0cmli
dXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWNoZWRBdHRyaWJ1dGV9IHx8ICRhdHRyaWJ1dGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUdldHRlcn07CiB9CiAKLXN1YiBJc1NlcmlhbGl6
YWJsZUF0dHJpYnV0ZQotewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkYXR0cmlidXRl
KSA9IEBfOwotCi0gICAgaWYgKCRvYmplY3QtPklzU2VxdWVuY2VUeXBlKCRhdHRyaWJ1dGUtPnR5
cGUpICYmIGhhc0NhY2hlZEF0dHJpYnV0ZU9yQ3VzdG9tR2V0dGVyRXh0ZW5kZWRBdHRyaWJ1dGUo
JGF0dHJpYnV0ZSkpIHsKLSAgICAgICAgZGllICJTZXJpYWxpemVycyBmb3Igc2VxdWVuY2UgdHlw
ZXMgd2l0aCBDYWNoZWRBdHRyaWJ1dGUgb3IgQ3VzdG9tR2V0dGVyIGV4dGVuZGVkIGF0dHJpYnV0
ZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLlxuIjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
JG9iamVjdC0+SXNTZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUp
OwotfQotCiBzdWIgR2V0SW50ZXJmYWNlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbU5hbWUKIHsKICAg
ICAjIEZJWE1FOiBJdCdzIGJhZCB0byBoYXZlIGEgZnVuY3Rpb24gbGlrZSB0aGlzIHRoYXQgb3Bl
bnMgYW5vdGhlciBJREwgZmlsZSB0byBhbnN3ZXIgYSBxdWVzdGlvbi4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTg2Nyw3ICsxODY3LDYgQEAgc3ViIFByb3Rv
dHlwZU9wZXJhdGlvbkNvdW50CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPml0
ZXJhYmxlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKICAgICAkY291bnQg
Kz0gc2NhbGFyIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFj
ZS0+bWFwTGlrZTsKICAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+
b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLSAgICAkY291bnQgKz0gc2NhbGFy
IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5vcGVyYXRpb25zfSBpZiAkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGU7CiAKICAgICByZXR1cm4gJGNvdW50OwogfQpAQCAtMjc4MCwxMSArMjc3OSw2
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
TmFtZWRDb25zdHJ1Y3Rvcn07CiAgICAgfQogCi0gICAgIyBTZXJpYWxpemVyIGZ1bmN0aW9uLgot
ICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
XG4iKTsKLSAgICB9Ci0gICAgCiAgICAgbXkgJG51bUN1c3RvbU9wZXJhdGlvbnMgPSAwOwogICAg
IG15ICRudW1DdXN0b21BdHRyaWJ1dGVzID0gMDsKIApAQCAtMzE4Niw3ICszMTgwLDYgQEAgc3Vi
IEdlbmVyYXRlUHJvcGVydGllc0hhc2hUYWJsZQogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGlu
dGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRl
cmZhY2UoJGludGVyZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5t
YXBMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBv
cGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJm
YWNlLT5zZXRMaWtlOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogICAgIGZv
cmVhY2ggbXkgJG9wZXJhdGlvbiAoQG9wZXJhdGlvbnMpIHsKICAgICAgICAgbmV4dCBpZiAoJG9w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHJpdmF0ZUlkZW50aWZpZXJ9IGFuZCBub3Qg
JG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHVibGljSWRlbnRpZmllcn0pOwogICAg
ICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CkBAIC0zOTk0LDcgKzM5ODcsNiBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGlu
dGVyZmFjZS0+aXRlcmFibGUtPm9wZXJhdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRl
cmZhY2UoJGludGVyZmFjZSk7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5t
YXBMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKICAgICBwdXNoKEBv
cGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJm
YWNlLT5zZXRMaWtlOwotICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAg
bXkgQGF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9OwogICAgIHB1c2goQGF0
dHJpYnV0ZXMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+YXR0cmlidXRlc30pIGlmICRpbnRlcmZh
Y2UtPm1hcExpa2U7CkBAIC00NjczLDcgKzQ2NjUsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgIH0KICAgICAKICAgICBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJm
YWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKLSAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZp
bml0aW9uKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJs
ZTsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJXZWJDb3JlSlNDbGllbnREYXRhLmgiKTsKQEAgLTU0MTksNyArNTQx
MCwxMCBAQCBzdWIgR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uCiAKICAgICByZXR1cm4gaWYg
SXNKU0J1aWx0aW4oJGludGVyZmFjZSwgJG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIGlmICRvcGVy
YXRpb24tPmlzSXRlcmFibGU7Ci0gICAgcmV0dXJuIGlmICRvcGVyYXRpb24tPmlzU2VyaWFsaXpl
cjsKKyAgICAKKyAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RGVmYXVs
dH0pIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24o
JG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKTsKKyAgICB9
CiAKICAgICBteSAkaXNDdXN0b20gPSBIYXNDdXN0b21NZXRob2QoJG9wZXJhdGlvbik7CiAgICAg
bXkgJGlzT3ZlcmxvYWRlZCA9ICRvcGVyYXRpb24tPntvdmVybG9hZHN9ICYmIEB7JG9wZXJhdGlv
bi0+e292ZXJsb2Fkc319ID4gMTsKQEAgLTU1MzksMTAwICs1NTMzLDk1IEBAIHN1YiBHZW5lcmF0
ZU9wZXJhdGlvbkRlZmluaXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRlbmRBcHBsZUNv
cHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7CiB9CiAKLXN1YiBHZW5lcmF0ZVNlcmlhbGl6
ZXJEZWZpbml0aW9uCitzdWIgR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlvbgogewot
ICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOwotCi0gICAgbXkgJGludGVyZmFj
ZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOworICAgIG15ICgkb3V0cHV0QXJyYXksICRp
bnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkcGFyZW50
U2VyaWFsaXplckludGVyZmFjZSA9IDA7Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJs
ZS0+aGFzSW5oZXJpdCkgewotICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFyZW50cygk
aW50ZXJmYWNlLCBzdWIgewotICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0
OwotICAgICAgICAgICAgaWYgKCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAmJiAhJHBh
cmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgICAgICAkcGFyZW50U2VyaWFs
aXplckludGVyZmFjZSA9ICRwYXJlbnRJbnRlcmZhY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0sIDApOwotICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcmZhY2Ugd2l0
aCBcInNlcmlhbGl6ZXJcIiBmb3IgXCJpbmhlcml0XCIgc2VyaWFsaXplciBpbiAkaW50ZXJmYWNl
TmFtZVxuIiBpZiAhJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2U7CisgICAgaWYgKCRvcGVyYXRp
b24tPm5hbWUgZXEgInRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAib2JqZWN0
IikgeworICAgICAgICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5p
dGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwog
ICAgIH0KIAotICAgIG15IEBzZXJpYWxpemVkQXR0cmlidXRlcyA9ICgpOworICAgIGRpZSAiW0Rl
ZmF1bHRdIGlzIG5vdCBzdXBwb3J0IGZvciBmb3IgdGhpcyBvcGVyYXRpb24gKCIgLiAkb3BlcmF0
aW9uLT5uYW1lIC4gIikuIEl0IGlzIG9ubHkgY3VycmVudGx5IGRlZmluZWQgZm9yICdvYmplY3Qg
dG9KU09OKCk7Jy4iCit9CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1lIChAeyRpbnRl
cmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgbXkgJGZvdW5kQXR0
cmlidXRlID0gMDsKLSAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2Ut
PmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEgJGF0dHJp
YnV0ZS0+bmFtZSkgewotICAgICAgICAgICAgICAgICRmb3VuZEF0dHJpYnV0ZSA9IDE7Ci0gICAg
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NlcmlhbGl6YWJsZUF0dHJpYnV0ZSgk
aW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBzZXJp
YWxpemVkQXR0cmlidXRlcywgJGF0dHJpYnV0ZSk7ICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGRpZSAiRXhwbGljaXQgXCJzZXJpYWxpemVyXCIgYXR0cmlidXRlIFwi
JGF0dHJpYnV0ZU5hbWVcIiBpcyBub3Qgc2VyaWFsaXphYmxlXG4iIGlmICEkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICBsYXN0OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgXCJzZXJpYWxp
emVyXCIgYXR0cmlidXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpbiAkaW50ZXJmYWNlTmFtZVxuIiBp
ZiAhJGZvdW5kQXR0cmlidXRlOwotICAgIH0KK3N1YiBHZW5lcmF0ZURlZmF1bHRUb0pTT05PcGVy
YXRpb25EZWZpbml0aW9uCit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJG9wZXJhdGlvbikgPSBAXzsKIAotICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25O
YW1lID0gInRvSlNPTiI7Ci0gICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAk
Y29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlv
biIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7
CisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kZWZhdWx0LXRvanNv
bgogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1
Y3Rvci5oPiIpOworICAgIG15IEBpbmhlcml0ZW5jZVN0YWNrID0gKCk7CisgICAgcHVzaChAaW5o
ZXJpdGVuY2VTdGFjaywgJGludGVyZmFjZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkZvckFsbFBh
cmVudHMoJGludGVyZmFjZSwgc3ViIHsKKyAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNo
aWZ0OworICAgICAgICBwdXNoKEBpbmhlcml0ZW5jZVN0YWNrLCAkcGFyZW50SW50ZXJmYWNlKTsK
KyAgICB9LCAwKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU09iamVjdCogSlMk
e2ludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsICR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTtcbiIpOworICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUoJGludGVy
ZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CisKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUJvZHkoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NOYW1lfSog
Y2FzdGVkVGhpcylcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwogCi0gICAg
aWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAgICBteSAk
cGFyZW50U2VyaWFsaXplckludGVyZmFjZU5hbWUgPSAkcGFyZW50U2VyaWFsaXplckludGVyZmFj
ZS0+dHlwZS0+bmFtZTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVz
dWx0ID0gSlMke3BhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVj
dFByb3RvdHlwZSgpKTtcbiIpOwotICAgIH0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7
CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rv
ci5oPiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7XG4iKTsKIAotICAgIGZvcmVhY2ggbXkgJGF0dHJp
YnV0ZSAoQHNlcmlhbGl6ZWRBdHRyaWJ1dGVzKSB7Ci0gICAgICAgICMgRklYTUU6IEF0dHJpYnV0
ZXMgdGhhdCB0aHJvdyBleGNlcHRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggc2VyaWFsaXpl
cnMgeWV0LgorICAgICB3aGlsZSAoQGluaGVyaXRlbmNlU3RhY2spIHsKKyAgICAgICAgbXkgJGN1
cnJlbnRJbnRlcmZhY2UgPSBwb3AoQGluaGVyaXRlbmNlU3RhY2spOwogCi0gICAgICAgIG15ICRu
YW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKLSAgICAgICAgbXkgJGdldEZ1bmN0aW9uTmFtZSA9IEdl
dEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gJHtuYW1lfVZhbHVlID0gJHtn
ZXRGdW5jdGlvbk5hbWV9R2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpO1xu
Iik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTtcbiIpOwotCi0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNJbnRlcmZh
Y2VUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7Ci0gICAgICAgICAgICBteSAkYXR0cmlidXRlSW50
ZXJmYWNlTmFtZSA9ICRhdHRyaWJ1dGUtPnR5cGUtPm5hbWU7Ci0gICAgICAgICAgICBpZiAoJGF0
dHJpYnV0ZS0+dHlwZS0+aXNOdWxsYWJsZSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmICghJHtuYW1lfVZhbHVlLmlzTnVsbCgpKSB7XG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgYXV0byogJHtuYW1lfVNlcmlhbGl6
ZWRWYWx1ZSA9IEpTJHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKGxleGljYWxH
bG9iYWxPYmplY3QsICpqc0Nhc3Q8SlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9Kj4oJHtuYW1l
fVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH0gZWxzZVxuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7
XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byogJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSA9IEpTJHthdHRyaWJ1dGVJ
bnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsICpqc0Nhc3Q8SlMk
e2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9Kj4oJHtuYW1lfVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTtc
biIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFt
ZX1TZXJpYWxpemVkVmFsdWUpO1xuIik7CisgICAgICAgIG15ICRoYXNEZWZhdWx0VG9KU09OT3Bl
cmF0aW9uID0gMDsKKyAgICAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAeyRjdXJyZW50SW50
ZXJmYWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICAgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e0RlZmF1bHR9ICYmICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIg
JiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAib2JqZWN0IikgeworICAgICAgICAgICAgICAg
ICRoYXNEZWZhdWx0VG9KU09OT3BlcmF0aW9uID0gMTsKKyAgICAgICAgICAgICAgICBsYXN0Owog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOwogICAgICAgICB9CisgICAgICAg
IGlmICgkaGFzRGVmYXVsdFRvSlNPTk9wZXJhdGlvbikgeworICAgICAgICAgICAgZm9yZWFjaCBt
eSAkYXR0cmlidXRlIChAeyRjdXJyZW50SW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAg
ICAgICAgICAgIG5leHQgaWYgJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CisgICAgICAgICAgICAgICAg
bmV4dCBpZiAhJGNvZGVHZW5lcmF0b3ItPklzSlNPTlR5cGUoJGludGVyZmFjZSwgJGF0dHJpYnV0
ZS0+dHlwZSk7CiAKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgICAgICAg
ICAgICAgIG15ICRjb25kaXRpb25hbCA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0NvbmRpdGlvbmFsfTsKKyAgICAgICAgICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5H
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRpb25hbCk7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuIik7OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG15
ICRhdHRyaWJ1dGVOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAgICAgICAgICBteSAo
JGJhc2VGdW5jdGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4
cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRjdXJyZW50SW50ZXJmYWNlLT50eXBlLT5uYW1lLCAk
YXR0cmlidXRlKTsKKyAgICAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RnVsbHlR
dWFsaWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOYW1lKCRjdXJyZW50SW50ZXJmYWNlLCAkYXR0cmli
dXRlLCAkYmFzZUZ1bmN0aW9uTmFtZSwgImltcGwiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAg
ICAgICAgIG15ICR0b0pTRXhwcmVzc2lvbiA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMo
JGF0dHJpYnV0ZSwgJGN1cnJlbnRJbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4o
IiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiKTsK
KworICAgICAgICAgICAgICAgIG15ICRuZWVkc1J1bnRpbWVDaGVjayA9IE5lZWRzUnVudGltZUNo
ZWNrKCRjdXJyZW50SW50ZXJmYWNlLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgICAgICBpZiAo
JG5lZWRzUnVudGltZUNoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRydW50aW1lRW5h
YmxlQ29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0
cmluZygkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSwgImNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoJHtydW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmd9KSB7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke2F0dHJpYnV0ZU5hbWV9XCIpLCAke3Rv
SlNFeHByZXNzaW9ufSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke2F0dHJpYnV0ZU5hbWV9XCIpLCAke3RvSlNFeHBy
ZXNzaW9ufSk7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
JGNvbmRpdGlvbmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiNlbmRpZlxuXG4iKSA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CiAgICAgfQogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG4iKTsKKyAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiIpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICJz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFt
ZX1Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCAk
e2NsYXNzTmFtZX0qIHRoaXNPYmplY3QpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlMke2ludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOwotICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwotICAgIHB1
c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6
ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKUyR7
aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1Cb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgXCIke3NlcmlhbGl6ZXJGdW5jdGlv
bk5hbWV9XCIpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNl
LT50eXBlLT5uYW1lOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIntcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTJHtpbnRlcmZhY2VOYW1lfT46OmNhbGw8JHtmdW5jdGlvbk5hbWV9Qm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwidG9KU09OXCIpO1xuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAifVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKIH0K
IAogc3ViIEdlbmVyYXRlR2V0Q2FsbERhdGEKQEAgLTc1ODQsNyArNzU3Myw2IEBAIHN1YiBHZXRS
dW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRp
bnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+
bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVy
ZmFjZS0+c2V0TGlrZTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBm
b3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYgKCRv
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQgbm90
ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsKICAg
ICAgICAgbmV4dCBpZiAkb3BlcmF0aW9uLT57b3ZlcmxvYWRJbmRleH0gJiYgJG9wZXJhdGlvbi0+
e292ZXJsb2FkSW5kZXh9ID4gMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMQXR0cmlidXRlcy5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5qc29uCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgkod29ya2luZyBj
b3B5KQpAQCAtMTYyLDYgKzE2Miw5IEBACiAgICAgICAgICAgICAidmFsdWVzIjogWyIiLCAiUmVh
ZERPTSIsICJHZXR0ZXIiXSwKICAgICAgICAgICAgICJzdXBwb3J0c0Nvbmp1bmN0aW9uIjogdHJ1
ZQogICAgICAgICB9LAorICAgICAgICAiRGVmYXVsdCI6IHsKKyAgICAgICAgICAgICJjb250ZXh0
c0FsbG93ZWQiOiBbIm9wZXJhdGlvbiJdCisgICAgICAgIH0sCiAgICAgICAgICJEZWZhdWx0RGVm
aW5lT3duUHJvcGVydHkiOiB7CiAgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRl
cmZhY2UiXQogICAgICAgICB9LApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExQYXJzZXIucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExQYXJzZXIucG0JKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw2
IEBAIHN0cnVjdCggSURMSW50ZXJmYWNlID0+IHsKICAgICBhc3luY0l0ZXJhYmxlID0+ICckJywg
IyBVc2VkIGZvciBhc3ljbiBpdGVyYWJsZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExBc3luY0l0
ZXJhYmxlJwogICAgIG1hcExpa2UgPT4gJyQnLCAjIFVzZWQgZm9yIG1hcExpa2UgaW50ZXJmYWNl
cywgb2YgdHlwZSAnSURMTWFwTGlrZScKICAgICBzZXRMaWtlID0+ICckJywgIyBVc2VkIGZvciBz
ZXRMaWtlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETFNldExpa2UnCi0gICAgc2VyaWFsaXphYmxl
ID0+ICckJywgIyBVc2VkIGZvciBzZXJpYWxpemFibGUgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURM
U2VyaWFsaXphYmxlJwogICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCiB9KTsKIApAQCAt
OTQsNyArOTMsNiBAQCBzdHJ1Y3QoIElETE9wZXJhdGlvbiA9PiB7CiAgICAgaXNDb25zdHJ1Y3Rv
ciA9PiAnJCcsCiAgICAgaXNTdGF0aWMgPT4gJyQnLAogICAgIGlzSXRlcmFibGUgPT4gJyQnLAot
ICAgIGlzU2VyaWFsaXplciA9PiAnJCcsCiAgICAgaXNTdHJpbmdpZmllciA9PiAnJCcsCiAgICAg
aXNNYXBMaWtlID0+ICckJywKICAgICBpc1NldExpa2UgPT4gJyQnLApAQCAtMTU0LDE1ICsxNTIs
NiBAQCBzdHJ1Y3QoIElETFNldExpa2UgPT4gewogICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAn
JCcsCiB9KTsKIAotIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtc2VyaWFs
aXplcnMKLXN0cnVjdCggSURMU2VyaWFsaXphYmxlID0+IHsKLSAgICBhdHRyaWJ1dGVzID0+ICdA
JywgIyBMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gc2VyaWFsaXplCi0gICAgaGFzQXR0cmlidXRlID0+
ICckJywgIyBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfQotICAgIGhhc0luaGVyaXQgPT4gJyQn
LCAjIHNlcmlhbGl6ZXIgPSB7IGluaGVyaXQgfQotICAgIGhhc0dldHRlciA9PiAnJCcsICMgc2Vy
aWFsaXplciA9IHsgZ2V0dGVyIH0KLSAgICBvcGVyYXRpb25zID0+ICdAJywgIyB0b0pTT04gb3Bl
cmF0aW9uCi19KTsKLQogIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtY29u
c3RhbnRzCiBzdHJ1Y3QoIElETENvbnN0YW50ID0+IHsKICAgICBuYW1lID0+ICckJywKQEAgLTU5
OSw3ICs1ODgsNiBAQCBzdWIgY2xvbmVPcGVyYXRpb24KICAgICAkY2xvbmVkT3BlcmF0aW9uLT5p
c0NvbnN0cnVjdG9yKCRvcGVyYXRpb24tPmlzQ29uc3RydWN0b3IpOwogICAgICRjbG9uZWRPcGVy
YXRpb24tPmlzU3RhdGljKCRvcGVyYXRpb24tPmlzU3RhdGljKTsKICAgICAkY2xvbmVkT3BlcmF0
aW9uLT5pc0l0ZXJhYmxlKCRvcGVyYXRpb24tPmlzSXRlcmFibGUpOwotICAgICRjbG9uZWRPcGVy
YXRpb24tPmlzU2VyaWFsaXplcigkb3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIpOwogICAgICRjbG9u
ZWRPcGVyYXRpb24tPmlzU3RyaW5naWZpZXIoJG9wZXJhdGlvbi0+aXNTdHJpbmdpZmllcik7CiAg
ICAgJGNsb25lZE9wZXJhdGlvbi0+aXNNYXBMaWtlKCRvcGVyYXRpb24tPmlzTWFwTGlrZSk7CiAg
ICAgJGNsb25lZE9wZXJhdGlvbi0+aXNTZXRMaWtlKCRvcGVyYXRpb24tPmlzU2V0TGlrZSk7CkBA
IC02NTEsOSArNjM5LDkgQEAgbXkgJG5leHRUeXBlXzEgPSAnXihCeXRlU3RyaW5nfERPTVN0cmlu
ZwogbXkgJG5leHRTcGVjaWFsc18xID0gJ14oZGVsZXRlcnxnZXR0ZXJ8c2V0dGVyKSQnOwogbXkg
JG5leHREZWZpbml0aW9uc18xID0gJ14oY2FsbGJhY2t8ZGljdGlvbmFyeXxlbnVtfGV4Y2VwdGlv
bnxpbnRlcmZhY2V8bmFtZXNwYWNlfHBhcnRpYWx8dHlwZWRlZikkJzsKIG15ICRuZXh0RXhjZXB0
aW9uTWVtYmVyc18xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfFxbfGFu
eXxib29sZWFufGJ5dGV8Y29uc3R8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fG9wdGlv
bmFsfHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVk
KSQnOwotbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0
cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0
b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8
cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lm
aWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRJ
bnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8
YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3Vi
bGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVu
Y2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVz
dHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0TmFtZXNwYWNlTWVtYmVyc18xID0gJ14oXCh8
Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZs
b2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRl
ZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRQYXJ0aWFsSW50ZXJmYWNl
TWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJp
YnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVy
aXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8
c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVu
c2lnbmVkKSQnOworbXkgJG5leHRQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxCeXRl
U3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29u
c3R8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8
cmVhZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8
dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0U2luZ2xlVHlwZV8x
ID0gJ14oQnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGJvb2xlYW58Ynl0ZXxkb3VibGV8
ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1
bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dEFyZ3VtZW50TmFtZV8xID0gJ14oYXN5
bmN8YXR0cmlidXRlfGNhbGxiYWNrfGNvbnN0fGNvbnN0cnVjdG9yfGRlbGV0ZXJ8ZGljdGlvbmFy
eXxlbnVtfGdldHRlcnxpbmNsdWRlc3xpbmhlcml0fGludGVyZmFjZXxpdGVyYWJsZXxtYXBsaWtl
fG1peGlufG5hbWVzcGFjZXxwYXJ0aWFsfHJlYWRvbmx5fHJlcXVpcmVkfHNldGxpa2V8c2V0dGVy
fHN0YXRpY3xzdHJpbmdpZmllcnx0eXBlZGVmfHVucmVzdHJpY3RlZCkkJzsKIG15ICRuZXh0Q29u
c3RWYWx1ZV8xID0gJ14oZmFsc2V8dHJ1ZSkkJzsKQEAgLTExODYsMTIgKzExNzQsNiBAQCBzdWIg
cGFyc2VQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyCiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJp
bmhlcml0IikgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlSW5oZXJpdEF0dHJpYnV0ZSgk
ZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICB9Ci0KLSAgICAjIEZJWE1FOiBSZW1vdmUuIFRo
aXMgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgV2ViSURMLiBSZXBsYWNlIHdpdGggW1NlcmlhbGl6YWJs
ZV0uCi0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewotICAgICAgICBy
ZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXplcigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAg
ICB9Ci0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQt
PnZhbHVlKCkgPX4gLyRuZXh0T3BlcmF0aW9uXzEvKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+
cGFyc2VPcGVyYXRpb24oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CiAgICAgIH0KQEAgLTE3MTQs
MTE0ICsxNjk2LDYgQEAgc3ViIHBhcnNlQ29uc3RydWN0b3IKICAgICAkc2VsZi0+YXNzZXJ0VW5l
eHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNl
cmlhbGl6ZXIKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwot
ICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKLSAgICAgICAgJHNlbGYt
PmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5F
X18pOwotICAgICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICAgICAgbXkg
JG5ld0RhdGFOb2RlOwotICAgICAgICBpZiAoJG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7Ci0gICAg
ICAgICAgICAkbmV3RGF0YU5vZGUgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5k
ZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tl
bigpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gSURMU2Vy
aWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG15ICR0b0pTT05PcGVyYXRp
b24gPSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5uYW1l
KCJ0b0pTT04iKTsKLQotICAgICAgICAkc2VsZi0+YXNzZXJ0RXh0ZW5kZWRBdHRyaWJ1dGVzVmFs
aWRGb3JDb250ZXh0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsICJvcGVyYXRpb24iKTsKLSAgICAg
ICAgJHRvSlNPTk9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0
ZUxpc3QpOwotICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIoMSk7Ci0gICAg
ICAgIHB1c2goQHskbmV3RGF0YU5vZGUtPm9wZXJhdGlvbnN9LCAkdG9KU09OT3BlcmF0aW9uKTsK
LQotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsi
LCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7Ci0gICAgfQotICAgICRz
ZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0K
LQotc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAg
IG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNl
bGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKLSAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5F
X18pOwotCi0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigp
OwotCi0gICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAk
bmV4dC0+dmFsdWUoKSBlcSAiKCIpIHsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJh
dGlvblJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgfQotfQotCi1zdWIgcGFyc2VT
ZXJpYWxpemF0aW9uUGF0dGVybgotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0KLSAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsi
KSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
eyIsIF9fTElORV9fKTsKLSAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxl
LT5uZXcoKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoJG5l
d0RhdGFOb2RlKTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRv
a2VuKCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAg
IH0KLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFs
aXphdGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7Ci0g
ICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAg
ICBteSBAYXR0cmlidXRlcyA9ICgpOwotICAgICAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9r
ZW4oKTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZpZXJU
b2tlbik7Ci0gICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7Ci0KLSAg
ICAgICAgbXkgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAg
JG5ld0RhdGFOb2RlLT5hdHRyaWJ1dGVzKFxAYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgcmV0dXJu
ICRuZXdEYXRhTm9kZTsKLSAgICB9Ci0gICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigk
bmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQotCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0
cmlidXRlcwotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJHNlcmlhbGl6YWJsZSA9
IHNoaWZ0OwotCi0gICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICBteSBAaWRlbnRpZmllcnMg
PSAkc2VsZi0+cGFyc2VJZGVudGlmaWVyTGlzdCgpOwotCi0gICAgZm9yIG15ICRpZGVudGlmaWVy
IChAaWRlbnRpZmllcnMpIHsKLSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJnZXR0ZXIiKSB7
Ci0gICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNHZXR0ZXIoMSk7Ci0gICAgICAgICAgICBk
aWUgIlNlcmlhbGl6ZXIgZ2V0dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQu
IjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiaW5oZXJpdCIpIHsK
LSAgICAgICAgICAgICRzZXJpYWxpemFibGUtPmhhc0luaGVyaXQoMSk7Ci0gICAgICAgICAgICBu
ZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJhdHRyaWJ1dGUi
KSB7Ci0gICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGUoMSk7Ci0gICAgICAg
ICAgICAjIEF0dHJpYnV0ZXMgd2lsbCBiZSBmaWxsZWQgaW4gdmlhIGFwcGx5TWVtYmVyTGlzdCgp
Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVzaChAYXR0cmlidXRl
cywgJGlkZW50aWZpZXIpOwotICAgIH0KLQotICAgICRzZXJpYWxpemFibGUtPmF0dHJpYnV0ZXMo
XEBhdHRyaWJ1dGVzKTsKLX0KLQogc3ViIHBhcnNlSWRlbnRpZmllckxpc3QKIHsKICAgICBteSAk
c2VsZiA9IHNoaWZ0OwpAQCAtMzM1NSwyMyArMzIyOSw2IEBAIHN1YiBhcHBseU1lbWJlckxpc3QK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KHJlZigkaXRlbSkgZXEgIklETFNlcmlhbGl6YWJsZSIpIHsKLSAgICAgICAgICAgICRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZSgkaXRlbSk7Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgewotICAgICAgICBteSAk
bnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0
cmlidXRlc307Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJp
YnV0ZSkgewotICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2Ut
PmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2lmICgkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgewotICAgICAg
ICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmli
dXRlc30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGlu
Z1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJ
KHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTks
NiArOSw3IEBAIHBhcnRpYWwgaW50ZXJmYWNlIFRlc3RHbG9iYWxPYmplY3QgewogICAgIFtDb25k
aXRpb25hbD1URVNUX0NPTkRJVElPTkFMXSBhdHRyaWJ1dGUgVGVzdENhbGxiYWNrSW50ZXJmYWNl
Q29uc3RydWN0b3IgVGVzdENhbGxiYWNrSW50ZXJmYWNlOwogICAgIGF0dHJpYnV0ZSBUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvciBUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I7CiAgICAgYXR0cmlidXRlIFRlc3RET01KSVRDb25zdHJ1Y3RvciBUZXN0
RE9NSklUOworICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yIFRlc3RE
ZWZhdWx0VG9KU09OOwogICAgIGF0dHJpYnV0ZSBUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3Rv
ciBUZXN0RG9tYWluU2VjdXJpdHk7CiAgICAgYXR0cmlidXRlIFRlc3RFbmFibGVkQnlTZXR0aW5n
Q29uc3RydWN0b3IgVGVzdEVuYWJsZWRCeVNldHRpbmc7CiAgICAgW0VuYWJsZWRGb3JDb250ZXh0
LCBTZWN1cmVDb250ZXh0XSBhdHRyaWJ1dGUgVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3IgVGVzdEVuYWJsZWRGb3JDb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVu
Y2llcy5kZXAJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw5IEBAIFdlYkRPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci4K
IEpTVGVzdERPTUpJVC5oOiAKIERPTVRlc3RET01KSVQuaDogCiBXZWJET01UZXN0RE9NSklULmg6
IAorSlNUZXN0RGVmYXVsdFRvSlNPTi5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OLmg6IAorV2Vi
RE9NVGVzdERlZmF1bHRUb0pTT04uaDogCiBKU1Rlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIERP
TVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIFdlYkRPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5o
OiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVs
dFRvSlNPTi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitlbnVtIFRlc3REZWZhdWx0VG9K
U09ORW51bSB7CisgICAgIkVudW1WYWx1ZTEiLAorICAgICJFbnVtVmFsdWUyIgorfTsKKworaW50
ZXJmYWNlIFRlc3REZWZhdWx0VG9KU09OIHsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0cmlu
Z0F0dHJpYnV0ZTsKKyAgICBbRW5hYmxlZEF0UnVudGltZT1UZXN0UnVudGltZUVuYWJsZWRdcmVh
ZG9ubHkgYXR0cmlidXRlIGxvbmcgbG9uZ0F0dHJpYnV0ZTsKKyAgICBbRW5hYmxlZEJ5U2V0dGlu
Zz1UZXN0U2V0dGluZ10gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGVuYWJsZWRC
eVNldHRpbmdzQXR0cmlidXRlOworICAgIFtDb25kaXRpb25hbD1URVNUX0NPTkRJVElPTkFMXSBy
ZWFkb25seSBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05FbnVtIGVuYWJsZWRCeUNvbmRpdGlv
bmFsQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgZXZlbnRIYW5kbGVyQXR0
cmlidXRlOworICAgIAorICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRs
CShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw1ICszNSw1IEBACiAgICAgW1Nl
Y3VyZUNvbnRleHRdIGJvb2xlYW4gZ2V0U2VjcmV0Qm9vbGVhbigpOwogICAgIFtDb25kaXRpb25h
bD1URVNUX0ZFQVRVUkUsIFNlY3VyZUNvbnRleHQsIEVuYWJsZWRBdFJ1bnRpbWU9VGVzdEZlYXR1
cmVdIGJvb2xlYW4gdGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuKCk7CiAKLSAgICBzZXJpYWxp
emVyOworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24g
MjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsOCArNDM1LDYgQEAgZW51bSBUZXN0Q29uZmlkZW5j
ZSB7ICJoaWdoIiwgImtpbmRhLWxvdwogCiAgICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0
cmluZyBzdHJpbmdpZmllckF0dHJpYnV0ZTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7Y3JlYXRlLCBy
ZWFkT25seVN0cmluZ0F0dHIsIGVudW1BdHRyLCBsb25nQXR0cn07Ci0KICAgICB1bmRlZmluZWQg
YnVmZmVyU291cmNlUGFyYW1ldGVyKEJ1ZmZlclNvdXJjZSBkYXRhKTsKIAogICAgIFtMZWdhY3lD
YWxsZXJdIHVuZGVmaW5lZCBsZWdhY3lDYWxsZXJOYW1lZChsb25nIHBhcmFtKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RT
ZXJpYWxpemF0aW9uLmlkbAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNSArNDEsNSBAQCBpbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb24gewogICAgIGF0dHJp
YnV0ZSBzZXF1ZW5jZTxET01TdHJpbmc+IGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGU7CiAgICAg
YXR0cmlidXRlIHNlcXVlbmNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB0d2VsZnRo
SW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGU7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1
dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNSArMjYsNSBAQAogaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdCA6IFRlc3RTZXJpYWxpemF0aW9uIHsKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAg
ICAgICAgICAgICAgIGluaGVyaXRMb25nQXR0cmlidXRlOwogCi0gICAgc2VyaWFsaXplciA9IHsg
aW5oZXJpdCwgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWwuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5pZGwJKHJldmlz
aW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDUgKzI3
LDUgQEAgaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIAogICAgIGF0dHJp
YnV0ZSBsb25nICAgICAgICAgICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlRm9vOwogICAgIGF0
dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlQmFyOwogCi0g
ICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwgZmluYWxMb25nQXR0cmlidXRlQmFyIH07CisgICAg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT04uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ4MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTi5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25I
YW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJp
bmcuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9VUkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlND
OworCitTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdERlZmF1bHRUb0pTT046
OkVudW0gZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IkVudW1WYWx1ZTEiKSwKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkVudW1WYWx1
ZTIiKSwKKyAgICB9OworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0
RGVmYXVsdFRvSlNPTjo6RW51bTo6RW51bVZhbHVlMSkgPT0gMCwgIlRlc3REZWZhdWx0VG9KU09O
OjpFbnVtOjpFbnVtVmFsdWUxIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFs
dWUyKSA9PSAxLCAiVGVzdERlZmF1bHRUb0pTT046OkVudW06OkVudW1WYWx1ZTIgaXMgbm90IDEg
YXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlv
blZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwordGVtcGxhdGU8PiBK
U1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT046OkVudW0gZW51bWVyYXRpb25WYWx1ZSkKK3sK
KyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7Cit9CisKK3RlbXBs
YXRlPD4gT3B0aW9uYWw8VGVzdERlZmF1bHRUb0pTT046OkVudW0+IHBhcnNlRW51bWVyYXRpb248
VGVzdERlZmF1bHRUb0pTT046OkVudW0+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJF
bnVtVmFsdWUxIikKKyAgICAgICAgcmV0dXJuIFRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVt
VmFsdWUxOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMiIpCisgICAgICAgIHJl
dHVybiBUZXN0RGVmYXVsdFRvSlNPTjo6RW51bTo6RW51bVZhbHVlMjsKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRp
b25WYWx1ZXM8VGVzdERlZmF1bHRUb0pTT046OkVudW0+KCkKK3sKKyAgICByZXR1cm4gIlwiRW51
bVZhbHVlMVwiLCBcIkVudW1WYWx1ZTJcIiI7Cit9CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisv
LyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVk
QnlTZXR0aW5nc0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9u
YWxBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKKyNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZh
dWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1
bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZh
dWx0VG9KU09OUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBz
dGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBl
Pih2bS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlw
ZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRv
SlNPTlByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1
bHRUb0pTT05Qcm90b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OkJhc2UpOwor
Cit1c2luZyBKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZTxKU1Rlc3REZWZhdWx0VG9KU09OPjsKKwordGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblBy
b3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pTT046OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCAiVGVzdERlZmF1bHRUb0pTT04iX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQor
Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3Ry
dWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZVRhYmxlVmFsdWVz
W10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09O
Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7
ICJzdHJpbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRy
aWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rl
c3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKSB9IH0sCisgICAgeyAibG9uZ0F0dHJpYnV0
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OTG9u
Z0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KDApIH0gfSwKKyAgICB7ICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5
U2V0dGluZ3NBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisg
ICAgeyAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmli
dXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oMCkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAor
I2VuZGlmCisgICAgeyAiZXZlbnRIYW5kbGVyQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORXZl
bnRIYW5kbGVyQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJp
YnV0ZSkgfSB9LAorICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9K
U09OIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdERlZmF1bHRU
b0pTT05Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3REZWZh
dWx0VG9KU09OOjppbmZvKCksIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVUYWJsZVZhbHVl
cywgKnRoaXMpOworICAgIGJvb2wgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IGZhbHNl
OworICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0
UnVudGltZUVuYWJsZWRFbmFibGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJv
cGVydGllcyA9IHRydWU7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJsb25nQXR0cmli
dXRlIiksIHN0cmxlbigibG9uZ0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3Bl
cnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25m
aWd1cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworICAgIH0KKyAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkt
PnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRS
dW50aW1lUHJvcGVydGllcyA9IHRydWU7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJl
bmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCBzdHJsZW4oImVuYWJsZWRCeVNldHRpbmdzQXR0
cmlidXRlIikpOworICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0s
IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERl
bGV0ZVByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorICAgIGlm
IChoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzICYmIHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25h
cnkoKSkKKyAgICAgICAgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgIEpTQ19UT19T
VFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1
bHRUb0pTT04pIH07CisKK0pTVGVzdERlZmF1bHRUb0pTT046OkpTVGVzdERlZmF1bHRUb0pTT04o
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3REZWZh
dWx0VG9KU09OPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30K
Kwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2Jq
ZWN0LCBUZXN0RGVmYXVsdFRvSlNPTj46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQg
YXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3Vi
Y2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1
bHRUb0pTT046OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OmNy
ZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90
eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT046OnByb3RvdHlwZShW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU1Rlc3REZWZhdWx0VG9KU09OPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30K
KworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNv
bnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29u
c3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3RE
ZWZhdWx0VG9KU09OOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdERl
ZmF1bHRUb0pTT04qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3REZWZhdWx0VG9KU09O
Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0RGVmYXVsdFRvSlNPTjo6fkpTVGVzdERl
ZmF1bHRUb0pTT04oKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNP
TiogSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpjYXN0KEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAg
cmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3Rl
bXBsYXRlPD4gaW5saW5lIEpTVGVzdERlZmF1bHRUb0pTT04qIElETE9wZXJhdGlvbjxKU1Rlc3RE
ZWZhdWx0VG9KU09OPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0
RGVmYXVsdFRvSlNPTio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJh
bWUudGhpc1ZhbHVlKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09O
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3REZWZhdWx0VG9KU09OUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwor
fQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRU
b0pTT05Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHBy
b3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLnN0cmluZ0F0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZh
dWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRv
SlNPTlN0cmluZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJpYnV0ZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJp
YnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0U3RyaW5nQXR0
cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJp
YnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAic3RyaW5nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmli
dXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJsb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGVHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04m
IHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVuc2lnbmVkU2hvcnQ+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdz
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNl
dHRpbmdzQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1
dGUiKTsKK30KKworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRU
b0pTT046OkVudW0+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJs
ZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6
Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgImVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlIik7Cit9CisKKyNlbmRp
ZgorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxl
ckF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2Jq
ZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudCwgd29y
bGRGb3JET01PYmplY3QodGhpc09iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0
RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImV2ZW50
SGFuZGxlckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmVudEhhbmRsZXJB
dHRyaWJ1dGVFdmVudCwgdmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2Jq
ZWN0LCB2YWx1ZSk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUodmFsdWUpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRU
b0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIpOworfQorCitz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVG
dW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSosIEpTVGVzdERlZmF1bHRUb0pTT04qIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ0F0dHJpYnV0ZSIpLCB0
b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
c3RyaW5nQXR0cmlidXRlKCkpKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS50ZXN0UnVudGltZUVuYWJsZWRFbmFibGVkKCkpIHsKKyAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb25nQXR0cmli
dXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwubG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgfQorICAgIGlmIChkb3duY2FzdDxEb2N1bWVudD4o
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgp
KSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKSwgdG9KUzxJRExVbnNpZ25lZFNob3J0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5n
c0F0dHJpYnV0ZSgpKSk7CisgICAgfQorI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxl
ZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUiKSwgdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0RGVmYXVs
dFRvSlNPTjo6RW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVu
YWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Y2FsbDxqc1Rlc3REZWZhdWx0
VG9KU09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgInRvSlNPTiIpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZh
dWx0VG9KU09OOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCit7CisgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwor
ICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuIHNwYWNlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTj4gfHwgIUpTVGVz
dERlZmF1bHRUb0pTT046Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTj4pCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBt
YWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT04pOwor
ICAgIGVsc2UKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT04pOworICAgIGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsKK0lHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpTVGVzdERlZmF1bHRUb0pTT046
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQorICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAg
IHJldHVybiBzcGFjZTsKK30KKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oY2VsbCk7CisgICAgYW5hbHl6
ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7
CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAg
YW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVI
ZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKworYm9vbCBKU1Rlc3REZWZhdWx0VG9KU09OT3duZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit7
CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwor
ICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBK
U1Rlc3REZWZhdWx0VG9KU09OT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdERlZmF1bHRUb0pT
T04gPSBzdGF0aWNfY2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oaGFuZGxlLnNsb3QoKS0+YXND
ZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+
KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0RGVmYXVsdFRvSlNP
Ti0+d3JhcHBlZCgpLCBqc1Rlc3REZWZhdWx0VG9KU09OKTsKK30KKworI2lmIEVOQUJMRShCSU5E
SU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigi
Pz9fN1Rlc3REZWZhdWx0VG9KU09OQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRl
cm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUxN1Rlc3REZWZhdWx0VG9KU09ORVtd
OyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3REZWZhdWx0VG9KU09OPiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJ
VFkpCisgICAgY29uc3Qgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBvaW50
ZXIoaW1wbC5wdHIoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRh
YmxlUG9pbnRlciA9IF9faWRlbnRpZmllcigiPz9fN1Rlc3REZWZhdWx0VG9KU09OQFdlYkNvcmVA
QDZCQCIpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43
V2ViQ29yZTE3VGVzdERlZmF1bHRUb0pTT05FWzJdOworI2VuZGlmCisKKyAgICAvLyBJZiB0aGlz
IGZhaWxzIFRlc3REZWZhdWx0VG9KU09OIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBu
ZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0
ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
cG9seW1vcnBoaWM8VGVzdERlZmF1bHRUb0pTT04+Ojp2YWx1ZSwgIlRlc3REZWZhdWx0VG9KU09O
IGlzIG5vdCBwb2x5bW9ycGhpYyIpOworCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlv
biB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdERl
ZmF1bHRUb0pTT04gaGFzIHN1YmNsYXNzZXMuIElmIFRlc3REZWZhdWx0VG9KU09OIGhhcyBzdWJj
bGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVx
dWlyZSBUZXN0RGVmYXVsdFRvSlNPTiB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmlu
ZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRv
IHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxW
VGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1
cm4gY3JlYXRlV3JhcHBlcjxUZXN0RGVmYXVsdFRvSlNPTj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdERl
ZmF1bHRUb0pTT04mIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdERlZmF1bHRUb0pTT04qIEpTVGVzdERl
ZmF1bHRUb0pTT046OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9K
U09OKj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04u
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNE
T01Db252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlICJUZXN0RGVmYXVsdFRvSlNPTi5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT04gOiBw
dWJsaWMgSlNET01XcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPiB7CitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0RGVmYXVsdFRvSlNPTj47CisgICAgc3RhdGljIEpT
VGVzdERlZmF1bHRUb0pTT04qIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1w
bCkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT04qIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTj4oZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwg
V1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwor
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3REZWZhdWx0VG9KU09OKiB0b1dyYXBwZWQoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCop
OworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09
IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Cisg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
K3Byb3RlY3RlZDoKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09OKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYpOworCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09O
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1
YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25l
cihET01XcmFwcGVyV29ybGQmLCBUZXN0RGVmYXVsdFRvSlNPTiopCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcj4gb3duZXI7CisgICAgcmV0dXJu
ICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdERlZmF1bHRU
b0pTT04qIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0Owor
fQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0RGVmYXVsdFRvSlNPTiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3REZWZhdWx0VG9KU09OKiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNO
dWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRy
PFRlc3REZWZhdWx0VG9KU09OPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVh
dGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVs
bCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFRlc3REZWZhdWx0VG9KU09OPiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNUZXN0RGVmYXVsdFRvSlNPTjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBl
ID0gVGVzdERlZmF1bHRUb0pTT04qOworfTsKK1N0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0
cmluZyhUZXN0RGVmYXVsdFRvSlNPTjo6RW51bSk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNTdHJpbmcq
IGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFRlc3REZWZhdWx0
VG9KU09OOjpFbnVtKTsKKwordGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0RGVmYXVsdFRvSlNPTjo6
RW51bT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4oSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdERlZmF1bHRUb0pTT046OkVudW0+KCk7CisKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW5jbHVkZSAiSlNUZXN0Q2FsbFRyYWNlci5oIgogI2luY2x1ZGUgIkpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNUZXN0RE9NSklULmgiCisjaW5j
bHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTi5oIgogI2luY2x1ZGUgIkpTVGVzdERvbWFpblNlY3Vy
aXR5LmgiCiAjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oIgogI2luY2x1ZGUgIkpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0LmgiCkBAIC0xOTEsNiArMTkyLDggQEAgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZQogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5n
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKQEAgLTMyMiwxMSArMzI1LDExIEBAIHVzaW5nIEpTVGVzdEdsb2Jh
bE9iamVjdENvbnN0cnVjdG9yID0gSlMKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFz
aEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXhbMjY4XSA9IHsKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgNDAsIC0xIH0sCisgICAgeyA0MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgMCwgLTEgfSwKICAgICB7IDgsIDI2MyB9LAotICAgIHsgNDQsIC0xIH0sCisgICAgeyA0
NSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKQEAgLTMzNCwxNSArMzM3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDU0LCAtMSB9LAorICAgIHsgNTUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyMywgLTEgfSwKKyAgICB7IDI0
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgNjYsIC0xIH0sCisgICAgeyA2NywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM1NiwxNCArMzU5LDE0IEBAIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM0LCAtMSB9LAorICAgIHsgMzUs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNzEsIC0xIH0sCi0gICAg
eyAxMywgMjU4IH0sCisgICAgeyA3MiwgLTEgfSwKKyAgICB7IDE0LCAyNTggfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM3MSw4ICszNzQs
OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzOCwgLTEgfSwK
LSAgICB7IDIwLCAyNjQgfSwKKyAgICB7IDM5LCAtMSB9LAorICAgIHsgMjEsIDI2NCB9LAogICAg
IHsgMTAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzg0LDE0
ICszODcsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzYs
IC0xIH0sCisgICAgeyAzNywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDIyLCAyNjUgfSwKKyAgICB7IDIzLCAyNjUgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQwNiw2NCArNDA5
LDY0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYwLCAtMSB9
LAorICAgIHsgNjEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCi0gICAgeyAyNCwgMjU2IH0sCisgICAgeyAyNSwgMjU2IH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDYxLCAtMSB9LAotICAgIHsgMTksIC0xIH0sCisgICAgeyA2MiwgLTEgfSwKKyAg
ICB7IDIwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ2
LCAtMSB9LAotICAgIHsgMTgsIC0xIH0sCisgICAgeyA0NywgLTEgfSwKKyAgICB7IDE5LCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAzNSwgLTEgfSwKKyAgICB7IDM2LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MCwgLTEgfSwKLSAgICB7
IDI1LCAtMSB9LAorICAgIHsgMTMsIC0xIH0sCisgICAgeyA1MSwgLTEgfSwKKyAgICB7IDI2LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAyLCAyNjcgfSwKLSAgICB7IDM3LCAtMSB9LAor
ICAgIHsgMzgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCi0gICAgeyAyMSwgLTEgfSwKKyAgICB7IDIyLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDU4LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzEsIC0xIH0sCisgICAgeyAzMiwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MiwgLTEgfSwKKyAgICB7IDQz
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUzLCAtMSB9LAorICAg
IHsgNTQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE0LCAtMSB9LAorICAgIHsgMTUs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CkBAIC00NzksMTIgKzQ4MiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA2NywgLTEgfSwKKyAgICB7IDY4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0xIH0sCi0gICAgeyAyOSwg
MjYyIH0sCisgICAgeyAzMywgLTEgfSwKKyAgICB7IDMwLCAyNjIgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDk0LDkgKzQ5Nyw5IEBAIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE2LCAyNTcgfSwKKyAgICB7
IDE3LCAyNTcgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjIsIC0xIH0sCisgICAgeyA2Mywg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
QEAgLTUwNSwxMSArNTA4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDMzLCAyNjYgfSwKKyAgICB7IDM0LCAyNjYgfSwKICAgICB7IC0xLCAtMSB9LAotICAg
IHsgMTcsIC0xIH0sCisgICAgeyAxOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjUs
IC0xIH0sCisgICAgeyA2NiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKQEAgLTUyMywxMiArNTI2LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1
Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDcwLCAtMSB9LAorICAgIHsgNzEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDU2LCAtMSB9LAorICAgIHsgNTcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgMywgLTEgfSwKQEAgLTU1MCw0NSArNTUzLDQ1IEBAIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ4LCAyNjEgfSwKKyAgICB7
IDQ5LCAyNjEgfSwKICAgICB7IDExLCAyNjAgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjMs
IC0xIH0sCisgICAgeyA2NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDcsIC0xIH0s
CisgICAgeyA0OCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTUsIC0xIH0sCisgICAgeyAxNiwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjYsIC0xIH0sCisgICAgeyAyNywgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyOCwgLTEgfSwKKyAgICB7
IDI5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ1LCAt
MSB9LAorICAgIHsgNDYsIC0xIH0sCiAgICAgeyA3LCAtMSB9LAotICAgIHsgNTEsIC0xIH0sCi0g
ICAgeyAtMSwgLTEgfSwKICAgICB7IDUyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA1
MywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDI3LCAyNTkgfSwKLSAgICB7IDMwLCAtMSB9LAotICAgIHsgMzksIC0xIH0sCi0g
ICAgeyA0MSwgLTEgfSwKLSAgICB7IDQzLCAtMSB9LAotICAgIHsgNDksIC0xIH0sCi0gICAgeyA1
NSwgLTEgfSwKLSAgICB7IDU3LCAtMSB9LAotICAgIHsgNTksIC0xIH0sCi0gICAgeyA2NCwgLTEg
fSwKLSAgICB7IDY4LCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAyOCwgMjU5IH0sCisg
ICAgeyAzMSwgLTEgfSwKKyAgICB7IDQwLCAtMSB9LAorICAgIHsgNDIsIC0xIH0sCisgICAgeyA0
NCwgLTEgfSwKKyAgICB7IDUwLCAtMSB9LAorICAgIHsgNTYsIC0xIH0sCisgICAgeyA1OCwgLTEg
fSwKKyAgICB7IDYwLCAtMSB9LAorICAgIHsgNjUsIC0xIH0sCiAgICAgeyA2OSwgLTEgfSwKKyAg
ICB7IDcwLCAtMSB9LAogfTsKIAogCkBAIC02MTUsNiArNjE4LDcgQEAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogI2VuZGlmCiAgICAgeyAiVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAi
VGVzdERPTUpJVCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVj
dG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKSB9IH0sCisgICAg
eyAiVGVzdERlZmF1bHRUb0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdERvbWFpblNlY3VyaXR5Iiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvciksIChpbnRwdHJf
dCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVz
dEVuYWJsZWRCeVNldHRpbmciLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVk
QnlTZXR0aW5nQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0
dGluZ0NvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9IH0sCkBA
IC02ODgsNyArNjkyLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2Jh
bAogICAgIHsgInJlZ3VsYXJPcGVyYXRpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25SZWd1bGFyT3BlcmF0aW9uKSwgKGludHB0cl90KSAoMSkgfSB9LAogfTsKIAotc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZSA9IHsgNzIsIDI1NSwgdHJ1
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0OjppbmZvKCksIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlVmFs
dWVzLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4IH07CitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlID0geyA3MywgMjU1LCB0cnVlLCBKU1Rlc3RHbG9i
YWxPYmplY3Q6OmluZm8oKSwgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVzdEds
b2JhbE9iamVjdFRhYmxlSW5kZXggfTsKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICov
CiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1
Y3RvclRhYmxlVmFsdWVzW10gPQpAQCAtMTIxMCw2ICsxMjE0LDI5IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnMKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3Ry
dWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIlRlc3RET01KSVQiKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVz
dERlZmF1bHRUb0pTT046OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVs
dFRvSlNPTkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT04iKSwgc3RybGVuKCJUZXN0RGVmYXVsdFRv
SlNPTiIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3REZWZhdWx0VG9K
U09OIik7Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9u
IDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpDYWxsRnJhbWUqKTsKICNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2Fs
bEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFt
ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvbkZvckVhY2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAv
LyBBdHRyaWJ1dGVzCiAKQEAgLTE1MCwxMSArMTUwLDExIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3ROb2RlUHIKICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAw
LCAwIH0gfSwKICNlbmRpZgorICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImVudHJpZXMiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAi
a2V5cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5j
dGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5j
dGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0g
fSwKICAgICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChp
bnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJmb3JFYWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2Rl
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3ROb2RlUHJvdG90eXBlKSB9OwpAQCAtMzgzLDYgKzM4MywyMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQCiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdE5vZGUqIGNh
c3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlw
ZSgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm5hbWUiKSwgdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLm5hbWUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46
OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30KKwogc3RydWN0IFRlc3ROb2RlSXRl
cmF0b3JUcmFpdHMgewogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNET01JdGVyYXRvclR5cGUgdHlw
ZSA9IEpTRE9NSXRlcmF0b3JUeXBlOjpTZXQ7CiAgICAgdXNpbmcgS2V5VHlwZSA9IHZvaWQ7CkBA
IC00ODYsMjkgKzUwMiw2IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3QKICAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAiZm9yRWFjaCIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpzZXJp
YWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE5vZGUmIHRo
aXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFBy
b3RvdHlwZSgpKTsKLQotICAgIGF1dG8gbmFtZVZhbHVlID0ganNUZXN0Tm9kZU5hbWVHZXR0ZXIo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibmFtZSIpLCBuYW1lVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0Tm9kZTo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9K
U09OIik7Ci19Ci0KIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHJldmlzaW9uIDI2
NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXpl
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1v
ZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAg
ICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpD
b25jdXJyZW50bHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTQsNyArMTU5NCw2IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpD
YWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxG
cmFtZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSop
OwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTIzMzQsNyArMjMzMyw2IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KICAgICB7ICJjb25kaXRpb25hbGx5RXhwb3NlZFRv
V29ya2VyRnVuY3Rpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4
cG9zZWRUb1dvcmtlckZ1bmN0aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImNvbmRp
dGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlvbiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24p
LCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidG9TdHJpbmciLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVG9TdHJpbmcpLCAoaW50cHRyX3QpICgwKSB9IH0sCi0gICAgeyAidG9KU09OIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkKICAgICB7ICJDT05ESVRJT05BTF9DT05TVCIsIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkNvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5z
aWMsIHsgKGxvbmcgbG9uZykoMCkgfSB9LAogI2Vsc2UKQEAgLTk0MDEsNDEgKzkzOTksNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJp
bmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9
CiAKLUpTQzo6SlNPYmplY3QqIEpTVGVzdE9iajo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8g
Y3JlYXRlVmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlIiks
IGNyZWF0ZVZhbHVlKTsKLQotICAgIGF1dG8gcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rl
c3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVhZE9ubHlTdHJpbmdB
dHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKTsKLQotICAgIGF1dG8gZW51bUF0dHJWYWx1
ZSA9IGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1BdHRyIiksIGVudW1B
dHRyVmFsdWUpOwotCi0gICAgYXV0byBsb25nQXR0clZhbHVlID0ganNUZXN0T2JqTG9uZ0F0dHJH
ZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3Qs
ICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
Ci17Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJ0b0pTT04iKTsKLX0KLQogSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNp
b24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlh
bGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCYpOwogICAgIG11dGFibGUgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3du
PiBtX2NhY2hlZEF0dHJpYnV0ZTE7CiAgICAgbXV0YWJsZSBKU0M6OldyaXRlQmFycmllcjxKU0M6
OlVua25vd24+IG1fY2FjaGVkQXR0cmlidXRlMjsKICNpZiBFTkFCTEUoQ09ORElUSU9OKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY2NjIwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNjQgKzYwOSwyNSBAQCBib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNl
U2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwogfQog
Ci1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCitzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHko
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNl
cmlhbGl6YXRpb24qIGNhc3RlZFRoaXMpCiB7Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGZp
cnN0U3RyaW5nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdB
dHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RT
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1
ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKLQot
ICAgIGF1dG8gZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RT
ZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCBmb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIGZpZnRoTG9uZ0F0dHJpYnV0
ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwot
Ci0gICAgYXV0byBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRp
b25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0
cmlidXRlIiksIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gc2V2ZW50
aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9u
U2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
LSAgICBhdXRvKiBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVk
VmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUobGV4aWNh
bEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKj4o
c2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUpLCBnbG9iYWxPYmplY3Qp
OwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIGVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVj
dGx5QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBhdXRvKiBlaWdodGhJbmRpcmVj
dGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgZWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIG5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFs
aXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7Ci0gICAgaWYgKCFuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVWYWx1ZS5pc051bGwoKSkgewotICAgICAgICBhdXRvKiBuaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKj4obmludGhPcHRpb25hbERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9u
YWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlT
ZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwg
dGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZWxldmVudGhTZXF1
ZW5jZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VB
dHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBl
bGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0KQotewotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0
UHJvdG90eXBlKCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRl
KCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJz
aXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50
ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
ZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxp
emFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlT
ZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pT
PElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNl
PElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJ
bnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2Vs
ZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RT
ZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbi5oCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCShyZXZpc2lv
biAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYs
MjIgQEAKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVy
ZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCiAjaW5jbHVkZSAiSlNE
T01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJK
U0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVk
ZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KQEAgLTIxNywy
MiArMjI2LDI2IEBAIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcmkKICAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6c2V0PHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImluaGVyaXRMb25n
QXR0cmlidXRlIik7CiB9CiAKLUpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQq
IGNhc3RlZFRoaXMpCiB7Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byogcmVzdWx0ID0gSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7Ci0KLSAgICBhdXRvIGluaGVyaXRMb25n
QXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0
cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIGluaGVyaXRM
b25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIHRoaXNPYmplY3QpCi17Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFs
aXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkub2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5n
QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERv
dWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExv
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0F0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJz
ZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRv
SlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFs
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0
ZSIpLCB0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJv
emVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElE
TFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1
ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC50d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRy
aWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6
ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDIyIEBACiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9N
Q29udmVydEJvb2xlYW4uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnROdWxsYWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydE51
bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5o
IgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRp
b24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheS5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+CkBAIC0yNTEsMjIgKzI2MCwyOCBA
QCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGCiAgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6c2V0PHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpbmFsTG9uZ0F0
dHJpYnV0ZUJhciIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwqIGNhc3RlZFRoaXMpCiB7Ci0gICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQ6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QpOwotCi0gICAgYXV0byBmaW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZmluYWxMb25nQXR0cmlidXRlQmFyIiksIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlKTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9k
eShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZSgq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9i
amVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiksIHRvSlM8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2Vjb25kTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHRvSlM8SURMRG91YmxlPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50
aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCB0b0pTPElE
TEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlIiksIHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwg
dG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFy
cmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1
ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8
SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
dHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRl
IiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
aW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIiksIHRvSlM8SURM
TG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0
cmlidXRlRm9vKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCB0b0pTPElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5
cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsLmgJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9N
TWF0cml4UmVhZE9ubHkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01N
YXRyaXhSZWFkT25seS5pZGwJKHJldmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9ET01NYXRyaXhSZWFkT25seS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTk3LDUgKzk3LDUgQEAK
ICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIEZsb2F0NjRBcnJheSB0b0Zsb2F0NjRBcnJheSgpOwog
CiAgICAgW0V4cG9zZWQ9V2luZG93LCBNYXlUaHJvd0V4Y2VwdGlvbl0gc3RyaW5naWZpZXI7Ci0g
ICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pT
T04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVBvaW50UmVhZE9ubHkuaWRsCShy
ZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDUgKzQ1LDUgQEAKIAogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gRE9NUG9pbnQgbWF0cml4VHJhbnNmb3JtKG9wdGlvbmFsIERPTU1hdHJpeEluaXQgbWF0
cml4KTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBv
YmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01RdWFkLmlkbAkocmV2aXNpb24g
MjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw1ICs0MSw1IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVBvaW50IHA0OyAv
LyBGSVhNRTogU2hvdWxkIGJlIFtTYW1lT2JqZWN0XS4KICAgICBbTmV3T2JqZWN0XSBET01SZWN0
IGdldEJvdW5kcygpOwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
UmVjdFJlYWRPbmx5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVj
dFJlYWRPbmx5LmlkbAkocmV2aXNpb24gMjY2NjIwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RP
TVJlY3RSZWFkT25seS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSBib3R0b207CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVucmVzdHJpY3RlZCBkb3VibGUgbGVmdDsKIAotICAgIHNlcmlhbGl6ZXIg
PSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZUVudHJ5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCShyZXZpc2lvbiAyNjY2
MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw1ICs0MSw1IEBAIHR5cGVkZWYgZG91YmxlIERPTUhpZ2hSZXNUaW1lU3Rh
bXA7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBlbnRyeVR5cGU7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgc3RhcnRUaW1lOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0YW1wIGR1cmF0aW9uOwotICAgIHNlcmlhbGl6
ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1p
bmcuaWRsCShyZXZpc2lvbiAyNjY2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlUmVzb3VyY2VUaW1pbmcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01Myw1ICs1Myw1IEBAIHR5
cGVkZWYgZG91YmxlIERPTUhpZ2hSZXNUaW1lU3RhbXA7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTUhpZ2hSZXNUaW1lU3RhbXAgcmVzcG9uc2VFbmQ7CiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9
U2VydmVyVGltaW5nXSByZWFkb25seSBhdHRyaWJ1dGUgRnJvemVuQXJyYXk8UGVyZm9ybWFuY2VT
ZXJ2ZXJUaW1pbmc+IHNlcnZlclRpbWluZzsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGluaGVyaXQs
IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRpbWluZy5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRpbWluZy5pZGwJKHJl
dmlzaW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJU
aW1pbmcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw1ICszNiw1IEBAIHR5cGVkZWYgZG91Ymxl
IERPTUhpZ2hSZXNUaW1lU3RhbXA7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBu
YW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0YW1wIGR1cmF0aW9u
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGVzY3JpcHRpb247Ci0gICAgc2Vy
aWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGwJKHJldmlz
aW9uIDI2NjYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw1ICs1NCw1IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkRXZlbnRTdGFydDsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRFdmVudEVuZDsKIAotICAgIHNlcmlhbGl6ZXIgPSB7
IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408016</attachid>
            <date>2020-09-04 13:28:00 -0700</date>
            <delta_ts>2020-09-04 13:52:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200904132759.patch</filename>
            <type>text/plain</type>
            <size>120739</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDIwLTA5LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSAnc2VyaWFsaXph
YmxlJyBrZXl3b3JkLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGZyb20gV2ViSURMLAorICAgICAg
ICB3aXRoIGl0cyByZXBsYWNlbWVudCwgJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknLgorICAg
ICAgICAKKyAgICAgICAgVGhlIG5ldyB2ZXJzaW9uIGlzIHByZXR0eSBzaW1pbGFyLCBidXQgaGFz
IG11Y2ggbGVzcyByb29tIGZvciBjdXN0b21pemF0aW9uCisgICAgICAgIGluIHRoYXQgeW91IGNh
biBubyBsb25nZXIgc3BlY2lmeSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
SlNPTgorICAgICAgICByZXN1bHQuIFJhdGhlciwgYWxsIGF0dHJpYnV0ZXMgdGhhdCBxdWFsaXR5
IGFzIGhhdmUgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZUluZm8uaWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0ljZUNhbmRpZGF0ZTo6dG9KU09OIGNvbnN0KToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGw6CisgICAgICAgICog
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGw6CisgICAgICAgICogTW9k
dWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2UuaWRsOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEludGVyZmFjZUhhc1JlZ3Vs
YXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNKU09OVHlwZSk6CisgICAgICAgIChJbmhl
cml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChJc1NlcmlhbGl6YWJsZVR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFibGVBdHRyaWJ1dGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
UHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAg
ICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAg
ICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoR2Vu
ZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZXRSdW50
aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVy
RGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLmpzb246CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06Cisg
ICAgICAgIChjbG9uZU9wZXJhdGlvbik6CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VN
ZW1iZXIpOgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFs
aXplcik6IERlbGV0ZWQuCisgICAgICAgIChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAo
cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1l
bnRhbERlcGVuZGVuY2llcy5kZXA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuaWRsOgorICAgICAgICAqIGNzcy9ET01NYXRyaXhSZWFkT25seS5pZGw6Cisg
ICAgICAgICogZG9tL0RPTVBvaW50UmVhZE9ubHkuaWRsOgorICAgICAgICAqIGRvbS9ET01RdWFk
LmlkbDoKKyAgICAgICAgKiBkb20vRE9NUmVjdFJlYWRPbmx5LmlkbDoKKyAgICAgICAgKiBwYWdl
L1BlcmZvcm1hbmNlRW50cnkuaWRsOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VSZXNvdXJj
ZVRpbWluZy5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVNlcnZlclRpbWluZy5pZGw6
CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGw6CisKIDIwMjAtMDktMDQgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIGludGVycG9s
YXRpb24gYWxnb3JpdGhtIGluIE9zY2lsbGF0b3JOb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRsCShyZXZp
c2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RGV2aWNlSW5mby5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgTWVkaWFEZXZpY2VLaW5kIGtpbmQ7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyBsYWJlbDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGdy
b3VwSWQ7Ci0gICAgc2VyaWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0XSBvYmpl
Y3QgdG9KU09OKCk7CiB9OwogCiAvLyBGSVhNRSAxNjk4NzE6IG1pc3NpbmcgSW5wdXREZXZpY2VJ
bmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuY3BwCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDYgKzYyLDE1IEBAIFJlZjxSVENJY2VDYW5kaWRhdGU+IFJUQ0ljZUNhbmRpZGF0ZTo6
Y3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlkYXRlLCBz
ZHBNaWQsIHNkcE1MaW5lSW5kZXgpKTsKIH0KIAorUlRDSWNlQ2FuZGlkYXRlSW5pdCBSVENJY2VD
YW5kaWRhdGU6OnRvSlNPTigpIGNvbnN0Cit7CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCByZXN1
bHQ7CisgICAgcmVzdWx0LmNhbmRpZGF0ZSA9IG1fY2FuZGlkYXRlOworICAgIHJlc3VsdC5zZHBN
aWQgPSBtX3NkcE1pZDsKKyAgICByZXN1bHQuc2RwTUxpbmVJbmRleCA9IG1fc2RwTUxpbmVJbmRl
eDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAkocmV2aXNpb24gMjY2NjM0KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENh
bmRpZGF0ZShTdHJpbmcmJiBjYW5kaWRhdGUpIHsgbV9jYW5kaWRhdGUgPSBXVEZNb3ZlKGNhbmRp
ZGF0ZSk7IH0KIAorICAgIFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9KU09OKCkgY29uc3Q7CisKIHBy
aXZhdGU6CiAgICAgUlRDSWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlLCBjb25z
dCBTdHJpbmcmIHNkcE1pZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHNkcE1MaW5lSW5kZXgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDYgKzUzLDUgQEAKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgcmVsYXRlZFBv
cnQKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgdWZyYWcKIAotICAgIC8vIEZJWE1FIDE2
OTY2MjogYWRkIHVmcmFnIHRvIHRoZSBsaXN0Ci0gICAgc2VyaWFsaXplciA9IHtjYW5kaWRhdGUs
IHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0b0pTT04o
KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZpc2lvbiAyNjY2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlv
bi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgUlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
c2RwOwogCi0gICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAgIFtEZWZhdWx0XSBvYmpl
Y3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVx
dWVzdC9QYXltZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJldmlzaW9uIDI2NjYzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEFkZHJlc3Mu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgSW1wbGVtZW50YXRpb25M
YWNrc1ZUYWJsZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFjZSBQYXltZW50QWRkcmVz
cyB7Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvdW50cnk7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmluZz4gYWRkcmVzc0xpbmU7
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVz
cG9uc2UuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bh
eW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTZWN1cmVDb250ZXh0LAog
XSBpbnRlcmZhY2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQgewotICAgIHNlcmlhbGl6
ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAyNjY2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHdvcmtp
bmcgY29weSkKQEAgLTExMDEsNTAgKzExMDEsNjQgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICBy
ZXR1cm4gMDsKIH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitzdWIgSW50ZXJmYWNlSGFz
UmVndWxhclRvSlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlKSA9
IEBfOwogCi0gICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMDsKLSAgICAkb2JqZWN0
LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAgIG15ICRwYXJlbnRJbnRl
cmZhY2UgPSBzaGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMSBpZiAk
cGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7Ci0KLSAgICByZXR1cm4g
JGFueVBhcmVudElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHsk
aW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRvcGVyYXRpb24tPmlzU3Rh
dGljICYmICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIpIHsKKyAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1zdWIgSXNTZXJpYWxp
emFibGVUeXBlCisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1qc29uLXR5
cGVzCitzdWIgSXNKU09OVHlwZQogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkdHlw
ZSkgPSBAXzsKIAotICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLXNl
cmlhbGl6YWJsZS10eXBlCi0KKyAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0
IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJu
IDEgaWYgJG9iamVjdC0+SXNOdW1lcmljVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9i
amVjdC0+SXNFbnVtVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNTdHJp
bmdUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMCBpZiAkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5k
bGVyIjsKLQotICAgIGlmICgkdHlwZS0+aXNVbmlvbiB8fCAkb2JqZWN0LT5Jc0RpY3Rpb25hcnlU
eXBlKCR0eXBlKSkgewotICAgICAgICBkaWUgIlNlcmlhbGl6ZXJzIGZvciB1bmlvbiBhbmQgZGlj
dGlvbmFyeSB0eXBlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iOwotICAgIH0KKyAg
ICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmluZ09yRW51bVR5cGUoJHR5cGUpOwogCiAgICAg
aWYgKCRvYmplY3QtPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAg
ICAgbXkgJHN1YnR5cGUgPSBAeyR0eXBlLT5zdWJ0eXBlc31bMF07Ci0KLSAgICAgICAgIyBGSVhN
RTogd2Via2l0Lm9yZy9iLzE5NDQzOSBbV2ViSURMXSBTdXBwb3J0IHNlcmlhbGl6aW5nIHNlcXVl
bmNlcyBhbmQgRnJvemVuQXJyYXlzIG9mIGludGVyZmFjZXMKLSAgICAgICAgcmV0dXJuIDAgaWYg
JG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCRzdWJ0eXBlKTsKLQotICAgICAgICByZXR1cm4gJG9i
amVjdC0+SXNTZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRzdWJ0eXBlKTsKKyAgICAgICAg
cmV0dXJuICRvYmplY3QtPklzSlNPTlR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgIH0K
KyAgICBpZiAoJG9iamVjdC0+SXNSZWNvcmRUeXBlKCR0eXBlKSkgeworICAgICAgICBteSAkdmFs
dWVTdWJ0eXBlID0gQHskdHlwZS0+c3VidHlwZXN9WzBdOworICAgICAgICByZXR1cm4gJG9iamVj
dC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkdmFsdWVTdWJ0eXBlKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gMCBpZiAhJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBlKTsKKyAgICBpZiAoJG9i
amVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBlKSkgeworICAgICAgICAjIFNwZWNpYWwgY2FzZSBF
dmVudEhhbmRsZXIsIHNpbmNlIHRoZXJlIGlzIG5vIHJlYWwgSURMIGZvciBpdC4KKyAgICAgICAg
cmV0dXJuIDAgaWYgJHR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciI7CisKKyAgICAgICAgbXkg
JGludGVyZmFjZSA9ICRvYmplY3QtPkdldEludGVyZmFjZUZvclR5cGUoJGludGVyZmFjZSwgJHR5
cGUpOworICAgICAgICBpZiAoJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJh
dGlvbigkaW50ZXJmYWNlKSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KIAot
ICAgIG15ICRpbnRlcmZhY2VGb3JUeXBlID0gJG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgk
aW50ZXJmYWNlLCAkdHlwZSk7Ci0gICAgaWYgKCRpbnRlcmZhY2VGb3JUeXBlKSB7Ci0gICAgICAg
IHJldHVybiAxIGlmICRpbnRlcmZhY2VGb3JUeXBlLT5zZXJpYWxpemFibGU7Ci0gICAgICAgIHJl
dHVybiAkb2JqZWN0LT5Jbmhlcml0c1NlcmlhbGl6YWJsZSgkaW50ZXJmYWNlRm9yVHlwZSk7Cisg
ICAgICAgIG15ICRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uID0gMDsKKyAgICAg
ICAgJG9iamVjdC0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBzdWIgeworICAgICAgICAgICAg
bXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OworICAgICAgICAgICAgJGFueVBhcmVudEhhc1Jl
Z3VsYXJUb0pTT05PcGVyYXRpb24gPSAxIGlmICRvYmplY3QtPkludGVyZmFjZUhhc1JlZ3VsYXJU
b0pTT05PcGVyYXRpb24oJHBhcmVudEludGVyZmFjZSk7CisgICAgICAgIH0sIDApOworICAgICAg
ICAKKyAgICAgICAgaWYgKCRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uKSB7Cisg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoJHR5
cGUtPmlzVW5pb24pIHsKKyAgICAgICAgIyBGSVhNRTogVW5pb24gdHlwZXMgc2hvdWxkIGJlIHN1
cHBvcnRlZCBpZiBhbGwgdGhlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAg
ZGllICJEZWZhdWx0IHRvSlNPTiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgdW5pb24g
dHlwZXMuXG4iOworICAgIH0KKyAgICBpZiAoJG9iamVjdC0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlw
ZSkpIHsKKyAgICAgICAgIyBGSVhNRTogRGljdGlvbmFyeSB0eXBlcyBzaG91bGQgYmUgc3VwcG9y
dGVkIGlmIGFsbCBtZW1iZXJzIGRlY2xhcmVkIG9uIHRoZSBkaWN0aW9uYXJ5IGFuZCBhbGwgaXRz
IGluaGVyaXRlZCBkaWN0aW9uYXJpZXMgYXJlIEpTT04gdHlwZXMuCisgICAgICAgIGRpZSAiRGVm
YXVsdCB0b0pTT04gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGRpY3Rpb25hcnkgdHlw
ZXMuXG4iOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTE1NiwxNyArMTE3MCw2IEBAIHN1
YiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGUKICAgICByZXR1cm4gJGF0dHJp
YnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfSB8fCAkYXR0cmlidXRl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXR0ZXJ9OwogfQogCi1zdWIgSXNTZXJpYWxp
emFibGVBdHRyaWJ1dGUKLXsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGF0dHJpYnV0
ZSkgPSBAXzsKLQotICAgIGlmICgkb2JqZWN0LT5Jc1NlcXVlbmNlVHlwZSgkYXR0cmlidXRlLT50
eXBlKSAmJiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGVuZGVkQXR0cmlidXRl
KCRhdHRyaWJ1dGUpKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHNlcXVlbmNlIHR5
cGVzIHdpdGggQ2FjaGVkQXR0cmlidXRlIG9yIEN1c3RvbUdldHRlciBleHRlbmRlZCBhdHRyaWJ1
dGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQotCi0gICAgcmV0dXJu
ICRvYmplY3QtPklzU2VyaWFsaXphYmxlVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBl
KTsKLX0KLQogc3ViIEdldEludGVyZmFjZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21OYW1lCiB7CiAg
ICAgIyBGSVhNRTogSXQncyBiYWQgdG8gaGF2ZSBhIGZ1bmN0aW9uIGxpa2UgdGhpcyB0aGF0IG9w
ZW5zIGFub3RoZXIgSURMIGZpbGUgdG8gYW5zd2VyIGEgcXVlc3Rpb24uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4NjcsNyArMTg2Nyw2IEBAIHN1YiBQcm90
b3R5cGVPcGVyYXRpb25Db3VudAogICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5p
dGVyYWJsZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAgICAgJGNvdW50
ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZh
Y2UtPm1hcExpa2U7CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPnNldExpa2Ut
Pm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgJGNvdW50ICs9IHNjYWxh
ciBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+
c2VyaWFsaXphYmxlOwogCiAgICAgcmV0dXJuICRjb3VudDsKIH0KQEAgLTI3ODAsMTEgKzI3Nzks
NiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldE5hbWVkQ29uc3RydWN0b3IoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e05hbWVkQ29uc3RydWN0b3J9OwogICAgIH0KIAotICAgICMgU2VyaWFsaXplciBmdW5jdGlvbi4K
LSAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgJHtjbGFzc05hbWV9JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYp
O1xuIik7Ci0gICAgfQotICAgIAogICAgIG15ICRudW1DdXN0b21PcGVyYXRpb25zID0gMDsKICAg
ICBteSAkbnVtQ3VzdG9tQXR0cmlidXRlcyA9IDA7CiAKQEAgLTMxODYsNyArMzE4MCw2IEBAIHN1
YiBHZW5lcmF0ZVByb3BlcnRpZXNIYXNoVGFibGUKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRp
bnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+
bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVy
ZmFjZS0+c2V0TGlrZTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBm
b3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYgKCRv
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQgbm90
ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsKICAg
ICAgICAgbmV4dCBpZiAoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwpAQCAtMzk5NCw3ICszOTg3LDYg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRp
bnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50
ZXJmYWNlKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+
bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVy
ZmFjZS0+c2V0TGlrZTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAg
IG15IEBhdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKICAgICBwdXNoKEBh
dHRyaWJ1dGVzLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPmF0dHJpYnV0ZXN9KSBpZiAkaW50ZXJm
YWNlLT5tYXBMaWtlOwpAQCAtNDY3Myw3ICs0NjY1LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICB9CiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24oJGludGVy
ZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7Ci0gICAgR2VuZXJhdGVTZXJpYWxpemVyRGVm
aW5pdGlvbigkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGU7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CkBAIC01NDE5LDcgKzU0
MTAsMTAgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlvbgogCiAgICAgcmV0dXJuIGlm
IElzSlNCdWlsdGluKCRpbnRlcmZhY2UsICRvcGVyYXRpb24pOwogICAgIHJldHVybiBpZiAkb3Bl
cmF0aW9uLT5pc0l0ZXJhYmxlOwotICAgIHJldHVybiBpZiAkb3BlcmF0aW9uLT5pc1NlcmlhbGl6
ZXI7CisgICAgCisgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RlZmF1
bHR9KSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0ZURlZmF1bHRPcGVyYXRpb25EZWZpbml0aW9u
KCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CisgICAg
fQogCiAgICAgbXkgJGlzQ3VzdG9tID0gSGFzQ3VzdG9tTWV0aG9kKCRvcGVyYXRpb24pOwogICAg
IG15ICRpc092ZXJsb2FkZWQgPSAkb3BlcmF0aW9uLT57b3ZlcmxvYWRzfSAmJiBAeyRvcGVyYXRp
b24tPntvdmVybG9hZHN9fSA+IDE7CkBAIC01NTM5LDEwMCArNTUzMyw5NSBAQCBzdWIgR2VuZXJh
dGVPcGVyYXRpb25EZWZpbml0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkZW5kQXBwbGVD
b3B5cmlnaHQpIGlmICRpbkFwcGxlQ29weXJpZ2h0OwogfQogCi1zdWIgR2VuZXJhdGVTZXJpYWxp
emVyRGVmaW5pdGlvbgorc3ViIEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24KIHsK
LSAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSkgPSBAXzsKLQotICAgIG15ICRpbnRlcmZh
Y2VOYW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZTsKKyAgICBteSAoJG91dHB1dEFycmF5LCAk
aW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKSA9IEBfOwogCi0gICAgbXkgJHBhcmVu
dFNlcmlhbGl6ZXJJbnRlcmZhY2UgPSAwOwotICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUtPmhhc0luaGVyaXQpIHsKLSAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkZvckFsbFBhcmVudHMo
JGludGVyZmFjZSwgc3ViIHsKLSAgICAgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSBzaGlm
dDsKLSAgICAgICAgICAgIGlmICgkcGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGUgJiYgISRw
YXJlbnRTZXJpYWxpemVySW50ZXJmYWNlKSB7Ci0gICAgICAgICAgICAgICAgJHBhcmVudFNlcmlh
bGl6ZXJJbnRlcmZhY2UgPSAkcGFyZW50SW50ZXJmYWNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9LCAwKTsKLSAgICAgICAgZGllICJGYWlsZWQgdG8gZmluZCBwYXJlbnQgaW50ZXJmYWNlIHdp
dGggXCJzZXJpYWxpemVyXCIgZm9yIFwiaW5oZXJpdFwiIHNlcmlhbGl6ZXIgaW4gJGludGVyZmFj
ZU5hbWVcbiIgaWYgISRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlOworICAgIGlmICgkb3BlcmF0
aW9uLT5uYW1lIGVxICJ0b0pTT04iICYmICRvcGVyYXRpb24tPnR5cGUtPm5hbWUgZXEgIm9iamVj
dCIpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRlRGVmYXVsdFRvSlNPTk9wZXJhdGlvbkRlZmlu
aXRpb24oJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKTsK
ICAgICB9CiAKLSAgICBteSBAc2VyaWFsaXplZEF0dHJpYnV0ZXMgPSAoKTsKKyAgICBkaWUgIltE
ZWZhdWx0XSBpcyBub3Qgc3VwcG9ydCBmb3IgZm9yIHRoaXMgb3BlcmF0aW9uICgiIC4gJG9wZXJh
dGlvbi0+bmFtZSAuICIpLiBJdCBpcyBvbmx5IGN1cnJlbnRseSBkZWZpbmVkIGZvciAnb2JqZWN0
IHRvSlNPTigpOycuIgorfQogCi0gICAgZm9yZWFjaCBteSAkYXR0cmlidXRlTmFtZSAoQHskaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgIG15ICRmb3VuZEF0
dHJpYnV0ZSA9IDA7Ci0gICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNl
LT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGVOYW1lIGVxICRhdHRy
aWJ1dGUtPm5hbWUpIHsKLSAgICAgICAgICAgICAgICAkZm91bmRBdHRyaWJ1dGUgPSAxOwotICAg
ICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTZXJpYWxpemFibGVBdHRyaWJ1dGUo
JGludGVyZmFjZSwgJGF0dHJpYnV0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAc2Vy
aWFsaXplZEF0dHJpYnV0ZXMsICRhdHRyaWJ1dGUpOyAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgbGFzdDsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBkaWUgIkV4cGxpY2l0IFwic2VyaWFsaXplclwiIGF0dHJpYnV0ZSBc
IiRhdHRyaWJ1dGVOYW1lXCIgaXMgbm90IHNlcmlhbGl6YWJsZVxuIiBpZiAhJGludGVyZmFjZS0+
c2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGU7Ci0gICAgICAgICAgICAgICAgbGFzdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIFwic2VyaWFs
aXplclwiIGF0dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1lXCIgaW4gJGludGVyZmFjZU5hbWVcbiIg
aWYgISRmb3VuZEF0dHJpYnV0ZTsKLSAgICB9CitzdWIgR2VuZXJhdGVEZWZhdWx0VG9KU09OT3Bl
cmF0aW9uRGVmaW5pdGlvbgoreworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkc2VyaWFsaXplckZ1bmN0aW9u
TmFtZSA9ICJ0b0pTT04iOwotICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lID0g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rp
b24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUp
OworICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtZGVmYXVsdC10b2pz
b24KIAotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3Ry
dWN0b3IuaD4iKTsKKyAgICBteSBAaW5oZXJpdGVuY2VTdGFjayA9ICgpOworICAgIHB1c2goQGlu
aGVyaXRlbmNlU3RhY2ssICRpbnRlcmZhY2UpOworICAgICRjb2RlR2VuZXJhdG9yLT5Gb3JBbGxQ
YXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7CisgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSBz
aGlmdDsKKyAgICAgICAgcHVzaChAaW5oZXJpdGVuY2VTdGFjaywgJHBhcmVudEludGVyZmFjZSk7
CisgICAgfSwgMCk7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNPYmplY3QqIEpT
JHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7XG4iKTsKKyAgICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RnVuY3Rpb25OYW1lKCRpbnRl
cmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOworCisgICAgcHVzaChAJG91dHB1dEFycmF5
LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1Cb2R5KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCAke2NsYXNzTmFtZX0q
IGNhc3RlZFRoaXMpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKIAotICAg
IGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0luaGVyaXQpIHsKLSAgICAgICAgbXkg
JHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lID0gJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZh
Y2UtPnR5cGUtPm5hbWU7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJl
c3VsdCA9IEpTJHtwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmpl
Y3RQcm90b3R5cGUoKSk7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIp
OworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0
b3IuaD4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpO1xuIik7CiAKLSAgICBmb3JlYWNoIG15ICRhdHRy
aWJ1dGUgKEBzZXJpYWxpemVkQXR0cmlidXRlcykgewotICAgICAgICAjIEZJWE1FOiBBdHRyaWJ1
dGVzIHRoYXQgdGhyb3cgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHNlcmlhbGl6
ZXJzIHlldC4KKyAgICAgd2hpbGUgKEBpbmhlcml0ZW5jZVN0YWNrKSB7CisgICAgICAgIG15ICRj
dXJyZW50SW50ZXJmYWNlID0gcG9wKEBpbmhlcml0ZW5jZVN0YWNrKTsKIAotICAgICAgICBteSAk
bmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSBH
ZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUp
OwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICR7bmFtZX1WYWx1ZSA9ICR7
Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTtc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7XG4iKTsKLQotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzSW50ZXJm
YWNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSkgewotICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUlu
dGVyZmFjZU5hbWUgPSAkYXR0cmlidXRlLT50eXBlLT5uYW1lOwotICAgICAgICAgICAgaWYgKCRh
dHRyaWJ1dGUtPnR5cGUtPmlzTnVsbGFibGUpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc051bGwoKSkge1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGF1dG8qICR7bmFtZX1TZXJpYWxp
emVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFt
ZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9IGVsc2VcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUp
O1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRl
SW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpT
JHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7
XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25h
bWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOworICAgICAgICBteSAkaGFzRGVmYXVsdFRvSlNPTk9w
ZXJhdGlvbiA9IDA7CisgICAgICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskY3VycmVudElu
dGVyZmFjZS0+b3BlcmF0aW9uc30pIHsKKyAgICAgICAgICAgIGlmICgkb3BlcmF0aW9uLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntEZWZhdWx0fSAmJiAkb3BlcmF0aW9uLT5uYW1lIGVxICJ0b0pTT04i
ICYmICRvcGVyYXRpb24tPnR5cGUtPm5hbWUgZXEgIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAg
ICAkaGFzRGVmYXVsdFRvSlNPTk9wZXJhdGlvbiA9IDE7CisgICAgICAgICAgICAgICAgbGFzdDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKICAgICAgICAgfQorICAgICAg
ICBpZiAoJGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24pIHsKKyAgICAgICAgICAgIGZvcmVhY2gg
bXkgJGF0dHJpYnV0ZSAoQHskY3VycmVudEludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAg
ICAgICAgICAgICBuZXh0IGlmICRhdHRyaWJ1dGUtPmlzU3RhdGljOworICAgICAgICAgICAgICAg
IG5leHQgaWYgISRjb2RlR2VuZXJhdG9yLT5Jc0pTT05UeXBlKCRpbnRlcmZhY2UsICRhdHRyaWJ1
dGUtPnR5cGUpOwogCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAg
ICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntDb25kaXRpb25hbH07CisgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAg
ICAgICAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+
R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWwp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIjaWYgJHtjb25kaXRp
b25hbFN0cmluZ31cbiIpOzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBt
eSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAgICAgICAgICAgICAgbXkg
KCRiYXNlRnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJF
eHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkY3VycmVudEludGVyZmFjZS0+dHlwZS0+bmFtZSwg
JGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bGx5
UXVhbGlmaWVkSW1wbGVtZW50YXRpb25DYWxsTmFtZSgkY3VycmVudEludGVyZmFjZSwgJGF0dHJp
YnV0ZSwgJGJhc2VGdW5jdGlvbk5hbWUsICJpbXBsIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAg
ICAgICAgICBteSAkdG9KU0V4cHJlc3Npb24gPSBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJz
KCRhdHRyaWJ1dGUsICRjdXJyZW50SW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2lu
KCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpIik7
CisKKyAgICAgICAgICAgICAgICBteSAkbmVlZHNSdW50aW1lQ2hlY2sgPSBOZWVkc1J1bnRpbWVD
aGVjaygkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgaWYg
KCRuZWVkc1J1bnRpbWVDaGVjaykgeworICAgICAgICAgICAgICAgICAgICBteSAkcnVudGltZUVu
YWJsZUNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxT
dHJpbmcoJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
aWYgKCR7cnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0
b0pTRXhwcmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0b0pTRXhw
cmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIjZW5kaWZcblxuIikgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH0KIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAi
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5h
bWV9Qm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwg
JHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTJHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxp
emVyTmF0aXZlRnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJRExPcGVyYXRpb248SlMk
e2ludGVyZmFjZU5hbWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Qm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtzZXJpYWxpemVyRnVuY3Rp
b25OYW1lfVwiKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFj
ZS0+dHlwZS0+bmFtZTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJ7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKUyR7aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7ZnVuY3Rpb25OYW1lfUJvZHk+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBcInRvSlNPTlwiKTtcbiIpOworICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiB9
CiAKIHN1YiBHZW5lcmF0ZUdldENhbGxEYXRhCkBAIC03NTg0LDcgKzc1NzMsNiBAQCBzdWIgR2V0
UnVudGltZUVuYWJsZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHsk
aW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUlu
dGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2Ut
Pm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2go
QG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRl
cmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJp
YWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAgICAg
Zm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAgICAgICBuZXh0IGlmICgk
b3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5v
dCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CiAg
ICAgICAgIG5leHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9ICYmICRvcGVyYXRpb24t
PntvdmVybG9hZEluZGV4fSA+IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETEF0dHJpYnV0ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24gMjY2NjM0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcg
Y29weSkKQEAgLTE2Miw2ICsxNjIsOSBAQAogICAgICAgICAgICAgInZhbHVlcyI6IFsiIiwgIlJl
YWRET00iLCAiR2V0dGVyIl0sCiAgICAgICAgICAgICAic3VwcG9ydHNDb25qdW5jdGlvbiI6IHRy
dWUKICAgICAgICAgfSwKKyAgICAgICAgIkRlZmF1bHQiOiB7CisgICAgICAgICAgICAiY29udGV4
dHNBbGxvd2VkIjogWyJvcGVyYXRpb24iXQorICAgICAgICB9LAogICAgICAgICAiRGVmYXVsdERl
ZmluZU93blByb3BlcnR5IjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50
ZXJmYWNlIl0KICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMUGFyc2VyLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvSURMUGFyc2VyLnBtCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NiBAQCBzdHJ1Y3QoIElETEludGVyZmFjZSA9PiB7CiAgICAgYXN5bmNJdGVyYWJsZSA9PiAnJCcs
ICMgVXNlZCBmb3IgYXN5Y24gaXRlcmFibGUgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMQXN5bmNJ
dGVyYWJsZScKICAgICBtYXBMaWtlID0+ICckJywgIyBVc2VkIGZvciBtYXBMaWtlIGludGVyZmFj
ZXMsIG9mIHR5cGUgJ0lETE1hcExpa2UnCiAgICAgc2V0TGlrZSA9PiAnJCcsICMgVXNlZCBmb3Ig
c2V0TGlrZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExTZXRMaWtlJwotICAgIHNlcmlhbGl6YWJs
ZSA9PiAnJCcsICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lE
TFNlcmlhbGl6YWJsZScKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKQEAg
LTkzLDcgKzkyLDYgQEAgc3RydWN0KCBJRExPcGVyYXRpb24gPT4gewogICAgIGlzQ29uc3RydWN0
b3IgPT4gJyQnLAogICAgIGlzU3RhdGljID0+ICckJywKICAgICBpc0l0ZXJhYmxlID0+ICckJywK
LSAgICBpc1NlcmlhbGl6ZXIgPT4gJyQnLAogICAgIGlzU3RyaW5naWZpZXIgPT4gJyQnLAogICAg
IGlzTWFwTGlrZSA9PiAnJCcsCiAgICAgaXNTZXRMaWtlID0+ICckJywKQEAgLTE1MywxNSArMTUx
LDYgQEAgc3RydWN0KCBJRExTZXRMaWtlID0+IHsKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4g
JyQnLAogfSk7CiAKLSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLXNlcmlh
bGl6ZXJzCi1zdHJ1Y3QoIElETFNlcmlhbGl6YWJsZSA9PiB7Ci0gICAgYXR0cmlidXRlcyA9PiAn
QCcsICMgTGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQotICAgIGhhc0F0dHJpYnV0ZSA9
PiAnJCcsICMgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH0KLSAgICBoYXNJbmhlcml0ID0+ICck
JywgIyBzZXJpYWxpemVyID0geyBpbmhlcml0IH0KLSAgICBoYXNHZXR0ZXIgPT4gJyQnLCAjIHNl
cmlhbGl6ZXIgPSB7IGdldHRlciB9Ci0gICAgb3BlcmF0aW9ucyA9PiAnQCcsICMgdG9KU09OIG9w
ZXJhdGlvbgotfSk7Ci0KICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWNv
bnN0YW50cwogc3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCkBAIC01
OTgsNyArNTg3LDYgQEAgc3ViIGNsb25lT3BlcmF0aW9uCiAgICAgJGNsb25lZE9wZXJhdGlvbi0+
aXNDb25zdHJ1Y3Rvcigkb3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKTsKICAgICAkY2xvbmVkT3Bl
cmF0aW9uLT5pc1N0YXRpYygkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CiAgICAgJGNsb25lZE9wZXJh
dGlvbi0+aXNJdGVyYWJsZSgkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlKTsKLSAgICAkY2xvbmVkT3Bl
cmF0aW9uLT5pc1NlcmlhbGl6ZXIoJG9wZXJhdGlvbi0+aXNTZXJpYWxpemVyKTsKICAgICAkY2xv
bmVkT3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKCRvcGVyYXRpb24tPmlzU3RyaW5naWZpZXIpOwog
ICAgICRjbG9uZWRPcGVyYXRpb24tPmlzTWFwTGlrZSgkb3BlcmF0aW9uLT5pc01hcExpa2UpOwog
ICAgICRjbG9uZWRPcGVyYXRpb24tPmlzU2V0TGlrZSgkb3BlcmF0aW9uLT5pc1NldExpa2UpOwpA
QCAtNjQ5LDkgKzYzNyw5IEBAIG15ICRuZXh0VHlwZV8xID0gJ14oQnl0ZVN0cmluZ3xET01TdHJp
bmcKIG15ICRuZXh0U3BlY2lhbHNfMSA9ICdeKGRlbGV0ZXJ8Z2V0dGVyfHNldHRlcikkJzsKIG15
ICRuZXh0RGVmaW5pdGlvbnNfMSA9ICdeKGNhbGxiYWNrfGRpY3Rpb25hcnl8ZW51bXxpbnRlcmZh
Y2V8bmFtZXNwYWNlfHBhcnRpYWx8dHlwZWRlZikkJzsKIG15ICRuZXh0RGljdGlvbmFyeU1lbWJl
cl8xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5
dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJlcXVpcmVkfHNlcXVlbmNlfHNob3J0
fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRJbnRl
cmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55
fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8
ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8
c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmlu
ZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEg
PSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29s
ZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGlu
aGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0
YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkk
JzsKIG15ICRuZXh0TmFtZXNwYWNlTWVtYmVyc18xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJp
bmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9j
dGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVk
fHVuc2lnbmVkKSQnOwotbXkgJG5leHRQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxC
eXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8
Y29uc3R8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0
ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmlu
Z2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5l
eHRQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xV
U1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8ZGVsZXRlcnxkb3VibGV8
ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8
c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJp
Y3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0U2luZ2xlVHlwZV8xID0gJ14oQnl0ZVN0cmluZ3xE
T01TdHJpbmd8VVNWU3RyaW5nfGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8
b2N0ZXR8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWdu
ZWQpJCc7CiBteSAkbmV4dEFyZ3VtZW50TmFtZV8xID0gJ14oYXN5bmN8YXR0cmlidXRlfGNhbGxi
YWNrfGNvbnN0fGNvbnN0cnVjdG9yfGRlbGV0ZXJ8ZGljdGlvbmFyeXxlbnVtfGdldHRlcnxpbmNs
dWRlc3xpbmhlcml0fGludGVyZmFjZXxpdGVyYWJsZXxtYXBsaWtlfG1peGlufG5hbWVzcGFjZXxw
YXJ0aWFsfHJlYWRvbmx5fHJlcXVpcmVkfHNldGxpa2V8c2V0dGVyfHN0YXRpY3xzdHJpbmdpZmll
cnx0eXBlZGVmfHVucmVzdHJpY3RlZCkkJzsKIG15ICRuZXh0Q29uc3RWYWx1ZV8xID0gJ14oZmFs
c2V8dHJ1ZSkkJzsKQEAgLTExNzgsMTIgKzExNjYsNiBAQCBzdWIgcGFyc2VQYXJ0aWFsSW50ZXJm
YWNlTWVtYmVyCiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJpbmhlcml0IikgewogICAgICAg
ICByZXR1cm4gJHNlbGYtPnBhcnNlSW5oZXJpdEF0dHJpYnV0ZSgkZXh0ZW5kZWRBdHRyaWJ1dGVM
aXN0KTsKICAgICB9Ci0KLSAgICAjIEZJWE1FOiBSZW1vdmUuIFRoaXMgaXMgbm8gbG9uZ2VyIHBh
cnQgb2YgV2ViSURMLiBSZXBsYWNlIHdpdGggW1NlcmlhbGl6YWJsZV0uCi0gICAgaWYgKCRuZXh0
LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNl
U2VyaWFsaXplcigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICB9Ci0KICAgICBpZiAoJG5l
eHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgPX4gLyRuZXh0
T3BlcmF0aW9uXzEvKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRpb24oJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCk7CiAgICAgIH0KQEAgLTE2NDksMTE0ICsxNjMxLDYgQEAgc3Vi
IHBhcnNlQ29uc3RydWN0b3IKICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0
LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlhbGl6ZXIKLXsKLSAgICBt
eSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsK
LQotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFs
dWUoKSBlcSAic2VyaWFsaXplciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUo
JHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18pOwotICAgICAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICAgICAgbXkgJG5ld0RhdGFOb2RlOwotICAg
ICAgICBpZiAoJG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7Ci0gICAgICAgICAgICAkbmV3RGF0YU5v
ZGUgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
LSAgICAgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG15ICR0b0pTT05PcGVyYXRpb24gPSBJRExPcGVyYXRpb24t
Pm5ldygpOwotICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5uYW1lKCJ0b0pTT04iKTsKLQotICAg
ICAgICAkc2VsZi0+YXNzZXJ0RXh0ZW5kZWRBdHRyaWJ1dGVzVmFsaWRGb3JDb250ZXh0KCRleHRl
bmRlZEF0dHJpYnV0ZUxpc3QsICJvcGVyYXRpb24iKTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICAgICAk
dG9KU09OT3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIoMSk7Ci0gICAgICAgIHB1c2goQHskbmV3RGF0
YU5vZGUtPm9wZXJhdGlvbnN9LCAkdG9KU09OT3BlcmF0aW9uKTsKLQotICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAg
ICAgIHJldHVybiAkbmV3RGF0YU5vZGU7Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVj
dGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KLQotc3ViIHBhcnNlU2VyaWFs
aXplclJlc3QKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwot
ICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRv
a2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5FX18pOwotCi0gICAgICAgIHJl
dHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigpOwotCi0gICAgfQotICAgIGlm
ICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSBlcSAi
KCIpIHsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7Ci0gICAgfQotfQotCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVy
bgotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0
VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsiKSB7Ci0gICAgICAgICRzZWxm
LT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAieyIsIF9fTElORV9fKTsKLSAg
ICAgICAgbXkgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAg
JHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoJG5ld0RhdGFOb2RlKTsKLSAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ9IiwgX19MSU5F
X18pOwotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAgIH0KLSAgICBpZiAoJG5leHQt
PnZhbHVlKCkgZXEgIlsiKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXphdGlvbiBvZiBsaXN0cyBw
YXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7Ci0gICAgfQotICAgIGlmICgkbmV4
dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICBteSBAYXR0cmlidXRlcyA9
ICgpOwotICAgICAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKLSAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgIHB1
c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7Ci0KLSAgICAgICAgbXkgJG5ld0RhdGFO
b2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAgJG5ld0RhdGFOb2RlLT5hdHRy
aWJ1dGVzKFxAYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAg
ICB9Ci0gICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19M
SU5FX18pOwotfQotCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcwotewotICAgIG15
ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJHNlcmlhbGl6YWJsZSA9IHNoaWZ0OwotCi0gICAgbXkg
QGF0dHJpYnV0ZXMgPSAoKTsKLSAgICBteSBAaWRlbnRpZmllcnMgPSAkc2VsZi0+cGFyc2VJZGVu
dGlmaWVyTGlzdCgpOwotCi0gICAgZm9yIG15ICRpZGVudGlmaWVyIChAaWRlbnRpZmllcnMpIHsK
LSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJnZXR0ZXIiKSB7Ci0gICAgICAgICAgICAkc2Vy
aWFsaXphYmxlLT5oYXNHZXR0ZXIoMSk7Ci0gICAgICAgICAgICBkaWUgIlNlcmlhbGl6ZXIgZ2V0
dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiaW5oZXJpdCIpIHsKLSAgICAgICAgICAgICRzZXJp
YWxpemFibGUtPmhhc0luaGVyaXQoMSk7Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJhdHRyaWJ1dGUiKSB7Ci0gICAgICAgICAgICAk
c2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGUoMSk7Ci0gICAgICAgICAgICAjIEF0dHJpYnV0ZXMg
d2lsbCBiZSBmaWxsZWQgaW4gdmlhIGFwcGx5TWVtYmVyTGlzdCgpCi0gICAgICAgICAgICBuZXh0
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVzaChAYXR0cmlidXRlcywgJGlkZW50aWZpZXIpOwot
ICAgIH0KLQotICAgICRzZXJpYWxpemFibGUtPmF0dHJpYnV0ZXMoXEBhdHRyaWJ1dGVzKTsKLX0K
LQogc3ViIHBhcnNlSWRlbnRpZmllckxpc3QKIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwpAQCAt
MzI1MywyMyArMzEyNyw2IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJlZigkaXRlbSkgZXEgIklE
TFNlcmlhbGl6YWJsZSIpIHsKLSAgICAgICAgICAgICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSgk
aXRlbSk7Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgewotICAgICAgICBteSAkbnVtU2VyaWFsaXplckF0dHJp
YnV0ZXMgPSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc307Ci0gICAgICAg
IGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSkgewotICAgICAgICAg
ICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRl
c30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2lmICgk
bnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgewotICAgICAgICAgICAgZm9yZWFjaCBteSAk
YXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAg
cHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUt
Pm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1
Y3RvcnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHJldmlzaW9uIDI2NjYzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2Jh
bENvbnN0cnVjdG9ycy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBAIHBhcnRpYWwg
aW50ZXJmYWNlIFRlc3RHbG9iYWxPYmplY3QgewogICAgIFtDb25kaXRpb25hbD1URVNUX0NPTkRJ
VElPTkFMXSBhdHRyaWJ1dGUgVGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3IgVGVzdENh
bGxiYWNrSW50ZXJmYWNlOwogICAgIGF0dHJpYnV0ZSBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3RvciBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I7CiAg
ICAgYXR0cmlidXRlIFRlc3RET01KSVRDb25zdHJ1Y3RvciBUZXN0RE9NSklUOworICAgIGF0dHJp
YnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yIFRlc3REZWZhdWx0VG9KU09OOwogICAg
IGF0dHJpYnV0ZSBUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvciBUZXN0RG9tYWluU2VjdXJp
dHk7CiAgICAgYXR0cmlidXRlIFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IgVGVzdEVu
YWJsZWRCeVNldHRpbmc7CiAgICAgW0VuYWJsZWRGb3JDb250ZXh0LCBTZWN1cmVDb250ZXh0XSBh
dHRyaWJ1dGUgVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IgVGVzdEVuYWJsZWRGb3JD
b250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBs
ZW1lbnRhbERlcGVuZGVuY2llcy5kZXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAJKHJldmlzaW9u
IDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVt
ZW50YWxEZXBlbmRlbmNpZXMuZGVwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw5IEBAIFdl
YkRPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci4KIEpTVGVzdERPTUpJVC5oOiAK
IERPTVRlc3RET01KSVQuaDogCiBXZWJET01UZXN0RE9NSklULmg6IAorSlNUZXN0RGVmYXVsdFRv
SlNPTi5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OLmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pT
T04uaDogCiBKU1Rlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIERPTVRlc3REZXJpdmVkRGljdGlv
bmFyeS5oOiAKIFdlYkRPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0
VG9KU09OLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitlbnVtIFRlc3REZWZhdWx0VG9KU09ORW51bSB7CisgICAgIkVu
dW1WYWx1ZTEiLAorICAgICJFbnVtVmFsdWUyIgorfTsKKworaW50ZXJmYWNlIFRlc3REZWZhdWx0
VG9KU09OIHsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0cmluZ0F0dHJpYnV0ZTsKKyAgICBb
RW5hYmxlZEF0UnVudGltZT1UZXN0UnVudGltZUVuYWJsZWRdcmVhZG9ubHkgYXR0cmlidXRlIGxv
bmcgbG9uZ0F0dHJpYnV0ZTsKKyAgICBbRW5hYmxlZEJ5U2V0dGluZz1UZXN0U2V0dGluZ10gcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRl
OworICAgIFtDb25kaXRpb25hbD1URVNUX0NPTkRJVElPTkFMXSByZWFkb25seSBhdHRyaWJ1dGUg
VGVzdERlZmF1bHRUb0pTT05FbnVtIGVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlOworICAg
IGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgZXZlbnRIYW5kbGVyQXR0cmlidXRlOworICAgIAorICAg
IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCShyZXZpc2lvbiAyNjY2MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw1ICszNSw1IEBACiAgICAgW1NlY3VyZUNvbnRleHRdIGJvb2xl
YW4gZ2V0U2VjcmV0Qm9vbGVhbigpOwogICAgIFtDb25kaXRpb25hbD1URVNUX0ZFQVRVUkUsIFNl
Y3VyZUNvbnRleHQsIEVuYWJsZWRBdFJ1bnRpbWU9VGVzdEZlYXR1cmVdIGJvb2xlYW4gdGVzdEZl
YXR1cmVHZXRTZWNyZXRCb29sZWFuKCk7CiAKLSAgICBzZXJpYWxpemVyOworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC00MzUsOCArNDM1LDYgQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRh
LWxvdwogCiAgICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0cmluZyBzdHJpbmdpZmllckF0
dHJpYnV0ZTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7Y3JlYXRlLCByZWFkT25seVN0cmluZ0F0dHIs
IGVudW1BdHRyLCBsb25nQXR0cn07Ci0KICAgICB1bmRlZmluZWQgYnVmZmVyU291cmNlUGFyYW1l
dGVyKEJ1ZmZlclNvdXJjZSBkYXRhKTsKIAogICAgIFtMZWdhY3lDYWxsZXJdIHVuZGVmaW5lZCBs
ZWdhY3lDYWxsZXJOYW1lZChsb25nIHBhcmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAko
cmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNSArNDEsNSBAQCBp
bnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb24gewogICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxET01T
dHJpbmc+IGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGU7CiAgICAgYXR0cmlidXRlIHNlcXVlbmNl
PFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VB
dHRyaWJ1dGU7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVs
dF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNSArMjYsNSBAQAogaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA6IFRlc3RT
ZXJpYWxpemF0aW9uIHsKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGluaGVy
aXRMb25nQXR0cmlidXRlOwogCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwgYXR0cmlidXRl
IH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDUgKzI3LDUgQEAgaW50ZXJmYWNlIFRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIAogICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAg
ICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlRm9vOwogICAgIGF0dHJpYnV0ZSBsb25nICAgICAg
ICAgICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlQmFyOwogCi0gICAgc2VyaWFsaXplciA9IHsg
aW5oZXJpdCwgZmluYWxMb25nQXR0cmlidXRlQmFyIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0
b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4MyBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0
RGVmYXVsdFRvSlNPTi5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRTdHJpbmdzLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNp
bmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCitTdHJpbmcgY29udmVy
dEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdERlZmF1bHRUb0pTT046OkVudW0gZW51bWVyYXRpb25W
YWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB2YWx1ZXNb
XSA9IHsKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkVudW1WYWx1ZTEiKSwKKyAg
ICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkVudW1WYWx1ZTIiKSwKKyAgICB9OworICAg
IHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0RGVmYXVsdFRvSlNPTjo6RW51
bTo6RW51bVZhbHVlMSkgPT0gMCwgIlRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUx
IGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxz
aXplX3Q+KFRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUyKSA9PSAxLCAiVGVzdERl
ZmF1bHRUb0pTT046OkVudW06OkVudW1WYWx1ZTIgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJB
WV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVu
dW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdERl
ZmF1bHRUb0pTT046OkVudW0gZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBjb252ZXJ0RW51bWVyYXRpb25U
b1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVz
dERlZmF1bHRUb0pTT046OkVudW0+IHBhcnNlRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT046
OkVudW0+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJFbnVtVmFsdWUxIikKKyAgICAg
ICAgcmV0dXJuIFRlc3REZWZhdWx0VG9KU09OOjpFbnVtOjpFbnVtVmFsdWUxOworICAgIGlmIChz
dHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMiIpCisgICAgICAgIHJldHVybiBUZXN0RGVmYXVsdFRv
SlNPTjo6RW51bTo6RW51bVZhbHVlMjsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0
ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdERlZmF1
bHRUb0pTT046OkVudW0+KCkKK3sKKyAgICByZXR1cm4gIlwiRW51bVZhbHVlMVwiLCBcIkVudW1W
YWx1ZTJcIiI7Cit9CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
KyNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5k
bGVyQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRs
ZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBl
IGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVs
dFRvSlNPTlByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0
RGVmYXVsdFRvSlNPTlByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSwgQmFzZSk7CisgICAgICAg
IHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUs
IEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBKU1Rlc3REZWZh
dWx0VG9KU09OQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxK
U1Rlc3REZWZhdWx0VG9KU09OPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdERlZmF1bHRU
b0pTT05Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25z
dCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2
bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0
ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdERlZmF1
bHRUb0pTT046OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdERlZmF1bHRUb0pT
T04iX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRl
c3REZWZhdWx0VG9KU09OIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpIH07CisKKy8qIEhh
c2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUg
SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNv
bnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rl
c3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJzdHJpbmdBdHRyaWJ1dGUi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNj
ZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdERlZmF1bHRUb0pTT05TdHJpbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09OU3Ry
aW5nQXR0cmlidXRlKSB9IH0sCisgICAgeyAibG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0
cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwK
KyAgICB7ICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRl
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUp
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigw
KSB9IH0sCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisgICAgeyAiZW5hYmxlZEJ5Q29u
ZGl0aW9uYWxBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nv
ciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAorI2Vsc2UK
KyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlmCisgICAgeyAiZXZl
bnRIYW5kbGVyQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0
cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRl
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZSkgfSB9LAorICAgIHsg
InRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpG
dW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVG
dW5jdGlvbj4oanNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pT
T05Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9K
U09OUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3REZWZhdWx0VG9KU09OOjppbmZvKCks
IEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIGJv
b2wgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IGZhbHNlOworICAgIGlmICghUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0UnVudGltZUVuYWJsZWRFbmFi
bGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Cisg
ICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJsb25nQXR0cmlidXRlIiksIHN0cmxlbigibG9u
Z0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3Bl
KHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAg
ICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyAg
ICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNl
dHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9
IHRydWU7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQnlTZXR0aW5nc0F0
dHJpYnV0ZSIpLCBzdHJsZW4oImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIikpOworICAgICAg
ICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBz
bG90OworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0
KCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorICAgIGlmIChoYXNEaXNhYmxlZFJ1bnRp
bWVQcm9wZXJ0aWVzICYmIHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgZmxh
dHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRf
VFJBTlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTjo6
c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT04pIH07CisKK0pT
VGVzdERlZmF1bHRUb0pTT046OkpTVGVzdERlZmF1bHRUb0pTT04oU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNP
Tj4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3REZWZh
dWx0VG9KU09OOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0RGVmYXVsdFRv
SlNPTj46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVj
dF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01P
YmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT046OmNyZWF0ZVBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNP
YmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT046OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rl
c3REZWZhdWx0VG9KU09OPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3RE
ZWZhdWx0VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdERl
ZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjpkZXN0
cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdERlZmF1bHRUb0pTT04qIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oY2VsbCk7CisgICAgdGhp
c09iamVjdC0+SlNUZXN0RGVmYXVsdFRvSlNPTjo6fkpTVGVzdERlZmF1bHRUb0pTT04oKTsKK30K
KwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTiogSURMQXR0cmlidXRlPEpT
VGVzdERlZmF1bHRUb0pTT04+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdERlZmF1bHRUb0pTT04qIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Y2Fz
dChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJh
bWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBw
cm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNP
TlN0cmluZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0F0dHJpYnV0
ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OU3RyaW5nQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0
ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgInN0cmluZ0F0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0U3RyaW5nQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rl
c3REZWZhdWx0VG9KU09OU3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0cmlidXRl
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJs
b25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETFVuc2lnbmVkU2hvcnQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pT
T04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKTsKK30KKworI2lmIEVO
QUJMRShURVNUX0NPTkRJVElPTkFMKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT046OkVudW0+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0
cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFi
bGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRU
b0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVuYWJs
ZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlIik7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYg
dGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZl
bnROYW1lcygpLmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudCwgd29ybGRGb3JET01PYmplY3QodGhp
c09iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRI
YW5kbGVyQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50
SGFuZGxlckF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFu
ZGxlckF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHNldEV2ZW50
SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlzT2Jq
ZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudCwgdmFs
dWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJB
dHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHko
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdERl
ZmF1bHRUb0pTT04qIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
Lm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc3RyaW5nQXR0cmlidXRlKCkp
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0
UnVudGltZUVuYWJsZWRFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9u
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubG9uZ0F0dHJpYnV0ZSgp
KSk7CisgICAgfQorICAgIGlmIChkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5U2V0
dGluZ3NBdHRyaWJ1dGUiKSwgdG9KUzxJRExVbnNpZ25lZFNob3J0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSgpKSk7Cisg
ICAgfQorI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRy
aWJ1dGUiKSwgdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFs
QXR0cmlidXRlKCkpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pT
T05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3REZWZhdWx0VG9KU09OPjo6Y2FsbDxqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNP
TiIpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9
IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNl
OworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTj4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT046Om5l
ZWRzRGVzdHJ1Y3Rpb24pOworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTj4pCisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBtYWtlVW5pcXVlPElzb1N1YnNw
YWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT04pOworICAgIGVsc2UKKyAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0
KCksIEpTVGVzdERlZmF1bHRUb0pTT04pOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKKyAgICBpZiAoJkpTVGVzdERlZmF1bHRUb0pTT046OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JF
X1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30K
Kwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3REZWZhdWx0VG9KU09OKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVj
dEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRoaXNPYmpl
Y3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxG
b3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKK30KKworYm9vbCBKU1Rlc3REZWZhdWx0VG9KU09OT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit7CisgICAgVU5VU0VEX1BBUkFN
KGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIFVOVVNFRF9QQVJBTShy
ZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09O
T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBj
b250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdERlZmF1bHRUb0pTT04gPSBzdGF0aWNfY2FzdDxK
U1Rlc3REZWZhdWx0VG9KU09OKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8m
IHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVu
Y2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0RGVmYXVsdFRvSlNPTi0+d3JhcHBlZCgpLCBqc1Rl
c3REZWZhdWx0VG9KU09OKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNp
ZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAi
QyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3REZWZhdWx0VG9K
U09OQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZv
aWQqIF9aVFZON1dlYkNvcmUxN1Rlc3REZWZhdWx0VG9KU09ORVtdOyB9CisjZW5kaWYKKyNlbmRp
ZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYm
IGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgY29uc3Qgdm9p
ZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBvaW50ZXIoaW1wbC5wdHIoKSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IF9faWRl
bnRpZmllcigiPz9fN1Rlc3REZWZhdWx0VG9KU09OQFdlYkNvcmVAQDZCQCIpOworI2Vsc2UKKyAg
ICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTE3VGVzdERlZmF1
bHRUb0pTT05FWzJdOworI2VuZGlmCisKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3REZWZhdWx0
VG9KU09OIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAg
ICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNl
IGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8VGVzdERl
ZmF1bHRUb0pTT04+Ojp2YWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OIGlzIG5vdCBwb2x5bW9ycGhp
YyIpOworCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUg
YSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdERlZmF1bHRUb0pTT04gaGFzIHN1
YmNsYXNzZXMuIElmIFRlc3REZWZhdWx0VG9KU09OIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBh
c3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0RGVmYXVsdFRv
SlNPTiB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGlu
ZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURM
IGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4
cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxU
ZXN0RGVmYXVsdFRvSlNPTj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT04mIGltcGwp
Cit7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKK30KKworVGVzdERlZmF1bHRUb0pTT04qIEpTVGVzdERlZmF1bHRUb0pTT046OnRvV3Jh
cHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3
cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4odm0sIHZhbHVlKSkK
KyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3REZWZhdWx0VG9KU09OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RW51bWVyYXRp
b24uaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0RGVmYXVsdFRv
SlNPTi5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT04gOiBwdWJsaWMgSlNET01XcmFwcGVy
PFRlc3REZWZhdWx0VG9KU09OPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3Jh
cHBlcjxUZXN0RGVmYXVsdFRvSlNPTj47CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT04q
IGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkKKyAgICB7CisgICAgICAg
IEpTVGVzdERlZmF1bHRUb0pTT04qIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0RGVmYXVsdFRvSlNPTj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RE
ZWZhdWx0VG9KU09OKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3Rh
dGljIFRlc3REZWZhdWx0VG9KU09OKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nl
c3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKK3Byb3RlY3RlZDoKKyAgICBK
U1Rlc3REZWZhdWx0VG9KU09OKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdERlZmF1bHRUb0pTT04+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OT3duZXIgOiBwdWJsaWMgSlND
OjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitp
bmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQm
LCBUZXN0RGVmYXVsdFRvSlNPTiopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVz
dERlZmF1bHRUb0pTT05Pd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30K
KworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdERlZmF1bHRUb0pTT04qIHdyYXBwYWJsZU9i
amVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0RGVmYXVs
dFRvSlNPTiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3REZWZhdWx0VG9KU09OKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3REZWZhdWx0VG9KU09O
PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxs
KCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRl
c3REZWZhdWx0VG9KU09OPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0RGVmYXVs
dFRvSlNPTjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdERlZmF1bHRUb0pT
T04qOworfTsKK1N0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0RGVmYXVsdFRv
SlNPTjo6RW51bSk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFRlc3REZWZhdWx0VG9KU09OOjpFbnVtKTsKKwor
dGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4gcGFyc2VFbnVtZXJh
dGlvbjxUZXN0RGVmYXVsdFRvSlNPTjo6RW51bT4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6
SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8VGVzdERlZmF1bHRUb0pTT046OkVudW0+KCk7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEds
b2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSlNUZXN0
Q2FsbFRyYWNlci5oIgogI2luY2x1ZGUgIkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiSlNUZXN0RE9NSklULmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVs
dFRvSlNPTi5oIgogI2luY2x1ZGUgIkpTVGVzdERvbWFpblNlY3VyaXR5LmgiCiAjaW5jbHVkZSAi
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oIgogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250
ZXh0LmgiCkBAIC0xOTEsNiArMTkyLDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZQogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0
b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9t
YWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
QEAgLTMyMiwxMSArMzI1LDExIEBAIHVzaW5nIEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9y
ID0gSlMKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2Jh
bE9iamVjdFRhYmxlSW5kZXhbMjY4XSA9IHsKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDAsIC0x
IH0sCisgICAgeyA0MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMCwgLTEgfSwKICAg
ICB7IDgsIDI2MyB9LAotICAgIHsgNDQsIC0xIH0sCisgICAgeyA0NSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTMzNCwxNSArMzM3
LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU0LCAtMSB9
LAorICAgIHsgNTUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAyMywgLTEgfSwKKyAgICB7IDI0LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjYsIC0xIH0s
CisgICAgeyA2NywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKQEAgLTM1NiwxNCArMzU5LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29t
cGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDM0LCAtMSB9LAorICAgIHsgMzUsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgNzEsIC0xIH0sCi0gICAgeyAxMywgMjU4IH0sCisgICAg
eyA3MiwgLTEgfSwKKyAgICB7IDE0LCAyNTggfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM3MSw4ICszNzQsOCBAQCBzdGF0aWMgY29uc3Qg
c3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzOCwgLTEgfSwKLSAgICB7IDIwLCAyNjQgfSwK
KyAgICB7IDM5LCAtMSB9LAorICAgIHsgMjEsIDI2NCB9LAogICAgIHsgMTAsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzg0LDE0ICszODcsMTQgQEAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzYsIC0xIH0sCisgICAgeyAzNywg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDIyLCAyNjUgfSwKKyAgICB7IDIzLCAyNjUgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQwNiw2NCArNDA5LDY0IEBAIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYwLCAtMSB9LAorICAgIHsgNjEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNCwg
MjU2IH0sCisgICAgeyAyNSwgMjU2IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYxLCAtMSB9
LAotICAgIHsgMTksIC0xIH0sCisgICAgeyA2MiwgLTEgfSwKKyAgICB7IDIwLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ2LCAtMSB9LAotICAgIHsgMTgs
IC0xIH0sCisgICAgeyA0NywgLTEgfSwKKyAgICB7IDE5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyAzNSwgLTEgfSwKKyAgICB7IDM2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IDQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MCwgLTEgfSwKLSAgICB7IDI1LCAtMSB9LAorICAgIHsg
MTMsIC0xIH0sCisgICAgeyA1MSwgLTEgfSwKKyAgICB7IDI2LCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAyLCAyNjcgfSwKLSAgICB7IDM3LCAtMSB9LAorICAgIHsgMzgsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAy
MSwgLTEgfSwKKyAgICB7IDIyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAg
ICB7IDU4LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgMzEsIC0xIH0sCisgICAgeyAzMiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyA0MiwgLTEgfSwKKyAgICB7IDQzLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUzLCAtMSB9LAorICAgIHsgNTQsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKLSAgICB7IDE0LCAtMSB9LAorICAgIHsgMTUsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00NzksMTIgKzQ4Miwx
MiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NywgLTEgfSwK
KyAgICB7IDY4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgMzIsIC0xIH0sCi0gICAgeyAyOSwgMjYyIH0sCisgICAgeyAzMywg
LTEgfSwKKyAgICB7IDMwLCAyNjIgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LApAQCAtNDk0LDkgKzQ5Nyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDE2LCAyNTcgfSwKKyAgICB7IDE3LCAyNTcgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgNjIsIC0xIH0sCisgICAgeyA2MywgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTUwNSwxMSArNTA4LDEx
IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDMzLCAyNjYgfSwK
KyAgICB7IDM0LCAyNjYgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTcsIC0xIH0sCisgICAg
eyAxOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjUsIC0xIH0sCisgICAgeyA2Niwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
QEAgLTUyMywxMiArNTI2LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDcwLCAtMSB9LAorICAgIHsgNzEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU2LCAt
MSB9LAorICAgIHsgNTcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgMywgLTEgfSwKQEAgLTU1MCw0NSArNTUzLDQ1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ4LCAyNjEgfSwKKyAgICB7IDQ5LCAyNjEgfSwKICAgICB7
IDExLCAyNjAgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjMsIC0xIH0sCisgICAgeyA2NCwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDcsIC0xIH0sCisgICAgeyA0OCwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgMTUsIC0xIH0sCisgICAgeyAxNiwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgMjYsIC0xIH0sCisgICAgeyAyNywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyOCwgLTEgfSwKKyAgICB7IDI5LCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ1LCAtMSB9LAorICAgIHsgNDYsIC0x
IH0sCiAgICAgeyA3LCAtMSB9LAotICAgIHsgNTEsIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwKICAg
ICB7IDUyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA1MywgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI3LCAyNTkg
fSwKLSAgICB7IDMwLCAtMSB9LAotICAgIHsgMzksIC0xIH0sCi0gICAgeyA0MSwgLTEgfSwKLSAg
ICB7IDQzLCAtMSB9LAotICAgIHsgNDksIC0xIH0sCi0gICAgeyA1NSwgLTEgfSwKLSAgICB7IDU3
LCAtMSB9LAotICAgIHsgNTksIC0xIH0sCi0gICAgeyA2NCwgLTEgfSwKLSAgICB7IDY4LCAtMSB9
LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAyOCwgMjU5IH0sCisgICAgeyAzMSwgLTEgfSwKKyAg
ICB7IDQwLCAtMSB9LAorICAgIHsgNDIsIC0xIH0sCisgICAgeyA0NCwgLTEgfSwKKyAgICB7IDUw
LCAtMSB9LAorICAgIHsgNTYsIC0xIH0sCisgICAgeyA1OCwgLTEgfSwKKyAgICB7IDYwLCAtMSB9
LAorICAgIHsgNjUsIC0xIH0sCiAgICAgeyA2OSwgLTEgfSwKKyAgICB7IDcwLCAtMSB9LAogfTsK
IAogCkBAIC02MTUsNiArNjE4LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dEdsb2JhbAogI2VuZGlmCiAgICAgeyAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdERPTUpJVCIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiVGVzdERlZmF1bHRUb0pT
T04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0
b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSB9IH0s
CiAgICAgeyAiVGVzdERvbWFpblNlY3VyaXR5Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21h
aW5TZWN1cml0eUNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdEVuYWJsZWRCeVNldHRpbmci
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKSB9
IH0sCiAgICAgeyAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9IH0sCkBAIC02ODgsNyArNjkyLDcgQEAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgInJlZ3VsYXJP
cGVyYXRpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0
aW9uKSwgKGludHB0cl90KSAoMSkgfSB9LAogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBK
U1Rlc3RHbG9iYWxPYmplY3RUYWJsZSA9IHsgNzIsIDI1NSwgdHJ1ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0OjppbmZvKCksIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9iYWxP
YmplY3RUYWJsZUluZGV4IH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9i
amVjdFRhYmxlID0geyA3MywgMjU1LCB0cnVlLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwg
SlNUZXN0R2xvYmFsT2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5k
ZXggfTsKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10g
PQpAQCAtMTIxMCw2ICsxMjE0LDI5IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERP
TUpJVENvbnMKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNl
dDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RET01KSVQiKTsK
IH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdERlZmF1bHRUb0pTT046Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFs
T2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dERlZmF1bHRUb0pTT04iKSwgc3RybGVuKCJUZXN0RGVmYXVsdFRvSlNPTiIpKSwgdmFsdWUpOwor
fQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OIik7Cit9CisKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25z
dHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0
U2VjcmV0Qm9vbGVhbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKICNl
bmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVu
Y3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25FbnRyaWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbktleXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFs
dWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2go
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAg
LTE1MCwxMSArMTUwLDExIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2Rl
UHIKICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRpZgor
ICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdO
YXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0
cl90KSAoMCkgfSB9LAogICAgIHsgImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
bkVudHJpZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAia2V5cyIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ2YWx1ZXMi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0gfSwK
ICAgICB7ICJmb3JFYWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJh
d05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwgKGlu
dHB0cl90KSAoMSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90eXBl
KSB9OwpAQCAtMzgzLDYgKzM4MywyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vZGVQCiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1
dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwgdG9KUzxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm5hbWUo
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQor
eworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJ0b0pTT04iKTsKK30KKwogc3RydWN0IFRlc3ROb2RlSXRlcmF0b3JUcmFpdHMgewogICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNET01JdGVyYXRvclR5cGUgdHlwZSA9IEpTRE9NSXRlcmF0b3JU
eXBlOjpTZXQ7CiAgICAgdXNpbmcgS2V5VHlwZSA9IHZvaWQ7CkBAIC00ODYsMjkgKzUwMiw2IEBA
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZv
ckVhY2hDYWxsZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIp
OwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpzZXJpYWxpemUoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE5vZGUmIHRoaXNPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAg
IGF1dG8gbmFtZVZhbHVlID0ganNUZXN0Tm9kZU5hbWVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIp
LCBuYW1lVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3ROb2RlKiB0
aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9kZTo6c2Vy
aWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KIEpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
ICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIGNv
bnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTQsNyAr
MTU5NCw2IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3Jr
ZXJGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRv
U3RyaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVz
CiAKQEAgLTIzMzQsNyArMjMzMyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpQcm8KICAgICB7ICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0
aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9X
aW5kb3dBbmRXb3JrZXJGdW5jdGlvbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24pLCAoaW50cHRyX3QpICgwKSB9
IH0sCiAgICAgeyAidG9TdHJpbmciLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcp
LCAoaW50cHRyX3QpICgwKSB9IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKICAgICB7ICJDT05ESVRJT05BTF9DT05TVCIsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkNvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9uZyko
MCkgfSB9LAogI2Vsc2UKQEAgLTk0MDEsNDEgKzkzOTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKLUpTQzo6SlNPYmplY3Qq
IEpTVGVzdE9iajo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gY3JlYXRlVmFsdWUgPSBqc1Rl
c3RPYmpDcmVhdGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlIiksIGNyZWF0ZVZhbHVlKTsKLQot
ICAgIGF1dG8gcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpSZWFkT25seVN0cmlu
Z0F0dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3Ry
aW5nQXR0clZhbHVlKTsKLQotICAgIGF1dG8gZW51bUF0dHJWYWx1ZSA9IGpzVGVzdE9iakVudW1B
dHRyR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1BdHRyIiksIGVudW1BdHRyVmFsdWUpOwotCi0gICAg
YXV0byBsb25nQXR0clZhbHVlID0ganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
bG9uZ0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1z
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0T2JqOjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKLX0K
LQogSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMjY2NjM0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFs
T2JqZWN0JiwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAg
IG11dGFibGUgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0
ZTE7CiAgICAgbXV0YWJsZSBKU0M6OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1fY2FjaGVk
QXR0cmlidXRlMjsKICNpZiBFTkFCTEUoQ09ORElUSU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MDksNjQgKzYwOSwyNSBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRo
SW50ZXJmCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0
PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3
ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBK
U1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb24qIGNhc3Rl
ZFRoaXMpCiB7Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGZpcnN0U3RyaW5nQXR0cmlidXRl
VmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1
ZSk7Ci0KLSAgICBhdXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6
YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRy
aWJ1dGUiKSwgc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZm91cnRoVW5y
ZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIGZpZnRoTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2Vy
aWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdB
dHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzaXh0aFR5
cGVkZWZBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gc2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qp
OwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBhdXRvKiBzZXZlbnRo
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpz
Q2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKj4oc2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVW
YWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVy
KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKLSAgICBhdXRvKiBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFs
aXplZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlh
bGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9u
YWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAg
aWYgKCFuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZS5pc051
bGwoKSkgewotICAgICAgICBhdXRvKiBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsKj4obmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGVTZXJpYWxpemVkVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1
ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdGVudGhGcm96ZW5BcnJheUF0
dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVl
ID0ganNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0
cmlidXRlVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05C
b2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rl
c3RTZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBlKCkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RT
dHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRy
aWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZp
ZnRoTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1
dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJl
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxp
emF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwg
dG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZyb3plbkFycmF5PElE
TEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2Vx
dWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJmYWNlU2VxdWVu
Y2VBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCShyZXZp
c2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0U2VyaWFsaXphdGlv
biYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUg
PT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMjIgQEAKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
Qm9vbGVhbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydE51bGxhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5o
IgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29u
dmVydFN0cmluZ3MuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXph
dGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9I
ZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KQEAgLTIxNywyMiArMjI2LDI2IEBAIGJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcmkKICAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7CiB9CiAK
LUpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIGNhc3RlZFRoaXMpCiB7Ci0g
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gSlNUZXN0
U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCk7Ci0KLSAgICBhdXRvIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUgPSBq
c1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQqIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkub2JqZWN0UHJvdG90eXBl
KCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29u
ZExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVk
ZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFi
bGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZyb3pl
bkFycmF5PElETEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERPTVN0
cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbmhlcml0TG9uZ0F0
dHJpYnV0ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJv
dG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0LmgJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9k
ZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQogICAg
IHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNv
bmN1cnJlbnRseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbC5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDIyIEBACiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJvb2xlYW4uaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnROdWxsYWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdz
LmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJK
U0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlLmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVy
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheS5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09i
amVjdENvbnN0cnVjdG9yLmg+CkBAIC0yNTEsMjIgKzI2MCwyOCBAQCBib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxGCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpOwogfQog
Ci1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxp
emUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwqIGNhc3RlZFRoaXMpCiB7Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
YXV0byogcmVzdWx0ID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNlcmlhbGl6ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QpOwotCi0gICAgYXV0byBm
aW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmluYWxMb25nQXR0cmli
dXRlQmFyIiksIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlKTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLm9iamVjdFByb3RvdHlwZSgpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZp
cnN0U3RyaW5nQXR0cmlidXRlIiksIHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZWNvbmRMb25n
QXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuc2Vjb25kTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUiKSwgdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgp
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0
cmlidXRlIiksIHRvSlM8SURMRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0
bHlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
IiksIHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwubmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJh
eTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNl
cXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1
dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbmFs
TG9uZ0F0dHJpYnV0ZUJhciIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgJ
KHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9i
amVjdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKICAgICB7
CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9ubHkuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5pZGwJ
KHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25s
eS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTk3LDUgKzk3LDUgQEAKICAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIEZsb2F0NjRBcnJheSB0b0Zsb2F0NjRBcnJheSgpOwogCiAgICAgW0V4cG9zZWQ9V2lu
ZG93LCBNYXlUaHJvd0V4Y2VwdGlvbl0gc3RyaW5naWZpZXI7Ci0gICAgc2VyaWFsaXplciA9IHsg
YXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RPTVBvaW50UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDUgKzQ1LDUgQEAKIAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NUG9pbnQgbWF0
cml4VHJhbnNmb3JtKG9wdGlvbmFsIERPTU1hdHJpeEluaXQgbWF0cml4KTsKIAotICAgIHNlcmlh
bGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9ET01RdWFkLmlkbAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw1ICs0MSw1IEBA
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVBvaW50IHA0OyAvLyBGSVhNRTogU2hvdWxkIGJl
IFtTYW1lT2JqZWN0XS4KICAgICBbTmV3T2JqZWN0XSBET01SZWN0IGdldEJvdW5kcygpOwogCi0g
ICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pT
T04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAkocmV2
aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTVJlY3RSZWFkT25seS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
dW5yZXN0cmljdGVkIGRvdWJsZSBib3R0b207CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVucmVz
dHJpY3RlZCBkb3VibGUgbGVmdDsKIAotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9Owor
ICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZUVudHJ5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw1ICs0
MSw1IEBAIHR5cGVkZWYgZG91YmxlIERPTUhpZ2hSZXNUaW1lU3RhbXA7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBlbnRyeVR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TUhpZ2hSZXNUaW1lU3RhbXAgc3RhcnRUaW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01I
aWdoUmVzVGltZVN0YW1wIGR1cmF0aW9uOwotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9
OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmgJKHJldmlzaW9uIDI2NjYz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MywxMyArNjMsMTMgQEAgcHVibGljOgogICAgIGRvdWJsZSByZXNw
b25zZUVuZCgpIGNvbnN0OwogICAgIGNvbnN0IFZlY3RvcjxSZWY8UGVyZm9ybWFuY2VTZXJ2ZXJU
aW1pbmc+PiYgc2VydmVyVGltaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2ZXJUaW1pbmc7IH0K
IAorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OlJlc291cmNlOyB9
CisgICAgQVNDSUlMaXRlcmFsIGVudHJ5VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJyZXNv
dXJjZSJfczsgfQorCiBwcml2YXRlOgogICAgIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcoTW9u
b3RvbmljVGltZSB0aW1lT3JpZ2luLCBSZXNvdXJjZVRpbWluZyYmKTsKICAgICB+UGVyZm9ybWFu
Y2VSZXNvdXJjZVRpbWluZygpOwogCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gVHlwZTo6UmVzb3VyY2U7IH0KLSAgICBBU0NJSUxpdGVyYWwgZW50cnlUeXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gInJlc291cmNlIl9zOyB9Ci0KICAgICBkb3VibGUgbmV0d29ya0xvYWRU
aW1lVG9ET01IaWdoUmVzVGltZVN0YW1wKFNlY29uZHMpIGNvbnN0OwogCiAgICAgQXRvbVN0cmlu
ZyBtX2luaXRpYXRvclR5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
UmVzb3VyY2VUaW1pbmcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZy5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDUgKzUzLDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCByZXNwb25zZUVuZDsKICAg
ICBbRW5hYmxlZEF0UnVudGltZT1TZXJ2ZXJUaW1pbmddIHJlYWRvbmx5IGF0dHJpYnV0ZSBGcm96
ZW5BcnJheTxQZXJmb3JtYW5jZVNlcnZlclRpbWluZz4gc2VydmVyVGltaW5nOwogCi0gICAgc2Vy
aWFsaXplciA9IHsgaW5oZXJpdCwgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0
b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVy
VGltaW5nLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
U2VydmVyVGltaW5nLmlkbAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9QZXJmb3JtYW5jZVNlcnZlclRpbWluZy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDUgKzM2
LDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hS
ZXNUaW1lU3RhbXAgZHVyYXRpb247CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBk
ZXNjcmlwdGlvbjsKLSAgICBzZXJpYWxpemVyID0ge2F0dHJpYnV0ZX07CisgICAgW0RlZmF1bHRd
IG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlVGltaW5nLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlVGltaW5nLmlkbAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZVRpbWluZy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTU0LDUgKzU0LDUgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRFdmVudFN0YXJ0Owog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZEV2ZW50RW5kOwog
Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0
b0pTT04oKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408021</attachid>
            <date>2020-09-04 13:52:35 -0700</date>
            <delta_ts>2020-09-04 15:18:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200904135233.patch</filename>
            <type>text/plain</type>
            <size>336540</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSAnc2VyaWFsaXph
YmxlJyBrZXl3b3JkLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGZyb20gV2ViSURMLAorICAgICAg
ICB3aXRoIGl0cyByZXBsYWNlbWVudCwgJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknLgorICAg
ICAgICAKKyAgICAgICAgVGhlIG5ldyB2ZXJzaW9uIGlzIHByZXR0eSBzaW1pbGFyLCBidXQgaGFz
IG11Y2ggbGVzcyByb29tIGZvciBjdXN0b21pemF0aW9uCisgICAgICAgIGluIHRoYXQgeW91IGNh
biBubyBsb25nZXIgc3BlY2lmeSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
SlNPTgorICAgICAgICByZXN1bHQuIFJhdGhlciwgYWxsIGF0dHJpYnV0ZXMgdGhhdCBxdWFsaXR5
IGFzIGhhdmUgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoKKyAg
ICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1YWQu
aWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBhZ2Uv
UGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmg6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDoK
KyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbDoKKyAgICAgICAgKiBw
YWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGw6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
aWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRBZGRyZXNzLmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGw6
CisgICAgICAgIFVwZGF0ZSBJRExzIHJlcGxhY2luZyBhbGwgdXNlIG9mIHNlcmlhbGl6ZXIuCisg
ICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAg
ICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNK
U09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFi
bGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxl
KToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVP
cGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5p
dGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAg
ICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6
CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlN
ZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmli
dXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb246CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBbRGVmYXVsdF0gdG9KU09OIGFuZCByZW1v
dmUgc3VwcG9ydCBmb3Igc2VyaWFsaXplci4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsOiBSZW1vdmVkLgorICAgICAgICBVcGRhdGUg
dGVzdHMuCisKIDIwMjAtMDktMDQgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0NvY29hLEVNRV0gLW91dHB1dE9ic2N1cmVkRHVlVG9JbnN1ZmZpY2llbnRFeHRl
cm5hbFByb3RlY3Rpb24gS1ZPIHdpbGwgc2V0IE91dHB1dE9ic2N1cmVkIGZvciBhbGwgYXR0YWNo
ZWQgTWVkaWFLZXlTZXNzaW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VJbmZvLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwJKHJldmlzaW9uIDI2NjYzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VJbmZvLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBNZWRpYURldmljZUtpbmQga2luZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGxhYmVsOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZ3JvdXBJZDsKLSAgICBz
ZXJpYWxpemVyID0ge2F0dHJpYnV0ZX07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsK
IH07CiAKIC8vIEZJWE1FIDE2OTg3MTogbWlzc2luZyBJbnB1dERldmljZUluZm8KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NiBAQAogCiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAKLSNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGVJ
bml0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjIsNiArNjEsMTUgQEAgUmVmPFJUQ0ljZUNhbmRpZGF0ZT4gUlRDSWNlQ2Fu
ZGlkYXRlOjpjcgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJUQ0ljZUNhbmRpZGF0ZShjYW5k
aWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleCkpOwogfQogCitSVENJY2VDYW5kaWRhdGVJbml0
IFJUQ0ljZUNhbmRpZGF0ZTo6dG9KU09OKCkgY29uc3QKK3sKKyAgICBSVENJY2VDYW5kaWRhdGVJ
bml0IHJlc3VsdDsKKyAgICByZXN1bHQuY2FuZGlkYXRlID0gbV9jYW5kaWRhdGU7CisgICAgcmVz
dWx0LnNkcE1pZCA9IG1fc2RwTWlkOworICAgIHJlc3VsdC5zZHBNTGluZUluZGV4ID0gbV9zZHBN
TGluZUluZGV4OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oCShyZXZpc2lvbiAy
NjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgRU5BQkxFKFdFQl9S
VEMpCiAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0
ZUluaXQuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTEsNiArNTIsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENhbmRpZGF0ZShT
dHJpbmcmJiBjYW5kaWRhdGUpIHsgbV9jYW5kaWRhdGUgPSBXVEZNb3ZlKGNhbmRpZGF0ZSk7IH0K
IAorICAgIFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9KU09OKCkgY29uc3Q7CisKIHByaXZhdGU6CiAg
ICAgUlRDSWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcm
IHNkcE1pZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHNkcE1MaW5lSW5kZXgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VD
YW5kaWRhdGUuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYg
KzUzLDUgQEAKICAgICAvLyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgcmVsYXRlZFBvcnQKICAgICAv
LyBGSVhNRSAxNjk2NjI6IG1pc3NpbmcgdWZyYWcKIAotICAgIC8vIEZJWE1FIDE2OTY2MjogYWRk
IHVmcmFnIHRvIHRoZSBsaXN0Ci0gICAgc2VyaWFsaXplciA9IHtjYW5kaWRhdGUsIHNkcE1pZCwg
c2RwTUxpbmVJbmRleH07CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0b0pTT04oKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgUlRD
U2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOwogCi0g
ICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09O
KCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXlt
ZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXlt
ZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEFkZHJlc3MuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJs
ZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFjZSBQYXltZW50QWRkcmVzcyB7Ci0gICAg
c2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvdW50cnk7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmluZz4gYWRkcmVzc0xpbmU7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2UuaWRs
CShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1
ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
ICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTZWN1cmVDb250ZXh0LAogXSBpbnRlcmZh
Y2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQgewotICAgIHNlcmlhbGl6ZXIgPSB7IGF0
dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiAKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHdvcmtpbmcgY29weSkK
QEAgLTExMDEsNTAgKzExMDEsNjQgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICByZXR1cm4gMDsK
IH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitzdWIgSW50ZXJmYWNlSGFzUmVndWxhclRv
SlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlKSA9IEBfOwogCi0g
ICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMDsKLSAgICAkb2JqZWN0LT5Gb3JBbGxQ
YXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSBz
aGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMSBpZiAkcGFyZW50SW50
ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7Ci0KLSAgICByZXR1cm4gJGFueVBhcmVu
dElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJmYWNl
LT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRvcGVyYXRpb24tPmlzU3RhdGljICYmICRv
cGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVUeXBl
CisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1qc29uLXR5cGVzCitzdWIg
SXNKU09OVHlwZQogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkdHlwZSkgPSBAXzsK
IAotICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLXNlcmlhbGl6YWJs
ZS10eXBlCi0KKyAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuIDEgaWYgJG9i
amVjdC0+SXNOdW1lcmljVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNF
bnVtVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNTdHJpbmdUeXBlKCR0
eXBlKTsKLSAgICByZXR1cm4gMCBpZiAkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsKLQot
ICAgIGlmICgkdHlwZS0+aXNVbmlvbiB8fCAkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBl
KSkgewotICAgICAgICBkaWUgIlNlcmlhbGl6ZXJzIGZvciB1bmlvbiBhbmQgZGljdGlvbmFyeSB0
eXBlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iOwotICAgIH0KKyAgICByZXR1cm4g
MSBpZiAkb2JqZWN0LT5Jc1N0cmluZ09yRW51bVR5cGUoJHR5cGUpOwogCiAgICAgaWYgKCRvYmpl
Y3QtPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgbXkgJHN1
YnR5cGUgPSBAeyR0eXBlLT5zdWJ0eXBlc31bMF07Ci0KLSAgICAgICAgIyBGSVhNRTogd2Via2l0
Lm9yZy9iLzE5NDQzOSBbV2ViSURMXSBTdXBwb3J0IHNlcmlhbGl6aW5nIHNlcXVlbmNlcyBhbmQg
RnJvemVuQXJyYXlzIG9mIGludGVyZmFjZXMKLSAgICAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+
SXNJbnRlcmZhY2VUeXBlKCRzdWJ0eXBlKTsKLQotICAgICAgICByZXR1cm4gJG9iamVjdC0+SXNT
ZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRzdWJ0eXBlKTsKKyAgICAgICAgcmV0dXJuICRv
YmplY3QtPklzSlNPTlR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgIH0KKyAgICBpZiAo
JG9iamVjdC0+SXNSZWNvcmRUeXBlKCR0eXBlKSkgeworICAgICAgICBteSAkdmFsdWVTdWJ0eXBl
ID0gQHskdHlwZS0+c3VidHlwZXN9WzBdOworICAgICAgICByZXR1cm4gJG9iamVjdC0+SXNKU09O
VHlwZSgkaW50ZXJmYWNlLCAkdmFsdWVTdWJ0eXBlKTsKICAgICB9CiAKLSAgICByZXR1cm4gMCBp
ZiAhJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBlKTsKKyAgICBpZiAoJG9iamVjdC0+SXNJ
bnRlcmZhY2VUeXBlKCR0eXBlKSkgeworICAgICAgICAjIFNwZWNpYWwgY2FzZSBFdmVudEhhbmRs
ZXIsIHNpbmNlIHRoZXJlIGlzIG5vIHJlYWwgSURMIGZvciBpdC4KKyAgICAgICAgcmV0dXJuIDAg
aWYgJHR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciI7CisKKyAgICAgICAgbXkgJGludGVyZmFj
ZSA9ICRvYmplY3QtPkdldEludGVyZmFjZUZvclR5cGUoJGludGVyZmFjZSwgJHR5cGUpOworICAg
ICAgICBpZiAoJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbigkaW50
ZXJmYWNlKSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KIAotICAgIG15ICRp
bnRlcmZhY2VGb3JUeXBlID0gJG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJmYWNl
LCAkdHlwZSk7Ci0gICAgaWYgKCRpbnRlcmZhY2VGb3JUeXBlKSB7Ci0gICAgICAgIHJldHVybiAx
IGlmICRpbnRlcmZhY2VGb3JUeXBlLT5zZXJpYWxpemFibGU7Ci0gICAgICAgIHJldHVybiAkb2Jq
ZWN0LT5Jbmhlcml0c1NlcmlhbGl6YWJsZSgkaW50ZXJmYWNlRm9yVHlwZSk7CisgICAgICAgIG15
ICRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uID0gMDsKKyAgICAgICAgJG9iamVj
dC0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBzdWIgeworICAgICAgICAgICAgbXkgJHBhcmVu
dEludGVyZmFjZSA9IHNoaWZ0OworICAgICAgICAgICAgJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pT
T05PcGVyYXRpb24gPSAxIGlmICRvYmplY3QtPkludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVy
YXRpb24oJHBhcmVudEludGVyZmFjZSk7CisgICAgICAgIH0sIDApOworICAgICAgICAKKyAgICAg
ICAgaWYgKCRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoJHR5cGUtPmlzVW5p
b24pIHsKKyAgICAgICAgIyBGSVhNRTogVW5pb24gdHlwZXMgc2hvdWxkIGJlIHN1cHBvcnRlZCBp
ZiBhbGwgdGhlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJEZWZh
dWx0IHRvSlNPTiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgdW5pb24gdHlwZXMuXG4i
OworICAgIH0KKyAgICBpZiAoJG9iamVjdC0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlwZSkpIHsKKyAg
ICAgICAgIyBGSVhNRTogRGljdGlvbmFyeSB0eXBlcyBzaG91bGQgYmUgc3VwcG9ydGVkIGlmIGFs
bCBtZW1iZXJzIGRlY2xhcmVkIG9uIHRoZSBkaWN0aW9uYXJ5IGFuZCBhbGwgaXRzIGluaGVyaXRl
ZCBkaWN0aW9uYXJpZXMgYXJlIEpTT04gdHlwZXMuCisgICAgICAgIGRpZSAiRGVmYXVsdCB0b0pT
T04gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGRpY3Rpb25hcnkgdHlwZXMuXG4iOwog
ICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTE1NiwxNyArMTE3MCw2IEBAIHN1YiBoYXNDYWNo
ZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGUKICAgICByZXR1cm4gJGF0dHJpYnV0ZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfSB8fCAkYXR0cmlidXRlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDdXN0b21HZXR0ZXJ9OwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVBdHRy
aWJ1dGUKLXsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkgPSBAXzsK
LQotICAgIGlmICgkb2JqZWN0LT5Jc1NlcXVlbmNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSAmJiBo
YXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGVuZGVkQXR0cmlidXRlKCRhdHRyaWJ1
dGUpKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHNlcXVlbmNlIHR5cGVzIHdpdGgg
Q2FjaGVkQXR0cmlidXRlIG9yIEN1c3RvbUdldHRlciBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBu
b3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQotCi0gICAgcmV0dXJuICRvYmplY3Qt
PklzU2VyaWFsaXphYmxlVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBlKTsKLX0KLQog
c3ViIEdldEludGVyZmFjZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21OYW1lCiB7CiAgICAgIyBGSVhN
RTogSXQncyBiYWQgdG8gaGF2ZSBhIGZ1bmN0aW9uIGxpa2UgdGhpcyB0aGF0IG9wZW5zIGFub3Ro
ZXIgSURMIGZpbGUgdG8gYW5zd2VyIGEgcXVlc3Rpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjY2
NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0JKHdvcmtpbmcgY29weSkKQEAgLTE4NjcsNyArMTg2Nyw2IEBAIHN1YiBQcm90b3R5cGVPcGVy
YXRpb25Db3VudAogICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+
b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAgICAgJGNvdW50ICs9IHNjYWxh
ciBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPm1hcExp
a2U7CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlv
bnN9IGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRl
cmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+c2VyaWFsaXph
YmxlOwogCiAgICAgcmV0dXJuICRjb3VudDsKIH0KQEAgLTI3ODAsMTEgKzI3NzksNiBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGdldE5hbWVkQ29uc3RydWN0b3IoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e05hbWVkQ29u
c3RydWN0b3J9OwogICAgIH0KIAotICAgICMgU2VyaWFsaXplciBmdW5jdGlvbi4KLSAgICBpZiAo
JGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0
JiwgJHtjbGFzc05hbWV9JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpO1xuIik7Ci0g
ICAgfQotICAgIAogICAgIG15ICRudW1DdXN0b21PcGVyYXRpb25zID0gMDsKICAgICBteSAkbnVt
Q3VzdG9tQXR0cmlidXRlcyA9IDA7CiAKQEAgLTMxODYsNyArMzE4MCw2IEBAIHN1YiBHZW5lcmF0
ZVByb3BlcnRpZXNIYXNoVGFibGUKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2Ut
Pml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRp
bnRlcmZhY2UpOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+
b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgcHVzaChAb3BlcmF0aW9u
cywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2V0
TGlrZTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+
b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBmb3JlYWNoIG15
ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAgICAgIG5leHQgaWYgKCRvcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQgbm90ICRvcGVyYXRp
b24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsKICAgICAgICAgbmV4
dCBpZiAoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwpAQCAtMzk5NCw3ICszOTg3LDYgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2Ut
Pml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRp
bnRlcmZhY2UpOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+bWFwTGlrZS0+
b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgcHVzaChAb3BlcmF0aW9u
cywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRpb25zfSkgaWYgJGludGVyZmFjZS0+c2V0
TGlrZTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+
b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIG15IEBhdHRy
aWJ1dGVzID0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKICAgICBwdXNoKEBhdHRyaWJ1dGVz
LCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPmF0dHJpYnV0ZXN9KSBpZiAkaW50ZXJmYWNlLT5tYXBM
aWtlOwpAQCAtNDY3Myw3ICs0NjY1LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICB9CiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24oJGludGVyZmFjZSkgaWYg
JGludGVyZmFjZS0+aXRlcmFibGU7Ci0gICAgR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbigk
aW50ZXJmYWNlLCAkY2xhc3NOYW1lKSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CkBAIC01NDE5LDcgKzU0MTAsMTAgQEAg
c3ViIEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlvbgogCiAgICAgcmV0dXJuIGlmIElzSlNCdWls
dGluKCRpbnRlcmZhY2UsICRvcGVyYXRpb24pOwogICAgIHJldHVybiBpZiAkb3BlcmF0aW9uLT5p
c0l0ZXJhYmxlOwotICAgIHJldHVybiBpZiAkb3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXI7CisgICAg
CisgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RlZmF1bHR9KSB7Cisg
ICAgICAgIHJldHVybiBHZW5lcmF0ZURlZmF1bHRPcGVyYXRpb25EZWZpbml0aW9uKCRvdXRwdXRB
cnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CisgICAgfQogCiAgICAg
bXkgJGlzQ3VzdG9tID0gSGFzQ3VzdG9tTWV0aG9kKCRvcGVyYXRpb24pOwogICAgIG15ICRpc092
ZXJsb2FkZWQgPSAkb3BlcmF0aW9uLT57b3ZlcmxvYWRzfSAmJiBAeyRvcGVyYXRpb24tPntvdmVy
bG9hZHN9fSA+IDE7CkBAIC01NTM5LDEwMCArNTUzMyw5NSBAQCBzdWIgR2VuZXJhdGVPcGVyYXRp
b25EZWZpbml0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkZW5kQXBwbGVDb3B5cmlnaHQp
IGlmICRpbkFwcGxlQ29weXJpZ2h0OwogfQogCi1zdWIgR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5p
dGlvbgorc3ViIEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRlZmluaXRpb24KIHsKLSAgICBteSAo
JGludGVyZmFjZSwgJGNsYXNzTmFtZSkgPSBAXzsKLQotICAgIG15ICRpbnRlcmZhY2VOYW1lID0g
JGludGVyZmFjZS0+dHlwZS0+bmFtZTsKKyAgICBteSAoJG91dHB1dEFycmF5LCAkaW50ZXJmYWNl
LCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKSA9IEBfOwogCi0gICAgbXkgJHBhcmVudFNlcmlhbGl6
ZXJJbnRlcmZhY2UgPSAwOwotICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0lu
aGVyaXQpIHsKLSAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkZvckFsbFBhcmVudHMoJGludGVyZmFj
ZSwgc3ViIHsKLSAgICAgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSBzaGlmdDsKLSAgICAg
ICAgICAgIGlmICgkcGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGUgJiYgISRwYXJlbnRTZXJp
YWxpemVySW50ZXJmYWNlKSB7Ci0gICAgICAgICAgICAgICAgJHBhcmVudFNlcmlhbGl6ZXJJbnRl
cmZhY2UgPSAkcGFyZW50SW50ZXJmYWNlOwotICAgICAgICAgICAgfQotICAgICAgICB9LCAwKTsK
LSAgICAgICAgZGllICJGYWlsZWQgdG8gZmluZCBwYXJlbnQgaW50ZXJmYWNlIHdpdGggXCJzZXJp
YWxpemVyXCIgZm9yIFwiaW5oZXJpdFwiIHNlcmlhbGl6ZXIgaW4gJGludGVyZmFjZU5hbWVcbiIg
aWYgISRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlOworICAgIGlmICgkb3BlcmF0aW9uLT5uYW1l
IGVxICJ0b0pTT04iICYmICRvcGVyYXRpb24tPnR5cGUtPm5hbWUgZXEgIm9iamVjdCIpIHsKKyAg
ICAgICAgcmV0dXJuIEdlbmVyYXRlRGVmYXVsdFRvSlNPTk9wZXJhdGlvbkRlZmluaXRpb24oJG91
dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKTsKICAgICB9CiAK
LSAgICBteSBAc2VyaWFsaXplZEF0dHJpYnV0ZXMgPSAoKTsKKyAgICBkaWUgIltEZWZhdWx0XSBp
cyBub3Qgc3VwcG9ydCBmb3IgZm9yIHRoaXMgb3BlcmF0aW9uICgiIC4gJG9wZXJhdGlvbi0+bmFt
ZSAuICIpLiBJdCBpcyBvbmx5IGN1cnJlbnRseSBkZWZpbmVkIGZvciAnb2JqZWN0IHRvSlNPTigp
OycuIgorfQogCi0gICAgZm9yZWFjaCBteSAkYXR0cmlidXRlTmFtZSAoQHskaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgIG15ICRmb3VuZEF0dHJpYnV0ZSA9
IDA7Ci0gICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1
dGVzfSkgewotICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGVOYW1lIGVxICRhdHRyaWJ1dGUtPm5h
bWUpIHsKLSAgICAgICAgICAgICAgICAkZm91bmRBdHRyaWJ1dGUgPSAxOwotICAgICAgICAgICAg
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTZXJpYWxpemFibGVBdHRyaWJ1dGUoJGludGVyZmFj
ZSwgJGF0dHJpYnV0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAc2VyaWFsaXplZEF0
dHJpYnV0ZXMsICRhdHRyaWJ1dGUpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgbGFzdDsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBkaWUgIkV4cGxpY2l0IFwic2VyaWFsaXplclwiIGF0dHJpYnV0ZSBcIiRhdHRyaWJ1
dGVOYW1lXCIgaXMgbm90IHNlcmlhbGl6YWJsZVxuIiBpZiAhJGludGVyZmFjZS0+c2VyaWFsaXph
YmxlLT5oYXNBdHRyaWJ1dGU7Ci0gICAgICAgICAgICAgICAgbGFzdDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIFwic2VyaWFsaXplclwiIGF0
dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1lXCIgaW4gJGludGVyZmFjZU5hbWVcbiIgaWYgISRmb3Vu
ZEF0dHJpYnV0ZTsKLSAgICB9CitzdWIgR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVm
aW5pdGlvbgoreworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUs
ICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSA9ICJ0
b0pTT04iOwotICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5l
cmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24iIC4gJGNv
ZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUpOworICAgICMg
aHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtZGVmYXVsdC10b2pzb24KIAotICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4i
KTsKKyAgICBteSBAaW5oZXJpdGVuY2VTdGFjayA9ICgpOworICAgIHB1c2goQGluaGVyaXRlbmNl
U3RhY2ssICRpbnRlcmZhY2UpOworICAgICRjb2RlR2VuZXJhdG9yLT5Gb3JBbGxQYXJlbnRzKCRp
bnRlcmZhY2UsIHN1YiB7CisgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSBzaGlmdDsKKyAg
ICAgICAgcHVzaChAaW5oZXJpdGVuY2VTdGFjaywgJHBhcmVudEludGVyZmFjZSk7CisgICAgfSwg
MCk7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNPYmplY3QqIEpTJHtpbnRlcmZh
Y2VOYW1lfTo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCAk
e2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7XG4i
KTsKKyAgICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RnVuY3Rpb25OYW1lKCRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRvcGVyYXRpb24pOworCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1Cb2R5KEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCAke2NsYXNzTmFtZX0qIGNhc3RlZFRo
aXMpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKIAotICAgIGlmICgkaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0luaGVyaXQpIHsKLSAgICAgICAgbXkgJHBhcmVudFNl
cmlhbGl6ZXJJbnRlcmZhY2VOYW1lID0gJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UtPnR5cGUt
Pm5hbWU7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IEpT
JHtwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSk7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCkpO1xuIik7CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBz
ZXJpYWxpemVkQXR0cmlidXRlcykgewotICAgICAgICAjIEZJWE1FOiBBdHRyaWJ1dGVzIHRoYXQg
dGhyb3cgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHNlcmlhbGl6ZXJzIHlldC4K
KyAgICAgd2hpbGUgKEBpbmhlcml0ZW5jZVN0YWNrKSB7CisgICAgICAgIG15ICRjdXJyZW50SW50
ZXJmYWNlID0gcG9wKEBpbmhlcml0ZW5jZVN0YWNrKTsKIAotICAgICAgICBteSAkbmFtZSA9ICRh
dHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1
dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICR7bmFtZX1WYWx1ZSA9ICR7Z2V0RnVuY3Rp
b25OYW1lfUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTtcbiIpOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7XG4iKTsKLQotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzSW50ZXJmYWNlVHlwZSgk
YXR0cmlidXRlLT50eXBlKSkgewotICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUludGVyZmFjZU5h
bWUgPSAkYXR0cmlidXRlLT50eXBlLT5uYW1lOwotICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUt
PnR5cGUtPmlzTnVsbGFibGUpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc051bGwoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUg
PSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSks
IGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9IGVsc2VcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNl
TmFtZX06OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1
dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9U2VyaWFs
aXplZFZhbHVlKTtcbiIpOworICAgICAgICBteSAkaGFzRGVmYXVsdFRvSlNPTk9wZXJhdGlvbiA9
IDA7CisgICAgICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskY3VycmVudEludGVyZmFjZS0+
b3BlcmF0aW9uc30pIHsKKyAgICAgICAgICAgIGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntEZWZhdWx0fSAmJiAkb3BlcmF0aW9uLT5uYW1lIGVxICJ0b0pTT04iICYmICRvcGVy
YXRpb24tPnR5cGUtPm5hbWUgZXEgIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICAkaGFzRGVm
YXVsdFRvSlNPTk9wZXJhdGlvbiA9IDE7CisgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7
bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKICAgICAgICAgfQorICAgICAgICBpZiAoJGhh
c0RlZmF1bHRUb0pTT05PcGVyYXRpb24pIHsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJp
YnV0ZSAoQHskY3VycmVudEludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAg
ICBuZXh0IGlmICRhdHRyaWJ1dGUtPmlzU3RhdGljOworICAgICAgICAgICAgICAgIG5leHQgaWYg
ISRjb2RlR2VuZXJhdG9yLT5Jc0pTT05UeXBlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUp
OwogCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBt
eSAkY29uZGl0aW9uYWwgPSAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRp
b25hbH07CisgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAg
ICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVD
b25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWwpOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIjaWYgJHtjb25kaXRpb25hbFN0cmlu
Z31cbiIpOzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBteSAkYXR0cmli
dXRlTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAgICAgICAgICAgICAgbXkgKCRiYXNlRnVu
Y3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9u
KFwlaW1wbEluY2x1ZGVzLCAkY3VycmVudEludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0
ZSk7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bGx5UXVhbGlmaWVk
SW1wbGVtZW50YXRpb25DYWxsTmFtZSgkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSwgJGJh
c2VGdW5jdGlvbk5hbWUsICJpbXBsIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgICAgICBt
eSAkdG9KU0V4cHJlc3Npb24gPSBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50ZXJzKCRhdHRyaWJ1
dGUsICRjdXJyZW50SW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBh
cmd1bWVudHMpIC4gIikiLCAiKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpIik7CisKKyAgICAg
ICAgICAgICAgICBteSAkbmVlZHNSdW50aW1lQ2hlY2sgPSBOZWVkc1J1bnRpbWVDaGVjaygkY3Vy
cmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCRuZWVkc1J1
bnRpbWVDaGVjaykgeworICAgICAgICAgICAgICAgICAgICBteSAkcnVudGltZUVuYWJsZUNvbmRp
dGlvbmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcoJGN1
cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCR7cnVu
dGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVz
c2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0p
O1xuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRp
b25hbCkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIjZW5kaWZc
blxuIikgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4i
KTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiXG4iKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Qm9keShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgJHtjbGFzc05h
bWV9KiB0aGlzT2JqZWN0KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTJHtpbnRl
cmZhY2VOYW1lfTo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwg
KnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZl
RnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJRExPcGVyYXRpb248SlMke2ludGVyZmFj
ZU5hbWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Qm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtzZXJpYWxpemVyRnVuY3Rpb25OYW1lfVwi
KTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIpOworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+dHlwZS0+
bmFtZTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4i
KTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKUyR7
aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7ZnVuY3Rpb25OYW1lfUJvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCBcInRvSlNPTlwiKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiB9CiAKIHN1YiBH
ZW5lcmF0ZUdldENhbGxEYXRhCkBAIC03NTg0LDcgKzc1NzMsNiBAQCBzdWIgR2V0UnVudGltZUVu
YWJsZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNl
LT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgk
aW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2Ut
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2goQG9wZXJhdGlv
bnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNl
dExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAgICAgZm9yZWFjaCBt
eSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAgICAgICBuZXh0IGlmICgkb3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CiAgICAgICAgIG5l
eHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9ICYmICRvcGVyYXRpb24tPntvdmVybG9h
ZEluZGV4fSA+IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0
dHJpYnV0ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcgY29weSkKQEAg
LTE2Miw2ICsxNjIsOSBAQAogICAgICAgICAgICAgInZhbHVlcyI6IFsiIiwgIlJlYWRET00iLCAi
R2V0dGVyIl0sCiAgICAgICAgICAgICAic3VwcG9ydHNDb25qdW5jdGlvbiI6IHRydWUKICAgICAg
ICAgfSwKKyAgICAgICAgIkRlZmF1bHQiOiB7CisgICAgICAgICAgICAiY29udGV4dHNBbGxvd2Vk
IjogWyJvcGVyYXRpb24iXQorICAgICAgICB9LAogICAgICAgICAiRGVmYXVsdERlZmluZU93blBy
b3BlcnR5IjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0K
ICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
UGFyc2VyLnBtCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNiBAQCBzdHJ1
Y3QoIElETEludGVyZmFjZSA9PiB7CiAgICAgYXN5bmNJdGVyYWJsZSA9PiAnJCcsICMgVXNlZCBm
b3IgYXN5Y24gaXRlcmFibGUgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMQXN5bmNJdGVyYWJsZScK
ICAgICBtYXBMaWtlID0+ICckJywgIyBVc2VkIGZvciBtYXBMaWtlIGludGVyZmFjZXMsIG9mIHR5
cGUgJ0lETE1hcExpa2UnCiAgICAgc2V0TGlrZSA9PiAnJCcsICMgVXNlZCBmb3Igc2V0TGlrZSBp
bnRlcmZhY2VzLCBvZiB0eXBlICdJRExTZXRMaWtlJwotICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcs
ICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETFNlcmlhbGl6
YWJsZScKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKQEAgLTkzLDcgKzky
LDYgQEAgc3RydWN0KCBJRExPcGVyYXRpb24gPT4gewogICAgIGlzQ29uc3RydWN0b3IgPT4gJyQn
LAogICAgIGlzU3RhdGljID0+ICckJywKICAgICBpc0l0ZXJhYmxlID0+ICckJywKLSAgICBpc1Nl
cmlhbGl6ZXIgPT4gJyQnLAogICAgIGlzU3RyaW5naWZpZXIgPT4gJyQnLAogICAgIGlzTWFwTGlr
ZSA9PiAnJCcsCiAgICAgaXNTZXRMaWtlID0+ICckJywKQEAgLTE1MywxNSArMTUxLDYgQEAgc3Ry
dWN0KCBJRExTZXRMaWtlID0+IHsKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7
CiAKLSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCi1z
dHJ1Y3QoIElETFNlcmlhbGl6YWJsZSA9PiB7Ci0gICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlz
dCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQotICAgIGhhc0F0dHJpYnV0ZSA9PiAnJCcsICMg
c2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH0KLSAgICBoYXNJbmhlcml0ID0+ICckJywgIyBzZXJp
YWxpemVyID0geyBpbmhlcml0IH0KLSAgICBoYXNHZXR0ZXIgPT4gJyQnLCAjIHNlcmlhbGl6ZXIg
PSB7IGdldHRlciB9Ci0gICAgb3BlcmF0aW9ucyA9PiAnQCcsICMgdG9KU09OIG9wZXJhdGlvbgot
fSk7Ci0KICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWNvbnN0YW50cwog
c3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCkBAIC01OTgsNyArNTg3
LDYgQEAgc3ViIGNsb25lT3BlcmF0aW9uCiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNDb25zdHJ1
Y3Rvcigkb3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKTsKICAgICAkY2xvbmVkT3BlcmF0aW9uLT5p
c1N0YXRpYygkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNJ
dGVyYWJsZSgkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlKTsKLSAgICAkY2xvbmVkT3BlcmF0aW9uLT5p
c1NlcmlhbGl6ZXIoJG9wZXJhdGlvbi0+aXNTZXJpYWxpemVyKTsKICAgICAkY2xvbmVkT3BlcmF0
aW9uLT5pc1N0cmluZ2lmaWVyKCRvcGVyYXRpb24tPmlzU3RyaW5naWZpZXIpOwogICAgICRjbG9u
ZWRPcGVyYXRpb24tPmlzTWFwTGlrZSgkb3BlcmF0aW9uLT5pc01hcExpa2UpOwogICAgICRjbG9u
ZWRPcGVyYXRpb24tPmlzU2V0TGlrZSgkb3BlcmF0aW9uLT5pc1NldExpa2UpOwpAQCAtNjQ5LDkg
KzYzNyw5IEBAIG15ICRuZXh0VHlwZV8xID0gJ14oQnl0ZVN0cmluZ3xET01TdHJpbmcKIG15ICRu
ZXh0U3BlY2lhbHNfMSA9ICdeKGRlbGV0ZXJ8Z2V0dGVyfHNldHRlcikkJzsKIG15ICRuZXh0RGVm
aW5pdGlvbnNfMSA9ICdeKGNhbGxiYWNrfGRpY3Rpb25hcnl8ZW51bXxpbnRlcmZhY2V8bmFtZXNw
YWNlfHBhcnRpYWx8dHlwZWRlZikkJzsKIG15ICRuZXh0RGljdGlvbmFyeU1lbWJlcl8xID0gJ14o
XCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8ZG91Ymxl
fGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJlcXVpcmVkfHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1
bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRJbnRlcmZhY2VNZW1i
ZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0
ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0
dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXpl
cnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxC
eXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8
Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9u
Z3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJp
bmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRu
ZXh0TmFtZXNwYWNlTWVtYmVyc18xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3Ry
aW5nfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRv
bmx5fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVk
KSQnOwotbXkgJG5leHRQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5n
fERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8ZGVs
ZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9u
bHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5
bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRQYXJ0aWFs
SW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8
YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0
dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNo
b3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNp
Z25lZCkkJzsKIG15ICRuZXh0U2luZ2xlVHlwZV8xID0gJ14oQnl0ZVN0cmluZ3xET01TdHJpbmd8
VVNWU3RyaW5nfGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8c2Vx
dWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBt
eSAkbmV4dEFyZ3VtZW50TmFtZV8xID0gJ14oYXN5bmN8YXR0cmlidXRlfGNhbGxiYWNrfGNvbnN0
fGNvbnN0cnVjdG9yfGRlbGV0ZXJ8ZGljdGlvbmFyeXxlbnVtfGdldHRlcnxpbmNsdWRlc3xpbmhl
cml0fGludGVyZmFjZXxpdGVyYWJsZXxtYXBsaWtlfG1peGlufG5hbWVzcGFjZXxwYXJ0aWFsfHJl
YWRvbmx5fHJlcXVpcmVkfHNldGxpa2V8c2V0dGVyfHN0YXRpY3xzdHJpbmdpZmllcnx0eXBlZGVm
fHVucmVzdHJpY3RlZCkkJzsKIG15ICRuZXh0Q29uc3RWYWx1ZV8xID0gJ14oZmFsc2V8dHJ1ZSkk
JzsKQEAgLTExNzgsMTIgKzExNjYsNiBAQCBzdWIgcGFyc2VQYXJ0aWFsSW50ZXJmYWNlTWVtYmVy
CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJpbmhlcml0IikgewogICAgICAgICByZXR1cm4g
JHNlbGYtPnBhcnNlSW5oZXJpdEF0dHJpYnV0ZSgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAg
ICB9Ci0KLSAgICAjIEZJWE1FOiBSZW1vdmUuIFRoaXMgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgV2Vi
SURMLiBSZXBsYWNlIHdpdGggW1NlcmlhbGl6YWJsZV0uCi0gICAgaWYgKCRuZXh0LT52YWx1ZSgp
IGVxICJzZXJpYWxpemVyIikgewotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXpl
cigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICB9Ci0KICAgICBpZiAoJG5leHQtPnR5cGUo
KSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgPX4gLyRuZXh0T3BlcmF0aW9u
XzEvKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRpb24oJGV4dGVuZGVkQXR0
cmlidXRlTGlzdCk7CiAgICAgIH0KQEAgLTE2NDksMTE0ICsxNjMxLDYgQEAgc3ViIHBhcnNlQ29u
c3RydWN0b3IKICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgp
LCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlhbGl6ZXIKLXsKLSAgICBteSAkc2VsZiA9
IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15
ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAi
c2VyaWFsaXplciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdl
dFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18pOwotICAgICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKLSAgICAgICAgbXkgJG5ld0RhdGFOb2RlOwotICAgICAgICBpZiAo
JG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7Ci0gICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSAkc2Vs
Zi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAgICAg
ICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG15ICR0b0pTT05PcGVyYXRpb24gPSBJRExPcGVyYXRpb24tPm5ldygpOwot
ICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5uYW1lKCJ0b0pTT04iKTsKLQotICAgICAgICAkc2Vs
Zi0+YXNzZXJ0RXh0ZW5kZWRBdHRyaWJ1dGVzVmFsaWRGb3JDb250ZXh0KCRleHRlbmRlZEF0dHJp
YnV0ZUxpc3QsICJvcGVyYXRpb24iKTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgICAgICAkdG9KU09OT3Bl
cmF0aW9uLT5pc1NlcmlhbGl6ZXIoMSk7Ci0gICAgICAgIHB1c2goQHskbmV3RGF0YU5vZGUtPm9w
ZXJhdGlvbnN9LCAkdG9KU09OT3BlcmF0aW9uKTsKLQotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVy
biAkbmV3RGF0YU5vZGU7Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4o
JG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KLQotc3ViIHBhcnNlU2VyaWFsaXplclJlc3QK
LXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3Qg
PSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgk
bmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUo
JHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5FX18pOwotCi0gICAgICAgIHJldHVybiAkc2Vs
Zi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigpOwotCi0gICAgfQotICAgIGlmICgkbmV4dC0+
dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSBlcSAiKCIpIHsKLSAg
ICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7Ci0gICAgfQotfQotCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybgotewotICAg
IG15ICRzZWxmID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsK
LSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRU
b2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAieyIsIF9fTElORV9fKTsKLSAgICAgICAgbXkg
JG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAgJHNlbGYtPnBh
cnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoJG5ld0RhdGFOb2RlKTsKLSAgICAgICAgJHNlbGYt
PmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ9IiwgX19MSU5FX18pOwotICAg
ICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAgIH0KLSAgICBpZiAoJG5leHQtPnZhbHVlKCkg
ZXEgIlsiKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXphdGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlz
IG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgp
ID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICBteSBAYXR0cmlidXRlcyA9ICgpOwotICAg
ICAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKLSAgICAgICAgJHNlbGYtPmFzc2Vy
dFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgIHB1c2goQGF0dHJp
YnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7Ci0KLSAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gSURM
U2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAgJG5ld0RhdGFOb2RlLT5hdHRyaWJ1dGVzKFxA
YXR0cmlidXRlcyk7Ci0KLSAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAgICB9Ci0gICAg
JHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwot
fQotCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcwotewotICAgIG15ICRzZWxmID0g
c2hpZnQ7Ci0gICAgbXkgJHNlcmlhbGl6YWJsZSA9IHNoaWZ0OwotCi0gICAgbXkgQGF0dHJpYnV0
ZXMgPSAoKTsKLSAgICBteSBAaWRlbnRpZmllcnMgPSAkc2VsZi0+cGFyc2VJZGVudGlmaWVyTGlz
dCgpOwotCi0gICAgZm9yIG15ICRpZGVudGlmaWVyIChAaWRlbnRpZmllcnMpIHsKLSAgICAgICAg
aWYgKCRpZGVudGlmaWVyIGVxICJnZXR0ZXIiKSB7Ci0gICAgICAgICAgICAkc2VyaWFsaXphYmxl
LT5oYXNHZXR0ZXIoMSk7Ci0gICAgICAgICAgICBkaWUgIlNlcmlhbGl6ZXIgZ2V0dGVyIGtleXdv
cmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICgkaWRlbnRpZmllciBlcSAiaW5oZXJpdCIpIHsKLSAgICAgICAgICAgICRzZXJpYWxpemFibGUt
Pmhhc0luaGVyaXQoMSk7Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCRpZGVudGlmaWVyIGVxICJhdHRyaWJ1dGUiKSB7Ci0gICAgICAgICAgICAkc2VyaWFsaXph
YmxlLT5oYXNBdHRyaWJ1dGUoMSk7Ci0gICAgICAgICAgICAjIEF0dHJpYnV0ZXMgd2lsbCBiZSBm
aWxsZWQgaW4gdmlhIGFwcGx5TWVtYmVyTGlzdCgpCi0gICAgICAgICAgICBuZXh0OwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVzaChAYXR0cmlidXRlcywgJGlkZW50aWZpZXIpOwotICAgIH0KLQot
ICAgICRzZXJpYWxpemFibGUtPmF0dHJpYnV0ZXMoXEBhdHRyaWJ1dGVzKTsKLX0KLQogc3ViIHBh
cnNlSWRlbnRpZmllckxpc3QKIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwpAQCAtMzI1MywyMyAr
MzEyNyw2IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG5leHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJlZigkaXRlbSkgZXEgIklETFNlcmlhbGl6
YWJsZSIpIHsKLSAgICAgICAgICAgICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSgkaXRlbSk7Ci0g
ICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZSkgewotICAgICAgICBteSAkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPSBA
eyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc307Ci0gICAgICAgIGlmICgkaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSkgewotICAgICAgICAgICAgZm9yZWFj
aCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30sICRhdHRy
aWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2lmICgkbnVtU2VyaWFs
aXplckF0dHJpYnV0ZXMgPT0gMCkgewotICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRl
IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAeyRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUtPm5hbWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5k
aW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVj
dG9ycy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSwxMCBAQCBwYXJ0aWFsIGludGVyZmFj
ZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBbQ29uZGl0aW9uYWw9VEVTVF9DT05ESVRJT05BTF0g
YXR0cmlidXRlIFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yIFRlc3RDYWxsYmFja0lu
dGVyZmFjZTsKICAgICBhdHRyaWJ1dGUgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3IgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOwogICAgIGF0dHJp
YnV0ZSBUZXN0RE9NSklUQ29uc3RydWN0b3IgVGVzdERPTUpJVDsKKyAgICBhdHRyaWJ1dGUgVGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciBUZXN0RGVmYXVsdFRvSlNPTjsKKyAgICBhdHRyaWJ1
dGUgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOworICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvciBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAg
YXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7CiAgICAgYXR0cmlidXRlIFRlc3REb21haW5TZWN1cml0
eUNvbnN0cnVjdG9yIFRlc3REb21haW5TZWN1cml0eTsKICAgICBhdHRyaWJ1dGUgVGVzdEVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvciBUZXN0RW5hYmxlZEJ5U2V0dGluZzsKICAgICBbRW5hYmxl
ZEZvckNvbnRleHQsIFNlY3VyZUNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvciBUZXN0RW5hYmxlZEZvckNvbnRleHQ7CkBAIC01MiwxMCArNTYsNiBAQCBw
YXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUgVGVzdFJl
YWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yIFRlc3RSZWFkT25seU1hcExpa2U7CiAgICAgYXR0cmli
dXRlIFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvciBUZXN0UmVhZE9ubHlTZXRMaWtlOwog
ICAgIGF0dHJpYnV0ZSBUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IgVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdDsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Db25z
dHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbjsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlOwotICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25z
dHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgYXR0cmlidXRlIFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw7CiAgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjF8Q29uZGl0aW9uMl0gYXR0cmlidXRl
IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOwogICAgIGF0dHJpYnV0ZSBUZXN0U2V0TGlrZUNvbnN0
cnVjdG9yIFRlc3RTZXRMaWtlOwogICAgIGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJDb25zdHJ1
Y3RvciBUZXN0U3RyaW5naWZpZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVz
LmRlcAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDIxIEBAIFdlYkRPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci4KIEpT
VGVzdERPTUpJVC5oOiAKIERPTVRlc3RET01KSVQuaDogCiBXZWJET01UZXN0RE9NSklULmg6IAor
SlNUZXN0RGVmYXVsdFRvSlNPTi5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OLmg6IAorV2ViRE9N
VGVzdERlZmF1bHRUb0pTT04uaDogCitKU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oOiAKK0RPTVRl
c3REZWZhdWx0VG9KU09ORW51bS5oOiAKK1dlYkRPTVRlc3REZWZhdWx0VG9KU09ORW51bS5oOiAK
K0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAorRE9NVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pTT05J
bmRpcmVjdEluaGVyaXRhbmNlLmg6IAorSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaDogCitE
T01UZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaDogCitXZWJET01UZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQuaDogCitKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmg6IAorRE9NVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaDogCitXZWJET01UZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbC5oOiAKIEpTVGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6IAogRE9NVGVzdERlcml2ZWRE
aWN0aW9uYXJ5Lmg6IAogV2ViRE9NVGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6IApAQCAtMjAxLDE4
ICsyMTYsNiBAQCBXZWJET01UZXN0UmVhZE9ubHlTZXRMaWtlLmg6IAogSlNUZXN0UmVwb3J0RXh0
cmFNZW1vcnlDb3N0Lmg6IAogRE9NVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oOiAKIFdlYkRP
TVRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaDogCi1KU1Rlc3RTZXJpYWxpemF0aW9uLmg6IAot
RE9NVGVzdFNlcmlhbGl6YXRpb24uaDogCi1XZWJET01UZXN0U2VyaWFsaXphdGlvbi5oOiAKLUpT
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAotRE9NVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAotV2ViRE9NVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlLmg6IAotSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaDogCi1ET01U
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaDogCi1XZWJET01UZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQuaDogCi1KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmg6IAotRE9NVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwuaDogCi1XZWJET01UZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbC5oOiAKIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oOiAKIERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDogCiBXZWJET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVm
YXVsdFRvSlNPTi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK3R5cGVkZWYgZG91YmxlIFRlc3RUaW1lU3RhbXA7CisKK2ludGVyZmFjZSBUZXN0RGVmYXVs
dFRvSlNPTiB7CisgICAgW0VuYWJsZWRBdFJ1bnRpbWU9VGVzdFJ1bnRpbWVFbmFibGVkXXJlYWRv
bmx5IGF0dHJpYnV0ZSBsb25nIGxvbmdBdHRyaWJ1dGU7CisgICAgW0VuYWJsZWRCeVNldHRpbmc9
VGVzdFNldHRpbmddIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBlbmFibGVkQnlT
ZXR0aW5nc0F0dHJpYnV0ZTsKKyAgICBbQ29uZGl0aW9uYWw9VEVTVF9DT05ESVRJT05BTF0gcmVh
ZG9ubHkgYXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09ORW51bSBlbmFibGVkQnlDb25kaXRpb25h
bEF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIGV2ZW50SGFuZGxlckF0dHJp
YnV0ZTsKKworICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgICAgICAgZmlyc3RTdHJpbmdB
dHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBzZWNvbmRMb25n
QXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBUZXN0RXhjZXB0aW9uICAgICAgICAgdGhpcmRVbkpT
T05hYmxlQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZG91YmxlICAgZm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBbQ2xhbXBdIGxv
bmcgICAgICAgICAgZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgVGVz
dFRpbWVTdGFtcCAgICAgICAgIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZTsKKworICAgIGF0dHJpYnV0
ZSBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCBzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxl
QXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWw/IG5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRy
aWJ1dGU7CisKKyAgICBhdHRyaWJ1dGUgRnJvemVuQXJyYXk8Ym9vbGVhbj4gdGVudGhGcm96ZW5B
cnJheUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8RE9NU3RyaW5nPiBlbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbD4gdHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlOworICAg
IGF0dHJpYnV0ZSByZWNvcmQ8RE9NU3RyaW5nLCB1bnNpZ25lZCBzaG9ydD4gdGhpcnRlZW50aFJl
Y29yZEF0dHJpYnV0ZTsKKworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09O
RW51bS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3REZWZhdWx0VG9KU09ORW51bS5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09ORW51bS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2VudW0gVGVzdERlZmF1
bHRUb0pTT05FbnVtIHsKKyAgICAiRW51bVZhbHVlMSIsCisgICAgIkVudW1WYWx1ZTIiCit9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZS5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCitpbnRlcmZhY2UgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
IDogVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IHsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0LmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKK2ludGVyZmFjZSBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgOiBUZXN0RGVmYXVs
dFRvSlNPTiB7CisgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBpbmhlcml0TG9u
Z0F0dHJpYnV0ZTsKKworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaWRsCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitpbnRlcmZhY2UgVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgOiBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgeworICAg
IGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlRm9vOwor
ICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlQmFy
OworCisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKK307CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwJKHJldmlzaW9u
IDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9k
ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDUgKzM1LDUgQEAKICAgICBbU2VjdXJlQ29udGV4
dF0gYm9vbGVhbiBnZXRTZWNyZXRCb29sZWFuKCk7CiAgICAgW0NvbmRpdGlvbmFsPVRFU1RfRkVB
VFVSRSwgU2VjdXJlQ29udGV4dCwgRW5hYmxlZEF0UnVudGltZT1UZXN0RmVhdHVyZV0gYm9vbGVh
biB0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKTsKIAotICAgIHNlcmlhbGl6ZXI7CisgICAg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAyNjY2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTQzNSw4ICs0MzUsNiBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2gi
LCAia2luZGEtbG93CiAKICAgICBzdHJpbmdpZmllciBhdHRyaWJ1dGUgVVNWU3RyaW5nIHN0cmlu
Z2lmaWVyQXR0cmlidXRlOwogCi0gICAgc2VyaWFsaXplciA9IHtjcmVhdGUsIHJlYWRPbmx5U3Ry
aW5nQXR0ciwgZW51bUF0dHIsIGxvbmdBdHRyfTsKLQogICAgIHVuZGVmaW5lZCBidWZmZXJTb3Vy
Y2VQYXJhbWV0ZXIoQnVmZmVyU291cmNlIGRhdGEpOwogCiAgICAgW0xlZ2FjeUNhbGxlcl0gdW5k
ZWZpbmVkIGxlZ2FjeUNhbGxlck5hbWVkKGxvbmcgcGFyYW0pOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRp
b24uaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCShub25leGlzdGVudCkKQEAgLTEsNDUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi10eXBl
ZGVmIGRvdWJsZSBUZXN0VGltZVN0YW1wOwotCi1pbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb24g
ewotICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgICAgICAgZmlyc3RTdHJpbmdBdHRyaWJ1
dGU7Ci0gICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBzZWNvbmRMb25nQXR0cmli
dXRlOwotICAgIGF0dHJpYnV0ZSBUZXN0RXhjZXB0aW9uICAgICAgICAgdGhpcmRVbnNlcmlhbGl6
YWJsZUF0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSAgIGZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAg
ICAgICAgICAgIGZpZnRoTG9uZ0F0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgVGVzdFRpbWVTdGFt
cCAgICAgICAgIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZTsKLQotICAgIGF0dHJpYnV0ZSBUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGU7Ci0gICAgYXR0cmlidXRlIFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSBl
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbD8gbmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
OwotCi0gICAgYXR0cmlidXRlIEZyb3plbkFycmF5PGJvb2xlYW4+IHRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIHNlcXVlbmNlPERPTVN0cmluZz4gZWxldmVudGhTZXF1
ZW5jZUF0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw+IHR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZTsKLQotICAgIHNl
cmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlLmlkbAkobm9uZXhpc3RlbnQpCkBAIC0xLDI3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotaW50ZXJmYWNlIFRl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSA6IFRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCB7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwJKHJldmlz
aW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCShub25leGlzdGVudCkKQEAgLTEsMzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1pbnRlcmZhY2Ug
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IDogVGVzdFNlcmlhbGl6YXRpb24gewotICAgIGF0dHJp
YnV0ZSBsb25nICAgICAgICAgICAgICAgICAgaW5oZXJpdExvbmdBdHRyaWJ1dGU7Ci0KLSAgICBz
ZXJpYWxpemVyID0geyBpbmhlcml0LCBhdHRyaWJ1dGUgfTsKLX07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbC5pZGwJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLWludGVyZmFjZSBUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCA6IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Ci0gICAgYXR0cmli
dXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5hbExvbmdBdHRyaWJ1dGVGb287Ci0gICAgYXR0
cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5hbExvbmdBdHRyaWJ1dGVCYXI7Ci0KLSAg
ICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBmaW5hbExvbmdBdHRyaWJ1dGVCYXIgfTsKLX07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVs
dFRvSlNPTi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTi5o
IgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpT
RE9NQ29udmVydEJvb2xlYW4uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdWxsYWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRSZWNvcmQuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RP
TVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgiCisjaW5jbHVkZSAiSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgorI2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlv
bi5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Q
cm90b3R5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29u
c3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4K
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisj
aWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RW51bWVy
YXRpb24uaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oIgorI2VuZGlmCisK
KworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gRnVuY3Rp
b25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9K
U09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2Fs
bEZyYW1lKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRv
SlNPTkxvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVs
dFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisjaWYgRU5BQkxFKFRFU1Rf
Q09ORElUSU9OQUwpCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFi
bGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworI2VuZGlmCitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UaGly
ZFVuSlNPTmFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRo
aXJkVW5KU09OYWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05GaWZ0aExv
bmdDbGFtcGVkQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0
aExvbmdDbGFtcGVkQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNP
TmFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxl
QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFs
RGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pT
T05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0
cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3Jk
QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSBm
aW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5n
IEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRU
b0pTT05Qcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpT
VGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdERl
ZmF1bHRUb0pTT05Qcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUsIEJhc2UpOworICAgICAgICBy
ZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlLCBK
U1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNUZXN0RGVmYXVs
dFRvSlNPTkNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9K
U09OQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3Qg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0p
OworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVt
cGxhdGU8PiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0
VG9KU09OOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3REZWZhdWx0VG9KU09O
Il9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0
RGVmYXVsdFRvSlNPTiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNo
IHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25z
dHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSwgKGludHB0
cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0
RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAibG9uZ0F0dHJpYnV0ZSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJp
YnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KDApIH0gfSwKKyAgICB7ICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGlu
Z3NBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPigwKSB9IH0sCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisgICAgeyAi
ZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkg
fSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlm
CisgICAgeyAiZXZlbnRIYW5kbGVyQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5k
bGVyQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZSkg
fSB9LAorICAgIHsgImZpcnN0U3RyaW5nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORmlyc3RT
dHJpbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUp
IH0gfSwKKyAgICB7ICJzZWNvbmRMb25nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OU2Vjb25k
TG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0cmlidXRlKSB9
IH0sCisgICAgeyAidGhpcmRVbkpTT05hYmxlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OVGhp
cmRVbkpTT05hYmxlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJs
ZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpIH0gfSwK
KyAgICB7ICJmaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORmlmdGhM
b25nQ2xhbXBlZEF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVk
QXR0cmlidXRlKSB9IH0sCisgICAgeyAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0
VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRy
aWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRl
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUp
IH0gfSwKKyAgICB7ICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09O
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05FaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlKSB9IH0sCisgICAgeyAibmludGhPcHRpb25hbERpcmVjdGx5VG9KU09O
YWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNP
TmFibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5
VG9KU09OYWJsZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJlbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0
cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJp
YnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKSB9IH0s
CisgICAgeyAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9K
U09OVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRoaXJ0ZWVu
dGhSZWNvcmRBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRy
aWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmli
dXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUpIH0gfSwK
KyAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNP
TiksIChpbnRwdHJfdCkgKDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZh
dWx0VG9KU09OUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVm
YXVsdFRvSlNPTlByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6
aW5mbygpLCBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsK
KyAgICBib29sIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSBmYWxzZTsKKyAgICBpZiAo
IVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdFJ1bnRpbWVFbmFi
bGVkRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0
cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigibG9uZ0F0dHJpYnV0ZSIpLCBzdHJs
ZW4oImxvbmdBdHRyaWJ1dGUiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29w
ZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsK
KyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAg
ICB9CisgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygp
LnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3Bl
cnRpZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0
dGluZ3NBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpKTsK
KyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0
eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2Jh
bE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyAgICBpZiAoaGFzRGlzYWJs
ZWRSdW50aW1lUHJvcGVydGllcyAmJiBzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAg
ICAgIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19X
SVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRU
b0pTT046OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OIiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OKSB9
OworCitKU1Rlc3REZWZhdWx0VG9KU09OOjpKU1Rlc3REZWZhdWx0VG9KU09OKFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1
bHRUb0pTT04+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0RGVmYXVsdFRvSlNPTj4o
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisg
ICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdERl
ZmF1bHRUb0pTT04+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVE
T01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0
aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OOjpj
cmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpjcmVhdGUodm0sICZn
bG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9
CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0RGVmYXVsdFRvSlNPTj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUg
SlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNP
Tjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09O
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KGNlbGwpOwor
ICAgIHRoaXNPYmplY3QtPkpTVGVzdERlZmF1bHRUb0pTT046On5KU1Rlc3REZWZhdWx0VG9KU09O
KCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdERlZmF1bHRUb0pTT04qIElETEF0dHJp
YnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIHJldHVybiBqc0R5
bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlu
bGluZSBKU1Rlc3REZWZhdWx0VG9KU09OKiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNP
Tj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYg
Y2FsbEZyYW1lKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pT
T04qPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1
ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRv
SlNPTlByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdERlZmF1bHRUb0pTT046OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBz
ZXRKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05Mb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyaWJ1dGUo
KSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZUdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgImxvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZUdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhp
c09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSgpKSkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGlu
Z3NBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIp
OworfQorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNP
TkVudW0+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNv
bmRpdGlvbmFsQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgImVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlIik7Cit9CisKKyNlbmRpZgorCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJp
YnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0Lndy
YXBwZWQoKSwgZXZlbnROYW1lcygpLmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudCwgd29ybGRGb3JE
T01PYmplY3QodGhpc09iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVs
dFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImV2ZW50SGFuZGxl
ckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmVudEhhbmRsZXJBdHRyaWJ1
dGVFdmVudCwgdmFsdWUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2
YWx1ZSk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUodmFsdWUpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05F
dmVudEhhbmRsZXJBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1
bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0Rmlyc3RTdHJpbmdBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0
dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0
KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3RE
ZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNlY29uZExv
bmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGlt
cGwuc2V0U2Vjb25kTG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNlY29u
ZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOworfQor
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJs
ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRl
c3RFeGNlcHRpb24+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC50aGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUoKSkpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVB
dHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0aGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFi
bGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPFRlc3RFeGNlcHRpb24+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlc3REZWZhdWx0VG9KU09OIiwgInRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhj
ZXB0aW9uIik7IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRUaGlyZFVuSlNPTmFibGVBdHRyaWJ1
dGUoKm5hdGl2ZVZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBz
ZXRKU1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJs
ZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAidGhpcmRVbkpTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZh
dWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRU
b0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxq
c1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVu
cmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1
cm4gaW1wbC5zZXRGb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdD
bGFtcGVkQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExDbGFtcEFk
YXB0b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlm
dGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEZpZnRoTG9uZ0Ns
YW1wZWRBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVk
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVs
dFRvSlNPTkZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5
cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERvdWJsZT4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1
dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5
cGVkZWZBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91Ymxl
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFNpeHRo
VHlwZWRlZkF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRU
b0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpOworfQorCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRv
SlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVy
ZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+KGxleGljYWxHbG9iYWxPYmplY3Qs
ICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJl
Y3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNP
Tj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJp
YnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgInNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRo
RGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdERlZmF1bHRUb0pTT04iLCAic2V2
ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSIsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbCIpOyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0U2V2ZW50aERpcmVjdGx5VG9KU09O
YWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxl
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVs
dFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNldmVudGhEaXJlY3RseVRv
SlNPTmFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERl
ZmF1bHRUb0pTT05FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZh
dWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05FaWdodGhJbmRpcmVjdGx5QXR0cmli
dXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNl
PFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdERlZmF1bHRUb0pTT04iLCAiZWlnaHRoSW5kaXJlY3Rs
eUF0dHJpYnV0ZSIsICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsgfSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Cisg
ICAgICAgIHJldHVybiBpbXBsLnNldEVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKm5hdGl2ZVZh
bHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9K
U09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRl
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJl
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVs
dFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVm
YXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5
VG9KU09OYWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3Rs
eVRvSlNPTmFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFj
ZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlc3REZWZhdWx0VG9KU09OIiwgIm5pbnRoT3B0aW9uYWxEaXJlY3Rs
eVRvSlNPTmFibGVBdHRyaWJ1dGUiLCAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiKTsg
fSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0
cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7
CisgICAgICAgIHJldHVybiBpbXBsLnNldE5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVB
dHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlU
b0pTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5p
bnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRl
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFu
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwudGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0
VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRl
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRy
aWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERl
ZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRnJvemVuQXJyYXk8
SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGlt
cGwuc2V0VGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Cisg
ICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNl
dDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVNldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7
CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3Qs
ICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2Vx
dWVuY2VBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRv
SlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZh
dWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVsZXZl
bnRoU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0RWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09O
RWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpOworfQor
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2Vx
dWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5j
ZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1
cm4gaW1wbC5zZXRUd2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0aEludGVy
ZmFjZVNlcXVlbmNlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRo
UmVjb3JkQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8
SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGhpcnRlZW50aFJlY29y
ZEF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09O
VGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRU
b0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGhpcnRlZW50
aFJlY29yZEF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMVW5zaWduZWRTaG9ydD4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0VGhpcnRl
ZW50aFJlY29yZEF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhS
ZWNvcmRBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGhpcnRlZW50aFJlY29yZEF0dHJp
YnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRU
b0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdERlZmF1bHRUb0pTT04qIGNhc3RlZFRoaXMp
Cit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxP
YmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdFJ1bnRp
bWVFbmFibGVkRW5hYmxlZCgpKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyaWJ1dGUoKSkpOwor
ICAgIH0KKyAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZWRCeVNldHRpbmdz
QXR0cmlidXRlIiksIHRvSlM8SURMVW5zaWduZWRTaG9ydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpOworICAgIH0K
KyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRl
IiksIHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT05FbnVtPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1
dGUoKSkpOworI2VuZGlmCisKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiksIHRvSlM8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2Vjb25kTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlIiksIHRvSlM8SURM
Q2xhbXBBZGFwdG9yPElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIp
LCB0b0pTPElETERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
c2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51
bGxhYmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhG
cm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1
dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSIpLCB0b0pTPElETFJlY29yZDxJRExET01TdHJp
bmcsIElETFVuc2lnbmVkU2hvcnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1
dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNP
Tj46OmNhbGw8anNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30KKworSlNDOjpJ
c29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNw
YWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT04uZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERl
ZmF1bHRUb0pTT04+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OOjpuZWVkc0Rlc3RydWN0aW9uKTsK
KyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04+KQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNF
X0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBK
U1Rlc3REZWZhdWx0VG9KU09OKTsKKyAgICBlbHNlCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT04gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BB
Q0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0
VG9KU09OKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT04uZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYg
KCZKU1Rlc3REZWZhdWx0VG9KU09OOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lH
Tk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVm
YXVsdFRvSlNPTjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNP
Tio+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0
aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJs
ICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygp
KTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKK2Jvb2wgSlNU
ZXN0RGVmYXVsdFRvSlNPTk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKiogcmVhc29uKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVO
VVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyOjpmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBh
dXRvKiBqc1Rlc3REZWZhdWx0VG9KU09OID0gc3RhdGljX2Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNP
Tio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNf
Y2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3Js
ZCwgJmpzVGVzdERlZmF1bHRUb0pTT04tPndyYXBwZWQoKSwganNUZXN0RGVmYXVsdFRvSlNPTik7
Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQg
KCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0RGVmYXVsdFRvSlNPTkBXZWJDb3JlQEA2QkAi
KVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3Jl
MTdUZXN0RGVmYXVsdFRvSlNPTkVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBsKQoreworCisjaWYg
RU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIGNvbnN0IHZvaWQqIGFjdHVhbFZUYWJsZVBv
aW50ZXIgPSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkpOworI2lmIFBMQVRGT1JNKFdJTikK
KyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBfX2lkZW50aWZpZXIoIj8/XzdUZXN0
RGVmYXVsdFRvSlNPTkBXZWJDb3JlQEA2QkAiKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRW
VGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUxN1Rlc3REZWZhdWx0VG9KU09ORVsyXTsKKyNl
bmRpZgorCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0RGVmYXVsdFRvSlNPTiBkb2VzIG5vdCBo
YXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRp
b25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvbHltb3JwaGljPFRlc3REZWZhdWx0VG9KU09OPjo6dmFs
dWUsICJUZXN0RGVmYXVsdFRvSlNPTiBpcyBub3QgcG9seW1vcnBoaWMiKTsKKworICAgIC8vIElm
IHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUg
YnVnLCBvcgorICAgIC8vIFRlc3REZWZhdWx0VG9KU09OIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0
RGVmYXVsdFRvSlNPTiBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0
b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdERlZmF1bHRUb0pTT04geW91IHRvIG9wdCBv
dXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVW
YWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAg
UkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50
ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdERlZmF1bHRUb0pTT04+
KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3REZWZhdWx0VG9KU09OJiBpbXBsKQoreworICAgIHJldHVybiB3
cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RE
ZWZhdWx0VG9KU09OKiBKU1Rlc3REZWZhdWx0VG9KU09OOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAm
d3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
Ti5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdERlZmF1bHRU
b0pTT04uaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OIDogcHVibGljIEpTRE9NV3JhcHBl
cjxUZXN0RGVmYXVsdFRvSlNPTj4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdy
YXBwZXI8VGVzdERlZmF1bHRUb0pTT04+OworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09O
KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmIGltcGwpCisgICAgeworICAgICAg
ICBKU1Rlc3REZWZhdWx0VG9KU09OKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdERlZmF1bHRUb0pTT04+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0
RGVmYXVsdFRvSlNPTihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwor
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVBy
b3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0
YXRpYyBUZXN0RGVmYXVsdFRvSlNPTiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CisgICAgfQorCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNj
ZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2
bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNj
ZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyB2b2lkIGFu
YWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7Citwcm90ZWN0ZWQ6CisgICAg
SlNUZXN0RGVmYXVsdFRvSlNPTihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
UmVmPFRlc3REZWZhdWx0VG9KU09OPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyIDogcHVibGljIEpT
Qzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7CisgICAgdmlydHVhbCB2b2lkIGZp
bmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKwor
aW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxk
JiwgVGVzdERlZmF1bHRUb0pTT04qKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rl
c3REZWZhdWx0VG9KU09OT3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9
CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3REZWZhdWx0VG9KU09OKiB3cmFwcGFibGVP
YmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdERlZmF1
bHRUb0pTT04mKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0RGVmYXVsdFRvSlNPTiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxP
YmplY3QqLCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0RGVmYXVsdFRvSlNP
Tj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVs
bCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxU
ZXN0RGVmYXVsdFRvSlNPTj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdERlZmF1
bHRUb0pTT047CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3REZWZhdWx0VG9K
U09OKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05FbnVtLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkVudW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05FbnVtLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCitTdHJpbmcgY29u
dmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdERlZmF1bHRUb0pTT05FbnVtIGVudW1lcmF0aW9u
VmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdmFsdWVz
W10gPSB7CisgICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFbnVtVmFsdWUxIiksCisg
ICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJFbnVtVmFsdWUyIiksCisgICAgfTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdERlZmF1bHRUb0pTT05FbnVt
OjpFbnVtVmFsdWUxKSA9PSAwLCAiVGVzdERlZmF1bHRUb0pTT05FbnVtOjpFbnVtVmFsdWUxIGlz
IG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXpl
X3Q+KFRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMikgPT0gMSwgIlRlc3REZWZhdWx0
VG9KU09ORW51bTo6RW51bVZhbHVlMiBpcyBub3QgMSBhcyBleHBlY3RlZCIpOworICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdU
SCh2YWx1ZXMpKTsKKyAgICByZXR1cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVy
YXRpb25WYWx1ZSldOworfQorCit0ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRp
b25Ub0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBUZXN0RGVmYXVsdFRv
SlNPTkVudW0gZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhl
bnVtZXJhdGlvblZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdERlZmF1bHRU
b0pTT05FbnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09ORW51bT4oSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTEiKQorICAgICAgICByZXR1cm4gVGVz
dERlZmF1bHRUb0pTT05FbnVtOjpFbnVtVmFsdWUxOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAi
RW51bVZhbHVlMiIpCisgICAgICAgIHJldHVybiBUZXN0RGVmYXVsdFRvSlNPTkVudW06OkVudW1W
YWx1ZTI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8PiBjb25zdCBj
aGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3REZWZhdWx0VG9KU09ORW51bT4oKQor
eworICAgIHJldHVybiAiXCJFbnVtVmFsdWUxXCIsIFwiRW51bVZhbHVlMlwiIjsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVt
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkpTRE9NQ29udmVydEVudW1lcmF0aW9uLmgiCisjaW5jbHVkZSAiVGVzdERlZmF1bHRUb0pTT05F
bnVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlv
blRvU3RyaW5nKFRlc3REZWZhdWx0VG9KU09ORW51bSk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNTdHJp
bmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFRlc3REZWZh
dWx0VG9KU09ORW51bSk7CisKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdERlZmF1bHRUb0pTT05F
bnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09ORW51bT4oSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXM8VGVzdERlZmF1bHRUb0pTT05FbnVtPigpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0
RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKworI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlckNhY2hlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFw
QW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisK
K2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlIGZp
bmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVj
dFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlUHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVBy
b3RvdHlwZTo6QmFzZSk7CisKK3VzaW5nIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT47CisKK3RlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yOjpwcm90
b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Ojpn
ZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgIlRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSJfcyksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IlRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJv
dG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsg
ImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VD
b25zdHJ1Y3RvcikgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OmluZm8oKSwgSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIEpT
Q19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnNfaW5mbyA9IHsgIlRl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UpIH07CisKK0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4mJiBpbXBsKQorICAgIDogSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9
CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNT
RVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNf
YmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVj
dF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01P
YmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZTo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoVk0m
IHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBn
ZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNv
bnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29s
IHNldEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Cisg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCit7CisgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAg
IGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2U+KQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RE
ZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UpOworICAg
IGVsc2UKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZSk7CisgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKK0lHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpTVGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9X
QVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIu
c2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7Cisg
ICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5h
bHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFw
KGNlbGwsIGFuYWx5emVyKTsKK30KKworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaCIKKyNp
bmNsdWRlICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZSA6IHB1YmxpYyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OworICAgIHVzaW5nIERPTVdy
YXBwZWQgPSBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U7CisgICAgc3RhdGlj
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKiBjcmVhdGUoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4mJiBpbXBsKQorICAgIHsKKyAgICAg
ICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2U+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2Uoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAg
ICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQ
cm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKworICAg
IERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CisgICAg
fQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1
YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1
YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CisgICAgfQorICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CisgICAgVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlJiB3cmFwcGVkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UmPihCYXNlOjp3cmFwcGVkKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZShKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4m
Jik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZT4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVy
blR5cGUgPSBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UqOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisKKyNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCb29sZWFuLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVsbGFibGUu
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0UmVjb3JkLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVuY2VzLmgiCisjaW5jbHVk
ZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTRE9NT3Bl
cmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUgIkpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
QXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05B
TCkKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTVGVz
dERlZmF1bHRUb0pTT05FbnVtLmgiCisjZW5kaWYKKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1
c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlRnVuY3Rp
b25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisKKy8vIEF0
dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmpl
Y3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSwgQmFzZSk7Cisg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQ
cm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0
dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
K307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdFByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU6
OkJhc2UpOworCit1c2luZyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yID0g
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQ+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25z
dHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9K
U09OOjpnZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPD4g
dm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdCJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBs
YXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICov
CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgImluaGVyaXRMb25nQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRvSlNP
TiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlv
biksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlv
bj4oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChp
bnRwdHJfdCkgKDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0s
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjppbmZvKCksIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0UHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RB
R19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0OjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0KSB9OworCitKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+JiYg
aW1wbCkKKyAgICA6IEpTVGVzdERlZmF1bHRUb0pTT04oc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQo
IXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dD46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0g
ZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmpl
Y3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpjcmVh
dGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZTo6Y3JlYXRlKHZt
LCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OOjpwcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0Ojpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQ+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0KiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQ+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdCogSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
JiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1l
LnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+
Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
eworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQmIHRoaXNPYmplY3QpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJp
dExvbmdBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD46OmdldDxq
c1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0SW5oZXJpdExvbmdBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKTsKK30KKwor
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqIGNhc3RlZFRoaXMp
Cit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxP
YmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdFJ1bnRp
bWVFbmFibGVkRW5hYmxlZCgpKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyaWJ1dGUoKSkpOwor
ICAgIH0KKyAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZWRCeVNldHRpbmdz
QXR0cmlidXRlIiksIHRvSlM8SURMVW5zaWduZWRTaG9ydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpOworICAgIH0K
KyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRl
IiksIHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT05FbnVtPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1
dGUoKSkpOworI2VuZGlmCisKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiksIHRvSlM8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2Vjb25kTG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlIiksIHRvSlM8SURM
Q2xhbXBBZGFwdG9yPElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIp
LCB0b0pTPElETERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
c2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51
bGxhYmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhG
cm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1
dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSIpLCB0b0pTPElETFJlY29yZDxJRExET01TdHJp
bmcsIElETFVuc2lnbmVkU2hvcnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1
dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQ+OjpjYWxsPGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pT
T05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIpOworfQor
CitKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBj
bGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpKQorICAgICAgICByZXR1cm4g
c3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4gfHwgIUpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0OjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0PikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2
bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0KTsKKyAgICBlbHNlCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCisgICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMp
CisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJu
IHNwYWNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCo+KGNlbGwpOworICAg
IGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFw
cGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisg
ICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjph
bmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpT
VGVzdERlZmF1bHRUb0pTT04uaCIKKyNpbmNsdWRlICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdCA6IHB1YmxpYyBKU1Rlc3REZWZhdWx0VG9KU09OIHsKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlID0gSlNUZXN0RGVmYXVsdFRvSlNPTjsKKyAgICB1c2luZyBET01XcmFwcGVkID0gVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0OworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+JiYgaW1wbCkKKyAgICB7
CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KHN0cnVjdHVyZSwgKmds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBp
ZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBK
U0M6OkhlYXBBbmFseXplciYpOworICAgIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCYgd3JhcHBl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0Jj4oQmFzZTo6d3JhcHBlZCgpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+JiYpOworCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+IHsKKyAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDsKKyAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsLmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpT
RE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRC
b29sZWFuLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0TnVsbGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0UmVjb3JkLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
U2VxdWVuY2VzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5o
IgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2Fj
aGUuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5o
IgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaCIKKyNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50
RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1
Y3Rvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBF
TkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRFbnVtZXJhdGlv
bi5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05FbnVtLmgiCisjZW5kaWYKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBGdW5jdGlvbnMK
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpDYWxsRnJhbWUqKTsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25n
QXR0cmlidXRlRm9vKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVC
YXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90
eXBlIGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpT
Qzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hB
UkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSwgQmFzZSk7Cisg
ICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxQcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Io
dm0sICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWw6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+
IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHBy
b3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0
cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0
b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpIH0gfSwKKyAg
ICB7ICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVGb28pLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmlu
YWxMb25nQXR0cmlidXRlRm9vKSB9IH0sCisgICAgeyAiZmluYWxMb25nQXR0cmlidXRlQmFyIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKSwgKGludHB0
cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcikgfSB9LAorICAg
IHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRp
dmVGdW5jdGlvbj4oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJv
dG90eXBlKSB9OworCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsOjppbmZvKCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5
cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJB
TlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbDo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpIH07CisKK0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWw6OkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbD4mJiBpbXBsKQorICAgIDogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOworCisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9i
amVjdCwgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Ojp2YWx1ZSwgIkludGVyZmFjZSBp
cyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0
aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2JqZWN0
KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmpl
Y3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbDo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3Qg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yPih2bSwgKmpz
Q2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit0ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKiBJRExBdHRyaWJ1
dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OmNhc3QoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKj4oSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bCogSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+OjpjYXN0KEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkK
K3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFs
dWUoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90
b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHBy
b3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFBy
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUZvbygpKSkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlRm9vKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZpbmFs
TG9uZ0F0dHJpYnV0ZUZvbyIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb1NldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEZpbmFsTG9uZ0F0dHJpYnV0ZUZv
byhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6c2V0PHNldEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpbmFsTG9uZ0F0
dHJpYnV0ZUZvbyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCYg
dGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSkpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJh
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaW5hbExvbmdBdHRy
aWJ1dGVCYXIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1dGVCYXIoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OnNldDxzZXRKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVC
YXIiKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgeworICAgICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvbmdBdHRyaWJ1
dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5sb25nQXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRvd25jYXN0PERvY3VtZW50Pihq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkp
IHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pTPElETFVuc2lnbmVkU2hvcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeVNldHRpbmdz
QXR0cmlidXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVk
QnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1lcmF0aW9uPFRlc3REZWZhdWx0
VG9KU09ORW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJs
ZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgorCisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0
ZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCB0b0pT
PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExv
bmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIHRvSlM8
SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlmdGhMb25nQ2xhbXBl
ZEF0dHJpYnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJz
aXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGly
ZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxl
QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5laWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVB
dHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05h
YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96
ZW5BcnJheTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRl
KCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExET01T
dHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHdlbGZ0aElu
dGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNl
PFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVy
ZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUiKSwgdG9K
UzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNob3J0Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50
aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIHRvSlM8
SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExv
bmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIiksIHRvSlM8SURMTG9uZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9v
KCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlv
blRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsPjo6Y2FsbDxqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
InRvSlNPTiIpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCit7CisgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwor
ICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6Om5lZWRz
RGVzdHJ1Y3Rpb24pOworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4pCisg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwg
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsKK0lHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VO
RAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwo
Y2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNl
bGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCku
c3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKwor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQuaCIKKyNpbmNsdWRlICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwgOiBwdWJsaWMgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgeworcHVibGljOgorICAgIHVz
aW5nIEJhc2UgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDsKKyAgICB1c2luZyBET01XcmFw
cGVkID0gVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7CisgICAgc3RhdGljIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWw+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RG
TW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52
bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Jik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9u
QXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3Io
SlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKG1v
ZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAgIH0K
KyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOworICAgIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsJiB3cmFwcGVkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbCY+KEJhc2U6OndyYXBwZWQoKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4mJik7CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPiB7
CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bDsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIkpTVGVzdENhbGxUcmFjZXIuaCIKICNp
bmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkpTVGVzdERPTUpJVC5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT04uaCIKKyNpbmNs
dWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUg
IkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbC5oIgogI2luY2x1ZGUgIkpTVGVzdERvbWFpblNlY3VyaXR5LmgiCiAj
aW5jbHVkZSAiSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oIgogI2luY2x1ZGUgIkpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0LmgiCkBAIC04NCwxMCArODgsNiBAQAogI2luY2x1ZGUgIkpTVGVzdFJlYWRP
bmx5TWFwTGlrZS5oIgogI2luY2x1ZGUgIkpTVGVzdFJlYWRPbmx5U2V0TGlrZS5oIgogI2luY2x1
ZGUgIkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oIgotI2luY2x1ZGUgIkpTVGVzdFNlcmlh
bGl6YXRpb24uaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZS5oIgotI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgiCi0jaW5jbHVk
ZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIgogI2luY2x1ZGUgIkpTVGVzdFNl
dExpa2UuaCIKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllci5oIgogI2luY2x1ZGUgIkpTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmgiCkBAIC0xOTEsNiArMTkxLDE0IEBAIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGUKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwpAQCAtMjgxLDE0ICsyODksNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlv
bkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwpAQCAtMzIw
LDEzICszMjAsMTMgQEAgdXNpbmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IgPSBKUwog
CiAvKiBIYXNoIHRhYmxlICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2OF0gPSB7CitzdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjddID0g
ewogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MCwgLTEgfSwKKyAgICB7IDQ0LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAwLCAtMSB9LAotICAgIHsgOCwgMjYzIH0sCi0gICAgeyA0NCwg
LTEgfSwKKyAgICB7IDgsIC0xIH0sCisgICAgeyA0OCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTMzNCwxMSArMzM0LDExIEBAIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU0LCAtMSB9LAorICAgIHsg
NTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCi0gICAgeyAyMywgLTEgfSwKKyAgICB7IDI3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzU2LDE0ICszNTYsMTQgQEAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzQsIC0xIH0sCisgICAgeyAz
OCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA3MSwgLTEgfSwKLSAg
ICB7IDEzLCAyNTggfSwKKyAgICB7IDE3LCAyNTkgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM3MSw4ICszNzEsOCBAQCBzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzOCwgLTEgfSwKLSAgICB7IDIwLCAyNjQg
fSwKKyAgICB7IDQyLCAtMSB9LAorICAgIHsgMjQsIDI2MyB9LAogICAgIHsgMTAsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzg0LDE0ICszODQsMTQgQEAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzYsIC0xIH0sCisgICAgeyA0
MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAg
ICB7IDIyLCAyNjUgfSwKKyAgICB7IDI2LCAyNjQgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQxMyw1OCArNDEzLDU3IEBAIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI0LCAyNTYgfSwKKyAgICB7IDE0LCAy
NTYgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNjEsIC0xIH0sCi0gICAgeyAxOSwgLTEgfSwK
KyAgICB7IDIzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDQ2LCAtMSB9LAotICAgIHsgMTgsIC0xIH0sCisgICAgeyA1MCwgLTEgfSwKKyAgICB7IDIyLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzNSwgLTEgfSwKKyAgICB7IDM5LCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDQsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMTMsIC0xIH0sCisgICAgeyA1NCwgLTEgfSwKKyAg
ICB7IDI5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MCwgLTEgfSwKLSAgICB7IDI1
LCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyLCAyNjcgfSwKLSAgICB7IDM3LCAtMSB9
LAorICAgIHsgMiwgMjY2IH0sCisgICAgeyA0MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIxLCAtMSB9LAorICAgIHsgMjUs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTgsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
KyAgICB7IDM1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MiwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAorICAgIHsgNDYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUzLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNCwgLTEgfSwKKyAgICB7IDU3LCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCisgICAgeyAxOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ3Myw2ICs0NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAxNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDgzLDggKzQ4Myw4IEBAIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDMyLCAtMSB9LAotICAgIHsgMjksIDI2
MiB9LAorICAgIHsgMzYsIC0xIH0sCisgICAgeyAzMywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDk0LDcgKzQ5NCw3IEBAIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE2LCAyNTcgfSwKKyAgICB7IDIw
LCAyNTggfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNjIsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKQEAgLTUwNSw5ICs1MDUsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyAzMywgMjY2IH0sCisgICAgeyAzNywgMjY1IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAg
ICB7IDE3LCAtMSB9LAorICAgIHsgMjEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDY1
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01MjgsMTEgKzUyOCwxMSBAQCBzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1NiwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAg
eyAzLCAtMSB9LAorICAgIHsgMTYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01NTAsNDEgKzU1MCw0MCBAQCBzdGF0aWMgY29uc3Qg
c3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0OCwgMjYxIH0sCi0gICAgeyAxMSwgMjYwIH0s
CisgICAgeyA1MiwgMjYyIH0sCisgICAgeyAxMSwgMjYxIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IDYzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NywgLTEgfSwKKyAgICB7IDUx
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNSwgLTEgfSwKKyAgICB7IDE5LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAyNiwgLTEgfSwKKyAgICB7IDMwLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI4LCAtMSB9LAorICAgIHsgMzIsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDUsIC0xIH0sCisgICAg
eyA0OSwgLTEgfSwKICAgICB7IDcsIC0xIH0sCi0gICAgeyA1MSwgLTEgfSwKKyAgICB7IDU1LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwKKyAgICB7IDU2LCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCi0gICAgeyAyNywgMjU5IH0sCi0gICAgeyAzMCwgLTEgfSwKLSAgICB7IDM5LCAt
MSB9LAotICAgIHsgNDEsIC0xIH0sCisgICAgeyAyOCwgMjU3IH0sCisgICAgeyAzMSwgMjYwIH0s
CisgICAgeyAzNCwgLTEgfSwKICAgICB7IDQzLCAtMSB9LAotICAgIHsgNDksIC0xIH0sCi0gICAg
eyA1NSwgLTEgfSwKLSAgICB7IDU3LCAtMSB9LAorICAgIHsgNDUsIC0xIH0sCisgICAgeyA0Nywg
LTEgfSwKKyAgICB7IDUzLCAtMSB9LAogICAgIHsgNTksIC0xIH0sCiAgICAgeyA2NCwgLTEgfSwK
ICAgICB7IDY4LCAtMSB9LApAQCAtNjE1LDYgKzYxNCwxMCBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0R2xvYmFsCiAjZW5kaWYKICAgICB7ICJUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0
RE9NSklUIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJU
ZXN0RGVmYXVsdFRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29u
c3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWxDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RG9tYWluU2VjdXJpdHki
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9y
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IpIH0gfSwK
ICAgICB7ICJUZXN0RW5hYmxlZEJ5U2V0dGluZyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0
VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RF
bmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RXZlbnRDb25zdHJ1
Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3IpIH0gfSwKQEAgLTY2NSwxMCArNjY4LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdEdsb2JhbAogICAgIHsgIlRlc3RSZWFkT25seU1hcExpa2UiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RS
ZWFkT25seVNldExpa2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNl
dExpa2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VD
b25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3Rv
ciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3Rv
cikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcikgfSB9LAot
ICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcikgfSB9LAogI2lmIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKICAgICB7ICJUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpIH0gfSwKICNl
bHNlCkBAIC0xMjEwLDYgKzEyMDksOTggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RE9NSklUQ29ucwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvclNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdERPTUpJVCIp
OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1
bHRUb0pTT05Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTjo6
Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04iKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0
b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0RGVmYXVsdFRvSlNPTiIpLCBzdHJsZW4oIlRlc3REZWZhdWx0VG9KU09OIikpLCB2YWx1ZSk7
Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04iKTsKK30KKworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVy
biBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVj
dG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0
PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9y
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgcmV0dXJuIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
KyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwiKSwgc3RybGVuKCJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIpKSwg
dmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0
b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
QEAgLTIyMTEsOTggKzIzMDIsNiBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBv
cnRFeHRyCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9y
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJl
dHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3Ry
dWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0U2VyaWFs
aXphdGlvbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uIiksIHN0cmxlbigiVGVz
dFNlcmlhbGl6YXRpb24iKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0
U2VyaWFsaXphdGlvbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2VDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3Ry
bGVuKCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKLX0K
LQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwotfQotCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
LXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvckdldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dCIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSwgc3Ry
bGVuKCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpOwotfQot
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbENvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwi
KTsKLX0KLQogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYw
LDEyIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFC
TEUoVEVTVF9GRUFUVVJFKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKICNlbmRpZgorSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTE1MCwxMSArMTUwLDExIEBAIHN0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHIKICNlbHNlCiAgICAgeyAwLCAw
LCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRpZgorICAgIHsgInRvSlNPTiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsg
ImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAoaW50cHRyX3Qp
ICgwKSB9IH0sCiAgICAgeyAia2V5cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyks
IChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJmb3JFYWNoIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9LAotICAg
IHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRp
dmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90
KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNf
aW5mbyA9IHsgIlRlc3ROb2RlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwpAQCAtMzgzLDYgKzM4Mywy
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQCiAKICNlbmRpZgog
CitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSosIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5uYW1lKCkpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNP
TkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Cit9CisK
IHN0cnVjdCBUZXN0Tm9kZUl0ZXJhdG9yVHJhaXRzIHsKICAgICBzdGF0aWMgY29uc3RleHByIEpT
RE9NSXRlcmF0b3JUeXBlIHR5cGUgPSBKU0RPTUl0ZXJhdG9yVHlwZTo6U2V0OwogICAgIHVzaW5n
IEtleVR5cGUgPSB2b2lkOwpAQCAtNDg2LDI5ICs1MDIsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0CiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2Rl
Pjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQ2FsbGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImZvckVhY2giKTsKIH0KIAotSlNDOjpKU09iamVj
dCogSlNUZXN0Tm9kZTo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIG5hbWVWYWx1ZSA9IGpz
VGVzdE5vZGVOYW1lR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwgbmFtZVZhbHVlKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0Tm9kZSogdGhpc09iamVjdCkKLXsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
blRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgInRvSlNPTiIpOwotfQotCiBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RO
b2RlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5oCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9y
KEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0Tm9kZSYgdGhp
c09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlND
OjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlND
OjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9u
IDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk0LDcgKzE1OTQsNiBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRv
V29ya2VyRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24oSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAogLy8gQXR0cmlidXRlcwogCkBAIC0yMzM0LDcgKzIzMzMs
NiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvCiAgICAgeyAiY29u
ZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiksIChpbnRwdHJfdCkgKDAp
IH0gfSwKICAgICB7ICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rp
b24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rp
b24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRv
d0FuZFdvcmtlckZ1bmN0aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgInRvU3RyaW5n
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9u
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKSwgKGludHB0cl90KSAoMCkgfSB9
LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxS
YXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50
cHRyX3QpICgwKSB9IH0sCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgeyAiQ09ORElUSU9O
QUxfQ09OU1QiLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDb25zdGFu
dEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDApIH0gfSwKICNlbHNlCkBAIC05
NDAxLDQxICs5Mzk5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJ0b1N0cmluZyIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6
ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSk7Ci0KLSAgICBhdXRvIGNyZWF0ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRlR2V0dGVyKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImNyZWF0ZSIpLCBjcmVhdGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHJlYWRPbmx5U3Ry
aW5nQXR0clZhbHVlID0ganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpLCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7Ci0KLSAg
ICBhdXRvIGVudW1BdHRyVmFsdWUgPSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJlbnVtQXR0ciIpLCBlbnVtQXR0clZhbHVlKTsKLQotICAgIGF1dG8gbG9uZ0F0dHJWYWx1ZSA9
IGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qp
OwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvbmdBdHRyIiksIGxvbmdBdHRy
VmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6c2VyaWFsaXplKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KIEpTQzo6SXNvU3Vic3BhY2Uq
IEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmgJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVC
YXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUxOwogICAgIG11dGFibGUgSlND
OjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0ZTI7CiAjaWYgRU5B
QkxFKENPTkRJVElPTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAJKHJldmlz
aW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2NyArMCwwIEBACi0v
KgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJK
U1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgot
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgotI2luY2x1
ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxh
YmxlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgotI2luY2x1ZGUgIkpTRE9N
Q29udmVydFNlcXVlbmNlcy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKLSNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01HbG9iYWxP
YmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlckNhY2hlLmgiCi0jaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKLSNpbmNsdWRlICJKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0hlYXBBbmFseXplci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi0vLyBGdW5jdGlvbnMKLQot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90
b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUq
KTsKLQotLy8gQXR0cmlidXRlcwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmly
c3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0
U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVu
dGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJy
YXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5j
ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUg
ZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2lu
ZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxp
emF0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RT
ZXJpYWxpemF0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlLCBCYXNlKTsKLSAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAgIH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSwg
SlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlh
bGl6YXRpb25Db25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpT
VGVzdFNlcmlhbGl6YXRpb24+OwotCi10ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXph
dGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZt
KTsKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Ci19Ci0KLXRl
bXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFs
aXphdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0U2VyaWFsaXphdGlv
biJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVz
dFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfTsKLQotLyogSGFz
aCB0YWJsZSBmb3IgcHJvdG90eXBlICovCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29u
c3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfSB9LAotICAgIHsgImZpcnN0U3RyaW5nQXR0cmli
dXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3Rv
bUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJzZWNvbmRMb25nQXR0cmli
dXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3Rv
bUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6
YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKSB9IH0sCi0gICAgeyAidGhpcmRVbnNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUp
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAot
ICAgIHsgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlv
bkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25G
b3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJmaWZ0aExvbmdB
dHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKSB9IH0sCi0gICAgeyAic2l4dGhUeXBlZGVmQXR0
cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInNldmVudGhEaXJl
Y3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJlaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKSB9IH0sCi0gICAgeyAibmlu
dGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
TmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFs
aXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAot
ICAgIHsgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZy
b3plbkFycmF5QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJp
YWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25F
bGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKSB9IH0sCi0gICAgeyAidHdlbGZ0aEludGVyZmFjZVNl
cXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmli
dXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0
dHJpYnV0ZSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxp
emF0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKSB9OwotCi12b2lkIEpTVGVzdFNlcmlh
bGl6YXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uOjppbmZvKCksIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVUYWJsZVZh
bHVlcywgKnRoaXMpOwotICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigp
OwotfQotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbjo6c19pbmZvID0geyAi
VGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb24pIH07Ci0KLUpTVGVzdFNlcmlhbGl6
YXRpb246OkpTVGVzdFNlcmlhbGl6YXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKQot
ICAgIDogSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemF0aW9uPihzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFz
dGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbj46OnZhbHVl
LCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91
Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7Ci0K
LX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OmNyZWF0ZVByb3RvdHlwZShWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVz
dFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVz
dFNlcmlhbGl6YXRpb246OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0
aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9u
OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25D
b25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpKTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQotewotICAgIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNU
ZXN0U2VyaWFsaXphdGlvbjo6fkpTVGVzdFNlcmlhbGl6YXRpb24oKTsKLX0KLQotdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6
YXRpb24+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2Vy
aWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6
YXRpb24qIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FzdChKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCi17Ci0gICAg
cmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJv
dG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlw
ZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXph
dGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwot
fQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5n
QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUo
KSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5n
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5n
QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJp
YnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0Rmlyc3RTdHJp
bmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25G
aXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9u
JiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46
OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAg
ICAgcmV0dXJuIGltcGwuc2V0U2Vjb25kTG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNl
dDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJp
YnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRo
aXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGhpcmRVbnNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
VGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlh
bGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwg
InRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAg
ICAgcmV0dXJuIGltcGwuc2V0VGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFs
dWUpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6
YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRy
aWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpz
VGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5y
ZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpj
YWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVy
biBpbXBsLnNldEZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOwot
fQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUoKSkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJp
YWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
ewotICAgICAgICByZXR1cm4gaW1wbC5zZXRGaWZ0aExvbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlv
bj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaWZ0aExvbmdB
dHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0aFR5cGVk
ZWZBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRp
b25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRy
aWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25T
aXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBs
LnNldFNpeHRoVHlwZWRlZkF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRo
VHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVz
dFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIp
OwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNldmVudGhE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
c2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNz
ZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVz
dFNlcmlhbGl6YXRpb24iLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwg
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5z
ZXRTZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
U2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6
YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3Rs
eUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3Qs
ICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGly
ZWN0bHlBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJp
YWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVpZ2h0
aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0
aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RT
ZXJpYWxpemF0aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRFaWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIp
OwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsK
LSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
LXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNU
ZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5p
bnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
ICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJl
dHVybiBpbXBsLnNldE5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRp
b24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRp
b24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0
ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFs
aXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExGcm96ZW5BcnJheTxJRExC
b29sZWFuPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5z
ZXRUZW50aEZyb3plbkFycmF5QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVu
dGhGcm96ZW5BcnJheUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZW50aEZyb3plbkFy
cmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
RWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6
YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZWxldmVudGhT
ZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2
ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNl
cXVlbmNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5j
ZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
dHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVl
bmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0
cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
VHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxs
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBp
bXBsLnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNl
U2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQot
Ci1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlw
ZSgpKTsKLQotICAgIGF1dG8gZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmlu
Z0F0dHJpYnV0ZSIpLCBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gc2Vj
b25kTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25n
QXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlIiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1
dG8gZmlmdGhMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25n
QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExv
bmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVl
ID0ganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUp
OwotCi0gICAgYXV0byBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVH
ZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8qIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWwqPihzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVW
YWx1ZSksIGdsb2JhbE9iamVjdCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUi
KSwgc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsK
LQotICAgIGF1dG8gZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFs
aXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IGF1dG8qIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxP
YmplY3QsICpqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UqPihl
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlVmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJl
Y3RseUF0dHJpYnV0ZSIpLCBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVl
KTsKLQotICAgIGF1dG8gbmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
VmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBpZiAoIW5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1
dG8qIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRW
YWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIG5p
bnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
IiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKTsKLQot
ICAgIGF1dG8gdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXph
dGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZSIpLCB0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlVmFsdWUpOwotCi0g
ICAgYXV0byBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0
aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbGV2ZW50aFNl
cXVlbmNlQXR0cmlidXRlIiksIGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRo
aXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0
aW9uOjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXphdGlvbj46OmNhbGw8anNUZXN0U2VyaWFs
aXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKLX0KLQotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U2Vy
aWFsaXphdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQotewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb24uZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24+IHx8ICFKU1Rl
c3RTZXJpYWxpemF0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6
YXRpb24+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJpYWxpemF0aW9uKTsK
LSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb24g
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5j
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJpYWxpemF0aW9uKTsKLSAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb24uZ2V0KCk7Ci1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RTZXJpYWxpemF0aW9u
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cykKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7Ci19Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbjo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQotewotICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KGNlbGwpOwotICAgIGFuYWx5
emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkp
OwotICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAg
IGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKLSAgICBCYXNlOjphbmFseXpl
SGVhcChjZWxsLCBhbmFseXplcik7Ci19Ci0KLWJvb2wgSlNUZXN0U2VyaWFsaXphdGlvbk93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQot
ewotICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsK
LSAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
SlNUZXN0U2VyaWFsaXphdGlvbk93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKLXsKLSAgICBhdXRvKiBqc1Rlc3RTZXJpYWxpemF0
aW9uID0gc3RhdGljX2Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KGhhbmRsZS5zbG90KCktPmFz
Q2VsbCgpKTsKLSAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQq
Pihjb250ZXh0KTsKLSAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdFNlcmlhbGl6YXRp
b24tPndyYXBwZWQoKSwganNUZXN0U2VyaWFsaXphdGlvbik7Ci19Ci0KLSNpZiBFTkFCTEUoQklO
RElOR19JTlRFR1JJVFkpCi0jaWYgUExBVEZPUk0oV0lOKQotI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQ0ODMpCi1leHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIo
Ij8/XzdUZXN0U2VyaWFsaXphdGlvbkBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9Ci0jZWxzZQotZXh0
ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXphdGlvbkVb
XTsgfQotI2VuZGlmCi0jZW5kaWYKLQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxU
ZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKQotewotCi0jaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdS
SVRZKQotICAgIGNvbnN0IHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSBnZXRWVGFibGVQb2lu
dGVyKGltcGwucHRyKCkpOwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkKiBleHBlY3RlZFZU
YWJsZVBvaW50ZXIgPSBfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2VyaWFsaXphdGlvbkBXZWJDb3Jl
QEA2QkAiKTsKLSNlbHNlCi0gICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZO
N1dlYkNvcmUxN1Rlc3RTZXJpYWxpemF0aW9uRVsyXTsKLSNlbmRpZgotCi0gICAgLy8gSWYgdGhp
cyBmYWlscyBUZXN0U2VyaWFsaXphdGlvbiBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3Ug
bmVlZCB0byBhZGQgdGhlCi0gICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1
dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3BvbHltb3JwaGljPFRlc3RTZXJpYWxpemF0aW9uPjo6dmFsdWUsICJUZXN0U2VyaWFsaXphdGlv
biBpcyBub3QgcG9seW1vcnBoaWMiKTsKLQotICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRp
b24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgotICAgIC8vIFRlc3RT
ZXJpYWxpemF0aW9uIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0U2VyaWFsaXphdGlvbiBoYXMgc3Vi
Y2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKLSAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJl
cXVpcmUgVGVzdFNlcmlhbGl6YXRpb24geW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5p
bmcKLSAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0
byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCi0gICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFs
VlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOwotI2VuZGlmCi0gICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdFNlcmlhbGl6YXRpb24+KGdsb2JhbE9iamVjdCwgV1RGTW92
ZShpbXBsKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RT
ZXJpYWxpemF0aW9uJiBpbXBsKQotewotICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci19Ci0KLVRlc3RTZXJpYWxpemF0aW9uKiBKU1Rlc3RT
ZXJpYWxpemF0aW9uOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXph
dGlvbio+KHZtLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
LmgJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NCArMCww
IEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
SlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBK
U1Rlc3RTZXJpYWxpemF0aW9uIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0U2VyaWFsaXphdGlv
bj4gewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdFNlcmlhbGl6
YXRpb24+OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uKiBjcmVhdGUoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3RTZXJpYWxpemF0aW9uPiYmIGltcGwpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0
aW9uKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6
YXRpb24+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXphdGlvbihzdHJ1
Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAg
fQotCi0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwg
SlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyBUZXN0U2VyaWFsaXph
dGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSwgSlNDOjpOb25BcnJheSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAg
aWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwg
SlNDOjpIZWFwQW5hbHl6ZXImKTsKLXByb3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9u
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRp
b24+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotCi1jbGFz
cyBKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9y
JiwgY29uc3QgY2hhcioqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Ci19OwotCi1pbmxpbmUgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0U2VyaWFsaXphdGlv
biopCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdFNlcmlhbGl6YXRpb25Pd25l
cj4gb3duZXI7Ci0gICAgcmV0dXJuICZvd25lci5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQqIHdy
YXBwZXJLZXkoVGVzdFNlcmlhbGl6YXRpb24qIHdyYXBwYWJsZU9iamVjdCkKLXsKLSAgICByZXR1
cm4gd3JhcHBhYmxlT2JqZWN0OwotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U2VyaWFsaXphdGlvbiYpOwotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTZXJpYWxpemF0aW9uKiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0U2Vy
aWFsaXphdGlvbj4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RTZXJpYWxpemF0aW9uPiYmIGltcGwpIHsgcmV0dXJu
IGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RTZXJpYWxpemF0aW9uPiB7
Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2VyaWFsaXphdGlvbjsKLSAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdFNlcmlhbGl6YXRpb24qOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCShyZXZpc2lvbiAyNjY2MzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTk4ICswLDAgQEAK
LS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgiCi0KLSNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlICJK
U0RPTVdyYXBwZXJDYWNoZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
LSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGVhcEFuYWx5emVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5h
bWVzcGFjZSBKU0M7Ci0KLS8vIEF0dHJpYnV0ZXMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotCi1jbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3Rv
dHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAg
IHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIEpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZT4odm0uaGVhcCkpIEpT
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSwgQmFzZSk7Ci0gICAgICAgIHJldHVybiAmdm0ucGxh
aW5PYmplY3RTcGFjZTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLX07Ci1TVEFU
SUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZVByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2VQcm90b3R5cGU6OkJhc2UpOwotCi11c2luZyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGU8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+OwotCi10ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rv
cjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdDo6Z2V0Q29uc3RydWN0b3Iodm0sICZnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTw+
IHZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sICJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiX3MpLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotfQotCi10ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH07Ci0KLS8qIEhhc2ggdGFibGUg
Zm9yIHByb3RvdHlwZSAqLwotCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsK
LSAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlQ29uc3RydWN0b3IpIH0gfSwKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZVByb3RvdHlwZSkgfTsKLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjppbmZvKCksIEpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsK
LSAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKLX0KLQotY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpzX2luZm8g
PSB7ICJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlKSB9OwotCi1KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZTo6SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+JiYgaW1wbCkKLSAgICA6IEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwp
KQotewotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFz
dGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2U+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVE
T01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0
aXZlRE9NT2JqZWN0LiIpOwotCi19Ci0KLUpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZTo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOwotfQotCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KLUpT
VmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVj
dG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2VDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0K
LQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBl
KSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSkpOwotfQotCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQotewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4gfHwgIUpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
KTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UpOwotICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwotfQotCi12b2lkIEpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCi17Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSo+KGNlbGwpOwotICAgIGFu
YWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVk
KCkpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAg
ICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKLSAgICBCYXNlOjphbmFs
eXplSGVhcChjZWxsLCBhbmFseXplcik7Ci19Ci0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgJKHJldmlzaW9u
IDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oCShub25leGlzdGVudCkKQEAgLTEs
NzUgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmgiCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2UgOiBwdWJsaWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgewotcHVi
bGljOgotICAgIHVzaW5nIEJhc2UgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDsKLSAgICB1
c2luZyBET01XcmFwcGVkID0gVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOwot
ICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSogY3JlYXRl
KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+JiYgaW1wbCkKLSAg
ICB7Ci0gICAgICAgIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92
ZShpbXBsKSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgp
KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJy
YXkpOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUg
PT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwotICAgIH0KLSAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
LSAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwotICAgIFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSYgd3JhcHBlZCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlJj4oQmFzZTo6d3JhcHBlZCgpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6
Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2U+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19Owot
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3Mg
PSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTsKLSAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0LmNwcAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDI3NCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdC5oIgotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgotI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJK
U0RPTVdyYXBwZXJDYWNoZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
LSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGVhcEFuYWx5emVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KLSNpbmNsdWRl
IDx3dGYvVVJMLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNlIEpT
QzsKLQotLy8gRnVuY3Rpb25zCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotCi0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9u
Z0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1Ymxp
YzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQot
ICAgIHsKLSAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUsIEJhc2UpOwotICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7Ci0gICAgfQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5
cGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlOjpCYXNlKTsKLQotdXNpbmcg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0PjsKLQotdGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3I6OnByb3RvdHlw
ZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0
b3Iodm0sICZnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiX3Mp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotfQotCi10ZW1wbGF0ZTw+IGNvbnN0IENsYXNz
SW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3IpIH07Ci0KLS8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwotCi1zdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVUYWJsZVZh
bHVlc1tdID0KLXsKLSAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3IpIH0gfSwKLSAgICB7ICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
SW5oZXJpdExvbmdBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0s
Ci19OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRQcm90b3R5cGUpIH07Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdDo6aW5mbygpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZVRh
YmxlVmFsdWVzLCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lU
SU9OKCk7Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6
c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCkgfTsKLQotSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OkpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0PiYmIGltcGwpCi0gICAgOiBKU1Rl
c3RTZXJpYWxpemF0aW9uKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQot
ewotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8
QWN0aXZlRE9NT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+Ojp2YWx1ZSwgIkludGVy
ZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxl
bWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOwotCi19Ci0KLUpT
T2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Jmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpKSk7Ci19Ci0KLUpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJv
dG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pih2bSwgZ2xv
YmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCogSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6Y2FzdChKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KQotewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQqIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhc3QoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQotewot
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Kj4oSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Ci19
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKLX0KLQotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkp
KSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJp
dExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImluaGVyaXRMb25n
QXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAg
ICAgIHJldHVybiBpbXBsLnNldEluaGVyaXRMb25nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExv
bmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7Ci19Ci0KLUpTQzo6SlNPYmplY3QqIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gSlNUZXN0U2VyaWFsaXphdGlv
bjo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCk7Ci0KLSAgICBhdXRvIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVy
aXRMb25nQXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQqIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5j
dGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdD46OmNhbGw8anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5j
dGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09O
Iik7Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCi17Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNw
YWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0PiB8fCAhSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQ+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFD
RV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQpOwotICAgIGVsc2UKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgPSBtYWtlVW5pcXVlPElzb1N1YnNw
YWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgp
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5nZXQoKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cykKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7Ci19Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKLXsKLSAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Kj4oY2Vs
bCk7Ci0gICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmpl
Y3QtPndyYXBwZWQoKSk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKLSAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRo
aXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOwotICAg
IEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKLX0KLQotCi19CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaAkocmV2aXNpb24gMjY2NjM0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCi0j
aW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0IDogcHVibGljIEpTVGVzdFNlcmlhbGl6YXRpb24gewotcHVibGljOgot
ICAgIHVzaW5nIEJhc2UgPSBKU1Rlc3RTZXJpYWxpemF0aW9uOwotICAgIHVzaW5nIERPTVdyYXBw
ZWQgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4mJiBp
bXBsKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+
KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQoc3Ry
dWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICByZXR1cm4gcHRyOwotICAg
IH0KLQotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlw
ZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNz
IG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
LSAgICB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7Ci0gICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwotICAgIHN0YXRpYyB2b2lkIGFuYWx5
emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7Ci0gICAgVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0JiB3cmFwcGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmPihCYXNlOjp3cmFwcGVkKCkpOwotICAgIH0K
LXByb3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4mJik7
Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLX07Ci0KLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdD4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQqOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNpb24gMjY2NjM0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShub25leGlzdGVudCkKQEAgLTEsMzA4ICswLDAgQEAK
LS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCIKLQotI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1i
ZXJzLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL09iamVjdENvbnN0cnVjdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3Bh
Y2VJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Qb2lu
dGVyUHJlcGFyYXRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLS8vIEZ1bmN0aW9ucwotCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxG
cmFtZSopOwotCi0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVG
b28oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9u
Z0F0dHJpYnV0ZUZvbyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUgZmluYWwg
OiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNl
ID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAg
ICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vz
cz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0p
Ci0gICAgewotICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlLCBCYXNlKTsKLSAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAgIH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19Owot
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbFByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3Rv
dHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+OwotCi10ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0
dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpnZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2Jh
bE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6cHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCJf
cyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxDb25zdHJ1Y3RvcikgfTsKLQotLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICov
Ci0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgImZpbmFs
TG9uZ0F0dHJpYnV0ZUZvbyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUZvbyksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRy
aWJ1dGVGb28pIH0gfSwKLSAgICB7ICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKSB9IH0sCi0gICAgeyAidG9KU09O
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9u
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04p
LCAoaW50cHRyX3QpICgwKSB9IH0sCi19OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUpIH07
Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBy
ZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6
OmluZm8oKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZVRhYmxlVmFs
dWVzLCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7
Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpz
X2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCkgfTsKLQotSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsPiYmIGltcGwpCi0gICAgOiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0K
LSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJr
ZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mg
c3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7Ci0KLX0KLQotSlNPYmplY3QqIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpKSk7Ci19Ci0KLUpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbD4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KLUpTVmFsdWUgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0
IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5s
aW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQotewotICAgIHJldHVybiBqc0R5
bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotfQotCi10
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiBJRExPcGVy
YXRpb248SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmNhc3QoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQotewotICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRo
aXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28o
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmluYWxMb25nQXR0cmli
dXRlRm9vIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0RmluYWxMb25nQXR0cmlidXRlRm9vKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb1NldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlRm9v
Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0
KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFs
TG9uZ0F0dHJpYnV0ZUJhckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIp
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAg
ICAgIHJldHVybiBpbXBsLnNldEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpOwotfQot
Ci1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxp
emUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiByZXN1bHQgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7Ci0KLSAgICBhdXRvIGZpbmFs
TG9uZ0F0dHJpYnV0ZUJhclZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRyaWJ1dGVC
YXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYWxsPGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB8fCAhSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCk7Ci0gICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmdldCgpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwqPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2Jq
ZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJl
bEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6
ZXIpOwotfQotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuaAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCA6IHB1YmxpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Ci1w
dWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OwotICAg
IHVzaW5nIERPTVdyYXBwZWQgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDsKLSAgICBz
dGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogY3JlYXRlKEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4mJiBpbXBsKQotICAgIHsKLSAgICAgICAgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwoc3RydWN0dXJlLCAqZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwg
SlNET01HbG9iYWxPYmplY3QmKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSwgSlNDOjpOb25BcnJheSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4g
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsK
LSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1
cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmPihCYXNlOjp3cmFwcGVkKCkpOwotICAg
IH0KLXByb3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWw+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19Owot
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAko
cmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtOTcsNSArOTcsNSBAQAogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gRmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFycmF5KCk7CiAKICAgICBbRXhwb3NlZD1XaW5k
b3csIE1heVRocm93RXhjZXB0aW9uXSBzdHJpbmdpZmllcjsKLSAgICBzZXJpYWxpemVyID0geyBh
dHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNSArNDUsNSBAQAogCiAgICAgW01heVRocm93RXhjZXB0aW9uXSBET01Qb2ludCBtYXRy
aXhUcmFuc2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4SW5pdCBtYXRyaXgpOwogCi0gICAgc2VyaWFs
aXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9pbnQgcDQ7IC8vIEZJWE1FOiBTaG91bGQgYmUg
W1NhbWVPYmplY3RdLgogICAgIFtOZXdPYmplY3RdIERPTVJlY3QgZ2V0Qm91bmRzKCk7CiAKLSAg
ICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNP
TigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHkuaWRsCShyZXZp
c2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnJlc3RyaWN0ZWQgZG91YmxlIGJvdHRvbTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0
cmljdGVkIGRvdWJsZSBsZWZ0OwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07Cisg
ICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQx
LDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
SGlnaFJlc1RpbWVTdGFtcCBzdGFydFRpbWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhp
Z2hSZXNUaW1lU3RhbXAgZHVyYXRpb247Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07
CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaAkocmV2aXNpb24gMjY2NjM0
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHJlc3Bv
bnNlRW5kKCkgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9yPFJlZjxQZXJmb3JtYW5jZVNlcnZlclRp
bWluZz4+JiBzZXJ2ZXJUaW1pbmcoKSBjb25zdCB7IHJldHVybiBtX3NlcnZlclRpbWluZzsgfQog
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6UmVzb3VyY2U7IH0K
KyAgICBBU0NJSUxpdGVyYWwgZW50cnlUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gInJlc291
cmNlIl9zOyB9CisKIHByaXZhdGU6CiAgICAgUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZyhNb25v
dG9uaWNUaW1lIHRpbWVPcmlnaW4sIFJlc291cmNlVGltaW5nJiYpOwogICAgIH5QZXJmb3JtYW5j
ZVJlc291cmNlVGltaW5nKCk7CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBUeXBlOjpSZXNvdXJjZTsgfQotICAgIEFTQ0lJTGl0ZXJhbCBlbnRyeVR5cGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAicmVzb3VyY2UiX3M7IH0KLQogICAgIGRvdWJsZSBuZXR3b3JrTG9hZFRp
bWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoU2Vjb25kcykgY29uc3Q7CiAKICAgICBBdG9tU3RyaW5n
IG1faW5pdGlhdG9yVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VS
ZXNvdXJjZVRpbWluZy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNSArNTMsNSBAQCB0eXBlZGVmIGRvdWJsZSBET01IaWdoUmVzVGltZVN0YW1wOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0YW1wIHJlc3BvbnNlRW5kOwogICAg
IFtFbmFibGVkQXRSdW50aW1lPVNlcnZlclRpbWluZ10gcmVhZG9ubHkgYXR0cmlidXRlIEZyb3pl
bkFycmF5PFBlcmZvcm1hbmNlU2VydmVyVGltaW5nPiBzZXJ2ZXJUaW1pbmc7CiAKLSAgICBzZXJp
YWxpemVyID0geyBpbmhlcml0LCBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJU
aW1pbmcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VT
ZXJ2ZXJUaW1pbmcuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzYsNSArMzYs
NSBAQCB0eXBlZGVmIGRvdWJsZSBET01IaWdoUmVzVGltZVN0YW1wOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJl
c1RpbWVTdGFtcCBkdXJhdGlvbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRl
c2NyaXB0aW9uOwotICAgIHNlcmlhbGl6ZXIgPSB7YXR0cmlidXRlfTsKKyAgICBbRGVmYXVsdF0g
b2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2VUaW1pbmcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2VUaW1pbmcuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bl
cmZvcm1hbmNlVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTQsNSArNTQsNSBAQAogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZEV2ZW50U3RhcnQ7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkRXZlbnRFbmQ7CiAK
LSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408029</attachid>
            <date>2020-09-04 15:18:35 -0700</date>
            <delta_ts>2020-09-13 20:12:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200904151834.patch</filename>
            <type>text/plain</type>
            <size>336792</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjYzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSAnc2VyaWFsaXph
YmxlJyBrZXl3b3JkLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGZyb20gV2ViSURMLAorICAgICAg
ICB3aXRoIGl0cyByZXBsYWNlbWVudCwgJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknLgorICAg
ICAgICAKKyAgICAgICAgVGhlIG5ldyB2ZXJzaW9uIGlzIHByZXR0eSBzaW1pbGFyLCBidXQgaGFz
IG11Y2ggbGVzcyByb29tIGZvciBjdXN0b21pemF0aW9uCisgICAgICAgIGluIHRoYXQgeW91IGNh
biBubyBsb25nZXIgc3BlY2lmeSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
SlNPTgorICAgICAgICByZXN1bHQuIFJhdGhlciwgYWxsIGF0dHJpYnV0ZXMgdGhhdCBxdWFsaXR5
IGFzIGhhdmUgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoKKyAg
ICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1YWQu
aWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBhZ2Uv
UGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmg6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDoK
KyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbDoKKyAgICAgICAgKiBw
YWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGw6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
aWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRBZGRyZXNzLmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGw6
CisgICAgICAgIFVwZGF0ZSBJRExzIHJlcGxhY2luZyBhbGwgdXNlIG9mIHNlcmlhbGl6ZXIuCisg
ICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAg
ICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNK
U09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFi
bGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxl
KToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVP
cGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5p
dGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAg
ICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6
CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlN
ZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmli
dXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb246CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBbRGVmYXVsdF0gdG9KU09OIGFuZCByZW1v
dmUgc3VwcG9ydCBmb3Igc2VyaWFsaXplci4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsOiBSZW1vdmVkLgorICAgICAgICBVcGRhdGUg
dGVzdHMuCisKIDIwMjAtMDktMDQgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0NvY29hLEVNRV0gLW91dHB1dE9ic2N1cmVkRHVlVG9JbnN1ZmZpY2llbnRFeHRl
cm5hbFByb3RlY3Rpb24gS1ZPIHdpbGwgc2V0IE91dHB1dE9ic2N1cmVkIGZvciBhbGwgYXR0YWNo
ZWQgTWVkaWFLZXlTZXNzaW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VJbmZvLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwJKHJldmlzaW9uIDI2NjYzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VJbmZvLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBNZWRpYURldmljZUtpbmQga2luZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGxhYmVsOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZ3JvdXBJZDsKLSAgICBz
ZXJpYWxpemVyID0ge2F0dHJpYnV0ZX07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsK
IH07CiAKIC8vIEZJWE1FIDE2OTg3MTogbWlzc2luZyBJbnB1dERldmljZUluZm8KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
MTUgQEAgUmVmPFJUQ0ljZUNhbmRpZGF0ZT4gUlRDSWNlQ2FuZGlkYXRlOjpjcgogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFJUQ0ljZUNhbmRpZGF0ZShjYW5kaWRhdGUsIHNkcE1pZCwgc2RwTUxp
bmVJbmRleCkpOwogfQogCitSVENJY2VDYW5kaWRhdGVJbml0IFJUQ0ljZUNhbmRpZGF0ZTo6dG9K
U09OKCkgY29uc3QKK3sKKyAgICBSVENJY2VDYW5kaWRhdGVJbml0IHJlc3VsdDsKKyAgICByZXN1
bHQuY2FuZGlkYXRlID0gbV9jYW5kaWRhdGU7CisgICAgcmVzdWx0LnNkcE1pZCA9IG1fc2RwTWlk
OworICAgIHJlc3VsdC5zZHBNTGluZUluZGV4ID0gbV9zZHBNTGluZUluZGV4OworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJfUlRDKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q2FuZGlkYXRlKFN0cmlu
ZyYmIGNhbmRpZGF0ZSkgeyBtX2NhbmRpZGF0ZSA9IFdURk1vdmUoY2FuZGlkYXRlKTsgfQogCisg
ICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCB0b0pTT04oKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBS
VENJY2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGUsIGNvbnN0IFN0cmluZyYgc2Rw
TWlkLCBPcHRpb25hbDx1bnNpZ25lZCBzaG9ydD4gc2RwTUxpbmVJbmRleCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMs
NSBAQAogICAgIC8vIEZJWE1FIDE2OTY2MjogbWlzc2luZyByZWxhdGVkUG9ydAogICAgIC8vIEZJ
WE1FIDE2OTY2MjogbWlzc2luZyB1ZnJhZwogCi0gICAgLy8gRklYTUUgMTY5NjYyOiBhZGQgdWZy
YWcgdG8gdGhlIGxpc3QKLSAgICBzZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwgc2RwTWlkLCBzZHBN
TGluZUluZGV4fTsKKyAgICBSVENJY2VDYW5kaWRhdGVJbml0IHRvSlNPTigpOwogfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlSW5pdC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGVJbml0LmlkbAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVJbml0LmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX1JUQywKLSAgICBF
bmFibGVkQXRSdW50aW1lPVBlZXJDb25uZWN0aW9uCisgICAgRW5hYmxlZEF0UnVudGltZT1QZWVy
Q29ubmVjdGlvbiwKKyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAogXSBkaWN0aW9uYXJ5IFJUQ0lj
ZUNhbmRpZGF0ZUluaXQgewogICAgIERPTVN0cmluZyBjYW5kaWRhdGUgPSAiIjsKICAgICBET01T
dHJpbmc/IHNkcE1pZCA9IG51bGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZp
c2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgUlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgc2RwOwogCi0gICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAg
IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJl
dmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3Qv
UGF5bWVudEFkZHJlc3MuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAg
SW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFj
ZSBQYXltZW50QWRkcmVzcyB7Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGNvdW50cnk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmlu
Zz4gYWRkcmVzc0xpbmU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNw
b25zZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVx
dWVzdC9QYXltZW50UmVzcG9uc2UuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBT
ZWN1cmVDb250ZXh0LAogXSBpbnRlcmZhY2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQg
ewotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3Qg
dG9KU09OKCk7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZp
c2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG0JKHdvcmtpbmcgY29weSkKQEAgLTExMDEsNTAgKzExMDEsNjQgQEAgc3ViIElzV3Jh
cHBlclR5cGUKICAgICByZXR1cm4gMDsKIH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitz
dWIgSW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0
LCAkaW50ZXJmYWNlKSA9IEBfOwogCi0gICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0g
MDsKLSAgICAkb2JqZWN0LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAg
IG15ICRwYXJlbnRJbnRlcmZhY2UgPSBzaGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFs
aXphYmxlID0gMSBpZiAkcGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7
Ci0KLSAgICByZXR1cm4gJGFueVBhcmVudElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkg
JG9wZXJhdGlvbiAoQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRv
cGVyYXRpb24tPmlzU3RhdGljICYmICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIpIHsKKyAg
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwogfQog
Ci1zdWIgSXNTZXJpYWxpemFibGVUeXBlCisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJp
ZGwvI2Rmbi1qc29uLXR5cGVzCitzdWIgSXNKU09OVHlwZQogewogICAgIG15ICgkb2JqZWN0LCAk
aW50ZXJmYWNlLCAkdHlwZSkgPSBAXzsKIAotICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlv
L3dlYmlkbC8jZGZuLXNlcmlhbGl6YWJsZS10eXBlCi0KKyAgICByZXR1cm4gMSBpZiAkdHlwZS0+
bmFtZSBlcSAib2JqZWN0IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVh
biI7CiAgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNOdW1lcmljVHlwZSgkdHlwZSk7Ci0gICAg
cmV0dXJuIDEgaWYgJG9iamVjdC0+SXNFbnVtVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYg
JG9iamVjdC0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMCBpZiAkdHlwZS0+bmFt
ZSBlcSAiRXZlbnRIYW5kbGVyIjsKLQotICAgIGlmICgkdHlwZS0+aXNVbmlvbiB8fCAkb2JqZWN0
LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBlKSkgewotICAgICAgICBkaWUgIlNlcmlhbGl6ZXJzIGZv
ciB1bmlvbiBhbmQgZGljdGlvbmFyeSB0eXBlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQu
XG4iOwotICAgIH0KKyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmluZ09yRW51bVR5cGUo
JHR5cGUpOwogCiAgICAgaWYgKCRvYmplY3QtPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgk
dHlwZSkpIHsKICAgICAgICAgbXkgJHN1YnR5cGUgPSBAeyR0eXBlLT5zdWJ0eXBlc31bMF07Ci0K
LSAgICAgICAgIyBGSVhNRTogd2Via2l0Lm9yZy9iLzE5NDQzOSBbV2ViSURMXSBTdXBwb3J0IHNl
cmlhbGl6aW5nIHNlcXVlbmNlcyBhbmQgRnJvemVuQXJyYXlzIG9mIGludGVyZmFjZXMKLSAgICAg
ICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCRzdWJ0eXBlKTsKLQotICAg
ICAgICByZXR1cm4gJG9iamVjdC0+SXNTZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRzdWJ0
eXBlKTsKKyAgICAgICAgcmV0dXJuICRvYmplY3QtPklzSlNPTlR5cGUoJGludGVyZmFjZSwgJHN1
YnR5cGUpOworICAgIH0KKyAgICBpZiAoJG9iamVjdC0+SXNSZWNvcmRUeXBlKCR0eXBlKSkgewor
ICAgICAgICBteSAkdmFsdWVTdWJ0eXBlID0gQHskdHlwZS0+c3VidHlwZXN9WzBdOworICAgICAg
ICByZXR1cm4gJG9iamVjdC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkdmFsdWVTdWJ0eXBlKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gMCBpZiAhJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBl
KTsKKyAgICBpZiAoJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBlKSkgeworICAgICAgICAj
IFNwZWNpYWwgY2FzZSBFdmVudEhhbmRsZXIsIHNpbmNlIHRoZXJlIGlzIG5vIHJlYWwgSURMIGZv
ciBpdC4KKyAgICAgICAgcmV0dXJuIDAgaWYgJHR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciI7
CisKKyAgICAgICAgbXkgJGludGVyZmFjZSA9ICRvYmplY3QtPkdldEludGVyZmFjZUZvclR5cGUo
JGludGVyZmFjZSwgJHR5cGUpOworICAgICAgICBpZiAoJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVn
dWxhclRvSlNPTk9wZXJhdGlvbigkaW50ZXJmYWNlKSkgeworICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIH0KIAotICAgIG15ICRpbnRlcmZhY2VGb3JUeXBlID0gJG9iamVjdC0+R2V0SW50
ZXJmYWNlRm9yVHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7Ci0gICAgaWYgKCRpbnRlcmZhY2VGb3JU
eXBlKSB7Ci0gICAgICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VGb3JUeXBlLT5zZXJpYWxpemFi
bGU7Ci0gICAgICAgIHJldHVybiAkb2JqZWN0LT5Jbmhlcml0c1NlcmlhbGl6YWJsZSgkaW50ZXJm
YWNlRm9yVHlwZSk7CisgICAgICAgIG15ICRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0
aW9uID0gMDsKKyAgICAgICAgJG9iamVjdC0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBzdWIg
eworICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OworICAgICAgICAgICAg
JGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24gPSAxIGlmICRvYmplY3QtPkludGVy
ZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24oJHBhcmVudEludGVyZmFjZSk7CisgICAgICAg
IH0sIDApOworICAgICAgICAKKyAgICAgICAgaWYgKCRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09O
T3BlcmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBpZiAoJHR5cGUtPmlzVW5pb24pIHsKKyAgICAgICAgIyBGSVhNRTogVW5pb24gdHlw
ZXMgc2hvdWxkIGJlIHN1cHBvcnRlZCBpZiBhbGwgdGhlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0
eXBlcy4KKyAgICAgICAgZGllICJEZWZhdWx0IHRvSlNPTiBpcyBjdXJyZW50bHkgbm90IHN1cHBv
cnRlZCBmb3IgdW5pb24gdHlwZXMuXG4iOworICAgIH0KKyAgICBpZiAoJG9iamVjdC0+SXNEaWN0
aW9uYXJ5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAgIyBGSVhNRTogRGljdGlvbmFyeSB0eXBlcyBz
aG91bGQgYmUgc3VwcG9ydGVkIGlmIGFsbCBtZW1iZXJzIGRlY2xhcmVkIG9uIHRoZSBkaWN0aW9u
YXJ5IGFuZCBhbGwgaXRzIGluaGVyaXRlZCBkaWN0aW9uYXJpZXMgYXJlIEpTT04gdHlwZXMuCisg
ICAgICAgIGRpZSAiRGVmYXVsdCB0b0pTT04gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9y
IGRpY3Rpb25hcnkgdHlwZXMuXG4iOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTE1Niwx
NyArMTE3MCw2IEBAIHN1YiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGUKICAg
ICByZXR1cm4gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRl
fSB8fCAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXR0ZXJ9OwogfQog
Ci1zdWIgSXNTZXJpYWxpemFibGVBdHRyaWJ1dGUKLXsKLSAgICBteSAoJG9iamVjdCwgJGludGVy
ZmFjZSwgJGF0dHJpYnV0ZSkgPSBAXzsKLQotICAgIGlmICgkb2JqZWN0LT5Jc1NlcXVlbmNlVHlw
ZSgkYXR0cmlidXRlLT50eXBlKSAmJiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4
dGVuZGVkQXR0cmlidXRlKCRhdHRyaWJ1dGUpKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMg
Zm9yIHNlcXVlbmNlIHR5cGVzIHdpdGggQ2FjaGVkQXR0cmlidXRlIG9yIEN1c3RvbUdldHRlciBl
eHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAg
fQotCi0gICAgcmV0dXJuICRvYmplY3QtPklzU2VyaWFsaXphYmxlVHlwZSgkaW50ZXJmYWNlLCAk
YXR0cmlidXRlLT50eXBlKTsKLX0KLQogc3ViIEdldEludGVyZmFjZUV4dGVuZGVkQXR0cmlidXRl
c0Zyb21OYW1lCiB7CiAgICAgIyBGSVhNRTogSXQncyBiYWQgdG8gaGF2ZSBhIGZ1bmN0aW9uIGxp
a2UgdGhpcyB0aGF0IG9wZW5zIGFub3RoZXIgSURMIGZpbGUgdG8gYW5zd2VyIGEgcXVlc3Rpb24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4NjcsNyArMTg2
Nyw2IEBAIHN1YiBQcm90b3R5cGVPcGVyYXRpb25Db3VudAogICAgICRjb3VudCArPSBzY2FsYXIg
QHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+aXRlcmFi
bGU7CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlv
bnN9IGlmICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRl
cmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAg
JGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30g
aWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgcmV0dXJuICRjb3VudDsKIH0KQEAg
LTI3ODAsMTEgKzI3NzksNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldE5hbWVkQ29uc3RydWN0b3Io
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e05hbWVkQ29uc3RydWN0b3J9OwogICAgIH0KIAotICAgICMgU2VyaWFs
aXplciBmdW5jdGlvbi4KLSAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlh
bGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgJHtjbGFzc05hbWV9JiB0aGlzT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCYpO1xuIik7Ci0gICAgfQotICAgIAogICAgIG15ICRudW1DdXN0b21PcGVy
YXRpb25zID0gMDsKICAgICBteSAkbnVtQ3VzdG9tQXR0cmlidXRlcyA9IDA7CiAKQEAgLTMxODYs
NyArMzE4MCw2IEBAIHN1YiBHZW5lcmF0ZVByb3BlcnRpZXNIYXNoVGFibGUKICAgICBwdXNoKEBv
cGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlW
YWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQG9wZXJhdGlvbnMs
IEB7JGludGVyZmFjZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExp
a2U7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRp
b25zfSkgaWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZTsKICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVyYXRpb25zKSB7CiAgICAg
ICAgIG5leHQgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVu
dGlmaWVyfSBhbmQgbm90ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lk
ZW50aWZpZXJ9KTsKICAgICAgICAgbmV4dCBpZiAoJG9wZXJhdGlvbi0+aXNTdGF0aWMpOwpAQCAt
Mzk5NCw3ICszOTg3LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBv
cGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5vcGVyYXRpb25zfSkgaWYgSXNLZXlW
YWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQG9wZXJhdGlvbnMs
IEB7JGludGVyZmFjZS0+bWFwTGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPm1hcExp
a2U7CiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXRMaWtlLT5vcGVyYXRp
b25zfSkgaWYgJGludGVyZmFjZS0+c2V0TGlrZTsKLSAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZTsKIAogICAgIG15IEBhdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVz
fTsKICAgICBwdXNoKEBhdHRyaWJ1dGVzLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPmF0dHJpYnV0
ZXN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwpAQCAtNDY3Myw3ICs0NjY1LDYgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJsZURl
ZmluaXRpb24oJGludGVyZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7Ci0gICAgR2VuZXJh
dGVTZXJpYWxpemVyRGVmaW5pdGlvbigkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSBpZiAkaW50ZXJm
YWNlLT5zZXJpYWxpemFibGU7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNvU3Vic3Bh
Y2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7
CkBAIC01NDE5LDcgKzU0MTAsMTAgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlvbgog
CiAgICAgcmV0dXJuIGlmIElzSlNCdWlsdGluKCRpbnRlcmZhY2UsICRvcGVyYXRpb24pOwogICAg
IHJldHVybiBpZiAkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlOwotICAgIHJldHVybiBpZiAkb3BlcmF0
aW9uLT5pc1NlcmlhbGl6ZXI7CisgICAgCisgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0RlZmF1bHR9KSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0ZURlZmF1bHRPcGVy
YXRpb25EZWZpbml0aW9uKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9w
ZXJhdGlvbik7CisgICAgfQogCiAgICAgbXkgJGlzQ3VzdG9tID0gSGFzQ3VzdG9tTWV0aG9kKCRv
cGVyYXRpb24pOwogICAgIG15ICRpc092ZXJsb2FkZWQgPSAkb3BlcmF0aW9uLT57b3ZlcmxvYWRz
fSAmJiBAeyRvcGVyYXRpb24tPntvdmVybG9hZHN9fSA+IDE7CkBAIC01NTM5LDEwMCArNTUzMyw5
NSBAQCBzdWIgR2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uCiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAkZW5kQXBwbGVDb3B5cmlnaHQpIGlmICRpbkFwcGxlQ29weXJpZ2h0OwogfQogCi1zdWIg
R2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbgorc3ViIEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlv
bkRlZmluaXRpb24KIHsKLSAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSkgPSBAXzsKLQot
ICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZTsKKyAgICBteSAo
JG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKSA9IEBfOwog
Ci0gICAgbXkgJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UgPSAwOwotICAgIGlmICgkaW50ZXJm
YWNlLT5zZXJpYWxpemFibGUtPmhhc0luaGVyaXQpIHsKLSAgICAgICAgJGNvZGVHZW5lcmF0b3It
PkZvckFsbFBhcmVudHMoJGludGVyZmFjZSwgc3ViIHsKLSAgICAgICAgICAgIG15ICRwYXJlbnRJ
bnRlcmZhY2UgPSBzaGlmdDsKLSAgICAgICAgICAgIGlmICgkcGFyZW50SW50ZXJmYWNlLT5zZXJp
YWxpemFibGUgJiYgISRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlKSB7Ci0gICAgICAgICAgICAg
ICAgJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UgPSAkcGFyZW50SW50ZXJmYWNlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9LCAwKTsKLSAgICAgICAgZGllICJGYWlsZWQgdG8gZmluZCBwYXJl
bnQgaW50ZXJmYWNlIHdpdGggXCJzZXJpYWxpemVyXCIgZm9yIFwiaW5oZXJpdFwiIHNlcmlhbGl6
ZXIgaW4gJGludGVyZmFjZU5hbWVcbiIgaWYgISRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlOwor
ICAgIGlmICgkb3BlcmF0aW9uLT5uYW1lIGVxICJ0b0pTT04iICYmICRvcGVyYXRpb24tPnR5cGUt
Pm5hbWUgZXEgIm9iamVjdCIpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRlRGVmYXVsdFRvSlNP
Tk9wZXJhdGlvbkRlZmluaXRpb24oJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1l
LCAkb3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBteSBAc2VyaWFsaXplZEF0dHJpYnV0ZXMgPSAo
KTsKKyAgICBkaWUgIltEZWZhdWx0XSBpcyBub3Qgc3VwcG9ydCBmb3IgZm9yIHRoaXMgb3BlcmF0
aW9uICgiIC4gJG9wZXJhdGlvbi0+bmFtZSAuICIpLiBJdCBpcyBvbmx5IGN1cnJlbnRseSBkZWZp
bmVkIGZvciAnb2JqZWN0IHRvSlNPTigpOycuIgorfQogCi0gICAgZm9yZWFjaCBteSAkYXR0cmli
dXRlTmFtZSAoQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7Ci0gICAg
ICAgIG15ICRmb3VuZEF0dHJpYnV0ZSA9IDA7Ci0gICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgaWYgKCRhdHRyaWJ1
dGVOYW1lIGVxICRhdHRyaWJ1dGUtPm5hbWUpIHsKLSAgICAgICAgICAgICAgICAkZm91bmRBdHRy
aWJ1dGUgPSAxOwotICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTZXJpYWxp
emFibGVBdHRyaWJ1dGUoJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcHVzaChAc2VyaWFsaXplZEF0dHJpYnV0ZXMsICRhdHRyaWJ1dGUpOyAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgbGFzdDsKLSAgICAgICAgICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkaWUgIkV4cGxpY2l0IFwic2VyaWFsaXpl
clwiIGF0dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1lXCIgaXMgbm90IHNlcmlhbGl6YWJsZVxuIiBp
ZiAhJGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGU7Ci0gICAgICAgICAgICAg
ICAgbGFzdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkaWUgIkZhaWxlZCB0
byBmaW5kIFwic2VyaWFsaXplclwiIGF0dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1lXCIgaW4gJGlu
dGVyZmFjZU5hbWVcbiIgaWYgISRmb3VuZEF0dHJpYnV0ZTsKLSAgICB9CitzdWIgR2VuZXJhdGVE
ZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5pdGlvbgoreworICAgIG15ICgkb3V0cHV0QXJyYXks
ICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkc2Vy
aWFsaXplckZ1bmN0aW9uTmFtZSA9ICJ0b0pTT04iOwotICAgIG15ICRzZXJpYWxpemVyTmF0aXZl
RnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAi
UHJvdG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6
ZXJGdW5jdGlvbk5hbWUpOworICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8j
ZXMtZGVmYXVsdC10b2pzb24KIAotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENv
cmUvT2JqZWN0Q29uc3RydWN0b3IuaD4iKTsKKyAgICBteSBAaW5oZXJpdGVuY2VTdGFjayA9ICgp
OworICAgIHB1c2goQGluaGVyaXRlbmNlU3RhY2ssICRpbnRlcmZhY2UpOworICAgICRjb2RlR2Vu
ZXJhdG9yLT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7CisgICAgICAgIG15ICRwYXJl
bnRJbnRlcmZhY2UgPSBzaGlmdDsKKyAgICAgICAgcHVzaChAaW5oZXJpdGVuY2VTdGFjaywgJHBh
cmVudEludGVyZmFjZSk7CisgICAgfSwgMCk7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpT
Qzo6SlNPYmplY3QqIEpTJHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsKKyAgICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RnVu
Y3Rpb25OYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOworCisgICAgcHVz
aChAJG91dHB1dEFycmF5LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9u
TmFtZX1Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
LCAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7XG4iKTsKIAotICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0luaGVyaXQp
IHsKLSAgICAgICAgbXkgJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lID0gJHBhcmVudFNl
cmlhbGl6ZXJJbnRlcmZhY2UtPnR5cGUtPm5hbWU7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8qIHJlc3VsdCA9IEpTJHtwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlTmFtZX06
OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qp
O1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUv
T2JqZWN0Q29uc3RydWN0b3IuaD4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpO1xuIik7CiAKLSAgICBm
b3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJpYWxpemVkQXR0cmlidXRlcykgewotICAgICAgICAj
IEZJWE1FOiBBdHRyaWJ1dGVzIHRoYXQgdGhyb3cgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHBvcnRl
ZCB3aXRoIHNlcmlhbGl6ZXJzIHlldC4KKyAgICAgd2hpbGUgKEBpbmhlcml0ZW5jZVN0YWNrKSB7
CisgICAgICAgIG15ICRjdXJyZW50SW50ZXJmYWNlID0gcG9wKEBpbmhlcml0ZW5jZVN0YWNrKTsK
IAotICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAgIG15ICRnZXRG
dW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05h
bWUsICRhdHRyaWJ1dGUpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICR7
bmFtZX1WYWx1ZSA9ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKLQotICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzSW50ZXJmYWNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSkgewotICAgICAgICAgICAg
bXkgJGF0dHJpYnV0ZUludGVyZmFjZU5hbWUgPSAkYXR0cmlidXRlLT50eXBlLT5uYW1lOwotICAg
ICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPmlzTnVsbGFibGUpIHsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc051bGwoKSkg
e1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGF1dG8q
ICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06OnNl
cmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRlcmZh
Y2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRW
YWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9IGVs
c2VcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIp
LCAke25hbWV9VmFsdWUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUg
PSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSks
IGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIk
e25hbWV9XCIpLCAke25hbWV9U2VyaWFsaXplZFZhbHVlKTtcbiIpOworICAgICAgICBteSAkaGFz
RGVmYXVsdFRvSlNPTk9wZXJhdGlvbiA9IDA7CisgICAgICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlv
biAoQHskY3VycmVudEludGVyZmFjZS0+b3BlcmF0aW9uc30pIHsKKyAgICAgICAgICAgIGlmICgk
b3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEZWZhdWx0fSAmJiAkb3BlcmF0aW9uLT5u
YW1lIGVxICJ0b0pTT04iICYmICRvcGVyYXRpb24tPnR5cGUtPm5hbWUgZXEgIm9iamVjdCIpIHsK
KyAgICAgICAgICAgICAgICAkaGFzRGVmYXVsdFRvSlNPTk9wZXJhdGlvbiA9IDE7CisgICAgICAg
ICAgICAgICAgbGFzdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKICAg
ICAgICAgfQorICAgICAgICBpZiAoJGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24pIHsKKyAgICAg
ICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskY3VycmVudEludGVyZmFjZS0+YXR0cmli
dXRlc30pIHsKKyAgICAgICAgICAgICAgICBuZXh0IGlmICRhdHRyaWJ1dGUtPmlzU3RhdGljOwor
ICAgICAgICAgICAgICAgIG5leHQgaWYgISRjb2RlR2VuZXJhdG9yLT5Jc0pTT05UeXBlKCRpbnRl
cmZhY2UsICRhdHRyaWJ1dGUtPnR5cGUpOwogCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
XG4iKTsKKyAgICAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAkYXR0cmlidXRlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH07CisgICAgICAgICAgICAgICAgaWYgKCRjb25k
aXRpb25hbCkgeworICAgICAgICAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAk
Y29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1
ZSgkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpOzsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAg
ICAgICAgICAgICAgbXkgKCRiYXNlRnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkY3VycmVudEludGVyZmFj
ZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9u
TmFtZSA9IEdldEZ1bGx5UXVhbGlmaWVkSW1wbGVtZW50YXRpb25DYWxsTmFtZSgkY3VycmVudElu
dGVyZmFjZSwgJGF0dHJpYnV0ZSwgJGJhc2VGdW5jdGlvbk5hbWUsICJpbXBsIiwgJGNvbmRpdGlv
bmFsKTsKKyAgICAgICAgICAgICAgICBteSAkdG9KU0V4cHJlc3Npb24gPSBOYXRpdmVUb0pTVmFs
dWVVc2luZ1BvaW50ZXJzKCRhdHRyaWJ1dGUsICRjdXJyZW50SW50ZXJmYWNlLCAiJHtmdW5jdGlv
bk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpIik7CisKKyAgICAgICAgICAgICAgICBteSAkbmVlZHNSdW50aW1lQ2hlY2sg
PSBOZWVkc1J1bnRpbWVDaGVjaygkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKCRuZWVkc1J1bnRpbWVDaGVjaykgeworICAgICAgICAgICAgICAgICAg
ICBteSAkcnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5h
YmxlQ29uZGl0aW9uYWxTdHJpbmcoJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKCR7cnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1
dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1l
fVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIjZW5kaWZcblxuIikgOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAifVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKIAotICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWV9Qm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiwgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0KVxuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTJHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlMke2ludGVyZmFjZU5hbWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVG
dW5jdGlvbk5hbWV9Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtz
ZXJpYWxpemVyRnVuY3Rpb25OYW1lfVwiKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIG15ICRpbnRlcmZhY2VO
YW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKUyR7aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7ZnVuY3Rpb25O
YW1lfUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBcInRvSlNPTlwiKTtc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIlxuIik7CiB9CiAKIHN1YiBHZW5lcmF0ZUdldENhbGxEYXRhCkBAIC03NTg0LDcgKzc1
NzMsNiBAQCBzdWIgR2V0UnVudGltZUVuYWJsZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5
VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25z
LCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBM
aWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0
aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHsk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJp
YWxpemFibGU7CiAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAg
ICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRl
bnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJ
ZGVudGlmaWVyfSk7CiAgICAgICAgIG5leHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9
ICYmICRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24g
MjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOSBAQAogICAgICAgICAgICAgInZh
bHVlcyI6IFsiIiwgIlJlYWRET00iLCAiR2V0dGVyIl0sCiAgICAgICAgICAgICAic3VwcG9ydHND
b25qdW5jdGlvbiI6IHRydWUKICAgICAgICAgfSwKKyAgICAgICAgIkRlZmF1bHQiOiB7CisgICAg
ICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJvcGVyYXRpb24iXQorICAgICAgICB9LAogICAg
ICAgICAiRGVmYXVsdERlZmluZU93blByb3BlcnR5IjogewogICAgICAgICAgICAgImNvbnRleHRz
QWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCShyZXZpc2lvbiAyNjY2MzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5
KQpAQCAtNzEsNyArNzEsNiBAQCBzdHJ1Y3QoIElETEludGVyZmFjZSA9PiB7CiAgICAgYXN5bmNJ
dGVyYWJsZSA9PiAnJCcsICMgVXNlZCBmb3IgYXN5Y24gaXRlcmFibGUgaW50ZXJmYWNlcywgb2Yg
dHlwZSAnSURMQXN5bmNJdGVyYWJsZScKICAgICBtYXBMaWtlID0+ICckJywgIyBVc2VkIGZvciBt
YXBMaWtlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETE1hcExpa2UnCiAgICAgc2V0TGlrZSA9PiAn
JCcsICMgVXNlZCBmb3Igc2V0TGlrZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExTZXRMaWtlJwot
ICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcsICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFj
ZXMsIG9mIHR5cGUgJ0lETFNlcmlhbGl6YWJsZScKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4g
JyQnLAogfSk7CiAKQEAgLTkzLDcgKzkyLDYgQEAgc3RydWN0KCBJRExPcGVyYXRpb24gPT4gewog
ICAgIGlzQ29uc3RydWN0b3IgPT4gJyQnLAogICAgIGlzU3RhdGljID0+ICckJywKICAgICBpc0l0
ZXJhYmxlID0+ICckJywKLSAgICBpc1NlcmlhbGl6ZXIgPT4gJyQnLAogICAgIGlzU3RyaW5naWZp
ZXIgPT4gJyQnLAogICAgIGlzTWFwTGlrZSA9PiAnJCcsCiAgICAgaXNTZXRMaWtlID0+ICckJywK
QEAgLTE1MywxNSArMTUxLDYgQEAgc3RydWN0KCBJRExTZXRMaWtlID0+IHsKICAgICBleHRlbmRl
ZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKLSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jaWRsLXNlcmlhbGl6ZXJzCi1zdHJ1Y3QoIElETFNlcmlhbGl6YWJsZSA9PiB7Ci0gICAg
YXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQotICAg
IGhhc0F0dHJpYnV0ZSA9PiAnJCcsICMgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH0KLSAgICBo
YXNJbmhlcml0ID0+ICckJywgIyBzZXJpYWxpemVyID0geyBpbmhlcml0IH0KLSAgICBoYXNHZXR0
ZXIgPT4gJyQnLCAjIHNlcmlhbGl6ZXIgPSB7IGdldHRlciB9Ci0gICAgb3BlcmF0aW9ucyA9PiAn
QCcsICMgdG9KU09OIG9wZXJhdGlvbgotfSk7Ci0KICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlv
L3dlYmlkbC8jaWRsLWNvbnN0YW50cwogc3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFt
ZSA9PiAnJCcsCkBAIC01OTgsNyArNTg3LDYgQEAgc3ViIGNsb25lT3BlcmF0aW9uCiAgICAgJGNs
b25lZE9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcigkb3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKTsK
ICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1N0YXRpYygkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CiAg
ICAgJGNsb25lZE9wZXJhdGlvbi0+aXNJdGVyYWJsZSgkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlKTsK
LSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIoJG9wZXJhdGlvbi0+aXNTZXJpYWxp
emVyKTsKICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKCRvcGVyYXRpb24tPmlz
U3RyaW5naWZpZXIpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzTWFwTGlrZSgkb3BlcmF0aW9u
LT5pc01hcExpa2UpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzU2V0TGlrZSgkb3BlcmF0aW9u
LT5pc1NldExpa2UpOwpAQCAtNjQ5LDkgKzYzNyw5IEBAIG15ICRuZXh0VHlwZV8xID0gJ14oQnl0
ZVN0cmluZ3xET01TdHJpbmcKIG15ICRuZXh0U3BlY2lhbHNfMSA9ICdeKGRlbGV0ZXJ8Z2V0dGVy
fHNldHRlcikkJzsKIG15ICRuZXh0RGVmaW5pdGlvbnNfMSA9ICdeKGNhbGxiYWNrfGRpY3Rpb25h
cnl8ZW51bXxpbnRlcmZhY2V8bmFtZXNwYWNlfHBhcnRpYWx8dHlwZWRlZikkJzsKIG15ICRuZXh0
RGljdGlvbmFyeU1lbWJlcl8xID0gJ14oXCh8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5n
fGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJlcXVpcmVk
fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQn
OwotbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmlu
Z3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8
ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVh
ZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVy
fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRJbnRl
cmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55
fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8
ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8
c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJp
Y3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0TmFtZXNwYWNlTWVtYmVyc18xID0gJ14oXCh8Qnl0
ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0
fGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmlu
ZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRQYXJ0aWFsSW50ZXJmYWNlTWVt
YmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0
ZXxib29sZWFufGJ5dGV8Y29uc3R8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8
bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hv
cnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2ln
bmVkKSQnOworbXkgJG5leHRQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHxCeXRlU3Ry
aW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8
ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVh
ZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5k
ZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0U2luZ2xlVHlwZV8xID0g
J14oQnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGJvb2xlYW58Ynl0ZXxkb3VibGV8Zmxv
YXR8bG9uZ3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJl
c3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dEFyZ3VtZW50TmFtZV8xID0gJ14oYXN5bmN8
YXR0cmlidXRlfGNhbGxiYWNrfGNvbnN0fGNvbnN0cnVjdG9yfGRlbGV0ZXJ8ZGljdGlvbmFyeXxl
bnVtfGdldHRlcnxpbmNsdWRlc3xpbmhlcml0fGludGVyZmFjZXxpdGVyYWJsZXxtYXBsaWtlfG1p
eGlufG5hbWVzcGFjZXxwYXJ0aWFsfHJlYWRvbmx5fHJlcXVpcmVkfHNldGxpa2V8c2V0dGVyfHN0
YXRpY3xzdHJpbmdpZmllcnx0eXBlZGVmfHVucmVzdHJpY3RlZCkkJzsKIG15ICRuZXh0Q29uc3RW
YWx1ZV8xID0gJ14oZmFsc2V8dHJ1ZSkkJzsKQEAgLTExNzgsMTIgKzExNjYsNiBAQCBzdWIgcGFy
c2VQYXJ0aWFsSW50ZXJmYWNlTWVtYmVyCiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJpbmhl
cml0IikgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlSW5oZXJpdEF0dHJpYnV0ZSgkZXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICB9Ci0KLSAgICAjIEZJWE1FOiBSZW1vdmUuIFRoaXMg
aXMgbm8gbG9uZ2VyIHBhcnQgb2YgV2ViSURMLiBSZXBsYWNlIHdpdGggW1NlcmlhbGl6YWJsZV0u
Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewotICAgICAgICByZXR1
cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXplcigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICB9
Ci0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQtPnZh
bHVlKCkgPX4gLyRuZXh0T3BlcmF0aW9uXzEvKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFy
c2VPcGVyYXRpb24oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CiAgICAgIH0KQEAgLTE2NDksMTE0
ICsxNjMxLDYgQEAgc3ViIHBhcnNlQ29uc3RydWN0b3IKICAgICAkc2VsZi0+YXNzZXJ0VW5leHBl
Y3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlh
bGl6ZXIKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0
ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAg
IGlmICgkbmV4dC0+dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18p
OwotICAgICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICAgICAgbXkgJG5l
d0RhdGFOb2RlOwotICAgICAgICBpZiAoJG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7Ci0gICAgICAg
ICAgICAkbmV3RGF0YU5vZGUgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRB
dHRyaWJ1dGVMaXN0KTsKLSAgICAgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFs
aXphYmxlLT5uZXcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG15ICR0b0pTT05PcGVyYXRpb24g
PSBJRExPcGVyYXRpb24tPm5ldygpOwotICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5uYW1lKCJ0
b0pTT04iKTsKLQotICAgICAgICAkc2VsZi0+YXNzZXJ0RXh0ZW5kZWRBdHRyaWJ1dGVzVmFsaWRG
b3JDb250ZXh0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsICJvcGVyYXRpb24iKTsKLSAgICAgICAg
JHRvSlNPTk9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxp
c3QpOwotICAgICAgICAkdG9KU09OT3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIoMSk7Ci0gICAgICAg
IHB1c2goQHskbmV3RGF0YU5vZGUtPm9wZXJhdGlvbnN9LCAkdG9KU09OT3BlcmF0aW9uKTsKLQot
ICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBf
X0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7Ci0gICAgfQotICAgICRzZWxm
LT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KLQot
c3ViIHBhcnNlU2VyaWFsaXplclJlc3QKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15
ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKLQotICAgIG15ICRuZXh0ID0gJHNlbGYt
Pm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKLSAgICAgICAg
JHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5FX18p
OwotCi0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigpOwot
Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4
dC0+dmFsdWUoKSBlcSAiKCIpIHsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlv
blJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgfQotfQotCi1zdWIgcGFyc2VTZXJp
YWxpemF0aW9uUGF0dGVybgotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4
dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsiKSB7
Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAieyIs
IF9fTElORV9fKTsKLSAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5u
ZXcoKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoJG5ld0Rh
dGFOb2RlKTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2Vu
KCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAgIH0K
LSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXph
dGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7Ci0gICAg
fQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICBt
eSBAYXR0cmlidXRlcyA9ICgpOwotICAgICAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4o
KTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tl
bik7Ci0gICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7Ci0KLSAgICAg
ICAgbXkgJG5ld0RhdGFOb2RlID0gSURMU2VyaWFsaXphYmxlLT5uZXcoKTsKLSAgICAgICAgJG5l
d0RhdGFOb2RlLT5hdHRyaWJ1dGVzKFxAYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgcmV0dXJuICRu
ZXdEYXRhTm9kZTsKLSAgICB9Ci0gICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4
dC0+dmFsdWUoKSwgX19MSU5FX18pOwotfQotCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmli
dXRlcwotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJHNlcmlhbGl6YWJsZSA9IHNo
aWZ0OwotCi0gICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICBteSBAaWRlbnRpZmllcnMgPSAk
c2VsZi0+cGFyc2VJZGVudGlmaWVyTGlzdCgpOwotCi0gICAgZm9yIG15ICRpZGVudGlmaWVyIChA
aWRlbnRpZmllcnMpIHsKLSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJnZXR0ZXIiKSB7Ci0g
ICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNHZXR0ZXIoMSk7Ci0gICAgICAgICAgICBkaWUg
IlNlcmlhbGl6ZXIgZ2V0dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiaW5oZXJpdCIpIHsKLSAg
ICAgICAgICAgICRzZXJpYWxpemFibGUtPmhhc0luaGVyaXQoMSk7Ci0gICAgICAgICAgICBuZXh0
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJhdHRyaWJ1dGUiKSB7
Ci0gICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGUoMSk7Ci0gICAgICAgICAg
ICAjIEF0dHJpYnV0ZXMgd2lsbCBiZSBmaWxsZWQgaW4gdmlhIGFwcGx5TWVtYmVyTGlzdCgpCi0g
ICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVzaChAYXR0cmlidXRlcywg
JGlkZW50aWZpZXIpOwotICAgIH0KLQotICAgICRzZXJpYWxpemFibGUtPmF0dHJpYnV0ZXMoXEBh
dHRyaWJ1dGVzKTsKLX0KLQogc3ViIHBhcnNlSWRlbnRpZmllckxpc3QKIHsKICAgICBteSAkc2Vs
ZiA9IHNoaWZ0OwpAQCAtMzI1MywyMyArMzEyNyw2IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJl
ZigkaXRlbSkgZXEgIklETFNlcmlhbGl6YWJsZSIpIHsKLSAgICAgICAgICAgICRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZSgkaXRlbSk7Ci0gICAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgewotICAgICAgICBteSAkbnVt
U2VyaWFsaXplckF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmli
dXRlc307Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0
ZSkgewotICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0
dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6
YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2lmICgkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgewotICAgICAgICAg
ICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRl
c30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rl
c3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHJl
dmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9C
aW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTksNiAr
OSwxMCBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBbQ29uZGl0
aW9uYWw9VEVTVF9DT05ESVRJT05BTF0gYXR0cmlidXRlIFRlc3RDYWxsYmFja0ludGVyZmFjZUNv
bnN0cnVjdG9yIFRlc3RDYWxsYmFja0ludGVyZmFjZTsKICAgICBhdHRyaWJ1dGUgVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IgVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yOwogICAgIGF0dHJpYnV0ZSBUZXN0RE9NSklUQ29uc3RydWN0b3IgVGVzdERP
TUpJVDsKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciBUZXN0RGVm
YXVsdFRvSlNPTjsKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlQ29uc3RydWN0b3IgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOwor
ICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvciBUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQ7CisgICAgYXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3IgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7CiAgICAgYXR0
cmlidXRlIFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yIFRlc3REb21haW5TZWN1cml0eTsK
ICAgICBhdHRyaWJ1dGUgVGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvciBUZXN0RW5hYmxl
ZEJ5U2V0dGluZzsKICAgICBbRW5hYmxlZEZvckNvbnRleHQsIFNlY3VyZUNvbnRleHRdIGF0dHJp
YnV0ZSBUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvciBUZXN0RW5hYmxlZEZvckNvbnRl
eHQ7CkBAIC01MiwxMCArNTYsNiBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0
IHsKICAgICBhdHRyaWJ1dGUgVGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yIFRlc3RSZWFk
T25seU1hcExpa2U7CiAgICAgYXR0cmlidXRlIFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3Rv
ciBUZXN0UmVhZE9ubHlTZXRMaWtlOwogICAgIGF0dHJpYnV0ZSBUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0Q29uc3RydWN0b3IgVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDsKLSAgICBhdHRyaWJ1
dGUgVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbjsKLSAgICBh
dHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3Ig
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOwotICAgIGF0dHJpYnV0ZSBUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7
Ci0gICAgYXR0cmlidXRlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3Ig
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7CiAgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlv
bjF8Q29uZGl0aW9uMl0gYXR0cmlidXRlIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOwogICAgIGF0
dHJpYnV0ZSBUZXN0U2V0TGlrZUNvbnN0cnVjdG9yIFRlc3RTZXRMaWtlOwogICAgIGF0dHJpYnV0
ZSBUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvciBUZXN0U3RyaW5naWZpZXI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVz
LmRlcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
U3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5k
ZXAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDIxIEBAIFdlYkRPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci4KIEpTVGVzdERPTUpJVC5oOiAKIERPTVRlc3RET01KSVQuaDog
CiBXZWJET01UZXN0RE9NSklULmg6IAorSlNUZXN0RGVmYXVsdFRvSlNPTi5oOiAKK0RPTVRlc3RE
ZWZhdWx0VG9KU09OLmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pTT04uaDogCitKU1Rlc3REZWZh
dWx0VG9KU09ORW51bS5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09ORW51bS5oOiAKK1dlYkRPTVRl
c3REZWZhdWx0VG9KU09ORW51bS5oOiAKK0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlLmg6IAorRE9NVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAor
V2ViRE9NVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAorSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQuaDogCitET01UZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaDogCitX
ZWJET01UZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaDogCitKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsLmg6IAorRE9NVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaDogCitXZWJE
T01UZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oOiAKIEpTVGVzdERlcml2ZWREaWN0aW9u
YXJ5Lmg6IAogRE9NVGVzdERlcml2ZWREaWN0aW9uYXJ5Lmg6IAogV2ViRE9NVGVzdERlcml2ZWRE
aWN0aW9uYXJ5Lmg6IApAQCAtMjAxLDE4ICsyMTYsNiBAQCBXZWJET01UZXN0UmVhZE9ubHlTZXRM
aWtlLmg6IAogSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Lmg6IAogRE9NVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdC5oOiAKIFdlYkRPTVRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaDogCi1K
U1Rlc3RTZXJpYWxpemF0aW9uLmg6IAotRE9NVGVzdFNlcmlhbGl6YXRpb24uaDogCi1XZWJET01U
ZXN0U2VyaWFsaXphdGlvbi5oOiAKLUpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlLmg6IAotRE9NVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAotV2Vi
RE9NVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmg6IAotSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuaDogCi1ET01UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaDogCi1XZWJE
T01UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaDogCi1KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsLmg6IAotRE9NVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaDogCi1XZWJET01U
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiAKIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oOiAKIERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aDogCiBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6IApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dERlZmF1bHRUb0pTT04uaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3R5cGVkZWYgZG91YmxlIFRlc3RUaW1lU3RhbXA7
CisKK2ludGVyZmFjZSBUZXN0RGVmYXVsdFRvSlNPTiB7CisgICAgW0VuYWJsZWRBdFJ1bnRpbWU9
VGVzdFJ1bnRpbWVFbmFibGVkXXJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxvbmdBdHRyaWJ1dGU7
CisgICAgW0VuYWJsZWRCeVNldHRpbmc9VGVzdFNldHRpbmddIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBzaG9ydCBlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZTsKKyAgICBbQ29uZGl0aW9u
YWw9VEVTVF9DT05ESVRJT05BTF0gcmVhZG9ubHkgYXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09O
RW51bSBlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgRXZlbnRI
YW5kbGVyIGV2ZW50SGFuZGxlckF0dHJpYnV0ZTsKKworICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgICAgICAgZmlyc3RTdHJpbmdBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIGxvbmcgICAg
ICAgICAgICAgICAgICBzZWNvbmRMb25nQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBUZXN0RXhj
ZXB0aW9uICAgICAgICAgdGhpcmRVbkpTT05hYmxlQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSB1
bnJlc3RyaWN0ZWQgZG91YmxlICAgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlOwor
ICAgIGF0dHJpYnV0ZSBbQ2xhbXBdIGxvbmcgICAgICAgICAgZmlmdGhMb25nQ2xhbXBlZEF0dHJp
YnV0ZTsKKyAgICBhdHRyaWJ1dGUgVGVzdFRpbWVTdGFtcCAgICAgICAgIHNpeHRoVHlwZWRlZkF0
dHJpYnV0ZTsKKworICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCBz
ZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZTsK
KyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw/IG5pbnRoT3B0aW9u
YWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGU7CisKKyAgICBhdHRyaWJ1dGUgRnJvemVuQXJy
YXk8Ym9vbGVhbj4gdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgc2Vx
dWVuY2U8RE9NU3RyaW5nPiBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlOworICAgIGF0dHJpYnV0
ZSBzZXF1ZW5jZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4gdHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSByZWNvcmQ8RE9NU3RyaW5nLCB1bnNp
Z25lZCBzaG9ydD4gdGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZTsKKworICAgIFtEZWZhdWx0XSBv
YmplY3QgdG9KU09OKCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09ORW51bS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09ORW51bS5pZGwJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RE
ZWZhdWx0VG9KU09ORW51bS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK2VudW0gVGVzdERlZmF1bHRUb0pTT05FbnVtIHsKKyAgICAiRW51bVZhbHVlMSIs
CisgICAgIkVudW1WYWx1ZTIiCit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitpbnRlcmZhY2UgVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIDogVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IHsKK307
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmlkbAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK2ludGVyZmFjZSBUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQgOiBUZXN0RGVmYXVsdFRvSlNPTiB7CisgICAgYXR0cmlidXRlIGxvbmcgICAg
ICAgICAgICAgICAgICBpbmhlcml0TG9uZ0F0dHJpYnV0ZTsKKworICAgIFtEZWZhdWx0XSBvYmpl
Y3QgdG9KU09OKCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWwuaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCitpbnRlcmZhY2UgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgOiBUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQgeworICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAg
ZmluYWxMb25nQXR0cmlidXRlRm9vOworICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAg
ICAgZmluYWxMb25nQXR0cmlidXRlQmFyOworCisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5v
ZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0Tm9kZS5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDUgKzM1
LDUgQEAKICAgICBbU2VjdXJlQ29udGV4dF0gYm9vbGVhbiBnZXRTZWNyZXRCb29sZWFuKCk7CiAg
ICAgW0NvbmRpdGlvbmFsPVRFU1RfRkVBVFVSRSwgU2VjdXJlQ29udGV4dCwgRW5hYmxlZEF0UnVu
dGltZT1UZXN0RmVhdHVyZV0gYm9vbGVhbiB0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKTsK
IAotICAgIHNlcmlhbGl6ZXI7CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQzNSw4ICs0MzUsNiBAQCBlbnVt
IFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93CiAKICAgICBzdHJpbmdpZmllciBh
dHRyaWJ1dGUgVVNWU3RyaW5nIHN0cmluZ2lmaWVyQXR0cmlidXRlOwogCi0gICAgc2VyaWFsaXpl
ciA9IHtjcmVhdGUsIHJlYWRPbmx5U3RyaW5nQXR0ciwgZW51bUF0dHIsIGxvbmdBdHRyfTsKLQog
ICAgIHVuZGVmaW5lZCBidWZmZXJTb3VyY2VQYXJhbWV0ZXIoQnVmZmVyU291cmNlIGRhdGEpOwog
CiAgICAgW0xlZ2FjeUNhbGxlcl0gdW5kZWZpbmVkIGxlZ2FjeUNhbGxlck5hbWVkKGxvbmcgcGFy
YW0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJp
YWxpemF0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCShu
b25leGlzdGVudCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi10eXBlZGVmIGRvdWJsZSBUZXN0VGltZVN0YW1wOwotCi1pbnRl
cmZhY2UgVGVzdFNlcmlhbGl6YXRpb24gewotICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAg
ICAgICAgZmlyc3RTdHJpbmdBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAg
ICAgICAgICBzZWNvbmRMb25nQXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZSBUZXN0RXhjZXB0aW9u
ICAgICAgICAgdGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgdW5y
ZXN0cmljdGVkIGRvdWJsZSAgIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZTsKLSAg
ICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGZpZnRoTG9uZ0F0dHJpYnV0ZTsKLSAg
ICBhdHRyaWJ1dGUgVGVzdFRpbWVTdGFtcCAgICAgICAgIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZTsK
LQotICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCBzZXZlbnRoRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIFRlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZSBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlOwotICAgIGF0
dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD8gbmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlOwotCi0gICAgYXR0cmlidXRlIEZyb3plbkFycmF5PGJv
b2xlYW4+IHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIHNlcXVlbmNl
PERPTVN0cmluZz4gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgc2Vx
dWVuY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+IHR3ZWxmdGhJbnRlcmZhY2VTZXF1
ZW5jZUF0dHJpYnV0ZTsKLQotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OwotfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2Uu
aWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZSA6IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdC5pZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCShub25leGlz
dGVudCkKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi1pbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IDogVGVzdFNl
cmlhbGl6YXRpb24gewotICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgaW5oZXJp
dExvbmdBdHRyaWJ1dGU7Ci0KLSAgICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBhdHRyaWJ1dGUg
fTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5pZGwJ
KHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5pZGwJKG5vbmV4aXN0ZW50KQpAQCAtMSwz
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LWludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCA6IFRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdCB7Ci0gICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5hbExv
bmdBdHRyaWJ1dGVGb287Ci0gICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5h
bExvbmdBdHRyaWJ1dGVCYXI7Ci0KLSAgICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBmaW5hbExv
bmdBdHRyaWJ1dGVCYXIgfTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4NSBA
QAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNUZXN0RGVmYXVsdFRvSlNPTi5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJvb2xlYW4uaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdWxsYWJsZS5o
IgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRSZWNvcmQuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNET01PcGVy
YXRpb24uaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgor
I2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0
VG9KU09ORW51bS5oIgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
I2VuZGlmCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRs
ZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxl
ckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pT
T05GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09O
Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05OaW50aE9w
dGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERl
ZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJy
YXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1
ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRU
b0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1
bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0
RGVmYXVsdFRvSlNPTlByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7Cisg
ICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTlByb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
ICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90
b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAg
fQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdERlZmF1
bHRUb0pTT05Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RE
ZWZhdWx0VG9KU09OUHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpCYXNl
KTsKKwordXNpbmcgSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTj47CisKK3RlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rp
b25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05D
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgIlRlc3REZWZhdWx0VG9KU09OIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
K30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkNv
bnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVUYWJsZVZh
bHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKSB9IH0sCisg
ICAgeyAibG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyAgICB7ICJlbmFibGVkQnlTZXR0
aW5nc0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZh
dWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisjaWYgRU5BQkxFKFRF
U1RfQ09ORElUSU9OQUwpCisgICAgeyAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRC
eUNvbmRpdGlvbmFsQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmlu
c2ljLCB7IDAsIDAgfSB9LAorI2VuZGlmCisgICAgeyAiZXZlbnRIYW5kbGVyQXR0cmlidXRlIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TkV2ZW50SGFuZGxlckF0dHJpYnV0ZSkgfSB9LAorICAgIHsgImZpcnN0U3RyaW5nQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9K
U09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJzZWNvbmRMb25nQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pT
T05TZWNvbmRMb25nQXR0cmlidXRlKSB9IH0sCisgICAgeyAidGhpcmRVbkpTT05hYmxlQXR0cmli
dXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3Rv
bUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgImZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJmaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1
bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKSB9IH0sCisgICAgeyAic2l4dGhUeXBl
ZGVmQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRl
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInNldmVu
dGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGly
ZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJl
Y3RseVRvSlNPTmFibGVBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJlaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dERlZmF1bHRUb0pTT05FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKSB9IH0sCisgICAgeyAibmlu
dGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTk5p
bnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9K
U09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsg
InRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFy
cmF5QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUpIH0gfSwKKyAgICB7ICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9K
U09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlKSB9IH0sCisgICAgeyAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmli
dXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0
ZSkgfSB9LAorICAgIHsgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pT
T05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVu
dGhSZWNvcmRBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdERlZmF1bHRUb0pT
T05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKK307CisKK2Nv
bnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpzX2luZm8gPSB7ICJU
ZXN0RGVmYXVsdFRvSlNPTiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSkgfTsKKwordm9pZCBK
U1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2
bSwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6aW5mbygpLCBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBib29sIGhhc0Rpc2FibGVkUnVudGltZVByb3Bl
cnRpZXMgPSBmYWxzZTsKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkudGVzdFJ1bnRpbWVFbmFibGVkRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2Fi
bGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigibG9uZ0F0dHJpYnV0ZSIpLCBzdHJsZW4oImxvbmdBdHRyaWJ1dGUiKSk7CisgICAgICAgIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9k
ZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7
CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwg
cHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9CisgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4o
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CisgICAgICAg
IGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVk
QnlTZXR0aW5nc0F0dHJpYnV0ZSIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNj
b3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUp
OworICAgICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
ICAgIH0KKyAgICBpZiAoaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyAmJiBzdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsK
KyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT046OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9K
U09OIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3REZWZhdWx0VG9KU09OKSB9OworCitKU1Rlc3REZWZhdWx0VG9KU09OOjpKU1Rlc3RE
ZWZhdWx0VG9KU09OKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3Jh
cHBlcjxUZXN0RGVmYXVsdFRvSlNPTj4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUo
aW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOworCisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29m
PEFjdGl2ZURPTU9iamVjdCwgVGVzdERlZmF1bHRUb0pTT04+Ojp2YWx1ZSwgIkludGVyZmFjZSBp
cyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0
aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2JqZWN0
KiBKU1Rlc3REZWZhdWx0VG9KU09OOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09O
UHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Q
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09O
Ojpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RGVmYXVsdFRvSlNPTj4odm0sIGdsb2Jh
bE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0
b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3I+KHZt
LCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisK
K3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sK
KyAgICBKU1Rlc3REZWZhdWx0VG9KU09OKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0
RGVmYXVsdFRvSlNPTio+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdERlZmF1bHRUb0pT
T046On5KU1Rlc3REZWZhdWx0VG9KU09OKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dERlZmF1bHRUb0pTT04qIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Y2FzdChK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OKiBJRExPcGVy
YXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQoreworICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdERlZmF1bHRUb0pTT046OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgor
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlz
T2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmxvbmdBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0
VG9KU09OTG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImxvbmdBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0
aW5nc0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRT
aG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0
aW5nc0F0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZh
dWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFi
bGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpOworfQorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9O
QUwpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeUNv
bmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExFbnVt
ZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRp
b25hbEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmli
dXRlIik7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVs
dFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGV2ZW50SGFuZGxl
ckF0dHJpYnV0ZSh0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmVudEhhbmRsZXJB
dHRyaWJ1dGVFdmVudCwgd29ybGRGb3JET01PYmplY3QodGhpc09iamVjdCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRU
b0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZUdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZVNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnRO
YW1lcygpLmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudCwgdmFsdWUpOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
dmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0
PHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImV2ZW50SGFuZGxlckF0
dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNP
TkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJp
bmdBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNP
TkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNP
TkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNz
ZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1
dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05GaXJz
dFN0cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwu
c2V0Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0
cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERl
ZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RE
ZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVm
YXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZUdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0U2Vjb25kTG9uZ0F0dHJpYnV0ZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0
SlNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZVNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2Vj
b25kTG9uZ0F0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50aGlyZFVuSlNP
TmFibGVBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRv
SlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1
bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0aGlyZFVu
SlNPTmFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERl
ZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3REZWZhdWx0VG9KU09OIiwgInRoaXJkVW5KU09O
YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5z
ZXRUaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05h
YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVm
YXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGhpcmRVbkpTT05hYmxlQXR0cmlidXRl
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmlj
dGVkRG91YmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0
VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRGb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0
KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSgpKSkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVk
QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZpZnRoTG9uZ0Ns
YW1wZWRBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQ2xh
bXBBZGFwdG9yPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJl
dHVybiBpbXBsLnNldEZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1
bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pT
T04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGVT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZp
ZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3Qp
Cit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJz
aXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
ICAgIHJldHVybiBpbXBsLnNldFNpeHRoVHlwZWRlZkF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09O
Pjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVs
dFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmpl
Y3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNP
TmFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OU2V2ZW50
aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNldmVudGhEaXJl
Y3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVzdERlZmF1bHRUb0pTT04iLCAic2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSIs
ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIpOyB9KTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwu
c2V0U2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOworICAg
IH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05T
ZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pT
T04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVB
dHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FaWdodGhJbmRpcmVjdGx5QXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZh
dWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pT
T05FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZWlnaHRoSW5kaXJl
Y3RseUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVs
dFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdERlZmF1bHRU
b0pTT04iLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIsICJUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEVpZ2h0aEluZGly
ZWN0bHlBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05F
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERp
cmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+
KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKSkpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJl
Y3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9K
U09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0
bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0
ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3REZWZhdWx0VG9KU09O
IiwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiLCAiVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWwiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldE5pbnRoT3B0
aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwor
ICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pT
T05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERl
ZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJl
Y3RseVRvSlNPTmFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRy
aWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05U
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGVudGhGcm96ZW5BcnJheUF0dHJp
YnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGVudGhG
cm96ZW5BcnJheUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05U
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGVudGhGcm96ZW5BcnJh
eUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0VGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1
bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmlu
Zz4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVlbmNlQXR0
cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RE
ZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElE
TERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGlt
cGwuc2V0RWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Cisg
ICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNl
dDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWxldmVudGhT
ZXF1ZW5jZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09i
amVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0
aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVs
dFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
InR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJ
bnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRUd2VsZnRoSW50ZXJmYWNlU2VxdWVu
Y2VBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2Vx
dWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09OVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0d2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0
KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNob3J0Pj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwudGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9K
U09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAidGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1
bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0
cmluZywgSURMVW5zaWduZWRTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAg
ICAgcmV0dXJuIGltcGwuc2V0VGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0
RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJp
YnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAidGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHko
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdERl
ZmF1bHRUb0pTT04qIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkudGVzdFJ1bnRpbWVFbmFibGVkRW5hYmxlZCgpKSB7CisgICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHJp
YnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmxvbmdBdHRyaWJ1dGUoKSkpOworICAgIH0KKyAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+
KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQo
KSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIiksIHRvSlM8SURMVW5zaWduZWRTaG9y
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5U2V0dGlu
Z3NBdHRyaWJ1dGUoKSkpOworICAgIH0KKyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJs
ZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlIiksIHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1
bHRUb0pTT05FbnVtPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5h
YmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoKSkpOworI2VuZGlmCisKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmli
dXRlIiksIHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiksIHRv
SlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2Vjb25k
TG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgdG9K
UzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdDbGFt
cGVkQXR0cmlidXRlIiksIHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKCkp
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCB0b0pTPElETERvdWJsZT4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWw+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVRvSlNPTmFi
bGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVy
ZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVp
Z2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJs
ZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNP
TmFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZy
b3plbkFycmF5PElETEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERP
TVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRo
SW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSIpLCB0
b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElETFVuc2lnbmVkU2hvcnQ+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LnRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZh
dWx0VG9KU09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTj46OmNhbGw8anNUZXN0RGVmYXVsdFRvSlNPTlByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJ0b0pTT04iKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBz
cGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCkpCisgICAgICAgIHJldHVy
biBzcGFjZTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04+IHx8ICFKU1Rlc3REZWZhdWx0VG9K
U09OOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04+KQorICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsKKyAgICBlbHNlCisg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBtYWtlVW5pcXVl
PElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxU
eXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCk7CitJR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCisgICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
K0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3Bh
Y2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBw
ZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0
aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNl
dExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBh
bmFseXplcik7Cit9CisKK2Jvb2wgSlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQoreworICAgIFVOVVNF
RF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICBVTlVTRURf
UEFSQU0ocmVhc29uKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVs
dFRvSlNPTk93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3REZWZhdWx0VG9KU09OID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAg
ICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsK
KyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdERlZmF1bHRUb0pTT04tPndyYXBwZWQo
KSwganNUZXN0RGVmYXVsdFRvSlNPTik7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJ
VFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitl
eHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0RGVm
YXVsdFRvSlNPTkBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTdUZXN0RGVmYXVsdFRvSlNPTkVbXTsgfQorI2VuZGlm
CisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRv
SlNPTj4mJiBpbXBsKQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIGNv
bnN0IHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRy
KCkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIg
PSBfX2lkZW50aWZpZXIoIj8/XzdUZXN0RGVmYXVsdFRvSlNPTkBXZWJDb3JlQEA2QkAiKTsKKyNl
bHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUxN1Rl
c3REZWZhdWx0VG9KU09ORVsyXTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0
RGVmYXVsdFRvSlNPTiBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQg
dGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGlu
dGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvbHltb3JwaGlj
PFRlc3REZWZhdWx0VG9KU09OPjo6dmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTiBpcyBub3QgcG9s
eW1vcnBoaWMiKTsKKworICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhl
ciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3REZWZhdWx0VG9KU09O
IGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0RGVmYXVsdFRvSlNPTiBoYXMgc3ViY2xhc3NlcyB0aGF0
IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdERl
ZmF1bHRUb0pTT04geW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBi
eSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJm
YWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRl
ciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8VGVzdERlZmF1bHRUb0pTT04+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9
CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3REZWZhdWx0VG9KU09O
JiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgaW1wbCk7Cit9CisKK1Rlc3REZWZhdWx0VG9KU09OKiBKU1Rlc3REZWZhdWx0VG9KU09O
Ojp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAo
YXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTio+KHZtLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT04uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgi
CisjaW5jbHVkZSAiVGVzdERlZmF1bHRUb0pTT04uaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9K
U09OIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0RGVmYXVsdFRvSlNPTj4geworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdERlZmF1bHRUb0pTT04+OworICAgIHN0
YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09O
PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT04+KGdsb2JhbE9i
amVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTihzdHJ1Y3R1cmUsICpnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0RGVmYXVsdFRvSlNPTiogdG9XcmFwcGVk
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpK
U0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpO
b25BcnJheSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
bW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CisgICAg
fQorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOworICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmKTsKKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0RGVmYXVs
dFRvSlNPTk93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIq
Kik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdERlZmF1bHRUb0pTT04qKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3REZWZhdWx0VG9KU09OT3duZXI+IG93bmVyOworICAg
IHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RE
ZWZhdWx0VG9KU09OKiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9i
amVjdDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdERlZmF1bHRUb0pTT04mKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTiogaW1wbCkgeyByZXR1cm4g
aW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBK
U0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYp
OworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05l
d2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFz
ZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RGVmYXVsdFRvSlNPTj4geworICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTVGVzdERlZmF1bHRUb0pTT047CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0
dXJuVHlwZSA9IFRlc3REZWZhdWx0VG9KU09OKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09ORW51bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVtLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVm
YXVsdFRvSlNPTkVudW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVz
dERlZmF1bHRUb0pTT05FbnVtLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1l
c3BhY2UgSlNDOworCitTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdERlZmF1
bHRUb0pTT05FbnVtIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0IE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAgIE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJFbnVtVmFsdWUxIiksCisgICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJF
bnVtVmFsdWUyIiksCisgICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVf
dD4oVGVzdERlZmF1bHRUb0pTT05FbnVtOjpFbnVtVmFsdWUxKSA9PSAwLCAiVGVzdERlZmF1bHRU
b0pTT05FbnVtOjpFbnVtVmFsdWUxIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGlj
X2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZh
bHVlMikgPT0gMSwgIlRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMiBpcyBub3QgMSBh
cyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9u
VmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1cm4gdmFsdWVzW3N0
YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldOworfQorCit0ZW1wbGF0ZTw+IEpT
U3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTkVudW0gZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAg
ICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBjb252
ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7Cit9CisKK3RlbXBsYXRl
PD4gT3B0aW9uYWw8VGVzdERlZmF1bHRUb0pTT05FbnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RE
ZWZhdWx0VG9KU09ORW51bT4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1
ZTEiKQorICAgICAgICByZXR1cm4gVGVzdERlZmF1bHRUb0pTT05FbnVtOjpFbnVtVmFsdWUxOwor
ICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMiIpCisgICAgICAgIHJldHVybiBUZXN0
RGVmYXVsdFRvSlNPTkVudW06OkVudW1WYWx1ZTI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRl
c3REZWZhdWx0VG9KU09ORW51bT4oKQoreworICAgIHJldHVybiAiXCJFbnVtVmFsdWUxXCIsIFwi
RW51bVZhbHVlMlwiIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERlZmF1bHRUb0pTT05FbnVtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NQ29udmVydEVudW1lcmF0aW9uLmgiCisjaW5j
bHVkZSAiVGVzdERlZmF1bHRUb0pTT05FbnVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
U3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKFRlc3REZWZhdWx0VG9KU09ORW51bSk7
Cit0ZW1wbGF0ZTw+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIFRlc3REZWZhdWx0VG9KU09ORW51bSk7CisKK3RlbXBsYXRlPD4gT3B0
aW9uYWw8VGVzdERlZmF1bHRUb0pTT05FbnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3REZWZhdWx0
VG9KU09ORW51bT4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0
ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdERlZmF1bHRUb0pT
T05FbnVtPigpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5OCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2Uu
aCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFj
ZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50
ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAg
ICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90
eXBlPih2bS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNz
PgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkK
KyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlLCBCYXNlKTsKKyAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6QmFzZSk7CisKK3VzaW5nIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZT47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNv
bnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0OjpnZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7
Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZSJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRl
PD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcikgfTsK
KworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZVRh
YmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcikgfSB9LAorfTsKKworY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpz
X2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGlj
UHJvcGVydGllcyh2bSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6Omlu
Zm8oKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGVUYWJs
ZVZhbHVlcywgKnRoaXMpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElP
TigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2U6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UpIH07CisKK0pTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4mJiBpbXBs
KQorICAgIDogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAg
IHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBt
YXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xh
c3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xv
YmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7Cit9CisKK0pTT2JqZWN0KiBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6cHJvdG90eXBlKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPih2bSwgZ2xvYmFs
T2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1
dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVO
TElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90
eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3Bh
Y2VzKCk7CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFj
ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPiB8fCAhSlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwor
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+KQorICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdl
dCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSk7CisgICAgYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZS5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAo
JkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAg
Y2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9S
RV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9
CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Kj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRo
aXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwg
IiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkp
OworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKworCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQuaCIKKyNpbmNsdWRlICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA6IHB1YmxpYyBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0OworICAgIHVzaW5nIERPTVdyYXBwZWQgPSBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2U7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZT4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkg
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2Uoc3RydWN0dXJlLCAqZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QmKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSwgSlNDOjpOb25BcnJheSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRD
b25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2
bSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6
SGVhcEFuYWx5emVyJik7CisgICAgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
JiB3cmFwcGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXN0
RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UmPihCYXNlOjp3cmFwcGVkKCkpOworICAg
IH0KK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZT4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKK307CisKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4geworICAgIHVzaW5n
IFdyYXBwZXJDbGFzcyA9IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOwor
ICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0LmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRCb29sZWFuLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAiSlNET01Db252ZXJ0TnVsbGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJz
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0UmVjb3JkLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0U2VxdWVuY2VzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVj
dC5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZS5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25z
dHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNp
ZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRFbnVtZXJh
dGlvbi5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05FbnVtLmgiCisjZW5kaWYKKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBGdW5jdGlv
bnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6Q2FsbEZyYW1lKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSBmaW5h
bCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJh
c2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdFByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSwgSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRQcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OOjpnZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9i
amVjdCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENv
bnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCJfcyksIEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcikgfTsKKworLyogSGFz
aCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAg
IHsgImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0
cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcikgfSB9LAorICAg
IHsgImluaGVyaXRMb25nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRM
b25nQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJp
YnV0ZSkgfSB9LAorICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90
b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKK307CisKK2NvbnN0IENs
YXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlw
ZSkgfTsKKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjppbmZv
KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlz
KTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29u
c3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpzX2luZm8gPSB7ICJUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KSB9OworCitKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdDo6SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQ+JiYgaW1wbCkKKyAgICA6IEpTVGVzdERlZmF1bHRUb0pTT04o
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3Qs
IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdD46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJr
ZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mg
c3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBK
U1Rlc3REZWZhdWx0VG9KU09OOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKwor
SlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Ojpwcm90b3R5cGUoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+KHZtLCBnbG9iYWxPYmplY3QpOworfQor
CitKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3I+KHZt
LCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisK
K3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KiBJRExBdHRyaWJ1
dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJu
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqPihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCit0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCogSURMT3BlcmF0aW9u
PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqPihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBw
cm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHBy
b3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdD46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRM
b25nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJp
dExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwu
c2V0SW5oZXJpdExvbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+Ojpz
ZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW5oZXJp
dExvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkudGVzdFJ1bnRpbWVFbmFibGVkRW5hYmxlZCgpKSB7CisgICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibG9uZ0F0dHJp
YnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmxvbmdBdHRyaWJ1dGUoKSkpOworICAgIH0KKyAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+
KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQo
KSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIiksIHRvSlM8SURMVW5zaWduZWRTaG9y
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5U2V0dGlu
Z3NBdHRyaWJ1dGUoKSkpOworICAgIH0KKyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVuYWJs
ZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlIiksIHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1
bHRUb0pTT05FbnVtPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5h
YmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoKSkpOworI2VuZGlmCisKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3RyaW5nQXR0cmli
dXRlIiksIHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5maXJzdFN0cmluZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRlIiksIHRv
SlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2Vjb25k
TG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwgdG9K
UzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdDbGFt
cGVkQXR0cmlidXRlIiksIHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKCkp
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCB0b0pTPElETERvdWJsZT4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNldmVudGhE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWw+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVRvSlNPTmFi
bGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVy
ZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVp
Z2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJs
ZUF0dHJpYnV0ZSIpLCB0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNP
TmFibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0b0pTPElETEZy
b3plbkFycmF5PElETEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETERP
TVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0d2VsZnRo
SW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSIpLCB0
b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElETFVuc2lnbmVkU2hvcnQ+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LnRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgdG9K
UzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbmhlcml0
TG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+OjpjYWxsPGpzVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgInRvSlNPTiIpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
LmdldCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpuZWVkc0Rlc3RydWN0aW9u
KTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PikKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBtYWtlVW5pcXVlPElzb1N1YnNw
YWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KTsKKyAgICBlbHNlCisg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhl
YXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQpOworICAgIGF1dG8q
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0
KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYgKCZKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVf
V0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdCo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxs
KGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChj
ZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgp
LnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisK
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9N
V3JhcHBlci5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT04uaCIKKyNpbmNsdWRlICJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA6IHB1YmxpYyBKU1Rlc3REZWZhdWx0VG9KU09O
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNUZXN0RGVmYXVsdFRvSlNPTjsKKyAgICB1
c2luZyBET01XcmFwcGVkID0gVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OworICAgIHN0YXRpYyBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQ+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0KHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBERUNM
QVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFj
ZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFj
ZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9p
ZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOworICAgIFRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdCYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Jj4oQmFzZTo6d3JhcHBlZCgpKTsK
KyAgICB9Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQ+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQ+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdDsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0KjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ0
IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgiCisKKyNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCb29sZWFuLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVsbGFibGUuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0UmVjb3JkLmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVuY2VzLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisj
aW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0hlYXBBbmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoVEVTVF9DT05ESVRJT05BTCkKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pT
T05FbnVtLmgiCisjZW5kaWYKKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKworLy8gQXR0cmlidXRl
cworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlQmFyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVj
dDsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElD
X0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbFByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFj
ZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlND
OjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQ
QUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUsIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjsKKwor
dGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1
Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Iodm0sICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpIH07
CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZVRhYmxlVmFs
dWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ig
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28pLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKSB9IH0sCisgICAgeyAi
ZmluYWxMb25nQXR0cmlidXRlQmFyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9N
QXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlQmFyKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9u
Z0F0dHJpYnV0ZUJhcikgfSB9LAorICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAor
fTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZt
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjppbmZvKCksIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIEpTQ19U
T19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8g
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c19pbmZvID0geyAiVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWwiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpIH07CisKK0pT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4mJiBpbXBsKQorICAgIDogSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUo
aW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgc3RhdGljX2Fzc2VydCghc3Rk
Ojppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWw+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3Rd
IGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2Jq
ZWN0LiIpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQoreworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWxQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOworfQorCitK
U09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6cHJvdG90eXBlKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+KHZtLCBnbG9iYWxPYmpl
Y3QpOworfQorCitKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmdldENv
bnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsKiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCogSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90
b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VM
WSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25n
QXR0cmlidXRlRm9vR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0
dHJpYnV0ZUZvbygpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+
OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZv
b0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUZvb1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBs
LnNldEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExv
bmdBdHRyaWJ1dGVGb29TZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpOworfQorCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUJhckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVC
YXIoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVC
YXJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRGaW5h
bExvbmdBdHRyaWJ1dGVCYXIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bD46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlQmFyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25U
b0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKiBjYXN0ZWRUaGlzKQoreworICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRv
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVu
YWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAg
aWYgKGRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdz
KCkudGVzdFNldHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIp
LCB0b0pTPElETFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxF
KFRFU1RfQ09ORElUSU9OQUwpCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElE
TEVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09ORW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNl
bmRpZgorCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vj
b25kTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlIiksIHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRv
cjxJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhM
b25nQ2xhbXBlZEF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExE
b3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRl
ZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8
SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5z
ZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRy
aWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0
aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJ
bnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50
aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwg
dG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVu
Y2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8
SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVu
dGhSZWNvcmRBdHRyaWJ1dGUiKSwgdG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNp
Z25lZFNob3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC50aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVy
aXRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmluYWxMb25nQXR0cmlidXRl
Rm9vIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCB0b0pT
PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9u
Z0F0dHJpYnV0ZUJhcigpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6Y2FsbDxqc1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIpOworfQorCitKU0M6Oklzb1N1YnNwYWNl
KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vi
c3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOwor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4gfHwgIUpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbD4pCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0
KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpOworICAgIGVsc2UKKyAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFw
Q2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpOworICAgIGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbC5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0g
JkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdT
X0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9pZCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIu
c2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7Cisg
ICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5h
bHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFw
KGNlbGwsIGFuYWx5emVyKTsKK30KKworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVk
ZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuaCIKKyNpbmNsdWRlICJUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgOiBwdWJsaWMgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdDsKKyAgICB1c2luZyBET01XcmFwcGVkID0gVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWw7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwqIGNyZWF0ZShK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+JiYgaW1wbCkKKyAgICB7CisgICAg
ICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4oZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKHN0cnVj
dHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgewor
ICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3Vy
cmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOworICAgIFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsJiB3cmFwcGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCY+KEJhc2U6OndyYXBwZWQoKSk7CisgICAg
fQorcHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbD4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBl
ID0gVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwqOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI2NjYz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9i
YWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUg
IkpTVGVzdENhbGxUcmFjZXIuaCIKICNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTVGVzdERPTUpJVC5oIgorI2luY2x1ZGUgIkpTVGVz
dERlZmF1bHRUb0pTT04uaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZS5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisj
aW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgogI2luY2x1ZGUgIkpT
VGVzdERvbWFpblNlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5o
IgogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgiCkBAIC04NCwxMCArODgsNiBA
QAogI2luY2x1ZGUgIkpTVGVzdFJlYWRPbmx5TWFwTGlrZS5oIgogI2luY2x1ZGUgIkpTVGVzdFJl
YWRPbmx5U2V0TGlrZS5oIgogI2luY2x1ZGUgIkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5o
IgotI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oIgotI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0LmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bC5oIgogI2luY2x1ZGUgIkpTVGVzdFNldExpa2UuaCIKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdp
Zmllci5oIgogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmgi
CkBAIC0xOTEsNiArMTkxLDE0IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGUKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0
b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMjgxLDE0ICsyODksNiBAQCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwpAQCAtMzIwLDEzICszMjAsMTMgQEAgdXNpbmcgSlNUZXN0R2xvYmFs
T2JqZWN0Q29uc3RydWN0b3IgPSBKUwogCiAvKiBIYXNoIHRhYmxlICovCiAKLXN0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2
OF0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFs
T2JqZWN0VGFibGVJbmRleFsyNjddID0gewogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MCwgLTEg
fSwKKyAgICB7IDQ0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAwLCAtMSB9LAotICAg
IHsgOCwgMjYzIH0sCi0gICAgeyA0NCwgLTEgfSwKKyAgICB7IDgsIC0xIH0sCisgICAgeyA0OCwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
QEAgLTMzNCwxMSArMzM0LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDU0LCAtMSB9LAorICAgIHsgNTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyMywgLTEgfSwKKyAgICB7IDI3LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApA
QCAtMzU2LDE0ICszNTYsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgMzQsIC0xIH0sCisgICAgeyAzOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyA3MSwgLTEgfSwKLSAgICB7IDEzLCAyNTggfSwKKyAgICB7IDE3LCAyNTkgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM3
MSw4ICszNzEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAz
OCwgLTEgfSwKLSAgICB7IDIwLCAyNjQgfSwKKyAgICB7IDQyLCAtMSB9LAorICAgIHsgMjQsIDI2
MyB9LAogICAgIHsgMTAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApA
QCAtMzg0LDE0ICszODQsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgMzYsIC0xIH0sCisgICAgeyA0MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIyLCAyNjUgfSwKKyAgICB7IDI2LCAyNjQgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQx
Myw1OCArNDEzLDU3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDI0LCAyNTYgfSwKKyAgICB7IDE0LCAyNTYgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNjEs
IC0xIH0sCi0gICAgeyAxOSwgLTEgfSwKKyAgICB7IDIzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ2LCAtMSB9LAotICAgIHsgMTgsIC0xIH0sCisgICAg
eyA1MCwgLTEgfSwKKyAgICB7IDIyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzNSwgLTEgfSwK
KyAgICB7IDM5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IDQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMTMsIC0x
IH0sCisgICAgeyA1NCwgLTEgfSwKKyAgICB7IDI5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA1MCwgLTEgfSwKLSAgICB7IDI1LCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCi0gICAgeyAy
LCAyNjcgfSwKLSAgICB7IDM3LCAtMSB9LAorICAgIHsgMiwgMjY2IH0sCisgICAgeyA0MSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAg
ICB7IDIxLCAtMSB9LAorICAgIHsgMjUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgNTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDM1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA0MiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgNDYsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDUzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNCwgLTEgfSwK
KyAgICB7IDU3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAxOCwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ3Myw2ICs0
NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAxNSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAt
NDgzLDggKzQ4Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDMyLCAtMSB9LAotICAgIHsgMjksIDI2MiB9LAorICAgIHsgMzYsIC0xIH0sCisgICAgeyAzMywg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApA
QCAtNDk0LDcgKzQ5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAg
ICB7IDE2LCAyNTcgfSwKKyAgICB7IDIwLCAyNTggfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
NjIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTUwNSw5ICs1MDUsOSBAQCBzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMywgMjY2IH0sCisgICAgeyAzNywgMjY1
IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE3LCAtMSB9LAorICAgIHsgMjEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IDY1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01Mjgs
MTEgKzUyOCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1
NiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAzLCAtMSB9LAorICAgIHsgMTYsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01NTAsNDEg
KzU1MCw0MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0OCwg
MjYxIH0sCi0gICAgeyAxMSwgMjYwIH0sCisgICAgeyA1MiwgMjYyIH0sCisgICAgeyAxMSwgMjYx
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDYzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA0NywgLTEgfSwKKyAgICB7IDUxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNSwgLTEg
fSwKKyAgICB7IDE5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNiwgLTEgfSwKKyAg
ICB7IDMwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI4
LCAtMSB9LAorICAgIHsgMzIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgNDUsIC0xIH0sCisgICAgeyA0OSwgLTEgfSwKICAgICB7IDcsIC0xIH0sCi0gICAg
eyA1MSwgLTEgfSwKKyAgICB7IDU1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1Miwg
LTEgfSwKKyAgICB7IDU2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNywgMjU5IH0sCi0gICAg
eyAzMCwgLTEgfSwKLSAgICB7IDM5LCAtMSB9LAotICAgIHsgNDEsIC0xIH0sCisgICAgeyAyOCwg
MjU3IH0sCisgICAgeyAzMSwgMjYwIH0sCisgICAgeyAzNCwgLTEgfSwKICAgICB7IDQzLCAtMSB9
LAotICAgIHsgNDksIC0xIH0sCi0gICAgeyA1NSwgLTEgfSwKLSAgICB7IDU3LCAtMSB9LAorICAg
IHsgNDUsIC0xIH0sCisgICAgeyA0NywgLTEgfSwKKyAgICB7IDUzLCAtMSB9LAogICAgIHsgNTks
IC0xIH0sCiAgICAgeyA2NCwgLTEgfSwKICAgICB7IDY4LCAtMSB9LApAQCAtNjE1LDYgKzYxNCwx
MCBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xvYmFsCiAjZW5kaWYKICAg
ICB7ICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEds
b2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RE9NSklUIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RE9NSklUQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29u
c3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3Ip
IH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEds
b2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7
ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpIH0gfSwKICAg
ICB7ICJUZXN0RG9tYWluU2VjdXJpdHkiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RE
b21haW5TZWN1cml0eUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNl
Y3VyaXR5Q29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RW5hYmxlZEJ5U2V0dGluZyIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IpIH0gfSwK
ICAgICB7ICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKQEAgLTY2NSwxMCArNjY4LDYgQEAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgIlRlc3RSZWFkT25s
eU1hcExpa2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VD
b25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1
Y3RvcikgfSB9LAogICAgIHsgIlRlc3RSZWFkT25seVNldExpa2UiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEds
b2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RSZXBv
cnRFeHRyYU1lbW9yeUNvc3QiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9u
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9y
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfSB9LAot
ICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2VDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1
Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVj
dG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvcikgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKICAgICB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3Ry
dWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3IpIH0gfSwKICNlbHNlCkBAIC0xMjEwLDYgKzEyMDksOTggQEAgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29ucwogICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01K
SVRDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiVGVzdERPTUpJVCIpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gSlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVj
dG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdERlZmF1bHRU
b0pTT04iKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RGVmYXVsdFRvSlNPTiIpLCBzdHJsZW4oIlRlc3RE
ZWZhdWx0VG9KU09OIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpz
ZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdERl
ZmF1bHRUb0pTT04iKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpn
ZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0
RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIiksIHN0cmxl
bigiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIikpLCB2YWx1ZSk7Cit9CisK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVj
dG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENv
bnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IiksIHN0cmxl
bigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWxDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiKSwgc3RybGVuKCJUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbCIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7
Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWlu
U2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKQEAgLTIyMTEsOTggKzIzMDIsNiBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Iik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlv
bkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvclNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJp
YWxpemF0aW9uIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb24iKSksIHZhbHVlKTsKLX0KLQot
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgot
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2UiKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKLXsK
LSAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSks
IHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdCIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0KQotewotICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yR2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7
Ci19Ci0KLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvclNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsKLX0KLQogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJl
R2V0U2VjcmV0Qm9vbGVhbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsK
ICNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJh
bWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90
eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSop
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvbktleXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVh
Y2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAK
QEAgLTE1MCwxMSArMTUwLDExIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RO
b2RlUHIKICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRp
ZgorICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxS
YXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAogICAgIHsgImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkVudHJpZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAia2V5cyIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9k
ZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ2YWx1
ZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rp
b24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0g
fSwKICAgICB7ICJmb3JFYWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwg
KGludHB0cl90KSAoMSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90
eXBlKSB9OwpAQCAtMzgzLDYgKzM4MywyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE5vZGVQCiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIHRv
SlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5u
YW1lKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAidG9KU09OIik7Cit9CisKIHN0cnVjdCBUZXN0Tm9kZUl0ZXJhdG9yVHJhaXRzIHsK
ICAgICBzdGF0aWMgY29uc3RleHByIEpTRE9NSXRlcmF0b3JUeXBlIHR5cGUgPSBKU0RPTUl0ZXJh
dG9yVHlwZTo6U2V0OwogICAgIHVzaW5nIEtleVR5cGUgPSB2b2lkOwpAQCAtNDg2LDI5ICs1MDIs
NiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoQ2FsbGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImZvckVh
Y2giKTsKIH0KIAotSlNDOjpKU09iamVjdCogSlNUZXN0Tm9kZTo6c2VyaWFsaXplKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
JmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0K
LSAgICBhdXRvIG5hbWVWYWx1ZSA9IGpzVGVzdE5vZGVOYW1lR2V0dGVyKGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
LSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5h
bWUiKSwgbmFtZVZhbHVlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0Tm9k
ZSogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6
OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05C
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIpOwotfQotCiBK
U0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFs
T2JqZWN0JiwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk0
LDcgKzE1OTQsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5k
V29ya2VyRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Ub1N0cmluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRv
SlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAogLy8gQXR0cmli
dXRlcwogCkBAIC0yMzM0LDcgKzIzMzMsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUg
SlNUZXN0T2JqUHJvCiAgICAgeyAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9u
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9u
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJG
dW5jdGlvbiksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJjb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
ZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uKSwgKGludHB0cl90KSAo
MCkgfSB9LAogICAgIHsgInRvU3RyaW5nIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3Ry
aW5nKSwgKGludHB0cl90KSAoMCkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjEpCiAgICAgeyAiQ09ORElUSU9OQUxfQ09OU1QiLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxv
bmcpKDApIH0gfSwKICNlbHNlCkBAIC05NDAxLDQxICs5Mzk5LDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCi1KU0M6OkpTT2Jq
ZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGNyZWF0ZVZhbHVlID0g
anNUZXN0T2JqQ3JlYXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwot
ICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZSIpLCBjcmVhdGVWYWx1ZSk7
Ci0KLSAgICBhdXRvIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlID0ganNUZXN0T2JqUmVhZE9ubHlT
dHJpbmdBdHRyR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpLCByZWFkT25s
eVN0cmluZ0F0dHJWYWx1ZSk7Ci0KLSAgICBhdXRvIGVudW1BdHRyVmFsdWUgPSBqc1Rlc3RPYmpF
bnVtQXR0ckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtQXR0ciIpLCBlbnVtQXR0clZhbHVlKTsKLQot
ICAgIGF1dG8gbG9uZ0F0dHJWYWx1ZSA9IGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImxvbmdBdHRyIiksIGxvbmdBdHRyVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSosIEpTVGVzdE9iaiogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdE9iajo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwg
KnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7
Ci19Ci0KIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDI2NjYzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsK
ICAgICBtdXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRBdHRy
aWJ1dGUxOwogICAgIG11dGFibGUgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2Nh
Y2hlZEF0dHJpYnV0ZTI7CiAjaWYgRU5BQkxFKENPTkRJVElPTikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc2NyArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0KLSNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKLSNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCi0jaW5jbHVkZSAiSlNET01D
b252ZXJ0Qm9vbGVhbi5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0TnVt
YmVycy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgotI2luY2x1ZGUgIkpT
RE9NQ29udmVydFN0cmluZ3MuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
Ci0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTU9wZXJhdGlv
bi5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCi0jaW5jbHVkZSAiSlNUZXN0RXhj
ZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2UuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgiCi0jaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9VUkwuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2Ug
SlNDOwotCi0vLyBGdW5jdGlvbnMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLQotLy8gQXR0cmlidXRlcwotCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5
cGVkZWZBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJ
bmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
blR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0KLWNsYXNzIEpTVGVz
dFNlcmlhbGl6YXRpb25Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0Owot
ICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBT
VEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uUHJv
dG90eXBlLCBCYXNlKTsKLSAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0
U2VyaWFsaXphdGlvblByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6QmFz
ZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciA9IEpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb24+OwotCi10ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0
aW9uUHJvdG90eXBlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9u
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sICJUZXN0U2VyaWFsaXphdGlvbiJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Db25z
dHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25D
b25zdHJ1Y3RvcikgfTsKLQotLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCi0KLXN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlVGFibGVW
YWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfSB9LAot
ICAgIHsgImZpcnN0U3RyaW5nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdB
dHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUpIH0gfSwK
LSAgICB7ICJzZWNvbmRMb25nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0
dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKSB9IH0sCi0g
ICAgeyAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvblRoaXJk
VW5zZXJpYWxpemFibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0
dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0
ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUp
IH0gfSwKLSAgICB7ICJmaWZ0aExvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExv
bmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKSB9IH0s
Ci0gICAgeyAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBl
ZGVmQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZSkg
fSB9LAotICAgIHsgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2Vy
aWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSksIChpbnRwdHJf
dCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNl
cmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUpIH0gfSwKLSAg
ICB7ICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlKSB9IH0sCi0gICAgeyAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxl
QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNj
ZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFs
aXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJlbGV2ZW50aFNl
cXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmli
dXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKSB9IH0sCi0g
ICAgeyAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
VHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3
ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkg
fSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBl
KSB9OwotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmVpZnlTdGF0
aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0aW9uOjppbmZvKCksIEpTVGVzdFNlcmlh
bGl6YXRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAgIEpTQ19UT19TVFJJTkdf
VEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwotfQotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2Vy
aWFsaXphdGlvbjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRp
b24pIH07Ci0KLUpTVGVzdFNlcmlhbGl6YXRpb246OkpTVGVzdFNlcmlhbGl6YXRpb24oU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
U2VyaWFsaXphdGlvbj4mJiBpbXBsKQotICAgIDogSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemF0
aW9uPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9p
ZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBU
ZXN0U2VyaWFsaXphdGlvbj46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0Fj
dGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3Nl
cyBBY3RpdmVET01PYmplY3QuIik7Ci0KLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRp
b246OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmNyZWF0ZSh2
bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkp
KTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OnByb3RvdHlwZShWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVBy
b3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotSlNW
YWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxp
emF0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQotewotICAgIEpTVGVzdFNlcmlhbGl6
YXRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oY2Vs
bCk7Ci0gICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXphdGlvbjo6fkpTVGVzdFNlcmlhbGl6
YXRpb24oKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0gICAgcmV0dXJu
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb24qIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxp
emF0aW9uPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lJiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFs
aXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhp
c1ZhbHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJp
YWxpemF0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1i
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJ
S0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewot
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0
U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmlyc3RT
dHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0
ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAg
cmV0dXJuIGltcGwuc2V0Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0
PHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RTdHJpbmdBdHRy
aWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25T
ZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1
dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExv
bmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9u
Z0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmli
dXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJp
YWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0U2Vjb25kTG9uZ0F0dHJp
YnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9u
Z0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24m
IHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxp
emF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmli
dXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50
ZXJmYWNlPFRlc3RFeGNlcHRpb24+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAi
VGVzdEV4Y2VwdGlvbiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0VGhpcmRVbnNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlv
blRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUi
KTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldEZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0
aExvbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUi
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExv
bmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRGaWZ0aExv
bmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlm
dGhMb25nQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
Pjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAg
QXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsm
XSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldFNpeHRoVHlwZWRlZkF0dHJpYnV0ZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJp
YWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1
dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlv
biYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRo
RGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJp
YWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETElu
dGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAic2V2ZW50aERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7
IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
ewotICAgICAgICByZXR1cm4gaW1wbC5zZXRTZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGUoKm5hdGl2ZVZhbHVlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlv
blNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsK
LSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFs
aXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RT
ZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0
ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAg
ICAgICByZXR1cm4gaW1wbC5zZXRFaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCpuYXRpdmVWYWx1
ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlv
bj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFs
aXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJl
Y3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJ
RExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlv
bmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldE5pbnRoT3B0aW9uYWxEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0
aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRlbnRo
RnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZy
b3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRl
KCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3pl
bkFycmF5QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvblRlbnRo
RnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0ZW50aEZyb3plbkFycmF5QXR0
cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
VGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
ewotICAgICAgICByZXR1cm4gaW1wbC5zZXRUZW50aEZyb3plbkFycmF5QXR0cmlidXRlKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFy
cmF5QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXph
dGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0
aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9N
U3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5z
ZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbGV2ZW50aFNlcXVl
bmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0
KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRl
KCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0
aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidHdl
bGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRl
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxp
emF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETEludGVy
ZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0g
ICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0
dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5j
ZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQotCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0
aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gZmlyc3RTdHJpbmdBdHRy
aWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRl
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCBmaXJzdFN0cmluZ0F0dHJpYnV0
ZVZhbHVlKTsKLQotICAgIGF1dG8gc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2Vy
aWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9u
Z0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBmb3Vy
dGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25G
b3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0
dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZmlmdGhMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rl
c3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRo
TG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHNp
eHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRl
ZkF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4
dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8qIHNl
dmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCk7Ci0gICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKLQotICAgIGF1dG8gZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVH
ZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8qIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVT
ZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6
c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsICpqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2UqPihlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlVmFsdWUpLCBn
bG9iYWxPYmplY3QpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpLCBlaWdodGhJbmRpcmVjdGx5
QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKLQotICAgIGF1dG8gbmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
LSAgICBpZiAoIW5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVl
LmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1dG8qIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwqPihuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0
ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0
ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpLCB0ZW50aEZyb3plbkFy
cmF5QXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRl
VmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRl
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIGVsZXZlbnRoU2VxdWVu
Y2VBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRv
SlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSos
IEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXph
dGlvbj46OmNhbGw8anNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKLX0KLQotSlND
OjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXphdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQotewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFNlcmlhbGl6YXRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFNlcmlhbGl6YXRpb24+IHx8ICFKU1Rlc3RTZXJpYWxpemF0aW9uOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXJpYWxpemF0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgp
LCBKU1Rlc3RTZXJpYWxpemF0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFNlcmlhbGl6YXRpb24gPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VC
U1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJp
YWxpemF0aW9uKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNl
cmlhbGl6YXRpb24uZ2V0KCk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
aWYgKCZKU1Rlc3RTZXJpYWxpemF0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKLSAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7Ci19Ci0KLXZvaWQgSlNUZXN0
U2VyaWFsaXphdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXph
dGlvbio+KGNlbGwpOwotICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGws
ICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCi0gICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAi
dXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmlu
ZygpKTsKLSAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Ci19Ci0KLWJvb2wg
SlNUZXN0U2VyaWFsaXphdGlvbk93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKiogcmVhc29uKQotewotICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwotICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLSAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbk93bmVyOjpmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKLXsKLSAg
ICBhdXRvKiBqc1Rlc3RTZXJpYWxpemF0aW9uID0gc3RhdGljX2Nhc3Q8SlNUZXN0U2VyaWFsaXph
dGlvbio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKLSAgICBhdXRvJiB3b3JsZCA9ICpzdGF0
aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKLSAgICB1bmNhY2hlV3JhcHBlcih3
b3JsZCwgJmpzVGVzdFNlcmlhbGl6YXRpb24tPndyYXBwZWQoKSwganNUZXN0U2VyaWFsaXphdGlv
bik7Ci19Ci0KLSNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCi0jaWYgUExBVEZPUk0oV0lO
KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCi1leHRlcm4gIkMiIHsgZXh0ZXJuIHZv
aWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2VyaWFsaXphdGlvbkBXZWJDb3JlQEA2
QkAiKVtdKSgpOyB9Ci0jZWxzZQotZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJD
b3JlMTdUZXN0U2VyaWFsaXphdGlvbkVbXTsgfQotI2VuZGlmCi0jZW5kaWYKLQotSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKQotewotCi0j
aWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQotICAgIGNvbnN0IHZvaWQqIGFjdHVhbFZUYWJs
ZVBvaW50ZXIgPSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkpOwotI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBfX2lkZW50aWZpZXIoIj8/XzdU
ZXN0U2VyaWFsaXphdGlvbkBXZWJDb3JlQEA2QkAiKTsKLSNlbHNlCi0gICAgdm9pZCogZXhwZWN0
ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUxN1Rlc3RTZXJpYWxpemF0aW9uRVsyXTsK
LSNlbmRpZgotCi0gICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0U2VyaWFsaXphdGlvbiBkb2VzIG5v
dCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCi0gICAgLy8gSW1wbGVtZW50
YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCi0g
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvbHltb3JwaGljPFRlc3RTZXJpYWxpemF0aW9uPjo6
dmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiBpcyBub3QgcG9seW1vcnBoaWMiKTsKLQotICAgIC8v
IElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZy
ZWUgYnVnLCBvcgotICAgIC8vIFRlc3RTZXJpYWxpemF0aW9uIGhhcyBzdWJjbGFzc2VzLiBJZiBU
ZXN0U2VyaWFsaXphdGlvbiBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKLSAgICAvLyB0
byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdFNlcmlhbGl6YXRpb24geW91IHRvIG9w
dCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKLSAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFi
bGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCi0g
ICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBv
aW50ZXIpOwotI2VuZGlmCi0gICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdFNlcmlhbGl6YXRp
b24+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTZXJpYWxpemF0aW9uJiBpbXBsKQotewotICAgIHJldHVy
biB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci19Ci0KLVRl
c3RTZXJpYWxpemF0aW9uKiBKU1Rlc3RTZXJpYWxpemF0aW9uOjp0b1dyYXBwZWQoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KHZtLCB2YWx1ZSkpCi0gICAgICAgIHJldHVy
biAmd3JhcHBlci0+d3JhcHBlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi19CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVGVzdFNl
cmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9uIDogcHVibGljIEpTRE9N
V3JhcHBlcjxUZXN0U2VyaWFsaXphdGlvbj4gewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBK
U0RPTVdyYXBwZXI8VGVzdFNlcmlhbGl6YXRpb24+OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxp
emF0aW9uKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemF0aW9uPiYmIGltcGwpCi0gICAgewot
ICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb24+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkg
SlNUZXN0U2VyaWFsaXphdGlvbihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1w
bCkpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNy
ZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwot
ICAgIHN0YXRpYyBUZXN0U2VyaWFsaXphdGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKLQotICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxp
emUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQotICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLXByb3RlY3RlZDoK
LSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7Ci19OwotCi1jbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXIgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Ci19
OwotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVy
V29ybGQmLCBUZXN0U2VyaWFsaXphdGlvbiopCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEpTVGVzdFNlcmlhbGl6YXRpb25Pd25lcj4gb3duZXI7Ci0gICAgcmV0dXJuICZvd25lci5nZXQo
KTsKLX0KLQotaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdFNlcmlhbGl6YXRpb24qIHdyYXBw
YWJsZU9iamVjdCkKLXsKLSAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwotfQotCi1KU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
U2VyaWFsaXphdGlvbiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3RTZXJpYWxpemF0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUds
b2JhbE9iamVjdCosIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJik7Ci1pbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RTZXJpYWxp
emF0aW9uPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6
anNOdWxsKCk7IH0KLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFRlc3RTZXJpYWxpemF0aW9uPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0
U2VyaWFsaXphdGlvbjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdFNlcmlh
bGl6YXRpb24qOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuY3Bw
CShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlLmgiCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgotI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLS8vIEF0dHJpYnV0ZXMKLQot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotCi1jbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmpl
Y3Q7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJv
dG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERF
Q0xBUkVfSU5GTzsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFj
ZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpW
TSYgdm0pCi0gICAgewotICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSwgQmFzZSk7
Ci0gICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKLSAgICB9Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKLX07Ci1TVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSwgSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OkJhc2UpOwotCi11c2luZyBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yID0gSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2U+OwotCi10ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Iodm0sICZnbG9iYWxP
YmplY3QpOwotfQotCi10ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotfQotCi10
ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0
b3IpIH07Ci0KLS8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwotCi1zdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90
b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvciksIChpbnRwdHJf
dCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH0gfSwKLX07Ci0KLWNv
bnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3Rv
dHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSkgfTsKLQotdm9pZCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZWlm
eVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlOjppbmZvKCksIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90
eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKLSAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RS
QU5TSVRJT04oKTsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKSB9OwotCi1KU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6SlNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+
JiYgaW1wbCkKLSAgICA6IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQotewotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+Ojp2YWx1ZSwgIkludGVyZmFjZSBp
cyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0
aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOwotCi19Ci0KLUpTT2JqZWN0
KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6Y3JlYXRlUHJvdG90eXBl
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4g
SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OmNyZWF0ZSh2
bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOwotfQotCi1KU09i
amVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlwZShW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4odm0s
IGdsb2JhbE9iamVjdCk7Ci19Ci0KLUpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29u
c3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlw
ZS0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJu
IHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwotfQotCi1KU0M6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQotewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRh
LnN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpKQotICAgICAgICByZXR1
cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4g
fHwgIUpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPikKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFw
LCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlID0gbWFrZVVuaXF1
ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxs
VHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UpOwotICAg
IGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2UuZ2V0KCk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgaWYgKCZKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCi0g
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNw
YWNlOwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCi17Ci0gICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZSo+KGNlbGwpOwotICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNl
bGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxs
LCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0
cmluZygpKTsKLSAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Ci19Ci0KLQot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlLmgJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZS5oCShub25leGlzdGVudCkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgotI2luY2x1ZGUg
IkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgiCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UgOiBwdWJsaWMgSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQgewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdDsKLSAgICB1c2luZyBET01XcmFwcGVkID0gVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlOwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2U+JiYgaW1wbCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKHN0cnVjdHVy
ZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAg
ICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVu
dGx5KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGwodm0pOwotICAgIH0KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKLSAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwotICAgIFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZSYgd3JhcHBlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlJj4oQmFzZTo6d3JhcHBl
ZCgpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci19OwotCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+IHsK
LSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZTsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAkocmV2aXNpb24g
MjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI3NCArMCwwIEBA
Ci0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiSlNET01BdHRy
aWJ1dGUuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMu
aCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01P
cGVyYXRpb24uaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgotI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
T2JqZWN0Q29uc3RydWN0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlu
bGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotLy8gRnVuY3Rpb25zCi0KLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwot
Ci0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLQotY2xhc3Mg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZp
bmFsT2JqZWN0OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlw
ZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUsIEJh
c2UpOwotICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7Ci0gICAgfQotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJv
dG90eXBlOjpCYXNlKTsKLQotdXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1
Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0PjsKLQotdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3Qg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2Vy
aWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3Iodm0sICZnbG9iYWxPYmplY3QpOwotfQotCi10ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQot
ewotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotfQot
Ci10ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENv
bnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IpIH07Ci0KLS8qIEhhc2ggdGFibGUgZm9yIHByb3Rv
dHlwZSAqLwotCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJjb25zdHJ1Y3RvciIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvciksIChpbnRwdHJf
dCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IpIH0gfSwKLSAgICB7ICJpbmhlcml0TG9uZ0F0
dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZSksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUpIH0gfSwKLSAgICB7
ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04pLCAoaW50cHRyX3QpICgwKSB9IH0sCi19OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUpIH07Ci0KLXZvaWQgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
LXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0
aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6aW5mbygpLCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdFByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NU
UklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCkgfTsKLQotSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ6OkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0PiYmIGltcGwpCi0gICAgOiBKU1Rlc3RTZXJpYWxpemF0aW9uKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQotewotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQ+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01P
YmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZl
RE9NT2JqZWN0LiIpOwotCi19Ci0KLUpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU6OmNy
ZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlv
bjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7Ci19Ci0KLUpTT2JqZWN0KiBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCogSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQotewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSYgY2FsbEZyYW1lKQotewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNh
bGxGcmFtZS50aGlzVmFsdWUoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90
b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17
Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0KQot
ewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmluaGVyaXRMb25nQXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+
OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldEluaGVyaXRMb25nQXR0
cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7
Ci19Ci0KLUpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxp
emUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQot
ewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVz
dWx0ID0gSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7Ci0KLSAgICBhdXRvIGluaGVyaXRMb25nQXR0cmli
dXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRl
R2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0
cmlidXRlVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhbGw8anNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCi17Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0PiB8fCAhSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+KQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA9IG1ha2VVbmlxdWU8
SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQpOwotICAg
IGVsc2UKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2
bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCk7Ci0g
ICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdC5nZXQoKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKLSAgICAgICAgY2xpZW50RGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICByZXR1cm4gc3BhY2U7Ci19Ci0KLXZvaWQgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Kj4oY2VsbCk7Ci0gICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVj
dEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7Ci0gICAgaWYgKHRoaXNPYmpl
Y3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxG
b3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+dXJsKCkuc3RyaW5nKCkpOwotICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVy
KTsKLX0KLQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQu
aAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3
NiArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbi5oIgot
I2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IDogcHVibGljIEpTVGVzdFNl
cmlhbGl6YXRpb24gewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU1Rlc3RTZXJpYWxpemF0
aW9uOwotICAgIHVzaW5nIERPTVdyYXBwZWQgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0g
ICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdD4mJiBpbXBsKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGlt
cGwpKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwot
ICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBj
cmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsK
LQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZN
JiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAobW9k
ZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7Ci0gICAgfQot
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwotICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7Ci0gICAgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB3cmFwcGVkKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmPihC
YXNlOjp3cmFwcGVkKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdD4mJik7Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mKTsKLX07Ci0KLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5
cGUgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmNwcAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMzA4ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwu
aCIKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCi0jaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKLSNp
bmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25I
YW5kbGluZy5oIgotI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01X
cmFwcGVyQ2FjaGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5j
bHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hl
YXBBbmFseXplci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L1VSTC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0K
LS8vIEZ1bmN0aW9ucwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotCi0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVCYXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFs
TG9uZ0F0dHJpYnV0ZUJhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsK
LXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0
YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRy
OwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90
eXBlLCBCYXNlKTsKLSAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAgIH0K
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSwgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OwotCi10ZW1wbGF0ZTw+
IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yOjpwcm90
b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpn
ZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci19
Ci0KLXRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcikgfTsKLQotLyogSGFz
aCB0YWJsZSBmb3IgcHJvdG90eXBlICovCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17
Ci0gICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1
Y3RvcikgfSB9LAotICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28pIH0gfSwKLSAgICB7ICJmaW5hbExvbmdB
dHRyaWJ1dGVCYXIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUp
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVCYXIpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
QmFyKSB9IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCi19OwotCi1jb25z
dCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxQcm90b3R5cGUpIH07Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmluZm8oKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbFByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NUUklOR19U
QUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCkgfTsKLQotSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbDo6SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiYmIGltcGwpCi0gICAgOiBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsK
LX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vf
b2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnZhbHVl
LCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91
Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7Ci0K
LX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmNyZWF0ZVBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGU6OmNyZWF0ZSh2
bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7Ci19Ci0KLUpTT2JqZWN0KiBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0K
LUpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3Io
Vk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3Ry
dWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwqIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2FzdChK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlKQotewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsKiBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSYgY2FsbEZyYW1lKQotewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWwqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2Fs
bEZyYW1lLnRoaXNWYWx1ZSgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJl
dHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0
b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVG
b29HZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9v
KCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmdldDxqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9v
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0RmluYWxM
b25nQXR0cmlidXRlRm9vKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmlu
YWxMb25nQXR0cmlidXRlRm9vKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+
OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUZvb1NldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiZmluYWxMb25nQXR0cmlidXRlRm9vIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigpKSkpOwot
fQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlQmFyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpnZXQ8anNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldEZpbmFsTG9uZ0F0dHJp
YnV0ZUJhcihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUJhcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6c2V0PHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpbmFs
TG9uZ0F0dHJpYnV0ZUJhciIpOwotfQotCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdDo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCk7Ci0KLSAgICBhdXRvIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlID0ganNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05C
b2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXpl
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYWxsPGpz
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KLUpTQzo6
SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmdldCgpKQotICAgICAgICByZXR1
cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB8fCAhSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SXNvU3Vic3Bh
Y2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCk7Ci0gICAgZWxz
ZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsLmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAg
IGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwot
fQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKLXsKLSAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihjZWxsKTsKLSAg
ICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3Jh
cHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQot
ICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6
YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwotfQotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAkocmV2aXNpb24gMjY2NjM0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWwuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0g
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgot
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBw
ZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUg
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCA6IHB1YmxpYyBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0OwotICAgIHVzaW5nIERPTVdyYXBwZWQgPSBUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4mJiBpbXBs
KQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICByZXR1
cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5
cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotICAgIERFQ0xB
UkVfSU5GTzsKLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRo
aXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpT
Qzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAg
ICBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwm
PihCYXNlOjp3cmFwcGVkKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci19OwotCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4gewotICAgIHVz
aW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7Ci0gICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
KjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9ET01NYXRyaXhSZWFkT25seS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtOTcsNSArOTcs
NSBAQAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFycmF5
KCk7CiAKICAgICBbRXhwb3NlZD1XaW5kb3csIE1heVRocm93RXhjZXB0aW9uXSBzdHJpbmdpZmll
cjsKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5p
ZGwJKHJldmlzaW9uIDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRP
bmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDUsNSArNDUsNSBAQAogCiAgICAgW01heVRocm93
RXhjZXB0aW9uXSBET01Qb2ludCBtYXRyaXhUcmFuc2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4SW5p
dCBtYXRyaXgpOwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1
bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVh
ZC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCShyZXZp
c2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9pbnQg
cDQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgW1NhbWVPYmplY3RdLgogICAgIFtOZXdPYmplY3RdIERP
TVJlY3QgZ2V0Qm91bmRzKCk7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAg
ICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9ET01SZWN0UmVhZE9ubHkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
T01SZWN0UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRE9NUmVjdFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBAQAog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZG91YmxlIGJvdHRvbTsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSBsZWZ0OwogCi0gICAgc2VyaWFs
aXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHJldmlzaW9u
IDI2NjYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1Rp
bWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBzdGFydFRpbWU7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247Ci0gICAgc2Vy
aWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VU
aW1pbmcuaAkocmV2aXNpb24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3Jt
YW5jZVJlc291cmNlVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEzICs2MywxMyBAQCBw
dWJsaWM6CiAgICAgZG91YmxlIHJlc3BvbnNlRW5kKCkgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9y
PFJlZjxQZXJmb3JtYW5jZVNlcnZlclRpbWluZz4+JiBzZXJ2ZXJUaW1pbmcoKSBjb25zdCB7IHJl
dHVybiBtX3NlcnZlclRpbWluZzsgfQogCisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gVHlwZTo6UmVzb3VyY2U7IH0KKyAgICBBU0NJSUxpdGVyYWwgZW50cnlUeXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gInJlc291cmNlIl9zOyB9CisKIHByaXZhdGU6CiAgICAgUGVyZm9y
bWFuY2VSZXNvdXJjZVRpbWluZyhNb25vdG9uaWNUaW1lIHRpbWVPcmlnaW4sIFJlc291cmNlVGlt
aW5nJiYpOwogICAgIH5QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nKCk7CiAKLSAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpSZXNvdXJjZTsgfQotICAgIEFTQ0lJTGl0
ZXJhbCBlbnRyeVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAicmVzb3VyY2UiX3M7IH0KLQog
ICAgIGRvdWJsZSBuZXR3b3JrTG9hZFRpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoU2Vjb25kcykg
Y29uc3Q7CiAKICAgICBBdG9tU3RyaW5nIG1faW5pdGlhdG9yVHlwZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAkocmV2aXNp
b24gMjY2NjM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGlt
aW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSArNTMsNSBAQCB0eXBlZGVmIGRvdWJsZSBE
T01IaWdoUmVzVGltZVN0YW1wOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGlt
ZVN0YW1wIHJlc3BvbnNlRW5kOwogICAgIFtFbmFibGVkQXRSdW50aW1lPVNlcnZlclRpbWluZ10g
cmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PFBlcmZvcm1hbmNlU2VydmVyVGltaW5nPiBz
ZXJ2ZXJUaW1pbmc7CiAKLSAgICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBhdHRyaWJ1dGUgfTsK
KyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmcuaWRsCShyZXZpc2lvbiAyNjY2MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNSArMzYsNSBAQCB0eXBlZGVmIGRvdWJsZSBET01IaWdoUmVzVGlt
ZVN0YW1wOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBkdXJhdGlvbjsKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgIHNlcmlhbGl6ZXIgPSB7YXR0
cmlidXRlfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCShyZXZpc2lvbiAyNjY2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNSArNTQsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxvbmcgbG9hZEV2ZW50U3RhcnQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgbG9uZyBsb2FkRXZlbnRFbmQ7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsK
KyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408675</attachid>
            <date>2020-09-13 20:12:09 -0700</date>
            <delta_ts>2020-09-13 21:11:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200913201208.patch</filename>
            <type>text/plain</type>
            <size>338586</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTEzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSAnc2VyaWFsaXph
YmxlJyBrZXl3b3JkLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGZyb20gV2ViSURMLAorICAgICAg
ICB3aXRoIGl0cyByZXBsYWNlbWVudCwgJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknLgorICAg
ICAgICAKKyAgICAgICAgVGhlIG5ldyB2ZXJzaW9uIGlzIHByZXR0eSBzaW1pbGFyLCBidXQgaGFz
IG11Y2ggbGVzcyByb29tIGZvciBjdXN0b21pemF0aW9uCisgICAgICAgIGluIHRoYXQgeW91IGNh
biBubyBsb25nZXIgc3BlY2lmeSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
SlNPTgorICAgICAgICByZXN1bHQuIFJhdGhlciwgYWxsIGF0dHJpYnV0ZXMgdGhhdCBxdWFsaXR5
IGFzIGhhdmUgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoKKyAg
ICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1YWQu
aWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBhZ2Uv
UGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmg6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDoK
KyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbDoKKyAgICAgICAgKiBw
YWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGw6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
aWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRBZGRyZXNzLmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGw6
CisgICAgICAgIFVwZGF0ZSBJRExzIHJlcGxhY2luZyBhbGwgdXNlIG9mIHNlcmlhbGl6ZXIuCisg
ICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAg
ICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNK
U09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFi
bGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxl
KToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVP
cGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5p
dGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAg
ICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6
CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlN
ZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmli
dXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb246CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBbRGVmYXVsdF0gdG9KU09OIGFuZCByZW1v
dmUgc3VwcG9ydCBmb3Igc2VyaWFsaXplci4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsOiBSZW1vdmVkLgorICAgICAgICBVcGRhdGUg
dGVzdHMuCisKIDIwMjAtMDktMTMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJJRExdIFJlbW92ZSBuZWVkIGZvciBbTWF5VGhyb3dFeGNlcHRpb25dIG9uIGNv
bnN0cnVjdG9ycyBhbmQgbGVnYWN5IGZhY3RvcnkgZnVuY3Rpb25zCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRs
CShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWFEZXZpY2VLaW5kIGtpbmQ7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBsYWJlbDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGdyb3VwSWQ7Ci0gICAgc2VyaWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwogCiAvLyBGSVhNRSAxNjk4NzE6IG1pc3NpbmcgSW5wdXRE
ZXZpY2VJbmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuY3BwCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDYgKzY3LDE1IEBAIFJlZjxSVENJY2VDYW5kaWRhdGU+IFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlk
YXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXgsIFdURk1vdmUoKmZpZWxkcykpKTsKIH0KIAorUlRD
SWNlQ2FuZGlkYXRlSW5pdCBSVENJY2VDYW5kaWRhdGU6OnRvSlNPTigpIGNvbnN0Cit7CisgICAg
UlRDSWNlQ2FuZGlkYXRlSW5pdCByZXN1bHQ7CisgICAgcmVzdWx0LmNhbmRpZGF0ZSA9IG1fY2Fu
ZGlkYXRlOworICAgIHJlc3VsdC5zZHBNaWQgPSBtX3NkcE1pZDsKKyAgICByZXN1bHQuc2RwTUxp
bmVJbmRleCA9IG1fc2RwTUxpbmVJbmRleDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUuaAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOCBAQCBw
dWJsaWM6CiAgICAgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHJlbGF0ZWRQb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV9maWVsZHMucmVsYXRlZFBvcnQ7IH0KICAgICBTdHJpbmcgdXNlcm5hbWVGcmFn
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGRzLnVzZXJuYW1lRnJhZ21lbnQ7IH0KIAorICAg
IFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9KU09OKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgUlRD
SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIHNkcE1p
ZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHNkcE1MaW5lSW5kZXgsIEZpZWxkcyYmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw2ICs1Miw1IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0PyByZWxh
dGVkUG9ydDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyB1c2VybmFtZUZyYWdt
ZW50OwogCi0gICAgLy8gRklYTUUgMTY5NjYyOiBhZGQgdWZyYWcgdG8gdGhlIGxpc3QKLSAgICBz
ZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwgc2RwTWlkLCBzZHBNTGluZUluZGV4fTsKKyAgICBSVENJ
Y2VDYW5kaWRhdGVJbml0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlSW5pdC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVJbml0LmlkbAko
cmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENJY2VDYW5kaWRhdGVJbml0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQAog
CiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX1JUQywKLSAgICBFbmFibGVkQXRSdW50aW1lPVBlZXJD
b25uZWN0aW9uCisgICAgRW5hYmxlZEF0UnVudGltZT1QZWVyQ29ubmVjdGlvbiwKKyAgICBKU0dl
bmVyYXRlVG9KU09iamVjdAogXSBkaWN0aW9uYXJ5IFJUQ0ljZUNhbmRpZGF0ZUluaXQgewogICAg
IERPTVN0cmluZyBjYW5kaWRhdGUgPSAiIjsKICAgICBET01TdHJpbmc/IHNkcE1pZCA9IG51bGw7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
UlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOwog
Ci0gICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9K
U09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9Q
YXltZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
YXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJldmlzaW9uIDI2NzAwNykKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEFkZHJlc3MuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZU
YWJsZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFjZSBQYXltZW50QWRkcmVzcyB7Ci0g
ICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pT
T04oKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvdW50cnk7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmluZz4gYWRkcmVzc0xpbmU7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2Uu
aWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRy
ZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTZWN1cmVDb250ZXh0LAogXSBpbnRl
cmZhY2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQgewotICAgIHNlcmlhbGl6ZXIgPSB7
IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTExOTQsNTAgKzExOTQsNjQgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICByZXR1cm4g
MDsKIH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitzdWIgSW50ZXJmYWNlSGFzUmVndWxh
clRvSlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlKSA9IEBfOwog
Ci0gICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMDsKLSAgICAkb2JqZWN0LT5Gb3JB
bGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2Ug
PSBzaGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMSBpZiAkcGFyZW50
SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7Ci0KLSAgICByZXR1cm4gJGFueVBh
cmVudElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJm
YWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRvcGVyYXRpb24tPmlzU3RhdGljICYm
ICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIpIHsKKyAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVU
eXBlCisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1qc29uLXR5cGVzCitz
dWIgSXNKU09OVHlwZQogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkdHlwZSkgPSBA
XzsKIAotICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLXNlcmlhbGl6
YWJsZS10eXBlCi0KKyAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKICAg
ICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuIDEgaWYg
JG9iamVjdC0+SXNOdW1lcmljVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+
SXNFbnVtVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNTdHJpbmdUeXBl
KCR0eXBlKTsKLSAgICByZXR1cm4gMCBpZiAkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsK
LQotICAgIGlmICgkdHlwZS0+aXNVbmlvbiB8fCAkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0
eXBlKSkgewotICAgICAgICBkaWUgIlNlcmlhbGl6ZXJzIGZvciB1bmlvbiBhbmQgZGljdGlvbmFy
eSB0eXBlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iOwotICAgIH0KKyAgICByZXR1
cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmluZ09yRW51bVR5cGUoJHR5cGUpOwogCiAgICAgaWYgKCRv
YmplY3QtPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgbXkg
JHN1YnR5cGUgPSBAeyR0eXBlLT5zdWJ0eXBlc31bMF07Ci0KLSAgICAgICAgIyBGSVhNRTogd2Vi
a2l0Lm9yZy9iLzE5NDQzOSBbV2ViSURMXSBTdXBwb3J0IHNlcmlhbGl6aW5nIHNlcXVlbmNlcyBh
bmQgRnJvemVuQXJyYXlzIG9mIGludGVyZmFjZXMKLSAgICAgICAgcmV0dXJuIDAgaWYgJG9iamVj
dC0+SXNJbnRlcmZhY2VUeXBlKCRzdWJ0eXBlKTsKLQotICAgICAgICByZXR1cm4gJG9iamVjdC0+
SXNTZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRzdWJ0eXBlKTsKKyAgICAgICAgcmV0dXJu
ICRvYmplY3QtPklzSlNPTlR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgIH0KKyAgICBp
ZiAoJG9iamVjdC0+SXNSZWNvcmRUeXBlKCR0eXBlKSkgeworICAgICAgICBteSAkdmFsdWVTdWJ0
eXBlID0gQHskdHlwZS0+c3VidHlwZXN9WzBdOworICAgICAgICByZXR1cm4gJG9iamVjdC0+SXNK
U09OVHlwZSgkaW50ZXJmYWNlLCAkdmFsdWVTdWJ0eXBlKTsKICAgICB9CiAKLSAgICByZXR1cm4g
MCBpZiAhJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBlKTsKKyAgICBpZiAoJG9iamVjdC0+
SXNJbnRlcmZhY2VUeXBlKCR0eXBlKSkgeworICAgICAgICAjIFNwZWNpYWwgY2FzZSBFdmVudEhh
bmRsZXIsIHNpbmNlIHRoZXJlIGlzIG5vIHJlYWwgSURMIGZvciBpdC4KKyAgICAgICAgcmV0dXJu
IDAgaWYgJHR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciI7CisKKyAgICAgICAgbXkgJGludGVy
ZmFjZSA9ICRvYmplY3QtPkdldEludGVyZmFjZUZvclR5cGUoJGludGVyZmFjZSwgJHR5cGUpOwor
ICAgICAgICBpZiAoJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbigk
aW50ZXJmYWNlKSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KIAotICAgIG15
ICRpbnRlcmZhY2VGb3JUeXBlID0gJG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJm
YWNlLCAkdHlwZSk7Ci0gICAgaWYgKCRpbnRlcmZhY2VGb3JUeXBlKSB7Ci0gICAgICAgIHJldHVy
biAxIGlmICRpbnRlcmZhY2VGb3JUeXBlLT5zZXJpYWxpemFibGU7Ci0gICAgICAgIHJldHVybiAk
b2JqZWN0LT5Jbmhlcml0c1NlcmlhbGl6YWJsZSgkaW50ZXJmYWNlRm9yVHlwZSk7CisgICAgICAg
IG15ICRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uID0gMDsKKyAgICAgICAgJG9i
amVjdC0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBzdWIgeworICAgICAgICAgICAgbXkgJHBh
cmVudEludGVyZmFjZSA9IHNoaWZ0OworICAgICAgICAgICAgJGFueVBhcmVudEhhc1JlZ3VsYXJU
b0pTT05PcGVyYXRpb24gPSAxIGlmICRvYmplY3QtPkludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05P
cGVyYXRpb24oJHBhcmVudEludGVyZmFjZSk7CisgICAgICAgIH0sIDApOworICAgICAgICAKKyAg
ICAgICAgaWYgKCRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoJHR5cGUtPmlz
VW5pb24pIHsKKyAgICAgICAgIyBGSVhNRTogVW5pb24gdHlwZXMgc2hvdWxkIGJlIHN1cHBvcnRl
ZCBpZiBhbGwgdGhlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJE
ZWZhdWx0IHRvSlNPTiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgdW5pb24gdHlwZXMu
XG4iOworICAgIH0KKyAgICBpZiAoJG9iamVjdC0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlwZSkpIHsK
KyAgICAgICAgIyBGSVhNRTogRGljdGlvbmFyeSB0eXBlcyBzaG91bGQgYmUgc3VwcG9ydGVkIGlm
IGFsbCBtZW1iZXJzIGRlY2xhcmVkIG9uIHRoZSBkaWN0aW9uYXJ5IGFuZCBhbGwgaXRzIGluaGVy
aXRlZCBkaWN0aW9uYXJpZXMgYXJlIEpTT04gdHlwZXMuCisgICAgICAgIGRpZSAiRGVmYXVsdCB0
b0pTT04gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGRpY3Rpb25hcnkgdHlwZXMuXG4i
OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI0OSwxNyArMTI2Myw2IEBAIHN1YiBoYXND
YWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGUKICAgICByZXR1cm4gJGF0dHJpYnV0ZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfSB8fCAkYXR0cmlidXRlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXR0ZXJ9OwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVB
dHRyaWJ1dGUKLXsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkgPSBA
XzsKLQotICAgIGlmICgkb2JqZWN0LT5Jc1NlcXVlbmNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSAm
JiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGVuZGVkQXR0cmlidXRlKCRhdHRy
aWJ1dGUpKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHNlcXVlbmNlIHR5cGVzIHdp
dGggQ2FjaGVkQXR0cmlidXRlIG9yIEN1c3RvbUdldHRlciBleHRlbmRlZCBhdHRyaWJ1dGVzIGFy
ZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQotCi0gICAgcmV0dXJuICRvYmpl
Y3QtPklzU2VyaWFsaXphYmxlVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBlKTsKLX0K
LQogc3ViIEdldEludGVyZmFjZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21OYW1lCiB7CiAgICAgIyBG
SVhNRTogSXQncyBiYWQgdG8gaGF2ZSBhIGZ1bmN0aW9uIGxpa2UgdGhpcyB0aGF0IG9wZW5zIGFu
b3RoZXIgSURMIGZpbGUgdG8gYW5zd2VyIGEgcXVlc3Rpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4NDQsNyArMTg0NCw2IEBAIHN1YiBQcm90b3R5cGVP
cGVyYXRpb25Db3VudAogICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5pdGVyYWJs
ZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAgICAgJGNvdW50ICs9IHNj
YWxhciBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPm1h
cExpa2U7CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJh
dGlvbnN9IGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgJGNvdW50ICs9IHNjYWxhciBAeyRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlOwogCiAgICAgcmV0dXJuICRjb3VudDsKIH0KQEAgLTI3NTcsMTEgKzI3NTYsNiBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldExlZ2FjeUZhY3RvcnlGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
TGVnYWN5RmFjdG9yeUZ1bmN0aW9ufTsKICAgICB9CiAKLSAgICAjIFNlcmlhbGl6ZXIgZnVuY3Rp
b24uCi0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgewotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpK
U0dsb2JhbE9iamVjdCYsICR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmKTtcbiIpOwotICAgIH0KLSAgICAKICAgICBteSAkbnVtQ3VzdG9tT3BlcmF0aW9ucyA9IDA7
CiAgICAgbXkgJG51bUN1c3RvbUF0dHJpYnV0ZXMgPSAwOwogCkBAIC0zMTYzLDcgKzMxNTcsNiBA
QCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlCiAgICAgcHVzaChAb3BlcmF0aW9ucywg
QHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJs
ZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZh
Y2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1
c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRp
bnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAg
ICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAgICAgICBuZXh0IGlm
ICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5k
IG5vdCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7
CiAgICAgICAgIG5leHQgaWYgKCRvcGVyYXRpb24tPmlzU3RhdGljKTsKQEAgLTM5NzEsNyArMzk2
NCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAb3BlcmF0aW9ucywg
QHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJs
ZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZh
Y2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1
c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRp
bnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAK
ICAgICBteSBAYXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+YXR0cmlidXRlc307CiAgICAgcHVz
aChAYXR0cmlidXRlcywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGlu
dGVyZmFjZS0+bWFwTGlrZTsKQEAgLTQ2NTAsNyArNDY0Miw2IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgfQogICAgIAogICAgIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uKCRp
bnRlcmZhY2UpIGlmICRpbnRlcmZhY2UtPml0ZXJhYmxlOwotICAgIEdlbmVyYXRlU2VyaWFsaXpl
ckRlZmluaXRpb24oJGludGVyZmFjZSwgJGNsYXNzTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7CiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEuaCIpOwpAQCAtNTQwMCw3
ICs1MzkxLDEwIEBAIHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRpb24KIAogICAgIHJldHVy
biBpZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAkb3BlcmF0aW9uKTsKICAgICByZXR1cm4gaWYg
JG9wZXJhdGlvbi0+aXNJdGVyYWJsZTsKLSAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNTZXJp
YWxpemVyOworICAgIAorICAgIGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntE
ZWZhdWx0fSkgeworICAgICAgICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5p
dGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwor
ICAgIH0KIAogICAgIG15ICRpc0N1c3RvbSA9IEhhc0N1c3RvbU1ldGhvZCgkb3BlcmF0aW9uKTsK
ICAgICBteSAkaXNPdmVybG9hZGVkID0gJG9wZXJhdGlvbi0+e292ZXJsb2Fkc30gJiYgQHskb3Bl
cmF0aW9uLT57b3ZlcmxvYWRzfX0gPiAxOwpAQCAtNTUyMCwxMDMgKzU1MTQsMTAzIEBAIHN1YiBH
ZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRlbmRB
cHBsZUNvcHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7CiB9CiAKLXN1YiBHZW5lcmF0ZVNl
cmlhbGl6ZXJEZWZpbml0aW9uCitzdWIgR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlv
bgogewotICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOwotCi0gICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOworICAgIG15ICgkb3V0cHV0QXJy
YXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAk
cGFyZW50U2VyaWFsaXplckludGVyZmFjZSA9IDA7Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFy
ZW50cygkaW50ZXJmYWNlLCBzdWIgewotICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9
IHNoaWZ0OwotICAgICAgICAgICAgaWYgKCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAm
JiAhJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgICAgICAkcGFyZW50
U2VyaWFsaXplckludGVyZmFjZSA9ICRwYXJlbnRJbnRlcmZhY2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0sIDApOwotICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcmZh
Y2Ugd2l0aCBcInNlcmlhbGl6ZXJcIiBmb3IgXCJpbmhlcml0XCIgc2VyaWFsaXplciBpbiAkaW50
ZXJmYWNlTmFtZVxuIiBpZiAhJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2U7CisgICAgaWYgKCRv
cGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAi
b2JqZWN0IikgeworICAgICAgICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9u
RGVmaW5pdGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRp
b24pOwogICAgIH0KIAotICAgIG15IEBzZXJpYWxpemVkQXR0cmlidXRlcyA9ICgpOworICAgIGRp
ZSAiW0RlZmF1bHRdIGlzIG5vdCBzdXBwb3J0IGZvciBmb3IgdGhpcyBvcGVyYXRpb24gKCIgLiAk
b3BlcmF0aW9uLT5uYW1lIC4gIikuIEl0IGlzIG9ubHkgY3VycmVudGx5IGRlZmluZWQgZm9yICdv
YmplY3QgdG9KU09OKCk7Jy4iCit9CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1lIChA
eyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgbXkgJGZv
dW5kQXR0cmlidXRlID0gMDsKLSAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRl
cmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEg
JGF0dHJpYnV0ZS0+bmFtZSkgewotICAgICAgICAgICAgICAgICRmb3VuZEF0dHJpYnV0ZSA9IDE7
Ci0gICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NlcmlhbGl6YWJsZUF0dHJp
YnV0ZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBzZXJpYWxpemVkQXR0cmlidXRlcywgJGF0dHJpYnV0ZSk7ICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGRpZSAiRXhwbGljaXQgXCJzZXJpYWxpemVyXCIgYXR0cmli
dXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpcyBub3Qgc2VyaWFsaXphYmxlXG4iIGlmICEkaW50ZXJm
YWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICBsYXN0Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgXCJz
ZXJpYWxpemVyXCIgYXR0cmlidXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpbiAkaW50ZXJmYWNlTmFt
ZVxuIiBpZiAhJGZvdW5kQXR0cmlidXRlOwotICAgIH0KK3N1YiBHZW5lcmF0ZURlZmF1bHRUb0pT
T05PcGVyYXRpb25EZWZpbml0aW9uCit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFj
ZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbikgPSBAXzsKIAotICAgIG15ICRzZXJpYWxpemVyRnVu
Y3Rpb25OYW1lID0gInRvSlNPTiI7Ci0gICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5h
bWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVG
dW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9u
TmFtZSk7CisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kZWZhdWx0
LXRvanNvbgogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RD
b25zdHJ1Y3Rvci5oPiIpOworICAgIG15IEBpbmhlcml0ZW5jZVN0YWNrID0gKCk7CisgICAgcHVz
aChAaW5oZXJpdGVuY2VTdGFjaywgJGludGVyZmFjZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkZv
ckFsbFBhcmVudHMoJGludGVyZmFjZSwgc3ViIHsKKyAgICAgICAgbXkgJHBhcmVudEludGVyZmFj
ZSA9IHNoaWZ0OworICAgICAgICBwdXNoKEBpbmhlcml0ZW5jZVN0YWNrLCAkcGFyZW50SW50ZXJm
YWNlKTsKKyAgICB9LCAwKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU09iamVj
dCogSlMke2ludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTtcbiIpOworICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUo
JGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CisKKyAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUJvZHko
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NO
YW1lfSogY2FzdGVkVGhpcylcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwog
Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAg
ICBteSAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZU5hbWUgPSAkcGFyZW50U2VyaWFsaXplcklu
dGVyZmFjZS0+dHlwZS0+bmFtZTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byogcmVzdWx0ID0gSlMke3BhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXpl
KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJcbiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENv
cmUvT2JqZWN0Q29uc3RydWN0b3IuaD4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpO1xuIik7CiAKLSAg
ICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJpYWxpemVkQXR0cmlidXRlcykgewotICAgICAg
ICAjIEZJWE1FOiBBdHRyaWJ1dGVzIHRoYXQgdGhyb3cgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHBv
cnRlZCB3aXRoIHNlcmlhbGl6ZXJzIHlldC4KKyAgICAgd2hpbGUgKEBpbmhlcml0ZW5jZVN0YWNr
KSB7CisgICAgICAgIG15ICRjdXJyZW50SW50ZXJmYWNlID0gcG9wKEBpbmhlcml0ZW5jZVN0YWNr
KTsKIAotICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAgIG15ICRn
ZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFz
c05hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
ICR7bmFtZX1WYWx1ZSA9ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqZWN0KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKLQotICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzSW50ZXJmYWNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSkgewotICAgICAgICAg
ICAgbXkgJGF0dHJpYnV0ZUludGVyZmFjZU5hbWUgPSAkYXR0cmlidXRlLT50eXBlLT5uYW1lOwot
ICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPmlzTnVsbGFibGUpIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc051bGwo
KSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGF1
dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06
OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRl
cmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7
bmFtZX1cIiksICR7bmFtZX1TZXJpYWxpemVkVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgfSBlbHNlXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9
OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50
ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwi
KSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKKyAgICAgICAgbXkgJGhhc0RlZmF1bHRU
b0pTT05PcGVyYXRpb24gPSAwOworICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGN1
cnJlbnRJbnRlcmZhY2UtPm9wZXJhdGlvbnN9KSB7CisgICAgICAgICAgICBpZiAoJG9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RGVmYXVsdH0gJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAi
dG9KU09OIiAmJiAkb3BlcmF0aW9uLT50eXBlLT5uYW1lIGVxICJvYmplY3QiKSB7CisgICAgICAg
ICAgICAgICAgJGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24gPSAxOworICAgICAgICAgICAgICAg
IGxhc3Q7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0K
KyAgICAgICAgaWYgKCRoYXNEZWZhdWx0VG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAgICBm
b3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGN1cnJlbnRJbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7
CisgICAgICAgICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAg
ICAgICAgICBuZXh0IGlmICEkY29kZUdlbmVyYXRvci0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAk
YXR0cmlidXRlLT50eXBlKTsKIAotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0KCJbQ2FjaGVkQXR0cmlidXRlXSBpcyBub3QgY3VycmVudGx5
IHN1cHBvcnQgb24gaW50ZXJmYWNlcyB3aXRoIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7Iikg
aWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfTsKKwor
ICAgICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKKyAgICAgICAgICAgICAgICBpZiAoJGNvbmRpdGlvbmFs
KSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25k
aXRpb25hbCk7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiNpZiAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuIik7OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG15ICRhdHRyaWJ1dGVOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAgICAg
ICAgICBteSAkdG9KU0V4cHJlc3Npb24gPSAiIjsKKyAgICAgICAgICAgICAgICBpZiAoSGFzQ3Vz
dG9tR2V0dGVyKCRhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZU5hbWUpOwor
ICAgICAgICAgICAgICAgICAgICAkdG9KU0V4cHJlc3Npb24gPSAiY2FzdGVkVGhpcy0+JHtpbXBs
R2V0dGVyRnVuY3Rpb25OYW1lfSgqbGV4aWNhbEdsb2JhbE9iamVjdCkiOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG15ICgkYmFzZUZ1bmN0aW9uTmFtZSwg
QGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNs
dWRlcywgJGN1cnJlbnRJbnRlcmZhY2UtPnR5cGUtPm5hbWUsICRhdHRyaWJ1dGUpOworICAgICAg
ICAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1l
bnRhdGlvbkNhbGxOYW1lKCRjdXJyZW50SW50ZXJmYWNlLCAkYXR0cmlidXRlLCAkYmFzZUZ1bmN0
aW9uTmFtZSwgImltcGwiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgICAgICAgICAkdG9K
U0V4cHJlc3Npb24gPSBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZSwgJGN1cnJlbnRJbnRlcmZh
Y2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICIq
bGV4aWNhbEdsb2JhbE9iamVjdCIsICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBteSAkbmVlZHNSdW50aW1lQ2hlY2sg
PSBOZWVkc1J1bnRpbWVDaGVjaygkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKCRuZWVkc1J1bnRpbWVDaGVjaykgeworICAgICAgICAgICAgICAgICAg
ICBteSAkcnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5h
YmxlQ29uZGl0aW9uYWxTdHJpbmcoJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKCR7cnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1
dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1l
fVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIjZW5kaWZcblxuIikgOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAifVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKIAotICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWV9Qm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiwgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0KVxuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTJHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlMke2ludGVyZmFjZU5hbWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVG
dW5jdGlvbk5hbWV9Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtz
ZXJpYWxpemVyRnVuY3Rpb25OYW1lfVwiKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIG15ICRpbnRlcmZhY2VO
YW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKUyR7aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7ZnVuY3Rpb25O
YW1lfUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBcInRvSlNPTlwiKTtc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIlxuIik7CiB9CiAKIHN1YiBHZW5lcmF0ZUdldENhbGxEYXRhCkBAIC03NTY1LDcgKzc1
NTksNiBAQCBzdWIgR2V0UnVudGltZUVuYWJsZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5
VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25z
LCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBM
aWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0
aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHsk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJp
YWxpemFibGU7CiAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAg
ICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRl
bnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJ
ZGVudGlmaWVyfSk7CiAgICAgICAgIG5leHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9
ICYmICRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24g
MjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsOSBAQAogICAgICAgICAgICAgInZh
bHVlcyI6IFsiIiwgIlJlYWRET00iLCAiR2V0dGVyIl0sCiAgICAgICAgICAgICAic3VwcG9ydHND
b25qdW5jdGlvbiI6IHRydWUKICAgICAgICAgfSwKKyAgICAgICAgIkRlZmF1bHQiOiB7CisgICAg
ICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJvcGVyYXRpb24iXQorICAgICAgICB9LAogICAg
ICAgICAiRGVmYXVsdERlZmluZU93blByb3BlcnR5IjogewogICAgICAgICAgICAgImNvbnRleHRz
QWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCShyZXZpc2lvbiAyNjcwMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5
KQpAQCAtNzIsNyArNzIsNiBAQCBzdHJ1Y3QoIElETEludGVyZmFjZSA9PiB7CiAgICAgYXN5bmNJ
dGVyYWJsZSA9PiAnJCcsICMgVXNlZCBmb3IgYXN5Y24gaXRlcmFibGUgaW50ZXJmYWNlcywgb2Yg
dHlwZSAnSURMQXN5bmNJdGVyYWJsZScKICAgICBtYXBMaWtlID0+ICckJywgIyBVc2VkIGZvciBt
YXBMaWtlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETE1hcExpa2UnCiAgICAgc2V0TGlrZSA9PiAn
JCcsICMgVXNlZCBmb3Igc2V0TGlrZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExTZXRMaWtlJwot
ICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcsICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFj
ZXMsIG9mIHR5cGUgJ0lETFNlcmlhbGl6YWJsZScKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4g
JyQnLAogfSk7CiAKQEAgLTk0LDcgKzkzLDYgQEAgc3RydWN0KCBJRExPcGVyYXRpb24gPT4gewog
ICAgIGlzQ29uc3RydWN0b3IgPT4gJyQnLAogICAgIGlzU3RhdGljID0+ICckJywKICAgICBpc0l0
ZXJhYmxlID0+ICckJywKLSAgICBpc1NlcmlhbGl6ZXIgPT4gJyQnLAogICAgIGlzU3RyaW5naWZp
ZXIgPT4gJyQnLAogICAgIGlzTWFwTGlrZSA9PiAnJCcsCiAgICAgaXNTZXRMaWtlID0+ICckJywK
QEAgLTE1NCwxNSArMTUyLDYgQEAgc3RydWN0KCBJRExTZXRMaWtlID0+IHsKICAgICBleHRlbmRl
ZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKLSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jaWRsLXNlcmlhbGl6ZXJzCi1zdHJ1Y3QoIElETFNlcmlhbGl6YWJsZSA9PiB7Ci0gICAg
YXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQotICAg
IGhhc0F0dHJpYnV0ZSA9PiAnJCcsICMgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH0KLSAgICBo
YXNJbmhlcml0ID0+ICckJywgIyBzZXJpYWxpemVyID0geyBpbmhlcml0IH0KLSAgICBoYXNHZXR0
ZXIgPT4gJyQnLCAjIHNlcmlhbGl6ZXIgPSB7IGdldHRlciB9Ci0gICAgb3BlcmF0aW9ucyA9PiAn
QCcsICMgdG9KU09OIG9wZXJhdGlvbgotfSk7Ci0KICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlv
L3dlYmlkbC8jaWRsLWNvbnN0YW50cwogc3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFt
ZSA9PiAnJCcsCkBAIC02MDAsNyArNTg5LDYgQEAgc3ViIGNsb25lT3BlcmF0aW9uCiAgICAgJGNs
b25lZE9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcigkb3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKTsK
ICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1N0YXRpYygkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CiAg
ICAgJGNsb25lZE9wZXJhdGlvbi0+aXNJdGVyYWJsZSgkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlKTsK
LSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIoJG9wZXJhdGlvbi0+aXNTZXJpYWxp
emVyKTsKICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKCRvcGVyYXRpb24tPmlz
U3RyaW5naWZpZXIpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzTWFwTGlrZSgkb3BlcmF0aW9u
LT5pc01hcExpa2UpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzU2V0TGlrZSgkb3BlcmF0aW9u
LT5pc1NldExpa2UpOwpAQCAtNjUyLDEwICs2NDAsMTAgQEAgbXkgJG5leHRTcGVjaWFsc18xID0g
J14oZGVsZXRlcnxnZXR0ZXJ8cwogbXkgJG5leHREZWZpbml0aW9uc18xID0gJ14oY2FsbGJhY2t8
ZGljdGlvbmFyeXxlbnVtfGludGVyZmFjZXxuYW1lc3BhY2V8cGFydGlhbHx0eXBlZGVmKSQnOwog
bXkgJG5leHREaWN0aW9uYXJ5TWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xV
U1ZTdHJpbmd8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8
cmVxdWlyZWR8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5z
aWduZWQpJCc7CiBteSAkbmV4dENhbGxiYWNrSW50ZXJmYWNlTWVtYmVyc18xID0gJ14oXCh8Y29u
c3R8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8ZG91Ymxl
fGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8
dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAn
XihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFu
fGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVy
aXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8
c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVu
c2lnbmVkKSQnOworbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5n
fERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29u
c3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8
b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxz
eW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0TWl4aW5N
ZW1iZXJzXzEgPSAnXihcKHxhdHRyaWJ1dGV8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5n
fGFueXxib29sZWFufGJ5dGV8Y29uc3R8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJl
YWRvbmx5fHNlcXVlbmNlfHNob3J0fHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHROYW1lc3BhY2VNZW1iZXJzXzEgPSAnXihcKHxC
eXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8Zmxv
YXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVm
aW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7Ci1teSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VN
ZW1iZXJfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmli
dXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJp
dHxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxz
aG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5z
aWduZWQpJCc7CitteSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofEJ5dGVT
dHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25z
dHxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsb25nfG9iamVjdHxvY3RldHxy
ZWFkb25seXxzZXF1ZW5jZXxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1
bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRTaW5nbGVUeXBlXzEg
PSAnXihCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8Ym9vbGVhbnxieXRlfGRvdWJsZXxm
bG9hdHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHxzeW1ib2x8dW5kZWZpbmVkfHVu
cmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0QXJndW1lbnROYW1lXzEgPSAnXihhc3lu
Y3xhdHRyaWJ1dGV8Y2FsbGJhY2t8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5
fGVudW18Z2V0dGVyfGluY2x1ZGVzfGluaGVyaXR8aW50ZXJmYWNlfGl0ZXJhYmxlfG1hcGxpa2V8
bWl4aW58bmFtZXNwYWNlfHBhcnRpYWx8cmVhZG9ubHl8cmVxdWlyZWR8c2V0bGlrZXxzZXR0ZXJ8
c3RhdGljfHN0cmluZ2lmaWVyfHR5cGVkZWZ8dW5yZXN0cmljdGVkKSQnOwogbXkgJG5leHRDb25z
dFZhbHVlXzEgPSAnXihmYWxzZXx0cnVlKSQnOwpAQCAtMTMyNSwxMiArMTMxMyw2IEBAIHN1YiBw
YXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImlu
aGVyaXQiKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgIH0KLQotICAgICMgRklYTUU6IFJlbW92ZS4gVGhp
cyBpcyBubyBsb25nZXIgcGFydCBvZiBXZWJJREwuIFJlcGxhY2Ugd2l0aCBbU2VyaWFsaXphYmxl
XS4KLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgIHJl
dHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemVyKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
IH0KLQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+
dmFsdWUoKSA9fiAvJG5leHRPcGVyYXRpb25fMS8pIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5w
YXJzZU9wZXJhdGlvbigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICB9CkBAIC0xNzk5LDEx
NCArMTc4MSw2IEBAIHN1YiBwYXJzZUNvbnN0cnVjdG9yCiAgICAgJHNlbGYtPmFzc2VydFVuZXhw
ZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXJp
YWxpemVyCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0ID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAg
ICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5h
c3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAic2VyaWFsaXplciIsIF9fTElORV9f
KTsKLSAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgICAgIG15ICRu
ZXdEYXRhTm9kZTsKLSAgICAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIG5lICI7IikgewotICAgICAg
ICAgICAgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7Ci0gICAgICAgICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4o
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRuZXdEYXRhTm9kZSA9IElETFNlcmlh
bGl6YWJsZS0+bmV3KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBteSAkdG9KU09OT3BlcmF0aW9u
ID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+bmFtZSgi
dG9KU09OIik7Ci0KLSAgICAgICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlk
Rm9yQ29udGV4dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAib3BlcmF0aW9uIik7Ci0gICAgICAg
ICR0b0pTT05PcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVM
aXN0KTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+aXNTZXJpYWxpemVyKDEpOwotICAgICAg
ICBwdXNoKEB7JG5ld0RhdGFOb2RlLT5vcGVyYXRpb25zfSwgJHRvSlNPTk9wZXJhdGlvbik7Ci0K
LSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7Iiwg
X19MSU5FX18pOwotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAgIH0KLSAgICAkc2Vs
Zi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7Ci19Ci0K
LXN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0Ci17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBt
eSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxm
LT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7Ci0gICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9fTElORV9f
KTsKLQotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsK
LQotICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5l
eHQtPnZhbHVlKCkgZXEgIigiKSB7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRp
b25SZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIH0KLX0KLQotc3ViIHBhcnNlU2Vy
aWFsaXphdGlvblBhdHRlcm4KLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotCi0gICAgbXkgJG5l
eHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7Iikg
ewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInsi
LCBfX0xJTkVfXyk7Ci0gICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+
bmV3KCk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCRuZXdE
YXRhTm9kZSk7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tl
bigpLCAifSIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAgICB9
Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJbIikgewotICAgICAgICBkaWUgIlNlcmlhbGl6
YXRpb24gb2YgbGlzdHMgcGF0dGVybiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwotICAg
IH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAg
bXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2Vu
KCk7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9r
ZW4pOwotICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOwotCi0gICAg
ICAgIG15ICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+bmV3KCk7Ci0gICAgICAgICRu
ZXdEYXRhTm9kZS0+YXR0cmlidXRlcyhcQGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIHJldHVybiAk
bmV3RGF0YU5vZGU7Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5l
eHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KLQotc3ViIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJp
YnV0ZXMKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRzZXJpYWxpemFibGUgPSBz
aGlmdDsKLQotICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7Ci0gICAgbXkgQGlkZW50aWZpZXJzID0g
JHNlbGYtPnBhcnNlSWRlbnRpZmllckxpc3QoKTsKLQotICAgIGZvciBteSAkaWRlbnRpZmllciAo
QGlkZW50aWZpZXJzKSB7Ci0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiZ2V0dGVyIikgewot
ICAgICAgICAgICAgJHNlcmlhbGl6YWJsZS0+aGFzR2V0dGVyKDEpOwotICAgICAgICAgICAgZGll
ICJTZXJpYWxpemVyIGdldHRlciBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImluaGVyaXQiKSB7Ci0g
ICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNJbmhlcml0KDEpOwotICAgICAgICAgICAgbmV4
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiYXR0cmlidXRlIikg
ewotICAgICAgICAgICAgJHNlcmlhbGl6YWJsZS0+aGFzQXR0cmlidXRlKDEpOwotICAgICAgICAg
ICAgIyBBdHRyaWJ1dGVzIHdpbGwgYmUgZmlsbGVkIGluIHZpYSBhcHBseU1lbWJlckxpc3QoKQot
ICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1c2goQGF0dHJpYnV0ZXMs
ICRpZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICAkc2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzKFxA
YXR0cmlidXRlcyk7Ci19Ci0KIHN1YiBwYXJzZUlkZW50aWZpZXJMaXN0CiB7CiAgICAgbXkgJHNl
bGYgPSBzaGlmdDsKQEAgLTMzOTIsMjMgKzMyNjYsNiBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXh0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChy
ZWYoJGl0ZW0pIGVxICJJRExTZXJpYWxpemFibGUiKSB7Ci0gICAgICAgICAgICAkaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUoJGl0ZW0pOwotICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgbXkgJG51
bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJp
YnV0ZXN9OwotICAgICAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1
dGUpIHsKLSAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5h
dHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxp
emFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNpZiAoJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKLSAgICAgICAg
ICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewot
ICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0
ZXN9LCAkYXR0cmlidXRlLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdU
ZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCShy
ZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
QmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2
ICsxMCwxMCBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRy
aWJ1dGUgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IgVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOwogICAgIGF0dHJpYnV0ZSBUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc0NvbnN0cnVjdG9yIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzOwogICAgIGF0dHJp
YnV0ZSBUZXN0RE9NSklUQ29uc3RydWN0b3IgVGVzdERPTUpJVDsKKyAgICBhdHRyaWJ1dGUgVGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciBUZXN0RGVmYXVsdFRvSlNPTjsKKyAgICBhdHRyaWJ1
dGUgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOworICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvciBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAg
YXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7CiAgICAgYXR0cmlidXRlIFRlc3REb21haW5TZWN1cml0
eUNvbnN0cnVjdG9yIFRlc3REb21haW5TZWN1cml0eTsKICAgICBhdHRyaWJ1dGUgVGVzdEVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvciBUZXN0RW5hYmxlZEJ5U2V0dGluZzsKICAgICBbRW5hYmxl
ZEZvckNvbnRleHQsIFNlY3VyZUNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvciBUZXN0RW5hYmxlZEZvckNvbnRleHQ7CkBAIC01MywxMCArNTcsNiBAQCBw
YXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUgVGVzdFJl
YWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yIFRlc3RSZWFkT25seU1hcExpa2U7CiAgICAgYXR0cmli
dXRlIFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvciBUZXN0UmVhZE9ubHlTZXRMaWtlOwog
ICAgIGF0dHJpYnV0ZSBUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IgVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdDsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Db25z
dHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbjsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlOwotICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25z
dHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgYXR0cmlidXRlIFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw7CiAgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjF8Q29uZGl0aW9uMl0gYXR0cmlidXRl
IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOwogICAgIGF0dHJpYnV0ZSBUZXN0U2V0TGlrZUNvbnN0
cnVjdG9yIFRlc3RTZXRMaWtlOwogICAgIGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJDb25zdHJ1
Y3RvciBUZXN0U3RyaW5naWZpZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVz
LmRlcAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDIxIEBAIFRlc3RNaXhpbkludGVyZmFjZS5pZGw6CiBKU1Rlc3RET01KSVQuaDogCiBE
T01UZXN0RE9NSklULmg6IAogV2ViRE9NVGVzdERPTUpJVC5oOiAKK0pTVGVzdERlZmF1bHRUb0pT
T04uaDogCitET01UZXN0RGVmYXVsdFRvSlNPTi5oOiAKK1dlYkRPTVRlc3REZWZhdWx0VG9KU09O
Lmg6IAorSlNUZXN0RGVmYXVsdFRvSlNPTkVudW0uaDogCitET01UZXN0RGVmYXVsdFRvSlNPTkVu
dW0uaDogCitXZWJET01UZXN0RGVmYXVsdFRvSlNPTkVudW0uaDogCitKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZS5oOiAKK1dlYkRPTVRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZS5oOiAKK0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmg6IAorRE9NVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0Lmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmg6IAorSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsLmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaDogCiBKU1Rl
c3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIERPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIFdl
YkRPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKQEAgLTIxNSwxOCArMjMwLDYgQEAgV2ViRE9N
VGVzdFJlYWRPbmx5U2V0TGlrZS5oOiAKIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oOiAK
IERPTVRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaDogCiBXZWJET01UZXN0UmVwb3J0RXh0cmFN
ZW1vcnlDb3N0Lmg6IAotSlNUZXN0U2VyaWFsaXphdGlvbi5oOiAKLURPTVRlc3RTZXJpYWxpemF0
aW9uLmg6IAotV2ViRE9NVGVzdFNlcmlhbGl6YXRpb24uaDogCi1KU1Rlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKLURPTVRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZS5oOiAKLVdlYkRPTVRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5o
OiAKLUpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6IAotRE9NVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Lmg6IAotV2ViRE9NVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6IAotSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiAKLURPTVRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmg6IAotV2ViRE9NVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaDogCiBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDogCiBET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmg6IAogV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oOiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
RGVmYXVsdFRvSlNPTi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit0eXBlZGVmIGRvdWJs
ZSBUZXN0VGltZVN0YW1wOworCitpbnRlcmZhY2UgVGVzdERlZmF1bHRUb0pTT04geworICAgIFtF
bmFibGVkQXRSdW50aW1lPVRlc3RSdW50aW1lRW5hYmxlZF1yZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyBsb25nQXR0cmlidXRlOworICAgIFtFbmFibGVkQnlTZXR0aW5nPVRlc3RTZXR0aW5nXSByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGU7
CisgICAgW0NvbmRpdGlvbmFsPVRFU1RfQ09ORElUSU9OQUxdIHJlYWRvbmx5IGF0dHJpYnV0ZSBU
ZXN0RGVmYXVsdFRvSlNPTkVudW0gZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGU7CisgICAg
YXR0cmlidXRlIEV2ZW50SGFuZGxlciBldmVudEhhbmRsZXJBdHRyaWJ1dGU7CisKKyAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nICAgICAgICAgICAgIGZpcnN0U3RyaW5nQXR0cmlidXRlOworICAgIGF0
dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgc2Vjb25kTG9uZ0F0dHJpYnV0ZTsKKyAgICBh
dHRyaWJ1dGUgVGVzdEV4Y2VwdGlvbiAgICAgICAgIHRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZTsK
KyAgICBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSAgIGZvdXJ0aFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgW0NsYW1wXSBsb25nICAgICAgICAgIGZpZnRo
TG9uZ0NsYW1wZWRBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIFRlc3RUaW1lU3RhbXAgICAgICAg
ICBzaXh0aFR5cGVkZWZBdHRyaWJ1dGU7CisKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWwgc2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZTsKKyAgICBh
dHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIGVpZ2h0aEluZGly
ZWN0bHlBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsPyBuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlOworCisgICAgYXR0
cmlidXRlIEZyb3plbkFycmF5PGJvb2xlYW4+IHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGU7Cisg
ICAgYXR0cmlidXRlIHNlcXVlbmNlPERPTVN0cmluZz4gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZTsKKyAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+
IHR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgcmVjb3Jk
PERPTVN0cmluZywgdW5zaWduZWQgc2hvcnQ+IHRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGU7CisK
KyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkVudW0uaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRv
SlNPTkVudW0uaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkVudW0uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitlbnVtIFRlc3REZWZhdWx0VG9KU09ORW51bSB7Cisg
ICAgIkVudW1WYWx1ZTEiLAorICAgICJFbnVtVmFsdWUyIgorfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaWRsCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworaW50ZXJm
YWNlIFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA6IFRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdCB7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5pZGwJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitpbnRlcmZh
Y2UgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IDogVGVzdERlZmF1bHRUb0pTT04geworICAgIGF0
dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgaW5oZXJpdExvbmdBdHRyaWJ1dGU7CisKKyAg
ICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworaW50ZXJmYWNlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsIDogVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IHsKKyAgICBhdHRyaWJ1dGUgbG9uZyAg
ICAgICAgICAgICAgICAgIGZpbmFsTG9uZ0F0dHJpYnV0ZUZvbzsKKyAgICBhdHRyaWJ1dGUgbG9u
ZyAgICAgICAgICAgICAgICAgIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhcjsKKworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw1ICszNSw1IEBACiAgICAgW1NlY3VyZUNvbnRleHRdIGJvb2xlYW4gZ2V0U2Vj
cmV0Qm9vbGVhbigpOwogICAgIFtDb25kaXRpb25hbD1URVNUX0ZFQVRVUkUsIFNlY3VyZUNvbnRl
eHQsIEVuYWJsZWRBdFJ1bnRpbWU9VGVzdEZlYXR1cmVdIGJvb2xlYW4gdGVzdEZlYXR1cmVHZXRT
ZWNyZXRCb29sZWFuKCk7CiAKLSAgICBzZXJpYWxpemVyOworICAgIFtEZWZhdWx0XSBvYmplY3Qg
dG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MzUs
OCArNDM1LDYgQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdwogCiAg
ICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0cmluZyBzdHJpbmdpZmllckF0dHJpYnV0ZTsK
IAotICAgIHNlcmlhbGl6ZXIgPSB7Y3JlYXRlLCByZWFkT25seVN0cmluZ0F0dHIsIGVudW1BdHRy
LCBsb25nQXR0cn07Ci0KICAgICB1bmRlZmluZWQgYnVmZmVyU291cmNlUGFyYW1ldGVyKEJ1ZmZl
clNvdXJjZSBkYXRhKTsKIAogICAgIFtMZWdhY3lDYWxsZXJdIHVuZGVmaW5lZCBsZWdhY3lDYWxs
ZXJOYW1lZChsb25nIHBhcmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkocmV2aXNpb24g
MjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJp
YWxpemF0aW9uLmlkbAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotdHlwZWRlZiBkb3VibGUgVGVzdFRp
bWVTdGFtcDsKLQotaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uIHsKLSAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICAgICAgIGZpcnN0U3RyaW5nQXR0cmlidXRlOwotICAgIGF0dHJpYnV0
ZSBsb25nICAgICAgICAgICAgICAgICAgc2Vjb25kTG9uZ0F0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1
dGUgVGVzdEV4Y2VwdGlvbiAgICAgICAgIHRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGU7Ci0g
ICAgYXR0cmlidXRlIHVucmVzdHJpY3RlZCBkb3VibGUgICBmb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaWZ0aExv
bmdBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIFRlc3RUaW1lU3RhbXAgICAgICAgICBzaXh0aFR5
cGVkZWZBdHRyaWJ1dGU7Ci0KLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwgc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlOwotICAgIGF0dHJpYnV0
ZSBUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UgZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw/IG5p
bnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZTsKLQotICAgIGF0dHJpYnV0
ZSBGcm96ZW5BcnJheTxib29sZWFuPiB0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlOwotICAgIGF0
dHJpYnV0ZSBzZXF1ZW5jZTxET01TdHJpbmc+IGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGU7Ci0g
ICAgYXR0cmlidXRlIHNlcXVlbmNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB0d2Vs
ZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGU7Ci0KLSAgICBzZXJpYWxpemVyID0geyBhdHRy
aWJ1dGUgfTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZS5pZGwJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLWludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UgOiBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgewotfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmlkbAkobm9uZXhpc3RlbnQpCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCA6IFRlc3RTZXJpYWxpemF0aW9uIHsKLSAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAg
ICAgICAgICAgIGluaGVyaXRMb25nQXR0cmlidXRlOwotCi0gICAgc2VyaWFsaXplciA9IHsgaW5o
ZXJpdCwgYXR0cmlidXRlIH07Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCShub25l
eGlzdGVudCkKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi1pbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwg
OiBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgewotICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAg
ICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlRm9vOwotICAgIGF0dHJpYnV0ZSBsb25nICAgICAg
ICAgICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlQmFyOwotCi0gICAgc2VyaWFsaXplciA9IHsg
aW5oZXJpdCwgZmluYWxMb25nQXR0cmlidXRlQmFyIH07Ci19OwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4ODUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT04uaCIKKworI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCb29sZWFu
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0TnVsbGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0UmVjb3JkLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVu
Y2VzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
KyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwuaCIKKyNpbmNsdWRlICJKU1Rlc3RFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNBcnJheS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShURVNUX0NP
TkRJVElPTkFMKQorI2luY2x1ZGUgIkpTRE9NQ29udmVydEVudW1lcmF0aW9uLmgiCisjaW5jbHVk
ZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkVudW0uaCIKKyNlbmRpZgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBB
dHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlT
ZXR0aW5nc0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxB
dHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKKyNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1
bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TaXh0
aFR5cGVkZWZBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNpeHRo
VHlwZWRlZkF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGly
ZWN0bHlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZh
dWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJs
ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pT
T05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2Vs
ZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05v
bkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09O
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERl
ZmF1bHRUb0pTT05Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4K
KyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisg
ICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RE
ZWZhdWx0VG9KU09OUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNP
TlByb3RvdHlwZTo6QmFzZSk7CisKK3VzaW5nIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rv
ciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdERlZmF1bHRUb0pTT04+
OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjpw
cm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xv
YmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rl
c3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0RGVmYXVsdFRvSlNPTiJfcyksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERl
ZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90
eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09O
UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25z
dHJ1Y3RvcikgfSB9LAorICAgIHsgImxvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisgICAg
eyAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9
LAorI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAgIHsgImVuYWJsZWRCeUNvbmRpdGlv
bmFsQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1
bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyNlbHNlCisgICAg
eyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorICAgIHsgImV2ZW50SGFu
ZGxlckF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZSksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJmaXJz
dFN0cmluZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKSB9IH0sCisgICAgeyAic2Vj
b25kTG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRK
U1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRoaXJk
VW5KU09OYWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0
dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJp
YnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUpIH0gfSwK
KyAgICB7ICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pT
T05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09O
Rm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKSB9IH0sCisgICAgeyAiZmlmdGhMb25n
Q2xhbXBlZEF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1
dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSkgfSB9LAor
ICAgIHsgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRl
ZkF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUpIH0g
fSwKKyAgICB7ICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0
VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRU
b0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKSB9IH0sCisgICAgeyAiZWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRP
TUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSkg
fSB9LAorICAgIHsgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNz
b3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGUpIH0gfSwKKyAgICB7ICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9K
U09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZy
b3plbkFycmF5QXR0cmlidXRlKSB9IH0sCisgICAgeyAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInR3ZWxmdGhJ
bnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNl
U2VxdWVuY2VBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0aGlydGVlbnRoUmVjb3JkQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1
bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgw
KSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlw
ZTo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5
cGUpIH07CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0
YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdERlZmF1bHRUb0pTT046OmluZm8oKSwgSlNUZXN0RGVm
YXVsdFRvSlNPTlByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7CisgICAgYm9vbCBoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgewor
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oImxvbmdBdHRyaWJ1dGUiKSwgc3RybGVuKCJsb25nQXR0cmlidXRl
IikpOworICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVBy
b3BlcnR5U2xvdCBzbG90OworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywg
Z2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorICAgIGlmICghZG93
bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJs
ZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIiks
IHN0cmxlbigiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKSk7CisgICAgICAgIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdu
b3JlQ29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAg
ICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKKyAgICB9CisgICAgaWYgKGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRp
ZXMgJiYgc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQorICAgICAgICBmbGF0dGVuRGljdGlv
bmFyeU9iamVjdCh2bSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9O
KCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OOjpzX2luZm8gPSB7
ICJUZXN0RGVmYXVsdFRvSlNPTiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTikgfTsKKworSlNUZXN0RGVmYXVs
dFRvSlNPTjo6SlNUZXN0RGVmYXVsdFRvSlNPTihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmIGltcGwp
CisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdERlZmF1bHRUb0pTT04+KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQo
IXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZhdWx0VG9KU09OPjo6dmFs
dWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRo
b3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsK
KworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTjo6Y3JlYXRlUHJvdG90eXBlKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNU
ZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rl
c3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRU
b0pTT04+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pT
T046OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmRlc3Ryb3koSlNDOjpK
U0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTiogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5K
U1Rlc3REZWZhdWx0VG9KU09OOjp+SlNUZXN0RGVmYXVsdFRvSlNPTigpOworfQorCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OKiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RE
ZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVs
dFRvSlNPTiogSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT04+OjpjYXN0KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAg
ICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBw
cm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3REZWZhdWx0
VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBw
cm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Cisg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJp
YnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+Ojpn
ZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJsb25n
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETFVuc2lnbmVkU2hvcnQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKTsKK30KKworI2lmIEVOQUJM
RShURVNUX0NPTkRJVElPTkFMKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRU
b0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT05FbnVtPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0
ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5
Q29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09O
RW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFibGVkQnlD
b25kaXRpb25hbEF0dHJpYnV0ZSIpOworfQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFt
ZXMoKS5lbnRIYW5kbGVyQXR0cmlidXRlRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmpl
Y3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxl
ckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRs
ZXJBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBzZXRFdmVudEhhbmRs
ZXJBdHRyaWJ1dGUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhpc09iamVjdC53
cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5lbnRIYW5kbGVyQXR0cmlidXRlRXZlbnQsIHZhbHVlKTsK
KyAgICB2bS5oZWFwLndyaXRlQmFycmllcigmdGhpc09iamVjdCwgdmFsdWUpOworICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVm
YXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmli
dXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZp
cnN0U3RyaW5nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
ICAgIHJldHVybiBpbXBsLnNldEZpcnN0U3RyaW5nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46
OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpcnN0U3RyaW5n
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09OU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
TG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0
cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZWNv
bmRMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTlNlY29u
ZExvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0
dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFNlY29uZExvbmdB
dHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNlY29u
ZExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04m
IHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudGhpcmRVbkpTT05hYmxlQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46
OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAidGhpcmRVbkpTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9u
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1
dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0RGVmYXVsdFRvSlNP
TiIsICJ0aGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAg
ICAgcmV0dXJuIGltcGwuc2V0VGhpcmRVbkpTT05hYmxlQXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6
c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJkVW5K
U09OYWJsZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09i
amVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgp
KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNP
TkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0Rm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0NsYW1wZWRBdHRy
aWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkZpZnRo
TG9uZ0NsYW1wZWRBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09O
RmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZpZnRoTG9uZ0NsYW1w
ZWRBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRGaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdD
bGFtcGVkQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJmaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExEb3VibGU+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRTaXh0aFR5cGVkZWZBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVm
QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRl
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0
cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZXZl
bnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVm
YXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJs
ZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlc3REZWZhdWx0VG9KU09OIiwgInNldmVudGhEaXJlY3RseVRvSlNP
TmFibGVBdHRyaWJ1dGUiLCAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiKTsgfSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
ICAgIHJldHVybiBpbXBsLnNldFNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKm5h
dGl2ZVZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rl
c3REZWZhdWx0VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGly
ZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRl
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORWlnaHRo
SW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50
ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVp
Z2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxq
c1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdERlZmF1bHRUb0pTT05FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlc3REZWZhdWx0VG9KU09OIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1w
bC5zZXRFaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rl
c3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNP
Tk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmpl
Y3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxl
QXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05O
aW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8
anNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmli
dXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OTmlu
dGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJU
ZXN0RGVmYXVsdFRvSlNPTiIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmli
dXRlIiwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7IH0pOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4g
aW1wbC5zZXROaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRK
U1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05O
aW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJuaW50aE9wdGlvbmFsRGlyZWN0
bHlUb0pTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3REZWZhdWx0VG9KU09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVj
dCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxP
YmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRo
RnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rl
c3REZWZhdWx0VG9KU09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
InRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVs
dFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1
ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVl
bmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRo
U2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbGV2ZW50aFNlcXVlbmNlQXR0cmli
dXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Cisg
ICAgICAgIHJldHVybiBpbXBsLnNldEVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpT
VGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERl
ZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VB
dHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1
bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFj
ZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6
Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0VHdlbGZ0
aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVHdl
bGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURM
VW5zaWduZWRTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoKSkpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJl
Y29yZEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlydGVl
bnRoUmVjb3JkQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFJlY29yZDxJRExET01TdHJpbmcsIElETFVuc2lnbmVkU2hvcnQ+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1
dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0
ZWVudGhSZWNvcmRBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqLCBKU1Rlc3REZWZhdWx0VG9KU09OKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQo
KSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRv
d25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVz
dFNldHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pT
PElETFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1Rf
Q09ORElUSU9OQUwpCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1l
cmF0aW9uPFRlc3REZWZhdWx0VG9KU09ORW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgor
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
aXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9u
Z0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlIiksIHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xh
bXBlZEF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50
ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRo
RGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUi
KSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlv
bmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZy
b3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJ
RExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2Vx
dWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVudGhSZWNv
cmRBdHRyaWJ1dGUiKSwgdG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNo
b3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC50aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT04+OjpjYWxsPGpzVGVzdERl
ZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVz
dERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAo
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgp
KQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8fCAh
SlNUZXN0RGVmYXVsdFRvSlNPTjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZh
dWx0VG9KU09OPikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNP
TiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZt
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNP
Tik7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7CisgICAgYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOwor
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNUZXN0RGVmYXVsdFRv
SlNPTjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5E
CisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihjZWxsKTsKKyAgICBh
bmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBl
ZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAg
ICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCitib29sIEpTVGVzdERlZmF1bHRUb0pTT05P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7CisgICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0RGVmYXVs
dFRvSlNPTiA9IHN0YXRpY19jYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihoYW5kbGUuc2xvdCgp
LT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldv
cmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3REZWZhdWx0
VG9KU09OLT53cmFwcGVkKCksIGpzVGVzdERlZmF1bHRUb0pTT04pOworfQorCisjaWYgRU5BQkxF
KEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlm
aWVyKCI/P183VGVzdERlZmF1bHRUb0pTT05AV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UK
K2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTE3VGVzdERlZmF1bHRUb0pT
T05FW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lO
VEVHUklUWSkKKyAgICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxl
UG9pbnRlcihpbXBsLnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0
ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdERlZmF1bHRUb0pTT05AV2Vi
Q29yZUBANkJAIik7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZf
WlRWTjdXZWJDb3JlMTdUZXN0RGVmYXVsdFRvSlNPTkVbMl07CisjZW5kaWYKKworICAgIC8vIElm
IHRoaXMgZmFpbHMgVGVzdERlZmF1bHRUb0pTT04gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28g
eW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0
cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19wb2x5bW9ycGhpYzxUZXN0RGVmYXVsdFRvSlNPTj46OnZhbHVlLCAiVGVzdERlZmF1bHRU
b0pTT04gaXMgbm90IHBvbHltb3JwaGljIik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNz
ZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBU
ZXN0RGVmYXVsdFRvSlNPTiBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdERlZmF1bHRUb0pTT04gaGFz
IHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRs
eSByZXF1aXJlIFRlc3REZWZhdWx0VG9KU09OIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFy
ZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1
dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFj
dHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAg
IHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPihnbG9iYWxPYmplY3QsIFdU
Rk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0RGVmYXVsdFRvSlNPTiYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0RGVmYXVsdFRvSlNPTiogSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1
bHRUb0pTT04qPih2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SlNUZXN0RGVmYXVsdFRvSlNPTiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdERlZmF1bHRUb0pT
T04+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3REZWZhdWx0
VG9KU09OPjsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTiogY3JlYXRlKEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxU
ZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRv
SlNPTiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0
VG9KU09OPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT04oc3Ry
dWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlw
ZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdERlZmF1bHRU
b0pTT04qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOworcHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pT
T04oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRv
SlNPTj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2Ns
YXNzIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3REZWZhdWx0VG9K
U09OKikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0RGVmYXVsdFRvSlNPTk93
bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCog
d3JhcHBlcktleShUZXN0RGVmYXVsdFRvSlNPTiogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJl
dHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3REZWZhdWx0VG9KU09OJik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT04q
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RE
ZWZhdWx0VG9KU09OPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdERlZmF1bHRUb0pTT04+
IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OOworICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0RGVmYXVsdFRvSlNPTio7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkVudW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51
bS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY0IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRv
U3RyaW5nKFRlc3REZWZhdWx0VG9KU09ORW51bSBlbnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0
YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAgICBN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW51bVZhbHVlMSIpLAorICAgICAgICBNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiRW51bVZhbHVlMiIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChz
dGF0aWNfY2FzdDxzaXplX3Q+KFRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMSkgPT0g
MCwgIlRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMSBpcyBub3QgMCBhcyBleHBlY3Rl
ZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0RGVmYXVsdFRv
SlNPTkVudW06OkVudW1WYWx1ZTIpID09IDEsICJUZXN0RGVmYXVsdFRvSlNPTkVudW06OkVudW1W
YWx1ZTIgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAg
cmV0dXJuIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30K
KwordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT05FbnVtIGVudW1lcmF0
aW9uVmFsdWUpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGxleGljYWxHbG9iYWxP
YmplY3Qudm0oKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZW51bWVyYXRpb25WYWx1ZSkp
OworfQorCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3REZWZhdWx0VG9KU09ORW51bT4gcGFyc2VF
bnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKHN0cmluZ1Zh
bHVlID09ICJFbnVtVmFsdWUxIikKKyAgICAgICAgcmV0dXJuIFRlc3REZWZhdWx0VG9KU09ORW51
bTo6RW51bVZhbHVlMTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTIiKQorICAg
ICAgICByZXR1cm4gVGVzdERlZmF1bHRUb0pTT05FbnVtOjpFbnVtVmFsdWUyOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVt
ZXJhdGlvblZhbHVlczxUZXN0RGVmYXVsdFRvSlNPTkVudW0+KCkKK3sKKyAgICByZXR1cm4gIlwi
RW51bVZhbHVlMVwiLCBcIkVudW1WYWx1ZTJcIiI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09ORW51bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09ORW51bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRFbnVt
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlc3REZWZhdWx0VG9KU09ORW51bS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1N0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0RGVm
YXVsdFRvSlNPTkVudW0pOwordGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBUZXN0RGVmYXVsdFRvSlNPTkVudW0pOwor
Cit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3REZWZhdWx0VG9KU09ORW51bT4gcGFyc2VFbnVtZXJh
dGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpT
VmFsdWUpOwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVz
PFRlc3REZWZhdWx0VG9KU09ORW51bT4oKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlLmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEF0dHJp
YnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05J
bmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9u
RmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlw
ZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OkJhc2UpOwor
Cit1c2luZyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9y
ID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Iodm0s
ICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Q29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2VQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH0gfSwK
K307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSkgfTsK
Kwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlOjppbmZvKCksIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19X
SVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKSB9
OworCitKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6SlNUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2U+JiYgaW1wbCkKKyAgICA6IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9N
T2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+Ojp2YWx1ZSwgIklu
dGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGlt
cGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisK
K0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Y3JlYXRl
UHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6
OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOwor
fQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisg
ICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitKU0M6Oklzb1N1
YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBj
bGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpKQorICAg
ICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZT4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlPikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKTsKKyAgICBlbHNlCisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCisgICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAg
cmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZSo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RG
b3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9y
Q2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7
Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2lu
Y2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisjaW5jbHVkZSAiVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgOiBwdWJsaWMgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdDsKKyAgICB1c2luZyBET01XcmFwcGVkID0gVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKHN0
cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5
cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBERUNMQVJFX0lORk87CisK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
eworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29u
Y3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOworICAgIFRlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZSYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlJj4oQmFzZTo6
d3JhcHBlZCgpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+JiYpOworCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2U+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZTsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA4
IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVy
ZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCisjaW5jbHVkZSAiSlNE
T01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFJlY29yZC5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0
cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAi
SlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFw
QW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJz
cGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bv
aW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisjaW5jbHVkZSAiSlNE
T01Db252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORW51
bS5oIgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9u
Z0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5
cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PjsKKwordGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3I6OnByb3RvdHlw
ZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0
b3Iodm0sICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiX3Mp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNz
SW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0
b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGVUYWJsZVZh
bHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3Ry
dWN0b3IpIH0gfSwKKyAgICB7ICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
SW5oZXJpdExvbmdBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0s
Cit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdDo6aW5mbygpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZVRh
YmxlVmFsdWVzLCAqdGhpcyk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lU
SU9OKCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdCkgfTsKKworSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OkpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiYmIGltcGwpCisgICAgOiBKU1Rl
c3REZWZhdWx0VG9KU09OKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQor
eworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8
QWN0aXZlRE9NT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+Ojp2YWx1ZSwgIkludGVy
ZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxl
bWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pT
T2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Jmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6cHJv
dG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pih2bSwgZ2xv
YmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdCogSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6Y2FzdChKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQqIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD46OmNhc3QoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQorewor
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Kj4oSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0JiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJp
dExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImluaGVyaXRMb25n
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
ICAgIHJldHVybiBpbXBsLnNldEluaGVyaXRMb25nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExv
bmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRv
SlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSos
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQo
KSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRv
d25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVz
dFNldHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pT
PElETFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1Rf
Q09ORElUSU9OQUwpCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1l
cmF0aW9uPFRlc3REZWZhdWx0VG9KU09ORW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgor
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
aXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9u
Z0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlIiksIHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xh
bXBlZEF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50
ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRo
RGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUi
KSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlv
bmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZy
b3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJ
RExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2Vx
dWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVudGhSZWNv
cmRBdHRyaWJ1dGUiKSwgdG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNo
b3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC50aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25n
QXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6Y2FsbDxqc1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30KKworSlNDOjpJc29TdWJzcGFj
ZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOworICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4pCisg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dCk7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0KTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0LmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAg
IGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5J
TkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9p
ZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqPihjZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFw
cGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAo
dGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFseXplci5z
ZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwg
YW5hbHl6ZXIpOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09O
LmgiCisjaW5jbHVkZSAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgOiBwdWJsaWMgSlNU
ZXN0RGVmYXVsdFRvSlNPTiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdERlZmF1
bHRUb0pTT047CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dDsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqIGNyZWF0ZShKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFy
cmF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2Rl
ID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9Cisg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CisgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKKyAgICBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQmIHdyYXBwZWQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCY+KEJh
c2U6OndyYXBwZWQoKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOworfTsKKworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgor
CisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1
ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxh
YmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUgIkpTRE9N
Q29udmVydFJlY29yZC5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAi
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElU
SU9OQUwpCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJK
U1Rlc3REZWZhdWx0VG9KU09ORW51bS5oIgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUg
ewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlRm9vKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xh
c3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSBmaW5hbCA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6
OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7
CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsUHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpC
YXNlKTsKKwordXNpbmcgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9y
ID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbD47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
Y29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0
KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpwcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIl9zKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQ
cm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiZmluYWxMb25nQXR0
cmlidXRlRm9vIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
Rm9vKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZv
bykgfSB9LAorICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRw
dHJfdCkgKDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSkgfTsKKwordm9p
ZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3Rh
dGljUHJvcGVydGllcyh2bSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6aW5mbygp
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0
aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnNfaW5mbyA9
IHsgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsKSB9OworCitKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+JiYg
aW1wbCkKKyAgICA6IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0
YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBb
QWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFz
c2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6
OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCogSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwqIElETE9wZXJhdGlvbjxK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0
b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmpl
Y3QoKSkpOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
eworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgdGhpc09iamVj
dCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maW5hbExvbmdBdHRyaWJ1dGVGb28oKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5h
bExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28i
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0
ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAg
ICAgICByZXR1cm4gaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1dGVGb28oV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlu
YWxMb25nQXR0cmlidXRlQmFyKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbD46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlQmFyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmlu
YWxMb25nQXR0cmlidXRlQmFyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6
OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0
dXJuIGltcGwuc2V0RmluYWxMb25nQXR0cmlidXRlQmFyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCogY2FzdGVk
VGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEds
b2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0
UnVudGltZUVuYWJsZWRFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9u
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubG9uZ0F0dHJpYnV0ZSgp
KSk7CisgICAgfQorICAgIGlmIChkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5U2V0
dGluZ3NBdHRyaWJ1dGUiKSwgdG9KUzxJRExVbnNpZ25lZFNob3J0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSgpKSk7Cisg
ICAgfQorI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRy
aWJ1dGUiKSwgdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0
dHJpYnV0ZSgpKSk7CisjZW5kaWYKKworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5n
QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERv
dWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUiKSwgdG9K
UzxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmli
dXRlIiksIHRvSlM8SURMRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0
dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSgpKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8
SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwubmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIiksIHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVh
bj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwudGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbGV2ZW50aFNlcXVl
bmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0
dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ0aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlIiksIHRvSlM8SURMUmVjb3JkPElETERP
TVN0cmluZywgSURMVW5zaWduZWRTaG9ydD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGhpcnRlZW50aFJlY29yZEF0
dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZp
bmFsTG9uZ0F0dHJpYnV0ZUZvbyIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUZvbygpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRy
aWJ1dGVCYXIiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OmNh
bGw8anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30KKwor
SlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMg
PSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCkpCisgICAgICAg
IHJldHVybiBzcGFjZTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+IHx8
ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+KQorICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxJc29T
dWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKKyAg
ICBlbHNlCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCisgICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
K0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3Bh
Y2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCo+KGNlbGwp
OworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0
LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlz
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBC
YXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlci5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisjaW5jbHVk
ZSAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIDogcHVibGljIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsOworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPiYmIGlt
cGwpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKKyAgICBUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmPihCYXNlOjp3
cmFwcGVkKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4geworICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7CisgICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
MTAgQEAKICNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaCIKICNpbmNsdWRlICJKU1Rlc3RE
T01KSVQuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVkZSAiSlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdC5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwuaCIKICNpbmNsdWRlICJKU1Rlc3REb21haW5TZWN1cml0eS5oIgogI2luY2x1ZGUg
IkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dC5oIgpAQCAtODUsMTAgKzg5LDYgQEAKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seU1hcExp
a2UuaCIKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seVNldExpa2UuaCIKICNpbmNsdWRlICJKU1Rl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9u
LmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIK
LSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIkpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCIKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlLmgi
CiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXIuaCIKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbi5oIgpAQCAtMTk0LDYgKzE5NCwxNCBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1
cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMjg0LDE0ICsy
OTIsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlCiBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1l
bW9yeUNvc3RDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwpAQCAtMzIzLDEzICszMjMsMTMgQEAgdXNp
bmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IgPSBKUwogCiAvKiBIYXNoIHRhYmxlICov
CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmpl
Y3RUYWJsZUluZGV4WzI3MF0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjhdID0gewogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA0MiwgLTEgfSwKKyAgICB7IDQ2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAwLCAtMSB9LAotICAgIHsgOCwgMjY1IH0sCi0gICAgeyA0NiwgLTEgfSwKKyAgICB7IDgsIC0x
IH0sCisgICAgeyA1MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKQEAgLTMzNywxMSArMzM3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDU1LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNCwgLTEg
fSwKKyAgICB7IDI4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzU5LDE0ICszNTksMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMzYsIC0xIH0sCisgICAgeyA0MCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA3MiwgLTEgfSwKLSAgICB7IDE0LCAyNTkgfSwKKyAg
ICB7IDE4LCAyNjAgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKQEAgLTM3NCwxMSArMzc0LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDQwLCAtMSB9LAotICAgIHsgMjEsIDI1NiB9LAorICAgIHsgNDQsIC0x
IH0sCisgICAgeyAyNSwgMjU3IH0sCiAgICAgeyAxMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgNDcsIC0xIH0sCisgICAgeyA1MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM4NywxNCArMzg3LDE0IEBAIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM4LCAtMSB9LAorICAgIHsgNDIsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAy
MywgMjY3IH0sCisgICAgeyAyNywgMjY1IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00MTYsNjYgKzQxNiw2NiBAQCBzdGF0aWMgY29uc3Qg
c3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNSwgMjU3IH0sCisgICAgeyAxNSwgMjU2IH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDYyLCAtMSB9LAotICAgIHsgMjAsIC0xIH0sCisgICAg
eyAyNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDE5LCAtMSB9LAorICAgIHsgMjMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDM3LCAtMSB9LAorICAgIHsgNDEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisg
ICAgeyAxNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMzAsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDI2LCAtMSB9LAorICAgIHsgMiwgMjY3IH0sCisgICAgeyA0MywgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMiwgMjY5IH0sCi0gICAgeyAzOSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAyNiwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAotICAgIHsgMjIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAg
IHsgNTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyAzMCwgLTEgfSwKKyAgICB7IDM0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyA0NCwgLTEgfSwKKyAgICB7IDQ4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDU0LCAtMSB9LAorICAgIHsgNTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDE1LCAtMSB9LAorICAgIHsgMTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDEyLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgNDksIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwKKyAgICB7IDUzLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDE2LCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyA2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00ODYsOCArNDg2LDggQEAg
c3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjksIC0xIH0sCi0gICAg
eyAzMywgMjYzIH0sCisgICAgeyAzMywgLTEgfSwKKyAgICB7IDM3LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyA1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00OTcsNyArNDk3LDcg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTcsIDI1OCB9LAor
ICAgIHsgMjEsIDI1OSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA2MywgLTEgfSwKICAgICB7
IC0xLCAtMSB9LApAQCAtNTA4LDkgKzUwOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDM1LCAyNjggfSwKKyAgICB7IDM5LCAyNjYgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgMTgsIC0xIH0sCisgICAgeyAyMiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgNjYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTUzMSwxMSArNTMxLDExIEBAIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ4LCAyNjQgfSwKKyAgICB7
IDUyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDMsIC0x
IH0sCi0gICAgeyAtMSwgLTEgfSwKKyAgICB7IDE3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTUzLDggKzU1Myw4IEBAIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUwLCAyNjIgfSwKLSAgICB7IDEx
LCAyNjEgfSwKKyAgICB7IDU0LCAyNjMgfSwKKyAgICB7IDExLCAyNjIgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgNjQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTU2MywzMyArNTYzLDMx
IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE2LCAtMSB9LAor
ICAgIHsgMjAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI3LCAtMSB9LAorICAgIHsg
MzEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0x
IH0sCisgICAgeyAzNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IDcsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwKKyAgICB7IDU2
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MywgLTEgfSwKKyAgICB7IDU3LCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAyOCwgMjY2IH0sCi0gICAgeyAzMSwgMjYwIH0sCi0gICAgeyAz
NCwgLTEgfSwKLSAgICB7IDQxLCAtMSB9LAotICAgIHsgNDMsIC0xIH0sCisgICAgeyAyOSwgMjU4
IH0sCisgICAgeyAzMiwgMjY0IH0sCisgICAgeyAzNSwgMjYxIH0sCisgICAgeyAzOCwgLTEgfSwK
ICAgICB7IDQ1LCAtMSB9LAotICAgIHsgNTEsIC0xIH0sCi0gICAgeyA1NiwgLTEgfSwKLSAgICB7
IDU3LCAtMSB9LAotICAgIHsgNTgsIC0xIH0sCisgICAgeyA0NywgLTEgfSwKKyAgICB7IDQ5LCAt
MSB9LAorICAgIHsgNTUsIC0xIH0sCiAgICAgeyA2MCwgLTEgfSwKICAgICB7IDY1LCAtMSB9LAog
ICAgIHsgNjksIC0xIH0sCkBAIC02MjEsNiArNjE5LDEwIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RHbG9iYWwKICAgICB7ICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDb25kaXRpb25hbEluY2x1
ZGVzQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RE9NSklUIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RE9NSklUQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29u
c3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IpIH0g
fSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3Ip
IH0gfSwKICAgICB7ICJUZXN0RG9tYWluU2VjdXJpdHkiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9i
amVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RW5hYmxlZEJ5U2V0
dGluZyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3IpIH0gfSwKICAgICB7ICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKQEAgLTY3MSwxMCArNjcz
LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgIlRl
c3RSZWFkT25seU1hcExpa2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25s
eU1hcExpa2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExp
a2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RSZWFkT25seVNldExpa2UiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsg
IlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJp
YWxpemF0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rv
cikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvcikgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKICAgICB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpIH0gfSwKICNlbHNlCkBAIC0xMjM5LDYgKzEyMzcsOTgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29ucwogICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RET01KSVRDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdERPTUpJVCIpOwogfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVz
dERlZmF1bHRUb0pTT04iKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RGVmYXVsdFRvSlNPTiIpLCBzdHJs
ZW4oIlRlc3REZWZhdWx0VG9KU09OIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1
Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiVGVzdERlZmF1bHRUb0pTT04iKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
IiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIikpLCB2YWx1
ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0
PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpn
ZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3JH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
IiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IikpLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiKSwgc3RybGVuKCJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsIik7Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKQEAgLTIyNDAsOTggKzIzMzAsNiBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyCiAgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9u
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1
Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTZXJpYWxpemF0aW9uIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb24iKSksIHZhbHVl
KTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0K
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQiKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpz
ZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
LXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yR2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikp
LCB2YWx1ZSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1
Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsKLX0KLQogI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI2NzAw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBAIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRl
c3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKICNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpD
YWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNh
bGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1l
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uVmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRy
aWJ1dGVzCiAKQEAgLTE1MiwxMSArMTUyLDExIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3ROb2RlUHIKICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0g
fSwKICNlbmRpZgorICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAia2V5cyIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4o
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAg
ICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJf
dCkgKDApIH0gfSwKICAgICB7ICJmb3JFYWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25G
b3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RO
b2RlUHJvdG90eXBlKSB9OwpAQCAtMzg1LDYgKzM4NSwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE5vZGVQCiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdE5vZGUqIGNhc3RlZFRo
aXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJu
YW1lIiksIHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5uYW1lKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxs
PGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Cit9CisKIHN0cnVjdCBUZXN0Tm9kZUl0ZXJhdG9y
VHJhaXRzIHsKICAgICBzdGF0aWMgY29uc3RleHByIEpTRE9NSXRlcmF0b3JUeXBlIHR5cGUgPSBK
U0RPTUl0ZXJhdG9yVHlwZTo6U2V0OwogICAgIHVzaW5nIEtleVR5cGUgPSB2b2lkOwpAQCAtNDg4
LDI5ICs1MDQsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAg
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90
eXBlRnVuY3Rpb25Gb3JFYWNoQ2FsbGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImZvckVhY2giKTsKIH0KIAotSlNDOjpKU09iamVjdCogSlNUZXN0Tm9kZTo6c2VyaWFsaXpl
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2RlJiB0aGlzT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSk7Ci0KLSAgICBhdXRvIG5hbWVWYWx1ZSA9IGpzVGVzdE5vZGVOYW1lR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm5hbWUiKSwgbmFtZVZhbHVlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwg
SlNUZXN0Tm9kZSogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE5vZGU6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIp
OwotfQotCiBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCShyZXZpc2lvbiAyNjcwMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewog
ICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3Vy
cmVudGx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTk0LDcgKzE1OTQsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24oSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93QW5kV29ya2VyRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZy
YW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAog
Ly8gQXR0cmlidXRlcwogCkBAIC0yMzM2LDcgKzIzMzUsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqUHJvCiAgICAgeyAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtl
ckZ1bmN0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9Xb3JrZXJGdW5jdGlvbiksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJjb25kaXRpb25h
bGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAogICAgIHsgInRvU3RyaW5nIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvU3RyaW5nKSwgKGludHB0cl90KSAoMCkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjEpCiAgICAgeyAiQ09ORElUSU9OQUxfQ09OU1QiLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7
IChsb25nIGxvbmcpKDApIH0gfSwKICNlbHNlCkBAIC05NDAzLDQxICs5NDAxLDYgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCi1K
U0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGNyZWF0
ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZSIpLCBjcmVh
dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlID0ganNUZXN0T2Jq
UmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qp
OwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIp
LCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7Ci0KLSAgICBhdXRvIGVudW1BdHRyVmFsdWUgPSBq
c1Rlc3RPYmpFbnVtQXR0ckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsK
LSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtQXR0ciIpLCBlbnVtQXR0clZh
bHVlKTsKLQotICAgIGF1dG8gbG9uZ0F0dHJWYWx1ZSA9IGpzVGVzdE9iakxvbmdBdHRyR2V0dGVy
KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxvbmdBdHRyIiksIGxvbmdBdHRyVmFsdWUpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSosIEpTVGVzdE9iaiogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdE9iajo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewot
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAi
dG9KU09OIik7Ci19Ci0KIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDI2
NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNET01HbG9iYWxP
YmplY3QmKTsKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9j
YWNoZWRBdHRyaWJ1dGUxOwogICAgIG11dGFibGUgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtu
b3duPiBtX2NhY2hlZEF0dHJpYnV0ZTI7CiAjaWYgRU5BQkxFKENPTkRJVElPTikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDc3MCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0K
LSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgotI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCi0jaW5jbHVk
ZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFj
ZS5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCi0jaW5jbHVkZSAiSlNET01D
b252ZXJ0TnVtYmVycy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgotI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCi0jaW5jbHVkZSAi
SlNUZXN0RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2UuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3Rv
dHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1
Y3Rvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5o
PgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBu
YW1lc3BhY2UgSlNDOwotCi0vLyBGdW5jdGlvbnMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLQotLy8gQXR0cmlidXRlcwotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNl
cmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0
aExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9u
Z0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
blNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25F
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0KLWNs
YXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFs
T2JqZWN0OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6
YXRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewot
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxp
emF0aW9uUHJvdG90eXBlLCBCYXNlKTsKLSAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlOwotICAgIH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvblByb3Rv
dHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciA9IEpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb24+OwotCi10
ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5
cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZ2xvYmFsT2Jq
ZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbjo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcodm0sICJUZXN0U2VyaWFsaXphdGlvbiJfcyksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlh
bGl6YXRpb25Db25zdHJ1Y3RvcikgfTsKLQotLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICov
Ci0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rv
cikgfSB9LAotICAgIHsgImZpcnN0U3RyaW5nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRmly
c3RTdHJpbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGUpIH0gfSwKLSAgICB7ICJzZWNvbmRMb25nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2Vj
b25kTG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRl
KSB9IH0sCi0gICAgeyAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXph
dGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgImZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJmaWZ0aExvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmli
dXRlKSB9IH0sCi0gICAgeyAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
U2l4dGhUeXBlZGVmQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0
dHJpYnV0ZSkgfSB9LAotICAgIHsgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUp
IH0gfSwKLSAgICB7ICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlKSB9IH0sCi0gICAgeyAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmli
dXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJl
Y3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJl
bGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRl
KSB9IH0sCi0gICAgeyAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJp
YWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFs
aXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInRv
SlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5j
dGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5j
dGlvbj4oanNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0
cl90KSAoMCkgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9u
UHJvdG90eXBlKSB9OwotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0aW9uOjppbmZvKCksIEpT
VGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAgIEpTQ19U
T19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwotfQotCi1jb25zdCBDbGFzc0luZm8g
SlNUZXN0U2VyaWFsaXphdGlvbjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNl
cmlhbGl6YXRpb24pIH07Ci0KLUpTVGVzdFNlcmlhbGl6YXRpb246OkpTVGVzdFNlcmlhbGl6YXRp
b24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKQotICAgIDogSlNET01XcmFwcGVyPFRlc3RT
ZXJpYWxpemF0aW9uPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsK
LX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9N
T2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbj46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJr
ZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mg
c3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7Ci0KLX0KLQotSlNPYmplY3QqIEpTVGVzdFNl
cmlhbGl6YXRpb246OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6
OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJv
dG90eXBlKCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OnByb3RvdHlw
ZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsK
LX0KLQotSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0s
IGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotdm9pZCBKU1Rl
c3RTZXJpYWxpemF0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQotewotICAgIEpTVGVz
dFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXphdGlvbjo6fkpTVGVz
dFNlcmlhbGl6YXRpb24oKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXph
dGlvbiogSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYXN0KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0g
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0K
LXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb24qIElETE9wZXJhdGlvbjxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxs
RnJhbWUudGhpc1ZhbHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkp
OwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlh
bGl6YXRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJu
IHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2Jq
ZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpn
ZXQ8anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsK
LSAgICAgICAgcmV0dXJuIGltcGwuc2V0Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0
aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RT
dHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExv
bmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9u
U2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUi
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRM
b25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0U2Vjb25k
TG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
U2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0
aW9uPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwudGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXph
YmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJk
VW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRy
aWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0VGhpcmRV
bnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOwotICAgIH0pOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXph
YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVB
dHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17
Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldEZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNl
cmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaWZ0aExvbmdB
dHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5z
ZXRGaWZ0aExvbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6
YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpKTsKLX0KLQot
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJp
YWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRp
b24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldFNpeHRoVHlwZWRlZkF0dHJpYnV0
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxq
c1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAic2V2ZW50
aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRTZXZlbnRoRGlyZWN0bHlTZXJpYWxp
emFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2Vy
aWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09i
amVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3Rs
eUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETElu
dGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgImVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRFaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCpu
YXRpdmVWYWx1ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURM
SW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxP
YmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldE5pbnRoT3B0aW9u
YWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0g
ICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5
QXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXph
dGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0ZW50aEZyb3pl
bkFycmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRUZW50aEZyb3plbkFycmF5QXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50
aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9N
U3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0
cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVu
Y2VBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVu
Y2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1
cm4gaW1wbC5zZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbGV2
ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RT
ZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNl
PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldFR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpT
VGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJ
bnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQotCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RT
ZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gZmlyc3RT
dHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJp
YnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Nj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCBmaXJzdFN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlID0g
anNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAg
YXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlh
bGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZmlmdGhMb25nQXR0cmlidXRlVmFs
dWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAg
ICBhdXRvIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNp
eHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1
dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzZXZlbnRoRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZXZl
bnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IGF1dG8qIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1
ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzZXZl
bnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCk7Ci0g
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlh
bGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICBhdXRvKiBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZh
bHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlIiksIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwotCi0g
ICAgYXV0byBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGlmICghbmludGhPcHRpb25hbERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byogbmlu
dGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0g
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxP
YmplY3QsICpqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KG5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVuQXJy
YXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0
cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdGVu
dGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2
ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpjYWxsPGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7
Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6YXRpb246OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTZXJpYWxpemF0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0g
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uPiB8fCAhSlNUZXN0U2VyaWFsaXphdGlvbjo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uPikKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwg
SlNUZXN0U2VyaWFsaXphdGlvbik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXJpYWxpemF0aW9uLmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwotfQotCi12
b2lkIEpTVGVzdFNlcmlhbGl6YXRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb24qPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9y
Q2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNl
bGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51
cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwot
fQotCi1ib29sIEpTVGVzdFNlcmlhbGl6YXRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKLXsKLSAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlKTsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlYXNv
bik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Pd25l
cjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRl
eHQpCi17Ci0gICAgYXV0byoganNUZXN0U2VyaWFsaXphdGlvbiA9IHN0YXRpY19jYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb24qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Ci0gICAgYXV0byYgd29y
bGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7Ci0gICAgdW5jYWNo
ZVdyYXBwZXIod29ybGQsICZqc1Rlc3RTZXJpYWxpemF0aW9uLT53cmFwcGVkKCksIGpzVGVzdFNl
cmlhbGl6YXRpb24pOwotfQotCi0jaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQotI2lmIFBM
QVRGT1JNKFdJTikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQotZXh0ZXJuICJDIiB7
IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdFNlcmlhbGl6YXRpb25A
V2ViQ29yZUBANkJAIilbXSkoKTsgfQotI2Vsc2UKLWV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCog
X1pUVk43V2ViQ29yZTE3VGVzdFNlcmlhbGl6YXRpb25FW107IH0KLSNlbmRpZgotI2VuZGlmCi0K
LUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1w
bCkKLXsKLQotI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKLSAgICBjb25zdCB2b2lkKiBh
Y3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9pbnRlcihpbXBsLnB0cigpKTsKLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlm
aWVyKCI/P183VGVzdFNlcmlhbGl6YXRpb25AV2ViQ29yZUBANkJAIik7Ci0jZWxzZQotICAgIHZv
aWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXph
dGlvbkVbMl07Ci0jZW5kaWYKLQotICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdFNlcmlhbGl6YXRp
b24gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQotICAgIC8v
IEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVm
aW5pdGlvbgotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0U2VyaWFs
aXphdGlvbj46OnZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb24gaXMgbm90IHBvbHltb3JwaGljIik7
Ci0KLSAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVz
ZSBhZnRlciBmcmVlIGJ1Zywgb3IKLSAgICAvLyBUZXN0U2VyaWFsaXphdGlvbiBoYXMgc3ViY2xh
c3Nlcy4gSWYgVGVzdFNlcmlhbGl6YXRpb24gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2Vk
Ci0gICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RTZXJpYWxpemF0aW9u
IHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCi0gICAgLy8gYnkgYWRkaW5nIHRo
ZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVm
aW5pdGlvbgotICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0
ZWRWVGFibGVQb2ludGVyKTsKLSNlbmRpZgotICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RT
ZXJpYWxpemF0aW9uPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotfQotCi1KU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbiYgaW1wbCkKLXsK
LSAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwp
OwotfQotCi1UZXN0U2VyaWFsaXphdGlvbiogSlNUZXN0U2VyaWFsaXphdGlvbjo6dG9XcmFwcGVk
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBw
ZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPih2bSwgdmFsdWUpKQotICAg
ICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCShyZXZpc2lvbiAyNjcwMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5oCShub25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgotI2luY2x1
ZGUgIlRlc3RTZXJpYWxpemF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbiA6IHB1
YmxpYyBKU0RPTVdyYXBwZXI8VGVzdFNlcmlhbGl6YXRpb24+IHsKLXB1YmxpYzoKLSAgICB1c2lu
ZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemF0aW9uPjsKLSAgICBzdGF0aWMgSlNU
ZXN0U2VyaWFsaXphdGlvbiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBs
KQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvbiogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb24oc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKGltcGwpKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0g
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKLSAgICBzdGF0aWMgVGVzdFNlcmlhbGl6YXRpb24qIHRvV3JhcHBlZChKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkp
OwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpW
TSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBK
U0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7Ci0gICAgfQotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwotICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7Ci1w
cm90ZWN0ZWQ6Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTZXJpYWxpemF0aW9uPiYmKTsKLQotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbk93
bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7Ci0gICAg
dmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQpOwotfTsKLQotaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIo
RE9NV3JhcHBlcldvcmxkJiwgVGVzdFNlcmlhbGl6YXRpb24qKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXI+IG93bmVyOwotICAgIHJldHVybiAm
b3duZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RTZXJpYWxpemF0
aW9uKiB3cmFwcGFibGVPYmplY3QpCi17Ci0gICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKLX0K
LQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgVGVzdFNlcmlhbGl6YXRpb24mKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRv
SlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVs
bCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYpOwotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxU
ZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwo
KSkgOiBKU0M6OmpzTnVsbCgpOyB9Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTVGVzdFNlcmlhbGl6YXRpb247Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IFRlc3RTZXJpYWxpemF0aW9uKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlLmNwcAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZS5oIgotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKLSNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
LQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi0vLyBBdHRy
aWJ1dGVzCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05v
bkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAg
SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5
cGUsIEJhc2UpOwotICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7Ci0gICAgfQot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUs
IEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpCYXNlKTsK
LQotdXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rv
ciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlPjsKLQotdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsK
LSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHZt
LCAmZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZUNvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KLQotc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSB9IH0s
Ci19OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2VQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUpIH07
Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZTo6aW5mbygpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NUUklOR19UQUdf
V0lUSE9VVF9UUkFOU0lUSU9OKCk7Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSkg
fTsKLQotSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OkpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlPiYmIGltcGwpCi0gICAgOiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQot
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwotCi0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURP
TU9iamVjdCwgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPjo6dmFsdWUsICJJ
bnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBp
bXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQot
Ci1KU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmNyZWF0
ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsK
LX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpw
cm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2U+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCi1KU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I+KHZtLCAq
anNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
LCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgot
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKLX0KLQotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2U+IHx8ICFKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZT4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSk7Ci0gICAgZWxzZQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IHJldHVybiBzcGFjZTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UqPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0
Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZv
ckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIp
OwotfQotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIK
LSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIlRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIDogcHVibGlj
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0g
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlPiYmIGltcGwpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4oZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZShzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJldHVybiBwdHI7
Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0gICAgREVDTEFSRV9JTkZP
OwotCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQot
ICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2UmIHdyYXBwZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSY+KEJh
c2U6OndyYXBwZWQoKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPiYmKTsKLQotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2U7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSo7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJ
KHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
NzUgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaCIKLQotI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZl
cnROdW1iZXJzLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1
ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLS8vIEZ1bmN0aW9ucwotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKLQotLy8gQXR0cmlidXRlcwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlIGZpbmFsIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpT
Qzo6SlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlPih2bS5oZWFw
KSkgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJl
dHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJv
dG90eXBlLCBCYXNlKTsKLSAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOwotfTsKLVNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdFByb3RvdHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdD47Ci0KLXRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsK
LX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Il9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxl
IGZvciBwcm90b3R5cGUgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29u
c3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKSB9IH0sCi0gICAgeyAiaW5o
ZXJpdExvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRy
aWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKSB9
IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKSB9Owot
Ci12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJlaWZ5U3Rh
dGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmluZm8oKSwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAg
IEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwotfQotCi1jb25zdCBDbGFz
c0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQpIH07Ci0KLUpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0OjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdD4mJiBpbXBsKQotICAgIDogSlNUZXN0U2VyaWFsaXphdGlvbihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotCi0g
ICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Pjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBb
QWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFz
c2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQotCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQ6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJv
dG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNl
cmlhbGl6YXRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOwotfQotCi1KU09iamVj
dCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KLUpTVmFs
dWUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nh
c3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKLXsKLSAgICByZXR1cm4ganNEeW5h
bWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiBJRExPcGVyYXRpb248SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsK
LSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFBy
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhp
c09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Pjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0
dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRJbmhl
cml0TG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0
TG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OnNldDxzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0
dHJpYnV0ZSIpOwotfQotCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dDo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlhbGl6ZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKLQotICAgIGF1dG8gaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1
ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUoKmxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6Y2FsbDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJ0b0pTT04iKTsKLX0KLQotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ+IHx8ICFKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4pCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCk7Ci0gICAgZWxzZQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFw
Q2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KTsKLSAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmdldCgp
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQqPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChj
ZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2Vs
bCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5z
dHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwotfQotCi0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCShyZXZpc2lv
biAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAK
LS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RP
TVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0jaW5jbHVkZSAi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgOiBwdWJsaWMgSlNUZXN0U2VyaWFsaXphdGlv
biB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb247Ci0gICAg
dXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDsKLSAgICBzdGF0aWMg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0PiYmIGltcGwpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJl
dHVybiBwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0gICAgREVD
TEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6
ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHdyYXBwZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCY+KEJhc2U6OndyYXBw
ZWQoKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0PiYmKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsK
LQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCo7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShy
ZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSwzMDkgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIgotCi0jaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgotI2luY2x1ZGUgIkpT
RE9NQ29udmVydE51bWJlcnMuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
Ci0jaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotLy8gRnVuY3Rp
b25zCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6Q2FsbEZyYW1lKik7Ci0KLS8vIEF0dHJpYnV0ZXMKLQotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFs
TG9uZ0F0dHJpYnV0ZUZvbyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlQmFyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFBy
b3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgot
ICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUsIEJhc2Up
OwotICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7Ci0gICAgfQotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKLX07Ci1TVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsUHJvdG90eXBlOjpCYXNlKTsKLQotdXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD47Ci0KLXRlbXBsYXRlPD4gSlNWYWx1ZSBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVj
dG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLX0KLQotdGVtcGxh
dGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJj
b25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0
cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9IH0s
Ci0gICAgeyAiZmluYWxMb25nQXR0cmlidXRlRm9vIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlRm9vKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbykgfSB9LAotICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUJh
ciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhciksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIpIH0gfSwK
LSAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVG
dW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKLX07Ci0KLWNvbnN0IENsYXNzSW5m
byBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpzX2luZm8gPSB7ICJU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bFByb3RvdHlwZSkgfTsKLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbDo6aW5mbygpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJv
dG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKLSAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VU
X1RSQU5TSVRJT04oKTsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKSB9OwotCi1KU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+JiYgaW1wbCkKLSAgICA6IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQotewotfQotCi12b2lk
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
LXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKLQotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVE
T01PYmplY3QsIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6dmFsdWUsICJJbnRlcmZh
Y2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1l
bnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQotCi1KU09i
amVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Y3JlYXRlUHJvdG90eXBlKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNv
bnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcj4odm0s
ICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQot
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYXN0KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0g
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwqIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2Fz
dChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJh
bWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhp
c1ZhbHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3Rv
dHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVGb28oKSkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9u
Z0F0dHJpYnV0ZUZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJm
aW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1
dGVGb28oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRy
aWJ1dGVGb28oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnNldDxzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExv
bmdBdHRyaWJ1dGVGb28iKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwmIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkpKSk7Ci19Ci0KLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVCYXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmluYWxMb25n
QXR0cmlidXRlQmFyIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
LSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0RmluYWxMb25nQXR0cmlidXRlQmFyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFy
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmli
dXRlQmFyIik7Ci19Ci0KLUpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJp
YWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0KLSAgICBhdXRvIGZpbmFsTG9uZ0F0
dHJpYnV0ZUJhclZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9u
Z0F0dHJpYnV0ZUJhckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwg
ZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiB0
aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09i
amVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+OjpjYWxsPGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQ
cm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAidG9KU09OIik7Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsPiB8fCAhSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4g
SVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmdldCgpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwqPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9y
Q2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNl
bGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51
cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwot
fQotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwuaAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCA6IHB1YmxpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Ci1wdWJsaWM6
Ci0gICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OwotICAgIHVzaW5n
IERPTVdyYXBwZWQgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDsKLSAgICBzdGF0aWMg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbD4mJiBpbXBsKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPihnbG9iYWxPYmplY3QtPnZtKCkuaGVh
cCkpIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwoc3RydWN0dXJlLCAqZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltcGwpKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QmKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwg
SlNDOjpOb25BcnJheSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAg
ICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRs
eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bCYgd3JhcHBlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmPihCYXNlOjp3cmFwcGVkKCkpOwotICAgIH0KLXBy
b3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotCi0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbD4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkocmV2aXNp
b24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNSArOTcsNSBAQAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0g
RmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFycmF5KCk7CiAKICAgICBbRXhwb3NlZD1XaW5kb3csIE1h
eVRocm93RXhjZXB0aW9uXSBzdHJpbmdpZmllcjsKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1
dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NSArNDUsNSBAQAogCiAgICAgW01heVRocm93RXhjZXB0aW9uXSBET01Qb2ludCBtYXRyaXhUcmFu
c2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4SW5pdCBtYXRyaXgpOwogCi0gICAgc2VyaWFsaXplciA9
IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0RPTVF1YWQuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9pbnQgcDQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgW1NhbWVP
YmplY3RdLgogICAgIFtOZXdPYmplY3RdIERPTVJlY3QgZ2V0Qm91bmRzKCk7CiAKLSAgICBzZXJp
YWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHkuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAy
NjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3Ry
aWN0ZWQgZG91YmxlIGJvdHRvbTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVk
IGRvdWJsZSBsZWZ0OwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bl
cmZvcm1hbmNlRW50cnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2VFbnRyeS5pZGwJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAg
dHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJl
c1RpbWVTdGFtcCBzdGFydFRpbWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNU
aW1lU3RhbXAgZHVyYXRpb247Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaAkocmV2aXNpb24gMjY3MDA3KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHJlc3BvbnNlRW5k
KCkgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9yPFJlZjxQZXJmb3JtYW5jZVNlcnZlclRpbWluZz4+
JiBzZXJ2ZXJUaW1pbmcoKSBjb25zdCB7IHJldHVybiBtX3NlcnZlclRpbWluZzsgfQogCisgICAg
VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6UmVzb3VyY2U7IH0KKyAgICBB
U0NJSUxpdGVyYWwgZW50cnlUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gInJlc291cmNlIl9z
OyB9CisKIHByaXZhdGU6CiAgICAgUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZyhNb25vdG9uaWNU
aW1lIHRpbWVPcmlnaW4sIFJlc291cmNlVGltaW5nJiYpOwogICAgIH5QZXJmb3JtYW5jZVJlc291
cmNlVGltaW5nKCk7CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBl
OjpSZXNvdXJjZTsgfQotICAgIEFTQ0lJTGl0ZXJhbCBlbnRyeVR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAicmVzb3VyY2UiX3M7IH0KLQogICAgIGRvdWJsZSBuZXR3b3JrTG9hZFRpbWVUb0RP
TUhpZ2hSZXNUaW1lU3RhbXAoU2Vjb25kcykgY29uc3Q7CiAKICAgICBBdG9tU3RyaW5nIG1faW5p
dGlhdG9yVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJj
ZVRpbWluZy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZVJlc291cmNlVGltaW5nLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NSArNTMsNSBAQCB0eXBlZGVmIGRvdWJsZSBET01IaWdoUmVzVGltZVN0YW1wOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0YW1wIHJlc3BvbnNlRW5kOwogICAgIFtFbmFi
bGVkQXRSdW50aW1lPVNlcnZlclRpbWluZ10gcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5
PFBlcmZvcm1hbmNlU2VydmVyVGltaW5nPiBzZXJ2ZXJUaW1pbmc7CiAKLSAgICBzZXJpYWxpemVy
ID0geyBpbmhlcml0LCBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigp
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmcu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJU
aW1pbmcuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZv
cm1hbmNlU2VydmVyVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzYsNSArMzYsNSBAQCB0
eXBlZGVmIGRvdWJsZSBET01IaWdoUmVzVGltZVN0YW1wOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVT
dGFtcCBkdXJhdGlvbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlc2NyaXB0
aW9uOwotICAgIHNlcmlhbGl6ZXIgPSB7YXR0cmlidXRlfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1p
bmcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1p
bmcuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTQsNSArNTQsNSBAQAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZEV2ZW50U3RhcnQ7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkRXZlbnRFbmQ7CiAKLSAgICBz
ZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigp
OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408679</attachid>
            <date>2020-09-13 21:11:53 -0700</date>
            <delta_ts>2020-09-14 09:49:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200913211152.patch</filename>
            <type>text/plain</type>
            <size>346532</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTEzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSAnc2VyaWFsaXph
YmxlJyBrZXl3b3JkLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGZyb20gV2ViSURMLAorICAgICAg
ICB3aXRoIGl0cyByZXBsYWNlbWVudCwgJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknLgorICAg
ICAgICAKKyAgICAgICAgVGhlIG5ldyB2ZXJzaW9uIGlzIHByZXR0eSBzaW1pbGFyLCBidXQgaGFz
IG11Y2ggbGVzcyByb29tIGZvciBjdXN0b21pemF0aW9uCisgICAgICAgIGluIHRoYXQgeW91IGNh
biBubyBsb25nZXIgc3BlY2lmeSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUg
SlNPTgorICAgICAgICByZXN1bHQuIFJhdGhlciwgYWxsIGF0dHJpYnV0ZXMgdGhhdCBxdWFsaXR5
IGFzIGhhdmUgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoKKyAg
ICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1YWQu
aWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBhZ2Uv
UGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmg6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDoK
KyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbDoKKyAgICAgICAgKiBw
YWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGw6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
aWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRBZGRyZXNzLmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGw6
CisgICAgICAgIFVwZGF0ZSBJRExzIHJlcGxhY2luZyBhbGwgdXNlIG9mIHNlcmlhbGl6ZXIuCisg
ICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAg
ICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNK
U09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFi
bGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxl
KToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVP
cGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5p
dGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAg
ICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6
CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlN
ZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmli
dXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb246CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBbRGVmYXVsdF0gdG9KU09OIGFuZCByZW1v
dmUgc3VwcG9ydCBmb3Igc2VyaWFsaXplci4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsOiBSZW1vdmVkLgorICAgICAgICBVcGRhdGUg
dGVzdHMuCisKIDIwMjAtMDktMTMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJJRExdIFJlbW92ZSBuZWVkIGZvciBbTWF5VGhyb3dFeGNlcHRpb25dIG9uIGNv
bnN0cnVjdG9ycyBhbmQgbGVnYWN5IGZhY3RvcnkgZnVuY3Rpb25zCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRs
CShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWFEZXZpY2VLaW5kIGtpbmQ7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBsYWJlbDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGdyb3VwSWQ7Ci0gICAgc2VyaWFsaXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7CiB9OwogCiAvLyBGSVhNRSAxNjk4NzE6IG1pc3NpbmcgSW5wdXRE
ZXZpY2VJbmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuY3BwCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDYgKzY3LDE1IEBAIFJlZjxSVENJY2VDYW5kaWRhdGU+IFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlk
YXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXgsIFdURk1vdmUoKmZpZWxkcykpKTsKIH0KIAorUlRD
SWNlQ2FuZGlkYXRlSW5pdCBSVENJY2VDYW5kaWRhdGU6OnRvSlNPTigpIGNvbnN0Cit7CisgICAg
UlRDSWNlQ2FuZGlkYXRlSW5pdCByZXN1bHQ7CisgICAgcmVzdWx0LmNhbmRpZGF0ZSA9IG1fY2Fu
ZGlkYXRlOworICAgIHJlc3VsdC5zZHBNaWQgPSBtX3NkcE1pZDsKKyAgICByZXN1bHQuc2RwTUxp
bmVJbmRleCA9IG1fc2RwTUxpbmVJbmRleDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUuaAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOCBAQCBw
dWJsaWM6CiAgICAgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHJlbGF0ZWRQb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV9maWVsZHMucmVsYXRlZFBvcnQ7IH0KICAgICBTdHJpbmcgdXNlcm5hbWVGcmFn
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGRzLnVzZXJuYW1lRnJhZ21lbnQ7IH0KIAorICAg
IFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9KU09OKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgUlRD
SWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIHNkcE1p
ZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IHNkcE1MaW5lSW5kZXgsIEZpZWxkcyYmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw2ICs1Miw1IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0PyByZWxh
dGVkUG9ydDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyB1c2VybmFtZUZyYWdt
ZW50OwogCi0gICAgLy8gRklYTUUgMTY5NjYyOiBhZGQgdWZyYWcgdG8gdGhlIGxpc3QKLSAgICBz
ZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwgc2RwTWlkLCBzZHBNTGluZUluZGV4fTsKKyAgICBSVENJ
Y2VDYW5kaWRhdGVJbml0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlSW5pdC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVJbml0LmlkbAko
cmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENJY2VDYW5kaWRhdGVJbml0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQAog
CiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX1JUQywKLSAgICBFbmFibGVkQXRSdW50aW1lPVBlZXJD
b25uZWN0aW9uCisgICAgRW5hYmxlZEF0UnVudGltZT1QZWVyQ29ubmVjdGlvbiwKKyAgICBKU0dl
bmVyYXRlVG9KU09iamVjdAogXSBkaWN0aW9uYXJ5IFJUQ0ljZUNhbmRpZGF0ZUluaXQgewogICAg
IERPTVN0cmluZyBjYW5kaWRhdGUgPSAiIjsKICAgICBET01TdHJpbmc/IHNkcE1pZCA9IG51bGw7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
UlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOwog
Ci0gICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9K
U09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9Q
YXltZW50QWRkcmVzcy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
YXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwJKHJldmlzaW9uIDI2NzAwNykKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEFkZHJlc3MuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZU
YWJsZSwKICAgICBTZWN1cmVDb250ZXh0CiBdIGludGVyZmFjZSBQYXltZW50QWRkcmVzcyB7Ci0g
ICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pT
T04oKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvdW50cnk7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PERPTVN0cmluZz4gYWRkcmVzc0xpbmU7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWdpb247CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2Uu
aWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRy
ZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTZWN1cmVDb250ZXh0LAogXSBpbnRl
cmZhY2UgUGF5bWVudFJlc3BvbnNlIDogRXZlbnRUYXJnZXQgewotICAgIHNlcmlhbGl6ZXIgPSB7
IGF0dHJpYnV0ZSB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHJlcXVlc3RJZDsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTExOTQsNTAgKzExOTQsNjQgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICByZXR1cm4g
MDsKIH0KIAotc3ViIEluaGVyaXRzU2VyaWFsaXphYmxlCitzdWIgSW50ZXJmYWNlSGFzUmVndWxh
clRvSlNPTk9wZXJhdGlvbgogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlKSA9IEBfOwog
Ci0gICAgbXkgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMDsKLSAgICAkb2JqZWN0LT5Gb3JB
bGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1YiB7Ci0gICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2Ug
PSBzaGlmdDsKLSAgICAgICAgJGFueVBhcmVudElzU2VyaWFsaXphYmxlID0gMSBpZiAkcGFyZW50
SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7Ci0gICAgfSwgMCk7Ci0KLSAgICByZXR1cm4gJGFueVBh
cmVudElzU2VyaWFsaXphYmxlOworICAgIGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJm
YWNlLT5vcGVyYXRpb25zfSkgeworICAgICAgICBpZiAoISRvcGVyYXRpb24tPmlzU3RhdGljICYm
ICRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIpIHsKKyAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVU
eXBlCisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1qc29uLXR5cGVzCitz
dWIgSXNKU09OVHlwZQogewogICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkdHlwZSkgPSBA
XzsKIAotICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLXNlcmlhbGl6
YWJsZS10eXBlCi0KKyAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKICAg
ICByZXR1cm4gMSBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuIDEgaWYg
JG9iamVjdC0+SXNOdW1lcmljVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+
SXNFbnVtVHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNTdHJpbmdUeXBl
KCR0eXBlKTsKLSAgICByZXR1cm4gMCBpZiAkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsK
LQotICAgIGlmICgkdHlwZS0+aXNVbmlvbiB8fCAkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0
eXBlKSkgewotICAgICAgICBkaWUgIlNlcmlhbGl6ZXJzIGZvciB1bmlvbiBhbmQgZGljdGlvbmFy
eSB0eXBlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iOwotICAgIH0KKyAgICByZXR1
cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmluZ09yRW51bVR5cGUoJHR5cGUpOwogCiAgICAgaWYgKCRv
YmplY3QtPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgbXkg
JHN1YnR5cGUgPSBAeyR0eXBlLT5zdWJ0eXBlc31bMF07Ci0KLSAgICAgICAgIyBGSVhNRTogd2Vi
a2l0Lm9yZy9iLzE5NDQzOSBbV2ViSURMXSBTdXBwb3J0IHNlcmlhbGl6aW5nIHNlcXVlbmNlcyBh
bmQgRnJvemVuQXJyYXlzIG9mIGludGVyZmFjZXMKLSAgICAgICAgcmV0dXJuIDAgaWYgJG9iamVj
dC0+SXNJbnRlcmZhY2VUeXBlKCRzdWJ0eXBlKTsKLQotICAgICAgICByZXR1cm4gJG9iamVjdC0+
SXNTZXJpYWxpemFibGVUeXBlKCRpbnRlcmZhY2UsICRzdWJ0eXBlKTsKKyAgICAgICAgcmV0dXJu
ICRvYmplY3QtPklzSlNPTlR5cGUoJGludGVyZmFjZSwgJHN1YnR5cGUpOworICAgIH0KKyAgICBp
ZiAoJG9iamVjdC0+SXNSZWNvcmRUeXBlKCR0eXBlKSkgeworICAgICAgICBteSAkdmFsdWVTdWJ0
eXBlID0gQHskdHlwZS0+c3VidHlwZXN9WzBdOworICAgICAgICByZXR1cm4gJG9iamVjdC0+SXNK
U09OVHlwZSgkaW50ZXJmYWNlLCAkdmFsdWVTdWJ0eXBlKTsKICAgICB9CiAKLSAgICByZXR1cm4g
MCBpZiAhJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBlKTsKKyAgICBpZiAoJG9iamVjdC0+
SXNJbnRlcmZhY2VUeXBlKCR0eXBlKSkgeworICAgICAgICAjIFNwZWNpYWwgY2FzZSBFdmVudEhh
bmRsZXIsIHNpbmNlIHRoZXJlIGlzIG5vIHJlYWwgSURMIGZvciBpdC4KKyAgICAgICAgcmV0dXJu
IDAgaWYgJHR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciI7CisKKyAgICAgICAgbXkgJGludGVy
ZmFjZSA9ICRvYmplY3QtPkdldEludGVyZmFjZUZvclR5cGUoJGludGVyZmFjZSwgJHR5cGUpOwor
ICAgICAgICBpZiAoJG9iamVjdC0+SW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbigk
aW50ZXJmYWNlKSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KIAotICAgIG15
ICRpbnRlcmZhY2VGb3JUeXBlID0gJG9iamVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJm
YWNlLCAkdHlwZSk7Ci0gICAgaWYgKCRpbnRlcmZhY2VGb3JUeXBlKSB7Ci0gICAgICAgIHJldHVy
biAxIGlmICRpbnRlcmZhY2VGb3JUeXBlLT5zZXJpYWxpemFibGU7Ci0gICAgICAgIHJldHVybiAk
b2JqZWN0LT5Jbmhlcml0c1NlcmlhbGl6YWJsZSgkaW50ZXJmYWNlRm9yVHlwZSk7CisgICAgICAg
IG15ICRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uID0gMDsKKyAgICAgICAgJG9i
amVjdC0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBzdWIgeworICAgICAgICAgICAgbXkgJHBh
cmVudEludGVyZmFjZSA9IHNoaWZ0OworICAgICAgICAgICAgJGFueVBhcmVudEhhc1JlZ3VsYXJU
b0pTT05PcGVyYXRpb24gPSAxIGlmICRvYmplY3QtPkludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05P
cGVyYXRpb24oJHBhcmVudEludGVyZmFjZSk7CisgICAgICAgIH0sIDApOworICAgICAgICAKKyAg
ICAgICAgaWYgKCRhbnlQYXJlbnRIYXNSZWd1bGFyVG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoJHR5cGUtPmlz
VW5pb24pIHsKKyAgICAgICAgIyBGSVhNRTogVW5pb24gdHlwZXMgc2hvdWxkIGJlIHN1cHBvcnRl
ZCBpZiBhbGwgdGhlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJE
ZWZhdWx0IHRvSlNPTiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgdW5pb24gdHlwZXMu
XG4iOworICAgIH0KKyAgICBpZiAoJG9iamVjdC0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlwZSkpIHsK
KyAgICAgICAgIyBGSVhNRTogRGljdGlvbmFyeSB0eXBlcyBzaG91bGQgYmUgc3VwcG9ydGVkIGlm
IGFsbCBtZW1iZXJzIGRlY2xhcmVkIG9uIHRoZSBkaWN0aW9uYXJ5IGFuZCBhbGwgaXRzIGluaGVy
aXRlZCBkaWN0aW9uYXJpZXMgYXJlIEpTT04gdHlwZXMuCisgICAgICAgIGRpZSAiRGVmYXVsdCB0
b0pTT04gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGRpY3Rpb25hcnkgdHlwZXMuXG4i
OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI0OSwxNyArMTI2Myw2IEBAIHN1YiBoYXND
YWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGUKICAgICByZXR1cm4gJGF0dHJpYnV0ZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfSB8fCAkYXR0cmlidXRlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXR0ZXJ9OwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVB
dHRyaWJ1dGUKLXsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkgPSBA
XzsKLQotICAgIGlmICgkb2JqZWN0LT5Jc1NlcXVlbmNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSAm
JiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdldHRlckV4dGVuZGVkQXR0cmlidXRlKCRhdHRy
aWJ1dGUpKSB7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplcnMgZm9yIHNlcXVlbmNlIHR5cGVzIHdp
dGggQ2FjaGVkQXR0cmlidXRlIG9yIEN1c3RvbUdldHRlciBleHRlbmRlZCBhdHRyaWJ1dGVzIGFy
ZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiI7Ci0gICAgfQotCi0gICAgcmV0dXJuICRvYmpl
Y3QtPklzU2VyaWFsaXphYmxlVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBlKTsKLX0K
LQogc3ViIEdldEludGVyZmFjZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21OYW1lCiB7CiAgICAgIyBG
SVhNRTogSXQncyBiYWQgdG8gaGF2ZSBhIGZ1bmN0aW9uIGxpa2UgdGhpcyB0aGF0IG9wZW5zIGFu
b3RoZXIgSURMIGZpbGUgdG8gYW5zd2VyIGEgcXVlc3Rpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4NDQsNyArMTg0NCw2IEBAIHN1YiBQcm90b3R5cGVP
cGVyYXRpb25Db3VudAogICAgICRjb3VudCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5pdGVyYWJs
ZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAgICAgJGNvdW50ICs9IHNj
YWxhciBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPm1h
cExpa2U7CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJh
dGlvbnN9IGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgJGNvdW50ICs9IHNjYWxhciBAeyRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlOwogCiAgICAgcmV0dXJuICRjb3VudDsKIH0KQEAgLTI3NTcsMTEgKzI3NTYsNiBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldExlZ2FjeUZhY3RvcnlGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
TGVnYWN5RmFjdG9yeUZ1bmN0aW9ufTsKICAgICB9CiAKLSAgICAjIFNlcmlhbGl6ZXIgZnVuY3Rp
b24uCi0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgewotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpK
U0dsb2JhbE9iamVjdCYsICR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmKTtcbiIpOwotICAgIH0KLSAgICAKICAgICBteSAkbnVtQ3VzdG9tT3BlcmF0aW9ucyA9IDA7
CiAgICAgbXkgJG51bUN1c3RvbUF0dHJpYnV0ZXMgPSAwOwogCkBAIC0zMTYzLDcgKzMxNTcsNiBA
QCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlCiAgICAgcHVzaChAb3BlcmF0aW9ucywg
QHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJs
ZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZh
Y2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1
c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRp
bnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAg
ICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAgICAgICBuZXh0IGlm
ICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5k
IG5vdCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7
CiAgICAgICAgIG5leHQgaWYgKCRvcGVyYXRpb24tPmlzU3RhdGljKTsKQEAgLTM5NzEsNyArMzk2
NCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAb3BlcmF0aW9ucywg
QHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJs
ZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZh
Y2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1
c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRp
bnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAK
ICAgICBteSBAYXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+YXR0cmlidXRlc307CiAgICAgcHVz
aChAYXR0cmlidXRlcywgQHskaW50ZXJmYWNlLT5tYXBMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGlu
dGVyZmFjZS0+bWFwTGlrZTsKQEAgLTQ2NTAsNyArNDY0Miw2IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgfQogICAgIAogICAgIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uKCRp
bnRlcmZhY2UpIGlmICRpbnRlcmZhY2UtPml0ZXJhYmxlOwotICAgIEdlbmVyYXRlU2VyaWFsaXpl
ckRlZmluaXRpb24oJGludGVyZmFjZSwgJGNsYXNzTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7CiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEuaCIpOwpAQCAtNTQwMCw3
ICs1MzkxLDEwIEBAIHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRpb24KIAogICAgIHJldHVy
biBpZiBJc0pTQnVpbHRpbigkaW50ZXJmYWNlLCAkb3BlcmF0aW9uKTsKICAgICByZXR1cm4gaWYg
JG9wZXJhdGlvbi0+aXNJdGVyYWJsZTsKLSAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNTZXJp
YWxpemVyOworICAgIAorICAgIGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntE
ZWZhdWx0fSkgeworICAgICAgICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5p
dGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwor
ICAgIH0KIAogICAgIG15ICRpc0N1c3RvbSA9IEhhc0N1c3RvbU1ldGhvZCgkb3BlcmF0aW9uKTsK
ICAgICBteSAkaXNPdmVybG9hZGVkID0gJG9wZXJhdGlvbi0+e292ZXJsb2Fkc30gJiYgQHskb3Bl
cmF0aW9uLT57b3ZlcmxvYWRzfX0gPiAxOwpAQCAtNTUyMCwxMDMgKzU1MTQsMTAzIEBAIHN1YiBH
ZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRlbmRB
cHBsZUNvcHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7CiB9CiAKLXN1YiBHZW5lcmF0ZVNl
cmlhbGl6ZXJEZWZpbml0aW9uCitzdWIgR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlv
bgogewotICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOwotCi0gICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOworICAgIG15ICgkb3V0cHV0QXJy
YXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAk
cGFyZW50U2VyaWFsaXplckludGVyZmFjZSA9IDA7Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFy
ZW50cygkaW50ZXJmYWNlLCBzdWIgewotICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9
IHNoaWZ0OwotICAgICAgICAgICAgaWYgKCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAm
JiAhJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgICAgICAkcGFyZW50
U2VyaWFsaXplckludGVyZmFjZSA9ICRwYXJlbnRJbnRlcmZhY2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0sIDApOwotICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcmZh
Y2Ugd2l0aCBcInNlcmlhbGl6ZXJcIiBmb3IgXCJpbmhlcml0XCIgc2VyaWFsaXplciBpbiAkaW50
ZXJmYWNlTmFtZVxuIiBpZiAhJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2U7CisgICAgaWYgKCRv
cGVyYXRpb24tPm5hbWUgZXEgInRvSlNPTiIgJiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAi
b2JqZWN0IikgeworICAgICAgICByZXR1cm4gR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9u
RGVmaW5pdGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRp
b24pOwogICAgIH0KIAotICAgIG15IEBzZXJpYWxpemVkQXR0cmlidXRlcyA9ICgpOworICAgIGRp
ZSAiW0RlZmF1bHRdIGlzIG5vdCBzdXBwb3J0IGZvciBmb3IgdGhpcyBvcGVyYXRpb24gKCIgLiAk
b3BlcmF0aW9uLT5uYW1lIC4gIikuIEl0IGlzIG9ubHkgY3VycmVudGx5IGRlZmluZWQgZm9yICdv
YmplY3QgdG9KU09OKCk7Jy4iCit9CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1lIChA
eyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgbXkgJGZv
dW5kQXR0cmlidXRlID0gMDsKLSAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRl
cmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEg
JGF0dHJpYnV0ZS0+bmFtZSkgewotICAgICAgICAgICAgICAgICRmb3VuZEF0dHJpYnV0ZSA9IDE7
Ci0gICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NlcmlhbGl6YWJsZUF0dHJp
YnV0ZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBzZXJpYWxpemVkQXR0cmlidXRlcywgJGF0dHJpYnV0ZSk7ICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGRpZSAiRXhwbGljaXQgXCJzZXJpYWxpemVyXCIgYXR0cmli
dXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpcyBub3Qgc2VyaWFsaXphYmxlXG4iIGlmICEkaW50ZXJm
YWNlLT5zZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICBsYXN0Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgXCJz
ZXJpYWxpemVyXCIgYXR0cmlidXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBpbiAkaW50ZXJmYWNlTmFt
ZVxuIiBpZiAhJGZvdW5kQXR0cmlidXRlOwotICAgIH0KK3N1YiBHZW5lcmF0ZURlZmF1bHRUb0pT
T05PcGVyYXRpb25EZWZpbml0aW9uCit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFj
ZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbikgPSBAXzsKIAotICAgIG15ICRzZXJpYWxpemVyRnVu
Y3Rpb25OYW1lID0gInRvSlNPTiI7Ci0gICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5h
bWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVG
dW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9u
TmFtZSk7CisgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kZWZhdWx0
LXRvanNvbgogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RD
b25zdHJ1Y3Rvci5oPiIpOworICAgIG15IEBpbmhlcml0ZW5jZVN0YWNrID0gKCk7CisgICAgcHVz
aChAaW5oZXJpdGVuY2VTdGFjaywgJGludGVyZmFjZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkZv
ckFsbFBhcmVudHMoJGludGVyZmFjZSwgc3ViIHsKKyAgICAgICAgbXkgJHBhcmVudEludGVyZmFj
ZSA9IHNoaWZ0OworICAgICAgICBwdXNoKEBpbmhlcml0ZW5jZVN0YWNrLCAkcGFyZW50SW50ZXJm
YWNlKTsKKyAgICB9LCAwKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU09iamVj
dCogSlMke2ludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTtcbiIpOworICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUo
JGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CisKKyAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUJvZHko
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NO
YW1lfSogY2FzdGVkVGhpcylcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwog
Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAg
ICBteSAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZU5hbWUgPSAkcGFyZW50U2VyaWFsaXplcklu
dGVyZmFjZS0+dHlwZS0+bmFtZTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byogcmVzdWx0ID0gSlMke3BhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXpl
KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJcbiIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENv
cmUvT2JqZWN0Q29uc3RydWN0b3IuaD4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpO1xuIik7CiAKLSAg
ICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJpYWxpemVkQXR0cmlidXRlcykgewotICAgICAg
ICAjIEZJWE1FOiBBdHRyaWJ1dGVzIHRoYXQgdGhyb3cgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHBv
cnRlZCB3aXRoIHNlcmlhbGl6ZXJzIHlldC4KKyAgICAgd2hpbGUgKEBpbmhlcml0ZW5jZVN0YWNr
KSB7CisgICAgICAgIG15ICRjdXJyZW50SW50ZXJmYWNlID0gcG9wKEBpbmhlcml0ZW5jZVN0YWNr
KTsKIAotICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAgIG15ICRn
ZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFz
c05hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
ICR7bmFtZX1WYWx1ZSA9ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqZWN0KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKLQotICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzSW50ZXJmYWNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSkgewotICAgICAgICAg
ICAgbXkgJGF0dHJpYnV0ZUludGVyZmFjZU5hbWUgPSAkYXR0cmlidXRlLT50eXBlLT5uYW1lOwot
ICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPmlzTnVsbGFibGUpIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc051bGwo
KSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGF1
dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06
OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRl
cmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7
bmFtZX1cIiksICR7bmFtZX1TZXJpYWxpemVkVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgfSBlbHNlXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9
OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50
ZXJmYWNlTmFtZX0qPigke25hbWV9VmFsdWUpLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwi
KSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1ZSk7XG4iKTsKKyAgICAgICAgbXkgJGhhc0RlZmF1bHRU
b0pTT05PcGVyYXRpb24gPSAwOworICAgICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGN1
cnJlbnRJbnRlcmZhY2UtPm9wZXJhdGlvbnN9KSB7CisgICAgICAgICAgICBpZiAoJG9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RGVmYXVsdH0gJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAi
dG9KU09OIiAmJiAkb3BlcmF0aW9uLT50eXBlLT5uYW1lIGVxICJvYmplY3QiKSB7CisgICAgICAg
ICAgICAgICAgJGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24gPSAxOworICAgICAgICAgICAgICAg
IGxhc3Q7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0K
KyAgICAgICAgaWYgKCRoYXNEZWZhdWx0VG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAgICBm
b3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGN1cnJlbnRJbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7
CisgICAgICAgICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAg
ICAgICAgICBuZXh0IGlmICEkY29kZUdlbmVyYXRvci0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAk
YXR0cmlidXRlLT50eXBlKTsKIAotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0KCJbQ2FjaGVkQXR0cmlidXRlXSBpcyBub3QgY3VycmVudGx5
IHN1cHBvcnQgb24gaW50ZXJmYWNlcyB3aXRoIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7Iikg
aWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfTsKKwor
ICAgICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKKyAgICAgICAgICAgICAgICBpZiAoJGNvbmRpdGlvbmFs
KSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25k
aXRpb25hbCk7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiNpZiAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuIik7OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG15ICRhdHRyaWJ1dGVOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAgICAg
ICAgICBteSAkdG9KU0V4cHJlc3Npb24gPSAiIjsKKyAgICAgICAgICAgICAgICBpZiAoSGFzQ3Vz
dG9tR2V0dGVyKCRhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZU5hbWUpOwor
ICAgICAgICAgICAgICAgICAgICAkdG9KU0V4cHJlc3Npb24gPSAiY2FzdGVkVGhpcy0+JHtpbXBs
R2V0dGVyRnVuY3Rpb25OYW1lfSgqbGV4aWNhbEdsb2JhbE9iamVjdCkiOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG15ICgkYmFzZUZ1bmN0aW9uTmFtZSwg
QGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNs
dWRlcywgJGN1cnJlbnRJbnRlcmZhY2UtPnR5cGUtPm5hbWUsICRhdHRyaWJ1dGUpOworICAgICAg
ICAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1l
bnRhdGlvbkNhbGxOYW1lKCRjdXJyZW50SW50ZXJmYWNlLCAkYXR0cmlidXRlLCAkYmFzZUZ1bmN0
aW9uTmFtZSwgImltcGwiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgICAgICAgICAkdG9K
U0V4cHJlc3Npb24gPSBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZSwgJGN1cnJlbnRJbnRlcmZh
Y2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICIq
bGV4aWNhbEdsb2JhbE9iamVjdCIsICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBteSAkbmVlZHNSdW50aW1lQ2hlY2sg
PSBOZWVkc1J1bnRpbWVDaGVjaygkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKCRuZWVkc1J1bnRpbWVDaGVjaykgeworICAgICAgICAgICAgICAgICAg
ICBteSAkcnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5h
YmxlQ29uZGl0aW9uYWxTdHJpbmcoJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKCR7cnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1
dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1l
fVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIjZW5kaWZcblxuIikgOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAifVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKIAotICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWV9Qm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiwgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0KVxuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTJHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlMke2ludGVyZmFjZU5hbWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVG
dW5jdGlvbk5hbWV9Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtz
ZXJpYWxpemVyRnVuY3Rpb25OYW1lfVwiKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIG15ICRpbnRlcmZhY2VO
YW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKUyR7aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7ZnVuY3Rpb25O
YW1lfUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBcInRvSlNPTlwiKTtc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIlxuIik7CiB9CiAKIHN1YiBHZW5lcmF0ZUdldENhbGxEYXRhCkBAIC03NTY1LDcgKzc1
NTksNiBAQCBzdWIgR2V0UnVudGltZUVuYWJsZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgcHVzaChA
b3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5
VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25z
LCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBM
aWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0
aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHsk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJp
YWxpemFibGU7CiAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAg
ICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRl
bnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJ
ZGVudGlmaWVyfSk7CiAgICAgICAgIG5leHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9
ICYmICRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24g
MjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsOSBAQAogICAgICAgICAgICAgInZh
bHVlcyI6IFsiIiwgIlJlYWRET00iLCAiR2V0dGVyIl0sCiAgICAgICAgICAgICAic3VwcG9ydHND
b25qdW5jdGlvbiI6IHRydWUKICAgICAgICAgfSwKKyAgICAgICAgIkRlZmF1bHQiOiB7CisgICAg
ICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJvcGVyYXRpb24iXQorICAgICAgICB9LAogICAg
ICAgICAiRGVmYXVsdERlZmluZU93blByb3BlcnR5IjogewogICAgICAgICAgICAgImNvbnRleHRz
QWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCShyZXZpc2lvbiAyNjcwMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5
KQpAQCAtNzIsNyArNzIsNiBAQCBzdHJ1Y3QoIElETEludGVyZmFjZSA9PiB7CiAgICAgYXN5bmNJ
dGVyYWJsZSA9PiAnJCcsICMgVXNlZCBmb3IgYXN5Y24gaXRlcmFibGUgaW50ZXJmYWNlcywgb2Yg
dHlwZSAnSURMQXN5bmNJdGVyYWJsZScKICAgICBtYXBMaWtlID0+ICckJywgIyBVc2VkIGZvciBt
YXBMaWtlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETE1hcExpa2UnCiAgICAgc2V0TGlrZSA9PiAn
JCcsICMgVXNlZCBmb3Igc2V0TGlrZSBpbnRlcmZhY2VzLCBvZiB0eXBlICdJRExTZXRMaWtlJwot
ICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcsICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFj
ZXMsIG9mIHR5cGUgJ0lETFNlcmlhbGl6YWJsZScKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4g
JyQnLAogfSk7CiAKQEAgLTk0LDcgKzkzLDYgQEAgc3RydWN0KCBJRExPcGVyYXRpb24gPT4gewog
ICAgIGlzQ29uc3RydWN0b3IgPT4gJyQnLAogICAgIGlzU3RhdGljID0+ICckJywKICAgICBpc0l0
ZXJhYmxlID0+ICckJywKLSAgICBpc1NlcmlhbGl6ZXIgPT4gJyQnLAogICAgIGlzU3RyaW5naWZp
ZXIgPT4gJyQnLAogICAgIGlzTWFwTGlrZSA9PiAnJCcsCiAgICAgaXNTZXRMaWtlID0+ICckJywK
QEAgLTE1NCwxNSArMTUyLDYgQEAgc3RydWN0KCBJRExTZXRMaWtlID0+IHsKICAgICBleHRlbmRl
ZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKLSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jaWRsLXNlcmlhbGl6ZXJzCi1zdHJ1Y3QoIElETFNlcmlhbGl6YWJsZSA9PiB7Ci0gICAg
YXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQotICAg
IGhhc0F0dHJpYnV0ZSA9PiAnJCcsICMgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH0KLSAgICBo
YXNJbmhlcml0ID0+ICckJywgIyBzZXJpYWxpemVyID0geyBpbmhlcml0IH0KLSAgICBoYXNHZXR0
ZXIgPT4gJyQnLCAjIHNlcmlhbGl6ZXIgPSB7IGdldHRlciB9Ci0gICAgb3BlcmF0aW9ucyA9PiAn
QCcsICMgdG9KU09OIG9wZXJhdGlvbgotfSk7Ci0KICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlv
L3dlYmlkbC8jaWRsLWNvbnN0YW50cwogc3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFt
ZSA9PiAnJCcsCkBAIC02MDAsNyArNTg5LDYgQEAgc3ViIGNsb25lT3BlcmF0aW9uCiAgICAgJGNs
b25lZE9wZXJhdGlvbi0+aXNDb25zdHJ1Y3Rvcigkb3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKTsK
ICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1N0YXRpYygkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CiAg
ICAgJGNsb25lZE9wZXJhdGlvbi0+aXNJdGVyYWJsZSgkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlKTsK
LSAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1NlcmlhbGl6ZXIoJG9wZXJhdGlvbi0+aXNTZXJpYWxp
emVyKTsKICAgICAkY2xvbmVkT3BlcmF0aW9uLT5pc1N0cmluZ2lmaWVyKCRvcGVyYXRpb24tPmlz
U3RyaW5naWZpZXIpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzTWFwTGlrZSgkb3BlcmF0aW9u
LT5pc01hcExpa2UpOwogICAgICRjbG9uZWRPcGVyYXRpb24tPmlzU2V0TGlrZSgkb3BlcmF0aW9u
LT5pc1NldExpa2UpOwpAQCAtNjUyLDEwICs2NDAsMTAgQEAgbXkgJG5leHRTcGVjaWFsc18xID0g
J14oZGVsZXRlcnxnZXR0ZXJ8cwogbXkgJG5leHREZWZpbml0aW9uc18xID0gJ14oY2FsbGJhY2t8
ZGljdGlvbmFyeXxlbnVtfGludGVyZmFjZXxuYW1lc3BhY2V8cGFydGlhbHx0eXBlZGVmKSQnOwog
bXkgJG5leHREaWN0aW9uYXJ5TWVtYmVyXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xV
U1ZTdHJpbmd8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8
cmVxdWlyZWR8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5z
aWduZWQpJCc7CiBteSAkbmV4dENhbGxiYWNrSW50ZXJmYWNlTWVtYmVyc18xID0gJ14oXCh8Y29u
c3R8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8ZG91Ymxl
fGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8
dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAn
XihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFu
fGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVy
aXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8
c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVu
c2lnbmVkKSQnOworbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5n
fERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29u
c3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8
b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxz
eW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0TWl4aW5N
ZW1iZXJzXzEgPSAnXihcKHxhdHRyaWJ1dGV8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5n
fGFueXxib29sZWFufGJ5dGV8Y29uc3R8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJl
YWRvbmx5fHNlcXVlbmNlfHNob3J0fHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHROYW1lc3BhY2VNZW1iZXJzXzEgPSAnXihcKHxC
eXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8Zmxv
YXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVm
aW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7Ci1teSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VN
ZW1iZXJfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmli
dXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJp
dHxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxz
aG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5z
aWduZWQpJCc7CitteSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofEJ5dGVT
dHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25z
dHxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsb25nfG9iamVjdHxvY3RldHxy
ZWFkb25seXxzZXF1ZW5jZXxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1
bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRTaW5nbGVUeXBlXzEg
PSAnXihCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8Ym9vbGVhbnxieXRlfGRvdWJsZXxm
bG9hdHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHxzeW1ib2x8dW5kZWZpbmVkfHVu
cmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0QXJndW1lbnROYW1lXzEgPSAnXihhc3lu
Y3xhdHRyaWJ1dGV8Y2FsbGJhY2t8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5
fGVudW18Z2V0dGVyfGluY2x1ZGVzfGluaGVyaXR8aW50ZXJmYWNlfGl0ZXJhYmxlfG1hcGxpa2V8
bWl4aW58bmFtZXNwYWNlfHBhcnRpYWx8cmVhZG9ubHl8cmVxdWlyZWR8c2V0bGlrZXxzZXR0ZXJ8
c3RhdGljfHN0cmluZ2lmaWVyfHR5cGVkZWZ8dW5yZXN0cmljdGVkKSQnOwogbXkgJG5leHRDb25z
dFZhbHVlXzEgPSAnXihmYWxzZXx0cnVlKSQnOwpAQCAtMTMyNSwxMiArMTMxMyw2IEBAIHN1YiBw
YXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImlu
aGVyaXQiKSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgIH0KLQotICAgICMgRklYTUU6IFJlbW92ZS4gVGhp
cyBpcyBubyBsb25nZXIgcGFydCBvZiBXZWJJREwuIFJlcGxhY2Ugd2l0aCBbU2VyaWFsaXphYmxl
XS4KLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgIHJl
dHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemVyKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAg
IH0KLQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+
dmFsdWUoKSA9fiAvJG5leHRPcGVyYXRpb25fMS8pIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5w
YXJzZU9wZXJhdGlvbigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICB9CkBAIC0xNzk5LDEx
NCArMTc4MSw2IEBAIHN1YiBwYXJzZUNvbnN0cnVjdG9yCiAgICAgJHNlbGYtPmFzc2VydFVuZXhw
ZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXJp
YWxpemVyCi17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0ID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAg
ICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5h
c3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAic2VyaWFsaXplciIsIF9fTElORV9f
KTsKLSAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgICAgIG15ICRu
ZXdEYXRhTm9kZTsKLSAgICAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIG5lICI7IikgewotICAgICAg
ICAgICAgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7Ci0gICAgICAgICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4o
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRuZXdEYXRhTm9kZSA9IElETFNlcmlh
bGl6YWJsZS0+bmV3KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBteSAkdG9KU09OT3BlcmF0aW9u
ID0gSURMT3BlcmF0aW9uLT5uZXcoKTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+bmFtZSgi
dG9KU09OIik7Ci0KLSAgICAgICAgJHNlbGYtPmFzc2VydEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlk
Rm9yQ29udGV4dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0LCAib3BlcmF0aW9uIik7Ci0gICAgICAg
ICR0b0pTT05PcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVM
aXN0KTsKLSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+aXNTZXJpYWxpemVyKDEpOwotICAgICAg
ICBwdXNoKEB7JG5ld0RhdGFOb2RlLT5vcGVyYXRpb25zfSwgJHRvSlNPTk9wZXJhdGlvbik7Ci0K
LSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7Iiwg
X19MSU5FX18pOwotICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwotICAgIH0KLSAgICAkc2Vs
Zi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7Ci19Ci0K
LXN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0Ci17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBt
eSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxm
LT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7Ci0gICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9fTElORV9f
KTsKLQotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsK
LQotICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5l
eHQtPnZhbHVlKCkgZXEgIigiKSB7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRp
b25SZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIH0KLX0KLQotc3ViIHBhcnNlU2Vy
aWFsaXphdGlvblBhdHRlcm4KLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotCi0gICAgbXkgJG5l
eHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7Iikg
ewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInsi
LCBfX0xJTkVfXyk7Ci0gICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+
bmV3KCk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCRuZXdE
YXRhTm9kZSk7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tl
bigpLCAifSIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAgICB9
Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJbIikgewotICAgICAgICBkaWUgIlNlcmlhbGl6
YXRpb24gb2YgbGlzdHMgcGF0dGVybiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwotICAg
IH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAg
bXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2Vu
KCk7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9r
ZW4pOwotICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOwotCi0gICAg
ICAgIG15ICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+bmV3KCk7Ci0gICAgICAgICRu
ZXdEYXRhTm9kZS0+YXR0cmlidXRlcyhcQGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIHJldHVybiAk
bmV3RGF0YU5vZGU7Ci0gICAgfQotICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5l
eHQtPnZhbHVlKCksIF9fTElORV9fKTsKLX0KLQotc3ViIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJp
YnV0ZXMKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRzZXJpYWxpemFibGUgPSBz
aGlmdDsKLQotICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7Ci0gICAgbXkgQGlkZW50aWZpZXJzID0g
JHNlbGYtPnBhcnNlSWRlbnRpZmllckxpc3QoKTsKLQotICAgIGZvciBteSAkaWRlbnRpZmllciAo
QGlkZW50aWZpZXJzKSB7Ci0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiZ2V0dGVyIikgewot
ICAgICAgICAgICAgJHNlcmlhbGl6YWJsZS0+aGFzR2V0dGVyKDEpOwotICAgICAgICAgICAgZGll
ICJTZXJpYWxpemVyIGdldHRlciBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImluaGVyaXQiKSB7Ci0g
ICAgICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNJbmhlcml0KDEpOwotICAgICAgICAgICAgbmV4
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkaWRlbnRpZmllciBlcSAiYXR0cmlidXRlIikg
ewotICAgICAgICAgICAgJHNlcmlhbGl6YWJsZS0+aGFzQXR0cmlidXRlKDEpOwotICAgICAgICAg
ICAgIyBBdHRyaWJ1dGVzIHdpbGwgYmUgZmlsbGVkIGluIHZpYSBhcHBseU1lbWJlckxpc3QoKQot
ICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1c2goQGF0dHJpYnV0ZXMs
ICRpZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICAkc2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzKFxA
YXR0cmlidXRlcyk7Ci19Ci0KIHN1YiBwYXJzZUlkZW50aWZpZXJMaXN0CiB7CiAgICAgbXkgJHNl
bGYgPSBzaGlmdDsKQEAgLTMzOTIsMjMgKzMyNjYsNiBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXh0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChy
ZWYoJGl0ZW0pIGVxICJJRExTZXJpYWxpemFibGUiKSB7Ci0gICAgICAgICAgICAkaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUoJGl0ZW0pOwotICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgbXkgJG51
bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJp
YnV0ZXN9OwotICAgICAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1
dGUpIHsKLSAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5h
dHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxp
emFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNpZiAoJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKLSAgICAgICAg
ICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewot
ICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0
ZXN9LCAkYXR0cmlidXRlLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdU
ZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCShy
ZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
QmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2
ICsxMCwxMCBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRy
aWJ1dGUgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IgVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOwogICAgIGF0dHJpYnV0ZSBUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc0NvbnN0cnVjdG9yIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzOwogICAgIGF0dHJp
YnV0ZSBUZXN0RE9NSklUQ29uc3RydWN0b3IgVGVzdERPTUpJVDsKKyAgICBhdHRyaWJ1dGUgVGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciBUZXN0RGVmYXVsdFRvSlNPTjsKKyAgICBhdHRyaWJ1
dGUgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOworICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvciBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAg
YXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7CiAgICAgYXR0cmlidXRlIFRlc3REb21haW5TZWN1cml0
eUNvbnN0cnVjdG9yIFRlc3REb21haW5TZWN1cml0eTsKICAgICBhdHRyaWJ1dGUgVGVzdEVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvciBUZXN0RW5hYmxlZEJ5U2V0dGluZzsKICAgICBbRW5hYmxl
ZEZvckNvbnRleHQsIFNlY3VyZUNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvciBUZXN0RW5hYmxlZEZvckNvbnRleHQ7CkBAIC01MywxMCArNTcsNiBAQCBw
YXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUgVGVzdFJl
YWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yIFRlc3RSZWFkT25seU1hcExpa2U7CiAgICAgYXR0cmli
dXRlIFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvciBUZXN0UmVhZE9ubHlTZXRMaWtlOwog
ICAgIGF0dHJpYnV0ZSBUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IgVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdDsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Db25z
dHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbjsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlOwotICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25z
dHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgYXR0cmlidXRlIFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw7CiAgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjF8Q29uZGl0aW9uMl0gYXR0cmlidXRl
IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOwogICAgIGF0dHJpYnV0ZSBUZXN0U2V0TGlrZUNvbnN0
cnVjdG9yIFRlc3RTZXRMaWtlOwogICAgIGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJDb25zdHJ1
Y3RvciBUZXN0U3RyaW5naWZpZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVz
LmRlcAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDIxIEBAIFRlc3RNaXhpbkludGVyZmFjZS5pZGw6CiBKU1Rlc3RET01KSVQuaDogCiBE
T01UZXN0RE9NSklULmg6IAogV2ViRE9NVGVzdERPTUpJVC5oOiAKK0pTVGVzdERlZmF1bHRUb0pT
T04uaDogCitET01UZXN0RGVmYXVsdFRvSlNPTi5oOiAKK1dlYkRPTVRlc3REZWZhdWx0VG9KU09O
Lmg6IAorSlNUZXN0RGVmYXVsdFRvSlNPTkVudW0uaDogCitET01UZXN0RGVmYXVsdFRvSlNPTkVu
dW0uaDogCitXZWJET01UZXN0RGVmYXVsdFRvSlNPTkVudW0uaDogCitKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZS5oOiAKK1dlYkRPTVRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZS5oOiAKK0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmg6IAorRE9NVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0Lmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmg6IAorSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsLmg6IAorV2ViRE9NVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaDogCiBKU1Rl
c3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIERPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIFdl
YkRPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKQEAgLTIxNSwxOCArMjMwLDYgQEAgV2ViRE9N
VGVzdFJlYWRPbmx5U2V0TGlrZS5oOiAKIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oOiAK
IERPTVRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaDogCiBXZWJET01UZXN0UmVwb3J0RXh0cmFN
ZW1vcnlDb3N0Lmg6IAotSlNUZXN0U2VyaWFsaXphdGlvbi5oOiAKLURPTVRlc3RTZXJpYWxpemF0
aW9uLmg6IAotV2ViRE9NVGVzdFNlcmlhbGl6YXRpb24uaDogCi1KU1Rlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKLURPTVRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZS5oOiAKLVdlYkRPTVRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5o
OiAKLUpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6IAotRE9NVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Lmg6IAotV2ViRE9NVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6IAotSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiAKLURPTVRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmg6IAotV2ViRE9NVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaDogCiBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDogCiBET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmg6IAogV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oOiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
RGVmYXVsdFRvSlNPTi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit0eXBlZGVmIGRvdWJs
ZSBUZXN0VGltZVN0YW1wOworCitpbnRlcmZhY2UgVGVzdERlZmF1bHRUb0pTT04geworICAgIFtF
bmFibGVkQXRSdW50aW1lPVRlc3RSdW50aW1lRW5hYmxlZF1yZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyBsb25nQXR0cmlidXRlOworICAgIFtFbmFibGVkQnlTZXR0aW5nPVRlc3RTZXR0aW5nXSByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGU7
CisgICAgW0NvbmRpdGlvbmFsPVRFU1RfQ09ORElUSU9OQUxdIHJlYWRvbmx5IGF0dHJpYnV0ZSBU
ZXN0RGVmYXVsdFRvSlNPTkVudW0gZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGU7CisgICAg
YXR0cmlidXRlIEV2ZW50SGFuZGxlciBldmVudEhhbmRsZXJBdHRyaWJ1dGU7CisKKyAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nICAgICAgICAgICAgIGZpcnN0U3RyaW5nQXR0cmlidXRlOworICAgIGF0
dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgc2Vjb25kTG9uZ0F0dHJpYnV0ZTsKKyAgICBh
dHRyaWJ1dGUgVGVzdEV4Y2VwdGlvbiAgICAgICAgIHRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZTsK
KyAgICBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSAgIGZvdXJ0aFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgW0NsYW1wXSBsb25nICAgICAgICAgIGZpZnRo
TG9uZ0NsYW1wZWRBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIFRlc3RUaW1lU3RhbXAgICAgICAg
ICBzaXh0aFR5cGVkZWZBdHRyaWJ1dGU7CisKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWwgc2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZTsKKyAgICBh
dHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIGVpZ2h0aEluZGly
ZWN0bHlBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsPyBuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlOworCisgICAgYXR0
cmlidXRlIEZyb3plbkFycmF5PGJvb2xlYW4+IHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGU7Cisg
ICAgYXR0cmlidXRlIHNlcXVlbmNlPERPTVN0cmluZz4gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZTsKKyAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+
IHR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgcmVjb3Jk
PERPTVN0cmluZywgdW5zaWduZWQgc2hvcnQ+IHRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGU7CisK
KyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkVudW0uaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRv
SlNPTkVudW0uaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkVudW0uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitlbnVtIFRlc3REZWZhdWx0VG9KU09ORW51bSB7Cisg
ICAgIkVudW1WYWx1ZTEiLAorICAgICJFbnVtVmFsdWUyIgorfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaWRsCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworaW50ZXJm
YWNlIFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA6IFRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdCB7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5pZGwJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitpbnRlcmZh
Y2UgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IDogVGVzdERlZmF1bHRUb0pTT04geworICAgIGF0
dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgaW5oZXJpdExvbmdBdHRyaWJ1dGU7CisKKyAg
ICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworaW50ZXJmYWNlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsIDogVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IHsKKyAgICBhdHRyaWJ1dGUgbG9uZyAg
ICAgICAgICAgICAgICAgIGZpbmFsTG9uZ0F0dHJpYnV0ZUZvbzsKKyAgICBhdHRyaWJ1dGUgbG9u
ZyAgICAgICAgICAgICAgICAgIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhcjsKKworICAgIFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw1ICszNSw1IEBACiAgICAgW1NlY3VyZUNvbnRleHRdIGJvb2xlYW4gZ2V0U2Vj
cmV0Qm9vbGVhbigpOwogICAgIFtDb25kaXRpb25hbD1URVNUX0ZFQVRVUkUsIFNlY3VyZUNvbnRl
eHQsIEVuYWJsZWRBdFJ1bnRpbWU9VGVzdEZlYXR1cmVdIGJvb2xlYW4gdGVzdEZlYXR1cmVHZXRT
ZWNyZXRCb29sZWFuKCk7CiAKLSAgICBzZXJpYWxpemVyOworICAgIFtEZWZhdWx0XSBvYmplY3Qg
dG9KU09OKCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MzUs
OCArNDM1LDYgQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdwogCiAg
ICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0cmluZyBzdHJpbmdpZmllckF0dHJpYnV0ZTsK
IAotICAgIHNlcmlhbGl6ZXIgPSB7Y3JlYXRlLCByZWFkT25seVN0cmluZ0F0dHIsIGVudW1BdHRy
LCBsb25nQXR0cn07Ci0KICAgICB1bmRlZmluZWQgYnVmZmVyU291cmNlUGFyYW1ldGVyKEJ1ZmZl
clNvdXJjZSBkYXRhKTsKIAogICAgIFtMZWdhY3lDYWxsZXJdIHVuZGVmaW5lZCBsZWdhY3lDYWxs
ZXJOYW1lZChsb25nIHBhcmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkocmV2aXNpb24g
MjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJp
YWxpemF0aW9uLmlkbAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotdHlwZWRlZiBkb3VibGUgVGVzdFRp
bWVTdGFtcDsKLQotaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uIHsKLSAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICAgICAgIGZpcnN0U3RyaW5nQXR0cmlidXRlOwotICAgIGF0dHJpYnV0
ZSBsb25nICAgICAgICAgICAgICAgICAgc2Vjb25kTG9uZ0F0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1
dGUgVGVzdEV4Y2VwdGlvbiAgICAgICAgIHRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGU7Ci0g
ICAgYXR0cmlidXRlIHVucmVzdHJpY3RlZCBkb3VibGUgICBmb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaWZ0aExv
bmdBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIFRlc3RUaW1lU3RhbXAgICAgICAgICBzaXh0aFR5
cGVkZWZBdHRyaWJ1dGU7Ci0KLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwgc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlOwotICAgIGF0dHJpYnV0
ZSBUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UgZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw/IG5p
bnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZTsKLQotICAgIGF0dHJpYnV0
ZSBGcm96ZW5BcnJheTxib29sZWFuPiB0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlOwotICAgIGF0
dHJpYnV0ZSBzZXF1ZW5jZTxET01TdHJpbmc+IGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGU7Ci0g
ICAgYXR0cmlidXRlIHNlcXVlbmNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB0d2Vs
ZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGU7Ci0KLSAgICBzZXJpYWxpemVyID0geyBhdHRy
aWJ1dGUgfTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZS5pZGwJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLWludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UgOiBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgewotfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmlkbAkobm9uZXhpc3RlbnQpCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCA6IFRlc3RTZXJpYWxpemF0aW9uIHsKLSAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAg
ICAgICAgICAgIGluaGVyaXRMb25nQXR0cmlidXRlOwotCi0gICAgc2VyaWFsaXplciA9IHsgaW5o
ZXJpdCwgYXR0cmlidXRlIH07Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCShub25l
eGlzdGVudCkKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi1pbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwg
OiBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgewotICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAg
ICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlRm9vOwotICAgIGF0dHJpYnV0ZSBsb25nICAgICAg
ICAgICAgICAgICAgZmluYWxMb25nQXR0cmlidXRlQmFyOwotCi0gICAgc2VyaWFsaXplciA9IHsg
aW5oZXJpdCwgZmluYWxMb25nQXR0cmlidXRlQmFyIH07Ci19OwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4ODUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT04uaCIKKworI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCb29sZWFu
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0TnVsbGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0UmVjb3JkLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVu
Y2VzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
KyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwuaCIKKyNpbmNsdWRlICJKU1Rlc3RFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNBcnJheS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShURVNUX0NP
TkRJVElPTkFMKQorI2luY2x1ZGUgIkpTRE9NQ29udmVydEVudW1lcmF0aW9uLmgiCisjaW5jbHVk
ZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkVudW0uaCIKKyNlbmRpZgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBB
dHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlT
ZXR0aW5nc0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxB
dHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKKyNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1
bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TaXh0
aFR5cGVkZWZBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNpeHRo
VHlwZWRlZkF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGly
ZWN0bHlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZh
dWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJs
ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pT
T05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2Vs
ZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05v
bkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09O
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERl
ZmF1bHRUb0pTT05Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4K
KyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisg
ICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RE
ZWZhdWx0VG9KU09OUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9i
amVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNP
TlByb3RvdHlwZTo6QmFzZSk7CisKK3VzaW5nIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rv
ciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdERlZmF1bHRUb0pTT04+
OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjpw
cm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xv
YmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rl
c3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0RGVmYXVsdFRvSlNPTiJfcyksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERl
ZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90
eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09O
UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25z
dHJ1Y3RvcikgfSB9LAorICAgIHsgImxvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisgICAg
eyAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9
LAorI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAgIHsgImVuYWJsZWRCeUNvbmRpdGlv
bmFsQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1
bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyNlbHNlCisgICAg
eyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorICAgIHsgImV2ZW50SGFu
ZGxlckF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZSksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJmaXJz
dFN0cmluZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKSB9IH0sCisgICAgeyAic2Vj
b25kTG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRK
U1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRoaXJk
VW5KU09OYWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0
dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJp
YnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUpIH0gfSwK
KyAgICB7ICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pT
T05Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09O
Rm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKSB9IH0sCisgICAgeyAiZmlmdGhMb25n
Q2xhbXBlZEF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1
dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSkgfSB9LAor
ICAgIHsgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRl
ZkF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUpIH0g
fSwKKyAgICB7ICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0
VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRU
b0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKSB9IH0sCisgICAgeyAiZWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRP
TUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSkg
fSB9LAorICAgIHsgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNz
b3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGUpIH0gfSwKKyAgICB7ICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9K
U09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZy
b3plbkFycmF5QXR0cmlidXRlKSB9IH0sCisgICAgeyAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInR3ZWxmdGhJ
bnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNl
U2VxdWVuY2VBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0aGlydGVlbnRoUmVjb3JkQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1
bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgw
KSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlw
ZTo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5
cGUpIH07CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0
YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdERlZmF1bHRUb0pTT046OmluZm8oKSwgSlNUZXN0RGVm
YXVsdFRvSlNPTlByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7CisgICAgYm9vbCBoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgewor
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oImxvbmdBdHRyaWJ1dGUiKSwgc3RybGVuKCJsb25nQXR0cmlidXRl
IikpOworICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVBy
b3BlcnR5U2xvdCBzbG90OworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywg
Z2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorICAgIGlmICghZG93
bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJs
ZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIiks
IHN0cmxlbigiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKSk7CisgICAgICAgIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdu
b3JlQ29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAg
ICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKKyAgICB9CisgICAgaWYgKGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRp
ZXMgJiYgc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQorICAgICAgICBmbGF0dGVuRGljdGlv
bmFyeU9iamVjdCh2bSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9O
KCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OOjpzX2luZm8gPSB7
ICJUZXN0RGVmYXVsdFRvSlNPTiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTikgfTsKKworSlNUZXN0RGVmYXVs
dFRvSlNPTjo6SlNUZXN0RGVmYXVsdFRvSlNPTihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmIGltcGwp
CisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdERlZmF1bHRUb0pTT04+KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQo
IXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZhdWx0VG9KU09OPjo6dmFs
dWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRo
b3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsK
KworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTjo6Y3JlYXRlUHJvdG90eXBlKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNU
ZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rl
c3REZWZhdWx0VG9KU09OUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRU
b0pTT04+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pT
T046OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmRlc3Ryb3koSlNDOjpK
U0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTiogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5K
U1Rlc3REZWZhdWx0VG9KU09OOjp+SlNUZXN0RGVmYXVsdFRvSlNPTigpOworfQorCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OKiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RE
ZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVs
dFRvSlNPTiogSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT04+OjpjYXN0KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAg
ICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBw
cm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3REZWZhdWx0
VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBw
cm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Cisg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJp
YnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+Ojpn
ZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkxvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJsb25n
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETFVuc2lnbmVkU2hvcnQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKTsKK30KKworI2lmIEVOQUJM
RShURVNUX0NPTkRJVElPTkFMKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRU
b0pTT05FbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVzdERlZmF1bHRUb0pTT05FbnVtPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0
ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5
Q29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09O
RW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFibGVkQnlD
b25kaXRpb25hbEF0dHJpYnV0ZSIpOworfQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFt
ZXMoKS5lbnRIYW5kbGVyQXR0cmlidXRlRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmpl
Y3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxl
ckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRs
ZXJBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBzZXRFdmVudEhhbmRs
ZXJBdHRyaWJ1dGUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhpc09iamVjdC53
cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5lbnRIYW5kbGVyQXR0cmlidXRlRXZlbnQsIHZhbHVlKTsK
KyAgICB2bS5oZWFwLndyaXRlQmFycmllcigmdGhpc09iamVjdCwgdmFsdWUpOworICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVm
YXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmli
dXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZp
cnN0U3RyaW5nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
ICAgIHJldHVybiBpbXBsLnNldEZpcnN0U3RyaW5nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46
OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpcnN0U3RyaW5n
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09OU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
TG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0
cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZWNv
bmRMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTlNlY29u
ZExvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0
dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFNlY29uZExvbmdB
dHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNlY29u
ZExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04m
IHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudGhpcmRVbkpTT05hYmxlQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46
OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAidGhpcmRVbkpTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9u
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1
dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0RGVmYXVsdFRvSlNP
TiIsICJ0aGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAg
ICAgcmV0dXJuIGltcGwuc2V0VGhpcmRVbkpTT05hYmxlQXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6
c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJkVW5K
U09OYWJsZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09i
amVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgp
KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNP
TkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0Rm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0NsYW1wZWRBdHRy
aWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkZpZnRo
TG9uZ0NsYW1wZWRBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09O
RmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZpZnRoTG9uZ0NsYW1w
ZWRBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRGaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdD
bGFtcGVkQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJmaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9K
U09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExEb3VibGU+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuc2l4dGhUeXBlZGVmQXR0cmlidXRlKCkpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRTaXh0aFR5cGVkZWZBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVm
QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRl
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0
cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZXZl
bnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVm
YXVsdFRvSlNPTlNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJs
ZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgIlRlc3REZWZhdWx0VG9KU09OIiwgInNldmVudGhEaXJlY3RseVRvSlNP
TmFibGVBdHRyaWJ1dGUiLCAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiKTsgfSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
ICAgIHJldHVybiBpbXBsLnNldFNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKm5h
dGl2ZVZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rl
c3REZWZhdWx0VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGly
ZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRl
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORWlnaHRo
SW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50
ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVp
Z2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxq
c1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdERlZmF1bHRUb0pTT05FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlc3REZWZhdWx0VG9KU09OIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1w
bC5zZXRFaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rl
c3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNP
Tk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmpl
Y3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxl
QXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05O
aW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8
anNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmli
dXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OTmlu
dGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJU
ZXN0RGVmYXVsdFRvSlNPTiIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmli
dXRlIiwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7IH0pOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4g
aW1wbC5zZXROaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRK
U1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05O
aW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJuaW50aE9wdGlvbmFsRGlyZWN0
bHlUb0pTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3REZWZhdWx0VG9KU09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVj
dCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxP
YmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRo
RnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rl
c3REZWZhdWx0VG9KU09OVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
InRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVs
dFRvSlNPTlRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1
ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVl
bmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRo
U2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbGV2ZW50aFNlcXVlbmNlQXR0cmli
dXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Cisg
ICAgICAgIHJldHVybiBpbXBsLnNldEVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpT
VGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERl
ZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VB
dHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1
bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFj
ZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6
Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0VHdlbGZ0
aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVHdl
bGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURM
VW5zaWduZWRTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoKSkpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJl
Y29yZEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlydGVl
bnRoUmVjb3JkQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFJlY29yZDxJRExET01TdHJpbmcsIElETFVuc2lnbmVkU2hvcnQ+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1
dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0
ZWVudGhSZWNvcmRBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqLCBKU1Rlc3REZWZhdWx0VG9KU09OKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQo
KSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRv
d25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVz
dFNldHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pT
PElETFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1Rf
Q09ORElUSU9OQUwpCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1l
cmF0aW9uPFRlc3REZWZhdWx0VG9KU09ORW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgor
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
aXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9u
Z0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlIiksIHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xh
bXBlZEF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50
ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRo
RGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUi
KSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlv
bmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZy
b3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJ
RExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2Vx
dWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVudGhSZWNv
cmRBdHRyaWJ1dGUiKSwgdG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNo
b3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC50aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT04+OjpjYWxsPGpzVGVzdERl
ZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVz
dERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAo
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgp
KQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8fCAh
SlNUZXN0RGVmYXVsdFRvSlNPTjo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZh
dWx0VG9KU09OPikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNP
TiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZt
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNP
Tik7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwg
dm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7CisgICAgYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOwor
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNUZXN0RGVmYXVsdFRv
SlNPTjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5E
CisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihjZWxsKTsKKyAgICBh
bmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBl
ZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAg
ICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCitib29sIEpTVGVzdERlZmF1bHRUb0pTT05P
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7CisgICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0RGVmYXVs
dFRvSlNPTiA9IHN0YXRpY19jYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPihoYW5kbGUuc2xvdCgp
LT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldv
cmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3REZWZhdWx0
VG9KU09OLT53cmFwcGVkKCksIGpzVGVzdERlZmF1bHRUb0pTT04pOworfQorCisjaWYgRU5BQkxF
KEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlm
aWVyKCI/P183VGVzdERlZmF1bHRUb0pTT05AV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UK
K2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTE3VGVzdERlZmF1bHRUb0pT
T05FW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lO
VEVHUklUWSkKKyAgICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxl
UG9pbnRlcihpbXBsLnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0
ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdERlZmF1bHRUb0pTT05AV2Vi
Q29yZUBANkJAIik7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZf
WlRWTjdXZWJDb3JlMTdUZXN0RGVmYXVsdFRvSlNPTkVbMl07CisjZW5kaWYKKworICAgIC8vIElm
IHRoaXMgZmFpbHMgVGVzdERlZmF1bHRUb0pTT04gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28g
eW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0
cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19wb2x5bW9ycGhpYzxUZXN0RGVmYXVsdFRvSlNPTj46OnZhbHVlLCAiVGVzdERlZmF1bHRU
b0pTT04gaXMgbm90IHBvbHltb3JwaGljIik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNz
ZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBU
ZXN0RGVmYXVsdFRvSlNPTiBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdERlZmF1bHRUb0pTT04gaGFz
IHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRs
eSByZXF1aXJlIFRlc3REZWZhdWx0VG9KU09OIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFy
ZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1
dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFj
dHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAg
IHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPihnbG9iYWxPYmplY3QsIFdU
Rk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0RGVmYXVsdFRvSlNPTiYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0RGVmYXVsdFRvSlNPTiogSlNU
ZXN0RGVmYXVsdFRvSlNPTjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1
bHRUb0pTT04qPih2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SlNUZXN0RGVmYXVsdFRvSlNPTiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdERlZmF1bHRUb0pT
T04+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3REZWZhdWx0
VG9KU09OPjsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTiogY3JlYXRlKEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxU
ZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRv
SlNPTiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0
VG9KU09OPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT04oc3Ry
dWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlw
ZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdERlZmF1bHRU
b0pTT04qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAg
ICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOworcHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pT
T04oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRv
SlNPTj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2Ns
YXNzIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImLCBjb25zdCBjaGFyKiopOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3REZWZhdWx0VG9K
U09OKikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0RGVmYXVsdFRvSlNPTk93
bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCog
d3JhcHBlcktleShUZXN0RGVmYXVsdFRvSlNPTiogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJl
dHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3REZWZhdWx0VG9KU09OJik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT04q
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RE
ZWZhdWx0VG9KU09OPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdERlZmF1bHRUb0pTT04+
IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OOworICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0RGVmYXVsdFRvSlNPTio7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkVudW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51
bS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05FbnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY0IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRv
U3RyaW5nKFRlc3REZWZhdWx0VG9KU09ORW51bSBlbnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0
YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAgICBN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW51bVZhbHVlMSIpLAorICAgICAgICBNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiRW51bVZhbHVlMiIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChz
dGF0aWNfY2FzdDxzaXplX3Q+KFRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMSkgPT0g
MCwgIlRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMSBpcyBub3QgMCBhcyBleHBlY3Rl
ZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0RGVmYXVsdFRv
SlNPTkVudW06OkVudW1WYWx1ZTIpID09IDEsICJUZXN0RGVmYXVsdFRvSlNPTkVudW06OkVudW1W
YWx1ZTIgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAg
cmV0dXJuIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30K
KwordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT05FbnVtIGVudW1lcmF0
aW9uVmFsdWUpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGxleGljYWxHbG9iYWxP
YmplY3Qudm0oKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZW51bWVyYXRpb25WYWx1ZSkp
OworfQorCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3REZWZhdWx0VG9KU09ORW51bT4gcGFyc2VF
bnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKHN0cmluZ1Zh
bHVlID09ICJFbnVtVmFsdWUxIikKKyAgICAgICAgcmV0dXJuIFRlc3REZWZhdWx0VG9KU09ORW51
bTo6RW51bVZhbHVlMTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTIiKQorICAg
ICAgICByZXR1cm4gVGVzdERlZmF1bHRUb0pTT05FbnVtOjpFbnVtVmFsdWUyOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVt
ZXJhdGlvblZhbHVlczxUZXN0RGVmYXVsdFRvSlNPTkVudW0+KCkKK3sKKyAgICByZXR1cm4gIlwi
RW51bVZhbHVlMVwiLCBcIkVudW1WYWx1ZTJcIiI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09ORW51bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09ORW51bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRFbnVt
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIlRlc3REZWZhdWx0VG9KU09ORW51bS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1N0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0RGVm
YXVsdFRvSlNPTkVudW0pOwordGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBUZXN0RGVmYXVsdFRvSlNPTkVudW0pOwor
Cit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3REZWZhdWx0VG9KU09ORW51bT4gcGFyc2VFbnVtZXJh
dGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpT
VmFsdWUpOwordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVz
PFRlc3REZWZhdWx0VG9KU09ORW51bT4oKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlLmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEF0dHJp
YnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05J
bmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9u
RmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJ
bmhlcml0YW5jZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlw
ZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OkJhc2UpOwor
Cit1c2luZyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9y
ID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Iodm0s
ICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Q29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2VQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH0gfSwK
K307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSkgfTsK
Kwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlOjppbmZvKCksIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19X
SVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKSB9
OworCitKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6SlNUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2U+JiYgaW1wbCkKKyAgICA6IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9N
T2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+Ojp2YWx1ZSwgIklu
dGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGlt
cGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisK
K0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Y3JlYXRl
UHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6
OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOwor
fQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisg
ICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitKU0M6Oklzb1N1
YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBj
bGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpKQorICAg
ICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZT4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlPikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5J
VCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKTsKKyAgICBlbHNlCisgICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0g
bWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2Vs
bEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCisgICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAg
cmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZSo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RG
b3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9y
Q2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7
Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2lu
Y2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisjaW5jbHVkZSAiVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgOiBwdWJsaWMgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdDsKKyAgICB1c2luZyBET01XcmFwcGVkID0gVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKHN0
cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5
cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBERUNMQVJFX0lORk87CisK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2Rl
PiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
eworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29u
Y3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOworICAgIFRlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZSYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlJj4oQmFzZTo6
d3JhcHBlZCgpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+JiYpOworCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2U+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZTsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA4
IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVy
ZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCisjaW5jbHVkZSAiSlNE
T01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFJlY29yZC5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0
cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAi
SlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFw
QW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJz
cGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bv
aW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisjaW5jbHVkZSAiSlNE
T01Db252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORW51
bS5oIgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9u
Z0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VS
VF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5
cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PjsKKwordGVtcGxhdGU8
PiBKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3I6OnByb3RvdHlw
ZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0
b3Iodm0sICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiX3Mp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNz
SW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0
b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGVUYWJsZVZh
bHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3Ry
dWN0b3IpIH0gfSwKKyAgICB7ICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
SW5oZXJpdExvbmdBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0s
Cit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdDo6aW5mbygpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZVRh
YmxlVmFsdWVzLCAqdGhpcyk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lU
SU9OKCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdCkgfTsKKworSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OkpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiYmIGltcGwpCisgICAgOiBKU1Rl
c3REZWZhdWx0VG9KU09OKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQor
eworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8
QWN0aXZlRE9NT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+Ojp2YWx1ZSwgIkludGVy
ZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxl
bWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pT
T2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Jmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6cHJv
dG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pih2bSwgZ2xv
YmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdCogSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6Y2FzdChKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQqIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD46OmNhc3QoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQorewor
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Kj4oSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0JiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJp
dExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImluaGVyaXRMb25n
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
ICAgIHJldHVybiBpbXBsLnNldEluaGVyaXRMb25nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExv
bmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRv
SlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSos
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQo
KSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRv
d25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVz
dFNldHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pT
PElETFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1Rf
Q09ORElUSU9OQUwpCisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1l
cmF0aW9uPFRlc3REZWZhdWx0VG9KU09ORW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgor
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
aXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9u
Z0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlIiksIHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xh
bXBlZEF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50
ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRo
RGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUi
KSwgdG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5laWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxE
aXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlv
bmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZy
b3plbkFycmF5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJ
RExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2Vx
dWVuY2U8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVudGhSZWNv
cmRBdHRyaWJ1dGUiKSwgdG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNo
b3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC50aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25n
QXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6Y2FsbDxqc1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30KKworSlNDOjpJc29TdWJzcGFj
ZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFj
ZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOworICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4pCisg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFr
ZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dCk7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZt
LmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0KTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0LmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAg
IGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5J
TkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9p
ZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqPihjZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFw
cGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAo
dGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFseXplci5z
ZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwg
YW5hbHl6ZXIpOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09O
LmgiCisjaW5jbHVkZSAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgOiBwdWJsaWMgSlNU
ZXN0RGVmYXVsdFRvSlNPTiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdERlZmF1
bHRUb0pTT047CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dDsKKyAgICBzdGF0aWMgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqIGNyZWF0ZShKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFy
cmF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2Rl
ID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9Cisg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CisgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKKyAgICBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQmIHdyYXBwZWQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCY+KEJh
c2U6OndyYXBwZWQoKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOworfTsKKworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgor
CisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1
ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxh
YmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUgIkpTRE9N
Q29udmVydFJlY29yZC5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAi
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElU
SU9OQUwpCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJK
U1Rlc3REZWZhdWx0VG9KU09ORW51bS5oIgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUg
ewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlRm9vKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xh
c3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSBmaW5hbCA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6
OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7
CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNf
QVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsUHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpC
YXNlKTsKKwordXNpbmcgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9y
ID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbD47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
Y29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0
KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpwcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZyh2bSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIl9zKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQ
cm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiZmluYWxMb25nQXR0
cmlidXRlRm9vIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
Rm9vKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZv
bykgfSB9LAorICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRw
dHJfdCkgKDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZSkgfTsKKwordm9p
ZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3Rh
dGljUHJvcGVydGllcyh2bSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6aW5mbygp
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0
aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnNfaW5mbyA9
IHsgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsKSB9OworCitKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+JiYg
aW1wbCkKKyAgICA6IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0
YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBb
QWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFz
c2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6
OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCogSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwqIElETE9wZXJhdGlvbjxK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0
b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmpl
Y3QoKSkpOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
eworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgdGhpc09iamVj
dCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maW5hbExvbmdBdHRyaWJ1dGVGb28oKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5h
bExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28i
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0
ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAg
ICAgICByZXR1cm4gaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1dGVGb28oV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlu
YWxMb25nQXR0cmlidXRlQmFyKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbD46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlQmFyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmlu
YWxMb25nQXR0cmlidXRlQmFyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6
OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0
dXJuIGltcGwuc2V0RmluYWxMb25nQXR0cmlidXRlQmFyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCogY2FzdGVk
VGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEds
b2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0
UnVudGltZUVuYWJsZWRFbmFibGVkKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9u
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubG9uZ0F0dHJpYnV0ZSgp
KSk7CisgICAgfQorICAgIGlmIChkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5U2V0
dGluZ3NBdHRyaWJ1dGUiKSwgdG9KUzxJRExVbnNpZ25lZFNob3J0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSgpKSk7Cisg
ICAgfQorI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRy
aWJ1dGUiKSwgdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0
dHJpYnV0ZSgpKSk7CisjZW5kaWYKKworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5n
QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERv
dWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUiKSwgdG9K
UzxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmli
dXRlIiksIHRvSlM8SURMRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0
dHJpYnV0ZSIpLCB0b0pTPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSgpKSk7Cisg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8
SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwubmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSgpKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIiksIHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVh
bj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwudGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbGV2ZW50aFNlcXVl
bmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0
dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ0aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlIiksIHRvSlM8SURMUmVjb3JkPElETERP
TVN0cmluZywgSURMVW5zaWduZWRTaG9ydD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGhpcnRlZW50aFJlY29yZEF0
dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZp
bmFsTG9uZ0F0dHJpYnV0ZUZvbyIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUZvbygpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRy
aWJ1dGVCYXIiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OmNh
bGw8anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30KKwor
SlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMg
PSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCkpCisgICAgICAg
IHJldHVybiBzcGFjZTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+IHx8
ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+KQorICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxJc29T
dWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKKyAg
ICBlbHNlCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5o
ZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCisgICAgaWYgKCZKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAg
ICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
K0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3Bh
Y2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCo+KGNlbGwp
OworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0
LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlz
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBC
YXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlci5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisjaW5jbHVk
ZSAiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIDogcHVibGljIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsOworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPiYmIGlt
cGwpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3Bh
Y2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKKyAgICBUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmPihCYXNlOjp3
cmFwcGVkKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4geworICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7CisgICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
MTAgQEAKICNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaCIKICNpbmNsdWRlICJKU1Rlc3RE
T01KSVQuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVkZSAiSlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdC5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwuaCIKICNpbmNsdWRlICJKU1Rlc3REb21haW5TZWN1cml0eS5oIgogI2luY2x1ZGUg
IkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dC5oIgpAQCAtODUsMTAgKzg5LDYgQEAKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seU1hcExp
a2UuaCIKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seVNldExpa2UuaCIKICNpbmNsdWRlICJKU1Rl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9u
LmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIK
LSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIkpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCIKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlLmgi
CiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXIuaCIKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbi5oIgpAQCAtMTk0LDYgKzE5NCwxNCBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1
cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMjg0LDE0ICsy
OTIsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlCiBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1l
bW9yeUNvc3RDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwpAQCAtMzIzLDEzICszMjMsMTMgQEAgdXNp
bmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IgPSBKUwogCiAvKiBIYXNoIHRhYmxlICov
CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmpl
Y3RUYWJsZUluZGV4WzI3MF0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjhdID0gewogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA0MiwgLTEgfSwKKyAgICB7IDQ2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAwLCAtMSB9LAotICAgIHsgOCwgMjY1IH0sCi0gICAgeyA0NiwgLTEgfSwKKyAgICB7IDgsIC0x
IH0sCisgICAgeyA1MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKQEAgLTMzNywxMSArMzM3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDU1LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNCwgLTEg
fSwKKyAgICB7IDI4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzU5LDE0ICszNTksMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMzYsIC0xIH0sCisgICAgeyA0MCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA3MiwgLTEgfSwKLSAgICB7IDE0LCAyNTkgfSwKKyAg
ICB7IDE4LCAyNjAgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKQEAgLTM3NCwxMSArMzc0LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDQwLCAtMSB9LAotICAgIHsgMjEsIDI1NiB9LAorICAgIHsgNDQsIC0x
IH0sCisgICAgeyAyNSwgMjU3IH0sCiAgICAgeyAxMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgNDcsIC0xIH0sCisgICAgeyA1MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM4NywxNCArMzg3LDE0IEBAIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM4LCAtMSB9LAorICAgIHsgNDIsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAy
MywgMjY3IH0sCisgICAgeyAyNywgMjY1IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00MTYsNjYgKzQxNiw2NiBAQCBzdGF0aWMgY29uc3Qg
c3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNSwgMjU3IH0sCisgICAgeyAxNSwgMjU2IH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDYyLCAtMSB9LAotICAgIHsgMjAsIC0xIH0sCisgICAg
eyAyNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDE5LCAtMSB9LAorICAgIHsgMjMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDM3LCAtMSB9LAorICAgIHsgNDEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisg
ICAgeyAxNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMzAsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDI2LCAtMSB9LAorICAgIHsgMiwgMjY3IH0sCisgICAgeyA0MywgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMiwgMjY5IH0sCi0gICAgeyAzOSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAyNiwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAotICAgIHsgMjIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAg
IHsgNTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyAzMCwgLTEgfSwKKyAgICB7IDM0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyA0NCwgLTEgfSwKKyAgICB7IDQ4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDU0LCAtMSB9LAorICAgIHsgNTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDE1LCAtMSB9LAorICAgIHsgMTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDEyLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgNDksIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwKKyAgICB7IDUzLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDE2LCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyA2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00ODYsOCArNDg2LDggQEAg
c3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjksIC0xIH0sCi0gICAg
eyAzMywgMjYzIH0sCisgICAgeyAzMywgLTEgfSwKKyAgICB7IDM3LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyA1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00OTcsNyArNDk3LDcg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTcsIDI1OCB9LAor
ICAgIHsgMjEsIDI1OSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA2MywgLTEgfSwKICAgICB7
IC0xLCAtMSB9LApAQCAtNTA4LDkgKzUwOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDM1LCAyNjggfSwKKyAgICB7IDM5LCAyNjYgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgMTgsIC0xIH0sCisgICAgeyAyMiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgNjYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTUzMSwxMSArNTMxLDExIEBAIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ4LCAyNjQgfSwKKyAgICB7
IDUyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDMsIC0x
IH0sCi0gICAgeyAtMSwgLTEgfSwKKyAgICB7IDE3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTUzLDggKzU1Myw4IEBAIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUwLCAyNjIgfSwKLSAgICB7IDEx
LCAyNjEgfSwKKyAgICB7IDU0LCAyNjMgfSwKKyAgICB7IDExLCAyNjIgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgNjQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTU2MywzMyArNTYzLDMx
IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE2LCAtMSB9LAor
ICAgIHsgMjAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI3LCAtMSB9LAorICAgIHsg
MzEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0x
IH0sCisgICAgeyAzNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IDcsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwKKyAgICB7IDU2
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MywgLTEgfSwKKyAgICB7IDU3LCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAyOCwgMjY2IH0sCi0gICAgeyAzMSwgMjYwIH0sCi0gICAgeyAz
NCwgLTEgfSwKLSAgICB7IDQxLCAtMSB9LAotICAgIHsgNDMsIC0xIH0sCisgICAgeyAyOSwgMjU4
IH0sCisgICAgeyAzMiwgMjY0IH0sCisgICAgeyAzNSwgMjYxIH0sCisgICAgeyAzOCwgLTEgfSwK
ICAgICB7IDQ1LCAtMSB9LAotICAgIHsgNTEsIC0xIH0sCi0gICAgeyA1NiwgLTEgfSwKLSAgICB7
IDU3LCAtMSB9LAotICAgIHsgNTgsIC0xIH0sCisgICAgeyA0NywgLTEgfSwKKyAgICB7IDQ5LCAt
MSB9LAorICAgIHsgNTUsIC0xIH0sCiAgICAgeyA2MCwgLTEgfSwKICAgICB7IDY1LCAtMSB9LAog
ICAgIHsgNjksIC0xIH0sCkBAIC02MjEsNiArNjE5LDEwIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RHbG9iYWwKICAgICB7ICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDb25kaXRpb25hbEluY2x1
ZGVzQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RE9NSklUIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RE9NSklUQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29u
c3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IpIH0g
fSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3Ip
IH0gfSwKICAgICB7ICJUZXN0RG9tYWluU2VjdXJpdHkiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9i
amVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RW5hYmxlZEJ5U2V0
dGluZyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3IpIH0gfSwKICAgICB7ICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH0gfSwKQEAgLTY3MSwxMCArNjcz
LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgIlRl
c3RSZWFkT25seU1hcExpa2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25s
eU1hcExpa2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExp
a2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RSZWFkT25seVNldExpa2UiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsg
IlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJp
YWxpemF0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rv
cikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRDb25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvcikgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKICAgICB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpIH0gfSwKICNlbHNlCkBAIC0xMjM5LDYgKzEyMzcsOTgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29ucwogICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RET01KSVRDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdERPTUpJVCIpOwogfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVz
dERlZmF1bHRUb0pTT04iKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RGVmYXVsdFRvSlNPTiIpLCBzdHJs
ZW4oIlRlc3REZWZhdWx0VG9KU09OIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1
Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiVGVzdERlZmF1bHRUb0pTT04iKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
IiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIikpLCB2YWx1
ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0
PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpn
ZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3JH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
IiksIHN0cmxlbigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IikpLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiKSwgc3RybGVuKCJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsIik7Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKQEAgLTIyNDAsOTggKzIzMzAsNiBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyCiAgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9u
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1
Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTZXJpYWxpemF0aW9uIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb24iKSksIHZhbHVl
KTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0K
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQiKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpz
ZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
LXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yR2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgotICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikp
LCB2YWx1ZSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1
Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsKLX0KLQogI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI2NzAw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBAIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRl
c3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKICNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpD
YWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJdGVyYXRvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNh
bGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbktleXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1l
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uVmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRy
aWJ1dGVzCiAKQEAgLTE1MiwxMSArMTUyLDExIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3ROb2RlUHIKICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0g
fSwKICNlbmRpZgorICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAia2V5cyIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4o
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAg
ICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJf
dCkgKDApIH0gfSwKICAgICB7ICJmb3JFYWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25G
b3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RO
b2RlUHJvdG90eXBlKSB9OwpAQCAtMzg1LDYgKzM4NSwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE5vZGVQCiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdE5vZGUqIGNhc3RlZFRo
aXMpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJu
YW1lIiksIHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5uYW1lKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxs
PGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Cit9CisKIHN0cnVjdCBUZXN0Tm9kZUl0ZXJhdG9y
VHJhaXRzIHsKICAgICBzdGF0aWMgY29uc3RleHByIEpTRE9NSXRlcmF0b3JUeXBlIHR5cGUgPSBK
U0RPTUl0ZXJhdG9yVHlwZTo6U2V0OwogICAgIHVzaW5nIEtleVR5cGUgPSB2b2lkOwpAQCAtNDg4
LDI5ICs1MDQsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAg
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90
eXBlRnVuY3Rpb25Gb3JFYWNoQ2FsbGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImZvckVhY2giKTsKIH0KIAotSlNDOjpKU09iamVjdCogSlNUZXN0Tm9kZTo6c2VyaWFsaXpl
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2RlJiB0aGlzT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSk7Ci0KLSAgICBhdXRvIG5hbWVWYWx1ZSA9IGpzVGVzdE5vZGVOYW1lR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm5hbWUiKSwgbmFtZVZhbHVlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OQm9keShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwg
SlNUZXN0Tm9kZSogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE5vZGU6OnNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIp
OwotfQotCiBKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7CiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCShyZXZpc2lvbiAyNjcwMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewog
ICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3Vy
cmVudGx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTk0LDcgKzE1OTQsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24oSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93QW5kV29ya2VyRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZy
YW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAog
Ly8gQXR0cmlidXRlcwogCkBAIC0yMzM2LDcgKzIzMzUsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqUHJvCiAgICAgeyAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtl
ckZ1bmN0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9Xb3JrZXJGdW5jdGlvbiksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJjb25kaXRpb25h
bGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAogICAgIHsgInRvU3RyaW5nIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvU3RyaW5nKSwgKGludHB0cl90KSAoMCkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjEpCiAgICAgeyAiQ09ORElUSU9OQUxfQ09OU1QiLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7
IChsb25nIGxvbmcpKDApIH0gfSwKICNlbHNlCkBAIC05NDAzLDQxICs5NDAxLDYgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCi1K
U0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGNyZWF0
ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZSIpLCBjcmVh
dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlID0ganNUZXN0T2Jq
UmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qp
OwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIp
LCByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSk7Ci0KLSAgICBhdXRvIGVudW1BdHRyVmFsdWUgPSBq
c1Rlc3RPYmpFbnVtQXR0ckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsK
LSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtQXR0ciIpLCBlbnVtQXR0clZh
bHVlKTsKLQotICAgIGF1dG8gbG9uZ0F0dHJWYWx1ZSA9IGpzVGVzdE9iakxvbmdBdHRyR2V0dGVy
KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxvbmdBdHRyIiksIGxvbmdBdHRyVmFsdWUpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSosIEpTVGVzdE9iaiogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdE9iajo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewot
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAi
dG9KU09OIik7Ci19Ci0KIEpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewogICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDI2
NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNET01HbG9iYWxP
YmplY3QmKTsKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9j
YWNoZWRBdHRyaWJ1dGUxOwogICAgIG11dGFibGUgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtu
b3duPiBtX2NhY2hlZEF0dHJpYnV0ZTI7CiAjaWYgRU5BQkxFKENPTkRJVElPTikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDc3MCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0K
LSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgotI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCi0jaW5jbHVk
ZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFj
ZS5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCi0jaW5jbHVkZSAiSlNET01D
b252ZXJ0TnVtYmVycy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgotI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCi0jaW5jbHVkZSAi
SlNUZXN0RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2UuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3Rv
dHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1
Y3Rvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5o
PgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBu
YW1lc3BhY2UgSlNDOwotCi0vLyBGdW5jdGlvbnMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLQotLy8gQXR0cmlidXRlcwotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNl
cmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0
aExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9u
Z0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
blNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25F
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0KLWNs
YXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFs
T2JqZWN0OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6
YXRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewot
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxp
emF0aW9uUHJvdG90eXBlLCBCYXNlKTsKLSAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNw
YWNlOwotICAgIH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvblByb3Rv
dHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciA9IEpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb24+OwotCi10
ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5
cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZ2xvYmFsT2Jq
ZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbjo6cHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcodm0sICJUZXN0U2VyaWFsaXphdGlvbiJfcyksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6
YXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlh
bGl6YXRpb25Db25zdHJ1Y3RvcikgfTsKLQotLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICov
Ci0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rv
cikgfSB9LAotICAgIHsgImZpcnN0U3RyaW5nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRmly
c3RTdHJpbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGUpIH0gfSwKLSAgICB7ICJzZWNvbmRMb25nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2Vj
b25kTG9uZ0F0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRl
KSB9IH0sCi0gICAgeyAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXph
dGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgImZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJmaWZ0aExvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmli
dXRlKSB9IH0sCi0gICAgeyAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
U2l4dGhUeXBlZGVmQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0
dHJpYnV0ZSkgfSB9LAotICAgIHsgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUp
IH0gfSwKLSAgICB7ICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlKSB9IH0sCi0gICAgeyAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmli
dXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJl
Y3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJl
bGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRl
KSB9IH0sCi0gICAgeyAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJp
YWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFs
aXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInRv
SlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5j
dGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5j
dGlvbj4oanNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0
cl90KSAoMCkgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9u
UHJvdG90eXBlKSB9OwotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0aW9uOjppbmZvKCksIEpT
VGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAgIEpTQ19U
T19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwotfQotCi1jb25zdCBDbGFzc0luZm8g
SlNUZXN0U2VyaWFsaXphdGlvbjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNl
cmlhbGl6YXRpb24pIH07Ci0KLUpTVGVzdFNlcmlhbGl6YXRpb246OkpTVGVzdFNlcmlhbGl6YXRp
b24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKQotICAgIDogSlNET01XcmFwcGVyPFRlc3RT
ZXJpYWxpemF0aW9uPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsK
LX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9N
T2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbj46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJr
ZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mg
c3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7Ci0KLX0KLQotSlNPYmplY3QqIEpTVGVzdFNl
cmlhbGl6YXRpb246OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6
OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJv
dG90eXBlKCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OnByb3RvdHlw
ZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsK
LX0KLQotSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0s
IGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotdm9pZCBKU1Rl
c3RTZXJpYWxpemF0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQotewotICAgIEpTVGVz
dFNlcmlhbGl6YXRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXphdGlvbjo6fkpTVGVz
dFNlcmlhbGl6YXRpb24oKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXph
dGlvbiogSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYXN0KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0g
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0K
LXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb24qIElETE9wZXJhdGlvbjxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxs
RnJhbWUudGhpc1ZhbHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkp
OwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlh
bGl6YXRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJu
IHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2Jq
ZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+Ojpn
ZXQ8anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsK
LSAgICAgICAgcmV0dXJuIGltcGwuc2V0Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0
aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RT
dHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExv
bmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9u
U2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUi
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRM
b25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0U2Vjb25k
TG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
U2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0
aW9uPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwudGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXph
YmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJk
VW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRy
aWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0VGhpcmRV
bnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOwotICAgIH0pOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXph
YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVB
dHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17
Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERv
dWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldEZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNl
cmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaWZ0aExvbmdB
dHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5z
ZXRGaWZ0aExvbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6
YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpKTsKLX0KLQot
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJp
YWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRp
b24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldFNpeHRoVHlwZWRlZkF0dHJpYnV0
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2Vy
aWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxq
c1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAic2V2ZW50
aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRTZXZlbnRoRGlyZWN0bHlTZXJpYWxp
emFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2Vy
aWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09i
amVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3Rs
eUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETElu
dGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgImVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRFaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCpu
YXRpdmVWYWx1ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURM
SW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxP
YmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldE5pbnRoT3B0aW9u
YWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0g
ICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5
QXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXph
dGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0ZW50aEZyb3pl
bkFycmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRUZW50aEZyb3plbkFycmF5QXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50
aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9N
U3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0
cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVu
Y2VBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVu
Y2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1
cm4gaW1wbC5zZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbGV2
ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RT
ZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNl
PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVybiBpbXBsLnNldFR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpT
VGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJ
bnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQotCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RT
ZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gZmlyc3RT
dHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJp
YnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Nj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCBmaXJzdFN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlID0g
anNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAg
YXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlh
bGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZmlmdGhMb25nQXR0cmlidXRlVmFs
dWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIpLCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAg
ICBhdXRvIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNp
eHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1
dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBzZXZlbnRoRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZXZl
bnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IGF1dG8qIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1
ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzZXZl
bnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCk7Ci0g
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXph
YmxlQXR0cmlidXRlIiksIHNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlh
bGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRvIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICBhdXRvKiBlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZh
bHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlIiksIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwotCi0g
ICAgYXV0byBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGlmICghbmludGhPcHRpb25hbERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byogbmlu
dGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0g
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxP
YmplY3QsICpqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KG5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVuQXJy
YXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0
cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93
U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdGVu
dGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZhbHVlKTsKLQotICAgIGF1dG8gZWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2
ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpjYWxsPGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7
Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6YXRpb246OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTZXJpYWxpemF0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0g
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uPiB8fCAhSlNUZXN0U2VyaWFsaXphdGlvbjo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uPikKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwg
SlNUZXN0U2VyaWFsaXphdGlvbik7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXJpYWxpemF0aW9uLmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwotfQotCi12
b2lkIEpTVGVzdFNlcmlhbGl6YXRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb24qPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9y
Q2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNl
bGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51
cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwot
fQotCi1ib29sIEpTVGVzdFNlcmlhbGl6YXRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKLXsKLSAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlKTsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlYXNv
bik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Pd25l
cjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRl
eHQpCi17Ci0gICAgYXV0byoganNUZXN0U2VyaWFsaXphdGlvbiA9IHN0YXRpY19jYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb24qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Ci0gICAgYXV0byYgd29y
bGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7Ci0gICAgdW5jYWNo
ZVdyYXBwZXIod29ybGQsICZqc1Rlc3RTZXJpYWxpemF0aW9uLT53cmFwcGVkKCksIGpzVGVzdFNl
cmlhbGl6YXRpb24pOwotfQotCi0jaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQotI2lmIFBM
QVRGT1JNKFdJTikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQotZXh0ZXJuICJDIiB7
IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdFNlcmlhbGl6YXRpb25A
V2ViQ29yZUBANkJAIilbXSkoKTsgfQotI2Vsc2UKLWV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCog
X1pUVk43V2ViQ29yZTE3VGVzdFNlcmlhbGl6YXRpb25FW107IH0KLSNlbmRpZgotI2VuZGlmCi0K
LUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1w
bCkKLXsKLQotI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKLSAgICBjb25zdCB2b2lkKiBh
Y3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9pbnRlcihpbXBsLnB0cigpKTsKLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlm
aWVyKCI/P183VGVzdFNlcmlhbGl6YXRpb25AV2ViQ29yZUBANkJAIik7Ci0jZWxzZQotICAgIHZv
aWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXph
dGlvbkVbMl07Ci0jZW5kaWYKLQotICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdFNlcmlhbGl6YXRp
b24gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQotICAgIC8v
IEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVm
aW5pdGlvbgotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0U2VyaWFs
aXphdGlvbj46OnZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb24gaXMgbm90IHBvbHltb3JwaGljIik7
Ci0KLSAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVz
ZSBhZnRlciBmcmVlIGJ1Zywgb3IKLSAgICAvLyBUZXN0U2VyaWFsaXphdGlvbiBoYXMgc3ViY2xh
c3Nlcy4gSWYgVGVzdFNlcmlhbGl6YXRpb24gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2Vk
Ci0gICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RTZXJpYWxpemF0aW9u
IHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCi0gICAgLy8gYnkgYWRkaW5nIHRo
ZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVm
aW5pdGlvbgotICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0
ZWRWVGFibGVQb2ludGVyKTsKLSNlbmRpZgotICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RT
ZXJpYWxpemF0aW9uPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotfQotCi1KU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbiYgaW1wbCkKLXsK
LSAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwp
OwotfQotCi1UZXN0U2VyaWFsaXphdGlvbiogSlNUZXN0U2VyaWFsaXphdGlvbjo6dG9XcmFwcGVk
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBw
ZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPih2bSwgdmFsdWUpKQotICAg
ICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCShyZXZpc2lvbiAyNjcwMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5oCShub25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgotI2luY2x1
ZGUgIlRlc3RTZXJpYWxpemF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbiA6IHB1
YmxpYyBKU0RPTVdyYXBwZXI8VGVzdFNlcmlhbGl6YXRpb24+IHsKLXB1YmxpYzoKLSAgICB1c2lu
ZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemF0aW9uPjsKLSAgICBzdGF0aWMgSlNU
ZXN0U2VyaWFsaXphdGlvbiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBs
KQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvbiogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb24oc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKGltcGwpKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0g
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKLSAgICBzdGF0aWMgVGVzdFNlcmlhbGl6YXRpb24qIHRvV3JhcHBlZChKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkp
OwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpW
TSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBK
U0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBK
U0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7Ci0gICAgfQotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwotICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7Ci1w
cm90ZWN0ZWQ6Ci0gICAgSlNUZXN0U2VyaWFsaXphdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTZXJpYWxpemF0aW9uPiYmKTsKLQotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbk93
bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7Ci0gICAg
dmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNv
bnRleHQpOwotfTsKLQotaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIo
RE9NV3JhcHBlcldvcmxkJiwgVGVzdFNlcmlhbGl6YXRpb24qKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxKU1Rlc3RTZXJpYWxpemF0aW9uT3duZXI+IG93bmVyOwotICAgIHJldHVybiAm
b3duZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RTZXJpYWxpemF0
aW9uKiB3cmFwcGFibGVPYmplY3QpCi17Ci0gICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKLX0K
LQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgVGVzdFNlcmlhbGl6YXRpb24mKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRv
SlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVs
bCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYpOwotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxU
ZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwo
KSkgOiBKU0M6OmpzTnVsbCgpOyB9Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTVGVzdFNlcmlhbGl6YXRpb247Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IFRlc3RTZXJpYWxpemF0aW9uKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlLmNwcAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZS5oIgotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKLSNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
LQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi0vLyBBdHRy
aWJ1dGVzCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05v
bkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAg
SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpT
Qzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BB
Q0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5
cGUsIEJhc2UpOwotICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7Ci0gICAgfQot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0Vf
U0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUs
IEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpCYXNlKTsK
LQotdXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rv
ciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlPjsKLQotdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsK
LSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHZt
LCAmZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZUNvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KLQotc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSB9IH0s
Ci19OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2VQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUpIH07
Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZTo6aW5mbygpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NUUklOR19UQUdf
V0lUSE9VVF9UUkFOU0lUSU9OKCk7Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSkg
fTsKLQotSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OkpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlPiYmIGltcGwpCi0gICAgOiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQot
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwotCi0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURP
TU9iamVjdCwgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPjo6dmFsdWUsICJJ
bnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBp
bXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQot
Ci1KU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmNyZWF0
ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsK
LX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpw
cm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2U+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCi1KU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I+KHZtLCAq
anNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
LCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgot
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKLX0KLQotSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2U+IHx8ICFKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZT4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSk7Ci0gICAgZWxzZQotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzKQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IHJldHVybiBzcGFjZTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2UqPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0
Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZv
ckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIp
OwotfQotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIK
LSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIlRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIDogcHVibGlj
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0g
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlPiYmIGltcGwpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4oZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZShzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJldHVybiBwdHI7
Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0gICAgREVDTEFSRV9JTkZP
OwotCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQot
ICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2UmIHdyYXBwZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSY+KEJh
c2U6OndyYXBwZWQoKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPiYmKTsKLQotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2U7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSo7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJ
KHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
NzUgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaCIKLQotI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZl
cnROdW1iZXJzLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1
ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLS8vIEZ1bmN0aW9ucwotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKLQotLy8gQXR0cmlidXRlcwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlIGZpbmFsIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpT
Qzo6SlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlPih2bS5oZWFw
KSkgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJl
dHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJv
dG90eXBlLCBCYXNlKTsKLSAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOwotfTsKLVNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdFByb3RvdHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdD47Ci0KLXRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsK
LX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Il9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxl
IGZvciBwcm90b3R5cGUgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29u
c3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKSB9IH0sCi0gICAgeyAiaW5o
ZXJpdExvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRy
aWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKSB9
IH0sCi0gICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKSB9Owot
Ci12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJlaWZ5U3Rh
dGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmluZm8oKSwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAg
IEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwotfQotCi1jb25zdCBDbGFz
c0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQpIH07Ci0KLUpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0OjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdD4mJiBpbXBsKQotICAgIDogSlNUZXN0U2VyaWFsaXphdGlvbihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotCi0g
ICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Pjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBb
QWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFz
c2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQotCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQ6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJv
dG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNl
cmlhbGl6YXRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOwotfQotCi1KU09iamVj
dCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KLUpTVmFs
dWUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nh
c3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKLXsKLSAgICByZXR1cm4ganNEeW5h
bWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiBJRExPcGVyYXRpb248SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsK
LSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFBy
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhp
c09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Pjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0
dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRJbmhl
cml0TG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0
TG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OnNldDxzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0
dHJpYnV0ZSIpOwotfQotCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dDo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlhbGl6ZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKLQotICAgIGF1dG8gaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKSwgaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1
ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCogdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUoKmxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6Y2FsbDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJ0b0pTT04iKTsKLX0KLQotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ+IHx8ICFKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4pCi0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCk7Ci0gICAgZWxzZQotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFw
Q2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KTsKLSAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmdldCgp
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzKQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQqPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChj
ZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2Vs
bCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5z
dHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwotfQotCi0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCShyZXZpc2lv
biAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAK
LS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RP
TVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0jaW5jbHVkZSAi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgOiBwdWJsaWMgSlNUZXN0U2VyaWFsaXphdGlv
biB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb247Ci0gICAg
dXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDsKLSAgICBzdGF0aWMg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0PiYmIGltcGwpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJl
dHVybiBwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0gICAgREVD
TEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6
ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHdyYXBwZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCY+KEJhc2U6OndyYXBw
ZWQoKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0PiYmKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsK
LQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQ7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCo7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShy
ZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSwzMDkgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIgotCi0jaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgotI2luY2x1ZGUgIkpT
RE9NQ29udmVydE51bWJlcnMuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
Ci0jaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotLy8gRnVuY3Rp
b25zCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6Q2FsbEZyYW1lKik7Ci0KLS8vIEF0dHJpYnV0ZXMKLQotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFs
TG9uZ0F0dHJpYnV0ZUZvbyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlQmFyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFBy
b3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgot
ICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNF
X1NIQVJBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUsIEJhc2Up
OwotICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7Ci0gICAgfQotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKLX07Ci1TVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsUHJvdG90eXBlOjpCYXNlKTsKLQotdXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD47Ci0KLXRlbXBsYXRlPD4gSlNWYWx1ZSBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVj
dG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLX0KLQotdGVtcGxh
dGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJj
b25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0
cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9IH0s
Ci0gICAgeyAiZmluYWxMb25nQXR0cmlidXRlRm9vIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlRm9vKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbykgfSB9LAotICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUJh
ciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhciksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIpIH0gfSwK
LSAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVG
dW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKLX07Ci0KLWNvbnN0IENsYXNzSW5m
byBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpzX2luZm8gPSB7ICJU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bFByb3RvdHlwZSkgfTsKLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbDo6aW5mbygpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJv
dG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKLSAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VU
X1RSQU5TSVRJT04oKTsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKSB9OwotCi1KU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsOjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+JiYgaW1wbCkKLSAgICA6IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQotewotfQotCi12b2lk
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
LXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKLQotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVE
T01PYmplY3QsIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6dmFsdWUsICJJbnRlcmZh
Y2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1l
bnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQotCi1KU09i
amVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Y3JlYXRlUHJvdG90eXBlKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNv
bnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcj4odm0s
ICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQot
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYXN0KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0g
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwqIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2Fz
dChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJh
bWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhp
c1ZhbHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCi17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3Rv
dHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVGb28oKSkpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9u
Z0F0dHJpYnV0ZUZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJm
aW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1
dGVGb28oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRy
aWJ1dGVGb28oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnNldDxzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExv
bmdBdHRyaWJ1dGVGb28iKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwmIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkpKSk7Ci19Ci0KLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVCYXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmluYWxMb25n
QXR0cmlidXRlQmFyIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
LSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0RmluYWxMb25nQXR0cmlidXRlQmFyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFy
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmli
dXRlQmFyIik7Ci19Ci0KLUpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJp
YWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0KLSAgICBhdXRvIGZpbmFsTG9uZ0F0
dHJpYnV0ZUJhclZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9u
Z0F0dHJpYnV0ZUJhckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwg
ZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiB0
aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09i
amVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+OjpjYWxsPGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQ
cm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAidG9KU09OIik7Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsLmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsPiB8fCAhSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
PikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAs
IHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4g
SVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmdldCgpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwqPihjZWxsKTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9y
Q2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNl
bGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51
cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwot
fQotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwuaAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCA6IHB1YmxpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Ci1wdWJsaWM6
Ci0gICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OwotICAgIHVzaW5n
IERPTVdyYXBwZWQgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDsKLSAgICBzdGF0aWMg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbD4mJiBpbXBsKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPihnbG9iYWxPYmplY3QtPnZtKCkuaGVh
cCkpIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwoc3RydWN0dXJlLCAqZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltcGwpKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QtPnZtKCkpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QmKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwg
SlNDOjpOb25BcnJheSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAg
ICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRs
eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bCYgd3JhcHBlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmPihCYXNlOjp3cmFwcGVkKCkpOwotICAgIH0KLXBy
b3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotCi0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbD4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkocmV2aXNp
b24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNSArOTcsNSBAQAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0g
RmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFycmF5KCk7CiAKICAgICBbRXhwb3NlZD1XaW5kb3csIE1h
eVRocm93RXhjZXB0aW9uXSBzdHJpbmdpZmllcjsKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1
dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRE9NUG9pbnRSZWFkT25seS5pZGwJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NSArNDUsNSBAQAogCiAgICAgW01heVRocm93RXhjZXB0aW9uXSBET01Qb2ludCBtYXRyaXhUcmFu
c2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4SW5pdCBtYXRyaXgpOwogCi0gICAgc2VyaWFsaXplciA9
IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0RPTVF1YWQuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9pbnQgcDQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgW1NhbWVP
YmplY3RdLgogICAgIFtOZXdPYmplY3RdIERPTVJlY3QgZ2V0Qm91bmRzKCk7CiAKLSAgICBzZXJp
YWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHkuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAy
NjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3Ry
aWN0ZWQgZG91YmxlIGJvdHRvbTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVk
IGRvdWJsZSBsZWZ0OwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bl
cmZvcm1hbmNlRW50cnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2VFbnRyeS5pZGwJKHJldmlzaW9uIDI2NzAwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAg
dHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJl
c1RpbWVTdGFtcCBzdGFydFRpbWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNU
aW1lU3RhbXAgZHVyYXRpb247Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaAkocmV2aXNpb24gMjY3MDA3KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHJlc3BvbnNlRW5k
KCkgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9yPFJlZjxQZXJmb3JtYW5jZVNlcnZlclRpbWluZz4+
JiBzZXJ2ZXJUaW1pbmcoKSBjb25zdCB7IHJldHVybiBtX3NlcnZlclRpbWluZzsgfQogCisgICAg
VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6UmVzb3VyY2U7IH0KKyAgICBB
U0NJSUxpdGVyYWwgZW50cnlUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gInJlc291cmNlIl9z
OyB9CisKIHByaXZhdGU6CiAgICAgUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZyhNb25vdG9uaWNU
aW1lIHRpbWVPcmlnaW4sIFJlc291cmNlVGltaW5nJiYpOwogICAgIH5QZXJmb3JtYW5jZVJlc291
cmNlVGltaW5nKCk7CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBl
OjpSZXNvdXJjZTsgfQotICAgIEFTQ0lJTGl0ZXJhbCBlbnRyeVR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAicmVzb3VyY2UiX3M7IH0KLQogICAgIGRvdWJsZSBuZXR3b3JrTG9hZFRpbWVUb0RP
TUhpZ2hSZXNUaW1lU3RhbXAoU2Vjb25kcykgY29uc3Q7CiAKICAgICBBdG9tU3RyaW5nIG1faW5p
dGlhdG9yVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJj
ZVRpbWluZy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZVJlc291cmNlVGltaW5nLmlkbAkocmV2aXNpb24gMjY3MDA3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NSArNTMsNSBAQCB0eXBlZGVmIGRvdWJsZSBET01IaWdoUmVzVGltZVN0YW1wOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0YW1wIHJlc3BvbnNlRW5kOwogICAgIFtFbmFi
bGVkQXRSdW50aW1lPVNlcnZlclRpbWluZ10gcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5
PFBlcmZvcm1hbmNlU2VydmVyVGltaW5nPiBzZXJ2ZXJUaW1pbmc7CiAKLSAgICBzZXJpYWxpemVy
ID0geyBpbmhlcml0LCBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigp
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmcu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJU
aW1pbmcuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZv
cm1hbmNlU2VydmVyVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzYsNSArMzYsNSBAQCB0
eXBlZGVmIGRvdWJsZSBET01IaWdoUmVzVGltZVN0YW1wOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVT
dGFtcCBkdXJhdGlvbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlc2NyaXB0
aW9uOwotICAgIHNlcmlhbGl6ZXIgPSB7YXR0cmlidXRlfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1p
bmcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1p
bmcuaWRsCShyZXZpc2lvbiAyNjcwMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlVGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTQsNSArNTQsNSBAQAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZEV2ZW50U3RhcnQ7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkRXZlbnRFbmQ7CiAKLSAgICBz
ZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigp
OwogfTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAwNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA5LTEzICBTYW0gV2Vpbmln
ICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJpYWxp
emFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzY4NjY4NDA3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSB0ZXN0IGFuZCByZXN1bHRzIHRvIGFjY291bnQgZm9yIFJUQ0ljZUNh
bmRpZGF0ZS50b0pTT04oKSAKKyAgICAgICAgbm93IHJldHVybmluZyBSVENJY2VDYW5kaWRhdGVJ
bml0LgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWw6
CisKIDIwMjAtMDktMTMgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBN
YWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmdW5jdGlvbnMgcGFyYW1ldGVycyBub3QgZGVm
YXVsdCB0byB1bmRlZmluZWQKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI2NzAw
NykKKysrIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcsMTEgKzE3LDExIEBAIFBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihqc28KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikud3JpdGFibGUgaXMgdHJ1ZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5jb25maWd1
cmFibGUgaXMgdHJ1ZQogUEFTUyBjaGlsZENhbmRpZGF0ZS50b0pTT04oKTsgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogQ2FuIG9ubHkgY2FsbCBSVENJY2VDYW5kaWRhdGUudG9KU09OIG9uIGlu
c3RhbmNlcyBvZiBSVENJY2VDYW5kaWRhdGUuCi1QQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0
ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwi
LFwic2RwTUxpbmVJbmRleFwiOjZ9IgotUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9K
U09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNk
cE1MaW5lSW5kZXhcIjo2fSIKLVBBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigp
KSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGlu
ZUluZGV4XCI6Nn0iCi1QQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMg
IntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRl
eFwiOjZ9IgotUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJj
YW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2
fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlk
YXRlXCI6XCJmb29cIixcInNkcE1MaW5lSW5kZXhcIjo2LFwic2RwTWlkXCI6XCJiYXJcIixcInVz
ZXJuYW1lRnJhZ21lbnRcIjpudWxsfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRv
SlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1MaW5lSW5kZXhcIjo2LFwi
c2RwTWlkXCI6XCJiYXJcIixcInVzZXJuYW1lRnJhZ21lbnRcIjpudWxsfSIKK1BBU1MgSlNPTi5z
dHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixc
InNkcE1MaW5lSW5kZXhcIjo2LFwic2RwTWlkXCI6XCJiYXJcIixcInVzZXJuYW1lRnJhZ21lbnRc
IjpudWxsfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wi
Y2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1MaW5lSW5kZXhcIjo2LFwic2RwTWlkXCI6XCJiYXJc
IixcInVzZXJuYW1lRnJhZ21lbnRcIjpudWxsfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlk
YXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1MaW5lSW5kZXhc
Ijo2LFwic2RwTWlkXCI6XCJiYXJcIixcInVzZXJuYW1lRnJhZ21lbnRcIjpudWxsfSIKIAogQXR0
cmlidXRlcyBhcmUgcmVhZG9ubHkKIGNhbmRpZGF0ZS5jYW5kaWRhdGUgPSAiZm9vLXVwZGF0ZWQi
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLmh0bWwJKHJldmlzaW9uIDI2NzAwNykKKysrIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE1ICszMCwxNSBA
QAogICAgICAgICAgICAgdmFyIGNoaWxkQ2FuZGlkYXRlID0gbmV3IGNoaWxkUlRDSWNlQ2FuZGlk
YXRlKCk7CiAgICAgICAgICAgICBzaG91bGRUaHJvdygnY2hpbGRDYW5kaWRhdGUudG9KU09OKCk7
Jyk7CiAKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnko
Y2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIs
InNkcE1MaW5lSW5kZXgiOjZ9Jyk7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28i
LCJzZHBNTGluZUluZGV4Ijo2LCJzZHBNaWQiOiJiYXIiLCJ1c2VybmFtZUZyYWdtZW50IjpudWxs
fScpOwogICAgICAgICAgICAgY2FuZGlkYXRlLm5ld0F0dHJpYnV0ZSA9ICJuZXcgdmFsdWUiOwot
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRh
dGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxp
bmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5z
dHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1M
aW5lSW5kZXgiOjYsInNkcE1pZCI6ImJhciIsInVzZXJuYW1lRnJhZ21lbnQiOm51bGx9Jyk7CiAg
ICAgICAgICAgICBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCA9ICJub3QgYSBudW1iZXIiOwotICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUu
dG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJ
bmRleCI6Nn0nKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJp
bmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1MaW5l
SW5kZXgiOjYsInNkcE1pZCI6ImJhciIsInVzZXJuYW1lRnJhZ21lbnQiOm51bGx9Jyk7CiAgICAg
ICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0gNzsKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0
ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7CisgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04o
KSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNTGluZUluZGV4Ijo2LCJzZHBNaWQiOiJiYXIi
LCJ1c2VybmFtZUZyYWdtZW50IjpudWxsfScpOwogICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1p
ZCA9IG51bGw7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5n
aWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJi
YXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoi
Zm9vIiwic2RwTUxpbmVJbmRleCI6Niwic2RwTWlkIjoiYmFyIiwidXNlcm5hbWVGcmFnbWVudCI6
bnVsbH0nKTsKIAogICAgICAgICAgICAgZGVidWcoIiIpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAwNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wOS0x
MyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYklETF0gUmVw
bGFjZSAnc2VyaWFsaXphYmxlJyB3aXRoICdbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpJworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MTQ4CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS82ODY2ODQwNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgcmVzdWx0cyB0byBhY2NvdW50IGZvciBub3cg
Y29ycmVjdGx5IHJldHVybmluZyBET01Qb2ludHMsCisgICAgICAgIHJhdGhlciB0aGFuIHZhbmls
bGEgT2JqZWN0cywgZm9yIHRoZSBwb2ludHMgaW4gYSBET01RdWFkIHdoZW4gdXNpbmcKKyAgICAg
ICAgdG9KU09OLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9nZW9tZXRyeS9p
ZGxoYXJuZXNzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2dlb21ldHJ5L2lkbGhhcm5lc3Mud29ya2VyLWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wOS0xMiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI2
NjgxNyk6IEFTU0VSVElPTiBGQUlMRUQ6IGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSBv
biBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZpY2Utd29ya2Vycy9zZXJ2aWNl
LXdvcmtlci9zdmctdGFyZ2V0LXJlZnRlc3QuaHR0cHMuaHRtbApJbmRleDogTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvZ2VvbWV0cnkvaWRsaGFybmVzcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvZ2VvbWV0cnkvaWRsaGFybmVzcy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDI2NzAwNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2dlb21ldHJ5L2lkbGhhcm5lc3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xNjQsNyArMTY0LDcgQEAgUEFTUyBET01RdWFkIGludGVyZmFjZTogbmV3IERPTVF1YWQoKSBt
dQogUEFTUyBET01RdWFkIGludGVyZmFjZTogbmV3IERPTVF1YWQoKSBtdXN0IGluaGVyaXQgcHJv
cGVydHkgInA0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKIFBBU1MgRE9NUXVhZCBpbnRlcmZhY2U6
IG5ldyBET01RdWFkKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRCb3VuZHMoKSIgd2l0aCB0
aGUgcHJvcGVyIHR5cGUgCiBQQVNTIERPTVF1YWQgaW50ZXJmYWNlOiBuZXcgRE9NUXVhZCgpIG11
c3QgaW5oZXJpdCBwcm9wZXJ0eSAidG9KU09OKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIAotRkFJ
TCBET01RdWFkIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG5ldyBET01R
dWFkKCkgYXNzZXJ0X3RydWU6IGluc3RhbmNlb2YgRE9NUG9pbnQgZXhwZWN0ZWQgdHJ1ZSBnb3Qg
ZmFsc2UKK1BBU1MgRE9NUXVhZCBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBv
biBuZXcgRE9NUXVhZCgpIAogUEFTUyBET01NYXRyaXhSZWFkT25seSBpbnRlcmZhY2U6IGV4aXN0
ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAogUEFTUyBET01NYXRyaXhS
ZWFkT25seSBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCAKIFBBU1MgRE9NTWF0cml4UmVhZE9ubHkg
aW50ZXJmYWNlIG9iamVjdCBuYW1lIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvZ2VvbWV0cnkvaWRsaGFybmVzcy53b3JrZXItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY3NzL2dlb21ldHJ5L2lkbGhhcm5lc3Mud29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMjY3MDA3KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvZ2VvbWV0cnkvaWRsaGFybmVzcy53b3JrZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgUEFTUyBET01RdWFkIGludGVyZmFjZTogbmV3IERPTVF1
YWQoKSBtdQogUEFTUyBET01RdWFkIGludGVyZmFjZTogbmV3IERPTVF1YWQoKSBtdXN0IGluaGVy
aXQgcHJvcGVydHkgInA0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKIFBBU1MgRE9NUXVhZCBpbnRl
cmZhY2U6IG5ldyBET01RdWFkKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRCb3VuZHMoKSIg
d2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBQQVNTIERPTVF1YWQgaW50ZXJmYWNlOiBuZXcgRE9NUXVh
ZCgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAidG9KU09OKCkiIHdpdGggdGhlIHByb3BlciB0eXBl
IAotRkFJTCBET01RdWFkIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG5l
dyBET01RdWFkKCkgYXNzZXJ0X3RydWU6IGluc3RhbmNlb2YgRE9NUG9pbnQgZXhwZWN0ZWQgdHJ1
ZSBnb3QgZmFsc2UKK1BBU1MgRE9NUXVhZCBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJh
dGlvbiBvbiBuZXcgRE9NUXVhZCgpIAogUEFTUyBET01NYXRyaXhSZWFkT25seSBpbnRlcmZhY2U6
IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAogUEFTUyBET01N
YXRyaXhSZWFkT25seSBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCAKIFBBU1MgRE9NTWF0cml4UmVh
ZE9ubHkgaW50ZXJmYWNlIG9iamVjdCBuYW1lIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408717</attachid>
            <date>2020-09-14 09:49:29 -0700</date>
            <delta_ts>2020-09-14 10:21:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216148-20200914094928.patch</filename>
            <type>text/plain</type>
            <size>346545</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA5LTEzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJp
YWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBvYmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgUmVwbGFjZSB0aGUgJ3NlcmlhbGl6YWJs
ZScga2V5d29yZCwgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFdlYklETCwKKyAgICAgICAg
d2l0aCBpdHMgcmVwbGFjZW1lbnQsICdbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpJy4KKyAgICAg
ICAgCisgICAgICAgIFRoZSBuZXcgdmVyc2lvbiBpcyBwcmV0dHkgc2ltaWxhciwgYnV0IGhhcyBt
dWNoIGxlc3Mgcm9vbSBmb3IgY3VzdG9taXphdGlvbgorICAgICAgICBpbiB0aGF0IHlvdSBjYW4g
bm8gbG9uZ2VyIHNwZWNpZnkgd2hpY2ggYXR0cmlidXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIEpT
T04KKyAgICAgICAgcmVzdWx0LiBSYXRoZXIsIGFsbCBhdHRyaWJ1dGVzIHRoYXQgcXVhbGlmeSBh
cyBoYXZpbmcgYSAnSlNPTiB0eXBlJyBhcmUgaW5jbHVkZWQKKyAgICAgICAgZm9yIHRoZSBpbnRl
cmZhY2UgaXRzZWxmIGFuZCBhbGwgYW5jZXN0b3IgaW50ZXJmYWNlcy4gSW50ZXJmYWNlcyB0aGF0
IG5lZWQgbW9yZQorICAgICAgICBjb250cm9sIGNhbiBwcm92aWRlIHRoZWlyIG93biB0b0pTT04g
b3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbmRlZAorICAgICAgICBhdHRyaWJ1dGUu
CisKKyAgICAgICAgVGhpcyB1cGRhdGVzIGFsbCB0aGUgSURMcyB0aGF0IHVzZWQgc2VyaWFsaXpl
ciB0byB1c2UgdGhlIG5ldyBbRGVmYXVsdF0gZXhjZXB0CisgICAgICAgIFJUQ0ljZUNhbmRpZGF0
ZS5pZGwsIHdoaWNoIGlzIHNwZWNpZmllZCB0byBoYXZlIGEgY3VzdG9tIHRvSlNPTiB0aGF0IHJl
dHVybnMKKyAgICAgICAgYSBSVENJY2VDYW5kaWRhdGVJbml0LCBzbyB0aGF0IHdhcyBpbXBsZW1l
bnRlZCBpbnN0ZWFkLgorCisgICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbDoKKyAg
ICAgICAgKiBkb20vRE9NUG9pbnRSZWFkT25seS5pZGw6CisgICAgICAgICogZG9tL0RPTVF1YWQu
aWRsOgorICAgICAgICAqIGRvbS9ET01SZWN0UmVhZE9ubHkuaWRsOgorICAgICAgICAqIHBhZ2Uv
UGVyZm9ybWFuY2VFbnRyeS5pZGw6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmg6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDoK
KyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbDoKKyAgICAgICAgKiBw
YWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGw6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
aWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRBZGRyZXNzLmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5pZGw6
CisgICAgICAgIFVwZGF0ZSBJRExzIHJlcGxhY2luZyBhbGwgdXNlIG9mIHNlcmlhbGl6ZXIuCisg
ICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAg
ICAgICAgKEludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24pOgorICAgICAgICAoSXNK
U09OVHlwZSk6CisgICAgICAgIChJbmhlcml0c1NlcmlhbGl6YWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJc1NlcmlhbGl6YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSXNTZXJpYWxpemFi
bGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoUHJvdG90eXBlT3BlcmF0aW9uQ291bnQpOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxl
KToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVP
cGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdE9wZXJhdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5p
dGlvbik6CisgICAgICAgIChHZXRSdW50aW1lRW5hYmxlZFN0YXRpY1Byb3BlcnRpZXMpOgorICAg
ICAgICAoR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChjbG9uZU9wZXJhdGlvbik6
CisgICAgICAgIChwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1iZXIpOgorICAgICAgICAoYXBwbHlN
ZW1iZXJMaXN0KToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IERlbGV0ZWQuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6ZXJSZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmli
dXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
Lmpzb246CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBbRGVmYXVsdF0gdG9KU09OIGFuZCByZW1v
dmUgc3VwcG9ydCBmb3Igc2VyaWFsaXplci4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmlkbDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsOiBSZW1vdmVkLgorICAgICAgICBVcGRhdGUg
dGVzdHMuCisKIDIwMjAtMDktMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbQ0ddIENhY2hlIHRoZSBsYXN0IHN0YXR1cyBvZiB0aGUgaW1h
Z2UgZW5jb2RlZCBkYXRhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlSW5mby5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYURldmljZUluZm8uaWRsCShyZXZpc2lvbiAyNjcwMTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVk
aWFEZXZpY2VLaW5kIGtpbmQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBsYWJl
bDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGdyb3VwSWQ7Ci0gICAgc2VyaWFs
aXplciA9IHthdHRyaWJ1dGV9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9Owog
CiAvLyBGSVhNRSAxNjk4NzE6IG1pc3NpbmcgSW5wdXREZXZpY2VJbmZvCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUu
Y3BwCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0ljZUNhbmRpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDE1IEBA
IFJlZjxSVENJY2VDYW5kaWRhdGU+IFJUQ0ljZUNhbmRpZGF0ZTo6Y3IKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlkYXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5k
ZXgsIFdURk1vdmUoKmZpZWxkcykpKTsKIH0KIAorUlRDSWNlQ2FuZGlkYXRlSW5pdCBSVENJY2VD
YW5kaWRhdGU6OnRvSlNPTigpIGNvbnN0Cit7CisgICAgUlRDSWNlQ2FuZGlkYXRlSW5pdCByZXN1
bHQ7CisgICAgcmVzdWx0LmNhbmRpZGF0ZSA9IG1fY2FuZGlkYXRlOworICAgIHJlc3VsdC5zZHBN
aWQgPSBtX3NkcE1pZDsKKyAgICByZXN1bHQuc2RwTUxpbmVJbmRleCA9IG1fc2RwTUxpbmVJbmRl
eDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX1JUQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAkocmV2aXNpb24gMjY3MDE3KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOCBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8dW5z
aWduZWQgc2hvcnQ+IHJlbGF0ZWRQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9maWVsZHMucmVsYXRl
ZFBvcnQ7IH0KICAgICBTdHJpbmcgdXNlcm5hbWVGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmllbGRzLnVzZXJuYW1lRnJhZ21lbnQ7IH0KIAorICAgIFJUQ0ljZUNhbmRpZGF0ZUluaXQgdG9K
U09OKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgUlRDSWNlQ2FuZGlkYXRlKGNvbnN0IFN0cmlu
ZyYgY2FuZGlkYXRlLCBjb25zdCBTdHJpbmcmIHNkcE1pZCwgT3B0aW9uYWw8dW5zaWduZWQgc2hv
cnQ+IHNkcE1MaW5lSW5kZXgsIEZpZWxkcyYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAkocmV2aXNp
b24gMjY3MDE3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VD
YW5kaWRhdGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw1IEBACiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0PyByZWxhdGVkUG9ydDsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nPyB1c2VybmFtZUZyYWdtZW50OwogCi0gICAgLy8gRklYTUUgMTY5
NjYyOiBhZGQgdWZyYWcgdG8gdGhlIGxpc3QKLSAgICBzZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwg
c2RwTWlkLCBzZHBNTGluZUluZGV4fTsKKyAgICBSVENJY2VDYW5kaWRhdGVJbml0IHRvSlNPTigp
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlSW5pdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGVJbml0LmlkbAkocmV2aXNpb24gMjY3MDE3KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVJbml0LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VC
X1JUQywKLSAgICBFbmFibGVkQXRSdW50aW1lPVBlZXJDb25uZWN0aW9uCisgICAgRW5hYmxlZEF0
UnVudGltZT1QZWVyQ29ubmVjdGlvbiwKKyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAogXSBkaWN0
aW9uYXJ5IFJUQ0ljZUNhbmRpZGF0ZUluaXQgewogICAgIERPTVN0cmluZyBjYW5kaWRhdGUgPSAi
IjsKICAgICBET01TdHJpbmc/IHNkcE1pZCA9IG51bGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUg
KzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgUlRDU2RwVHlwZSB0eXBlOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOwogCi0gICAgc2VyaWFsaXplciA9IHt0eXBl
LCBzZHB9OworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRkcmVzcy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50QWRk
cmVzcy5pZGwJKHJldmlzaW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudEFkZHJlc3MuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBTZWN1cmVDb250ZXh0
CiBdIGludGVyZmFjZSBQYXltZW50QWRkcmVzcyB7Ci0gICAgc2VyaWFsaXplciA9IHsgYXR0cmli
dXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGNvdW50cnk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFy
cmF5PERPTVN0cmluZz4gYWRkcmVzc0xpbmU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyByZWdpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0
L1BheW1lbnRSZXNwb25zZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2UuaWRsCShyZXZpc2lvbiAyNjcwMTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBKU0N1c3RvbU1hcmtGdW5j
dGlvbiwKICAgICBTZWN1cmVDb250ZXh0LAogXSBpbnRlcmZhY2UgUGF5bWVudFJlc3BvbnNlIDog
RXZlbnRUYXJnZXQgewotICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OworICAgIFtEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IHJlcXVlc3RJZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1ldGhvZE5hbWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yLnBtCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3IucG0JKHdvcmtpbmcgY29weSkKQEAgLTExOTQsNTAgKzExOTQsNjQg
QEAgc3ViIElzV3JhcHBlclR5cGUKICAgICByZXR1cm4gMDsKIH0KIAotc3ViIEluaGVyaXRzU2Vy
aWFsaXphYmxlCitzdWIgSW50ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbgogewogICAg
IG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlKSA9IEBfOwogCi0gICAgbXkgJGFueVBhcmVudElzU2Vy
aWFsaXphYmxlID0gMDsKLSAgICAkb2JqZWN0LT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZhY2UsIHN1
YiB7Ci0gICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSBzaGlmdDsKLSAgICAgICAgJGFueVBh
cmVudElzU2VyaWFsaXphYmxlID0gMSBpZiAkcGFyZW50SW50ZXJmYWNlLT5zZXJpYWxpemFibGU7
Ci0gICAgfSwgMCk7Ci0KLSAgICByZXR1cm4gJGFueVBhcmVudElzU2VyaWFsaXphYmxlOworICAg
IGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgeworICAg
ICAgICBpZiAoISRvcGVyYXRpb24tPmlzU3RhdGljICYmICRvcGVyYXRpb24tPm5hbWUgZXEgInRv
SlNPTiIpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiAwOwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVUeXBlCisjIGh0dHBzOi8vaGV5Y2FtLmdp
dGh1Yi5pby93ZWJpZGwvI2Rmbi1qc29uLXR5cGVzCitzdWIgSXNKU09OVHlwZQogewogICAgIG15
ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkdHlwZSkgPSBAXzsKIAotICAgICMgaHR0cHM6Ly9oZXlj
YW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLXNlcmlhbGl6YWJsZS10eXBlCi0KKyAgICByZXR1cm4g
MSBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZS0+bmFt
ZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNOdW1lcmljVHlwZSgk
dHlwZSk7Ci0gICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNFbnVtVHlwZSgkdHlwZSk7Ci0gICAg
cmV0dXJuIDEgaWYgJG9iamVjdC0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMCBp
ZiAkdHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIjsKLQotICAgIGlmICgkdHlwZS0+aXNVbmlv
biB8fCAkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBlKSkgewotICAgICAgICBkaWUgIlNl
cmlhbGl6ZXJzIGZvciB1bmlvbiBhbmQgZGljdGlvbmFyeSB0eXBlcyBhcmUgbm90IGN1cnJlbnRs
eSBzdXBwb3J0ZWQuXG4iOwotICAgIH0KKyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1N0cmlu
Z09yRW51bVR5cGUoJHR5cGUpOwogCiAgICAgaWYgKCRvYmplY3QtPklzU2VxdWVuY2VPckZyb3pl
bkFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgbXkgJHN1YnR5cGUgPSBAeyR0eXBlLT5zdWJ0
eXBlc31bMF07Ci0KLSAgICAgICAgIyBGSVhNRTogd2Via2l0Lm9yZy9iLzE5NDQzOSBbV2ViSURM
XSBTdXBwb3J0IHNlcmlhbGl6aW5nIHNlcXVlbmNlcyBhbmQgRnJvemVuQXJyYXlzIG9mIGludGVy
ZmFjZXMKLSAgICAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCRzdWJ0
eXBlKTsKLQotICAgICAgICByZXR1cm4gJG9iamVjdC0+SXNTZXJpYWxpemFibGVUeXBlKCRpbnRl
cmZhY2UsICRzdWJ0eXBlKTsKKyAgICAgICAgcmV0dXJuICRvYmplY3QtPklzSlNPTlR5cGUoJGlu
dGVyZmFjZSwgJHN1YnR5cGUpOworICAgIH0KKyAgICBpZiAoJG9iamVjdC0+SXNSZWNvcmRUeXBl
KCR0eXBlKSkgeworICAgICAgICBteSAkdmFsdWVTdWJ0eXBlID0gQHskdHlwZS0+c3VidHlwZXN9
WzBdOworICAgICAgICByZXR1cm4gJG9iamVjdC0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkdmFs
dWVTdWJ0eXBlKTsKICAgICB9CiAKLSAgICByZXR1cm4gMCBpZiAhJG9iamVjdC0+SXNJbnRlcmZh
Y2VUeXBlKCR0eXBlKTsKKyAgICBpZiAoJG9iamVjdC0+SXNJbnRlcmZhY2VUeXBlKCR0eXBlKSkg
eworICAgICAgICAjIFNwZWNpYWwgY2FzZSBFdmVudEhhbmRsZXIsIHNpbmNlIHRoZXJlIGlzIG5v
IHJlYWwgSURMIGZvciBpdC4KKyAgICAgICAgcmV0dXJuIDAgaWYgJHR5cGUtPm5hbWUgZXEgIkV2
ZW50SGFuZGxlciI7CisKKyAgICAgICAgbXkgJGludGVyZmFjZSA9ICRvYmplY3QtPkdldEludGVy
ZmFjZUZvclR5cGUoJGludGVyZmFjZSwgJHR5cGUpOworICAgICAgICBpZiAoJG9iamVjdC0+SW50
ZXJmYWNlSGFzUmVndWxhclRvSlNPTk9wZXJhdGlvbigkaW50ZXJmYWNlKSkgeworICAgICAgICAg
ICAgcmV0dXJuIDE7CisgICAgICAgIH0KIAotICAgIG15ICRpbnRlcmZhY2VGb3JUeXBlID0gJG9i
amVjdC0+R2V0SW50ZXJmYWNlRm9yVHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7Ci0gICAgaWYgKCRp
bnRlcmZhY2VGb3JUeXBlKSB7Ci0gICAgICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VGb3JUeXBl
LT5zZXJpYWxpemFibGU7Ci0gICAgICAgIHJldHVybiAkb2JqZWN0LT5Jbmhlcml0c1NlcmlhbGl6
YWJsZSgkaW50ZXJmYWNlRm9yVHlwZSk7CisgICAgICAgIG15ICRhbnlQYXJlbnRIYXNSZWd1bGFy
VG9KU09OT3BlcmF0aW9uID0gMDsKKyAgICAgICAgJG9iamVjdC0+Rm9yQWxsUGFyZW50cygkaW50
ZXJmYWNlLCBzdWIgeworICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0Owor
ICAgICAgICAgICAgJGFueVBhcmVudEhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24gPSAxIGlmICRv
YmplY3QtPkludGVyZmFjZUhhc1JlZ3VsYXJUb0pTT05PcGVyYXRpb24oJHBhcmVudEludGVyZmFj
ZSk7CisgICAgICAgIH0sIDApOworICAgICAgICAKKyAgICAgICAgaWYgKCRhbnlQYXJlbnRIYXNS
ZWd1bGFyVG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBpZiAoJHR5cGUtPmlzVW5pb24pIHsKKyAgICAgICAgIyBGSVhN
RTogVW5pb24gdHlwZXMgc2hvdWxkIGJlIHN1cHBvcnRlZCBpZiBhbGwgdGhlIG1lbWJlciB0eXBl
cyBhcmUgSlNPTiB0eXBlcy4KKyAgICAgICAgZGllICJEZWZhdWx0IHRvSlNPTiBpcyBjdXJyZW50
bHkgbm90IHN1cHBvcnRlZCBmb3IgdW5pb24gdHlwZXMuXG4iOworICAgIH0KKyAgICBpZiAoJG9i
amVjdC0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAgIyBGSVhNRTogRGljdGlv
bmFyeSB0eXBlcyBzaG91bGQgYmUgc3VwcG9ydGVkIGlmIGFsbCBtZW1iZXJzIGRlY2xhcmVkIG9u
IHRoZSBkaWN0aW9uYXJ5IGFuZCBhbGwgaXRzIGluaGVyaXRlZCBkaWN0aW9uYXJpZXMgYXJlIEpT
T04gdHlwZXMuCisgICAgICAgIGRpZSAiRGVmYXVsdCB0b0pTT04gaXMgY3VycmVudGx5IG5vdCBz
dXBwb3J0ZWQgZm9yIGRpY3Rpb25hcnkgdHlwZXMuXG4iOwogICAgIH0KIAogICAgIHJldHVybiAw
OwpAQCAtMTI0OSwxNyArMTI2Myw2IEBAIHN1YiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1c3RvbUdl
dHRlckV4dGUKICAgICByZXR1cm4gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2Fj
aGVkQXR0cmlidXRlfSB8fCAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21H
ZXR0ZXJ9OwogfQogCi1zdWIgSXNTZXJpYWxpemFibGVBdHRyaWJ1dGUKLXsKLSAgICBteSAoJG9i
amVjdCwgJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkgPSBAXzsKLQotICAgIGlmICgkb2JqZWN0LT5J
c1NlcXVlbmNlVHlwZSgkYXR0cmlidXRlLT50eXBlKSAmJiBoYXNDYWNoZWRBdHRyaWJ1dGVPckN1
c3RvbUdldHRlckV4dGVuZGVkQXR0cmlidXRlKCRhdHRyaWJ1dGUpKSB7Ci0gICAgICAgIGRpZSAi
U2VyaWFsaXplcnMgZm9yIHNlcXVlbmNlIHR5cGVzIHdpdGggQ2FjaGVkQXR0cmlidXRlIG9yIEN1
c3RvbUdldHRlciBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRl
ZC5cbiI7Ci0gICAgfQotCi0gICAgcmV0dXJuICRvYmplY3QtPklzU2VyaWFsaXphYmxlVHlwZSgk
aW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBlKTsKLX0KLQogc3ViIEdldEludGVyZmFjZUV4dGVu
ZGVkQXR0cmlidXRlc0Zyb21OYW1lCiB7CiAgICAgIyBGSVhNRTogSXQncyBiYWQgdG8gaGF2ZSBh
IGZ1bmN0aW9uIGxpa2UgdGhpcyB0aGF0IG9wZW5zIGFub3RoZXIgSURMIGZpbGUgdG8gYW5zd2Vy
IGEgcXVlc3Rpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTE4NDQsNyArMTg0NCw2IEBAIHN1YiBQcm90b3R5cGVPcGVyYXRpb25Db3VudAogICAgICRjb3Vu
dCArPSBzY2FsYXIgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+b3BlcmF0aW9uc30gaWYgJGludGVy
ZmFjZS0+aXRlcmFibGU7CiAgICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPm1hcExp
a2UtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPm1hcExpa2U7CiAgICAgJGNvdW50ICs9IHNj
YWxhciBAeyRpbnRlcmZhY2UtPnNldExpa2UtPm9wZXJhdGlvbnN9IGlmICRpbnRlcmZhY2UtPnNl
dExpa2U7Ci0gICAgJGNvdW50ICs9IHNjYWxhciBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+
b3BlcmF0aW9uc30gaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgcmV0dXJuICRj
b3VudDsKIH0KQEAgLTI3NTcsMTEgKzI3NTYsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldExlZ2Fj
eUZhY3RvcnlGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIikgaWYg
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TGVnYWN5RmFjdG9yeUZ1bmN0aW9ufTsK
ICAgICB9CiAKLSAgICAjIFNlcmlhbGl6ZXIgZnVuY3Rpb24uCi0gICAgaWYgKCRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsICR7Y2xhc3NO
YW1lfSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTtcbiIpOwotICAgIH0KLSAgICAK
ICAgICBteSAkbnVtQ3VzdG9tT3BlcmF0aW9ucyA9IDA7CiAgICAgbXkgJG51bUN1c3RvbUF0dHJp
YnV0ZXMgPSAwOwogCkBAIC0zMTYzLDcgKzMxNTcsNiBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVz
SGFzaFRhYmxlCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+
b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsK
ICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9
KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVy
ZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAg
cHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9
KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9u
IChAb3BlcmF0aW9ucykgewogICAgICAgICBuZXh0IGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CiAgICAgICAgIG5leHQgaWYgKCRvcGVy
YXRpb24tPmlzU3RhdGljKTsKQEAgLTM5NzEsNyArMzk2NCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+
b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNlKTsK
ICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2UtPm9wZXJhdGlvbnN9
KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2goQG9wZXJhdGlvbnMsIEB7JGludGVy
ZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNldExpa2U7Ci0gICAg
cHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPm9wZXJhdGlvbnN9
KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAKICAgICBteSBAYXR0cmlidXRlcyA9IEB7
JGludGVyZmFjZS0+YXR0cmlidXRlc307CiAgICAgcHVzaChAYXR0cmlidXRlcywgQHskaW50ZXJm
YWNlLT5tYXBMaWtlLT5hdHRyaWJ1dGVzfSkgaWYgJGludGVyZmFjZS0+bWFwTGlrZTsKQEAgLTQ2
NTAsNyArNDY0Miw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogICAgIAog
ICAgIEdlbmVyYXRlSXRlcmFibGVEZWZpbml0aW9uKCRpbnRlcmZhY2UpIGlmICRpbnRlcmZhY2Ut
Pml0ZXJhYmxlOwotICAgIEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24oJGludGVyZmFjZSwg
JGNsYXNzTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkRPTUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldl
YkNvcmVKU0NsaWVudERhdGEuaCIpOwpAQCAtNTQwMCw3ICs1MzkxLDEwIEBAIHN1YiBHZW5lcmF0
ZU9wZXJhdGlvbkRlZmluaXRpb24KIAogICAgIHJldHVybiBpZiBJc0pTQnVpbHRpbigkaW50ZXJm
YWNlLCAkb3BlcmF0aW9uKTsKICAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNJdGVyYWJsZTsK
LSAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNTZXJpYWxpemVyOworICAgIAorICAgIGlmICgk
b3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEZWZhdWx0fSkgeworICAgICAgICByZXR1
cm4gR2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlvbigkb3V0cHV0QXJyYXksICRpbnRl
cmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOworICAgIH0KIAogICAgIG15ICRpc0N1c3Rv
bSA9IEhhc0N1c3RvbU1ldGhvZCgkb3BlcmF0aW9uKTsKICAgICBteSAkaXNPdmVybG9hZGVkID0g
JG9wZXJhdGlvbi0+e292ZXJsb2Fkc30gJiYgQHskb3BlcmF0aW9uLT57b3ZlcmxvYWRzfX0gPiAx
OwpAQCAtNTUyMCwxMDMgKzU1MTQsMTAzIEBAIHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRp
b24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRlbmRBcHBsZUNvcHlyaWdodCkgaWYgJGluQXBw
bGVDb3B5cmlnaHQ7CiB9CiAKLXN1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9uCitzdWIg
R2VuZXJhdGVEZWZhdWx0T3BlcmF0aW9uRGVmaW5pdGlvbgogewotICAgIG15ICgkaW50ZXJmYWNl
LCAkY2xhc3NOYW1lKSA9IEBfOwotCi0gICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNl
LT50eXBlLT5uYW1lOworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05h
bWUsICRvcGVyYXRpb24pID0gQF87CiAKLSAgICBteSAkcGFyZW50U2VyaWFsaXplckludGVyZmFj
ZSA9IDA7Ci0gICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewot
ICAgICAgICAkY29kZUdlbmVyYXRvci0+Rm9yQWxsUGFyZW50cygkaW50ZXJmYWNlLCBzdWIgewot
ICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OwotICAgICAgICAgICAgaWYg
KCRwYXJlbnRJbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSAmJiAhJHBhcmVudFNlcmlhbGl6ZXJJbnRl
cmZhY2UpIHsKLSAgICAgICAgICAgICAgICAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZSA9ICRw
YXJlbnRJbnRlcmZhY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIDApOwotICAgICAgICBk
aWUgIkZhaWxlZCB0byBmaW5kIHBhcmVudCBpbnRlcmZhY2Ugd2l0aCBcInNlcmlhbGl6ZXJcIiBm
b3IgXCJpbmhlcml0XCIgc2VyaWFsaXplciBpbiAkaW50ZXJmYWNlTmFtZVxuIiBpZiAhJHBhcmVu
dFNlcmlhbGl6ZXJJbnRlcmZhY2U7CisgICAgaWYgKCRvcGVyYXRpb24tPm5hbWUgZXEgInRvSlNP
TiIgJiYgJG9wZXJhdGlvbi0+dHlwZS0+bmFtZSBlcSAib2JqZWN0IikgeworICAgICAgICByZXR1
cm4gR2VuZXJhdGVEZWZhdWx0VG9KU09OT3BlcmF0aW9uRGVmaW5pdGlvbigkb3V0cHV0QXJyYXks
ICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRpb24pOwogICAgIH0KIAotICAgIG15IEBz
ZXJpYWxpemVkQXR0cmlidXRlcyA9ICgpOworICAgIGRpZSAiW0RlZmF1bHRdIGlzIG5vdCBzdXBw
b3J0IGZvciBmb3IgdGhpcyBvcGVyYXRpb24gKCIgLiAkb3BlcmF0aW9uLT5uYW1lIC4gIikuIEl0
IGlzIG9ubHkgY3VycmVudGx5IGRlZmluZWQgZm9yICdvYmplY3QgdG9KU09OKCk7Jy4iCit9CiAK
LSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1lIChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJs
ZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgbXkgJGZvdW5kQXR0cmlidXRlID0gMDsKLSAgICAg
ICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0g
ICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZU5hbWUgZXEgJGF0dHJpYnV0ZS0+bmFtZSkgewotICAg
ICAgICAgICAgICAgICRmb3VuZEF0dHJpYnV0ZSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1NlcmlhbGl6YWJsZUF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAkYXR0cmli
dXRlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBzZXJpYWxpemVkQXR0cmlidXRlcywg
JGF0dHJpYnV0ZSk7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBsYXN0Owot
ICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRp
ZSAiRXhwbGljaXQgXCJzZXJpYWxpemVyXCIgYXR0cmlidXRlIFwiJGF0dHJpYnV0ZU5hbWVcIiBp
cyBub3Qgc2VyaWFsaXphYmxlXG4iIGlmICEkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0F0
dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGRpZSAiRmFpbGVkIHRvIGZpbmQgXCJzZXJpYWxpemVyXCIgYXR0cmlidXRlIFwi
JGF0dHJpYnV0ZU5hbWVcIiBpbiAkaW50ZXJmYWNlTmFtZVxuIiBpZiAhJGZvdW5kQXR0cmlidXRl
OwotICAgIH0KK3N1YiBHZW5lcmF0ZURlZmF1bHRUb0pTT05PcGVyYXRpb25EZWZpbml0aW9uCit7
CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlv
bikgPSBAXzsKIAotICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gInRvSlNPTiI7Ci0g
ICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tf
bGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRv
ci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAgIyBodHRwczovL2hl
eWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kZWZhdWx0LXRvanNvbgogCi0gICAgQWRkVG9JbXBs
SW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOworICAgIG15
IEBpbmhlcml0ZW5jZVN0YWNrID0gKCk7CisgICAgcHVzaChAaW5oZXJpdGVuY2VTdGFjaywgJGlu
dGVyZmFjZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkZvckFsbFBhcmVudHMoJGludGVyZmFjZSwg
c3ViIHsKKyAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9IHNoaWZ0OworICAgICAgICBwdXNo
KEBpbmhlcml0ZW5jZVN0YWNrLCAkcGFyZW50SW50ZXJmYWNlKTsKKyAgICB9LCAwKTsKIAotICAg
IHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU09iamVjdCogSlMke2ludGVyZmFjZU5hbWV9Ojpz
ZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1l
fSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdClcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOworICAgIG15
ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwg
JG9wZXJhdGlvbik7CisKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSosICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcylcbiIpOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwogICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwogCi0gICAgaWYgKCRpbnRlcmZhY2UtPnNl
cmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgewotICAgICAgICBteSAkcGFyZW50U2VyaWFsaXplcklu
dGVyZmFjZU5hbWUgPSAkcGFyZW50U2VyaWFsaXplckludGVyZmFjZS0+dHlwZS0+bmFtZTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gSlMke3BhcmVudFNl
cmlhbGl6ZXJJbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xuIik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90
b3R5cGUoKSk7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KS0+b2JqZWN0UHJvdG90eXBlKCkpO1xuIik7CiAKLSAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUg
KEBzZXJpYWxpemVkQXR0cmlidXRlcykgewotICAgICAgICAjIEZJWE1FOiBBdHRyaWJ1dGVzIHRo
YXQgdGhyb3cgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHNlcmlhbGl6ZXJzIHll
dC4KKyAgICAgd2hpbGUgKEBpbmhlcml0ZW5jZVN0YWNrKSB7CisgICAgICAgIG15ICRjdXJyZW50
SW50ZXJmYWNlID0gcG9wKEBpbmhlcml0ZW5jZVN0YWNrKTsKIAotICAgICAgICBteSAkbmFtZSA9
ICRhdHRyaWJ1dGUtPm5hbWU7Ci0gICAgICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRy
aWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICR7bmFtZX1WYWx1ZSA9ICR7Z2V0RnVu
Y3Rpb25OYW1lfUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTtcbiIpOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7XG4iKTsKLQotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzSW50ZXJmYWNlVHlw
ZSgkYXR0cmlidXRlLT50eXBlKSkgewotICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUludGVyZmFj
ZU5hbWUgPSAkYXR0cmlidXRlLT50eXBlLT5uYW1lOwotICAgICAgICAgICAgaWYgKCRhdHRyaWJ1
dGUtPnR5cGUtPmlzTnVsbGFibGUpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoISR7bmFtZX1WYWx1ZS5pc051bGwoKSkge1xuIik7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGF1dG8qICR7bmFtZX1TZXJpYWxpemVkVmFs
dWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRlcmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1
ZSksIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1TZXJpYWxp
emVkVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
fSBlbHNlXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1l
fVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiAke25hbWV9U2VyaWFsaXplZFZh
bHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX0qPigke25hbWV9VmFs
dWUpLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtuYW1lfVNlcmlhbGl6ZWRWYWx1
ZSk7XG4iKTsKKyAgICAgICAgbXkgJGhhc0RlZmF1bHRUb0pTT05PcGVyYXRpb24gPSAwOworICAg
ICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEB7JGN1cnJlbnRJbnRlcmZhY2UtPm9wZXJhdGlv
bnN9KSB7CisgICAgICAgICAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
RGVmYXVsdH0gJiYgJG9wZXJhdGlvbi0+bmFtZSBlcSAidG9KU09OIiAmJiAkb3BlcmF0aW9uLT50
eXBlLT5uYW1lIGVxICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgJGhhc0RlZmF1bHRUb0pT
T05PcGVyYXRpb24gPSAxOworICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIp
LCAke25hbWV9VmFsdWUpO1xuIik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCRoYXNEZWZhdWx0
VG9KU09OT3BlcmF0aW9uKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7
JGN1cnJlbnRJbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICAgICAgbmV4dCBp
ZiAkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAgICAgICAgICBuZXh0IGlmICEkY29kZUdl
bmVyYXRvci0+SXNKU09OVHlwZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLT50eXBlKTsKIAotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCJb
Q2FjaGVkQXR0cmlidXRlXSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnQgb24gaW50ZXJmYWNlcyB3
aXRoIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IikgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Q2FjaGVkQXR0cmlidXRlfTsKKworICAgICAgICAgICAgICAgIG15ICRjb25k
aXRpb25hbCA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsK
KyAgICAgICAgICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CisgICAgICAgICAgICAgICAgICAg
IG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRpb25hbCk7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIik7
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVOYW1l
ID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAgICAgICAgICBteSAkdG9KU0V4cHJlc3Npb24g
PSAiIjsKKyAgICAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUpKSB7
CisgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVH
ZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1w
bGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAkdG9K
U0V4cHJlc3Npb24gPSAiY2FzdGVkVGhpcy0+JHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfSgqbGV4
aWNhbEdsb2JhbE9iamVjdCkiOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIG15ICgkYmFzZUZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVy
YXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGN1cnJlbnRJbnRlcmZhY2Ut
PnR5cGUtPm5hbWUsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgICAgICAgICBteSAkZnVuY3Rp
b25OYW1lID0gR2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOYW1lKCRjdXJyZW50
SW50ZXJmYWNlLCAkYXR0cmlidXRlLCAkYmFzZUZ1bmN0aW9uTmFtZSwgImltcGwiLCAkY29uZGl0
aW9uYWwpOworICAgICAgICAgICAgICAgICAgICAkdG9KU0V4cHJlc3Npb24gPSBOYXRpdmVUb0pT
VmFsdWUoJGF0dHJpYnV0ZSwgJGN1cnJlbnRJbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAu
IGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICIqbGV4aWNhbEdsb2JhbE9iamVjdCIsICIq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBteSAkbmVlZHNSdW50aW1lQ2hlY2sgPSBOZWVkc1J1bnRpbWVDaGVjaygkY3Vy
cmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCRuZWVkc1J1
bnRpbWVDaGVjaykgeworICAgICAgICAgICAgICAgICAgICBteSAkcnVudGltZUVuYWJsZUNvbmRp
dGlvbmFsU3RyaW5nID0gR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcoJGN1
cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCR7cnVu
dGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSkge1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVz
c2lvbn0pO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIFwiJHthdHRyaWJ1dGVOYW1lfVwiKSwgJHt0b0pTRXhwcmVzc2lvbn0p
O1xuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRp
b25hbCkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIjZW5kaWZc
blxuIikgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KIAotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4i
KTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiXG4iKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Qm9keShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgJHtjbGFzc05h
bWV9KiB0aGlzT2JqZWN0KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTJHtpbnRl
cmZhY2VOYW1lfTo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwg
KnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZl
RnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJRExPcGVyYXRpb248SlMke2ludGVyZmFj
ZU5hbWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9Qm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtzZXJpYWxpemVyRnVuY3Rpb25OYW1lfVwi
KTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIpOworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+dHlwZS0+
bmFtZTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4i
KTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKUyR7
aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7ZnVuY3Rpb25OYW1lfUJvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCBcInRvSlNPTlwiKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIn1cbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiB9CiAKIHN1YiBH
ZW5lcmF0ZUdldENhbGxEYXRhCkBAIC03NTY1LDcgKzc1NTksNiBAQCBzdWIgR2V0UnVudGltZUVu
YWJsZWRTdGF0aWNQcm9wZXJ0aWVzCiAgICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNl
LT5pdGVyYWJsZS0+b3BlcmF0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgk
aW50ZXJmYWNlKTsKICAgICBwdXNoKEBvcGVyYXRpb25zLCBAeyRpbnRlcmZhY2UtPm1hcExpa2Ut
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5tYXBMaWtlOwogICAgIHB1c2goQG9wZXJhdGlv
bnMsIEB7JGludGVyZmFjZS0+c2V0TGlrZS0+b3BlcmF0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNl
dExpa2U7Ci0gICAgcHVzaChAb3BlcmF0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
Pm9wZXJhdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CiAgICAgZm9yZWFjaCBt
eSAkb3BlcmF0aW9uIChAb3BlcmF0aW9ucykgewogICAgICAgICBuZXh0IGlmICgkb3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJZGVudGlmaWVyfSk7CiAgICAgICAgIG5l
eHQgaWYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9ICYmICRvcGVyYXRpb24tPntvdmVybG9h
ZEluZGV4fSA+IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0
dHJpYnV0ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcgY29weSkKQEAg
LTE1NCw2ICsxNTQsOSBAQAogICAgICAgICAgICAgInZhbHVlcyI6IFsiIiwgIlJlYWRET00iLCAi
R2V0dGVyIl0sCiAgICAgICAgICAgICAic3VwcG9ydHNDb25qdW5jdGlvbiI6IHRydWUKICAgICAg
ICAgfSwKKyAgICAgICAgIkRlZmF1bHQiOiB7CisgICAgICAgICAgICAiY29udGV4dHNBbGxvd2Vk
IjogWyJvcGVyYXRpb24iXQorICAgICAgICB9LAogICAgICAgICAiRGVmYXVsdERlZmluZU93blBy
b3BlcnR5IjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0K
ICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
UGFyc2VyLnBtCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNiBAQCBzdHJ1
Y3QoIElETEludGVyZmFjZSA9PiB7CiAgICAgYXN5bmNJdGVyYWJsZSA9PiAnJCcsICMgVXNlZCBm
b3IgYXN5Y24gaXRlcmFibGUgaW50ZXJmYWNlcywgb2YgdHlwZSAnSURMQXN5bmNJdGVyYWJsZScK
ICAgICBtYXBMaWtlID0+ICckJywgIyBVc2VkIGZvciBtYXBMaWtlIGludGVyZmFjZXMsIG9mIHR5
cGUgJ0lETE1hcExpa2UnCiAgICAgc2V0TGlrZSA9PiAnJCcsICMgVXNlZCBmb3Igc2V0TGlrZSBp
bnRlcmZhY2VzLCBvZiB0eXBlICdJRExTZXRMaWtlJwotICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcs
ICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFjZXMsIG9mIHR5cGUgJ0lETFNlcmlhbGl6
YWJsZScKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKQEAgLTk0LDcgKzkz
LDYgQEAgc3RydWN0KCBJRExPcGVyYXRpb24gPT4gewogICAgIGlzQ29uc3RydWN0b3IgPT4gJyQn
LAogICAgIGlzU3RhdGljID0+ICckJywKICAgICBpc0l0ZXJhYmxlID0+ICckJywKLSAgICBpc1Nl
cmlhbGl6ZXIgPT4gJyQnLAogICAgIGlzU3RyaW5naWZpZXIgPT4gJyQnLAogICAgIGlzTWFwTGlr
ZSA9PiAnJCcsCiAgICAgaXNTZXRMaWtlID0+ICckJywKQEAgLTE1NCwxNSArMTUyLDYgQEAgc3Ry
dWN0KCBJRExTZXRMaWtlID0+IHsKICAgICBleHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLAogfSk7
CiAKLSMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCi1z
dHJ1Y3QoIElETFNlcmlhbGl6YWJsZSA9PiB7Ci0gICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlz
dCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQotICAgIGhhc0F0dHJpYnV0ZSA9PiAnJCcsICMg
c2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH0KLSAgICBoYXNJbmhlcml0ID0+ICckJywgIyBzZXJp
YWxpemVyID0geyBpbmhlcml0IH0KLSAgICBoYXNHZXR0ZXIgPT4gJyQnLCAjIHNlcmlhbGl6ZXIg
PSB7IGdldHRlciB9Ci0gICAgb3BlcmF0aW9ucyA9PiAnQCcsICMgdG9KU09OIG9wZXJhdGlvbgot
fSk7Ci0KICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWNvbnN0YW50cwog
c3RydWN0KCBJRExDb25zdGFudCA9PiB7CiAgICAgbmFtZSA9PiAnJCcsCkBAIC02MDAsNyArNTg5
LDYgQEAgc3ViIGNsb25lT3BlcmF0aW9uCiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNDb25zdHJ1
Y3Rvcigkb3BlcmF0aW9uLT5pc0NvbnN0cnVjdG9yKTsKICAgICAkY2xvbmVkT3BlcmF0aW9uLT5p
c1N0YXRpYygkb3BlcmF0aW9uLT5pc1N0YXRpYyk7CiAgICAgJGNsb25lZE9wZXJhdGlvbi0+aXNJ
dGVyYWJsZSgkb3BlcmF0aW9uLT5pc0l0ZXJhYmxlKTsKLSAgICAkY2xvbmVkT3BlcmF0aW9uLT5p
c1NlcmlhbGl6ZXIoJG9wZXJhdGlvbi0+aXNTZXJpYWxpemVyKTsKICAgICAkY2xvbmVkT3BlcmF0
aW9uLT5pc1N0cmluZ2lmaWVyKCRvcGVyYXRpb24tPmlzU3RyaW5naWZpZXIpOwogICAgICRjbG9u
ZWRPcGVyYXRpb24tPmlzTWFwTGlrZSgkb3BlcmF0aW9uLT5pc01hcExpa2UpOwogICAgICRjbG9u
ZWRPcGVyYXRpb24tPmlzU2V0TGlrZSgkb3BlcmF0aW9uLT5pc1NldExpa2UpOwpAQCAtNjUyLDEw
ICs2NDAsMTAgQEAgbXkgJG5leHRTcGVjaWFsc18xID0gJ14oZGVsZXRlcnxnZXR0ZXJ8cwogbXkg
JG5leHREZWZpbml0aW9uc18xID0gJ14oY2FsbGJhY2t8ZGljdGlvbmFyeXxlbnVtfGludGVyZmFj
ZXxuYW1lc3BhY2V8cGFydGlhbHx0eXBlZGVmKSQnOwogbXkgJG5leHREaWN0aW9uYXJ5TWVtYmVy
XzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55fGJvb2xlYW58Ynl0
ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVxdWlyZWR8c2VxdWVuY2V8c2hvcnR8
c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dENhbGxi
YWNrSW50ZXJmYWNlTWVtYmVyc18xID0gJ14oXCh8Y29uc3R8Qnl0ZVN0cmluZ3xET01TdHJpbmd8
VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0
fHNlcXVlbmNlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQn
OwotbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmlu
Z3xVU1ZTdHJpbmd8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8
ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVh
ZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVy
fHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRJbnRl
cmZhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8YW55
fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkb3VibGV8
ZmxvYXR8Z2V0dGVyfGluaGVyaXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8
c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJp
Y3RlZHx1bnNpZ25lZCkkJzsKIG15ICRuZXh0TWl4aW5NZW1iZXJzXzEgPSAnXihcKHxhdHRyaWJ1
dGV8Qnl0ZVN0cmluZ3xET01TdHJpbmd8VVNWU3RyaW5nfGFueXxib29sZWFufGJ5dGV8Y29uc3R8
ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNob3J0fHN0
cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkg
JG5leHROYW1lc3BhY2VNZW1iZXJzXzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZT
dHJpbmd8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8cmVh
ZG9ubHl8c2VxdWVuY2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWdu
ZWQpJCc7Ci1teSAkbmV4dFBhcnRpYWxJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofEJ5dGVTdHJp
bmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxk
ZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsb25nfG9iamVjdHxvY3RldHxyZWFk
b25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8
c3ltYm9sfHVuZGVmaW5lZHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dFBhcnRp
YWxJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmlu
Z3xhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxkZWxldGVyfGRvdWJsZXxmbG9hdHxn
ZXR0ZXJ8aW5oZXJpdHxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXR0ZXJ8
c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHN5bWJvbHx1bmRlZmluZWR8dW5yZXN0cmljdGVkfHVu
c2lnbmVkKSQnOwogbXkgJG5leHRTaW5nbGVUeXBlXzEgPSAnXihCeXRlU3RyaW5nfERPTVN0cmlu
Z3xVU1ZTdHJpbmd8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxz
ZXF1ZW5jZXxzaG9ydHxzeW1ib2x8dW5kZWZpbmVkfHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsK
IG15ICRuZXh0QXJndW1lbnROYW1lXzEgPSAnXihhc3luY3xhdHRyaWJ1dGV8Y2FsbGJhY2t8Y29u
c3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5fGVudW18Z2V0dGVyfGluY2x1ZGVzfGlu
aGVyaXR8aW50ZXJmYWNlfGl0ZXJhYmxlfG1hcGxpa2V8bWl4aW58bmFtZXNwYWNlfHBhcnRpYWx8
cmVhZG9ubHl8cmVxdWlyZWR8c2V0bGlrZXxzZXR0ZXJ8c3RhdGljfHN0cmluZ2lmaWVyfHR5cGVk
ZWZ8dW5yZXN0cmljdGVkKSQnOwogbXkgJG5leHRDb25zdFZhbHVlXzEgPSAnXihmYWxzZXx0cnVl
KSQnOwpAQCAtMTMyNSwxMiArMTMxMyw2IEBAIHN1YiBwYXJzZVBhcnRpYWxJbnRlcmZhY2VNZW1i
ZXIKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7CiAgICAgICAgIHJldHVy
biAkc2VsZi0+cGFyc2VJbmhlcml0QXR0cmlidXRlKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwog
ICAgIH0KLQotICAgICMgRklYTUU6IFJlbW92ZS4gVGhpcyBpcyBubyBsb25nZXIgcGFydCBvZiBX
ZWJJREwuIFJlcGxhY2Ugd2l0aCBbU2VyaWFsaXphYmxlXS4KLSAgICBpZiAoJG5leHQtPnZhbHVl
KCkgZXEgInNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxp
emVyKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwotICAgIH0KLQogICAgIGlmICgkbmV4dC0+dHlw
ZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSA9fiAvJG5leHRPcGVyYXRp
b25fMS8pIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvbigkZXh0ZW5kZWRB
dHRyaWJ1dGVMaXN0KTsKICAgICB9CkBAIC0xNzk5LDExNCArMTc4MSw2IEBAIHN1YiBwYXJzZUNv
bnN0cnVjdG9yCiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUo
KSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXJpYWxpemVyCi17Ci0gICAgbXkgJHNlbGYg
PSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7Ci0KLSAgICBt
eSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEg
InNlcmlhbGl6ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5n
ZXRUb2tlbigpLCAic2VyaWFsaXplciIsIF9fTElORV9fKTsKLSAgICAgICAgbXkgJG5leHQgPSAk
c2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgICAgIG15ICRuZXdEYXRhTm9kZTsKLSAgICAgICAgaWYg
KCRuZXh0LT52YWx1ZSgpIG5lICI7IikgewotICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gJHNl
bGYtPnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Ci0gICAgICAg
ICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+bmV3KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBteSAkdG9KU09OT3BlcmF0aW9uID0gSURMT3BlcmF0aW9uLT5uZXcoKTsK
LSAgICAgICAgJHRvSlNPTk9wZXJhdGlvbi0+bmFtZSgidG9KU09OIik7Ci0KLSAgICAgICAgJHNl
bGYtPmFzc2VydEV4dGVuZGVkQXR0cmlidXRlc1ZhbGlkRm9yQ29udGV4dCgkZXh0ZW5kZWRBdHRy
aWJ1dGVMaXN0LCAib3BlcmF0aW9uIik7Ci0gICAgICAgICR0b0pTT05PcGVyYXRpb24tPmV4dGVu
ZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKLSAgICAgICAgJHRvSlNPTk9w
ZXJhdGlvbi0+aXNTZXJpYWxpemVyKDEpOwotICAgICAgICBwdXNoKEB7JG5ld0RhdGFOb2RlLT5v
cGVyYXRpb25zfSwgJHRvSlNPTk9wZXJhdGlvbik7Ci0KLSAgICAgICAgJHNlbGYtPmFzc2VydFRv
a2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5FX18pOwotICAgICAgICByZXR1
cm4gJG5ld0RhdGFOb2RlOwotICAgIH0KLSAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2Vu
KCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7Ci19Ci0KLXN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0
Ci17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0
ID0gc2hpZnQ7Ci0KLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAo
JG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVl
KCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9fTElORV9fKTsKLQotICAgICAgICByZXR1cm4gJHNl
bGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsKLQotICAgIH0KLSAgICBpZiAoJG5leHQt
PnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgZXEgIigiKSB7Ci0g
ICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRpb25SZXN0KCRleHRlbmRlZEF0dHJpYnV0
ZUxpc3QpOwotICAgIH0KLX0KLQotc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4KLXsKLSAg
ICBteSAkc2VsZiA9IHNoaWZ0OwotCi0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7
Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0
VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInsiLCBfX0xJTkVfXyk7Ci0gICAgICAgIG15
ICRuZXdEYXRhTm9kZSA9IElETFNlcmlhbGl6YWJsZS0+bmV3KCk7Ci0gICAgICAgICRzZWxmLT5w
YXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCRuZXdEYXRhTm9kZSk7Ci0gICAgICAgICRzZWxm
LT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAifSIsIF9fTElORV9fKTsKLSAg
ICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgp
IGVxICJbIikgewotICAgICAgICBkaWUgIlNlcmlhbGl6YXRpb24gb2YgbGlzdHMgcGF0dGVybiBp
cyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwotICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUo
KSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAg
ICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7Ci0gICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICBwdXNoKEBhdHRy
aWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOwotCi0gICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IElE
TFNlcmlhbGl6YWJsZS0+bmV3KCk7Ci0gICAgICAgICRuZXdEYXRhTm9kZS0+YXR0cmlidXRlcyhc
QGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7Ci0gICAgfQotICAg
ICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsK
LX0KLQotc3ViIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMKLXsKLSAgICBteSAkc2VsZiA9
IHNoaWZ0OwotICAgIG15ICRzZXJpYWxpemFibGUgPSBzaGlmdDsKLQotICAgIG15IEBhdHRyaWJ1
dGVzID0gKCk7Ci0gICAgbXkgQGlkZW50aWZpZXJzID0gJHNlbGYtPnBhcnNlSWRlbnRpZmllckxp
c3QoKTsKLQotICAgIGZvciBteSAkaWRlbnRpZmllciAoQGlkZW50aWZpZXJzKSB7Ci0gICAgICAg
IGlmICgkaWRlbnRpZmllciBlcSAiZ2V0dGVyIikgewotICAgICAgICAgICAgJHNlcmlhbGl6YWJs
ZS0+aGFzR2V0dGVyKDEpOwotICAgICAgICAgICAgZGllICJTZXJpYWxpemVyIGdldHRlciBrZXl3
b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoJGlkZW50aWZpZXIgZXEgImluaGVyaXQiKSB7Ci0gICAgICAgICAgICAkc2VyaWFsaXphYmxl
LT5oYXNJbmhlcml0KDEpOwotICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICgkaWRlbnRpZmllciBlcSAiYXR0cmlidXRlIikgewotICAgICAgICAgICAgJHNlcmlhbGl6
YWJsZS0+aGFzQXR0cmlidXRlKDEpOwotICAgICAgICAgICAgIyBBdHRyaWJ1dGVzIHdpbGwgYmUg
ZmlsbGVkIGluIHZpYSBhcHBseU1lbWJlckxpc3QoKQotICAgICAgICAgICAgbmV4dDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICRpZGVudGlmaWVyKTsKLSAgICB9Ci0K
LSAgICAkc2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzKFxAYXR0cmlidXRlcyk7Ci19Ci0KIHN1YiBw
YXJzZUlkZW50aWZpZXJMaXN0CiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKQEAgLTMzOTIsMjMg
KzMyNjYsNiBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBuZXh0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChyZWYoJGl0ZW0pIGVxICJJRExTZXJpYWxp
emFibGUiKSB7Ci0gICAgICAgICAgICAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUoJGl0ZW0pOwot
ICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgkaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgbXkgJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0g
QHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9OwotICAgICAgICBpZiAoJGlu
dGVyZmFjZS0+c2VyaWFsaXphYmxlLT5oYXNBdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIGZvcmVh
Y2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAg
ICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0
cmlidXRlLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNpZiAoJG51bVNlcmlh
bGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKLSAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICAgICAgICAgIHB1c2goQHsk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5uYW1lKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmlu
ZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1
Y3RvcnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCwxMCBAQCBwYXJ0aWFsIGludGVy
ZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUgVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yOwogICAgIGF0dHJpYnV0ZSBUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yIFRl
c3RDb25kaXRpb25hbEluY2x1ZGVzOwogICAgIGF0dHJpYnV0ZSBUZXN0RE9NSklUQ29uc3RydWN0
b3IgVGVzdERPTUpJVDsKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rv
ciBUZXN0RGVmYXVsdFRvSlNPTjsKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IgVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlOworICAgIGF0dHJpYnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3Rv
ciBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ7CisgICAgYXR0cmlidXRlIFRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw7
CiAgICAgYXR0cmlidXRlIFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yIFRlc3REb21haW5T
ZWN1cml0eTsKICAgICBhdHRyaWJ1dGUgVGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvciBU
ZXN0RW5hYmxlZEJ5U2V0dGluZzsKICAgICBbRW5hYmxlZEZvckNvbnRleHQsIFNlY3VyZUNvbnRl
eHRdIGF0dHJpYnV0ZSBUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvciBUZXN0RW5hYmxl
ZEZvckNvbnRleHQ7CkBAIC01MywxMCArNTcsNiBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xv
YmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUgVGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9y
IFRlc3RSZWFkT25seU1hcExpa2U7CiAgICAgYXR0cmlidXRlIFRlc3RSZWFkT25seVNldExpa2VD
b25zdHJ1Y3RvciBUZXN0UmVhZE9ubHlTZXRMaWtlOwogICAgIGF0dHJpYnV0ZSBUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IgVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDsKLSAg
ICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlv
bjsKLSAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29u
c3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOwotICAgIGF0dHJp
YnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQ7Ci0gICAgYXR0cmlidXRlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29u
c3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7CiAgICAgW0NvbmRpdGlvbmFs
PUNvbmRpdGlvbjF8Q29uZGl0aW9uMl0gYXR0cmlidXRlIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OwogICAgIGF0dHJpYnV0ZSBUZXN0U2V0TGlrZUNvbnN0cnVjdG9yIFRlc3RTZXRMaWtlOwogICAg
IGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvciBUZXN0U3RyaW5naWZpZXI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVw
ZW5kZW5jaWVzLmRlcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAkocmV2aXNpb24gMjY3MDE3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVu
ZGVuY2llcy5kZXAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDIxIEBAIFRlc3RNaXhpbklu
dGVyZmFjZS5pZGw6CiBKU1Rlc3RET01KSVQuaDogCiBET01UZXN0RE9NSklULmg6IAogV2ViRE9N
VGVzdERPTUpJVC5oOiAKK0pTVGVzdERlZmF1bHRUb0pTT04uaDogCitET01UZXN0RGVmYXVsdFRv
SlNPTi5oOiAKK1dlYkRPTVRlc3REZWZhdWx0VG9KU09OLmg6IAorSlNUZXN0RGVmYXVsdFRvSlNP
TkVudW0uaDogCitET01UZXN0RGVmYXVsdFRvSlNPTkVudW0uaDogCitXZWJET01UZXN0RGVmYXVs
dFRvSlNPTkVudW0uaDogCitKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5o
OiAKK0RPTVRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKK1dlYkRPTVRl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKK0pTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0Lmg6IAorRE9NVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmg6IAorV2ViRE9NVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0Lmg6IAorSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bC5oOiAKK0RPTVRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmg6IAorV2ViRE9NVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaDogCiBKU1Rlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAK
IERPTVRlc3REZXJpdmVkRGljdGlvbmFyeS5oOiAKIFdlYkRPTVRlc3REZXJpdmVkRGljdGlvbmFy
eS5oOiAKQEAgLTIxNSwxOCArMjMwLDYgQEAgV2ViRE9NVGVzdFJlYWRPbmx5U2V0TGlrZS5oOiAK
IEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5oOiAKIERPTVRlc3RSZXBvcnRFeHRyYU1lbW9y
eUNvc3QuaDogCiBXZWJET01UZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Lmg6IAotSlNUZXN0U2Vy
aWFsaXphdGlvbi5oOiAKLURPTVRlc3RTZXJpYWxpemF0aW9uLmg6IAotV2ViRE9NVGVzdFNlcmlh
bGl6YXRpb24uaDogCi1KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oOiAK
LURPTVRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKLVdlYkRPTVRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oOiAKLUpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Lmg6IAotRE9NVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6IAotV2ViRE9NVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Lmg6IAotSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5o
OiAKLURPTVRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmg6IAotV2ViRE9NVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwuaDogCiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDogCiBET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6IAogV2Vi
RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oOiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTi5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0
VG9KU09OLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdERlZmF1bHRUb0pTT04uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCit0eXBlZGVmIGRvdWJsZSBUZXN0VGltZVN0YW1wOworCitpbnRl
cmZhY2UgVGVzdERlZmF1bHRUb0pTT04geworICAgIFtFbmFibGVkQXRSdW50aW1lPVRlc3RSdW50
aW1lRW5hYmxlZF1yZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsb25nQXR0cmlidXRlOworICAgIFtF
bmFibGVkQnlTZXR0aW5nPVRlc3RTZXR0aW5nXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
c2hvcnQgZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGU7CisgICAgW0NvbmRpdGlvbmFsPVRFU1Rf
Q09ORElUSU9OQUxdIHJlYWRvbmx5IGF0dHJpYnV0ZSBUZXN0RGVmYXVsdFRvSlNPTkVudW0gZW5h
YmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBl
dmVudEhhbmRsZXJBdHRyaWJ1dGU7CisKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICAg
ICAgIGZpcnN0U3RyaW5nQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAg
ICAgICAgc2Vjb25kTG9uZ0F0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgVGVzdEV4Y2VwdGlvbiAg
ICAgICAgIHRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgdW5yZXN0cmlj
dGVkIGRvdWJsZSAgIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRy
aWJ1dGUgW0NsYW1wXSBsb25nICAgICAgICAgIGZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGU7Cisg
ICAgYXR0cmlidXRlIFRlc3RUaW1lU3RhbXAgICAgICAgICBzaXh0aFR5cGVkZWZBdHRyaWJ1dGU7
CisKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgc2V2ZW50aERp
cmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlIGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGU7CisgICAgYXR0
cmlidXRlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPyBuaW50aE9wdGlvbmFsRGlyZWN0
bHlUb0pTT05hYmxlQXR0cmlidXRlOworCisgICAgYXR0cmlidXRlIEZyb3plbkFycmF5PGJvb2xl
YW4+IHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIHNlcXVlbmNlPERP
TVN0cmluZz4gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgc2VxdWVu
Y2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+IHR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5j
ZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgcmVjb3JkPERPTVN0cmluZywgdW5zaWduZWQgc2hv
cnQ+IHRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGU7CisKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0RGVmYXVsdFRvSlNPTkVudW0uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkVudW0uaWRsCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRv
SlNPTkVudW0uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitlbnVtIFRlc3REZWZhdWx0VG9KU09ORW51bSB7CisgICAgIkVudW1WYWx1ZTEiLAorICAgICJF
bnVtVmFsdWUyIgorfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2Uu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworaW50ZXJmYWNlIFRlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZSA6IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCB7Cit9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCitpbnRlcmZhY2UgVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0IDogVGVzdERlZmF1bHRUb0pTT04geworICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAg
ICAgICAgaW5oZXJpdExvbmdBdHRyaWJ1dGU7CisKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNP
TigpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmlk
bAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
aW50ZXJmYWNlIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIDogVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0IHsKKyAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGZpbmFsTG9u
Z0F0dHJpYnV0ZUZvbzsKKyAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGZpbmFs
TG9uZ0F0dHJpYnV0ZUJhcjsKKworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7Cit9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5v
ZGUuaWRsCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw1ICszNSw1IEBACiAg
ICAgW1NlY3VyZUNvbnRleHRdIGJvb2xlYW4gZ2V0U2VjcmV0Qm9vbGVhbigpOwogICAgIFtDb25k
aXRpb25hbD1URVNUX0ZFQVRVUkUsIFNlY3VyZUNvbnRleHQsIEVuYWJsZWRBdFJ1bnRpbWU9VGVz
dEZlYXR1cmVdIGJvb2xlYW4gdGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuKCk7CiAKLSAgICBz
ZXJpYWxpemVyOworICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2
aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsOCArNDM1LDYgQEAgZW51bSBUZXN0Q29u
ZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdwogCiAgICAgc3RyaW5naWZpZXIgYXR0cmlidXRl
IFVTVlN0cmluZyBzdHJpbmdpZmllckF0dHJpYnV0ZTsKIAotICAgIHNlcmlhbGl6ZXIgPSB7Y3Jl
YXRlLCByZWFkT25seVN0cmluZ0F0dHIsIGVudW1BdHRyLCBsb25nQXR0cn07Ci0KICAgICB1bmRl
ZmluZWQgYnVmZmVyU291cmNlUGFyYW1ldGVyKEJ1ZmZlclNvdXJjZSBkYXRhKTsKIAogICAgIFtM
ZWdhY3lDYWxsZXJdIHVuZGVmaW5lZCBsZWdhY3lDYWxsZXJOYW1lZChsb25nIHBhcmFtKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlv
bi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkocmV2aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotdHlwZWRlZiBkb3VibGUgVGVzdFRpbWVTdGFtcDsKLQotaW50ZXJmYWNlIFRl
c3RTZXJpYWxpemF0aW9uIHsKLSAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICAgICAgIGZp
cnN0U3RyaW5nQXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAg
c2Vjb25kTG9uZ0F0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgVGVzdEV4Y2VwdGlvbiAgICAgICAg
IHRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIHVucmVzdHJpY3Rl
ZCBkb3VibGUgICBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGU7Ci0gICAgYXR0cmli
dXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaWZ0aExvbmdBdHRyaWJ1dGU7Ci0gICAgYXR0cmli
dXRlIFRlc3RUaW1lU3RhbXAgICAgICAgICBzaXh0aFR5cGVkZWZBdHRyaWJ1dGU7Ci0KLSAgICBh
dHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwgc2V2ZW50aERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2UgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUg
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw/IG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZTsKLQotICAgIGF0dHJpYnV0ZSBGcm96ZW5BcnJheTxib29sZWFuPiB0
ZW50aEZyb3plbkFycmF5QXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxET01TdHJp
bmc+IGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIHNlcXVlbmNlPFRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRy
aWJ1dGU7Ci0KLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKLX07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVj
dEluaGVyaXRhbmNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmlkbAkocmV2
aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5pZGwJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLWludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UgOiBUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQgewotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuaWRsCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbAkobm9uZXhpc3RlbnQpCkBA
IC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA6IFRlc3RTZXJpYWxpemF0
aW9uIHsKLSAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGluaGVyaXRMb25nQXR0
cmlidXRlOwotCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwgYXR0cmlidXRlIH07Ci19OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCShyZXZpc2lv
biAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsCShub25leGlzdGVudCkKQEAgLTEsMzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1pbnRlcmZh
Y2UgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwgOiBUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQgewotICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgZmluYWxMb25nQXR0cmli
dXRlRm9vOwotICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgZmluYWxMb25nQXR0
cmlidXRlQmFyOwotCi0gICAgc2VyaWFsaXplciA9IHsgaW5oZXJpdCwgZmluYWxMb25nQXR0cmli
dXRlQmFyIH07Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERlZmF1bHRUb0pTT04uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4ODUgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVz
dERlZmF1bHRUb0pTT04uaCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCb29sZWFuLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVsbGFibGUuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0UmVjb3Jk
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VxdWVuY2VzLmgiCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5o
IgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaCIKKyNpbmNsdWRl
ICJKU1Rlc3RFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdz
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVh
cEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheS5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vi
c3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
b2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorI2luY2x1ZGUgIkpT
RE9NQ29udmVydEVudW1lcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkVu
dW0uaCIKKyNlbmRpZgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05Mb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
I2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKyNlbmRpZgor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORmlyc3RT
dHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0U3Ry
aW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRv
SlNPTlNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TlNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
ZWZhdWx0VG9KU09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dERlZmF1bHRUb0pTT05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0
cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZh
dWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RE
ZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlU
b0pTT05hYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05TZXZl
bnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERp
cmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9K
U09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0
cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGhp
cnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09O
VGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdERlZmF1bHRU
b0pTT05Qcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRp
YyBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGU+KHZt
LmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlLCBC
YXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09O
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRv
SlNPTlByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6QmFzZSk7CisKK3Vz
aW5nIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlPEpTVGVzdERlZmF1bHRUb0pTT04+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUg
SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90
eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJU
ZXN0RGVmYXVsdFRvSlNPTiJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3Rl
bXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rvcjo6
c19pbmZvID0geyAiVGVzdERlZmF1bHRUb0pTT04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3Rv
cikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9
Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05Db25z
dHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcikgfSB9LAorICAgIHsgImxv
bmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVs
dFRvSlNPTkxvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisgICAgeyAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRy
aWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNP
TkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAorI2lmIEVOQUJMRShURVNUX0NPTkRJ
VElPTkFMKQorICAgIHsgImVuYWJsZWRCeUNvbmRpdGlvbmFsQXR0cmlidXRlIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
T01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRp
b25hbEF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyNlbHNlCisgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAw
LCAwIH0gfSwKKyNlbmRpZgorICAgIHsgImV2ZW50SGFuZGxlckF0dHJpYnV0ZSIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVs
dFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhh
bmRsZXJBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVm
YXVsdFRvSlNPTkZpcnN0U3RyaW5nQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZpcnN0
U3RyaW5nQXR0cmlidXRlKSB9IH0sCisgICAgeyAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVm
YXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2Vjb25k
TG9uZ0F0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nv
ciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pT
T05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJmb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRy
aWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05Gb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91Ymxl
QXR0cmlidXRlKSB9IH0sCisgICAgeyAiZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVm
YXVsdFRvSlNPTkZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09O
RmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInNpeHRoVHlwZWRlZkF0dHJp
YnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0RGVmYXVsdFRvSlNPTlNpeHRoVHlwZWRlZkF0dHJpYnV0ZSksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1
bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJzZXZlbnRoRGlyZWN0
bHlUb0pTT05hYmxlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9N
QXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OU2V2ZW50aERpcmVjdGx5VG9K
U09OYWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pT
T05hYmxlQXR0cmlidXRlKSB9IH0sCisgICAgeyAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0
VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgIm5pbnRoT3B0aW9u
YWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdERlZmF1bHRUb0pTT05OaW50aE9wdGlv
bmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTk5pbnRo
T3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0ZW50aEZy
b3plbkFycmF5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0
cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OVGVudGhGcm96ZW5BcnJheUF0dHJp
YnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKSB9IH0s
CisgICAgeyAiZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkVsZXZl
bnRoU2VxdWVuY2VBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWxldmVudGhTZXF1ZW5j
ZUF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUpIH0gfSwK
KyAgICB7ICJ0aGlydGVlbnRoUmVjb3JkQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRl
ZW50aFJlY29yZEF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3Jk
QXR0cmlidXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCit9OworCitjb25zdCBDbGFz
c0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdERlZmF1
bHRUb0pTT04iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0RGVm
YXVsdFRvSlNPTlByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVz
dERlZmF1bHRUb0pTT046OmluZm8oKSwgSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlwZVRhYmxl
VmFsdWVzLCAqdGhpcyk7CisgICAgYm9vbCBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
ZmFsc2U7CisgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRp
bWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImxvbmdB
dHRyaWJ1dGUiKSwgc3RybGVuKCJsb25nQXR0cmlidXRlIikpOworICAgICAgICBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9y
ZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90OworICAgICAg
ICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5
TmFtZSwgc2xvdCk7CisgICAgfQorICAgIGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgeworICAgICAgICBoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlIiksIHN0cmxlbigiZW5hYmxlZEJ5U2V0dGlu
Z3NBdHRyaWJ1dGUiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29w
ZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKKyAgICAg
ICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9Cisg
ICAgaWYgKGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgJiYgc3RydWN0dXJlKCktPmlzRGlj
dGlvbmFyeSgpKQorICAgICAgICBmbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CisgICAgSlND
X1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9CisKK2NvbnN0IENsYXNzSW5m
byBKU1Rlc3REZWZhdWx0VG9KU09OOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
RGVmYXVsdFRvSlNPTikgfTsKKworSlNUZXN0RGVmYXVsdFRvSlNPTjo6SlNUZXN0RGVmYXVsdFRv
SlNPTihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVz
dERlZmF1bHRUb0pTT04+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQor
eworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVE
T01PYmplY3QsIFRlc3REZWZhdWx0VG9KU09OPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1h
cmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFz
cyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQorCitKU09iamVjdCogSlNUZXN0
RGVmYXVsdFRvSlNPTjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTlByb3RvdHlw
ZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQ
cm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTjo6cHJvdG90
eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdERlZmF1bHRUb0pTT04+KHZtLCBnbG9iYWxPYmplY3Qp
OworfQorCitKU1ZhbHVlIEpTVGVzdERlZmF1bHRUb0pTT046OmdldENvbnN0cnVjdG9yKFZNJiB2
bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NQ29uc3RydWN0b3I8SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yPih2bSwgKmpzQ2Fz
dDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpT
VGVzdERlZmF1bHRUb0pTT046OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNU
ZXN0RGVmYXVsdFRvSlNPTiogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdERlZmF1bHRU
b0pTT04qPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3REZWZhdWx0VG9KU09OOjp+SlNU
ZXN0RGVmYXVsdFRvSlNPTigpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0
VG9KU09OKiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmNhc3QoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sK
KyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30K
KwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTiogSURMT3BlcmF0aW9uPEpT
VGVzdERlZmF1bHRUb0pTT04+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1Rlc3REZWZhdWx0VG9KU09OKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNh
bGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRU
b0pTT05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3REZWZhdWx0VG9KU09OOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
KSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVm
YXVsdFRvSlNPTlByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5sb25nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRU
b0pTT05Mb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkxv
bmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJsb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5U2V0dGluZ3NBdHRy
aWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERl
ZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVuc2lnbmVkU2hvcnQ+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEJ5U2V0dGluZ3NBdHRy
aWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVuYWJs
ZWRCeVNldHRpbmdzQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNP
TkVuYWJsZWRCeVNldHRpbmdzQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZW5hYmxlZEJ5U2V0
dGluZ3NBdHRyaWJ1dGUiKTsKK30KKworI2lmIEVOQUJMRShURVNUX0NPTkRJVElPTkFMKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbmFibGVkQnlDb25kaXRpb25h
bEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRpb248
VGVzdERlZmF1bHRUb0pTT05FbnVtPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRy
aWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwor
fQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05F
dmVudEhhbmRsZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1
dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5lbnRIYW5kbGVyQXR0cmlidXRl
RXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNUZXN0RGVmYXVsdFRvSlNPTkV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6
Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGVHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05FdmVudEhhbmRsZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCwgdGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5l
bnRIYW5kbGVyQXR0cmlidXRlRXZlbnQsIHZhbHVlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmll
cigmdGhpc09iamVjdCwgdmFsdWUpOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKHZhbHVlKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FdmVu
dEhhbmRsZXJBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rl
c3REZWZhdWx0VG9KU09ORXZlbnRIYW5kbGVyQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJldmVudEhhbmRsZXJBdHRyaWJ1dGUi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0
cmluZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmli
dXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0
cmluZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05GaXJzdFN0
cmluZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEZpcnN0
U3RyaW5nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORmlyc3RTdHJpbmdBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9K
U09ORmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0cmlidXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pT
T04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3REZWZhdWx0VG9KU09OU2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Cisg
ICAgICAgIHJldHVybiBpbXBsLnNldFNlY29uZExvbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERl
ZmF1bHRUb0pTT05TZWNvbmRMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlNlY29uZExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNlY29uZExvbmdB
dHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pT
T05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGhpcmRVbkpTT05hYmxlQXR0
cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05UaGly
ZFVuSlNPTmFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09O
VGhpcmRVbkpTT05hYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGhpcmRVbkpTT05hYmxl
QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9K
U09OVGhpcmRVbkpTT05hYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZXN0RGVmYXVsdFRvSlNPTiIsICJ0aGlyZFVuSlNPTmFibGVBdHRy
aWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0VGhpcmRV
bkpTT05hYmxlQXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJkVW5KU09OYWJsZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pT
T05UaGlyZFVuSlNPTmFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJkVW5KU09OYWJsZUF0dHJpYnV0ZSIpOworfQor
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5y
ZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKSkpOworfQorCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1
bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0Rm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRv
SlNPTkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVs
dFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0
ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgImZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0
cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RE
ZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRv
cjxJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1w
bC5zZXRGaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09O
RmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0
PHNldEpTVGVzdERlZmF1bHRUb0pTT05GaWZ0aExvbmdDbGFtcGVkQXR0cmlidXRlU2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaWZ0aExvbmdD
bGFtcGVkQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZh
dWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQoreworICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExEb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2l4
dGhUeXBlZGVmQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1
bHRUb0pTT05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZh
dWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic2l4dGhUeXBl
ZGVmQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0
VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1
cm4gaW1wbC5zZXRTaXh0aFR5cGVkZWZBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwor
ICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pT
T05TaXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxz
ZXRKU1Rlc3REZWZhdWx0VG9KU09OU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaXh0aFR5cGVkZWZBdHRy
aWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05T
ZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0KQorewor
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5zZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTlNldmVudGhEaXJlY3Rs
eVRvSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzZXZlbnRoRGlyZWN0bHlUb0pT
T05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZh
dWx0VG9KU09OU2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3REZWZh
dWx0VG9KU09OIiwgInNldmVudGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUiLCAiVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFNldmVu
dGhEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OU2V2ZW50aERp
cmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6c2V0
PHNldEpTVGVzdERlZmF1bHRUb0pTT05TZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRl
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJz
ZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNP
TiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUo
KSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGly
ZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09ORWlnaHRo
SW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRy
aWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05F
aWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3REZWZhdWx0VG9KU09OIiwg
ImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlIik7IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRFaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlKCpuYXRpdmVWYWx1ZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0RGVmYXVsdFRvSlNPTj46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTk5pbnRoT3B0aW9uYWxEaXJlY3RseVRv
SlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC5uaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKCkpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pT
T05hYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTk5pbnRo
T3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJuaW50
aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OTmludGhPcHRpb25hbERpcmVjdGx5VG9KU09O
YWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+Pj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0RGVmYXVsdFRvSlNPTiIsICJuaW50
aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiwgIlRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsIik7IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXROaW50aE9wdGlvbmFsRGly
ZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OTmludGhP
cHRpb25hbERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9K
U09OPjo6c2V0PHNldEpTVGVzdERlZmF1bHRUb0pTT05OaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pT
T05hYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OVGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRnJvemVu
QXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoKSkp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJy
YXlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46OmdldDxqc1Rlc3REZWZhdWx0VG9KU09OVGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UZW50
aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Cisg
ICAgICAgIHJldHVybiBpbXBsLnNldFRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpT
VGVzdERlZmF1bHRUb0pTT05UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERl
ZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09ORWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJp
bmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05FbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNU
ZXN0RGVmYXVsdFRvSlNPTkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImVsZXZlbnRoU2VxdWVuY2VB
dHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pT
T05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT04mIHRoaXNPYmplY3QpCit7
CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC50d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoKSkp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTlR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OPjo6Z2V0PGpzVGVzdERlZmF1bHRUb0pTT05U
d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0d2VsZnRo
SW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdERlZmF1bHRUb0pTT05Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pT
T04mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNl
PFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0VHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRv
SlNPTlR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidHdlbGZ0aEludGVyZmFjZVNlcXVl
bmNlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTiYgdGhpc09iamVjdCkKK3sKKyAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMVW5zaWduZWRTaG9ydD4+KGxleGljYWxH
bG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LnRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTj46Omdl
dDxqc1Rlc3REZWZhdWx0VG9KU09OVGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZUdldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElE
TFVuc2lnbmVkU2hvcnQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpj
YWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVy
biBpbXBsLnNldFRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRU
b0pTT05UaGlydGVlbnRoUmVjb3JkQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT04+
OjpzZXQ8c2V0SlNUZXN0RGVmYXVsdFRvSlNPTlRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGVTZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRoaXJ0
ZWVudGhSZWNvcmRBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3REZWZhdWx0VG9KU09OUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3REZWZhdWx0VG9K
U09OKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwg
dG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25n
QXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkpIHsKKyAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJl
bmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pTPElETFVuc2lnbmVkU2hvcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeVNldHRpbmdzQXR0cmli
dXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlDb25k
aXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09O
RW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNv
bmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgorCisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0
b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
Zmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExv
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIHRvSlM8SURMVW5y
ZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5m
b3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJp
YnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5
cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlU
b0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5laWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0
cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJh
eTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNl
cXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUiKSwgdG9KUzxJRExS
ZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNob3J0Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50aGlydGVl
bnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RGVmYXVsdFRvSlNP
TlByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdERlZmF1bHRUb0pTT04+OjpjYWxsPGpzVGVzdERlZmF1bHRUb0pTT05Qcm90b3R5cGVGdW5j
dGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09O
Iik7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT046OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7
CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTjo6bmVl
ZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPikKKyAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IG1ha2VVbmlxdWU8SXNvU3Vic3Bh
Y2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5nZXQoKSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7CisgICAgZWxzZQorICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gbWFrZVVuaXF1ZTxJc29TdWJz
cGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7CisgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQorICAgIGlmICgmSlNUZXN0RGVmYXVsdFRvSlNPTjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIGNs
aWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVf
V0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNwYWNlOworfQor
Cit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdERlZmF1bHRUb0pTT04qPihjZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0
Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFseXplci5zZXRMYWJlbEZv
ckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIp
OworfQorCitib29sIEpTVGVzdERlZmF1bHRUb0pTT05Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3sKKyAgICBVTlVTRURfUEFSQU0o
aGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgVU5VU0VEX1BBUkFNKHJl
YXNvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05P
d25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNv
bnRleHQpCit7CisgICAgYXV0byoganNUZXN0RGVmYXVsdFRvSlNPTiA9IHN0YXRpY19jYXN0PEpT
VGVzdERlZmF1bHRUb0pTT04qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYg
d29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5j
YWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3REZWZhdWx0VG9KU09OLT53cmFwcGVkKCksIGpzVGVz
dERlZmF1bHRUb0pTT04pOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lm
IFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJD
IiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdERlZmF1bHRUb0pT
T05AV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9p
ZCogX1pUVk43V2ViQ29yZTE3VGVzdERlZmF1bHRUb0pTT05FW107IH0KKyNlbmRpZgorI2VuZGlm
CisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT04+JiYg
aW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICBjb25zdCB2b2lk
KiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9pbnRlcihpbXBsLnB0cigpKTsKKyNp
ZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gX19pZGVu
dGlmaWVyKCI/P183VGVzdERlZmF1bHRUb0pTT05AV2ViQ29yZUBANkJAIik7CisjZWxzZQorICAg
IHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMTdUZXN0RGVmYXVs
dFRvSlNPTkVbMl07CisjZW5kaWYKKworICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdERlZmF1bHRU
b0pTT04gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAg
IC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2Ug
ZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0RGVm
YXVsdFRvSlNPTj46OnZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04gaXMgbm90IHBvbHltb3JwaGlj
Iik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBh
IHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0RGVmYXVsdFRvSlNPTiBoYXMgc3Vi
Y2xhc3Nlcy4gSWYgVGVzdERlZmF1bHRUb0pTT04gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFz
c2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3REZWZhdWx0VG9K
U09OIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5n
IHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwg
ZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhw
ZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRl
c3REZWZhdWx0VG9KU09OPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNPTiYgaW1wbCkK
K3sKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlt
cGwpOworfQorCitUZXN0RGVmYXVsdFRvSlNPTiogSlNUZXN0RGVmYXVsdFRvSlNPTjo6dG9XcmFw
cGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdy
YXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT04qPih2bSwgdmFsdWUpKQor
ICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT04uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1
ZGUgIlRlc3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTiA6IHB1
YmxpYyBKU0RPTVdyYXBwZXI8VGVzdERlZmF1bHRUb0pTT04+IHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3REZWZhdWx0VG9KU09OPjsKKyAgICBzdGF0aWMgSlNU
ZXN0RGVmYXVsdFRvSlNPTiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJiBpbXBs
KQorICAgIHsKKyAgICAgICAgSlNUZXN0RGVmYXVsdFRvSlNPTiogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT04oc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdERlZmF1bHRUb0pTT04qIHRvV3JhcHBlZChKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkp
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpW
TSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0g
SlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwor
cHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT04oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTj4mJik7CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdERlZmF1bHRUb0pTT05P
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopOworICAg
IHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KERPTVdyYXBwZXJXb3JsZCYsIFRlc3REZWZhdWx0VG9KU09OKikKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SlNUZXN0RGVmYXVsdFRvSlNPTk93bmVyPiBvd25lcjsKKyAgICByZXR1cm4g
Jm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0RGVmYXVsdFRv
SlNPTiogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9
CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3REZWZhdWx0VG9KU09OJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVGVzdERlZmF1bHRUb0pTT04qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0
b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051
bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3REZWZhdWx0VG9KU09OPiYmKTsKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdERlZmF1bHRUb0pTT04+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0
ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxs
KCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VGVzdERlZmF1bHRUb0pTT04+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBUZXN0RGVmYXVsdFRvSlNPTio7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkVudW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51bS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T05FbnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0
VG9KU09ORW51bS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKFRlc3REZWZhdWx0VG9KU09O
RW51bSBlbnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgi
RW51bVZhbHVlMSIpLAorICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRW51bVZhbHVl
MiIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RE
ZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMSkgPT0gMCwgIlRlc3REZWZhdWx0VG9KU09ORW51
bTo6RW51bVZhbHVlMSBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQo
c3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0RGVmYXVsdFRvSlNPTkVudW06OkVudW1WYWx1ZTIpID09
IDEsICJUZXN0RGVmYXVsdFRvSlNPTkVudW06OkVudW1WYWx1ZTIgaXMgbm90IDEgYXMgZXhwZWN0
ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8
IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwordGVtcGxhdGU8PiBKU1N0cmluZyog
Y29udmVydEVudW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgVGVzdERlZmF1bHRUb0pTT05FbnVtIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgY29udmVydEVudW1l
cmF0aW9uVG9TdHJpbmcoZW51bWVyYXRpb25WYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IE9wdGlv
bmFsPFRlc3REZWZhdWx0VG9KU09ORW51bT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRv
SlNPTkVudW0+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJFbnVtVmFsdWUxIikKKyAg
ICAgICAgcmV0dXJuIFRlc3REZWZhdWx0VG9KU09ORW51bTo6RW51bVZhbHVlMTsKKyAgICBpZiAo
c3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTIiKQorICAgICAgICByZXR1cm4gVGVzdERlZmF1bHRU
b0pTT05FbnVtOjpFbnVtVmFsdWUyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3Rl
bXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0RGVmYXVs
dFRvSlNPTkVudW0+KCkKK3sKKyAgICByZXR1cm4gIlwiRW51bVZhbHVlMVwiLCBcIkVudW1WYWx1
ZTJcIiI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09ORW51bS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlRl
c3REZWZhdWx0VG9KU09ORW51bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0RGVmYXVsdFRvSlNPTkVudW0pOwordGVtcGxh
dGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBUZXN0RGVmYXVsdFRvSlNPTkVudW0pOworCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRl
c3REZWZhdWx0VG9KU09ORW51bT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVu
dW0+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBjb25z
dCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3REZWZhdWx0VG9KU09ORW51bT4o
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOTggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgiCisKKyNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFy
YXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZVByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGlj
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgewor
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVy
biAmdm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQ
cm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0
dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
K307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+OworCit0
ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VD
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Iodm0sICZnbG9iYWxPYmplY3QpOworfQorCit0
ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH07CisKKy8qIEhh
c2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUg
SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGVUYWJsZVZhbHVl
c1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRp
ZXModm0sIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjppbmZvKCksIEpT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlVGFibGVWYWx1ZXMs
ICp0aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30K
KworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
OjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKSB9OworCitKU1Rlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZTo6SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+JiYgaW1wbCkKKyAgICA6
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZN
b3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0aWNf
YXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2U+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFz
IFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNs
YXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVj
dCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOworfQorCitKU09iamVjdCogSlNUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4odm0sIGdsb2JhbE9iamVjdCk7
Cit9CisKK0pTVmFsdWUgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6Omdl
dENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAo
VU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0
KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSkpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQorewor
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOwor
ICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4gfHwgIUpTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPikKKyAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBtYWtlVW5p
cXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlKTsKKyAgICBlbHNlCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4g
SVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UpOworICAgIGF1dG8qIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2Uu
Z2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYgKCZKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAh
PSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklO
R1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lk
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSo+KGNlbGwp
OworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0
LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlz
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBC
YXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0LmgiCisjaW5jbHVkZSAiVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2UgOiBwdWJsaWMgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQg
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDsK
KyAgICB1c2luZyBET01XcmFwcGVkID0gVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlOworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSog
Y3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+JiYgaW1w
bCkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwg
V1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwor
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6
Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAg
IH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOworICAgIFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSYgd3JhcHBl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlJj4oQmFzZTo6d3JhcHBlZCgpKTsKKyAgICB9Citwcm90
ZWN0ZWQ6CisgICAgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2U+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+IHsKKyAgICB1c2luZyBXcmFwcGVy
Q2xhc3MgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTsKKyAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdC5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0Qm9vbGVh
bi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9N
Q29udmVydE51bGxhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydFJlY29yZC5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFNlcXVl
bmNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNp
bmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgi
CisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKKyNp
bmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgiCisjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5s
aW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3Iu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxF
KFRFU1RfQ09ORElUSU9OQUwpCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCIK
KyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORW51bS5oIgorI2VuZGlmCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gRnVuY3Rpb25zCisKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxG
cmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
KworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUgZmluYWwgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlND
OjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dFByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90
b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAg
fQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0UHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0PjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
SlNUZXN0RGVmYXVsdFRvSlNPTjo6Z2V0Q29uc3RydWN0b3Iodm0sICZnbG9iYWxPYmplY3QpOwor
fQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
dm0sICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUg
Zm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25z
dHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJpbmhl
cml0TG9uZ0F0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJp
YnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJp
YnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUpIH0g
fSwKKyAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8g
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGUpIH07CisK
K3ZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0
aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6aW5mbygpLCBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7CisgICAg
SlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9CisKK2NvbnN0IENsYXNz
SW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6c19pbmZvID0geyAiVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCkgfTsKKworSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXQ6OkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0PiYmIGltcGwpCisgICAgOiBKU1Rlc3REZWZhdWx0VG9KU09OKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQ+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtB
Y3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNz
ZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7Cit9CisKK0pTT2JqZWN0
KiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1
ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25z
dCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25z
dHJ1Y3RvcjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yPih2bSwgKmpzQ2Fz
dDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCogSURMQXR0cmlidXRlPEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQqIElETE9wZXJhdGlvbjxKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0
PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBl
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0UHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0JiB0aGlz
T2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQ+OjpnZXQ8anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRJbmhlcml0TG9uZ0F0dHJp
YnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRMb25nQXR0
cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEluaGVy
aXRMb25nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEluaGVyaXRM
b25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Pjo6c2V0PHNldEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImluaGVyaXRMb25nQXR0
cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0KiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLnRlc3RSdW50aW1lRW5hYmxlZEVuYWJsZWQoKSkgeworICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvbmdBdHRyaWJ1dGUiKSwg
dG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25n
QXR0cmlidXRlKCkpKTsKKyAgICB9CisgICAgaWYgKGRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkpIHsKKyAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJl
bmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSIpLCB0b0pTPElETFVuc2lnbmVkU2hvcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeVNldHRpbmdzQXR0cmli
dXRlKCkpKTsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbmFibGVkQnlDb25k
aXRpb25hbEF0dHJpYnV0ZSIpLCB0b0pTPElETEVudW1lcmF0aW9uPFRlc3REZWZhdWx0VG9KU09O
RW51bT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeUNv
bmRpdGlvbmFsQXR0cmlidXRlKCkpKTsKKyNlbmRpZgorCisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCB0
b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
Zmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCB0b0pTPElETExv
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRy
aWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIiksIHRvSlM8SURMVW5y
ZXN0cmljdGVkRG91YmxlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5m
b3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmlmdGhMb25nQ2xhbXBlZEF0dHJp
YnV0ZSIpLCB0b0pTPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25nQ2xhbXBlZEF0dHJpYnV0ZSgpKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaXh0aFR5
cGVkZWZBdHRyaWJ1dGUiKSwgdG9KUzxJRExEb3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0bHlU
b0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlUb0pTT05hYmxlQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKSwgdG9KUzxJRExJbnRlcmZhY2U8VGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5laWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVRvSlNPTmFibGVBdHRyaWJ1
dGUiKSwgdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlUb0pTT05hYmxlQXR0
cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdG9KUzxJRExGcm96ZW5BcnJh
eTxJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNl
cXVlbmNlQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInRoaXJ0ZWVudGhSZWNvcmRBdHRyaWJ1dGUiKSwgdG9KUzxJRExS
ZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZFNob3J0Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50aGlydGVl
bnRoUmVjb3JkQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9u
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRy
aWJ1dGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0Pjo6Y2FsbDxqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdFByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJ0b0pTT04iKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAg
YXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIHNwYWNlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+
IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4pCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNP
X1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCk7CisgICAgZWxzZQorICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9IG1ha2VVbmlxdWU8
SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5
cGUuZ2V0KCksIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KTsKKyAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOworSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdT
X0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQor
eworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQqPihjZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAm
dGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVy
bCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmco
KSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVkZSAiVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQgOiBwdWJsaWMgSlNUZXN0RGVmYXVsdFRvSlNPTiB7CitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdERlZmF1bHRUb0pTT047CisgICAgdXNpbmcgRE9N
V3JhcHBlZCA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdDsKKyAgICBzdGF0aWMgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7
CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworCisgICAgREVDTEFSRV9JTkZP
OworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3Mg
bW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQor
ICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6
OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKKyAgICBUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQmIHdyYXBwZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCY+KEJhc2U6OndyYXBwZWQoKSk7CisgICAgfQor
cHJvdGVjdGVkOgorICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiYmKTsK
KworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQ7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdCo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0NCBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVk
ZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFj
ZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgiCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFJlY29yZC5oIgorI2luY2x1
ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmlu
Z3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
IkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluZGly
ZWN0SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5h
bHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFj
ZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50
ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORW51bS5o
IgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0
b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJp
YnV0ZUJhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmlu
YWxMb25nQXR0cmlidXRlQmFyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbFByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAg
c3RhdGljIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWxQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRf
SVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90
b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAg
fQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25G
aW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFS
QUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlLCBKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD47CisKK3RlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OnBy
b3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6
OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lk
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
K30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9OworCisvKiBI
YXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0K
K3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0
cnVjdG9yKSB9IH0sCisgICAgeyAiZmluYWxMb25nQXR0cmlidXRlRm9vIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbykgfSB9LAorICAgIHsgImZpbmFsTG9u
Z0F0dHJpYnV0ZUJhciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0
ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJp
YnV0ZUJhciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVCYXIpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKK307CisKK2Nv
bnN0IENsYXNzSW5mbyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpz
X2luZm8gPSB7ICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbFByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6aW5mbygpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5H
X1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnNfaW5mbyA9IHsgIlRlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKSB9OworCitKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+JiYgaW1wbCkKKyAgICA6IEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQor
eworfQorCit2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFz
ZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6dmFs
dWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRo
b3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsK
KworfQorCitKU09iamVjdCogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6Y3JlYXRl
UHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZTo6Y3JlYXRl
KHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3Qq
IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30K
KworSlNWYWx1ZSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3Rv
cihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25z
dHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmpl
Y3QpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbCogSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+OjpjYXN0
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWwqIElETE9wZXJhdGlvbjxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dEZpbmFsPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lJiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBj
YWxsRnJhbWUudGhpc1ZhbHVlKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsUHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWxQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAg
cmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1
Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVG
b28oKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPjo6Z2V0PGpz
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVG
b29TZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRGaW5h
bExvbmdBdHRyaWJ1dGVGb28oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgIH0pOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVGb28oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bD46OnNldDxzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlRm9vU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkpKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxGaW5h
bExvbmdBdHRyaWJ1dGVCYXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OmdldDxqc1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0RmluYWxMb25nQXR0
cmlidXRlQmFyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBzZXRKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsRmluYWxMb25n
QXR0cmlidXRlQmFyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+OjpzZXQ8
c2V0SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlu
YWxMb25nQXR0cmlidXRlQmFyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9k
eShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byogcmVzdWx0
ID0gY29uc3RydWN0RW1wdHlPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0UnVudGltZUVuYWJsZWRFbmFibGVkKCkp
IHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJsb25nQXR0cmlidXRlIiksIHRvSlM8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwubG9uZ0F0dHJpYnV0ZSgpKSk7CisgICAgfQorICAgIGlmIChkb3du
Y2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RT
ZXR0aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiZW5hYmxlZEJ5U2V0dGluZ3NBdHRyaWJ1dGUiKSwgdG9KUzxJ
RExVbnNpZ25lZFNob3J0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5l
bmFibGVkQnlTZXR0aW5nc0F0dHJpYnV0ZSgpKSk7CisgICAgfQorI2lmIEVOQUJMRShURVNUX0NP
TkRJVElPTkFMKQorICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiZW5hYmxlZEJ5Q29uZGl0aW9uYWxBdHRyaWJ1dGUiKSwgdG9KUzxJRExFbnVtZXJh
dGlvbjxUZXN0RGVmYXVsdFRvSlNPTkVudW0+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5lbmFibGVkQnlDb25kaXRpb25hbEF0dHJpYnV0ZSgpKSk7CisjZW5kaWYKKwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZmly
c3RTdHJpbmdBdHRyaWJ1dGUiKSwgdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNlY29uZExvbmdB
dHRyaWJ1dGUiKSwgdG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0
dHJpYnV0ZSIpLCB0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkp
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImZpZnRoTG9uZ0NsYW1wZWRBdHRyaWJ1dGUiKSwgdG9KUzxJRExDbGFtcEFkYXB0b3I8SURMTG9u
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpZnRoTG9uZ0NsYW1w
ZWRBdHRyaWJ1dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHRvSlM8SURMRG91YmxlPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaXh0aFR5cGVkZWZBdHRyaWJ1
dGUoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAic2V2ZW50aERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSIpLCB0b0pTPElETEludGVy
ZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERp
cmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiks
IHRvSlM8SURMSW50ZXJmYWNlPFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwuZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuaW50aE9wdGlvbmFsRGly
ZWN0bHlUb0pTT05hYmxlQXR0cmlidXRlIiksIHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubmludGhPcHRpb25h
bERpcmVjdGx5VG9KU09OYWJsZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRl
IiksIHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIHRvSlM8SURM
U2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmli
dXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpLCB0b0pTPElETFNlcXVl
bmNlPElETEludGVyZmFjZTxUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0aGlydGVlbnRoUmVjb3Jk
QXR0cmlidXRlIiksIHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMVW5zaWduZWRTaG9y
dD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwudGhpcnRlZW50aFJlY29yZEF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbmhlcml0TG9uZ0F0
dHJpYnV0ZSIpLCB0b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpLCB0
b0pTPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFs
TG9uZ0F0dHJpYnV0ZUZvbygpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwgdG9KUzxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1
dGVCYXIoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD46OmNhbGw8anNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQor
eworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWwuZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWw+KQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKKyAgICBlbHNlCisgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBtYWtlVW5pcXVlPElz
b1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBl
LmdldCgpLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKKyAgICBhdXRvKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0
KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYgKCZKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lH
Tk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBw
ZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0
aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNl
dExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBh
bmFseXplcik7Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCisjaW5jbHVkZSAiVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsIDogcHVibGljIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ7Cisg
ICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOworICAg
IHN0YXRpYyBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKiBjcmVhdGUoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+KGdsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKSkgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbChzdHJ1Y3R1cmUsICpn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAg
aWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwg
SlNDOjpIZWFwQW5hbHl6ZXImKTsKKyAgICBUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCYg
d3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwmPihCYXNlOjp3cmFwcGVkKCkpOworICAgIH0KK3Byb3Rl
Y3RlZDoKKyAgICBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+
JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbD4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWw7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNjcwMTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMuaCIKICNpbmNsdWRlICJKU1Rlc3RET01KSVQuaCIKKyNpbmNsdWRlICJKU1Rl
c3REZWZhdWx0VG9KU09OLmgiCisjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UuaCIKKyNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5oIgor
I2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuaCIKICNpbmNsdWRlICJK
U1Rlc3REb21haW5TZWN1cml0eS5oIgogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRCeVNldHRpbmcu
aCIKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oIgpAQCAtODUsMTAgKzg5LDYg
QEAKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seU1hcExpa2UuaCIKICNpbmNsdWRlICJKU1Rlc3RS
ZWFkT25seVNldExpa2UuaCIKICNpbmNsdWRlICJKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Qu
aCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0jaW5jbHVkZSAiSlNUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwuaCIKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5n
aWZpZXIuaCIKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5o
IgpAQCAtMTk0LDYgKzE5NCwxNCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDb25kaXRpb25hbEluY2x1ZGVz
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRp
bmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMjg0LDE0ICsyOTIsNiBAQCBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RS
ZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwpAQCAtMzIzLDEzICszMjMsMTMgQEAgdXNpbmcgSlNUZXN0R2xvYmFsT2JqZWN0Q29u
c3RydWN0b3IgPSBKUwogCiAvKiBIYXNoIHRhYmxlICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI3MF0gPSB7Citz
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFi
bGVJbmRleFsyNjhdID0gewogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MiwgLTEgfSwKKyAgICB7
IDQ2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAwLCAtMSB9LAotICAgIHsgOCwgMjY1
IH0sCi0gICAgeyA0NiwgLTEgfSwKKyAgICB7IDgsIC0xIH0sCisgICAgeyA1MCwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTMzNywx
MSArMzM3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU1
LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNCwgLTEgfSwKKyAgICB7IDI4LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzU5LDE0
ICszNTksMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzYs
IC0xIH0sCisgICAgeyA0MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyA3MiwgLTEgfSwKLSAgICB7IDE0LCAyNTkgfSwKKyAgICB7IDE4LCAyNjAgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM3NCwxMSArMzc0
LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQwLCAtMSB9
LAotICAgIHsgMjEsIDI1NiB9LAorICAgIHsgNDQsIC0xIH0sCisgICAgeyAyNSwgMjU3IH0sCiAg
ICAgeyAxMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDcsIC0xIH0sCisgICAgeyA1
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKQEAgLTM4NywxNCArMzg3LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDM4LCAtMSB9LAorICAgIHsgNDIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyMywgMjY3IH0sCisgICAgeyAyNywgMjY1
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBA
IC00MTYsNjYgKzQxNiw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXgg
SlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyAyNSwgMjU3IH0sCisgICAgeyAxNSwgMjU2IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IDYyLCAtMSB9LAotICAgIHsgMjAsIC0xIH0sCisgICAgeyAyNCwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE5LCAtMSB9LAor
ICAgIHsgMjMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM3LCAtMSB9LAorICAgIHsgNDEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNCwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAxNCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAorICAgIHsgMzAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI2LCAtMSB9
LAorICAgIHsgMiwgMjY3IH0sCisgICAgeyA0MywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAg
IHsgMiwgMjY5IH0sCi0gICAgeyAzOSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCisgICAgeyAyNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjIsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTksIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMCwgLTEgfSwKKyAgICB7
IDM0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NCwgLTEgfSwKKyAgICB7IDQ4LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU0LCAtMSB9LAorICAgIHsg
NTgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE1LCAtMSB9LAorICAgIHsgMTksIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDEyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDksIC0xIH0sCi0gICAgeyAt
MSwgLTEgfSwKKyAgICB7IDUzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKKyAgICB7IDE2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA2LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCkBAIC00ODYsOCArNDg2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgMjksIC0xIH0sCi0gICAgeyAzMywgMjYzIH0sCisgICAgeyAzMywg
LTEgfSwKKyAgICB7IDM3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA1LCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCkBAIC00OTcsNyArNDk3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMTcsIDI1OCB9LAorICAgIHsgMjEsIDI1OSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyA2MywgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTA4LDkgKzUw
OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDM1LCAyNjgg
fSwKKyAgICB7IDM5LCAyNjYgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTgsIC0xIH0sCisg
ICAgeyAyMiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNjYsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKQEAgLTUzMSwxMSArNTMxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDQ4LCAyNjQgfSwKKyAgICB7IDUyLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDMsIC0xIH0sCi0gICAgeyAtMSwgLTEgfSwKKyAg
ICB7IDE3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LApAQCAtNTUzLDggKzU1Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhh
c2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDUwLCAyNjIgfSwKLSAgICB7IDExLCAyNjEgfSwKKyAgICB7IDU0LCAyNjMg
fSwKKyAgICB7IDExLCAyNjIgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNjQsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKQEAgLTU2MywzMyArNTYzLDMxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDE2LCAtMSB9LAorICAgIHsgMjAsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDI3LCAtMSB9LAorICAgIHsgMzEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0xIH0sCisgICAgeyAzNiwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDcs
IC0xIH0sCi0gICAgeyA1MiwgLTEgfSwKKyAgICB7IDU2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA1MywgLTEgfSwKKyAgICB7IDU3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyOCwg
MjY2IH0sCi0gICAgeyAzMSwgMjYwIH0sCi0gICAgeyAzNCwgLTEgfSwKLSAgICB7IDQxLCAtMSB9
LAotICAgIHsgNDMsIC0xIH0sCisgICAgeyAyOSwgMjU4IH0sCisgICAgeyAzMiwgMjY0IH0sCisg
ICAgeyAzNSwgMjYxIH0sCisgICAgeyAzOCwgLTEgfSwKICAgICB7IDQ1LCAtMSB9LAotICAgIHsg
NTEsIC0xIH0sCi0gICAgeyA1NiwgLTEgfSwKLSAgICB7IDU3LCAtMSB9LAotICAgIHsgNTgsIC0x
IH0sCisgICAgeyA0NywgLTEgfSwKKyAgICB7IDQ5LCAtMSB9LAorICAgIHsgNTUsIC0xIH0sCiAg
ICAgeyA2MCwgLTEgfSwKICAgICB7IDY1LCAtMSB9LAogICAgIHsgNjksIC0xIH0sCkBAIC02MjEs
NiArNjE5LDEwIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWwKICAg
ICB7ICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEds
b2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IpIH0gfSwKICAgICB7ICJUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3IpIH0gfSwKICAg
ICB7ICJUZXN0RE9NSklUIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29u
c3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IpIH0gfSwK
KyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVz
dERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RG9tYWlu
U2VjdXJpdHkiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNv
bnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0
b3IpIH0gfSwKICAgICB7ICJUZXN0RW5hYmxlZEJ5U2V0dGluZyIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xv
YmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0RXZl
bnRDb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9y
Q29uc3RydWN0b3IpIH0gfSwKQEAgLTY3MSwxMCArNjczLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgIlRlc3RSZWFkT25seU1hcExpa2UiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcikgfSB9LAogICAg
IHsgIlRlc3RSZWFkT25seVNldExpa2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RS
ZWFkT25seVNldExpa2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25s
eVNldExpa2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3QiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RD
b25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RD
b25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfSB9LAotICAgIHsgIlRlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rv
cikgfSB9LAotICAgIHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcikgfSB9LAotICAg
IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcikgfSB9LAog
I2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKICAgICB7ICJUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Ip
IH0gfSwKICNlbHNlCkBAIC0xMjM5LDYgKzEyMzcsOTggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RE9NSklUQ29ucwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvclNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVz
dERPTUpJVCIpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0RGVmYXVs
dFRvSlNPTjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04iKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09O
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0RGVmYXVsdFRvSlNPTiIpLCBzdHJsZW4oIlRlc3REZWZhdWx0VG9KU09OIikp
LCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pT
T05Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Db25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdERlZmF1bHRUb0pTT04iKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFs
T2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIiksIHN0cmxlbigiVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIHJldHVybiBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJp
dENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0IiksIHN0cmxlbigiVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdENv
bnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQiKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsQ29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpn
ZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWxDb25zdHJ1
Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbENvbnN0cnVjdG9yU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWwiKSwgc3RybGVuKCJUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbCIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgIlRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsIik7Cit9CisKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKQEAgLTIyNDAsOTggKzIzMzAsNiBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RSZXBvcnRFeHRyCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmpl
Y3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENv
bnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19
Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0
aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJU
ZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uIiksIHN0
cmxlbigiVGVzdFNlcmlhbGl6YXRpb24iKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0
cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2UiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZh
bHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpz
ZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwotfQot
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rv
ckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdCIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQiKSwgc3RybGVuKCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKSksIHZhbHVlKTsKLX0KLQot
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dCIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQotewot
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwotfQotCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJsZW4o
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwiKTsKLX0KLQogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsMTIgKzYwLDEyIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QK
ICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVh
bihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKICNlbmRpZgorSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRv
SlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25TeW1ib2xJ
dGVyYXRvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRy
aWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTE1MiwxMSArMTUy
LDExIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHIKICNlbHNlCiAg
ICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRpZgorICAgIHsgInRvSlNP
TiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlv
biksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlv
bj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9
LAogICAgIHsgImVudHJpZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAo
aW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAia2V5cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJmb3JF
YWNoIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0
aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkg
fSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwg
KGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwpAQCAtMzg1
LDYgKzM4NSwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQCiAK
ICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSosIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8qIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJuYW1lIiksIHRvSlM8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5uYW1lKCkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09O
Iik7Cit9CisKIHN0cnVjdCBUZXN0Tm9kZUl0ZXJhdG9yVHJhaXRzIHsKICAgICBzdGF0aWMgY29u
c3RleHByIEpTRE9NSXRlcmF0b3JUeXBlIHR5cGUgPSBKU0RPTUl0ZXJhdG9yVHlwZTo6U2V0Owog
ICAgIHVzaW5nIEtleVR5cGUgPSB2b2lkOwpAQCAtNDg4LDI5ICs1MDQsNiBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAgICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQ2FsbGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImZvckVhY2giKTsKIH0KIAotSlND
OjpKU09iamVjdCogSlNUZXN0Tm9kZTo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2RlJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIG5hbWVW
YWx1ZSA9IGpzVGVzdE5vZGVOYW1lR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwgbmFtZVZhbHVl
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0Tm9kZSogdGhpc09iamVjdCkK
LXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OnNlcmlhbGl6ZSgqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2Rl
Pjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIpOwotfQotCiBKU0M6Oklzb1N1YnNwYWNl
KiBKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7CiAgICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9kZS5oCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNUZXN0
Tm9kZSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1v
ZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJ
KHJldmlzaW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk0LDcgKzE1OTQsNiBAQCBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5
RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZy
YW1lKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24o
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAogLy8gQXR0cmlidXRlcwogCkBAIC0yMzM2
LDcgKzIzMzUsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvCiAg
ICAgeyAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbiksIChpbnRw
dHJfdCkgKDApIH0gfSwKICAgICB7ICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29y
a2VyRnVuY3Rpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9z
ZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsg
InRvU3RyaW5nIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKSwgKGludHB0cl90
KSAoMCkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgeyAi
Q09ORElUSU9OQUxfQ09OU1QiLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDApIH0gfSwKICNl
bHNlCkBAIC05NDAzLDQxICs5NDAxLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6
OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmpl
Y3RQcm90b3R5cGUoKSk7Ci0KLSAgICBhdXRvIGNyZWF0ZVZhbHVlID0ganNUZXN0T2JqQ3JlYXRl
R2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZSIpLCBjcmVhdGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHJl
YWRPbmx5U3RyaW5nQXR0clZhbHVlID0ganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVy
KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpLCByZWFkT25seVN0cmluZ0F0dHJWYWx1
ZSk7Ci0KLSAgICBhdXRvIGVudW1BdHRyVmFsdWUgPSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJlbnVtQXR0ciIpLCBlbnVtQXR0clZhbHVlKTsKLQotICAgIGF1dG8gbG9uZ0F0
dHJWYWx1ZSA9IGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvbmdBdHRyIiks
IGxvbmdBdHRyVmFsdWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHkoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSosIEpTVGVzdE9iaiog
dGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6c2Vy
aWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KIEpTQzo6SXNv
U3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewogICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBtdXRhYmxlIEpT
Qzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUxOwogICAgIG11
dGFibGUgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtX2NhY2hlZEF0dHJpYnV0ZTI7
CiAjaWYgRU5BQkxFKENPTkRJVElPTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5j
cHAJKHJldmlzaW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDc3MCAr
MCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5o
IgotI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgotI2luY2x1ZGUgIkpTRE9NQ29u
dmVydE51bGxhYmxlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgotI2luY2x1
ZGUgIkpTRE9NQ29udmVydFNlcXVlbmNlcy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmlu
Z3MuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNE
T01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IkpTRE9NV3JhcHBlckNhY2hlLmgiCi0jaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCi0jaW5j
bHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKLSNpbmNsdWRl
ICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJy
YXkuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
LQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi0vLyBGdW5j
dGlvbnMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6
YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpD
YWxsRnJhbWUqKTsKLQotLy8gQXR0cmlidXRlcwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRo
T3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJv
emVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRlbnRo
RnJvemVuQXJyYXlBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VB
dHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Q
cm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoK
LSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBKU1Rl
c3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewot
ICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRy
OwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBTVEFUSUNfQVNTRVJUX0lT
T19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlLCBCYXNlKTsK
LSAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAgIH0KLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19Owot
U1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXphdGlvblBy
b3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6QmFzZSk7Ci0KLXVzaW5nIEpT
VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb24+OwotCi10ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0
U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7
Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0U2VyaWFsaXphdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0U2Vy
aWFsaXphdGlvbiJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci19Ci0KLXRlbXBsYXRl
PD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfTsK
LQotLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0g
ICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3Rv
ciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcikgfSB9LAotICAgIHsgImZpcnN0U3Ry
aW5nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRl
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJzZWNvbmRM
b25nQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRl
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKSB9IH0sCi0gICAgeyAidGhpcmRVbnNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0
dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVB
dHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSkgfSB9LAotICAgIHsgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2Vy
aWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJm
aWZ0aExvbmdBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRy
aWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKSB9IH0sCi0gICAgeyAic2l4dGhU
eXBlZGVmQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmli
dXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInNl
dmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvblNldmVu
dGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZl
bnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJlaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmli
dXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKSB9IH0sCi0g
ICAgeyAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJp
YWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSkgfSB9LAotICAgIHsgInRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRp
b25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJv
emVuQXJyYXlBdHRyaWJ1dGUpIH0gfSwKLSAgICB7ICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlh
bGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKSB9IH0sCi0gICAgeyAidHdlbGZ0aElu
dGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZSkgfSB9LAotICAgIHsgInRvSlNPTiIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2VyaWFsaXphdGlv
blByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAotfTsKLQotY29u
c3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRl
c3RTZXJpYWxpemF0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlKSB9OwotCi12b2lkIEpT
VGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZt
LCBKU1Rlc3RTZXJpYWxpemF0aW9uOjppbmZvKCksIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5
cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJB
TlNJVElPTigpOwotfQotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbjo6c19p
bmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb24pIH07Ci0KLUpTVGVz
dFNlcmlhbGl6YXRpb246OkpTVGVzdFNlcmlhbGl6YXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4m
JiBpbXBsKQotICAgIDogSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemF0aW9uPihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxp
emF0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlv
bj46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0g
ZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmpl
Y3QuIik7Ci0KLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OmNyZWF0ZVByb3Rv
dHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0
dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVj
dCwgSlNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKLX0KLQotSlNPYmpl
Y3QqIEpTVGVzdFNlcmlhbGl6YXRpb246OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RTZXJp
YWxpemF0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlh
bGl6YXRpb25Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpKTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQotewotICAgIEpTVGVzdFNlcmlhbGl6YXRpb24qIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oY2VsbCk7Ci0gICAgdGhpc09i
amVjdC0+SlNUZXN0U2VyaWFsaXphdGlvbjo6fkpTVGVzdFNlcmlhbGl6YXRpb24oKTsKLX0KLQot
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogSURMQXR0cmlidXRlPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8
SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dFNlcmlhbGl6YXRpb24qIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FzdChK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUp
Ci17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Ci17Ci0gICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGUqPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBl
KSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZp
cnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdB
dHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZp
cnN0U3RyaW5nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbkZp
cnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUi
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0
cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0
Rmlyc3RTdHJpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmlu
Z0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKLX0KLQot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJp
YWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSkpKTsKLX0KLQot
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFs
aXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgInNlY29uZExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0U2Vjb25kTG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXph
dGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2Vjb25k
TG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17
Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGhpcmRVbnNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpz
VGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6
YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RFeGNl
cHRpb24+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxp
emF0aW9uIiwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIp
OyB9KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKLSAgICAgICAgcmV0dXJuIGltcGwuc2V0VGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgq
bmF0aXZlVmFsdWUpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpT
VGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
Pjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAg
ICAgIHJldHVybiBpbXBsLnNldEZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3Vy
dGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZp
ZnRoTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUo
KSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRy
aWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRp
b24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRGaWZ0aExvbmdBdHRyaWJ1dGUoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRl
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJm
aWZ0aExvbmdBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0g
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5z
aXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNl
cmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzaXh0aFR5
cGVkZWZBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJl
dHVybiBpbXBsLnNldFNpeHRoVHlwZWRlZkF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0
PHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNpeHRoVHlwZWRlZkF0
dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkK
LXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7Ci19Ci0K
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxp
emFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50
aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic2V2ZW50aERp
cmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxp
emF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7IH0pOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1
cm4gaW1wbC5zZXRTZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZh
bHVlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRo
SW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50
ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVp
Z2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxq
c1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVz
dFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1w
bC5zZXRFaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09i
amVjdCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+
OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUs
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0g
ICAgICAgIHJldHVybiBpbXBsLnNldE5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpT
VGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
Im5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRy
aWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNl
cmlhbGl6YXRpb24mIHRoaXNPYmplY3QpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZyb3plbkFycmF5PElETEJv
b2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNl
cmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRy
aWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIik7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJh
eUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExGcm96ZW5B
cnJheTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1
cm4gaW1wbC5zZXRUZW50aEZyb3plbkFycmF5QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZW50
aEZyb3plbkFycmF5QXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCkKLXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVz
dFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAi
ZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRFbGV2ZW50aFNlcXVl
bmNlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAgICB9KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6
YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aElu
dGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0KQotewotICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwudHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKSk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVy
ZmFjZVNlcXVlbmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNz
ZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidHdlbGZ0aEludGVyZmFjZVNl
cXVlbmNlQXR0cmlidXRlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0
dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAg
IHJldHVybiBpbXBsLnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRo
SW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0
ZSIpOwotfQotCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24m
IHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVj
dFByb3RvdHlwZSgpKTsKLQotICAgIGF1dG8gZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpz
VGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJm
aXJzdFN0cmluZ0F0dHJpYnV0ZSIpLCBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlKTsKLQotICAg
IGF1dG8gc2Vjb25kTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNlY29u
ZExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0g
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBz
ZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOwotCi0gICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7
Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlIiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsK
LQotICAgIGF1dG8gZmlmdGhMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9u
RmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qp
OwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpZnRoTG9uZ0F0dHJpYnV0ZSIp
LCBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICBhdXRvIHNpeHRoVHlwZWRlZkF0dHJp
YnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRl
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmli
dXRlVmFsdWUpOwotCi0gICAgYXV0byBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8qIHNldmVudGhEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIHNldmVudGhE
aXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7Ci0KLSAgICBhdXRv
IGVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25FaWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmpl
Y3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBhdXRvKiBlaWdo
dGhJbmRpcmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanND
YXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJl
Y3RseUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJlaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlIiksIGVpZ2h0aEluZGlyZWN0
bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUpOwotCi0gICAgYXV0byBuaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25OaW50
aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OwotICAgIGlmICghbmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFs
dWUuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byogbmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbDo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsICpqc0Nhc3Q8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXJpYWxp
emVkVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpLCBuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVW
YWx1ZSk7Ci0KLSAgICBhdXRvIHRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVz
dFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24o
KTsKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKSwgdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZVZh
bHVlKTsKLQotICAgIGF1dG8gZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0
U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
ZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIpLCBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFs
dWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxp
emF0aW9uKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
LXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYWxsPGpz
VGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KLUpTQzo6SXNvU3Vic3BhY2Uq
IEpTVGVzdFNlcmlhbGl6YXRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9u
LmdldCgpKQotICAgICAgICByZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9u
PiB8fCAhSlNUZXN0U2VyaWFsaXphdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RTZXJpYWxpemF0aW9uPikKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFs
aXphdGlvbiA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhl
YXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFs
aXphdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJp
YWxpemF0aW9uID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbik7Ci0g
ICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uLmdl
dCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2Vy
aWFsaXphdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHMpCi0gICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgcmV0dXJuIHNwYWNlOwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb246
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKLXsKLSAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPihjZWxsKTsK
LSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+
d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFz
ZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwotfQotCi1ib29sIEpTVGVzdFNlcmlhbGl6
YXRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioq
IHJlYXNvbikKLXsKLSAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKLSAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Pd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgYXV0byoganNUZXN0
U2VyaWFsaXphdGlvbiA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb24qPihoYW5kbGUu
c2xvdCgpLT5hc0NlbGwoKSk7Ci0gICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3Jh
cHBlcldvcmxkKj4oY29udGV4dCk7Ci0gICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RT
ZXJpYWxpemF0aW9uLT53cmFwcGVkKCksIGpzVGVzdFNlcmlhbGl6YXRpb24pOwotfQotCi0jaWYg
RU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQotI2lmIFBMQVRGT1JNKFdJTikKLSNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0NDgzKQotZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19p
ZGVudGlmaWVyKCI/P183VGVzdFNlcmlhbGl6YXRpb25AV2ViQ29yZUBANkJAIilbXSkoKTsgfQot
I2Vsc2UKLWV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTE3VGVzdFNlcmlh
bGl6YXRpb25FW107IH0KLSNlbmRpZgotI2VuZGlmCi0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYgaW1wbCkKLXsKLQotI2lmIEVOQUJMRShCSU5E
SU5HX0lOVEVHUklUWSkKLSAgICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0
VlRhYmxlUG9pbnRlcihpbXBsLnB0cigpKTsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCog
ZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdFNlcmlhbGl6YXRp
b25AV2ViQ29yZUBANkJAIik7Ci0jZWxzZQotICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRl
ciA9ICZfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXphdGlvbkVbMl07Ci0jZW5kaWYKLQotICAg
IC8vIElmIHRoaXMgZmFpbHMgVGVzdFNlcmlhbGl6YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZ0YWJs
ZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQotICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFi
bGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgotICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0U2VyaWFsaXphdGlvbj46OnZhbHVlLCAiVGVzdFNl
cmlhbGl6YXRpb24gaXMgbm90IHBvbHltb3JwaGljIik7Ci0KLSAgICAvLyBJZiB5b3UgaGl0IHRo
aXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKLSAg
ICAvLyBUZXN0U2VyaWFsaXphdGlvbiBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdFNlcmlhbGl6YXRp
b24gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCi0gICAgLy8gdG8gdG9KUygpIHdlIGN1
cnJlbnRseSByZXF1aXJlIFRlc3RTZXJpYWxpemF0aW9uIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRp
bmcgaGFyZGVuaW5nCi0gICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBh
dHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgotICAgIFJFTEVBU0VfQVNT
RVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKLSNlbmRp
ZgotICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RTZXJpYWxpemF0aW9uPihnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpOwotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0U2VyaWFsaXphdGlvbiYgaW1wbCkKLXsKLSAgICByZXR1cm4gd3JhcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwotfQotCi1UZXN0U2VyaWFsaXphdGlv
biogSlNUZXN0U2VyaWFsaXphdGlvbjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNlcmlhbGl6YXRpb24qPih2bSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gJndyYXBwZXItPndy
YXBwZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbi5oCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCShub25leGlzdGVudCkKQEAg
LTEsOTQgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uLmgi
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdFNl
cmlhbGl6YXRpb24+IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRl
c3RTZXJpYWxpemF0aW9uPjsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbiogY3JlYXRl
KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKQotICAgIHsKLSAgICAgICAgSlNUZXN0
U2VyaWFsaXphdGlvbiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RTZXJpYWxpemF0aW9uPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6
YXRpb24oc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICByZXR1cm4g
cHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgVGVz
dFNlcmlhbGl6YXRpb24qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0K
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOwotICAgIH0KLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbCh2bSk7Ci0gICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwotICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7Ci1wcm90ZWN0ZWQ6Ci0gICAgSlNUZXN0U2Vy
aWFsaXphdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RT
ZXJpYWxpemF0aW9uPiYmKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwot
fTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbk93bmVyIDogcHVibGljIEpTQzo6V2Vha0hh
bmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwotfTsKLQotaW5saW5lIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdFNl
cmlhbGl6YXRpb24qKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RTZXJpYWxp
emF0aW9uT3duZXI+IG93bmVyOwotICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Ci19Ci0KLWlubGlu
ZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RTZXJpYWxpemF0aW9uKiB3cmFwcGFibGVPYmplY3QpCi17
Ci0gICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKLX0KLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFNlcmlhbGl6YXRpb24m
KTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFs
aXphdGlvbiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdFNlcmlhbGl6YXRpb24+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFs
aXphdGlvbj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNlcmlhbGl6YXRpb247
Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RTZXJpYWxpemF0aW9uKjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkocmV2aXNpb24gMjY3
MDE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE5
OCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5oIgotCi0j
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0j
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5l
cy5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBh
cmF0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2VQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1
YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRp
YyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU+KHZt
LmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsK
LSAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUsIEJhc2UpOwotICAgICAgICByZXR1
cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7Ci0gICAgfQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Ci19OwotU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0U2VyaWFsaXph
dGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpCYXNlKTsKLQotdXNpbmcgSlNUZXN0U2VyaWFsaXph
dGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPjsKLQot
dGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsKLX0KLQot
dGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLX0KLQotdGVtcGxhdGU8PiBjb25z
dCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSB9OwotCi0vKiBI
YXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlVGFibGVWYWx1
ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKSB9IH0sCi19OwotCi1jb25zdCBDbGFzc0luZm8g
SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OnNfaW5mbyA9
IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUpIH07Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXph
dGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
LXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0
aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6aW5mbygpLCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZVByb3RvdHlwZVRhYmxlVmFsdWVz
LCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Ci19
Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSkgfTsKLQotSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2U6OkpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRh
bmNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPiYmIGltcGwpCi0gICAg
OiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RG
TW92ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotCi0gICAgc3RhdGlj
X2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBh
cyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJj
bGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQotCi1KU09iamVjdCogSlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmpl
Y3QsIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8
SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+KHZtLCBnbG9iYWxPYmplY3Qp
OwotfQotCi1KU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJv
dG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVj
dCgpKSk7Ci19Ci0KLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpKTsKLX0KLQotSlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXph
dGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKLXsK
LSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNwYWNlOwotICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+IHx8ICFKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4pCi0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJ
bmhlcml0YW5jZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpT
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKTsKLSAgICBhdXRvKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
LmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQotICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKLX0KLQotdm9p
ZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQotewotICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UqPihjZWxs
KTsKLSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVj
dC0+d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhp
c09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAg
QmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwotfQotCi0KLX0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5o
CShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdC5oIgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIDogcHVibGljIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQ7Ci0gICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZTsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2UqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPiYm
IGltcGwpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0
YW5jZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxp
emF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZShzdHJ1Y3R1cmUsICpnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9i
amVjdC0+dm0oKSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotCi0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBK
U0M6Ok5vbkFycmF5KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0
cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsK
LSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKLSAgICBUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UmIHdy
YXBwZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSY+KEJhc2U6OndyYXBwZWQoKSk7Ci0gICAgfQot
cHJvdGVjdGVkOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlPiYmKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOwotfTsKLQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPiB7Ci0gICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U7Ci0gICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZSo7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAJKHJldmlzaW9uIDI2NzAxNykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuaCIKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCi0jaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdENvbnN0cnVj
dG9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5h
bWVzcGFjZSBKU0M7Ci0KLS8vIEZ1bmN0aW9ucwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLQotLy8gQXR0cmlidXRl
cwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0UHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKLSAg
ICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJB
QkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlLCBCYXNlKTsKLSAgICAgICAg
cmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOwotICAgIH0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi0gICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLVNU
QVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0UHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZTo6QmFzZSk7
Ci0KLXVzaW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IgPSBKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD47Ci0K
LXRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9y
Ojpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb246Omdl
dENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8PiB2b2lkIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Il9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLX0KLQotdGVtcGxhdGU8PiBj
b25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dENvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KLQotc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90
eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdENvbnN0cnVjdG9yKSB9IH0sCi0gICAgeyAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ig
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKSB9IH0sCi0gICAgeyAidG9KU09OIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90
KSAoMCkgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKSB9OwotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQ6OmluZm8oKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQ
cm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhP
VVRfVFJBTlNJVElPTigpOwotfQotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQ6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQpIH07Ci0KLUpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4mJiBpbXBsKQot
ICAgIDogSlNUZXN0U2VyaWFsaXphdGlvbihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92
ZShpbXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotCi0gICAgc3RhdGljX2Fzc2VydCghc3RkOjpp
c19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6dmFs
dWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRo
b3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsK
LQotfQotCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmNyZWF0ZVByb3Rv
dHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0
dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9i
YWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb246OnByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0KSkpOwotfQotCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dD4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KLUpTVmFsdWUgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQqIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46
OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSkKLXsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0KiBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+Ojpj
YXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxG
cmFtZSkKLXsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1Zh
bHVlKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxP
YmplY3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIFZNJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAg
ICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IKLSAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCkKLXsKLSAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
TG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbmhlcml0TG9uZ0F0
dHJpYnV0ZSgpKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6Z2V0PGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJp
bmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBb
Jl0gewotICAgICAgICByZXR1cm4gaW1wbC5zZXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEluaGVyaXRMb25nQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwotfQotCi1KU0M6OkpT
T2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6c2VyaWFsaXplKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhp
c09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNl
cmlhbGl6YXRpb246OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBn
bG9iYWxPYmplY3QpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLQotICAg
IGF1dG8gaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRy
aWJ1dGUiKSwgaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCogdGhp
c09iamVjdCkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0OjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAq
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
Pjo6Y2FsbDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKLX0KLQot
SlNDOjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0gY2xp
ZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHNw
YWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+IHx8ICFKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdD4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdCk7Ci0gICAgZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0KTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQot
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIHJldHVybiBz
cGFjZTsKLX0KLQotdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQotewotICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqPihjZWxsKTsKLSAgICBh
bmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBl
ZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAg
ICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwotfQotCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJK
U1Rlc3RTZXJpYWxpemF0aW9uLmgiCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQgOiBwdWJsaWMgSlNUZXN0U2VyaWFsaXphdGlvbiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcg
QmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb247Ci0gICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdDsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0PiYmIGltcGwpCi0gICAg
ewotICAgICAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChzdHJ1Y3R1cmUsICpn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLSAgICBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQm
IHdyYXBwZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCY+KEJhc2U6OndyYXBwZWQoKSk7Ci0gICAgfQotcHJvdGVjdGVk
OgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0PiYmKTsKLQotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0PiB7Ci0g
ICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ7Ci0gICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCo7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMDkgKzAsMCBAQAotLyoKLSAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIgotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIKLSNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSAiSlNET01PcGVyYXRp
b24uaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0
Q29uc3RydWN0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMu
aD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJh
dGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
dXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotLy8gRnVuY3Rpb25zCi0KLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci0K
LS8vIEF0dHJpYnV0ZXMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
Rm9vKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLQotY2xhc3Mg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpT
Tm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0g
ICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUsIEJhc2UpOwotICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2U7Ci0gICAgfQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLX07Ci1TVEFUSUNfQVNT
RVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
UHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpCYXNl
KTsKLQotdXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yID0g
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbD47Ci0KLXRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29u
c3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsK
LX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIl9zKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENv
bnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KLQotc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90
b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKSB9IH0sCi0gICAgeyAiZmluYWxMb25nQXR0cmli
dXRlRm9vIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9v
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbykg
fSB9LAotICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIpIH0gfSwKLSAgICB7ICJ0b0pTT04iLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJf
dCkgKDApIH0gfSwKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSkgfTsKLQotdm9pZCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJlaWZ5U3RhdGlj
UHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6aW5mbygpLCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlz
KTsKLSAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKLX0KLQotY29u
c3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNfaW5mbyA9IHsg
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsKSB9OwotCi1KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+JiYgaW1w
bCkKLSAgICA6IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltcGwpKQotewotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0
aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2Vz
IEFjdGl2ZURPTU9iamVjdC4iKTsKLQotfQotCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmpl
Y3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPih2
bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPD4g
aW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIElETE9wZXJhdGlvbjxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KSkpOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewot
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkp
OwotfQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCkK
LXsKLSAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5maW5hbExvbmdBdHRyaWJ1dGVGb28oKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExv
bmdBdHRyaWJ1dGVGb29HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAg
ICByZXR1cm4gaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1dGVGb28oV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwotICAgIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKLX0KLQot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5h
bExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QpCi17Ci0gICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmluYWxM
b25nQXR0cmlidXRlQmFyKCkpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbD46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlQmFyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlQmFyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKLSAgICAgICAgcmV0dXJu
IGltcGwuc2V0RmluYWxMb25nQXR0cmlidXRlQmFyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Ci19Ci0KLUpTQzo6SlNP
YmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHJlc3VsdCA9
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7Ci0KLSAgICBhdXRvIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhclZhbHVlID0ganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFs
dWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiB0aGlzT2JqZWN0KQotewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFs
aXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYWxs
PGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkJv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7Ci19Ci0KLUpT
Qzo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKLXsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgc3BhY2VzID0g
Y2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmdldCgpKQotICAgICAgICBy
ZXR1cm4gc3BhY2U7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPiB8fCAh
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPikKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SXNvU3Vi
c3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCk7Ci0gICAg
ZWxzZQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgdm0uY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbCk7Ci0gICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsLmdldCgpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgIGlmICgmSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCi0gICAg
ICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgcmV0dXJuIHNwYWNl
OwotfQotCi12b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKLXsKLSAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihjZWxsKTsK
LSAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+
d3JhcHBlZCgpKTsKLSAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQotICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgQmFz
ZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOwotfQotCi0KLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAkocmV2aXNpb24gMjY3MDE3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RPTVdy
YXBwZXIuaCIKLSNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oIgotI2luY2x1
ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCA6IHB1YmxpYyBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0OwotICAgIHVzaW5nIERPTVdyYXBwZWQgPSBUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbDsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4mJiBp
bXBsKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLSAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICBy
ZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90
b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxp
emUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwm
IHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09
IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0g
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
LSAgICBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwmPihCYXNlOjp3cmFwcGVkKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+JiYpOwotCi0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4gewotICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7Ci0g
ICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9ET01NYXRyaXhSZWFkT25seS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkocmV2aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtOTcsNSAr
OTcsNSBAQAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRmxvYXQ2NEFycmF5IHRvRmxvYXQ2NEFy
cmF5KCk7CiAKICAgICBbRXhwb3NlZD1XaW5kb3csIE1heVRocm93RXhjZXB0aW9uXSBzdHJpbmdp
ZmllcjsKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsKKyAgICBbRGVmYXVsdF0gb2Jq
ZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJlYWRP
bmx5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUG9pbnRSZWFkT25s
eS5pZGwJKHJldmlzaW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01Qb2ludFJl
YWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDUsNSArNDUsNSBAQAogCiAgICAgW01heVRo
cm93RXhjZXB0aW9uXSBET01Qb2ludCBtYXRyaXhUcmFuc2Zvcm0ob3B0aW9uYWwgRE9NTWF0cml4
SW5pdCBtYXRyaXgpOwogCi0gICAgc2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
UXVhZC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVF1YWQuaWRsCShy
ZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NUXVhZC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NUG9p
bnQgcDQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgW1NhbWVPYmplY3RdLgogICAgIFtOZXdPYmplY3Rd
IERPTVJlY3QgZ2V0Qm91bmRzKCk7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUgfTsK
KyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9ET01SZWN0UmVhZE9ubHkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9ET01SZWN0UmVhZE9ubHkuaWRsCShyZXZpc2lvbiAyNjcwMTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NUmVjdFJlYWRPbmx5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDQsNSArNDQsNSBA
QAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZG91YmxlIGJvdHRvbTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSBsZWZ0OwogCi0gICAgc2Vy
aWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJKHJldmlz
aW9uIDI2NzAxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VFbnRyeS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDUgKzQxLDUgQEAgdHlwZWRlZiBkb3VibGUgRE9NSGlnaFJl
c1RpbWVTdGFtcDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVudHJ5VHlwZTsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBzdGFydFRpbWU7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb247Ci0gICAg
c2VyaWFsaXplciA9IHsgYXR0cmlidXRlIH07CisgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1p
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3Vy
Y2VUaW1pbmcuaAkocmV2aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEzICs2MywxMyBA
QCBwdWJsaWM6CiAgICAgZG91YmxlIHJlc3BvbnNlRW5kKCkgY29uc3Q7CiAgICAgY29uc3QgVmVj
dG9yPFJlZjxQZXJmb3JtYW5jZVNlcnZlclRpbWluZz4+JiBzZXJ2ZXJUaW1pbmcoKSBjb25zdCB7
IHJldHVybiBtX3NlcnZlclRpbWluZzsgfQogCisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gVHlwZTo6UmVzb3VyY2U7IH0KKyAgICBBU0NJSUxpdGVyYWwgZW50cnlUeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gInJlc291cmNlIl9zOyB9CisKIHByaXZhdGU6CiAgICAgUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZyhNb25vdG9uaWNUaW1lIHRpbWVPcmlnaW4sIFJlc291cmNl
VGltaW5nJiYpOwogICAgIH5QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nKCk7CiAKLSAgICBUeXBl
IHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpSZXNvdXJjZTsgfQotICAgIEFTQ0lJ
TGl0ZXJhbCBlbnRyeVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAicmVzb3VyY2UiX3M7IH0K
LQogICAgIGRvdWJsZSBuZXR3b3JrTG9hZFRpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoU2Vjb25k
cykgY29uc3Q7CiAKICAgICBBdG9tU3RyaW5nIG1faW5pdGlhdG9yVHlwZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbAkocmV2
aXNpb24gMjY3MDE3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTMsNSArNTMsNSBAQCB0eXBlZGVmIGRvdWJs
ZSBET01IaWdoUmVzVGltZVN0YW1wOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01IaWdoUmVz
VGltZVN0YW1wIHJlc3BvbnNlRW5kOwogICAgIFtFbmFibGVkQXRSdW50aW1lPVNlcnZlclRpbWlu
Z10gcmVhZG9ubHkgYXR0cmlidXRlIEZyb3plbkFycmF5PFBlcmZvcm1hbmNlU2VydmVyVGltaW5n
PiBzZXJ2ZXJUaW1pbmc7CiAKLSAgICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBhdHRyaWJ1dGUg
fTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmcuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VTZXJ2ZXJUaW1pbmcuaWRsCShyZXZpc2lvbiAyNjcw
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlU2VydmVyVGltaW5nLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNSArMzYsNSBAQCB0eXBlZGVmIGRvdWJsZSBET01IaWdoUmVz
VGltZVN0YW1wOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBkdXJhdGlvbjsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgIHNlcmlhbGl6ZXIgPSB7
YXR0cmlidXRlfTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsCShyZXZpc2lvbiAyNjcwMTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNSArNTQsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxvbmcgbG9hZEV2ZW50U3RhcnQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgbG9uZyBsb2FkRXZlbnRFbmQ7CiAKLSAgICBzZXJpYWxpemVyID0geyBhdHRyaWJ1dGUg
fTsKKyAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwogfTsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI2NzAxNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA5LTEzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbV2ViSURMXSBSZXBsYWNlICdzZXJpYWxpemFibGUnIHdpdGggJ1tEZWZhdWx0XSBv
YmplY3QgdG9KU09OKCknCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTYxNDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NjY4NDA3PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBVcGRhdGUgdGVzdCBhbmQg
cmVzdWx0cyB0byBhY2NvdW50IGZvciBSVENJY2VDYW5kaWRhdGUudG9KU09OKCkgCisgICAgICAg
IG5vdyByZXR1cm5pbmcgUlRDSWNlQ2FuZGlkYXRlSW5pdC4KKworICAgICAgICAqIGZhc3QvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L21l
ZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sOgorCiAyMDIwLTA5LTE0ICBIZWN0b3IgTG9w
ZXogIDxoZWN0b3JfaV9sb3BlekBhcHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyBdIHdlYmFu
aW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWVhc2luZy11cGRhdGUtYWZ0ZXItcGF1c2Uu
aHRtbCBpcyBhIGZsYWt5IEltYWdlT25seUZhaWx1cmUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDI2NzAxNykKKysrIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNl
Q2FuZGlkYXRlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcsMTEgKzE3LDExIEBA
IFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc28KIFBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikud3JpdGFibGUgaXMg
dHJ1ZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5k
aWRhdGUiKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBjaGlsZENhbmRpZGF0ZS50b0pTT04o
KTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2FuIG9ubHkgY2FsbCBSVENJY2VDYW5kaWRh
dGUudG9KU09OIG9uIGluc3RhbmNlcyBvZiBSVENJY2VDYW5kaWRhdGUuCi1QQVNTIEpTT04uc3Ry
aW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJz
ZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgotUEFTUyBKU09OLnN0cmluZ2lm
eShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlk
XCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKLVBBU1MgSlNPTi5zdHJpbmdpZnkoY2Fu
ZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwi
YmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCi1QQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0
ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwi
LFwic2RwTUxpbmVJbmRleFwiOjZ9IgotUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9K
U09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNk
cE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigp
KSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1MaW5lSW5kZXhcIjo2LFwic2RwTWlk
XCI6XCJiYXJcIixcInVzZXJuYW1lRnJhZ21lbnRcIjpudWxsfSIKK1BBU1MgSlNPTi5zdHJpbmdp
ZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1M
aW5lSW5kZXhcIjo2LFwic2RwTWlkXCI6XCJiYXJcIixcInVzZXJuYW1lRnJhZ21lbnRcIjpudWxs
fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlk
YXRlXCI6XCJmb29cIixcInNkcE1MaW5lSW5kZXhcIjo2LFwic2RwTWlkXCI6XCJiYXJcIixcInVz
ZXJuYW1lRnJhZ21lbnRcIjpudWxsfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRv
SlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1MaW5lSW5kZXhcIjo2LFwi
c2RwTWlkXCI6XCJiYXJcIixcInVzZXJuYW1lRnJhZ21lbnRcIjpudWxsfSIKK1BBU1MgSlNPTi5z
dHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixc
InNkcE1MaW5lSW5kZXhcIjo2LFwic2RwTWlkXCI6XCJiYXJcIixcInVzZXJuYW1lRnJhZ21lbnRc
IjpudWxsfSIKIAogQXR0cmlidXRlcyBhcmUgcmVhZG9ubHkKIGNhbmRpZGF0ZS5jYW5kaWRhdGUg
PSAiZm9vLXVwZGF0ZWQiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwJKHJldmlzaW9uIDI2NzAxNykKKysrIExheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDE1ICszMCwxNSBAQAogICAgICAgICAgICAgdmFyIGNoaWxkQ2FuZGlkYXRlID0gbmV3IGNo
aWxkUlRDSWNlQ2FuZGlkYXRlKCk7CiAgICAgICAgICAgICBzaG91bGRUaHJvdygnY2hpbGRDYW5k
aWRhdGUudG9KU09OKCk7Jyk7CiAKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
SlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIs
InNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7CisgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJj
YW5kaWRhdGUiOiJmb28iLCJzZHBNTGluZUluZGV4Ijo2LCJzZHBNaWQiOiJiYXIiLCJ1c2VybmFt
ZUZyYWdtZW50IjpudWxsfScpOwogICAgICAgICAgICAgY2FuZGlkYXRlLm5ld0F0dHJpYnV0ZSA9
ICJuZXcgdmFsdWUiOwotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0
cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlk
IjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0
ZSI6ImZvbyIsInNkcE1MaW5lSW5kZXgiOjYsInNkcE1pZCI6ImJhciIsInVzZXJuYW1lRnJhZ21l
bnQiOm51bGx9Jyk7CiAgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCA9ICJub3Qg
YSBudW1iZXIiOwotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmlu
Z2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoi
YmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6
ImZvbyIsInNkcE1MaW5lSW5kZXgiOjYsInNkcE1pZCI6ImJhciIsInVzZXJuYW1lRnJhZ21lbnQi
Om51bGx9Jyk7CiAgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0gNzsKLSAgICAgICAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigp
KScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9
Jyk7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNh
bmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNTGluZUluZGV4Ijo2
LCJzZHBNaWQiOiJiYXIiLCJ1c2VybmFtZUZyYWdtZW50IjpudWxsfScpOwogICAgICAgICAgICAg
Y2FuZGlkYXRlLnNkcE1pZCA9IG51bGw7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJm
b28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywg
J3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTUxpbmVJbmRleCI6Niwic2RwTWlkIjoiYmFyIiwidXNl
cm5hbWVGcmFnbWVudCI6bnVsbH0nKTsKIAogICAgICAgICAgICAgZGVidWcoIiIpOwogCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzAxNykKKysrIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OCBAQAorMjAyMC0wOS0xMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgW1dlYklETF0gUmVwbGFjZSAnc2VyaWFsaXphYmxlJyB3aXRoICdbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpJworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODY2ODQwNz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgVXBkYXRlIHJlc3VsdHMgdG8gYWNj
b3VudCBmb3Igbm93IGNvcnJlY3RseSByZXR1cm5pbmcgRE9NUG9pbnRzLAorICAgICAgICByYXRo
ZXIgdGhhbiB2YW5pbGxhIE9iamVjdHMsIGZvciB0aGUgcG9pbnRzIGluIGEgRE9NUXVhZCB3aGVu
IHVzaW5nCisgICAgICAgIHRvSlNPTi4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvZ2VvbWV0cnkvaWRsaGFybmVzcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL2Nzcy9nZW9tZXRyeS9pZGxoYXJuZXNzLndvcmtlci1leHBlY3RlZC50eHQ6CisK
IDIwMjAtMDktMTIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04gKHIyNjY4MTcpOiBBU1NFUlRJT04gRkFJTEVEOiBpbmplY3RlZEJ1bmRsZS5pc1Rl
c3RSdW5uaW5nKCkgb24gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2aWNlLXdv
cmtlcnMvc2VydmljZS13b3JrZXIvc3ZnLXRhcmdldC1yZWZ0ZXN0Lmh0dHBzLmh0bWwKSW5kZXg6
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2dlb21ldHJ5
L2lkbGhhcm5lc3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2dlb21ldHJ5L2lkbGhhcm5lc3MtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAyNjcwMTcpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9nZW9tZXRyeS9pZGxoYXJuZXNzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIFBBU1MgRE9NUXVhZCBpbnRlcmZhY2U6IG5l
dyBET01RdWFkKCkgbXUKIFBBU1MgRE9NUXVhZCBpbnRlcmZhY2U6IG5ldyBET01RdWFkKCkgbXVz
dCBpbmhlcml0IHByb3BlcnR5ICJwNCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBQQVNTIERPTVF1
YWQgaW50ZXJmYWNlOiBuZXcgRE9NUXVhZCgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0Qm91
bmRzKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIAogUEFTUyBET01RdWFkIGludGVyZmFjZTogbmV3
IERPTVF1YWQoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInRvSlNPTigpIiB3aXRoIHRoZSBwcm9w
ZXIgdHlwZSAKLUZBSUwgRE9NUXVhZCBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlv
biBvbiBuZXcgRE9NUXVhZCgpIGFzc2VydF90cnVlOiBpbnN0YW5jZW9mIERPTVBvaW50IGV4cGVj
dGVkIHRydWUgZ290IGZhbHNlCitQQVNTIERPTVF1YWQgaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNP
TiBvcGVyYXRpb24gb24gbmV3IERPTVF1YWQoKSAKIFBBU1MgRE9NTWF0cml4UmVhZE9ubHkgaW50
ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCAKIFBB
U1MgRE9NTWF0cml4UmVhZE9ubHkgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggCiBQQVNTIERPTU1h
dHJpeFJlYWRPbmx5IGludGVyZmFjZSBvYmplY3QgbmFtZSAKSW5kZXg6IExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2dlb21ldHJ5L2lkbGhhcm5lc3Mud29y
a2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9nZW9tZXRyeS9pZGxoYXJuZXNzLndvcmtlci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDI2NzAxNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2dlb21ldHJ5L2lkbGhhcm5lc3Mud29ya2VyLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIFBBU1MgRE9NUXVhZCBpbnRlcmZh
Y2U6IG5ldyBET01RdWFkKCkgbXUKIFBBU1MgRE9NUXVhZCBpbnRlcmZhY2U6IG5ldyBET01RdWFk
KCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJwNCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBQQVNT
IERPTVF1YWQgaW50ZXJmYWNlOiBuZXcgRE9NUXVhZCgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAi
Z2V0Qm91bmRzKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIAogUEFTUyBET01RdWFkIGludGVyZmFj
ZTogbmV3IERPTVF1YWQoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInRvSlNPTigpIiB3aXRoIHRo
ZSBwcm9wZXIgdHlwZSAKLUZBSUwgRE9NUXVhZCBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9w
ZXJhdGlvbiBvbiBuZXcgRE9NUXVhZCgpIGFzc2VydF90cnVlOiBpbnN0YW5jZW9mIERPTVBvaW50
IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCitQQVNTIERPTVF1YWQgaW50ZXJmYWNlOiBkZWZhdWx0
IHRvSlNPTiBvcGVyYXRpb24gb24gbmV3IERPTVF1YWQoKSAKIFBBU1MgRE9NTWF0cml4UmVhZE9u
bHkgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVj
dCAKIFBBU1MgRE9NTWF0cml4UmVhZE9ubHkgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggCiBQQVNT
IERPTU1hdHJpeFJlYWRPbmx5IGludGVyZmFjZSBvYmplY3QgbmFtZSAK
</data>

          </attachment>
      

    </bug>

</bugzilla>