<?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>163275</bug_id>
          
          <creation_ts>2016-10-11 05:32:55 -0700</creation_ts>
          <short_desc>Attribute setter binding generated code should use more references</short_desc>
          <delta_ts>2016-10-12 00:39:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1238818</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-11 05:32:55 -0700</bug_when>
    <thetext>Attribute setter binding generated code should use more references</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238819</commentid>
    <comment_count>1</comment_count>
      <attachid>291249</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-11 05:38:25 -0700</bug_when>
    <thetext>Created attachment 291249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238846</commentid>
    <comment_count>2</comment_count>
      <attachid>291249</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-11 08:10:57 -0700</bug_when>
    <thetext>Comment on attachment 291249
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4935
&gt; +    # FIXME: Remove these 3 variables while all JSValueToNative use references.

when</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239210</commentid>
    <comment_count>3</comment_count>
      <attachid>291342</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-12 00:05:13 -0700</bug_when>
    <thetext>Created attachment 291342
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239217</commentid>
    <comment_count>4</comment_count>
      <attachid>291342</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-12 00:39:53 -0700</bug_when>
    <thetext>Comment on attachment 291342
Patch for landing

Clearing flags on attachment: 291342

Committed r207193: &lt;http://trac.webkit.org/changeset/207193&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239218</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-12 00:39:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291249</attachid>
            <date>2016-10-11 05:38:25 -0700</date>
            <delta_ts>2016-10-12 00:05:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163275-20161011143500.patch</filename>
            <type>text/plain</type>
            <size>152837</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MDYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRjZWRlMWQ5MjMyM2U5
MDk3NmIxZTg1NGFmNmMxMGExYTRkMTg1YS4uNDc3ZGU1NDgzMTIyODkzYzNjYTQ2MTcwYmEyYmU0
MDk5N2VhZTdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTEwLTExICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRyaWJ1dGUgc2V0dGVy
IGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHVzZSBtb3JlIHJlZmVyZW5jZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI3NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBi
ZWhhdmlvci4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
OgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisKIDIwMTYt
MTAtMTEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
SURCVmVyc2lvbkNoYW5nZUV2ZW50IHRvIHN0b3AgdXNpbmcgbGVnYWN5IFtDb25zdHJ1Y3RvclRl
bXBsYXRlPUV2ZW50XQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApp
bmRleCA3YTk4OGM1OTdhNjRjOWY4ODJkZmY2NGQ1ZmQ0ZGUyNzNkYTI4YTZmLi43NmE0NDZmMTg2
ZmJiOGYzNjM1NTlmMTM3MDQ5M2FhOTg1MzYxZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaApAQCAtMzM0LDcgKzMzNCw3IEBAIGVudW0gY2xhc3MgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UgfTsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAg
ICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUqLCBK
U0NsYXNzKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBBdHRy
aWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKICAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJG
dW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRo
cm93U2NvcGUmKTsKIAogICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6VGhyb3c+CkBAIC0zNDcsOCArMzQ3LDcgQEAgc3RydWN0IEJpbmRpbmdDYWxsZXIg
ewogICAgICAgICAgICAgQVNTRVJUKEpTQ2xhc3M6OmluZm8oKSk7CiAgICAgICAgICAgICByZXR1
cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykgPyB0aHJv
d1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xh
c3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNl
IHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gc2V0
dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0
LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRo
cm93PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQppbmRleCA0OGEzNDMxMTNmZjJjZmQzMjBjNzRkNWRjYTZlZjMxNmIyMzVmYTVhLi4z
NGNjYThlNmEyZTVmZGNkM2NmZjBhZGJmNDMxZWY5N2M3MjVmMDMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMzI4NSwz
NCArMzI4NSwzNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
IG15ICR0ZW1wbGF0ZVBhcmFtZXRlcnMgPSAkc2V0dGVyRnVuY3Rpb247CiAgICAgICAgICAgICAg
ICAgJHRlbXBsYXRlUGFyYW1ldGVycyAuPSAiLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0
dXJuRWFybHkiIGlmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
TGVuaWVudFRoaXN9OwogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0
aWMgaW5saW5lIGJvb2wgJHtzZXR0ZXJGdW5jdGlvbn0oRXhlY1N0YXRlKiwgJHtjbGFzc05hbWV9
KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpO1xuXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCAke3NldHRlckZ1bmN0aW9ufShFeGVjU3Rh
dGUmLCAke2NsYXNzTmFtZX0mLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7XG5cbiIpOwogCiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7cHV0RnVuY3Rpb25OYW1lfShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6c2V0QXR0cmlidXRlPCR7dGVtcGxhdGVQYXJhbWV0
ZXJzfT4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCBcIiRuYW1lXCIpO1xuIik7CiAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCi0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIGJvb2wgJHtzZXR0ZXJGdW5j
dGlvbn0oRXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFzc05hbWV9KiBjYXN0ZWRUaGlzLCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIGJvb2wgJHtzZXR0ZXJGdW5jdGlvbn0oRXhl
Y1N0YXRlJiBzdGF0ZSwgJHtjbGFzc05hbWV9JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBV
TlVTRURfUEFSQU0oc3RhdGUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke3B1dEZ1bmN0
aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
Ym9vbCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0g
JiYgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9Ob3RDaGVj
a1NlY3VyaXR5fSAmJiAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntEb05vdENoZWNrU2VjdXJpdHlPblNldHRlcn0pIHsKICAgICAgICAgICAgICAgICBpZiAoJGlu
dGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVy
cm9yKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUs
IHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0
ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qu
d3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biBmYWxzZTtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9t
U2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnNldCRpbXBs
U2V0dGVyRnVuY3Rpb25OYW1lKCpzdGF0ZSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC5zZXQkaW1wbFNldHRlckZ1bmN0aW9u
TmFtZShzdGF0ZSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlIGVx
ICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNFdmVu
dExpc3RlbmVyLmgifSA9IDE7CkBAIC0zMzIwLDEzICszMzIwLDEzIEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgIyBGSVhNRTogRmluZCBhIHdheSB0byBkbyB0
aGlzIHNwZWNpYWwgY2FzZSB3aXRob3V0IGhhcmRjb2RpbmcgdGhlIGNsYXNzIGFuZCBhdHRyaWJ1
dGUgbmFtZXMgaGVyZS4KICAgICAgICAgICAgICAgICBpZiAoKCgkaW50ZXJmYWNlTmFtZSBlcSAi
RE9NV2luZG93Iikgb3IgKCRpbnRlcmZhY2VOYW1lIGVxICJXb3JrZXJHbG9iYWxTY29wZSIpKSBh
bmQgJG5hbWUgZXEgIm9uZXJyb3IiKSB7CiAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkpTRXJyb3JIYW5kbGVyLmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPndyYXBwZWQoKS5zZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKCRldmVudE5hbWUsIGNyZWF0ZUpTRXJyb3JIYW5kbGVyKHN0YXRlLCB2YWx1ZSwgY2Fz
dGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHRoaXNPYmplY3Qud3JhcHBlZCgpLnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoJGV2ZW50
TmFtZSwgY3JlYXRlSlNFcnJvckhhbmRsZXIoJnN0YXRlLCB2YWx1ZSwgJnRoaXNPYmplY3QpKTtc
biIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICRpbXBs
SW5jbHVkZXN7IkpTRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwogICAgICAgICAgICAgICAgICAgICBt
eSAkc2V0dGVyID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntX
aW5kb3dFdmVudEhhbmRsZXJ9ID8gInNldFdpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAg
ICAgICAgICAgICAgICAgICAgICAgIDogJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntEb2N1bWVudEV2ZW50SGFuZGxlcn0gPyAic2V0RG9jdW1lbnRFdmVudEhhbmRs
ZXJBdHRyaWJ1dGUiCiAgICAgICAgICAgICAgICAgICAgICAgICA6ICJzZXRFdmVudEhhbmRsZXJB
dHRyaWJ1dGUiOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAk
c2V0dGVyKCpzdGF0ZSwgKmNhc3RlZFRoaXMsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgJGV2ZW50
TmFtZSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICRzZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCAk
ZXZlbnROYW1lLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgICAg
IH0gZWxzaWYgKCR0eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CkBAIC0zMzM5LDEzICszMzM5LDEz
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIi5oIiwgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0pOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci5cbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0ZWRUaGlzLT5wdXREaXJlY3Qoc3RhdGUtPnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIFwiJG5hbWVcIiksIHZhbHVlKTtcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
XCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlcGxhY2VhYmxlfSkgewogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IHByb3BlcnR5LlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKEF0dHJpYnV0ZVNob3VsZEJlT25J
bnN0YW5jZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVwbGFjZVN0YXRpY1Byb3BlcnR5U2xvdChz
dGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgXCIk
bmFtZVwiKSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90KHN0YXRlLnZtKCksICZ0
aGlzT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIkbmFtZVwiKSwgdmFs
dWUpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0
ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgXCIkbmFtZVwiKSwgdmFsdWUp
O1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlzU3Rh
dGljKSB7CkBAIC0zMzUzLDE5ICszMzUzLDE5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgICAgIGlmICgkcHV0Rm9yd2FyZHMpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldL
X2xjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBs
ZW1lbnRlZEFzfSB8fCAkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR7dHlwZX0+IGZvcndhcmRlZEltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuJHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfSgpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVm
UHRyPCR7dHlwZX0+IGZvcndhcmRlZEltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS4ke2ltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWV9KCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWZvcndhcmRlZEltcGwpXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZh
bHNlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byYgaW1wbCA9ICpmb3J3YXJkZWRJbXBsO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXR0cmlidXRl
IGlzIG5vdCBudWxsYWJsZSwgdGhlIGltcGxlbWVudGF0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVy
biBhIHJlZmVyZW5jZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBSZWY8JHt0eXBlfT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKS4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWY8JHt0eXBlfT4gZm9yd2FyZGVk
SW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLiR7aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0oKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8mIGltcGwgPSBmb3J3YXJkZWRJbXBsLmdldCgpO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAkYXR0cmlidXRlID0gJGNvZGVHZW5l
cmF0b3ItPkdldEF0dHJpYnV0ZUZyb21JbnRlcmZhY2UoJGludGVyZmFjZSwgJHR5cGUsICRwdXRG
b3J3YXJkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkBAIC0zMzczLDcgKzMzNzMs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAgICAgbXkgJHNo
b3VsZFBhc3NCeVJlZmVyZW5jZSA9IFNob3VsZFBhc3NXcmFwcGVyQnlSZWZlcmVuY2UoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLCAkaW50ZXJmYWNlKTsKIAotICAgICAgICAgICAgICAgIG15ICgkbmF0
aXZlVmFsdWUsICRtYXlUaHJvd0V4Y2VwdGlvbikgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFj
ZSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfSk7CisgICAgICAgICAgICAgICAgbXkg
KCRuYXRpdmVWYWx1ZSwgJG1heVRocm93RXhjZXB0aW9uKSA9IEpTVmFsdWVUb05hdGl2ZSgkaW50
ZXJmYWNlLCAkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIsICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9LCAiJnN0YXRlIiwgInN0YXRl
IiwgInRoaXNPYmplY3QiKTsKICAgICAgICAgICAgICAgICBpZiAoISRzaG91bGRQYXNzQnlSZWZl
cmVuY2UgJiYgJGNvZGVHZW5lcmF0b3ItPklzV3JhcHBlclR5cGUoJHR5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL0Vycm9yLmg+In0gPSAxOwogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlw
ZUZyb21TaWduYXR1cmUoJGludGVyZmFjZSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKSAuICIgbmF0
aXZlVmFsdWUgPSBudWxscHRyO1xuIik7CkBAIC0zMzgxLDcgKzMzODEsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpO1xuIikgaWYgJG1heVRocm93RXhjZXB0aW9uOwogICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVW
YWx1ZSkpIHtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgXCIk
dmlzaWJsZUludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiLCBcIiR0eXBlXCIpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgdGhyb3dBdHRy
aWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1l
XCIsIFwiJG5hbWVcIiwgXCIkdHlwZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgfVxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwpAQCAtMzM5Nyw3ICszMzk3
LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgICAgIGlmICgk
c2hvdWxkUGFzc0J5UmVmZXJlbmNlKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgXCIkdmlzaWJsZUludGVyZmFjZU5hbWVcIiwgXCIk
bmFtZVwiLCBcIiR0eXBlXCIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgXCIkdmlzaWJsZUludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiLCBcIiR0eXBlXCIpO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
ZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
fVxuIik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQwNSw3ICszNDA1LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0
UHJvcGVydHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
aW1wbC5pc1JlYWRPbmx5KCkpIHtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRo
cm93U2NvcGUsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5o
In0gPSAxOwpAQCAtMzQxNyw3ICszNDE3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZEltcGwu
c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUobmF0aXZlVmFsdWUiKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCBlYyIpIGlmICRzZXR0ZXJNYXlUaHJvd0xl
Z2FjeUV4Y2VwdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKSBpZiAkc2V0dGVy
TWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7
XG4iKSBpZiAkc2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkc2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb24pIHsK
QEAgLTM0NDksMTYgKzM0NDksMTYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaW1wbC4ke2Z1bmN0aW9uTmFtZX0i
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdW5zaGlmdChA
YXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycygkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1NldHRlckNhbGxXaXRofSwgXEBpbXBsQ29udGVu
dCwgImZhbHNlIikpOwotICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdl
bmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAiZmFsc2UiKSk7CisgICAg
ICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aFVzaW5n
UmVmZXJlbmNlcygkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1Nl
dHRlckNhbGxXaXRofSwgXEBpbXBsQ29udGVudCwgImZhbHNlIikpOworICAgICAgICAgICAgICAg
ICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxA
aW1wbENvbnRlbnQsICJmYWxzZSIpKTsKIAogICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1
bWVudHMsICJlYyIpIGlmICRzZXR0ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbjsKIAogICAgICAg
ICAgICAgICAgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiJGZ1bmN0aW9uTmFtZSgiIC4gam9p
bigiLCAiLCBAYXJndW1lbnRzKSAuICIpIjsKLSAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9u
U3RyaW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsICRmdW5jdGlv
blN0cmluZykiIGlmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
U2V0dGVyTWF5VGhyb3dFeGNlcHRpb259OworICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25T
dHJpbmcgPSAicHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCAkZnVuY3Rpb25T
dHJpbmcpIiBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1Nl
dHRlck1heVRocm93RXhjZXB0aW9ufTsKIAogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAkZnVuY3Rpb25TdHJpbmc7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCBlYyk7XG4iKSBpZiAkc2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUs
IHRocm93U2NvcGUsIGVjKTtcbiIpIGlmICRzZXR0ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbjsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRydWU7
XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00OTI4LDgwICs0OTI4
LDg1IEBAIHN1YiBHZXRJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24KICMgUmV0dXJucyAo
Y29udmVydFN0cmluZywgbWF5VGhyb3dFeGNlcHRpb24pLgogc3ViIEpTVmFsdWVUb05hdGl2ZQog
ewotICAgIG15ICgkaW50ZXJmYWNlLCAkc2lnbmF0dXJlLCAkdmFsdWUsICRjb25kaXRpb25hbCkg
PSBAXzsKKyAgICBteSAoJGludGVyZmFjZSwgJHNpZ25hdHVyZSwgJHZhbHVlLCAkY29uZGl0aW9u
YWwsICRzdGF0ZVBvaW50ZXIsICRzdGF0ZVJlZmVyZW5jZSwgJHRoaXNPYmplY3RSZWZlcmVuY2Up
ID0gQF87CiAKICAgICBteSAkdHlwZSA9ICRzaWduYXR1cmUtPnR5cGU7CiAKKyAgICAjIEZJWE1F
OiBSZW1vdmUgdGhlc2UgMyB2YXJpYWJsZXMgd2hpbGUgYWxsIEpTVmFsdWVUb05hdGl2ZSB1c2Ug
cmVmZXJlbmNlcy4KKyAgICAkc3RhdGVQb2ludGVyID0gInN0YXRlIiB1bmxlc3MgJHN0YXRlUG9p
bnRlcjsKKyAgICAkc3RhdGVSZWZlcmVuY2UgPSAiKnN0YXRlIiB1bmxlc3MgJHN0YXRlUmVmZXJl
bmNlOworICAgICR0aGlzT2JqZWN0UmVmZXJlbmNlID0gIipjYXN0ZWRUaGlzIiB1bmxlc3MgJHRo
aXNPYmplY3RSZWZlcmVuY2U7CisKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzSW50ZWdlclR5
cGUoJHR5cGUpKSB7CiAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgkaW50
ZXJmYWNlLCAkdHlwZSk7CiAgICAgICAgIG15ICRjb252ZXJzaW9uVHlwZSA9IEdldEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbigkc2lnbmF0dXJlKTsKICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIkpTRE9NQ29udmVydC5oIik7Ci0gICAgICAgIHJldHVybiAoImNvbnZlcnQ8JG5hdGl2
ZVR5cGU+KCpzdGF0ZSwgJHZhbHVlLCAkY29udmVyc2lvblR5cGUpIiwgMSk7CisgICAgICAgIHJl
dHVybiAoImNvbnZlcnQ8JG5hdGl2ZVR5cGU+KCRzdGF0ZVJlZmVyZW5jZSwgJHZhbHVlLCAkY29u
dmVyc2lvblR5cGUpIiwgMSk7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJET01TdHJpbmci
KSB7Ci0gICAgICAgIHJldHVybiAoIkF0b21pY1N0cmluZygkdmFsdWUudG9TdHJpbmcoc3RhdGUp
LT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSkiLCAxKSBpZiAkc2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntSZXF1aXJlc0V4aXN0aW5nQXRvbWljU3RyaW5nfTsKKyAgICAgICAg
cmV0dXJuICgiQXRvbWljU3RyaW5nKCR2YWx1ZS50b1N0cmluZygkc3RhdGVQb2ludGVyKS0+dG9F
eGlzdGluZ0F0b21pY1N0cmluZyhzdGF0ZSkpIiwgMSkgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57UmVxdWlyZXNFeGlzdGluZ0F0b21pY1N0cmluZ307CiAKICAgICAgICAgbXkg
JHRyZWF0TnVsbEFzID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57VHJlYXROdWxs
QXN9OwotICAgICAgICByZXR1cm4gKCJ2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyhzdGF0ZSwgJHZhbHVlKSIsIDEpIGlmICR0cmVhdE51bGxBcyAmJiAkdHJlYXROdWxsQXMg
ZXEgIkVtcHR5U3RyaW5nIjsKLSAgICAgICAgcmV0dXJuICgidmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhzdGF0ZSwgJHZhbHVlKSIsIDEpIGlmICRzaWduYXR1cmUtPmlzTnVs
bGFibGU7Ci0gICAgICAgIHJldHVybiAoIiR2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWlj
U3RyaW5nKHN0YXRlKSIsIDEpIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0F0
b21pY1N0cmluZ307Ci0gICAgICAgIHJldHVybiAoIiR2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSki
LCAxKTsKKyAgICAgICAgcmV0dXJuICgidmFsdWVUb1N0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcoJHN0YXRlUG9pbnRlciwgJHZhbHVlKSIsIDEpIGlmICR0cmVhdE51bGxBcyAmJiAkdHJl
YXROdWxsQXMgZXEgIkVtcHR5U3RyaW5nIjsKKyAgICAgICAgcmV0dXJuICgidmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiwgMSkgaWYg
JHNpZ25hdHVyZS0+aXNOdWxsYWJsZTsKKyAgICAgICAgcmV0dXJuICgiJHZhbHVlLnRvU3RyaW5n
KHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJHN0YXRlUG9pbnRlcikiLCAxKSBpZiAkc2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntBdG9taWNTdHJpbmd9OworICAgICAgICByZXR1cm4gKCIk
dmFsdWUudG9XVEZTdHJpbmcoJHN0YXRlUG9pbnRlcikiLCAxKTsKICAgICB9CiAgICAgaWYgKCR0
eXBlIGVxICJVU1ZTdHJpbmciKSB7CiAgICAgICAgIG15ICR0cmVhdE51bGxBcyA9ICRzaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1RyZWF0TnVsbEFzfTsKLSAgICAgICAgcmV0dXJuICgi
dmFsdWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsICR2YWx1ZSki
LCAxKSBpZiAkdHJlYXROdWxsQXMgJiYgJHRyZWF0TnVsbEFzIGVxICJFbXB0eVN0cmluZyI7Ci0g
ICAgICAgIHJldHVybiAoInZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2so
c3RhdGUsICR2YWx1ZSkiLCAxKSBpZiAkc2lnbmF0dXJlLT5pc051bGxhYmxlOwotICAgICAgICBy
ZXR1cm4gKCJ2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCAkdmFsdWUpIiwgMSk7CisgICAgICAgIHJl
dHVybiAoInZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCRzdGF0ZVBv
aW50ZXIsICR2YWx1ZSkiLCAxKSBpZiAkdHJlYXROdWxsQXMgJiYgJHRyZWF0TnVsbEFzIGVxICJF
bXB0eVN0cmluZyI7CisgICAgICAgIHJldHVybiAoInZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soJHN0YXRlUG9pbnRlciwgJHZhbHVlKSIsIDEpIGlmICRzaWduYXR1cmUt
PmlzTnVsbGFibGU7CisgICAgICAgIHJldHVybiAoInZhbHVlVG9VU1ZTdHJpbmcoJHN0YXRlUG9p
bnRlciwgJHZhbHVlKSIsIDEpOwogICAgIH0KLSAgICAKKwogICAgIGlmICgkdHlwZSBlcSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlIikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gKCJTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgJHZhbHVlLCAwLCAwKSIsIDEpOworICAg
ICAgICByZXR1cm4gKCJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgkc3RhdGVQb2ludGVy
LCAkdmFsdWUsIDAsIDApIiwgMSk7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJEaWN0aW9u
YXJ5IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRGljdGlvbmFyeS5oIiwgJGNvbmRp
dGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICgiRGljdGlvbmFyeShzdGF0ZSwgJHZhbHVlKSIsIDAp
OworICAgICAgICByZXR1cm4gKCJEaWN0aW9uYXJ5KCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSkiLCAw
KTsKICAgICB9CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU2VxdWVuY2VPckZyb3plbkFy
cmF5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgbXkgJGlubmVyVHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5HZXRTZXF1ZW5jZU9yRnJvemVuQXJyYXlJbm5lclR5cGUoJHR5cGUpOwogICAgICAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzUmVmUHRyVHlwZSgkaW5uZXJUeXBlKSkgewogICAgICAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIkpTJHtpbm5lclR5cGV9LmgiKTsKLSAgICAgICAgICAgIHJldHVy
biAoInRvUmVmUHRyTmF0aXZlQXJyYXk8JHtpbm5lclR5cGV9LCBKUyR7aW5uZXJUeXBlfT4oKnN0
YXRlLCAkdmFsdWUpIiwgMSk7CisgICAgICAgICAgICByZXR1cm4gKCJ0b1JlZlB0ck5hdGl2ZUFy
cmF5PCR7aW5uZXJUeXBlfSwgSlMke2lubmVyVHlwZX0+KCRzdGF0ZVJlZmVyZW5jZSwgJHZhbHVl
KSIsIDEpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoInRvTmF0aXZlQXJyYXk8IiAuIEdl
dE5hdGl2ZVZlY3RvcklubmVyVHlwZSgkaW5uZXJUeXBlKSAuICI+KCpzdGF0ZSwgJHZhbHVlKSIs
IDEpOworICAgICAgICByZXR1cm4gKCJ0b05hdGl2ZUFycmF5PCIgLiBHZXROYXRpdmVWZWN0b3JJ
bm5lclR5cGUoJGlubmVyVHlwZSkgLiAiPigkc3RhdGVSZWZlcmVuY2UsICR2YWx1ZSkiLCAxKTsK
ICAgICB9CiAKICAgICByZXR1cm4gKCR2YWx1ZSwgMCkgaWYgJHR5cGUgZXEgImFueSI7CiAKLSAg
ICByZXR1cm4gKCIkdmFsdWUudG9Cb29sZWFuKHN0YXRlKSIsIDEpIGlmICR0eXBlIGVxICJib29s
ZWFuIjsKKyAgICByZXR1cm4gKCIkdmFsdWUudG9Cb29sZWFuKCRzdGF0ZVBvaW50ZXIpIiwgMSkg
aWYgJHR5cGUgZXEgImJvb2xlYW4iOwogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Zsb2F0
aW5nUG9pbnRUeXBlKCR0eXBlKSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01D
b252ZXJ0LmgiKTsKICAgICAgICAgbXkgJGFsbG93Tm9uRmluaXRlID0gU2hvdWxkQWxsb3dOb25G
aW5pdGVGb3JGbG9hdGluZ1BvaW50VHlwZSgkdHlwZSkgPyAiU2hvdWxkQWxsb3dOb25GaW5pdGU6
OlllcyIgOiAiU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vIjsKICAgICAgICAgbXkgJG5hdGl2ZVR5
cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZhY2UsICR0eXBlKTsKLSAgICAgICAgcmV0dXJuICgi
Y29udmVydDwkbmF0aXZlVHlwZT4oKnN0YXRlLCAkdmFsdWUsICRhbGxvd05vbkZpbml0ZSkiLCAx
KTsKKyAgICAgICAgcmV0dXJuICgiY29udmVydDwkbmF0aXZlVHlwZT4oJHN0YXRlUmVmZXJlbmNl
LCAkdmFsdWUsICRhbGxvd05vbkZpbml0ZSkiLCAxKTsKICAgICB9CiAKLSAgICByZXR1cm4gKCJ2
YWx1ZVRvRGF0ZShzdGF0ZSwgJHZhbHVlKSIsIDEpIGlmICR0eXBlIGVxICJEYXRlIjsKKyAgICBy
ZXR1cm4gKCJ2YWx1ZVRvRGF0ZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiwgMSkgaWYgJHR5cGUg
ZXEgIkRhdGUiOwogCiAgICAgcmV0dXJuICgidG8kdHlwZSgkdmFsdWUpIiwgMSkgaWYgJGNvZGVH
ZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOwotICAgIHJldHVybiAoInBhcnNlPCIg
LiBHZXRFbnVtZXJhdGlvbkNsYXNzTmFtZSgkdHlwZSwgJGludGVyZmFjZSkgLiAiPigqc3RhdGUs
ICR2YWx1ZSkiLCAxKSBpZiAkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkdHlwZSk7CisgICAg
cmV0dXJuICgicGFyc2U8IiAuIEdldEVudW1lcmF0aW9uQ2xhc3NOYW1lKCR0eXBlLCAkaW50ZXJm
YWNlKSAuICI+KCRzdGF0ZVJlZmVyZW5jZSwgJHZhbHVlKSIsIDEpIGlmICRjb2RlR2VuZXJhdG9y
LT5Jc0VudW1UeXBlKCR0eXBlKTsKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzRGljdGlvbmFy
eVR5cGUoJHR5cGUpKSB7CiAgICAgICAgIG15ICRkaWN0aW9uYXJ5ID0gJGNvZGVHZW5lcmF0b3It
PkdldERpY3Rpb25hcnlCeU5hbWUoJHR5cGUpOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkY29kZUdlbmVyYXRvci0+SXNFeHRlcm5hbERp
Y3Rpb25hcnlUeXBlKCR0eXBlKTsKLSAgICAgICAgcmV0dXJuICgiY29udmVydERpY3Rpb25hcnk8
IiAuIEdldERpY3Rpb25hcnlDbGFzc05hbWUoJHR5cGUsICRpbnRlcmZhY2UpIC4gIj4oKnN0YXRl
LCAkdmFsdWUpIiwgMSk7CisgICAgICAgIHJldHVybiAoImNvbnZlcnREaWN0aW9uYXJ5PCIgLiBH
ZXREaWN0aW9uYXJ5Q2xhc3NOYW1lKCR0eXBlLCAkaW50ZXJmYWNlKSAuICI+KCRzdGF0ZVJlZmVy
ZW5jZSwgJHZhbHVlKSIsIDEpOwogICAgIH0KIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR0
eXBlLmgiLCAkY29uZGl0aW9uYWwpOwogCiAgICAgIyBGSVhNRTogRXZlbnRMaXN0ZW5lciBzaG91
bGQgYmUgYSBjYWxsYmFjayBpbnRlcmZhY2UuCi0gICAgcmV0dXJuICJKU0V2ZW50TGlzdGVuZXI6
OmNyZWF0ZSgkdmFsdWUsICpjYXN0ZWRUaGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKHN0YXRlKSki
IGlmICR0eXBlIGVxICJFdmVudExpc3RlbmVyIjsKKyAgICByZXR1cm4gIkpTRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKCR2YWx1ZSwgJHRoaXNPYmplY3RSZWZlcmVuY2UsIGZhbHNlLCBjdXJyZW50V29y
bGQoJHN0YXRlUG9pbnRlcikpIiBpZiAkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciI7CiAKICAgICBt
eSAkZXh0ZW5kZWRBdHRyaWJ1dGVzID0gJGNvZGVHZW5lcmF0b3ItPmdldEludGVyZmFjZUV4dGVu
ZGVkQXR0cmlidXRlc0Zyb21OYW1lKCR0eXBlKTsKLSAgICByZXR1cm4gKCJKUyR7dHlwZX06OnRv
V3JhcHBlZCgqc3RhdGUsICR2YWx1ZSkiLCAxKSBpZiAkdHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVy
IjsKKyAgICByZXR1cm4gKCJKUyR7dHlwZX06OnRvV3JhcHBlZCgkc3RhdGVSZWZlcmVuY2UsICR2
YWx1ZSkiLCAxKSBpZiAkdHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIjsKICAgICByZXR1cm4gKCJK
UyR7dHlwZX06OnRvV3JhcHBlZCgkdmFsdWUpIiwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9i
amVjdC5jcHAKaW5kZXggZTA4NGYxMmRiMzc3OGQ4NDQ0NmQyMzlmZmJjNDAyMTMzMWI4YjRmNi4u
MDc1MTg1YzQ0MDBjNjIwY2EzZWU4ZjNiMjFiYTgyNTZjNWJmNjdlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEds
b2JhbE9iamVjdC5jcHAKQEAgLTI3NiwzOCArMjc2LDM4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlCiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+
cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmplY3QmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWd1bGFyQXR0cmlidXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
c3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFJlZ3VsYXJBdHRyaWJ1
dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1Ymxp
Y0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRl
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBj
YXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNl
dFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzE1LDE5ICszMTUsMTkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3QK
IAogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0
ZUNvbmRpdGlvbmFsQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1YmxpY0FuZFBy
aXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0
UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNiwxOSArMzM2LDE5IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRy
aWJ1dGVGdW5jCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0Jiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2Jh
bE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVk
VGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRFbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNWM2MzUyMzFiNzk1YzI0MGVhYjIwMWQ5
ZTIwYTc1YTMxYjI0MjQyNi4uODlmYzAxMzc3YmQ3MTlkYWZkMzhhMWNjNGY0NGZiYjYxNDlkODZl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTY4MiwxMCArNjgyLDEwIEBAIGJvb2wgSlNU
ZXN0SW50ZXJmYWNlOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsCiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShD
b25kaXRpb24yMykKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRz
U3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxl
bWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVu
dHNTdGF0aWNBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTY5NCwxOSArNjk0LDE5IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBs
ZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJpbXBsZW1lbnRzU3RyMiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldElt
cGxlbWVudHNTdHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTcxNSwzOSArNzE1LDM5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyM0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJpbXBsZW1lbnRzU3RyMyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgY2FzdGVkVGhp
cy0+c2V0SW1wbGVtZW50c1N0cjMoKnN0YXRlLCB2YWx1ZSk7CisgICAgdGhpc09iamVjdC5zZXRJ
bXBsZW1lbnRzU3RyMyhzdGF0ZSwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBi
b29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzTm9kZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTTm9kZTo6dG9XcmFw
cGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICB0
aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNl
IiwgImltcGxlbWVudHNOb2RlIiwgIk5vZGUiKTsKKyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2Rl
IiwgIk5vZGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpbXBsLnNldElt
cGxlbWVudHNOb2RlKCpuYXRpdmVWYWx1ZSk7CkBAIC03NTcsMTAgKzc1NywxMCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKUwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBw
bGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBXZWJDb3JlOjpUZXN0U3Vw
cGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdGF0aWNBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2OSwxOSArNzY5LDE5IEBAIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVy
ZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bFN0cjJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNl
dFN1cHBsZW1lbnRhbFN0cjIoaW1wbCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtNzkwLDM5ICs3OTAsMzkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzRnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxTdHIzIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgY2FzdGVkVGhpcy0+c2V0U3VwcGxlbWVudGFsU3RyMygqc3RhdGUsIHZh
bHVlKTsKKyAgICB0aGlzT2JqZWN0LnNldFN1cHBsZW1lbnRhbFN0cjMoc3RhdGUsIHZhbHVlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxOb2RlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNl
KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RJbnRlcmZh
Y2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBw
bGVtZW50YWxOb2RlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxOb2RlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRh
bE5vZGUiLCAiTm9kZSIpOworICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIsICJOb2RlIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1l
bnRhbDo6c2V0U3VwcGxlbWVudGFsTm9kZShpbXBsLCAqbmF0aXZlVmFsdWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKaW5kZXggYWRlYzE5OWU0OTcyOTQ3ZDQ0
N2NhN2JkZjUxZDA0YjMxYjNiM2M3Ni4uNjExOTkwNTUyOWFhZjYwZjY1MzlhNDQ5MWIwMWI3OTUw
ODE2OTMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBA
IC0xODksMTggKzE4OSwxOCBAQCBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIHJldHVybiBk
b21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1
dGVSV0N1c3RvbUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3RBdHRyaWJ1dGVSV0N1c3Rv
bSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvciogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGNhc3RlZFRoaXMtPnNldFRlc3RBdHRyaWJ1dGVS
V0N1c3RvbSgqc3RhdGUsIHZhbHVlKTsKKyAgICB0aGlzT2JqZWN0LnNldFRlc3RBdHRyaWJ1dGVS
V0N1c3RvbShzdGF0ZSwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAK
aW5kZXggMDlhYzExNTY0NTFkNDlhZGUxYzc5YTY0NGQwYzRhMDcwNmU5MWY2ZC4uMGYwMDEwNWRi
ZGI1M2EyMmM5Y2Q3NjBjZjE0NjliMDk3YzM4YzM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjEyLDE5
ICsyMTIsMTkgQEAgYm9vbCBzZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGUKICAgICByZXR1cm4gZG9tT2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE5vZGVOYW1lRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE5vZGUmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0Tm9kZU5h
bWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9k
ZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJuYW1lIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUqIGNhc3Rl
ZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3ROb2RlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXROYW1lKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAppbmRleCA4Zjk0MDE4YzIx
NWVjYjc1OTA1NTljY2ZiMmE0YjViYjZlY2UzM2Q5Li44ZjEzZTg0NjI0ZGEzOGFjNDI1NWUwMDNh
NmE2M2FhYWZmMDFjNWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCkBA
IC0zNTYsODAgKzM1Niw4MCBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVgogICAgIHJldHVybiBk
b21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y1dyaXRlYWJsZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ckZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJub25kZXRlcm1pbmlzdGlj
V3JpdGVhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXROb25kZXRlcm1p
bmlzdGljV3JpdGVhYmxlQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNO
b25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5v
bmRldGVybWluaXN0aWMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYsIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlv
bkF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0
aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE5vbmRldGVybWluaXN0aWM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5vbmRldGVybWluaXN0aWNHZXR0
ZXJFeGNlcHRpb25BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBs
LnNldE5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpT
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRl
cm1pbmlzdGljPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAg
aW1wbC5zZXROb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMp
OworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCA2MzEzOThiY2U3YmY5MTY4N2IzZDNjMjgwNmRm
ZDFhOWUxYTUxMTRhLi5mY2RmNmU5YmU5NTgzNjVkZTdjOTM5M2Q0MmU0ZTljY2QyODA1NjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcApAQCAtMzIwOSw0NSArMzIwOSw0NSBAQCBib29sIHNldEpTVGVzdE9iakNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZAogICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdE9i
akNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDb25z
dHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgVGVzdE9iajo6c2V0U3RhdGlj
U3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVu
YWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUZXN0U3Vi
T2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0
cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCi0gICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nIiksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0
dGluZyIpLCB2YWx1ZSk7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVu
dW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVudW1BdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpT
VGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbnVtQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5
cGU+KCpzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRl
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTMyNTYsMjMwICszMjU2LDIzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW51
bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhcwogfQogCiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpCeXRlQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiYnl0ZUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akJ5dGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakJ5dGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwu
c2V0Qnl0ZUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgIm9jdGV0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwogICAgIGltcGwuc2V0T2N0ZXRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rl
c3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaG9ydEF0dHIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHJGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQxNl90Pigq
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4o
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
Q2xhbXBlZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImNsYW1wZWRTaG9ydEF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGlu
dDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oc3Rh
dGUsIHZhbHVlLCBDbGFtcCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAgICAgaW1wbC5zZXRDbGFtcGVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBFbmZvcmNl
UmFuZ2UpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5n
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1w
bC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25l
ZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAogYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDE2X3Q+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50MTZfdD4o
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
TG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iakxvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxv
bmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0TG9uZ0F0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImxvbmdMb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDY0X3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ2NF90PihzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0TG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9u
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25n
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+KHN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CiAgICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9v
bCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJGdW5jdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0
U3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpVc3Zz
dHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHIiKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3Ry
aW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRv
VVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKCZzdGF0ZSwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAg
IGltcGwuc2V0VXN2c3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVz
dE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0T2JqQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9i
akF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVl
KTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICB0aHJvd0F0dHJp
YnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3RPYmpB
dHRyIiwgIlRlc3RPYmoiKTsKKyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpbXBsLnNldFRlc3RPYmpBdHRyKCpuYXRp
dmVWYWx1ZSk7CkBAIC0zNDg3LDIzICszNDg3LDIzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaioK
IH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29s
IHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alRlc3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAidGVzdE51bGxhYmxlT2JqQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gbnVsbHB0cjsKICAgICBpZiAoIXZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZCh2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7Ci0gICAg
ICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVzdE9iaiIpOworICAgICAgICAgICAg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
InRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVzdE9iaiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMzUxMiwyMSArMzUxMiwyMSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVAogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5p
ZW50VGVzdE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RP
YmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCiBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rpb24sIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpSZXR1cm5FYXJseT4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibGVu
aWVudFRlc3RPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpM
ZW5pZW50VGVzdE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFuYXRpdmVWYWx1ZSkpIHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJsZW5pZW50VGVzdE9iakF0dHIiLCAiVGVzdE9i
aiIpOworICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RPYmplY3QiLCAibGVuaWVudFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpbXBsLnNldExlbmllbnRUZXN0T2JqQXR0cigqbmF0
aXZlVmFsdWUpOwpAQCAtMzUzNCw1NyArMzUzNCw1NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZQogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5n
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygmc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
VXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUm
LCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2Jq
VXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3Zz
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwg
dmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
JnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RP
YmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpJbXBsZW1l
bnRhdGlvbkVudW1BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
ImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxBbHRlcm5h
dGVFbnVtTmFtZT4oKnN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxBbHRlcm5hdGVFbnVtTmFt
ZT4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzU5MywyMSArMzU5MywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsCiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlhNTE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VM
WSghbmF0aXZlVmFsdWUpKSB7Ci0gICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiWE1MT2JqQXR0ciIsICJUZXN0T2JqIik7Cisg
ICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJYTUxPYmpBdHRyIiwgIlRlc3RPYmoiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICBpbXBsLnNldFhNTE9iakF0dHIoKm5hdGl2ZVZhbHVlKTsKQEAgLTM2MTUsMjI4
ICszNjE1LDIyOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogYwogfQogCiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
Q3JlYXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCiBib29sIHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2Jq
Q3JlYXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNyZWF0ZSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNyZWF0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xl
YW4oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRDcmVhdGUoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJp
bmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNW
U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0
ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFs
dWUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZygmc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJp
bmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJG
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVn
cmFsQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQzMl90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJ
bnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpT
VGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0Nh
bGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVh
bkF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVk
Qm9vbGVhbkF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbihzdGF0ZSk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIs
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVS
TEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVk
VVNWVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVVNWVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoJnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0
dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVj
dGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1
c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFu
QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRD
dXN0b21Cb29sZWFuQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0
dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29s
ZWFuKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbVVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
cmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVS
TEF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
ODQ0LDE5ICszODQ0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwKIAogCiAjaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzg2NCwy
MiArMzg2NCwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdAogCiAjZW5kaWYKIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0ckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0eXBlZEFycmF5QXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJGdW5jdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJh
eUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtF
TFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJB
cnJheSIpOworICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAidHlwZWRBcnJheUF0dHIiLCAiRmxvYXQzMkFycmF5Iik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaW1wbC5zZXRUeXBlZEFycmF5QXR0cihuYXRp
dmVWYWx1ZS5nZXQoKSk7CkBAIC0zODg3LDIyOCArMzg4NywyMjggQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2IKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1
dGVXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0
ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJF
eGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmli
dXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0
dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1
dGVXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0
aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0
ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJp
YnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbiIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2Fj
eUV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KHN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5
RXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2Vw
dGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhj
ZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCiBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aFNldHRlckV4
Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+
KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhy
b3dTY29wZSwgaW1wbC5zZXRBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0
aXZlVmFsdWUpKSk7CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBp
bXBsLnNldEF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqQXR0cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpT
VGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb25GdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4
Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5
RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uKFdURk1v
dmUobmF0aXZlVmFsdWUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpT
VGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb25GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNl
dFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7
Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CisgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjdXN0b21BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHJGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgY2FzdGVkVGhpcy0+c2V0Q3VzdG9tQXR0cigqc3Rh
dGUsIHZhbHVlKTsKKyAgICB0aGlzT2JqZWN0LnNldEN1c3RvbUF0dHIoc3RhdGUsIHZhbHVlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
T25mb29GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT25mb29GdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0
T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9uZm9vRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm9uZm9vIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpPbmZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoKnN0YXRlLCAqY2FzdGVkVGhp
cywgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsK
KyAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmpl
Y3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb29G
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb29GdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0
T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm9ud2Via2l0Zm9vIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb0Z1bmN0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtp
dGZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBzZXRFdmVudEhhbmRs
ZXJBdHRyaWJ1dGUoKnN0YXRlLCAqY2FzdGVkVGhpcywgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBl
dmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKKyAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1
dGUoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCku
Zm9vRXZlbnQsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50MzJfdD4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBpbXBsLnNldFdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBpbXBs
LnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0ZSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aENhbGxXaXRo
QW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7Ci0gICAgaW1wbC5zZXRXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgq
c3RhdGUsIGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSksIGZpcnN0RE9NV2luZG93KHN0YXRlKSwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOworICAgIGltcGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2Fs
bFdpdGhBdHRyaWJ1dGUoc3RhdGUsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdp
bmRvdygmc3RhdGUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlIiwgIlRlc3RPYmoiKTsKKyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlIiwgIlRlc3RPYmoiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29u
dGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQsICpuYXRpdmVWYWx1ZSk7CkBAIC00MTE2LDQ2
ICs0MTE2LDQ2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTCiB9CiAKIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXMiLCAiVGVzdE9iaiIpOworICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzIiwgIlRlc3RPYmoiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICBpbXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsICpuYXRp
dmVWYWx1ZSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoc3Rh
dGUsICpuYXRpdmVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFp
c2VzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNl
cyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9X
cmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAg
ICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIiwgIlRlc3RPYmoi
KTsKKyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJU
ZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIiwg
IlRlc3RPYmoiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMoKmNvbnRleHQsICpuYXRpdmVWYWx1ZSk7CkBAIC00MTYzLDk2ICs0MTYzLDk2IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uCiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7Ci0gICAgICAgIHRocm93QXR0cmlidXRl
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2JqIik7CisgICAg
ICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIiwg
IlRlc3RPYmoiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpjb250ZXh0LCAqbmF0aXZlVmFsdWUpOworICAgIGltcGwu
c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0
ZSwgKmNvbnRleHQsICpuYXRpdmVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAog
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJp
YnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
dmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7Ci0gICAgICAgIHRocm93
QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIsICJU
ZXN0T2JqIik7CisgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzIiwgIlRlc3RPYmoiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29u
dGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsICpjb250ZXh0
LCAqbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhzdGF0ZSwgKmNvbnRleHQsICpuYXRpdmVWYWx1
ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFw
cGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICB0
aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlIiwgIlRlc3RPYmoiKTsKKyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0V2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUo
KnN0YXRlLCAqY29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKHN0YXRlLCAq
Y29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3Vt
ZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAgICAgICAg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsK
KyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiLCAiVGVz
dE9iaiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGltcGwuc2V0V2l0aFNj
cmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOwpAQCAtNDI2
MSwxOSArNDI2MSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUZ1bmN0aW9uKAogCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIxRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJj
b25kaXRpb25hbEF0dHIxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIxRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtNDI4MiwxOSArNDI4MiwxOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjIpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29u
ZGl0aW9uYWxBdHRyMiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQzMDMsMTkgKzQzMDMsMTkgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3QKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNG
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0Z1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRp
dGlvbmFsQXR0cjMiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MzI0LDk0ICs0MzI0LDk0IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JGdW5jdGlvbihFeGVj
U3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNCIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjRDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gY2FzdGVk
VGhpcy0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRl
LCAiY29uZGl0aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY29uZGl0
aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI1Q29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
Y29uZGl0aW9uYWxBdHRyNSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1
Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gY2FzdGVkVGhpcy0+cHV0RGlyZWN0
KHN0YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY29uZGl0aW9uYWxB
dHRyNSIpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY29uZGl0aW9uYWxBdHRyNSIpLCB2
YWx1ZSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjZDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI2Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRy
NiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NkNvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KLSAgICByZXR1cm4gY2FzdGVkVGhpcy0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY29uZGl0aW9uYWxBdHRyNiIpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiY29uZGl0aW9uYWxBdHRyNiIpLCB2YWx1ZSk7CiB9CiAKICNl
bmRpZgogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpB
bnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZUZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhbnlBdHRyaWJ1dGUiKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlOwogICAgIGltcGwuc2V0QW55QXR0
cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9i
aiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9p
bnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50PiogbmF0aXZlVmFsdWUgPSBudWxscHRyOwog
ICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBuYXRpdmVWYWx1
ZSA9IEpTU1ZHUG9pbnQ6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
bmF0aXZlVmFsdWUpKSB7Ci0gICAgICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm11dGFibGVQb2ludCIsICJTVkdQb2ludCIp
OworICAgICAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgIm11dGFibGVQb2ludCIsICJTVkdQb2ludCIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDQyMCwyMyArNDQyMCwyMyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKgogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpJbW11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFi
bGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnRGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiaW1tdXRhYmxlUG9pbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFNWR1Byb3Bl
cnR5VGVhck9mZjxTVkdQb2ludD4qIG5hdGl2ZVZhbHVlID0gbnVsbHB0cjsKICAgICBpZiAoIXZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbmF0aXZlVmFsdWUgPSBKU1NWR1Bv
aW50Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVl
KSkgewotICAgICAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdE9iamVjdCIsICJpbW11dGFibGVQb2ludCIsICJTVkdQb2ludCIpOworICAgICAg
ICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgImltbXV0YWJsZVBvaW50IiwgIlNWR1BvaW50Iik7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC00NDQ1LDE0OSArNDQ0NSwxNDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2IKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyYXdiZXJyeUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5RnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29s
IHNldEpTVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmF3YmVy
cnlGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyYXdiZXJyeSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpT
dHJhd2JlcnJ5RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRCbHVlYmVycnko
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJ
ZEZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAogYm9vbCBzZXRKU1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqSWRGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaWQiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iaklkRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iaklkRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CiAgICAgaW1wbC5zZXRJZChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBi
b29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gcHJvcGVydHkuCi0gICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChz
dGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgInJlcGxhY2VhYmxlQXR0
cmlidXRlIiksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUu
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXBsYWNlYWJsZUF0dHJpYnV0
ZSIpLCB2YWx1ZSk7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxh
YmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdT
ZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFi
bGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBs
LnNldE51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51
bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVk
T3JOdWxsQ2hlY2soJnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXROdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRh
YmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVs
bGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpO
dWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soJnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXROdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlU3Ry
aW5nVmFsdWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFi
bGVTdHJpbmdWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVs
bGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlRnVuY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CiAgICAgaW1wbC5zZXROdWxsYWJsZVN0cmluZ1ZhbHVlKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0
T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
akF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oKnN0YXRlLCB2
YWx1ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oc3RhdGUsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtF
TFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU5Niw2MSArNDU5
Niw2MSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2Vy
dmVkRW51bVR5cGVGdW5jdGlvbihFeGVjU3RhdGUqCiB9CiAKIAotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRz
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJwdXRGb3J3YXJkc0F0dHJp
YnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgUmVmPFRlc3ROb2RlPiBmb3J3YXJkZWRJbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpLnB1dEZvcndhcmRzQXR0cmlidXRlKCk7CisgICAgUmVmPFRlc3ROb2RlPiBm
b3J3YXJkZWRJbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1dGUo
KTsKICAgICBhdXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3
YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpQdXRGb3J3YXJk
c051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9y
d2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBSZWZQdHI8VGVzdE5vZGU+IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCkucHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpOworICAgIFJlZlB0cjxUZXN0Tm9kZT4g
Zm9yd2FyZGVkSW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLnB1dEZvcndhcmRzTnVsbGFibGVB
dHRyaWJ1dGUoKTsKICAgICBpZiAoIWZvcndhcmRlZEltcGwpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmll
ckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0
cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJp
bmcoJnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAgICAgaW1wbC5zZXRTdHJpbmdpZmllckF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDk2NDc2ZGY5OGU1NTY2OWI3MGNl
ODJmMGViYmFkYjQyZGRlMjY5NjUuLjI3NjRiOGZmOWRmZDkzZmRhYmQxNTE1M2UzMTNiMjg1ZWU4
ZDM4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCkBAIC0yNDcsMzggKzI0NywzOCBAQCBib29sIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZQogICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJv
b2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVZhbHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwgMCwgMCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRWYWx1ZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCiBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hl
ZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjYWNoZWRWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFs
dWVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKCZzdGF0ZSwgdmFsdWUsIDAsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggOTc0ZjVlNDQ3
MDA1NGM0OWE4ZDU3YWE2YzdiZjg5ZGE3ODliZjk0ZS4uOWFkOTEwZTE4OWNiMDA1NGRkZTZhYTk1
Yzk5NjU1MjNlMGRmZTFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0zNTMsMTIwICszNTMs
MTIwIEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuCiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0
RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2
YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVk
TG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNp
Z25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25n
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdM
b25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25l
ZExvbmdMb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5
cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0
dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8dWludDY0X3Q+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRVbnNpZ25lZExv
bmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11
dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBl
ZGVmcyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0lt
bXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RU
eXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFs
aXplZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMq
IGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwgMCwgMCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRJbW11dGFi
bGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVk
ZWZzJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVk
ZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwog
ICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVz
dFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0QXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKLSAgICBzZXRET01F
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25G
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRl
ZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBl
ZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3Rl
ZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291342</attachid>
            <date>2016-10-12 00:05:13 -0700</date>
            <delta_ts>2016-10-12 00:39:53 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-163275-20161012090146.patch</filename>
            <type>text/plain</type>
            <size>159191</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGUxODA2MTc5MDE5MWFl
NmQ1NDhlOTFkNmEwNmE5NGMxZWJlMzhkMS4uZTc2ZTg0Y2Y4MjI0ZTI3ZWQ4ZTkyNTEwMmI1MDVh
ZTZkODQ4Y2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI0IEBACiAyMDE2LTEwLTExICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBdHRyaWJ1dGUgc2V0dGVy
IGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHVzZSBtb3JlIHJlZmVyZW5jZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI3NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgTm8gY2hhbmdlIG9m
IGJlaGF2aW9yLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKworMjAx
Ni0xMC0xMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgUmVm
YWN0b3IgYmluZGluZyBnZW5lcmF0ZWQgY2FzdGVkLXRoaXMgY2hlY2tzIGZvciBtZXRob2RzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxOTgKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAppbmRleCBjYjhmZWQyZWY3
NzEyNjFkNmM4M2ZlNWQ4NDVlMTRjZDg2Zjg1YWRhLi5iZTRhYmMzNDk3NGRlMjI3OTUyMWYxOGM3
NDBmMzg5OTVmOTFhZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaApAQCAtMzM1LDcgKzMzNSw3IEBAIGVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UgfTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgSlNDbGFzcz4KIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAgICB1c2luZyBBdHRyaWJ1
dGVTZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5j
dGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlRocm93U2NvcGUmKTsKICAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6
SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKICAg
ICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlND
OjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CiAgICAgdXNpbmcgUHJv
bWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2Nv
cGUmKTsKQEAgLTM4Niw4ICszODYsNyBAQCBzdHJ1Y3QgQmluZGluZ0NhbGxlciB7CiAgICAgICAg
ICAgICBBU1NFUlQoSlNDbGFzczo6aW5mbygpKTsKICAgICAgICAgICAgIHJldHVybiAoc2hvdWxk
VGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0
dHJpYnV0ZU5hbWUpIDogZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNl
cyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBzZXR0ZXIoc3RhdGUs
IHRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRocm93U2Nv
cGUpOworICAgICAgICByZXR1cm4gc2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRocm93U2NvcGUpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IDA5Yzg4YWZkMWIxYTYyYzRiZjM5Y2M1YzA1YzcyZDAyMzM2OGVhM2MuLmI0MjkzMjUxZjdj
MTY0OGVkMDRkNjQ3ZTBkNDdkNGM4MjUwNzAwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0zMjg5LDIxICszMjg5LDI0
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgbXkgJHRlbXBs
YXRlUGFyYW1ldGVycyA9ICRzZXR0ZXJGdW5jdGlvbjsKICAgICAgICAgICAgICAgICAkdGVtcGxh
dGVQYXJhbWV0ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZXR1cm5FYXJseSIg
aWYgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntMZW5pZW50VGhp
c307CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUg
Ym9vbCAke3NldHRlckZ1bmN0aW9ufShFeGVjU3RhdGUqLCAke2NsYXNzTmFtZX0qLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7XG5cbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAic3RhdGljIGlubGluZSBib29sICR7c2V0dGVyRnVuY3Rpb259KEV4ZWNTdGF0ZSYsICR7Y2xh
c3NOYW1lfSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTtcblxuIik7CiAKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtwdXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjwke2NsYXNzTmFtZX0+OjpzZXRBdHRyaWJ1dGU8JHt0ZW1wbGF0ZVBhcmFtZXRlcnN9PihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsIFwiJG5hbWVcIik7XG4iKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCAke3NldHRlckZ1bmN0aW9ufShFeGVj
U3RhdGUqIHN0YXRlLCAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCAke3NldHRlckZ1bmN0aW9ufShFeGVjU3RhdGUmIHN0
YXRlLCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7cHV0RnVuY3Rpb25OYW1lfShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7cHV0
RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgQVNTRVJUKHN0YXRlUG9pbnRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50ZXI7XG4iKTsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpO1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NF
UmVhY3Rpb25zfSkgewpAQCAtMzMxNSwxNSArMzMxOCwxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogCiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q2hlY2tTZWN1cml0eX0gJiYgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5fSAmJiAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHlPblNldHRlcn0pIHsKICAgICAg
ICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQo
KSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJy
b3IpKVxuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9GcmFtZShzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCksIFRocm93
U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgm
c3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikp
XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNh
c3RlZFRoaXMtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCpzdGF0ZSwgdmFsdWUpO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC5zZXQk
aW1wbFNldHRlckZ1bmN0aW9uTmFtZShzdGF0ZSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgICAg
IH0gZWxzaWYgKCR0eXBlIGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSlNFdmVudExpc3RlbmVyLmgifSA9IDE7CkBAIC0zMzMxLDEzICszMzM0LDEz
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgIyBGSVhNRTog
RmluZCBhIHdheSB0byBkbyB0aGlzIHNwZWNpYWwgY2FzZSB3aXRob3V0IGhhcmRjb2RpbmcgdGhl
IGNsYXNzIGFuZCBhdHRyaWJ1dGUgbmFtZXMgaGVyZS4KICAgICAgICAgICAgICAgICBpZiAoKCgk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikgb3IgKCRpbnRlcmZhY2VOYW1lIGVxICJXb3Jr
ZXJHbG9iYWxTY29wZSIpKSBhbmQgJG5hbWUgZXEgIm9uZXJyb3IiKSB7CiAgICAgICAgICAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRXJyb3JIYW5kbGVyLmgifSA9IDE7Ci0gICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPndyYXBwZWQoKS5z
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKCRldmVudE5hbWUsIGNyZWF0ZUpTRXJyb3JIYW5kbGVy
KHN0YXRlLCB2YWx1ZSwgY2FzdGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3Qud3JhcHBlZCgpLnNldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoJGV2ZW50TmFtZSwgY3JlYXRlSlNFcnJvckhhbmRsZXIoJnN0YXRlLCB2YWx1
ZSwgJnRoaXNPYmplY3QpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwogICAg
ICAgICAgICAgICAgICAgICBteSAkc2V0dGVyID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntXaW5kb3dFdmVudEhhbmRsZXJ9ID8gInNldFdpbmRvd0V2ZW50SGFu
ZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgIDogJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEb2N1bWVudEV2ZW50SGFuZGxlcn0gPyAic2V0
RG9jdW1lbnRFdmVudEhhbmRsZXJBdHRyaWJ1dGUiCiAgICAgICAgICAgICAgICAgICAgICAgICA6
ICJzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUiOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAkc2V0dGVyKCpzdGF0ZSwgKmNhc3RlZFRoaXMsIGNhc3RlZFRoaXMt
PndyYXBwZWQoKSwgJGV2ZW50TmFtZSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICRzZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNP
YmplY3Qud3JhcHBlZCgpLCAkZXZlbnROYW1lLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRydWU7
XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CkBA
IC0zMzUwLDEzICszMzUzLDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4g
Ii5oIiwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRp
b25hbH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci5cbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0ZWRUaGlzLT5w
dXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIFwiJG5h
bWVcIiksIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICB9
IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlcGxh
Y2VhYmxlfSkgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIHByb3BlcnR5LlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKEF0
dHJpYnV0ZVNob3VsZEJlT25JbnN0YW5jZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVwbGFjZVN0
YXRpY1Byb3BlcnR5U2xvdChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXBsYWNlU3RhdGljUHJvcGVydHlT
bG90KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRo
aXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwg
XCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAo
ISRhdHRyaWJ1dGUtPmlzU3RhdGljKSB7CkBAIC0zMzczLDE5ICszMzc2LDE5IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmlzTnVsbGFibGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQ
dHI8JHt0eXBlfT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS4ke2ltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWV9KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHt0eXBlfT4gZm9yd2FyZGVkSW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpLiR7aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0oKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZm9y
d2FyZGVkSW1wbClcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZElt
cGw7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgaXMgbm90IG51bGxhYmxlLCB0aGUgaW1wbGVtZW50
YXRpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcmVmZXJlbmNlLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZjwke3R5cGV9PiBmb3J3YXJk
ZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiR7aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0o
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFJlZjwke3R5cGV9PiBmb3J3YXJkZWRJbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCkuJHtp
bXBsR2V0dGVyRnVuY3Rpb25OYW1lfSgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGZvcndhcmRlZEltcGwuZ2V0
KCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICRhdHRyaWJ1dGUgPSAkZm9yd2FyZGVkQXR0cmlidXRlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgJHR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KIApAQCAtMzM5Myw3ICszMzk2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KIAogICAgICAgICAgICAgICAgIG15ICRzaG91bGRQYXNzQnlSZWZlcmVuY2UgPSBTaG91bGRQ
YXNzV3JhcHBlckJ5UmVmZXJlbmNlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJGludGVyZmFjZSk7
CiAKLSAgICAgICAgICAgICAgICBteSAoJG5hdGl2ZVZhbHVlLCAkbWF5VGhyb3dFeGNlcHRpb24p
ID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZh
bHVlIiwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRp
b25hbH0pOworICAgICAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUsICRtYXlUaHJvd0V4Y2Vw
dGlvbikgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAidmFsdWUiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Nv
bmRpdGlvbmFsfSwgIiZzdGF0ZSIsICJzdGF0ZSIsICJ0aGlzT2JqZWN0Iik7CiAgICAgICAgICAg
ICAgICAgaWYgKCEkc2hvdWxkUGFzc0J5UmVmZXJlbmNlICYmICRjb2RlR2VuZXJhdG9yLT5Jc1dy
YXBwZXJUeXBlKCR0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8
cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRpbnRlcmZhY2UsICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSkgLiAiIG5hdGl2ZVZhbHVlID0gbnVsbHB0cjtcbiIpOwpAQCAt
MzQwMSw3ICszNDA0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIG5hdGl2ZVZhbHVlID0gJG5hdGl2
ZVZhbHVlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTtcbiIpIGlmICRtYXlU
aHJvd0V4Y2VwdGlvbjsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7XG4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCIsIFwiJG5h
bWVcIiwgXCIkdHlwZVwiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIsIFwiJHR5cGVcIik7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICB9XG4iKTsKQEAgLTM0MTcsNyArMzQyMCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAKICAgICAgICAgICAgICAgICBpZiAoJHNob3VsZFBhc3NCeVJlZmVyZW5jZSkgewogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIW5h
dGl2ZVZhbHVlKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIFwi
JHZpc2libGVJbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIiwgXCIkdHlwZVwiKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhyb3dBdHRyaWJ1
dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCIs
IFwiJG5hbWVcIiwgXCIkdHlwZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIH0KQEAg
LTM0MjUsNyArMzQyOCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGltcGwuaXNSZWFkT25seSgpKSB7XG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01F
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlIpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKQEAgLTM0MzcsNyArMzQ0MCw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXBsLnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKG5h
dGl2ZVZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiwgZWMiKSBpZiAkc2V0dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIik7XG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgZWMpO1xuIikgaWYgJHNldHRlck1heVRocm93TGVnYWN5RXhjZXB0aW9uOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpO1xuIikgaWYgJHNldHRlck1heVRocm93TGVnYWN5
RXhjZXB0aW9uOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlm
ICgkc3ZnUHJvcGVydHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNldHRl
ck1heVRocm93TGVnYWN5RXhjZXB0aW9uKSB7CkBAIC0zNDY5LDE2ICszNDcyLDE2IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25O
YW1lID0gImltcGwuJHtmdW5jdGlvbk5hbWV9IjsKICAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aFVz
aW5nUG9pbnRlcnMoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntT
ZXR0ZXJDYWxsV2l0aH0sIFxAaW1wbENvbnRlbnQsICJmYWxzZSIpKTsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycygk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxXaXRofSwgXEBp
bXBsQ29udGVudCwgImZhbHNlIikpOworICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1
bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntTZXR0ZXJDYWxsV2l0aH0sIFxAaW1wbENvbnRlbnQs
ICJmYWxzZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5l
cmF0ZUNhbGxXaXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQGltcGxDb250ZW50LCAiZmFsc2UiKSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAiZWMiKSBpZiAkc2V0dGVyTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb247CiAKICAgICAgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU3Ry
aW5nID0gIiRmdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSI7Ci0g
ICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyA9ICJwcm9wYWdhdGVFeGNlcHRpb24o
KnN0YXRlLCB0aHJvd1Njb3BlLCAkZnVuY3Rpb25TdHJpbmcpIiBpZiAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1NldHRlck1heVRocm93RXhjZXB0aW9ufTsKKyAg
ICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgJGZ1bmN0aW9uU3RyaW5nKSIgaWYgJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbn07CiAKICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGZ1bmN0aW9uU3RyaW5n
O1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpO1xuIikgaWYgJHNldHRlck1heVRocm93
TGVnYWN5RXhjZXB0aW9uOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7XG4iKSBpZiAkc2V0
dGVyTWF5VGhyb3dMZWdhY3lFeGNlcHRpb247CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtNTAzOCwxMyArNTA0MSwxOSBAQCBzdWIgSXNIYW5kbGVkQnlET01Db252
ZXJ0CiB9CiAKICMgUmV0dXJucyAoY29udmVydFN0cmluZywgbWF5VGhyb3dFeGNlcHRpb24pLgor
CiBzdWIgSlNWYWx1ZVRvTmF0aXZlCiB7Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRzaWduYXR1cmUs
ICR2YWx1ZSwgJGNvbmRpdGlvbmFsKSA9IEBfOworICAgIG15ICgkaW50ZXJmYWNlLCAkc2lnbmF0
dXJlLCAkdmFsdWUsICRjb25kaXRpb25hbCwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVmZXJlbmNl
LCAkdGhpc09iamVjdFJlZmVyZW5jZSkgPSBAXzsKIAogICAgIG15ICR0eXBlID0gJHNpZ25hdHVy
ZS0+dHlwZTsKICAgICBteSAkaWRsVHlwZSA9ICRzaWduYXR1cmUtPmlkbFR5cGU7CiAKKyAgICAj
IEZJWE1FOiBSZW1vdmUgdGhlc2UgMyB2YXJpYWJsZXMgd2hlbiBhbGwgSlNWYWx1ZVRvTmF0aXZl
IHVzZSByZWZlcmVuY2VzLgorICAgICRzdGF0ZVBvaW50ZXIgPSAic3RhdGUiIHVubGVzcyAkc3Rh
dGVQb2ludGVyOworICAgICRzdGF0ZVJlZmVyZW5jZSA9ICIqc3RhdGUiIHVubGVzcyAkc3RhdGVS
ZWZlcmVuY2U7CisgICAgJHRoaXNPYmplY3RSZWZlcmVuY2UgPSAiKmNhc3RlZFRoaXMiIHVubGVz
cyAkdGhpc09iamVjdFJlZmVyZW5jZTsKKwogICAgIGlmIChJc0hhbmRsZWRCeURPTUNvbnZlcnQo
JGlkbFR5cGUpKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUNvbnZlcnQuaCIp
OwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlc0ZvcklETFR5cGUoJGlkbFR5cGUsICRjb25kaXRp
b25hbCk7CkBAIC01MDUzLDQ5ICs1MDYyLDQ5IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAg
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzSW50ZWdlclR5cGUoJHR5cGUpKSB7CiAgICAgICAg
ICAgICBteSAkY29udmVyc2lvblR5cGUgPSBHZXRJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24oJHNpZ25hdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gKCJjb252ZXJ0PCRJRExUeXBlPigq
c3RhdGUsICR2YWx1ZSwgJGNvbnZlcnNpb25UeXBlKSIsIDEpOworICAgICAgICAgICAgcmV0dXJu
ICgiY29udmVydDwkSURMVHlwZT4oJHN0YXRlUmVmZXJlbmNlLCAkdmFsdWUsICRjb252ZXJzaW9u
VHlwZSkiLCAxKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiAoImNvbnZlcnQ8JElETFR5
cGU+KCpzdGF0ZSwgJHZhbHVlKSIsIDEpOworICAgICAgICByZXR1cm4gKCJjb252ZXJ0PCRJRExU
eXBlPigkc3RhdGVSZWZlcmVuY2UsICR2YWx1ZSkiLCAxKTsKICAgICB9CiAKICAgICBpZiAoJHR5
cGUgZXEgIkRPTVN0cmluZyIpIHsKLSAgICAgICAgcmV0dXJuICgiQXRvbWljU3RyaW5nKCR2YWx1
ZS50b1N0cmluZyhzdGF0ZSktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoc3RhdGUpKSIsIDEpIGlm
ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlcXVpcmVzRXhpc3RpbmdBdG9taWNT
dHJpbmd9OworICAgICAgICByZXR1cm4gKCJBdG9taWNTdHJpbmcoJHZhbHVlLnRvU3RyaW5nKCRz
dGF0ZVBvaW50ZXIpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKCRzdGF0ZVBvaW50ZXIpKSIsIDEp
IGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlcXVpcmVzRXhpc3RpbmdBdG9t
aWNTdHJpbmd9OwogCiAgICAgICAgIG15ICR0cmVhdE51bGxBcyA9ICRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e1RyZWF0TnVsbEFzfTsKLSAgICAgICAgcmV0dXJuICgidmFsdWVUb1N0
cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsICR2YWx1ZSkiLCAxKSBpZiAkdHJl
YXROdWxsQXMgJiYgJHRyZWF0TnVsbEFzIGVxICJFbXB0eVN0cmluZyI7Ci0gICAgICAgIHJldHVy
biAoInZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsICR2YWx1ZSki
LCAxKSBpZiAkc2lnbmF0dXJlLT5pc051bGxhYmxlOwotICAgICAgICByZXR1cm4gKCIkdmFsdWUu
dG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSkiLCAxKSBpZiAkc2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntBdG9taWNTdHJpbmd9OwotICAgICAgICByZXR1cm4gKCIk
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpIiwgMSk7CisgICAgICAgIHJldHVybiAoInZhbHVlVG9T
dHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSkiLCAx
KSBpZiAkdHJlYXROdWxsQXMgJiYgJHRyZWF0TnVsbEFzIGVxICJFbXB0eVN0cmluZyI7CisgICAg
ICAgIHJldHVybiAoInZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJHN0YXRl
UG9pbnRlciwgJHZhbHVlKSIsIDEpIGlmICRzaWduYXR1cmUtPmlzTnVsbGFibGU7CisgICAgICAg
IHJldHVybiAoIiR2YWx1ZS50b1N0cmluZygkc3RhdGVQb2ludGVyKS0+dG9BdG9taWNTdHJpbmco
JHN0YXRlUG9pbnRlcikiLCAxKSBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntB
dG9taWNTdHJpbmd9OworICAgICAgICByZXR1cm4gKCIkdmFsdWUudG9XVEZTdHJpbmcoJHN0YXRl
UG9pbnRlcikiLCAxKTsKICAgICB9CiAgICAgaWYgKCR0eXBlIGVxICJVU1ZTdHJpbmciKSB7CiAg
ICAgICAgIG15ICR0cmVhdE51bGxBcyA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e1RyZWF0TnVsbEFzfTsKLSAgICAgICAgcmV0dXJuICgidmFsdWVUb1VTVlN0cmluZ1RyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsICR2YWx1ZSkiLCAxKSBpZiAkdHJlYXROdWxsQXMgJiYg
JHRyZWF0TnVsbEFzIGVxICJFbXB0eVN0cmluZyI7Ci0gICAgICAgIHJldHVybiAoInZhbHVlVG9V
U1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsICR2YWx1ZSkiLCAxKSBpZiAk
c2lnbmF0dXJlLT5pc051bGxhYmxlOwotICAgICAgICByZXR1cm4gKCJ2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCAkdmFsdWUpIiwgMSk7CisgICAgICAgIHJldHVybiAoInZhbHVlVG9VU1ZTdHJpbmdU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSkiLCAxKSBpZiAk
dHJlYXROdWxsQXMgJiYgJHRyZWF0TnVsbEFzIGVxICJFbXB0eVN0cmluZyI7CisgICAgICAgIHJl
dHVybiAoInZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJHN0YXRlUG9p
bnRlciwgJHZhbHVlKSIsIDEpIGlmICRzaWduYXR1cmUtPmlzTnVsbGFibGU7CisgICAgICAgIHJl
dHVybiAoInZhbHVlVG9VU1ZTdHJpbmcoJHN0YXRlUG9pbnRlciwgJHZhbHVlKSIsIDEpOwogICAg
IH0KLSAgICAKKwogICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29u
ZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gKCJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShzdGF0ZSwgJHZhbHVlLCAwLCAwKSIsIDEpOworICAgICAgICByZXR1cm4gKCJTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUsIDAsIDApIiwgMSk7CiAg
ICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJEaWN0aW9uYXJ5IikgewogICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiRGljdGlvbmFyeS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJu
ICgiRGljdGlvbmFyeShzdGF0ZSwgJHZhbHVlKSIsIDApOworICAgICAgICByZXR1cm4gKCJEaWN0
aW9uYXJ5KCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSkiLCAwKTsKICAgICB9CiAKLSAgICByZXR1cm4g
KCJ2YWx1ZVRvRGF0ZShzdGF0ZSwgJHZhbHVlKSIsIDEpIGlmICR0eXBlIGVxICJEYXRlIjsKKyAg
ICByZXR1cm4gKCJ2YWx1ZVRvRGF0ZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiwgMSkgaWYgJHR5
cGUgZXEgIkRhdGUiOwogICAgIHJldHVybiAoInRvJHR5cGUoJHZhbHVlKSIsIDEpIGlmICRjb2Rl
R2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gKCJwYXJzZUVu
dW1lcmF0aW9uPCIgLiBHZXRFbnVtZXJhdGlvbkNsYXNzTmFtZSgkdHlwZSwgJGludGVyZmFjZSkg
LiAiPigqc3RhdGUsICR2YWx1ZSkiLCAxKSBpZiAkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgk
dHlwZSk7CisgICAgcmV0dXJuICgicGFyc2VFbnVtZXJhdGlvbjwiIC4gR2V0RW51bWVyYXRpb25D
bGFzc05hbWUoJHR5cGUsICRpbnRlcmZhY2UpIC4gIj4oJHN0YXRlUmVmZXJlbmNlLCAkdmFsdWUp
IiwgMSkgaWYgJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJHR5cGUpOwogCiAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIkpTJHR5cGUuaCIsICRjb25kaXRpb25hbCk7CiAKICAgICAjIEZJWE1FOiBF
dmVudExpc3RlbmVyIHNob3VsZCBiZSBhIGNhbGxiYWNrIGludGVyZmFjZS4KLSAgICByZXR1cm4g
IkpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCR2YWx1ZSwgKmNhc3RlZFRoaXMsIGZhbHNlLCBjdXJy
ZW50V29ybGQoc3RhdGUpKSIgaWYgJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiOworICAgIHJldHVy
biAiSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoJHZhbHVlLCAkdGhpc09iamVjdFJlZmVyZW5jZSwg
ZmFsc2UsIGN1cnJlbnRXb3JsZCgkc3RhdGVQb2ludGVyKSkiIGlmICR0eXBlIGVxICJFdmVudExp
c3RlbmVyIjsKIAogICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZXMgPSAkY29kZUdlbmVyYXRvci0+
Z2V0SW50ZXJmYWNlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbU5hbWUoJHR5cGUpOwotICAgIHJldHVy
biAoIkpTJHt0eXBlfTo6dG9XcmFwcGVkKCpzdGF0ZSwgJHZhbHVlKSIsIDEpIGlmICR0eXBlIGVx
ICJYUGF0aE5TUmVzb2x2ZXIiOworICAgIHJldHVybiAoIkpTJHt0eXBlfTo6dG9XcmFwcGVkKCRz
dGF0ZVJlZmVyZW5jZSwgJHZhbHVlKSIsIDEpIGlmICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIi
OwogICAgIHJldHVybiAoIkpTJHt0eXBlfTo6dG9XcmFwcGVkKCR2YWx1ZSkiLCAwKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKaW5kZXggNTUxN2Q4NTY2ZThjZmE4ZjE5MjlhYjRiMjgw
M2U2NDkzYmExNWEyYy4uOTI0YWIyOGMwNTUzN2NhYmFkZTVmMzRhMjNmMzA5N2NlNDIxZWEyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCkBAIC0yMTgsNjcgKzIxOCw2NyBAQCBib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLAogICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RDRVJlYWN0aW9ucyosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25z
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdENFUmVh
Y3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNG
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyogY2FzdGVkVGhpcywg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVO
VFMpCiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9u
U3RhY2s7CiAjZW5kaWYKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0Q0VSZWFjdGlvbnMqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0Q0VSZWFjdGlv
bnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNS
ZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0Z1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1Jl
ZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RDRVJlYWN0aW9ucyogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxl
Y3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogICAgIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOwogI2VuZGlmCi0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBp
bXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0YXR0cmlidXRld2l0aGNlcmVhY3Rpb25zQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0Q0VSZWFjdGlvbnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zKiBjYXN0
ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICNpZiBFTkFCTEUoQ1VTVE9NX0VM
RU1FTlRTKQogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrOwogI2VuZGlmCi0gICAgUmVmPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPiBm
b3J3YXJkZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLnN0cmluZ2lmaWVyQXR0cmlidXRl
KCk7CisgICAgUmVmPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPiBmb3J3YXJkZWRJbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCkuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKTsKICAgICBhdXRvJiBp
bXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIGltcGwuc2V0VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCmluZGV4
IDY2YjFmYzY1MjYzYjgyZjE2YmY5ODgwNzg2NmEyYjIzZTczYjdhMTUuLmYzYTI0MzllYWJhMzA0
ZGRlMTZmMTllZGI0NjUzNDYxNWY4NjkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllci5jcHAKQEAgLTE3OCwyMiArMTc4LDIyIEBAIGJvb2wgc2V0SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlCiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIm
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllclZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICBDdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsKICNlbmRpZgotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAg
aW1wbC5zZXRWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCmluZGV4IDJmNWJlZjQ4MTMzNTExNWRmNGFjODQ4M2Rm
OGU4OWU3NjBmZTU5ZDAuLmNmZjZjZmE1MDM2YTMyNjllMzc1YjNmYmExNDUxMmE5Yzk0N2RlYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCkBAIC0yODEsMzggKzI4MSwzOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZQogICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0
ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFy
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0R2xvYmFsT2JqZWN0JiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJB
dHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVndWxh
ckF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0UmVndWxhckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5z
ZXRSZWd1bGFyQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVj
dCosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0R2xvYmFsT2JqZWN0JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUF0
dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNB
bmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyMCwxOSArMzIwLDE5IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRl
RnVuY3Rpb24oRXhlY1N0CiAKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFs
QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdEdsb2JhbE9iamVjdCYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVD
b25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRp
b25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVj
dCogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29u
ZGl0aW9uYWxBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoJnN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKICAgICBpbXBsLnNldFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDEsMTkgKzM0MSwxOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0
ZUNvbmRpdGlvbmFsQXR0cmlidXRlRnVuYwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dEdsb2JhbE9iamVjdCYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9i
YWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmlu
Zygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwog
ICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGE0YmQzZWEy
OGI0Y2JkM2I3NTVmM2ZiYzZjZTI0OWRmNTYxOGQwN2MuLjQzNzhmZGM5MjI1NzI1ODI2OWFlOTVh
YmIxMTk0N2U4NjU5ODk2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCkBAIC02ODcsMTAgKzY4
NywxMyBAQCBib29sIEpTVGVzdEludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LAogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlUG9pbnRlciwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKKyAgICBBU1NF
UlQoc3RhdGVQb2ludGVyKTsKKyAgICBhdXRvJiBzdGF0ZSA9ICpzdGF0ZVBvaW50ZXI7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOworICAgIGF1dG8gdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBUZXN0SW50
ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RhdGljQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC02OTksMTkgKzcwMiwxOSBAQCBib29sIHNldEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50c1N0cjIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50
ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRJbXBsZW1lbnRzU3RyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC03MjAsMzkgKzcyMywzOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKUwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
M0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
M0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50c1N0cjMiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50
ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIGNhc3RlZFRoaXMtPnNldEltcGxlbWVudHNTdHIzKCpzdGF0ZSwgdmFsdWUpOwor
ICAgIHRoaXNPYmplY3Quc2V0SW1wbGVtZW50c1N0cjMoc3RhdGUsIHZhbHVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzTm9kZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzTm9kZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdEludGVyZmFjZSYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZh
Y2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50c05vZGUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBKU05vZGU6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVW
YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTm9kZSIsICJOb2RlIik7CisgICAgICAg
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFj
ZSIsICJpbXBsZW1lbnRzTm9kZSIsICJOb2RlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgaW1wbC5zZXRJbXBsZW1lbnRzTm9kZSgqbmF0aXZlVmFsdWUpOwpAQCAtNzYyLDEw
ICs3NjUsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVu
dHNOb2RlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlMKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1ib29sIHNldEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZVBvaW50ZXIsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CisgICAgQVNTRVJUKHN0YXRlUG9pbnRlcik7CisgICAgYXV0byYgc3RhdGUgPSAqc3RhdGVQ
b2ludGVyOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RhdGljQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NzQsMTkgKzc4
MCwxOSBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJzdXBwbGVtZW50YWxTdHIyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bFN0cjJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBXZWJDb3Jl
OjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdHIyKGltcGwsIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5NSwzOSArODAxLDM5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSwKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bFN0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3VwcGxlbWVu
dGFsU3RyMyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGNhc3RlZFRoaXMtPnNldFN1cHBs
ZW1lbnRhbFN0cjMoKnN0YXRlLCB2YWx1ZSk7CisgICAgdGhpc09iamVjdC5zZXRTdXBwbGVtZW50
YWxTdHIzKHN0YXRlLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29s
IHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAic3VwcGxlbWVudGFsTm9kZSIpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxOb2RlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU05vZGU6
OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAg
ICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdElu
dGVyZmFjZSIsICJzdXBwbGVtZW50YWxOb2RlIiwgIk5vZGUiKTsKKyAgICAgICAgdGhyb3dBdHRy
aWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBs
ZW1lbnRhbE5vZGUiLCAiTm9kZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbE5vZGUoaW1wbCwgKm5h
dGl2ZVZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmlu
ZGV4IGI2NDUwZGMxY2ZjYjkxMjE0MDk5ZGY0N2M4YTM4ZDE1Yjg1NjMyODEuLjVhNDhmM2M3MjI5
OGQzNmI0OGZlYTk2YzkxNzkyNTFjNjQxYzZjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmNwcApAQCAtMTk0LDE4ICsxOTQsMTggQEAgYm9vbCBzZXRKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHQKICAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0
YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3Vz
dG9tRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBz
ZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RB
dHRyaWJ1dGVSV0N1c3RvbUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJ0ZXN0QXR0cmlidXRlUldDdXN0b20iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBjYXN0ZWRU
aGlzLT5zZXRUZXN0QXR0cmlidXRlUldDdXN0b20oKnN0YXRlLCB2YWx1ZSk7CisgICAgdGhpc09i
amVjdC5zZXRUZXN0QXR0cmlidXRlUldDdXN0b20oc3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCmluZGV4IDViYmJkMTlhMTkzNDY1NmIxY2EzZWQ2NjNiZjRl
YTBlOWIwNTg1NDQuLmRlMGM4ZGIwMTk0N2RlMDViMTY5NmQzZjdmZTliY2FkNDI5OWZhZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHAKQEAgLTIxNywxOSArMjE3LDE5IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
CiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVG
dW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3ROb2RlJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
CiBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Tm9kZU5hbWVG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibmFtZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE5vZGVOYW1lRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yy5jcHAKaW5kZXggZmMyMWNjMDFhMjQ3Zjk4M2JiNzJiNzkyNGVmZjlhYTExMDUwN2NiZS4uMTIy
NDkwY2ZhZTE1MzEyOTA3MzkwNTMzN2ExMzYzODY3ZDc3ZWZiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcApAQCAtMzYxLDgwICszNjEsODAgQEAgYm9vbCBzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1YKICAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0
YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVh
YmxlQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBz
ZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY1dyaXRlYWJsZUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAibm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxl
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
YyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmlu
Zygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwog
ICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE5vbmRldGVy
bWluaXN0aWMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vbmRldGVybWluaXN0aWM+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRp
b25BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5vbmRldGVy
bWluaXN0aWNFeGNlcHRpb25BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldE5v
bmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0
dGVyRXhjZXB0aW9uQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJF
eGNlcHRpb25BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY0dldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9u
QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
U2V0dGVyRXhjZXB0aW9uQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWlu
aXN0aWMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y1NldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRl
ckV4Y2VwdGlvbkF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2Vw
dGlvbkF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24o
c3RhdGUsIHRocm93U2NvcGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJv
d1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggOWY5NDU4
ZTkxNzY3ZjliZjU2NDZiMTM0YmQ0NjBkYTgwOTI2NjRiOC4uNDhkYTY0NmViNzAxNDYxMzU4NDk0
NmFmMzE4YjNiYTE4YTkwMDJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTMyMTEsNDUgKzMyMTEsNDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWQKICAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qo
c3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K2Jvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGVQb2ludGVyLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogeworICAgIEFTU0VSVChzdGF0ZVBvaW50ZXIpOworICAgIGF1dG8mIHN0YXRlID0gKnN0YXRl
UG9pbnRlcjsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wg
c2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U3ViT2JqRW5hYmxl
ZEJ5U2V0dGluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1
Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIHJldHVybiBjYXN0ZWRU
aGlzLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUs
ICJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKSwgdmFsdWUpOwogfQogCiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpFbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqRW51bUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiZW51bUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVudW1B
dHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgdmFsdWUpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5M
SUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI1OCwyMzAg
KzMyNjEsMjMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzCiB9CiAKIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akJ5dGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpCeXRlQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJi
eXRlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHJG
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExCeXRlPigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMQnl0ZT4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldEJ5dGVB
dHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJvY3RldEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iak9jdGV0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPY3RldD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE9jdGV0PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwog
ICAgIGltcGwuc2V0T2N0ZXRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYs
IEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpT
aG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaG9ydEF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHJGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTaG9ydD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNob3J0PihzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0U2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFt
cGVkU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2hv
cnQ+KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2hvcnQ+KHN0YXRl
LCB2YWx1ZSwgQ2xhbXApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwogICAgIGltcGwuc2V0Q2xhbXBlZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akVuZm9yY2VSYW5nZVNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5mb3JjZVJhbmdlU2hvcnRBdHRyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0
dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2hvcnQ+KCpzdGF0ZSwgdmFsdWUsIEVuZm9yY2VS
YW5nZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNob3J0PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5n
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1w
bC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25l
ZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAogYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRT
aG9ydD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFVuc2lnbmVkU2hvcnQ+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRVbnNpZ25l
ZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakxvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJsb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAg
ICBpbXBsLnNldExvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RP
YmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJsb25nTG9uZ0F0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25n
TG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExMb25nTG9uZz4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETExvbmdMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0TG9u
Z0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihF
eGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0
SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2ln
bmVkTG9uZ0xvbmc+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVbnNpZ25lZExvbmdMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwu
c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhz
dGF0ZSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZygmc3RhdGUsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFVz
dnN0cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2Jq
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVGVzdE9iakF0dHJGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGVzdE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ0ZXN0T2JqQXR0ciIsICJUZXN0
T2JqIik7CisgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJ0ZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgaW1wbC5zZXRUZXN0T2JqQXR0cigqbmF0aXZlVmFsdWUpOwpA
QCAtMzQ4OSwyMyArMzQ5MiwyMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVz
dE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqCiB9CiAKIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RP
YmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUZXN0TnVsbGFi
bGVPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3RO
dWxsYWJsZU9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRl
c3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBUZXN0T2Jq
KiBuYXRpdmVWYWx1ZSA9IG51bGxwdHI7CiAgICAgaWYgKCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CiAgICAgICAgIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICAgICAgdGhy
b3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ0
ZXN0TnVsbGFibGVPYmpBdHRyIiwgIlRlc3RPYmoiKTsKKyAgICAgICAgICAgIHRocm93QXR0cmli
dXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ0ZXN0TnVsbGFi
bGVPYmpBdHRyIiwgIlRlc3RPYmoiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTM1MTQsMjEgKzM1MTcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1QKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9v
bCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
akxlbmllbnRUZXN0T2JqQXR0ckZ1bmN0aW9uLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0
dXJuRWFybHk+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxlbmllbnRUZXN0T2Jq
QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RP
YmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFs
dWUpKSB7Ci0gICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAibGVuaWVudFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsKKyAgICAg
ICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgImxlbmllbnRUZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgaW1wbC5zZXRMZW5pZW50VGVzdE9iakF0dHIoKm5hdGl2ZVZhbHVlKTsK
QEAgLTM1MzYsNTcgKzM1MzksNTcgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxl
bmllbnRUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGUKIH0KIAogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1w
dHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
Z0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1RyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmcoJnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVc3Zz
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCZzdGF0ZSwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlt
cGwuc2V0VXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50
YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVt
QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRh
dGlvbkVudW1BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbXBs
ZW1lbnRhdGlvbkVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxBbHRlcm5h
dGVFbnVtTmFtZT4oKnN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPEFsdGVy
bmF0ZUVudW1OYW1lPihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNTk1LDIxICszNTk4LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSwKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9i
alhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiWE1MT2JqQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJYTUxPYmpBdHRyIiwgIlRl
c3RPYmoiKTsKKyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0T2JqZWN0IiwgIlhNTE9iakF0dHIiLCAiVGVzdE9iaiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIGltcGwuc2V0WE1MT2JqQXR0cigqbmF0aXZlVmFsdWUpOwpA
QCAtMzYxNywyMjggKzM2MjAsMjI4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpY
TUxPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjCiB9CiAKIAot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNyZWF0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiY3JlYXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGVG
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ3JlYXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMQm9vbGVhbj4oKnN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xl
YW4+KHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAgICAgaW1wbC5zZXRDcmVhdGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWRzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJp
bmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0
dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CiAKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0
cmluZygmc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZElu
dGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRy
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEludGVn
cmFsQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
SW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNp
Z25lZEludGVncmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KHN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAgICAgaW1wbC5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xl
YW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRCb29sZWFuQXR0
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVh
bkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPigqc3RhdGUsIHZhbHVlKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
dXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVTVlVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAicmVmbGVjdGVkVVNWVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3Rh
dGUsIHZhbHVlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoJnN0YXRlLCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
dXN2dXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmlu
Z0F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFs
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3Jh
bEF0dHJGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21Cb29sZWFuQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExCb29sZWFuPigqc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9v
bGVhbj4oc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVS
TEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzg0NiwxOSArMzg0OSwxOSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsCiAKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNl
dEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CiAgICAgaW1wbC5zZXRFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4NjYsMjIgKzM4NjksMjIgQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXQKIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpUeXBlZEFycmF5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqVHlwZWRBcnJheUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAidHlwZWRBcnJheUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB0b0Zsb2F0MzJBcnJheSh2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAg
ICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJ0eXBlZEFycmF5QXR0ciIsICJGbG9hdDMyQXJyYXkiKTsKKyAgICAgICAgdGhyb3dB
dHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVk
QXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJheSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIGltcGwuc2V0VHlwZWRBcnJheUF0dHIobmF0aXZlVmFsdWUuZ2V0KCkpOwpAQCAtMzg4
OSwyMjggKzM4OTIsMjI4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFy
cmF5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iCiB9CiAKIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAog
Ym9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24i
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0
ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25G
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7Citz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4
Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhj
ZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0
ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25GdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmli
dXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAg
IGltcGwuc2V0QXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0
ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RP
YmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpB
dHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
ICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsIGltcGwuc2V0QXR0cmli
dXRlV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5zZXRBdHRyaWJ1dGVXaXRoU2V0
dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJM
ZWdhY3lFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0
aFNldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0
dGVyTGVnYWN5RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
U2V0dGVyTGVnYWN5RXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb24iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRp
b25GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPigq
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0QXR0cmli
dXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0U3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93
U2NvcGUsIGVjKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0
b21BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCiBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iakN1c3RvbUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
Y3VzdG9tQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9t
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIGNhc3RlZFRoaXMtPnNldEN1c3RvbUF0dHIoKnN0YXRlLCB2YWx1ZSk7CisgICAgdGhpc09i
amVjdC5zZXRDdXN0b21BdHRyKHN0YXRlLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9uZm9vRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iak9uZm9vRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpPbmZvb0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJvbmZvbyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT25mb29GdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqT25mb29GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgc2V0RXZlbnRI
YW5kbGVyQXR0cmlidXRlKCpzdGF0ZSwgKmNhc3RlZFRoaXMsIGNhc3RlZFRoaXMtPndyYXBwZWQo
KSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0
cmlidXRlKHN0YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1l
cygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJvbndlYmtpdGZvbyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqT253ZWJraXRmb29GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb29GdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKCpzdGF0ZSwgKmNh
c3RlZFRoaXMsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2
YWx1ZSk7CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB0aGlzT2JqZWN0LCB0
aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRl
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoc3RhdGUsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVy
Q2FsbFdpdGhBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxX
aXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RP
YmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxX
aXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0
dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmli
dXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhB
bmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETExvbmc+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIGltcGwuc2V0V2l0aENh
bGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlLCBhY3RpdmVET01XaW5kb3co
c3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAg
ICBpbXBsLnNldFdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKHN0YXRlLCBh
Y3RpdmVET01XaW5kb3coJnN0YXRlKSwgZmlyc3RET01XaW5kb3coJnN0YXRlKSwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAogYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rl
c3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkp
IHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAi
VGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIsICJUZXN0
T2JqIik7CisgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIsICJU
ZXN0T2JqIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpj
b250ZXh0LCAqbmF0aXZlVmFsdWUpOwpAQCAtNDExOCw0NiArNDEyMSw0NiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjUwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0
T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFs
dWUpKSB7Ci0gICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIiwgIlRlc3RP
YmoiKTsKKyAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIsICJUZXN0T2Jq
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCAqbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKHN0YXRlLCAqbmF0aXZlVmFsdWUpOwogICAg
IHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGVSYWlzZXNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFp
c2VzRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzRnVuY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlcyIsICJUZXN0T2JqIik7CisgICAgICAgIHRocm93QXR0cmli
dXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIsICJUZXN0T2JqIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKCpjb250ZXh0LCAqbmF0aXZl
VmFsdWUpOwpAQCAtNDE2NSw5NiArNDE2OCw5NiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbgog
fQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2
ZVZhbHVlKSkgewotICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOworICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2JqIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldFdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCAq
Y29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3RhdGUsICpjb250ZXh0LCAqbmF0aXZlVmFs
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiLCAiVGVzdE9iaiIpOworICAgICAgICB0aHJv
d0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIsICJU
ZXN0T2JqIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCAqY29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKKyAgICBp
bXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoc3RhdGUsICpjb250ZXh0LCAqbmF0aXZlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKLSAgICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIsICJUZXN0T2JqIik7CisgICAg
ICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0
dHJpYnV0ZSIsICJUZXN0T2JqIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQsICpuYXRp
dmVWYWx1ZSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShzdGF0ZSwgKmNvbnRleHQsICpuYXRpdmVWYWx1ZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAog
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNr
QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7Ci0gICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZSIsICJUZXN0T2JqIik7CisgICAgICAgIHRocm93QXR0cmlidXRl
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0QXJn
dW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICBpbXBsLnNldFdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKQEAgLTQyNjMsMTkgKzQyNjYsMTkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGVGdW5jdGlvbigKIAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUZ1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2Jq
JiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIxRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRDb25k
aXRpb25hbEF0dHIxKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTQyODQsMTkgKzQyODcsMTkgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjFGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3QKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYs
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIiKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETExvbmc+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0Q29uZGl0
aW9uYWxBdHRyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00
MzA1LDE5ICs0MzA4LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0Z1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExMb25nPigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldENvbmRpdGlv
bmFsQXR0cjMoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDMy
Niw5NSArNDMyOSw5NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdAogI2VuZGlmCiAKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI0Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1Zh
bHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0
cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlv
bmFsQXR0cjQiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjRDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JGdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjQiKSwg
dmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjQiKSwgdmFsdWUpOwog
fQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9u
MikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3Ry
dWN0b3JGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0
cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOwogCiBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1
Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
Ci0gICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjUiKSwgdmFsdWUpOworICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjUiKSwgdmFsdWUpOwogfQogCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yRnVuY3Rpb24o
RXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjYiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIGNh
c3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhz
dGF0ZSwgImNvbmRpdGlvbmFsQXR0cjYiKSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNv
bmRpdGlvbmFsQXR0cjYiKSwgdmFsdWUpOwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpBbnlBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiYW55QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpBbnlBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55Pigqc3RhdGUsIHZhbHVlKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMQW55PihzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0QW55QXR0cmlidXRlKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iak11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgU1ZHUHJvcGVy
dHlUZWFyT2ZmPFNWR1BvaW50PiogbmF0aXZlVmFsdWUgPSBudWxscHRyOwogICAgIGlmICghdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBuYXRpdmVWYWx1ZSA9IEpTU1ZHUG9p
bnQ6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUp
KSB7Ci0gICAgICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0T2JqZWN0IiwgIm11dGFibGVQb2ludCIsICJTVkdQb2ludCIpOworICAgICAgICAg
ICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgIm11dGFibGVQb2ludCIsICJTVkdQb2ludCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQpAQCAtNDQyMywyMyArNDQyNiwyMyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKgogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFi
bGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludEZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9v
bCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqSW1t
dXRhYmxlUG9pbnRGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1t
dXRhYmxlUG9pbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakltbXV0
YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFNWR1Byb3BlcnR5VGVhck9mZjxT
VkdQb2ludD4qIG5hdGl2ZVZhbHVlID0gbnVsbHB0cjsKICAgICBpZiAoIXZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKICAgICAgICAgbmF0aXZlVmFsdWUgPSBKU1NWR1BvaW50Ojp0b1dyYXBw
ZWQodmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewotICAgICAg
ICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJpbW11dGFibGVQb2ludCIsICJTVkdQb2ludCIpOworICAgICAgICAgICAgdGhyb3dB
dHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImltbXV0
YWJsZVBvaW50IiwgIlNWR1BvaW50Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CkBAIC00NDQ4LDE0OSArNDQ1MSwxNDkgQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2IKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5RnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9i
alN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmF3YmVycnlGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyYXdiZXJyeSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5RnVu
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+
KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRCbHVlYmVycnkoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4
ZWNTdGF0ZSYsIEpTVGVzdE9iaiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKIAogYm9vbCBzZXRK
U1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqSWRGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaWQiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iaklkRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iaklkRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5z
ZXRJZChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVz
dE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZXBsYWNl
YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJy
ZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
cHJvcGVydHkuCi0gICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHZh
bHVlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpLCB2YWx1ZSk7
CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRh
YmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJp
YnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZUxv
bmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFi
bGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExOdWxsYWJsZTxJRExMb25nPj4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETExvbmc+PihzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwogICAgIGltcGwuc2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1dp
dGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxl
VVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmom
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJudWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZ1dp
dGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldE51bGxhYmxlVVNWU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1Zh
bHVlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
Oworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxs
YWJsZTxJRExMb25nPj4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETE51bGxhYmxlPElETExvbmc+PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlt
cGwuc2V0TnVsbGFibGVTdHJpbmdWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhS
ZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVz
ZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJh
dHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpPcHRpb25hbD4oKnN0YXRlLCB2YWx1ZSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFsPihzdGF0ZSwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmIChV
TkxJS0VMWSghbmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTk5LDYx
ICs0NjAyLDYxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
UmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSoKIH0KIAogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmLCBKU1Rl
c3RPYmomLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9y
d2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1dEZvcndhcmRz
QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3
YXJkc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBSZWY8VGVzdE5vZGU+IGZvcndhcmRlZEltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKTsKKyAgICBSZWY8VGVzdE5v
ZGU+IGZvcndhcmRlZEltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5wdXRGb3J3YXJkc0F0dHJp
YnV0ZSgpOwogICAgIGF1dG8mIGltcGwgPSBmb3J3YXJkZWRJbXBsLmdldCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXROYW1lKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwg
SlNUZXN0T2JqJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialB1
dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialB1dEZv
cndhcmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQ
dXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIFJlZlB0cjxUZXN0Tm9kZT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKS5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCk7CisgICAgUmVmUHRyPFRlc3RO
b2RlPiBmb3J3YXJkZWRJbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCkucHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZSgpOwogICAgIGlmICghZm9yd2FyZGVkSW1wbCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmlu
Z2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0T2JqJiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VT
VlN0cmluZygmc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFN0cmluZ2lmaWVyQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggODM4NDcxYjhlNmVlMTQz
ZjY4MWU3MGFmNWRmN2U2MGM1MzIyMGZkMS4uOTQzZDhlZTA0N2ZjYzIxOWY3NWNhZDA3Y2UxYjYx
NmU0M2NkZDY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI0NywzOCArMjQ3LDM4IEBAIGJvb2wgc2V0SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlCiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSos
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAogYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAidmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlRnVuY3Rpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSwgMCwgMCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVlLCAwLCAwKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFZhbHVlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFs
dWVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVGdW5jdGlvbihFeGVjU3Rh
dGUmLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNhY2hlZFZhbHVlIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNo
ZWRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwgMCwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRDYWNoZWRWYWx1ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAppbmRleCBiMTE4
OGIwM2RiM2Y1ODcwOWU3YTUzY2NlMDRmZWFmM2IzYjUyYWUzLi41ZTdjODFhMjJlYTUzNzhmZDgz
MmY1ZGM2ZGZiNzU0M2FlYjY1MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKQEAgLTM2NCwxMjAg
KzM2NCwxMjAgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KICAgICByZXR1cm4gZG9tT2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5z
aWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMm
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25l
ZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVk
TG9uZ0xvbmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVu
c2lnbmVkTG9uZ0xvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdM
b25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVGdW5j
dGlvbihFeGVjU3RhdGUmLCBKU1Rlc3RUeXBlZGVmcyYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
IAogYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVm
cz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbW11dGFi
bGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0
ZSwgdmFsdWUsIDAsIDApOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
KyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0
YXRlLCB2YWx1ZSwgMCwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAgICAgaW1wbC5zZXRJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0
aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwog
CiBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlv
biIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBj
YXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExv
bmc+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExM
b25nPihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFR5cGVkZWZzJiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOwogCiBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlw
ZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwogICAgIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRp
dmVWYWx1ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVj
KTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBl
ZGVmcyosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRl
JiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAKIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAg
aW1wbC5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RUeXBlZGVmcyosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlJiwgSlNUZXN0VHlwZWRlZnMmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CiAK
IGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwotICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>