<?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>80347</bug_id>
          
          <creation_ts>2012-03-05 16:35:29 -0800</creation_ts>
          <short_desc>rebaseline_chromium_webkit_tests is obsolete and should be removed</short_desc>
          <delta_ts>2012-03-06 18:23:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>epoger</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>ojan</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tomhudson</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>571165</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-03-05 16:35:29 -0800</bug_when>
    <thetext>rebaseline_chromium_webkit_tests is obsolete and should be removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571168</commentid>
    <comment_count>1</comment_count>
      <attachid>130231</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-03-05 16:36:26 -0800</bug_when>
    <thetext>Created attachment 130231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571173</commentid>
    <comment_count>2</comment_count>
      <attachid>130231</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-03-05 16:41:02 -0800</bug_when>
    <thetext>Comment on attachment 130231
Patch

yay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571174</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-03-05 16:42:16 -0800</bug_when>
    <thetext>I still see the webkit_gpu_tests step on the bots.  When is that going away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571181</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-03-05 16:46:04 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I still see the webkit_gpu_tests step on the bots.  When is that going away?

Tomorrow, hopefully. I&apos;ll cc&apos; you on the bot change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571323</commentid>
    <comment_count>5</comment_count>
      <attachid>130257</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-03-05 18:19:54 -0800</bug_when>
    <thetext>Created attachment 130257
missed the wrapper in Scripts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572408</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-03-06 18:23:09 -0800</bug_when>
    <thetext>Committed r109996: &lt;http://trac.webkit.org/changeset/109996&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130231</attachid>
            <date>2012-03-05 16:36:26 -0800</date>
            <delta_ts>2012-03-05 18:19:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80347-20120305163625.patch</filename>
            <type>text/plain</type>
            <size>67074</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5ODEwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmFmZmEzMzQzYWRhMjBkN2UwYTQ3MGNhMTUwNTA0MDll
NTM5MjcxYS4uMWZjMjhkNTYxZDdhZjFkNGFjOTc0YzQ5NTY1N2ZkMTFiNjQ1NDVhYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5
IEBACiAyMDEyLTAzLTA1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzIGlzIG9ic29sZXRlIGFuZCBz
aG91bGQgYmUgcmVtb3ZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODAzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBcyB0aGUgb25seSBuZWVkIGZvciB0aGlzIHNjcmlwdCB3YXMgdG8gcmViYXNlbGlu
ZSB0aGUgR1BVIHBvcnRzCisgICAgICAgIGFzIHdlbGwgYXMgdGhlIHJlZ3VsYXIgb25lcywgYW5k
IHRoZSBHUFUgcG9ydHMgYXJlIG5vdyBnb25lLCB3ZQorICAgICAgICBjYW4gcmVtb3ZlIHRoaXMg
YW5kIGp1c3QgdXNlICd3ZWJraXQtcGF0Y2ggcmViYXNlbGluZScgaW5zdGVhZC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJr
aXRfdGVzdHMucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b19iZV9t
b3ZlZC9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weTogUmVtb3Zl
ZC4KKworMjAxMi0wMy0wNSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBmbGFraW5lc3MgZGFzaGJvYXJkIGRvZXNuJ3QgZGlzcGxheSBiYXNlbGluZXMgZm9y
IHZpcnR1YWwgdGVzdHMgY29ycmVjdGx5CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDM0MQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RvX2JlX21vdmVkL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtp
dF90ZXN0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkYjcyMDIyOWJiMWFm
OGRhZDM2MDlkMGEzODQ2ZjIyYjhlNWIxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RvX2JlX21vdmVkL3JlYmFz
ZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA0NCAr
MCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJSZWJh
c2VsaW5pbmcgdG9vbCB0aGF0IGF1dG9tYXRpY2FsbHkgcHJvZHVjZXMgYmFzZWxpbmVzIGZvciBh
bGwgcGxhdGZvcm1zLgotCi1UaGUgc2NyaXB0IGRvZXMgdGhlIGZvbGxvd2luZyBmb3IgZWFjaCBw
bGF0Zm9ybSBzcGVjaWZpZWQ6Ci0gIDEuIENvbXBpbGUgYSBsaXN0IG9mIHRlc3RzIHRoYXQgbmVl
ZCByZWJhc2VsaW5pbmcuCi0gIDIuIERvd25sb2FkIHRlc3QgcmVzdWx0IGFyY2hpdmUgZnJvbSBi
dWlsZGJvdCBmb3IgdGhlIHBsYXRmb3JtLgotICAzLiBFeHRyYWN0IGJhc2VsaW5lcyBmcm9tIHRo
ZSBhcmNoaXZlIGZpbGUgZm9yIGFsbCBpZGVudGlmaWVkIGZpbGVzLgotICA0LiBBZGQgbmV3IGJh
c2VsaW5lcyB0byBTVk4gcmVwb3NpdG9yeS4KLSAgNS4gRm9yIGVhY2ggdGVzdCB0aGF0IGhhcyBi
ZWVuIHJlYmFzZWxpbmVkLCByZW1vdmUgdGhpcyBwbGF0Zm9ybSBvcHRpb24gZnJvbQotICAgICB0
aGUgdGVzdCBpbiB0ZXN0X2V4cGVjdGF0aW9uLnR4dC4gSWYgbm8gb3RoZXIgcGxhdGZvcm1zIHJl
bWFpbiBhZnRlcgotICAgICByZW1vdmFsLCBkZWxldGUgdGhlIHJlYmFzZWxpbmVkIHRlc3QgZnJv
bSB0aGUgZmlsZS4KLQotQXQgdGhlIGVuZCwgdGhlIHNjcmlwdCBnZW5lcmF0ZXMgYSBodG1sIHRo
YXQgY29tcGFyZXMgb2xkIGFuZCBuZXcgYmFzZWxpbmVzLgotIiIiCi0KLWltcG9ydCBjb3B5Ci1p
bXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLWlt
cG9ydCB0aW1lCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KLWZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgemlwZmlsZXNldAotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBwYXRoCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IHVybGZldGNoZXIKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUg
aW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0
Ci0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZh
Y3RvcnkKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCByZWFkX2NoZWNrc3VtX2Zy
b21fcG5nCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhw
ZWN0YXRpb25zCi0KLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi1CQVNF
TElORV9TVUZGSVhFUyA9ICgnLnR4dCcsICcucG5nJywgJy5jaGVja3N1bScpCi0KLUFSQ0hJVkVf
RElSX05BTUVfRElDVCA9IHsKLSAgICAnY2hyb21pdW0td2luLXdpbjcnOiAnV2Via2l0X1dpbjcn
LAotICAgICdjaHJvbWl1bS13aW4tdmlzdGEnOiAnV2Via2l0X1Zpc3RhJywKLSAgICAnY2hyb21p
dW0td2luLXhwJzogJ1dlYmtpdF9XaW4nLAotICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCc6ICdX
ZWJraXRfTWFjMTBfNScsCi0gICAgJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCc6ICdXZWJraXRf
TWFjMTBfNicsCi0gICAgJ2Nocm9taXVtLWxpbnV4LXg4Nic6ICdXZWJraXRfTGludXhfMzInLAot
ICAgICdjaHJvbWl1bS1saW51eC14ODZfNjQnOiAnV2Via2l0X0xpbnV4JywKLSAgICAnY2hyb21p
dW0tZ3B1LW1hYy1zbm93bGVvcGFyZCc6ICdXZWJraXRfTWFjMTBfNl8tX0dQVScsCi0gICAgJ2No
cm9taXVtLWdwdS13aW4teHAnOiAnV2Via2l0X1dpbl8tX0dQVScsCi0gICAgJ2Nocm9taXVtLWdw
dS13aW4td2luNyc6ICdXZWJraXRfV2luN18tX0dQVScsCi0gICAgJ2Nocm9taXVtLWdwdS1saW51
eC14ODZfNjQnOiAnV2Via2l0X0xpbnV4Xy1fR1BVJywKLSAgICAnY2hyb21pdW0tZ3B1LWxpbnV4
LXg4Nic6ICdXZWJraXRfTGludXhfMzJfLV9HUFUnLAotfQotCi0KLWRlZiBsb2dfZGFzaGVkX3N0
cmluZyh0ZXh0LCBwbGF0Zm9ybT1Ob25lLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuREVCVUcpOgot
ICAgICIiIkxvZyB0ZXh0IG1lc3NhZ2Ugd2l0aCBkYXNoZXMgb24gYm90aCBzaWRlcy4iIiIKLSAg
ICBtc2cgPSB0ZXh0Ci0gICAgaWYgcGxhdGZvcm06Ci0gICAgICAgIG1zZyArPSAnOiAnICsgcGxh
dGZvcm0KLSAgICBpZiBsZW4obXNnKSA8IDc4OgotICAgICAgICBkYXNoZXMgPSAnLScgKiAoKDc4
IC0gbGVuKG1zZykpIC8gMikKLSAgICAgICAgbXNnID0gJyVzICVzICVzJyAlIChkYXNoZXMsIG1z
ZywgZGFzaGVzKQotICAgIF9sb2cubG9nKGxvZ2dpbmdfbGV2ZWwsIG1zZykKLQotCi1kZWYgc2V0
dXBfaHRtbF9kaXJlY3RvcnkoZmlsZXN5c3RlbSwgcGFyZW50X2RpcmVjdG9yeSk6Ci0gICAgIiIi
U2V0dXAgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSBodG1sIHJlc3VsdHMuCi0KLSAgICAgICBBbGwg
aHRtbCByZWxhdGVkIGZpbGVzIGFyZSBzdG9yZWQgaW4gdGhlICJyZWJhc2VsaW5lX2h0bWwiIHN1
YmRpcmVjdG9yeSBvZgotICAgICAgIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiBUaGUgcGF0aCB0byB0
aGUgY3JlYXRlZCBkaXJlY3RvcnkgaXMgcmV0dXJuZWQuCi0gICAgIiIiCi0KLSAgICBpZiBub3Qg
cGFyZW50X2RpcmVjdG9yeToKLSAgICAgICAgcGFyZW50X2RpcmVjdG9yeSA9IHN0cihmaWxlc3lz
dGVtLm1rZHRlbXAoKSkKLSAgICBlbHNlOgotICAgICAgICBmaWxlc3lzdGVtLm1heWJlX21ha2Vf
ZGlyZWN0b3J5KHBhcmVudF9kaXJlY3RvcnkpCi0KLSAgICBodG1sX2RpcmVjdG9yeSA9IGZpbGVz
eXN0ZW0uam9pbihwYXJlbnRfZGlyZWN0b3J5LCAncmViYXNlbGluZV9odG1sJykKLSAgICBfbG9n
LmRlYnVnKCdIdG1sIGRpcmVjdG9yeTogIiVzIicsIGh0bWxfZGlyZWN0b3J5KQotCi0gICAgaWYg
ZmlsZXN5c3RlbS5leGlzdHMoaHRtbF9kaXJlY3RvcnkpOgotICAgICAgICBmaWxlc3lzdGVtLnJt
dHJlZShodG1sX2RpcmVjdG9yeSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnRGVsZXRlZCBodG1sIGRp
cmVjdG9yeTogIiVzIicsIGh0bWxfZGlyZWN0b3J5KQotCi0gICAgZmlsZXN5c3RlbS5tYXliZV9t
YWtlX2RpcmVjdG9yeShodG1sX2RpcmVjdG9yeSkKLSAgICByZXR1cm4gaHRtbF9kaXJlY3RvcnkK
LQotCi1kZWYgZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKGZpbGVzeXN0ZW0sIGh0bWxfZGlyZWN0
b3J5LCBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdF90eXBlKToKLSAgICAiIiJHZXQgZnVsbCBwYXRoIG9mIHRoZSBiYXNlbGlu
ZSByZXN1bHQgZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlc3lzdGVtOiB3cmFwcGVyIG9i
amVjdAotICAgICAgaHRtbF9kaXJlY3Rvcnk6IGRpcmVjdG9yeSB0aGF0IHN0b3JlcyB0aGUgaHRt
bCByZWxhdGVkIGZpbGVzLgotICAgICAgYmFzZWxpbmVfZmlsZW5hbWU6IG5hbWUgb2YgdGhlIGJh
c2VsaW5lIGZpbGUuCi0gICAgICBwbGF0Zm9ybTogd2luLCBsaW51eCBvciBtYWMKLSAgICAgIHJl
c3VsdF90eXBlOiB0eXBlIG9mIHRoZSBiYXNlbGluZSByZXN1bHQ6ICcudHh0JywgJy5wbmcnLgot
Ci0gICAgUmV0dXJuczoKLSAgICAgIEZ1bGwgcGF0aCBvZiB0aGUgYmFzZWxpbmUgZmlsZSBmb3Ig
cmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJpc29uLgotICAgICIiIgotCi0gICAgYmFzZSwgZXh0
ID0gZmlsZXN5c3RlbS5zcGxpdGV4dChiYXNlbGluZV9maWxlbmFtZSkKLSAgICByZXN1bHRfZmls
ZW5hbWUgPSAnJXMtJXMtJXMlcycgJSAoYmFzZSwgcGxhdGZvcm0sIHJlc3VsdF90eXBlLCBleHQp
Ci0gICAgZnVsbHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oaHRtbF9kaXJlY3RvcnksIHJlc3VsdF9m
aWxlbmFtZSkKLSAgICBfbG9nLmRlYnVnKCcgIFJlc3VsdCBmaWxlIGZ1bGwgcGF0aDogIiVzIi4n
LCBmdWxscGF0aCkKLSAgICByZXR1cm4gZnVsbHBhdGgKLQotCi1jbGFzcyBSZWJhc2VsaW5lcihv
YmplY3QpOgotICAgICIiIkNsYXNzIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5lcyBmb3IgYSBnaXZl
biBwbGF0Zm9ybS4iIiIKLQotICAgIFJFVklTSU9OX1JFR0VYID0gcic8YSBocmVmPVwiKFxkKykv
XCI+JwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHJ1bm5pbmdfcG9ydCwgdGFyZ2V0
X3BvcnQsIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0Y2hlciwgemlwX2ZhY3RvcnksIGxvZ2dl
ZF9iZWZvcmU9RmFsc2UpOgotICAgICAgICAiIiIKLSAgICAgICAgQXJnczoKLSAgICAgICAgICAg
IHJ1bm5pbmdfcG9ydDogdGhlIFBvcnQgdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uLgotICAgICAg
ICAgICAgdGFyZ2V0X3BvcnQ6IHRoZSBQb3J0IHRoZSBzY3JpcHQgdXNlcyB0byBmaW5kIHBvcnQt
c3BlY2lmaWMKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGxpa2Ug
dGhlIHRlc3RfZXhwZWN0YXRpb25zLnR4dAotICAgICAgICAgICAgICAgIGZpbGUgbG9jYXRpb24g
YW5kIHRoZSBsaXN0IG9mIHRlc3QgcGxhdGZvcm1zLgotICAgICAgICAgICAgcGxhdGZvcm06IHRo
ZSB0ZXN0IHBsYXRmb3JtIHRvIHJlYmFzZWxpbmUKLSAgICAgICAgICAgIG9wdGlvbnM6IHRoZSBj
b21tYW5kLWxpbmUgb3B0aW9ucyBvYmplY3QuCi0gICAgICAgICAgICB1cmxfZmV0Y2hlcjogb2Jq
ZWN0IHRoYXQgY2FuIGZldGNoIG9iamVjdHMgZnJvbSBVUkxzCi0gICAgICAgICAgICB6aXBfZmFj
dG9yeTogb3B0aW9uYWwgb2JqZWN0IHRoYXQgY2FuIGZldGNoIHppcCBmaWxlcyBmcm9tIFVSTHMK
LSAgICAgICAgICAgIHNjbTogc2NtIG9iamVjdCBmb3IgYWRkaW5nIG5ldyBiYXNlbGluZXMKLSAg
ICAgICAgICAgIGxvZ2dlZF9iZWZvcmU6IHdoZXRoZXIgdGhlIHByZXZpb3VzIHJ1bm5pbmcgcG9y
dCBsb2dnZWQgYW55dGhpbmcuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9
IHBsYXRmb3JtCi0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYu
X3BvcnQgPSBydW5uaW5nX3BvcnQKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGhvc3QuZmls
ZXN5c3RlbQotICAgICAgICBzZWxmLl90YXJnZXRfcG9ydCA9IHRhcmdldF9wb3J0Ci0KLSAgICAg
ICAgc2VsZi5fcmViYXNlbGluZV9wb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KHBsYXRmb3Jt
LCBvcHRpb25zKQotICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMgPSBzZXQoKQotICAg
ICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyA9IFtdCi0gICAgICAgIHNlbGYuX2xvZ2dlZF9i
ZWZvcmUgPSBsb2dnZWRfYmVmb3JlCi0gICAgICAgIHNlbGYuZGlkX2xvZyA9IEZhbHNlCi0KLSAg
ICAgICAgIyBDcmVhdGUgdGVzdHMgYW5kIGV4cGVjdGF0aW9ucyBoZWxwZXIgd2hpY2ggaXMgdXNl
ZCB0bzoKLSAgICAgICAgIyAgIC0uIGNvbXBpbGUgbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmVi
YXNlbGluaW5nLgotICAgICAgICAjICAgLS4gdXBkYXRlIHRoZSB0ZXN0cyBpbiB0ZXN0X2V4cGVj
dGF0aW9ucyBmaWxlIGFmdGVyIHJlYmFzZWxpbmUKLSAgICAgICAgIyAgICAgIGlzIGRvbmUuCi0g
ICAgICAgIGV4cGVjdGF0aW9uc19zdHIgPSBzZWxmLl9yZWJhc2VsaW5lX3BvcnQudGVzdF9leHBl
Y3RhdGlvbnMoKQotICAgICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0
YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMoCi0gICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lX3Bv
cnQsIE5vbmUsIGV4cGVjdGF0aW9uc19zdHIsIHNlbGYuX3JlYmFzZWxpbmVfcG9ydC50ZXN0X2Nv
bmZpZ3VyYXRpb24oKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuX3VybF9mZXRjaGVyID0gdXJsX2Zl
dGNoZXIKLSAgICAgICAgc2VsZi5femlwX2ZhY3RvcnkgPSB6aXBfZmFjdG9yeQotICAgICAgICBz
ZWxmLl9zY20gPSBob3N0LnNjbSgpCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAiIiJS
dW4gcmViYXNlbGluZSBwcm9jZXNzLiIiIgotCi0gICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdD
b21waWxpbmcgcmViYXNlbGluaW5nIHRlc3RzJywgc2VsZi5fcGxhdGZvcm0sIGxvZ2dpbmcuREVC
VUcpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9jb21waWxlX3JlYmFzZWxpbmluZ190ZXN0cygpOgot
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIG5vdCBzZWxmLl9yZWJhc2VsaW5p
bmdfdGVzdHM6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIHNlbGYuZGlkX2xv
ZyA9IFRydWUKLSAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ0Rvd25sb2FkaW5nIGFyY2hpdmUn
LCBzZWxmLl9wbGF0Zm9ybSwgbG9nZ2luZy5ERUJVRykKLSAgICAgICAgYXJjaGl2ZV9maWxlID0g
c2VsZi5fZG93bmxvYWRfYnVpbGRib3RfYXJjaGl2ZSgpCi0gICAgICAgIF9sb2cuZGVidWcoJycp
Ci0gICAgICAgIGlmIG5vdCBhcmNoaXZlX2ZpbGU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdO
byBhcmNoaXZlIGZvdW5kLicpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBs
b2dfZGFzaGVkX3N0cmluZygnRXh0cmFjdGluZyBhbmQgYWRkaW5nIG5ldyBiYXNlbGluZXMnLCBz
ZWxmLl9wbGF0Zm9ybSwgbG9nZ2luZy5ERUJVRykKLSAgICAgICAgc2VsZi5fZXh0cmFjdF9hbmRf
YWRkX25ld19iYXNlbGluZXMoYXJjaGl2ZV9maWxlKQotICAgICAgICBhcmNoaXZlX2ZpbGUuY2xv
c2UoKQotCi0gICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdVcGRhdGluZyByZWJhc2VsaW5lZCB0
ZXN0cyBpbiBmaWxlJywgc2VsZi5fcGxhdGZvcm0pCi0KLSAgICAgICAgaWYgbGVuKHNlbGYuX3Jl
YmFzZWxpbmluZ190ZXN0cykgIT0gbGVuKHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzKToKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoJycpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCdOT1QgQUxMIFRF
U1RTIFdFUkUgUkVCQVNFTElORUQuJykKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgTnVtYmVy
IG1hcmtlZCBmb3IgcmViYXNlbGluaW5nOiAlZCcsIGxlbihzZWxmLl9yZWJhc2VsaW5pbmdfdGVz
dHMpKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBOdW1iZXIgYWN0dWFsbHkgcmViYXNlbGlu
ZWQ6ICVkJywgbGVuKHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzKSkKLSAgICAgICAgICAgIF9sb2cu
aW5mbygnJykKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIF9sb2cuZGVidWco
JyAgQWxsIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5nIHdlcmUgc3VjY2Vzc2Z1bGx5IHJlYmFz
ZWxpbmVkLicpCi0gICAgICAgIF9sb2cuaW5mbygnJykKLSAgICAgICAgcmV0dXJuIFRydWUKLQot
ICAgIGRlZiByZW1vdmVfcmViYXNlbGluaW5nX2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0cywgYmFj
a3VwKToKLSAgICAgICAgIiIiaWYgYmFja3VwIGlzIFRydWUsIHdlIGJhY2t1cCB0aGUgb3JpZ2lu
YWwgdGVzdCBleHBlY3RhdGlvbnMgZmlsZS4iIiIKLSAgICAgICAgbmV3X2V4cGVjdGF0aW9ucyA9
IHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zLnJlbW92ZV9yZWJhc2VsaW5lZF90ZXN0cyh0ZXN0cykK
LSAgICAgICAgcGF0aCA9IHNlbGYuX3RhcmdldF9wb3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlv
bnNfZmlsZSgpCi0gICAgICAgIGlmIGJhY2t1cDoKLSAgICAgICAgICAgIGRhdGVfc3VmZml4ID0g
dGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJywgdGltZS5sb2NhbHRpbWUodGltZS50aW1lKCkp
KQotICAgICAgICAgICAgYmFja3VwX2ZpbGUgPSAnJXMub3JpZy4lcycgJSAocGF0aCwgZGF0ZV9z
dWZmaXgpCi0gICAgICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhiYWNrdXBfZmls
ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoYmFja3VwX2ZpbGUp
Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdTYXZpbmcgb3JpZ2luYWwgZmlsZSB0byAiJXMiJywg
YmFja3VwX2ZpbGUpCi0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1vdmUocGF0aCwgYmFj
a3VwX2ZpbGUpCi0KLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0
aCwgbmV3X2V4cGVjdGF0aW9ucykKLSAgICAgICAgIyBzZWxmLl9zY20uYWRkKHBhdGgpCi0KLSAg
ICBkZWYgZ2V0X3JlYmFzZWxpbmVkX3Rlc3RzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5f
cmViYXNlbGluZWRfdGVzdHMKLQotICAgIGRlZiBfY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMo
c2VsZik6Ci0gICAgICAgICIiIkNvbXBpbGUgbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNl
bGluaW5nIGZvciB0aGUgcGxhdGZvcm0uCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBG
YWxzZSBpZiByZWZ0ZXN0cyBhcmUgd3JvbmdseSBtYXJrZWQgYXMgJ25lZWRzIHJlYmFzZWxpbmlu
Zycgb3IgVHJ1ZQotICAgICAgICAiIiIKLQotICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVz
dHMgPSBzZWxmLl90ZXN0X2V4cGVjdGF0aW9ucy5nZXRfcmViYXNlbGluaW5nX2ZhaWx1cmVzKCkK
LSAgICAgICAgaWYgbm90IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKLSAgICAgICAgICAgIF9s
b2cuaW5mbygnJXM6IE5vIHRlc3RzIHRvIHJlYmFzZWxpbmUuJywgc2VsZi5fcGxhdGZvcm0pCi0g
ICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIGZzID0gc2VsZi5fdGFyZ2V0X3BvcnQu
X2ZpbGVzeXN0ZW0KLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3Rz
OgotICAgICAgICAgICAgaWYgc2VsZi5fdGFyZ2V0X3BvcnQucmVmZXJlbmNlX2ZpbGVzKHRlc3Qp
OgotICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVzIHNlZW1zIHRvIGJlIGEgcmVmdGVzdC4g
V2UgY2FuIG5vdCByZWJhc2UgZm9yIHJlZnRlc3RzLicsIHRlc3QpCi0gICAgICAgICAgICAgICAg
c2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzID0gc2V0KCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKLQotICAgICAgICBpZiBub3Qgc2VsZi5fbG9nZ2VkX2JlZm9yZToKLSAgICAgICAgICAg
IF9sb2cuaW5mbygnJykKLSAgICAgICAgX2xvZy5pbmZvKCclczogUmViYXNlbGluaW5nICVkIHRl
c3RzOicsIHNlbGYuX3BsYXRmb3JtLCBsZW4oc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKSkKLSAg
ICAgICAgdGVzdF9ubyA9IDEKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fcmViYXNlbGluaW5n
X3Rlc3RzOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAlZDogJXMnLCB0ZXN0X25vLCB0ZXN0
KQotICAgICAgICAgICAgdGVzdF9ubyArPSAxCi0KLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAg
IGRlZiBfZ2V0X2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1cmwpOgotICAgICAgICAiIiJHZXQgdGhl
IGxhdGVzdCBsYXlvdXQgdGVzdCByZXZpc2lvbiBudW1iZXIgZnJvbSBidWlsZGJvdC4KLQotICAg
ICAgICBBcmdzOgotICAgICAgICAgIHVybDogVXJsIHRvIHJldHJpZXZlIGxheW91dCB0ZXN0IHJl
dmlzaW9uIG51bWJlcnMuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBsYXRlc3QgcmV2
aXNpb24gb3IKLSAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCi0gICAgICAgICIiIgotCi0gICAg
ICAgIF9sb2cuZGVidWcoJ1VybCB0byByZXRyaWV2ZSByZXZpc2lvbjogIiVzIicsIHVybCkKLQot
ICAgICAgICBjb250ZW50ID0gc2VsZi5fdXJsX2ZldGNoZXIuZmV0Y2godXJsKQotCi0gICAgICAg
IHJldmlzaW9ucyA9IHJlLmZpbmRhbGwoc2VsZi5SRVZJU0lPTl9SRUdFWCwgY29udGVudCkKLSAg
ICAgICAgaWYgbm90IHJldmlzaW9uczoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0
byBmaW5kIHJldmlzaW9uLCBjb250ZW50OiAiJXMiJywgY29udGVudCkKLSAgICAgICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICAgICAgcmV2aXNpb25zLnNvcnQoa2V5PWludCkKLSAgICAgICAgX2xv
Zy5kZWJ1ZygnICBMYXRlc3QgcmV2aXNpb246ICVzJywgcmV2aXNpb25zW2xlbihyZXZpc2lvbnMp
IC0gMV0pCi0gICAgICAgIHJldHVybiByZXZpc2lvbnNbbGVuKHJldmlzaW9ucykgLSAxXQotCi0g
ICAgZGVmIF9nZXRfYXJjaGl2ZV9kaXJfbmFtZShzZWxmLCBwbGF0Zm9ybSk6Ci0gICAgICAgICIi
IkdldCBuYW1lIG9mIHRoZSBsYXlvdXQgdGVzdCBhcmNoaXZlIGRpcmVjdG9yeS4KLQotICAgICAg
ICBSZXR1cm5zOgotICAgICAgICAgIERpcmVjdG9yeSBuYW1lIG9yCi0gICAgICAgICAgTm9uZSBv
biBmYWlsdXJlCi0gICAgICAgICIiIgotCi0gICAgICAgIGlmIHBsYXRmb3JtIGluIEFSQ0hJVkVf
RElSX05BTUVfRElDVDoKLSAgICAgICAgICAgIHJldHVybiBBUkNISVZFX0RJUl9OQU1FX0RJQ1Rb
cGxhdGZvcm1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdDYW5ub3Qg
ZmluZCBwbGF0Zm9ybSBrZXkgJXMgaW4gYXJjaGl2ZSAnCi0gICAgICAgICAgICAgICAgICAgICAg
ICdkaXJlY3RvcnkgbmFtZSBkaWN0aW9uYXJ5JywgcGxhdGZvcm0pCi0gICAgICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgZGVmIF9nZXRfYXJjaGl2ZV91cmwoc2VsZik6Ci0gICAgICAgICIiIkdl
bmVyYXRlIHRoZSB1cmwgdG8gZG93bmxvYWQgbGF0ZXN0IGxheW91dCB0ZXN0IGFyY2hpdmUuCi0K
LSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBVcmwgdG8gZG93bmxvYWQgYXJjaGl2ZSBvcgot
ICAgICAgICAgIE5vbmUgb24gZmFpbHVyZQotICAgICAgICAiIiIKLQotICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLmZvcmNlX2FyY2hpdmVfdXJsOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29w
dGlvbnMuZm9yY2VfYXJjaGl2ZV91cmwKLQotICAgICAgICBkaXJfbmFtZSA9IHNlbGYuX2dldF9h
cmNoaXZlX2Rpcl9uYW1lKHNlbGYuX3BsYXRmb3JtKQotICAgICAgICBpZiBub3QgZGlyX25hbWU6
Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIF9sb2cuZGVidWcoJ0J1aWxkYm90
IHBsYXRmb3JtIGRpciBuYW1lOiAiJXMiJywgZGlyX25hbWUpCi0KLSAgICAgICAgdXJsX2Jhc2Ug
PSAnJXMvJXMvJyAlIChzZWxmLl9vcHRpb25zLmFyY2hpdmVfdXJsLCBkaXJfbmFtZSkKLSAgICAg
ICAgbGF0ZXN0X3JldmlzaW9uID0gc2VsZi5fZ2V0X2xhdGVzdF9yZXZpc2lvbih1cmxfYmFzZSkK
LSAgICAgICAgaWYgbGF0ZXN0X3JldmlzaW9uIGlzIE5vbmUgb3IgbGF0ZXN0X3JldmlzaW9uIDw9
IDA6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBhcmNoaXZlX3VybCA9ICclcyVz
L2xheW91dC10ZXN0LXJlc3VsdHMuemlwJyAlICh1cmxfYmFzZSwgbGF0ZXN0X3JldmlzaW9uKQot
ICAgICAgICBfbG9nLmluZm8oJyAgVXNpbmcgJXMnLCBhcmNoaXZlX3VybCkKLSAgICAgICAgcmV0
dXJuIGFyY2hpdmVfdXJsCi0KLSAgICBkZWYgX2Rvd25sb2FkX2J1aWxkYm90X2FyY2hpdmUoc2Vs
Zik6Ci0gICAgICAgICIiIkRvd25sb2FkIGxheW91dCB0ZXN0IGFyY2hpdmUgZmlsZSBmcm9tIGJ1
aWxkYm90IGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gaXQuIiIiCi0gICAgICAgIHVybCA9IHNlbGYu
X2dldF9hcmNoaXZlX3VybCgpCi0gICAgICAgIGlmIHVybCBpcyBOb25lOgotICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgICAgICBhcmNoaXZlX2ZpbGUgPSB6aXBmaWxlc2V0LlppcEZpbGVT
ZXQodXJsLCBmaWxlc3lzdGVtPXNlbGYuX2ZpbGVzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBfZmFjdG9yeT1zZWxmLl96aXBfZmFjdG9yeSkK
LSAgICAgICAgX2xvZy5kZWJ1ZygnQXJjaGl2ZSBkb3dubG9hZGVkJykKLSAgICAgICAgcmV0dXJu
IGFyY2hpdmVfZmlsZQotCi0gICAgZGVmIF9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lcyhz
ZWxmLCB6aXBfZmlsZSk6Ci0gICAgICAgICIiIkV4dHJhY3QgbmV3IGJhc2VsaW5lcyBmcm9tIHRo
ZSB6aXAgZmlsZSBhbmQgYWRkIHRoZW0gdG8gU1ZOIHJlcG9zaXRvcnkuCi0KLSAgICAgICAgUmV0
dXJuczoKLSAgICAgICAgICBMaXN0IG9mIHRlc3RzIHRoYXQgaGF2ZSBiZWVuIHJlYmFzZWxpbmVk
IG9yIE5vbmUgb24gZmFpbHVyZS4iIiIKLSAgICAgICAgemlwX25hbWVsaXN0ID0gemlwX2ZpbGUu
bmFtZWxpc3QoKQotCi0gICAgICAgIF9sb2cuZGVidWcoJ3ppcCBmaWxlIG5hbWVsaXN0OicpCi0g
ICAgICAgIGZvciBuYW1lIGluIHppcF9uYW1lbGlzdDoKLSAgICAgICAgICAgIF9sb2cuZGVidWco
JyAgJyArIG5hbWUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnUGxhdGZvcm0gZGlyOiAiJXMiJywg
c2VsZi5fcGxhdGZvcm0pCi0KLSAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMgPSBbXQot
ICAgICAgICBmb3IgdGVzdF9ubywgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZi5fcmViYXNlbGluaW5n
X3Rlc3RzKToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3QgJWQ6ICVzJywgdGVzdF9ubyAr
IDEsIHRlc3QpCi0gICAgICAgICAgICBzZWxmLl9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5l
KHRlc3QsIHppcF9maWxlKQotCi0gICAgZGVmIF9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5l
KHNlbGYsIHRlc3QsIHppcF9maWxlKToKLSAgICAgICAgZm91bmQgPSBGYWxzZQotICAgICAgICBz
Y21fZXJyb3IgPSBGYWxzZQotICAgICAgICB0ZXN0X2Jhc2VuYW1lID0gc2VsZi5fZmlsZXN5c3Rl
bS5zcGxpdGV4dCh0ZXN0KVswXQotICAgICAgICBmb3Igc3VmZml4IGluIEJBU0VMSU5FX1NVRkZJ
WEVTOgotICAgICAgICAgICAgYXJjaGl2ZV90ZXN0X25hbWUgPSAnbGF5b3V0LXRlc3QtcmVzdWx0
cy8lcy1hY3R1YWwlcycgJSAodGVzdF9iYXNlbmFtZSwgc3VmZml4KQotICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnICBBcmNoaXZlIHRlc3QgZmlsZSBuYW1lOiAiJXMiJywgYXJjaGl2ZV90ZXN0X25h
bWUpCi0gICAgICAgICAgICBpZiBub3QgYXJjaGl2ZV90ZXN0X25hbWUgaW4gemlwX2ZpbGUubmFt
ZWxpc3QoKToKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVzIGZpbGUgbm90IGluIGFy
Y2hpdmUuJywgc3VmZml4KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAg
IGZvdW5kID0gVHJ1ZQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAlcyBmaWxlIGZvdW5kIGlu
IGFyY2hpdmUuJywgc3VmZml4KQotCi0gICAgICAgICAgICB0ZW1wX25hbWUgPSBzZWxmLl9leHRy
YWN0X2Zyb21femlwX3RvX3RlbXBmaWxlKHppcF9maWxlLCBhcmNoaXZlX3Rlc3RfbmFtZSkKLQot
ICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSAnJXMtZXhwZWN0ZWQlcycgJSAodGVzdF9i
YXNlbmFtZSwgc3VmZml4KQotICAgICAgICAgICAgZXhwZWN0ZWRfZnVsbHBhdGggPSBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oCi0gICAgICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZV9wb3J0LmJh
c2VsaW5lX3BhdGgoKSwgZXhwZWN0ZWRfZmlsZW5hbWUpCi0gICAgICAgICAgICBleHBlY3RlZF9m
dWxscGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ubm9ybXBhdGgoZXhwZWN0ZWRfZnVsbHBhdGgpCi0g
ICAgICAgICAgICBfbG9nLmRlYnVnKCcgIEV4cGVjdGVkIGZpbGUgZnVsbCBwYXRoOiAiJXMiJywg
ZXhwZWN0ZWRfZnVsbHBhdGgpCi0KLSAgICAgICAgICAgIHJlbHBhdGggPSBzZWxmLl9maWxlc3lz
dGVtLnJlbHBhdGgoZXhwZWN0ZWRfZnVsbHBhdGgsIHNlbGYuX3RhcmdldF9wb3J0LmxheW91dF90
ZXN0c19kaXIoKSkKLQotICAgICAgICAgICAgIyBUT0RPKHZpY3RvcncpOiBmb3Igbm93LCB0aGUg
cmViYXNlbGluaW5nIHRvb2wgY2hlY2tzIHdoZXRoZXIKLSAgICAgICAgICAgICMgb3Igbm90IFRI
SVMgYmFzZWxpbmUgaXMgZHVwbGljYXRlIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KLSAgICAgICAg
ICAgICMgV2UgY291bGQgaW1wcm92ZSB0aGUgdG9vbCB0byBjaGVjayBhbGwgYmFzZWxpbmVzIGlu
IHVwcGVyCi0gICAgICAgICAgICAjIGFuZCBsb3dlciBsZXZlbHMgYW5kIHJlbW92ZSBhbGwgZHVw
bGljYXRlZCBiYXNlbGluZXMuCi0gICAgICAgICAgICBpZiBzZWxmLl9pc19kdXBfYmFzZWxpbmUo
dGVtcF9uYW1lLCBleHBlY3RlZF9mdWxscGF0aCwgdGVzdCwgc3VmZml4LCBzZWxmLl9wbGF0Zm9y
bSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUodGVtcF9uYW1lKQot
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGV4cGVjdGVkX2Z1bGxw
YXRoKToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIFJlbW92aW5nICVzJyAlIHJl
bHBhdGgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlbGV0ZV9iYXNlbGluZShleHBlY3Rl
ZF9mdWxscGF0aCkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVzIGlzIGEgZHVwbGlj
YXRlJyAlIHJlbHBhdGgpCi0KLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBXZSBjb25zaWRlciBh
IGR1cGxpY2F0ZSBiYXNlbGluZSBhIHN1Y2Nlc3MgaW4gdGhlIG5vcm1hbCBjYXNlLgotICAgICAg
ICAgICAgICAgICMgRklYTUU6IFRoaXMgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50IHNvbWV0aW1l
czsgc2hvdWxkIHRoaXMgYmUKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBjb250cm9sbGFibGU/
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMuYXBwZW5kKHRlc3QpCi0g
ICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgaWYgc3VmZml4ID09ICcuY2hl
Y2tzdW0nIGFuZCBzZWxmLl9wbmdfaGFzX3NhbWVfY2hlY2tzdW0odGVtcF9uYW1lLCB0ZXN0LCBl
eHBlY3RlZF9mdWxscGF0aCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1v
dmUodGVtcF9uYW1lKQotICAgICAgICAgICAgICAgICMgSWYgYW4gb2xkIGNoZWNrc3VtIGV4aXN0
cywgZGVsZXRlIGl0LgotICAgICAgICAgICAgICAgIHNlbGYuX2RlbGV0ZV9iYXNlbGluZShleHBl
Y3RlZF9mdWxscGF0aCkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX2ZpbGVzeXN0ZW0uZGly
bmFtZShleHBlY3RlZF9mdWxscGF0aCkpCi0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1v
dmUodGVtcF9uYW1lLCBleHBlY3RlZF9mdWxscGF0aCkKLQotICAgICAgICAgICAgcGF0aF9mcm9t
X2Jhc2UgPSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoZXhwZWN0ZWRfZnVsbHBhdGgpCi0gICAg
ICAgICAgICBpZiBzZWxmLl9zY20uZXhpc3RzKHBhdGhfZnJvbV9iYXNlKToKLSAgICAgICAgICAg
ICAgICBfbG9nLmluZm8oJyAgVXBkYXRpbmcgJXMnICUgcmVscGF0aCkKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIEFkZGluZyAlcycgJSByZWxwYXRoKQot
Ci0gICAgICAgICAgICBpZiBzZWxmLl9zY20uYWRkKGV4cGVjdGVkX2Z1bGxwYXRoLCByZXR1cm5f
ZXhpdF9jb2RlPVRydWUpOgotICAgICAgICAgICAgICAgICMgRklYTUU6IHByaW50IGRldGFpbGVk
IGRpYWdub3NlIG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgc2NtX2Vycm9yID0gVHJ1ZQotICAg
ICAgICAgICAgZWxpZiBzdWZmaXggIT0gJy5jaGVja3N1bSc6Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5fY3JlYXRlX2h0bWxfYmFzZWxpbmVfZmlsZXMoZXhwZWN0ZWRfZnVsbHBhdGgpCi0KLSAgICAg
ICAgaWYgbm90IGZvdW5kOgotICAgICAgICAgICAgX2xvZy53YXJuKCdObyByZXN1bHRzIGluIGFy
Y2hpdmUgZm9yICVzJyAlIHRlc3QpCi0gICAgICAgIGVsaWYgc2NtX2Vycm9yOgotICAgICAgICAg
ICAgX2xvZy53YXJuKCdGYWlsZWQgdG8gYWRkIGJhc2VsaW5lcyB0byB5b3VyIHJlcG9zaXRvcnku
JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgUmViYXNlbGluZSBz
dWNjZWVkZWQuJykKLSAgICAgICAgICAgIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzLmFwcGVuZCh0
ZXN0KQotCi0gICAgZGVmIF9leHRyYWN0X2Zyb21femlwX3RvX3RlbXBmaWxlKHNlbGYsIHppcF9m
aWxlLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIkV4dHJhY3RzIHxmaWxlbmFtZXwgZnJvbSB8emlw
X2ZpbGV8LCBhIFppcEZpbGVTZXQuIFJldHVybnMgdGhlIGZ1bGwKLSAgICAgICAgICAgcGF0aCBu
YW1lIHRvIHRoZSBleHRyYWN0ZWQgZmlsZS4iIiIKLSAgICAgICAgZGF0YSA9IHppcF9maWxlLnJl
YWQoZmlsZW5hbWUpCi0gICAgICAgIHN1ZmZpeCA9IHNlbGYuX2ZpbGVzeXN0ZW0uc3BsaXRleHQo
ZmlsZW5hbWUpWzFdCi0gICAgICAgIHRlbXBmaWxlLCB0ZW1wX25hbWUgPSBzZWxmLl9maWxlc3lz
dGVtLm9wZW5fYmluYXJ5X3RlbXBmaWxlKHN1ZmZpeCkKLSAgICAgICAgdGVtcGZpbGUud3JpdGUo
ZGF0YSkKLSAgICAgICAgdGVtcGZpbGUuY2xvc2UoKQotICAgICAgICByZXR1cm4gdGVtcF9uYW1l
Ci0KLSAgICBkZWYgX3BuZ19oYXNfc2FtZV9jaGVja3N1bShzZWxmLCBjaGVja3N1bV9wYXRoLCB0
ZXN0LCBjaGVja3N1bV9leHBlY3RlZF9mdWxscGF0aCk6Ci0gICAgICAgICIiIlJldHVybnMgVHJ1
ZSBpZiB0aGUgZmFsbGJhY2sgcG5nIGZvciB8Y2hlY2tzdW1fZXhwZWN0ZWRfZnVsbHBhdGh8Ci0g
ICAgICAgIGNvbnRhaW5zIHRoZSBzYW1lIGNoZWNrc3VtLiIiIgotICAgICAgICBmcyA9IHNlbGYu
X2ZpbGVzeXN0ZW0KLSAgICAgICAgcG5nX2Z1bGxwYXRoID0gc2VsZi5fZmlyc3RfZmFsbGJhY2tf
cG5nX2Zvcl90ZXN0KHRlc3QpCi0KLSAgICAgICAgaWYgbm90IGZzLmV4aXN0cyhwbmdfZnVsbHBh
dGgpOgotICAgICAgICAgICAgX2xvZy5lcnJvcignICBDaGVja3N1bSB3aXRob3V0IHBuZyBmaWxl
IGZvdW5kISBFeHBlY3RlZCAlcyB0byBleGlzdC4nICUgcG5nX2Z1bGxwYXRoKQotICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgd2l0aCBmcy5vcGVuX2JpbmFyeV9maWxlX2Zvcl9y
ZWFkaW5nKHBuZ19mdWxscGF0aCkgYXMgZmlsZWhhbmRsZToKLSAgICAgICAgICAgIGNoZWNrc3Vt
X2luX3BuZyA9IHJlYWRfY2hlY2tzdW1fZnJvbV9wbmcucmVhZF9jaGVja3N1bShmaWxlaGFuZGxl
KQotICAgICAgICAgICAgY2hlY2tzdW1faW5fdGV4dF9maWxlID0gZnMucmVhZF90ZXh0X2ZpbGUo
Y2hlY2tzdW1fcGF0aCkKLSAgICAgICAgICAgIGlmIGNoZWNrc3VtX2luX3BuZyBhbmQgY2hlY2tz
dW1faW5fcG5nICE9IGNoZWNrc3VtX2luX3RleHRfZmlsZToKLSAgICAgICAgICAgICAgICBfbG9n
LmVycm9yKCIgIGNoZWNrc3VtIGluICVzIGFuZCAlcyBkb24ndCBtYXRjaCEgIENvbnRpbnVpbmci
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvIGNvcHkgYnV0IHBsZWFzZSBpbnZlc3Rp
Z2F0ZS4iICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1fZXhwZWN0ZWRf
ZnVsbHBhdGgsIHBuZ19mdWxscGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gY2hlY2tzdW1faW5f
dGV4dF9maWxlID09IGNoZWNrc3VtX2luX3BuZwotCi0gICAgZGVmIF9maXJzdF9mYWxsYmFja19w
bmdfZm9yX3Rlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIGFsbF9iYXNlbGluZXMgPSBzZWxmLl9y
ZWJhc2VsaW5lX3BvcnQuZXhwZWN0ZWRfYmFzZWxpbmVzKHRlc3QsICcucG5nJywgVHJ1ZSkKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihhbGxfYmFzZWxpbmVzWzBdWzBdLCBh
bGxfYmFzZWxpbmVzWzBdWzFdKQotCi0gICAgZGVmIF9pc19kdXBfYmFzZWxpbmUoc2VsZiwgbmV3
X2Jhc2VsaW5lLCBiYXNlbGluZV9wYXRoLCB0ZXN0LCBzdWZmaXgsIHBsYXRmb3JtKToKLSAgICAg
ICAgIiIiQ2hlY2sgd2hldGhlciBhIGJhc2VsaW5lIGlzIGR1cGxpY2F0ZSBhbmQgY2FuIGZhbGxi
YWNrIHRvIHNhbWUKLSAgICAgICAgICAgYmFzZWxpbmUgZm9yIGFub3RoZXIgcGxhdGZvcm0uIEZv
ciBleGFtcGxlLCBpZiBhIHRlc3QgaGFzIHNhbWUKLSAgICAgICAgICAgYmFzZWxpbmUgb24gbGlu
dXggYW5kIHdpbmRvd3MsIHRoZW4gd2Ugb25seSBzdG9yZSB3aW5kb3dzCi0gICAgICAgICAgIGJh
c2VsaW5lIGFuZCBsaW51eCBiYXNlbGluZSB3aWxsIGZhbGxiYWNrIHRvIHRoZSB3aW5kb3dzIHZl
cnNpb24uCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBuZXdfYmFzZWxpbmU6IHRlbXAgZmls
ZW5hbWUgY29udGFpbmluZyB0aGUgbmV3IGJhc2VsaW5lIHJlc3VsdHMKLSAgICAgICAgICBiYXNl
bGluZV9wYXRoOiBiYXNlbGluZSBleHBlY3RhdGlvbiBmaWxlIG5hbWUuCi0gICAgICAgICAgdGVz
dDogdGVzdCBuYW1lLgotICAgICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVj
dGVkIHJlc3VsdHMsIGluY2x1ZGluZyBkb3Q7Ci0gICAgICAgICAgICAgICAgICBlLmcuICcudHh0
JyBvciAnLnBuZycuCi0gICAgICAgICAgcGxhdGZvcm06IGJhc2VsaW5lIHBsYXRmb3JtICdtYWMn
LCAnd2luJyBvciAnbGludXgnLgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgVHJ1ZSBp
ZiB0aGUgYmFzZWxpbmUgaXMgdW5uZWNlc3NhcnkuCi0gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNl
LgotICAgICAgICAiIiIKLSAgICAgICAgYWxsX2Jhc2VsaW5lcyA9IHNlbGYuX3JlYmFzZWxpbmVf
cG9ydC5leHBlY3RlZF9iYXNlbGluZXModGVzdCwgc3VmZml4LCBUcnVlKQotCi0gICAgICAgIGZv
ciBmYWxsYmFja19kaXIsIGZhbGxiYWNrX2ZpbGUgaW4gYWxsX2Jhc2VsaW5lczoKLSAgICAgICAg
ICAgIGlmIG5vdCBmYWxsYmFja19kaXIgb3Igbm90IGZhbGxiYWNrX2ZpbGU6Ci0gICAgICAgICAg
ICAgICAgY29udGludWUKLQotICAgICAgICAgICAgZmFsbGJhY2tfZnVsbHBhdGggPSBzZWxmLl9m
aWxlc3lzdGVtLm5vcm1wYXRoKAotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bihmYWxsYmFja19kaXIsIGZhbGxiYWNrX2ZpbGUpKQotICAgICAgICAgICAgaWYgZmFsbGJhY2tf
ZnVsbHBhdGgubG93ZXIoKSA9PSBiYXNlbGluZV9wYXRoLmxvd2VyKCk6Ci0gICAgICAgICAgICAg
ICAgY29udGludWUKLSAgICAgICAgICAgIGZhbGxiYWNrX2Rpcl9yZWxwYXRoID0gc2VsZi5fZmls
ZXN5c3RlbS5yZWxwYXRoKGZhbGxiYWNrX2Rpciwgc2VsZi5fdGFyZ2V0X3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpKQotICAgICAgICAgICAgaWYgZmFsbGJhY2tfZGlyX3JlbHBhdGggPT0gJyc6Ci0g
ICAgICAgICAgICAgICAgZmFsbGJhY2tfZGlyX3JlbHBhdGggPSAnPGdlbmVyaWM+JwotCi0gICAg
ICAgICAgICBuZXdfb3V0cHV0ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKG5l
d19iYXNlbGluZSkKLSAgICAgICAgICAgIGZhbGxiYWNrX291dHB1dCA9IHNlbGYuX2ZpbGVzeXN0
ZW0ucmVhZF9iaW5hcnlfZmlsZShmYWxsYmFja19mdWxscGF0aCkKLSAgICAgICAgICAgIGlzX2lt
YWdlID0gYmFzZWxpbmVfcGF0aC5sb3dlcigpLmVuZHN3aXRoKCcucG5nJykKLSAgICAgICAgICAg
IGlmIG5vdCBzZWxmLl9kaWZmX2Jhc2VsaW5lcyhuZXdfb3V0cHV0LCBmYWxsYmFja19vdXRwdXQs
IGlzX2ltYWdlKToKLSAgICAgICAgICAgICAgICBfbG9nLmluZm8oJyAgU2tpcHBpbmcgJXMgKG1h
dGNoZXMgJXMpJywgdGVzdCwgZmFsbGJhY2tfZGlyX3JlbHBhdGgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFRydWUKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHJldHVybiBG
YWxzZQotCi0gICAgZGVmIF9kaWZmX2Jhc2VsaW5lcyhzZWxmLCBvdXRwdXQxLCBvdXRwdXQyLCBp
c19pbWFnZSk6Ci0gICAgICAgICIiIkNoZWNrIHdoZXRoZXIgdHdvIGJhc2VsaW5lcyBhcmUgZGlm
ZmVyZW50LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgb3V0cHV0MSwgb3V0cHV0MjogY29u
dGVudHMgb2YgdGhlIGJhc2VsaW5lcyB0byBjb21wYXJlLgotCi0gICAgICAgIFJldHVybnM6Ci0g
ICAgICAgICAgVHJ1ZSBpZiB0d28gZmlsZXMgYXJlIGRpZmZlcmVudCBvciBoYXZlIGRpZmZlcmVu
dCBleHRlbnNpb25zLgotICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KLSAgICAgICAgIiIiCi0K
LSAgICAgICAgaWYgaXNfaW1hZ2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5kaWZm
X2ltYWdlKG91dHB1dDEsIG91dHB1dDIpWzBdCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQu
ZG9fdGV4dF9yZXN1bHRzX2RpZmZlcihvdXRwdXQxLCBvdXRwdXQyKQotCi0gICAgZGVmIF9kZWxl
dGVfYmFzZWxpbmUoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICAiIiJSZW1vdmUgdGhlIGZpbGUg
ZnJvbSByZXBvc2l0b3J5IGFuZCBkZWxldGUgaXQgZnJvbSBkaXNrLgotCi0gICAgICAgIEFyZ3M6
Ci0gICAgICAgICAgZmlsZW5hbWU6IGZ1bGwgcGF0aCBvZiB0aGUgZmlsZSB0byBkZWxldGUuCi0g
ICAgICAgICIiIgotCi0gICAgICAgIGlmIG5vdCBmaWxlbmFtZSBvciBub3Qgc2VsZi5fZmlsZXN5
c3RlbS5pc2ZpbGUoZmlsZW5hbWUpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYu
X3NjbS5kZWxldGUoZmlsZW5hbWUpCi0KLSAgICBkZWYgX2NyZWF0ZV9odG1sX2Jhc2VsaW5lX2Zp
bGVzKHNlbGYsIGJhc2VsaW5lX2Z1bGxwYXRoKToKLSAgICAgICAgIiIiQ3JlYXRlIGJhc2VsaW5l
IGZpbGVzIChvbGQsIG5ldyBhbmQgZGlmZikgaW4gaHRtbCBkaXJlY3RvcnkuCi0KLSAgICAgICAg
ICAgVGhlIGZpbGVzIGFyZSB1c2VkIHRvIGNvbXBhcmUgdGhlIHJlYmFzZWxpbmluZyByZXN1bHRz
LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgYmFzZWxpbmVfZnVsbHBhdGg6IGZ1bGwgcGF0
aCBvZiB0aGUgZXhwZWN0ZWQgYmFzZWxpbmUgZmlsZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAg
YmFzZWxpbmVfcmVscGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChiYXNlbGluZV9mdWxs
cGF0aCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnICBIdG1sOiBjcmVhdGUgYmFzZWxpbmVzIGZvciAi
JXMiJywgYmFzZWxpbmVfcmVscGF0aCkKLQotICAgICAgICBpZiAobm90IGJhc2VsaW5lX2Z1bGxw
YXRoCi0gICAgICAgICAgICBvciBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoYmFzZWxpbmVf
ZnVsbHBhdGgpKToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgSHRtbDogRG9lcyBub3QgZXhp
c3Q6ICIlcyInLCBiYXNlbGluZV9mdWxscGF0aCkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAg
ICAgIGlmIG5vdCBzZWxmLl9zY20uZXhpc3RzKGJhc2VsaW5lX3JlbHBhdGgpOgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygnICBIdG1sOiBEb2VzIG5vdCBleGlzdCBpbiBzY206ICIlcyInLCBiYXNl
bGluZV9yZWxwYXRoKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgIyBDb3B5IHRoZSBu
ZXcgYmFzZWxpbmUgdG8gaHRtbCBkaXJlY3RvcnkgZm9yIHJlc3VsdCBjb21wYXJpc29uLgotICAg
ICAgICBiYXNlbGluZV9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uYmFzZW5hbWUoYmFzZWxp
bmVfZnVsbHBhdGgpCi0gICAgICAgIG5ld19maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRo
KHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX29wdGlvbnMuaHRtbF9kaXJlY3RvcnksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBz
ZWxmLl9wbGF0Zm9ybSwgJ25ldycpCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUo
YmFzZWxpbmVfZnVsbHBhdGgsIG5ld19maWxlKQotICAgICAgICBfbG9nLmRlYnVnKCcgIEh0bWw6
IGNvcGllZCBuZXcgYmFzZWxpbmUgZmlsZSBmcm9tICIlcyIgdG8gIiVzIi4nLAotICAgICAgICAg
ICAgICAgICAgYmFzZWxpbmVfZnVsbHBhdGgsIG5ld19maWxlKQotCi0gICAgICAgICMgR2V0IHRo
ZSBvbGQgYmFzZWxpbmUgZnJvbSB0aGUgcmVwb3NpdG9yeSBhbmQgc2F2ZSB0byB0aGUgaHRtbCBk
aXJlY3RvcnkuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX3NjbS5z
aG93X2hlYWQoYmFzZWxpbmVfcmVscGF0aCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBl
OgotICAgICAgICAgICAgX2xvZy53YXJuaW5nKGUpCi0gICAgICAgICAgICBvdXRwdXQgPSAiIgot
Ci0gICAgICAgIGlmIChub3Qgb3V0cHV0KSBvciAob3V0cHV0LnVwcGVyKCkucnN0cmlwKCkuZW5k
c3dpdGgoJ05PIFNVQ0ggRklMRSBPUiBESVJFQ1RPUlknKSk6Ci0gICAgICAgICAgICBfbG9nLndh
cm5pbmcoJyAgTm8gYmFzZSBmaWxlOiAiJXMiJywgYmFzZWxpbmVfZnVsbHBhdGgpCi0gICAgICAg
ICAgICByZXR1cm4KLSAgICAgICAgYmFzZV9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRo
KHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX29wdGlvbnMuaHRtbF9kaXJlY3RvcnksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwg
c2VsZi5fcGxhdGZvcm0sICdvbGQnKQotICAgICAgICBpZiBiYXNlX2ZpbGUudXBwZXIoKS5lbmRz
d2l0aCgnLlBORycpOgotICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlf
ZmlsZShiYXNlX2ZpbGUsIG91dHB1dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGJhc2VfZmlsZSwgb3V0cHV0KQotICAgICAgICBf
bG9nLmRlYnVnKCcgIEh0bWw6IGNyZWF0ZWQgb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyIuJywgYmFz
ZV9maWxlKQotCi0gICAgICAgICMgR2V0IHRoZSBkaWZmIGJldHdlZW4gb2xkIGFuZCBuZXcgYmFz
ZWxpbmVzIGFuZCBzYXZlIHRvIHRoZSBodG1sIGRpci4KLSAgICAgICAgZGlmZl9maWxlID0gZ2V0
X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmh0bWxfZGlyZWN0b3J5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVf
ZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wbGF0Zm9ybSwgJ2RpZmYnKQotICAgICAgICBoYXNfZGlmZiA9IEZhbHNlCi0gICAgICAg
IGlmIGJhc2VsaW5lX2ZpbGVuYW1lLnVwcGVyKCkuZW5kc3dpdGgoJy5UWFQnKToKLSAgICAgICAg
ICAgIG91dHB1dCA9IHNlbGYuX3NjbS5kaWZmX2Zvcl9maWxlKGJhc2VsaW5lX3JlbHBhdGgsIGxv
Zz1fbG9nKQotICAgICAgICAgICAgaWYgb3V0cHV0OgotICAgICAgICAgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGRpZmZfZmlsZSwgb3V0cHV0KQotICAgICAgICAgICAg
ICAgIGhhc19kaWZmID0gVHJ1ZQotICAgICAgICBlbGlmIGJhc2VsaW5lX2ZpbGVuYW1lLnVwcGVy
KCkuZW5kc3dpdGgoJy5QTkcnKToKLSAgICAgICAgICAgIG9sZF9maWxlID0gZ2V0X3Jlc3VsdF9m
aWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmh0bWxfZGlyZWN0b3J5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmls
ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wbGF0Zm9ybSwgJ29sZCcpCi0gICAgICAgICAgICBuZXdfZmlsZSA9IGdldF9yZXN1bHRf
ZmlsZV9mdWxscGF0aChzZWxmLl9maWxlc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2Zp
bGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fcGxhdGZvcm0sICduZXcnKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnIEh0bWw6IGRp
ZmZpbmcgIiVzIiBhbmQgIiVzIicsIG9sZF9maWxlLCBuZXdfZmlsZSkKLSAgICAgICAgICAgIG9s
ZF9vdXRwdXQgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUob2xkX2ZpbGUpCi0g
ICAgICAgICAgICBuZXdfb3V0cHV0ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxl
KG5ld19maWxlKQotICAgICAgICAgICAgaW1hZ2VfZGlmZiA9IHNlbGYuX3BvcnQuZGlmZl9pbWFn
ZShvbGRfb3V0cHV0LCBuZXdfb3V0cHV0KVswXQotICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3Rl
bS53cml0ZV9iaW5hcnlfZmlsZShkaWZmX2ZpbGUsIGltYWdlX2RpZmYpCi0KLSAgICAgICAgaWYg
aGFzX2RpZmY6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgIEh0bWw6IGNyZWF0ZWQgYmFzZWxp
bmUgZGlmZiBmaWxlOiAiJXMiLicsIGRpZmZfZmlsZSkKLQotCi1jbGFzcyBIdG1sR2VuZXJhdG9y
KG9iamVjdCk6Ci0gICAgIiIiQ2xhc3MgdG8gZ2VuZXJhdGUgcmViYXNlbGluaW5nIHJlc3VsdCBj
b21wYXJpc29uIGh0bWwuIiIiCi0KLSAgICBIVE1MX1JFQkFTRUxJTkUgPSAoJzxodG1sPicKLSAg
ICAgICAgICAgICAgICAgICAgICAgJzxoZWFkPicKLSAgICAgICAgICAgICAgICAgICAgICAgJzxz
dHlsZT4nCi0gICAgICAgICAgICAgICAgICAgICAgICdib2R5IHtmb250LWZhbWlseTogc2Fucy1z
ZXJpZjt9JwotICAgICAgICAgICAgICAgICAgICAgICAnLm1haW5UYWJsZSB7YmFja2dyb3VuZDog
IzY2NjY2Njt9JwotICAgICAgICAgICAgICAgICAgICAgICAnLm1haW5UYWJsZSB0ZCAsIC5tYWlu
VGFibGUgdGgge2JhY2tncm91bmQ6IHdoaXRlO30nCi0gICAgICAgICAgICAgICAgICAgICAgICcu
ZGV0YWlsIHttYXJnaW4tbGVmdDogMTBweDsgbWFyZ2luLXRvcDogM3B4O30nCi0gICAgICAgICAg
ICAgICAgICAgICAgICc8L3N0eWxlPicKLSAgICAgICAgICAgICAgICAgICAgICAgJzx0aXRsZT5S
ZWJhc2VsaW5pbmcgUmVzdWx0IENvbXBhcmlzb24gKCUodGltZSlzKScKLSAgICAgICAgICAgICAg
ICAgICAgICAgJzwvdGl0bGU+JwotICAgICAgICAgICAgICAgICAgICAgICAnPC9oZWFkPicKLSAg
ICAgICAgICAgICAgICAgICAgICAgJzxib2R5PicKLSAgICAgICAgICAgICAgICAgICAgICAgJzxo
Mj5SZWJhc2VsaW5pbmcgUmVzdWx0IENvbXBhcmlzb24gKCUodGltZSlzKTwvaDI+JwotICAgICAg
ICAgICAgICAgICAgICAgICAnJShib2R5KXMnCi0gICAgICAgICAgICAgICAgICAgICAgICc8L2Jv
ZHk+JwotICAgICAgICAgICAgICAgICAgICAgICAnPC9odG1sPicpCi0gICAgSFRNTF9OT19SRUJB
U0VMSU5JTkdfVEVTVFMgPSAoCi0gICAgICAgICc8cD5ObyB0ZXN0cyBmb3VuZCB0aGF0IG5lZWQg
cmViYXNlbGluaW5nLjwvcD4nKQotICAgIEhUTUxfVEFCTEVfVEVTVCA9ICgnPHRhYmxlIGNsYXNz
PSJtYWluVGFibGUiIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NT4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICclczwvdGFibGU+PGJyPicpCi0gICAgSFRNTF9UUl9URVNUID0gKCc8dHI+Jwot
ICAgICAgICAgICAgICAgICAgICAnPHRoIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjQ0RFQ0RF
OyBib3JkZXItYm90dG9tOiAnCi0gICAgICAgICAgICAgICAgICAgICcxcHggc29saWQgYmxhY2s7
IGZvbnQtc2l6ZTogMThwdDsgZm9udC13ZWlnaHQ6IGJvbGQiICcKLSAgICAgICAgICAgICAgICAg
ICAgJ2NvbHNwYW49IjUiPicKLSAgICAgICAgICAgICAgICAgICAgJzxhIGhyZWY9IiVzIj4lczwv
YT4nCi0gICAgICAgICAgICAgICAgICAgICc8L3RoPicKLSAgICAgICAgICAgICAgICAgICAgJzwv
dHI+JykKLSAgICBIVE1MX1RFU1RfREVUQUlMID0gKCc8ZGl2IGNsYXNzPSJkZXRhaWwiPicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICc8dHI+JwotICAgICAgICAgICAgICAgICAgICAgICAgJzx0
aCB3aWR0aD0iMTAwIj5CYXNlbGluZTwvdGg+JwotICAgICAgICAgICAgICAgICAgICAgICAgJzx0
aCB3aWR0aD0iMTAwIj5QbGF0Zm9ybTwvdGg+JwotICAgICAgICAgICAgICAgICAgICAgICAgJzx0
aCB3aWR0aD0iMjAwIj5PbGQ8L3RoPicKLSAgICAgICAgICAgICAgICAgICAgICAgICc8dGggd2lk
dGg9IjIwMCI+TmV3PC90aD4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIx
NTAiPkRpZmZlcmVuY2U8L3RoPicKLSAgICAgICAgICAgICAgICAgICAgICAgICc8L3RyPicKLSAg
ICAgICAgICAgICAgICAgICAgICAgICclcycKLSAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rp
dj4nKQotICAgIEhUTUxfVERfTk9MSU5LID0gJzx0ZCBhbGlnbj1jZW50ZXI+PGE+JXM8L2E+PC90
ZD4nCi0gICAgSFRNTF9URF9MSU5LID0gJzx0ZCBhbGlnbj1jZW50ZXI+PGEgaHJlZj0iJSh1cmkp
cyI+JShuYW1lKXM8L2E+PC90ZD4nCi0gICAgSFRNTF9URF9MSU5LX0lNRyA9ICgnPHRkPjxhIGhy
ZWY9IiUodXJpKXMiPicKLSAgICAgICAgICAgICAgICAgICAgICAgICc8aW1nIHN0eWxlPSJ3aWR0
aDogMjAwIiBzcmM9IiUodXJpKXMiIC8+PC9hPjwvdGQ+JykKLSAgICBIVE1MX1RSID0gJzx0cj4l
czwvdHI+JwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQsIHRhcmdldF9wb3J0
LCBvcHRpb25zLCBwbGF0Zm9ybXMsIHJlYmFzZWxpbmluZ190ZXN0cyk6Ci0gICAgICAgIHNlbGYu
X2h0bWxfZGlyZWN0b3J5ID0gb3B0aW9ucy5odG1sX2RpcmVjdG9yeQotICAgICAgICBzZWxmLl9o
b3N0ID0gaG9zdAotICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gaG9zdC5maWxlc3lzdGVtCi0g
ICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX3RhcmdldF9wb3J0ID0gdGFy
Z2V0X3BvcnQKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5f
cGxhdGZvcm1zID0gcGxhdGZvcm1zCi0gICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9
IHJlYmFzZWxpbmluZ190ZXN0cwotICAgICAgICBzZWxmLl9odG1sX2ZpbGUgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4ob3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWJhc2VsaW5lLmh0bWwnKQotCi0gICAgZGVm
IGFic3BhdGhfdG9fdXJpKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgIiIiQ29udmVydHMgYW4g
YWJzb2x1dGUgcGF0aCB0byBhIGZpbGU6IFVSSS4iIiIKLSAgICAgICAgcmV0dXJuIHBhdGguYWJz
cGF0aF90b191cmkoZmlsZW5hbWUsIHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZSkKLQotICAgIGRlZiBn
ZW5lcmF0ZV9odG1sKHNlbGYpOgotICAgICAgICAiIiJHZW5lcmF0ZSBodG1sIGZpbGUgZm9yIHJl
YmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbi4iIiIKLQotICAgICAgICBfbG9nLmRlYnVnKCdH
ZW5lcmF0aW5nIGh0bWwgZmlsZScpCi0KLSAgICAgICAgaHRtbF9ib2R5ID0gJycKLSAgICAgICAg
aWYgbm90IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKLSAgICAgICAgICAgIGh0bWxfYm9keSAr
PSBzZWxmLkhUTUxfTk9fUkVCQVNFTElOSU5HX1RFU1RTCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB0ZXN0cyA9IGxpc3Qoc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKQotICAgICAgICAgICAg
dGVzdHMuc29ydCgpCi0KLSAgICAgICAgICAgIHRlc3Rfbm8gPSAxCi0gICAgICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUZXN0ICVkOiAlcycs
IHRlc3Rfbm8sIHRlc3QpCi0gICAgICAgICAgICAgICAgaHRtbF9ib2R5ICs9IHNlbGYuX2dlbmVy
YXRlX2h0bWxfZm9yX29uZV90ZXN0KHRlc3QpCi0KLSAgICAgICAgaHRtbCA9IHNlbGYuSFRNTF9S
RUJBU0VMSU5FICUgKHsndGltZSc6IHRpbWUuYXNjdGltZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdib2R5JzogaHRtbF9ib2R5fSkKLSAgICAgICAgX2xvZy5k
ZWJ1ZyhodG1sKQotCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNl
bGYuX2h0bWxfZmlsZSwgaHRtbCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnQmFzZWxpbmUgY29tcGFy
aXNvbiBodG1sIGdlbmVyYXRlZCBhdCAiJXMiJywgc2VsZi5faHRtbF9maWxlKQotCi0gICAgZGVm
IHNob3dfaHRtbChzZWxmKToKLSAgICAgICAgIiIiTGF1bmNoIHRoZSByZWJhc2VsaW5pbmcgaHRt
bCBpbiBicndvc2VyLiIiIgotCi0gICAgICAgIF9sb2cuZGVidWcoJ0xhdW5jaGluZyBodG1sOiAi
JXMiJywgc2VsZi5faHRtbF9maWxlKQotICAgICAgICBzZWxmLl9ob3N0LnVzZXIub3Blbl91cmwo
c2VsZi5faHRtbF9maWxlKQotICAgICAgICBfbG9nLmRlYnVnKCdIdG1sIGxhdW5jaGVkLicpCi0K
LSAgICBkZWYgX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHNlbGYsIHRlc3RfYmFzZW5hbWUsIHN1
ZmZpeCwgcGxhdGZvcm0pOgotICAgICAgICAiIiJHZW5lcmF0ZSBsaW5rcyBmb3IgYmFzZWxpbmUg
cmVzdWx0cyAob2xkLCBuZXcgYW5kIGRpZmYpLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAg
dGVzdF9iYXNlbmFtZTogYmFzZSBmaWxlbmFtZSBvZiB0aGUgdGVzdAotICAgICAgICAgIHN1ZmZp
eDogYmFzZWxpbmUgZmlsZSBzdWZmaXhlczogJy50eHQnLCAnLnBuZycKLSAgICAgICAgICBwbGF0
Zm9ybTogd2luLCBsaW51eCBvciBtYWMKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIGh0
bWwgbGlua3MgZm9yIHNob3dpbmcgYmFzZWxpbmUgcmVzdWx0cyAob2xkLCBuZXcgYW5kIGRpZmYp
Ci0gICAgICAgICIiIgotCi0gICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0gJyVzLWV4cGVjdGVk
JXMnICUgKHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnICAgIGJh
c2VsaW5lIGZpbGVuYW1lOiAiJXMiJywgYmFzZWxpbmVfZmlsZW5hbWUpCi0KLSAgICAgICAgbmV3
X2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5f
aHRtbF9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwgJ25ldycpCi0gICAgICAgIF9sb2cuZGVi
dWcoJyAgICBOZXcgYmFzZWxpbmUgZmlsZTogIiVzIicsIG5ld19maWxlKQotICAgICAgICBpZiBu
b3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMobmV3X2ZpbGUpOgotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnICAgIE5vIG5ldyBiYXNlbGluZSBmaWxlOiAiJXMiJywgbmV3X2ZpbGUpCi0gICAgICAg
ICAgICByZXR1cm4gJycKLQotICAgICAgICBvbGRfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxs
cGF0aChzZWxmLl9maWxlc3lzdGVtLCBzZWxmLl9odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBsYXRm
b3JtLCAnb2xkJykKLSAgICAgICAgX2xvZy5kZWJ1ZygnICAgIE9sZCBiYXNlbGluZSBmaWxlOiAi
JXMiJywgb2xkX2ZpbGUpCi0gICAgICAgIGlmIHN1ZmZpeCA9PSAnLnBuZyc6Ci0gICAgICAgICAg
ICBodG1sX3RkX2xpbmsgPSBzZWxmLkhUTUxfVERfTElOS19JTUcKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIGh0bWxfdGRfbGluayA9IHNlbGYuSFRNTF9URF9MSU5LCi0KLSAgICAgICAgbGlu
a3MgPSAnJwotICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhvbGRfZmlsZSk6Ci0g
ICAgICAgICAgICBsaW5rcyArPSBodG1sX3RkX2xpbmsgJSB7Ci0gICAgICAgICAgICAgICAgJ3Vy
aSc6IHNlbGYuYWJzcGF0aF90b191cmkob2xkX2ZpbGUpLAotICAgICAgICAgICAgICAgICduYW1l
JzogYmFzZWxpbmVfZmlsZW5hbWV9Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmRl
YnVnKCcgICAgTm8gb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKLSAgICAgICAg
ICAgIGxpbmtzICs9IHNlbGYuSFRNTF9URF9OT0xJTksgJSAnJwotCi0gICAgICAgIGxpbmtzICs9
IGh0bWxfdGRfbGluayAlIHsndXJpJzogc2VsZi5hYnNwYXRoX3RvX3VyaShuZXdfZmlsZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGJhc2VsaW5lX2ZpbGVuYW1l
fQotCi0gICAgICAgIGRpZmZfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9m
aWxlc3lzdGVtLCBzZWxmLl9odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwgJ2RpZmYn
KQotICAgICAgICBfbG9nLmRlYnVnKCcgICAgQmFzZWxpbmUgZGlmZiBmaWxlOiAiJXMiJywgZGlm
Zl9maWxlKQotICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhkaWZmX2ZpbGUpOgot
ICAgICAgICAgICAgbGlua3MgKz0gaHRtbF90ZF9saW5rICUgeyd1cmknOiBzZWxmLmFic3BhdGhf
dG9fdXJpKGRpZmZfZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J25hbWUnOiAnRGlmZid9Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcg
ICAgTm8gYmFzZWxpbmUgZGlmZiBmaWxlOiAiJXMiJywgZGlmZl9maWxlKQotICAgICAgICAgICAg
bGlua3MgKz0gc2VsZi5IVE1MX1REX05PTElOSyAlICcnCi0KLSAgICAgICAgcmV0dXJuIGxpbmtz
Ci0KLSAgICBkZWYgX2dlbmVyYXRlX2h0bWxfZm9yX29uZV90ZXN0KHNlbGYsIHRlc3QpOgotICAg
ICAgICAiIiJHZW5lcmF0ZSBodG1sIGZvciBvbmUgcmViYXNlbGluaW5nIHRlc3QuCi0KLSAgICAg
ICAgQXJnczoKLSAgICAgICAgICB0ZXN0OiBsYXlvdXQgdGVzdCBuYW1lCi0KLSAgICAgICAgUmV0
dXJuczoKLSAgICAgICAgICBodG1sIHRoYXQgY29tcGFyZXMgYmFzZWxpbmUgcmVzdWx0cyBmb3Ig
dGhlIHRlc3QuCi0gICAgICAgICIiIgotCi0gICAgICAgIHRlc3RfYmFzZW5hbWUgPSBzZWxmLl9m
aWxlc3lzdGVtLmJhc2VuYW1lKHNlbGYuX2ZpbGVzeXN0ZW0uc3BsaXRleHQodGVzdClbMF0pCi0g
ICAgICAgIF9sb2cuZGVidWcoJyAgYmFzZW5hbWU6ICIlcyInLCB0ZXN0X2Jhc2VuYW1lKQotICAg
ICAgICByb3dzID0gW10KLSAgICAgICAgZm9yIHN1ZmZpeCBpbiBCQVNFTElORV9TVUZGSVhFUzoK
LSAgICAgICAgICAgIGlmIHN1ZmZpeCA9PSAnLmNoZWNrc3VtJzoKLSAgICAgICAgICAgICAgICBj
b250aW51ZQotCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgIENoZWNraW5nICVzIGZpbGVzJywg
c3VmZml4KQotICAgICAgICAgICAgZm9yIHBsYXRmb3JtIGluIHNlbGYuX3BsYXRmb3JtczoKLSAg
ICAgICAgICAgICAgICBsaW5rcyA9IHNlbGYuX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHRlc3Rf
YmFzZW5hbWUsIHN1ZmZpeCwgcGxhdGZvcm0pCi0gICAgICAgICAgICAgICAgaWYgbGlua3M6Ci0g
ICAgICAgICAgICAgICAgICAgIHJvdyA9IHNlbGYuSFRNTF9URF9OT0xJTksgJSBzZWxmLl9nZXRf
YmFzZWxpbmVfcmVzdWx0X3R5cGUoc3VmZml4KQotICAgICAgICAgICAgICAgICAgICByb3cgKz0g
c2VsZi5IVE1MX1REX05PTElOSyAlIHBsYXRmb3JtCi0gICAgICAgICAgICAgICAgICAgIHJvdyAr
PSBsaW5rcwotICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCcgICAgaHRtbCByb3c6ICVz
Jywgcm93KQotCi0gICAgICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKHNlbGYuSFRNTF9UUiAl
IHJvdykKLQotICAgICAgICBpZiByb3dzOgotICAgICAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX3RhcmdldF9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVz
dCkKLSAgICAgICAgICAgIGh0bWwgPSBzZWxmLkhUTUxfVFJfVEVTVCAlIChzZWxmLmFic3BhdGhf
dG9fdXJpKHRlc3RfcGF0aCksIHRlc3QpCi0gICAgICAgICAgICBodG1sICs9IHNlbGYuSFRNTF9U
RVNUX0RFVEFJTCAlICcgJy5qb2luKHJvd3MpCi0KLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAg
ICBodG1sIGZvciB0ZXN0OiAlcycsIGh0bWwpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5IVE1M
X1RBQkxFX1RFU1QgJSBodG1sCi0KLSAgICAgICAgcmV0dXJuICcnCi0KLSAgICBkZWYgX2dldF9i
YXNlbGluZV9yZXN1bHRfdHlwZShzZWxmLCBzdWZmaXgpOgotICAgICAgICAiIiJOYW1lIG9mIHRo
ZSBiYXNlbGluZSByZXN1bHQgdHlwZS4iIiIKLQotICAgICAgICBpZiBzdWZmaXggPT0gJy5wbmcn
OgotICAgICAgICAgICAgcmV0dXJuICdQaXhlbCcKLSAgICAgICAgZWxpZiBzdWZmaXggPT0gJy50
eHQnOgotICAgICAgICAgICAgcmV0dXJuICdSZW5kZXIgVHJlZScKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIHJldHVybiAnT3RoZXInCi0KLQotZGVmIGdldF9ob3N0X3BvcnRfb2JqZWN0KHBv
cnRfZmFjdG9yeSwgb3B0aW9ucyk6Ci0gICAgIiIiUmV0dXJuIGEgcG9ydCBvYmplY3QgZm9yIHRo
ZSBwbGF0Zm9ybSB3ZSdyZSBydW5uaW5nIG9uLiIiIgotICAgICMgV2Ugd2FudCB0aGUgSW1hZ2VE
aWZmIGxvZ2ljIHRvIG1hdGNoIHRoYXQgb2YgdGhlIGNocm9taXVtIGJvdHMsIHNvIHdlCi0gICAg
IyBmb3JjZSB0aGUgdXNlIG9mIGEgQ2hyb21pdW0gcG9ydC4gIFdlIHdpbGwgbG9vayBmb3IgZWl0
aGVyIERlYnVnIG9yCi0gICAgIyBSZWxlYXNlIHZlcnNpb25zLgotICAgIG9wdGlvbnMuY29uZmln
dXJhdGlvbiA9ICJSZWxlYXNlIgotICAgIG9wdGlvbnMuY2hyb21pdW0gPSBUcnVlCi0gICAgcG9y
dF9vYmogPSBwb3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnM9b3B0aW9ucykKLSAgICBpZiBub3QgcG9y
dF9vYmouY2hlY2tfaW1hZ2VfZGlmZihvdmVycmlkZV9zdGVwPU5vbmUsIGxvZ2dpbmc9RmFsc2Up
OgotICAgICAgICBfbG9nLmRlYnVnKCdObyByZWxlYXNlIHZlcnNpb24gb2YgdGhlIGltYWdlIGRp
ZmYgYmluYXJ5IHdhcyBmb3VuZC4nKQotICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSAi
RGVidWciCi0gICAgICAgIHBvcnRfb2JqID0gcG9ydF9mYWN0b3J5LmdldChvcHRpb25zPW9wdGlv
bnMpCi0gICAgICAgIGlmIG5vdCBwb3J0X29iai5jaGVja19pbWFnZV9kaWZmKG92ZXJyaWRlX3N0
ZXA9Tm9uZSwgbG9nZ2luZz1GYWxzZSk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdObyB2ZXJz
aW9uIG9mIGltYWdlIGRpZmYgd2FzIGZvdW5kLiBDaGVjayB5b3VyIGJ1aWxkLicpCi0gICAgICAg
ICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
Rm91bmQgdGhlIGRlYnVnIHZlcnNpb24gb2YgdGhlIGltYWdlIGRpZmYgYmluYXJ5LicpCi0gICAg
ZWxzZToKLSAgICAgICAgX2xvZy5kZWJ1ZygnRm91bmQgdGhlIHJlbGVhc2UgdmVyc2lvbiBvZiB0
aGUgaW1hZ2UgZGlmZiBiaW5hcnkuJykKLSAgICByZXR1cm4gcG9ydF9vYmoKLQotCi1kZWYgcGFy
c2Vfb3B0aW9ucyhhcmdzKToKLSAgICAiIiJQYXJzZSBvcHRpb25zIGFuZCByZXR1cm4gYSBwYWly
IG9mIGhvc3Qgb3B0aW9ucyBhbmQgdGFyZ2V0IG9wdGlvbnMuIiIiCi0gICAgb3B0aW9uX3BhcnNl
ciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctdicsICctLXZlcmJvc2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249
J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdpbmNsdWRlIGRlYnVnLWxldmVs
IGxvZ2dpbmcuJykKLQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWll
dCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N1cHByZXNzIHJlc3VsdCBIVE1MIHZp
ZXdpbmcnKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBsYXRmb3Jt
cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ0NvbW1hIGRlbGltaXRlZCBsaXN0IG9mIHBsYXRm
b3JtcyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGF0IG5lZWQgcmVi
YXNlbGluaW5nLicpKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdScsICctLWFy
Y2hpdmVfdXJsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0oJ2h0dHA6
Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS8nCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdsYXlvdXRfdGVzdF9yZXN1bHRzJyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9KCdVcmwgdG8gZmluZCB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGFy
Y2hpdmUnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmlsZS4nKSkKLSAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1VJywgJy0tZm9yY2VfYXJjaGl2ZV91cmwnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnVXJsIG9mIHJlc3VsdCB6aXAgZmls
ZS4gVGhpcyBvcHRpb24gaXMgZm9yIGRlYnVnZ2luZyAnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdwdXJwb3NlcycpKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctYicsICctLWJhY2t1cCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0n
c3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdXaGV0aGVyIG9yIG5vdCB0byBi
YWNrdXAgdGhlIG9yaWdpbmFsIHRlc3QnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcgZXhwZWN0YXRpb25zIGZpbGUgYWZ0ZXIgcmViYXNlbGluZS4nKSkKLQotICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1odG1sX2RpcmVjdG9yeScsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9KCdUaGUgZGlyZWN0b3J5IHRoYXQgc3RvcmVzIHRoZSByZXN1bHRzIGZvciAnCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWJhc2VsaW5pbmcgY29tcGFyaXNv
bi4nKSkKLQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignJywgJy0tdXNlX2RydCcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9KCdVc2UgSW1hZ2VEaWZmIGZyb20gRHVtcFJlbmRlclRyZWUgaW5zdGVh
ZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvZiBpbWFnZV9kaWZmIGZv
ciBwaXhlbCB0ZXN0cy4nKSkKLQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXcnLCAn
LS13ZWJraXRfY2FuYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdz
dG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ0RFUFJFQ0FURUQuIFRoaXMgZmxh
ZyBubyBsb25nZXIgaGFzIGFueSBlZmZlY3QuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnICBUaGUgY2FuYXJpZXMgYXJlIGFsd2F5cyB1c2VkLicpKQotCi0gICAgb3B0aW9u
X3BhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS10YXJnZXQtcGxhdGZvcm0nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PSdjaHJvbWl1bScsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9KCdUaGUgdGFyZ2V0IHBsYXRmb3JtIHRvIHJlYmFzZWxpbmUgJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCJtYWMiLCAiY2hyb21pdW0iLCAicXQi
LCBldGMuKS4gRGVmYXVsdHMgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
dG8gImNocm9taXVtIi4nKSkKLQotICAgIG9wdGlvbnMgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2Fy
Z3MoYXJncylbMF0KLSAgICBpZiBvcHRpb25zLndlYmtpdF9jYW5hcnk6Ci0gICAgICAgIHByaW50
ICItdy8tLXdlYmtpdC1jYW5hcnkgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgaWdub3JpbmcuIgot
Ci0gICAgdGFyZ2V0X29wdGlvbnMgPSBjb3B5LmNvcHkob3B0aW9ucykKLSAgICBpZiBvcHRpb25z
LnRhcmdldF9wbGF0Zm9ybSA9PSAnY2hyb21pdW0nOgotICAgICAgICB0YXJnZXRfb3B0aW9ucy5j
aHJvbWl1bSA9IFRydWUKLSAgICBvcHRpb25zLnRvbGVyYW5jZSA9IDAKLQotICAgIHJldHVybiAo
b3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpCi0KLQotY2xhc3MgRGVidWdMb2dIYW5kbGVyKGxvZ2dp
bmcuSGFuZGxlcik6Ci0gICAgbnVtX2ZhaWx1cmVzID0gMAotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYpOgotICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKLSAgICAgICAgc2Vs
Zi5mb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihmbXQ9KCclKGFzY3RpbWUpcyAlKGZpbGVu
YW1lKXM6JShsaW5lbm8pLTNkICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICclKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJykpCi0gICAgICAgIHNlbGYu
c2V0Rm9ybWF0dGVyKHNlbGYuZm9ybWF0dGVyKQotCi0gICAgZGVmIGVtaXQoc2VsZiwgcmVjb3Jk
KToKLSAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklORk86Ci0gICAgICAgICAg
ICBzZWxmLm51bV9mYWlsdXJlcyArPSAxCi0gICAgICAgIHByaW50IHNlbGYuZm9ybWF0KHJlY29y
ZCkKLQotCi1jbGFzcyBOb3JtYWxMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6Ci0gICAgbGFz
dF9sZXZlbG5vID0gTm9uZQotICAgIG51bV9mYWlsdXJlcyA9IDAKLQotICAgIGRlZiBlbWl0KHNl
bGYsIHJlY29yZCk6Ci0gICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID4gbG9nZ2luZy5JTkZPOgot
ICAgICAgICAgICAgc2VsZi5udW1fZmFpbHVyZXMgKz0gMQotICAgICAgICBpZiBzZWxmLmxhc3Rf
bGV2ZWxubyAhPSByZWNvcmQubGV2ZWxubzoKLSAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAg
ICBzZWxmLmxhc3RfbGV2ZWxubyA9IHJlY29yZC5sZXZlbG5vCi0gICAgICAgIHByZWZpeCA9ICcn
Ci0gICAgICAgIG1zZyA9IHJlY29yZC5nZXRNZXNzYWdlKCkKLSAgICAgICAgaWYgcmVjb3JkLmxl
dmVsbm8gPiBsb2dnaW5nLklORk8gYW5kIG1zZzoKLSAgICAgICAgICAgIHByZWZpeCA9ICclczog
JyAlIHJlY29yZC5sZXZlbG5hbWUKLSAgICAgICAgcHJpbnQgJyVzJXMnICUgKHByZWZpeCwgbXNn
KQotCi0KLWRlZiBtYWluKGFyZ3MpOgotICAgICIiIkJvb3RzdHJhcCBmdW5jdGlvbiB0aGF0IHNl
dHMgdXAgdGhlIG9iamVjdCByZWZlcmVuY2VzIHdlIG5lZWQgYW5kIGNhbGxzIHJlYWxfbWFpbigp
LiIiIgotICAgIG9wdGlvbnMsIHRhcmdldF9vcHRpb25zID0gcGFyc2Vfb3B0aW9ucyhhcmdzKQot
Ci0gICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQotICAgIGxvZ2dlci5zZXRMZXZlbChs
b2dnaW5nLklORk8pCi0gICAgaWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAgICBsb2dfbGV2ZWwg
PSBsb2dnaW5nLkRFQlVHCi0gICAgICAgIGxvZ19oYW5kbGVyID0gRGVidWdMb2dIYW5kbGVyKCkK
LSAgICBlbHNlOgotICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KLSAgICAgICAgbG9n
X2hhbmRsZXIgPSBOb3JtYWxMb2dIYW5kbGVyKCkKLQotICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCkKLSAgICBsb2dnZXIuc2V0TGV2ZWwobG9nX2xldmVsKQotICAgIGxvZ2dlci5hZGRI
YW5kbGVyKGxvZ19oYW5kbGVyKQotCi0gICAgaG9zdCA9IEhvc3QoKQotICAgIGhvc3QuX2luaXRp
YWxpemVfc2NtKCkKLSAgICB0YXJnZXRfcG9ydF9vYmogPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQo
Tm9uZSwgdGFyZ2V0X29wdGlvbnMpCi0gICAgaG9zdF9wb3J0X29iaiA9IGdldF9ob3N0X3BvcnRf
b2JqZWN0KGhvc3QucG9ydF9mYWN0b3J5LCBvcHRpb25zKQotICAgIGlmIG5vdCBob3N0X3BvcnRf
b2JqIG9yIG5vdCB0YXJnZXRfcG9ydF9vYmo6Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICB1cmxf
ZmV0Y2hlciA9IHVybGZldGNoZXIuVXJsRmV0Y2hlcihob3N0LmZpbGVzeXN0ZW0pCi0KLSAgICAj
IFdlIHVzZSB0aGUgZGVmYXVsdCB6aXAgZmFjdG9yeSBtZXRob2QuCi0gICAgemlwX2ZhY3Rvcnkg
PSBOb25lCi0KLSAgICAjIEZJWE1FOiBTQ00gbW9kdWxlIGRvZXNuJ3QgaGFuZGxlIHBhdGhzIHRo
YXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBjaGVja291dF9yb290IGNvbnNpc3RlbnRseS4KLSAg
ICBob3N0X3BvcnRfb2JqLl9maWxlc3lzdGVtLmNoZGlyKGhvc3Quc2NtKCkuY2hlY2tvdXRfcm9v
dCkKLQotICAgIHJldF9jb2RlID0gcmVhbF9tYWluKGhvc3QsIG9wdGlvbnMsIHRhcmdldF9vcHRp
b25zLCBob3N0X3BvcnRfb2JqLCB0YXJnZXRfcG9ydF9vYmosIHVybF9mZXRjaGVyLCB6aXBfZmFj
dG9yeSkKLSAgICBpZiBub3QgcmV0X2NvZGUgYW5kIGxvZ19oYW5kbGVyLm51bV9mYWlsdXJlczoK
LSAgICAgICAgcmV0X2NvZGUgPSAxCi0gICAgcHJpbnQgJycKLSAgICBpZiByZXRfY29kZToKLSAg
ICAgICAgcHJpbnQgJ1JlYmFzZWxpbmluZyBmYWlsZWQuJwotICAgIGVsc2U6Ci0gICAgICAgIHBy
aW50ICdSZWJhc2VsaW5pbmcgc3VjY2VlZGVkLicKLSAgICByZXR1cm4gcmV0X2NvZGUKLQotCi1k
ZWYgcmVhbF9tYWluKGhvc3QsIG9wdGlvbnMsIHRhcmdldF9vcHRpb25zLCBob3N0X3BvcnRfb2Jq
LCB0YXJnZXRfcG9ydF9vYmosIHVybF9mZXRjaGVyLCB6aXBfZmFjdG9yeSk6Ci0gICAgIiIiTWFp
biBmdW5jdGlvbiB0byBwcm9kdWNlIG5ldyBiYXNlbGluZXMuIFRoZSBSZWJhc2VsaW5lciBvYmpl
Y3QgdXNlcyB0d28KLSAgICBkaWZmZXJlbnQgUG9ydCBvYmplY3RzIC0gb25lIHRvIHJlcHJlc2Vu
dCB0aGUgbWFjaGluZSB0aGUgb2JqZWN0IGlzIHJ1bm5pbmcKLSAgICBvbiwgYW5kIG9uZSB0byBy
ZXByZXNlbnQgdGhlIHBvcnQgd2hvc2UgZXhwZWN0YXRpb25zIGFyZSBiZWluZyB1cGRhdGVkLgot
ICAgIEUuZy4sIHlvdSBjYW4gcnVuIHRoZSBzY3JpcHQgb24gYSBtYWMgYW5kIHJlYmFzZWxpbmUg
dGhlICd3aW4nIHBvcnQuCi0KLSAgICBBcmdzOgotICAgICAgICBob3N0OiBIb3N0IG9iamVjdAot
ICAgICAgICBvcHRpb25zOiBjb21tYW5kLWxpbmUgYXJndW1lbnQgdXNlZCBmb3IgdGhlIGhvc3Rf
cG9ydF9vYmogKHNlZSBiZWxvdykKLSAgICAgICAgdGFyZ2V0X29wdGlvbnM6IGNvbW1hbmRfbGlu
ZSBhcmd1bWVudCB1c2VkIGZvciB0aGUgdGFyZ2V0X3BvcnRfb2JqLgotICAgICAgICAgICAgVGhp
cyBvYmplY3QgbWF5IGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHZhbHVlcyB0aGFuIHxvcHRpb25z
fC4KLSAgICAgICAgaG9zdF9wb3J0X29iajogYSBQb3J0IG9iamVjdCBmb3IgdGhlIHBsYXRmb3Jt
IHRoZSBzY3JpcHQgaXMgcnVubmluZwotICAgICAgICAgICAgb24uIFRoaXMgaXMgdXNlZCB0byBw
cm9kdWNlIGltYWdlIGFuZCB0ZXh0IGRpZmZzLCBtb3N0bHksIGFuZAotICAgICAgICAgICAgaXMg
dXN1YWxseSBhY3F1aXJlZCBmcm9tIGdldF9ob3N0X3BvcnRfb2JqKCkuCi0gICAgICAgIHRhcmdl
dF9wb3J0X29iajogYSBQb3J0IG9iaiByZXByZXNlbnRpbmcgdGhlIHBvcnQgZ2V0dGluZyByZWJh
c2VsaW5lZC4KLSAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB0byBmaW5kIHRoZSBleHBlY3RhdGlv
bnMgZmlsZSwgdGhlIGJhc2VsaW5lIHBhdGhzLAotICAgICAgICAgICAgZXRjLgotICAgICAgICB1
cmxfZmV0Y2hlcjogb2JqZWN0IHVzZWQgdG8gZG93bmxvYWQgdGhlIGJ1aWxkIGFyY2hpdmVzIGZy
b20gdGhlIGJvdHMKLSAgICAgICAgemlwX2ZhY3Rvcnk6IGZhY3RvcnkgZnVuY3Rpb24gdXNlZCB0
byBjcmVhdGUgemlwIGZpbGUgb2JqZWN0cyBmb3IKLSAgICAgICAgICAgIHRoZSBhcmNoaXZlcy4K
LSAgICAiIiIKLSAgICBvcHRpb25zLmh0bWxfZGlyZWN0b3J5ID0gc2V0dXBfaHRtbF9kaXJlY3Rv
cnkoaG9zdF9wb3J0X29iai5fZmlsZXN5c3RlbSwgb3B0aW9ucy5odG1sX2RpcmVjdG9yeSkKLSAg
ICBhbGxfcGxhdGZvcm1zID0gdGFyZ2V0X3BvcnRfb2JqLmFsbF9iYXNlbGluZV92YXJpYW50cygp
Ci0gICAgaWYgb3B0aW9ucy5wbGF0Zm9ybXM6Ci0gICAgICAgIGJhaWwgPSBGYWxzZQotICAgICAg
ICBmb3IgcGxhdGZvcm0gaW4gb3B0aW9ucy5wbGF0Zm9ybXM6Ci0gICAgICAgICAgICBpZiBub3Qg
cGxhdGZvcm0gaW4gYWxsX3BsYXRmb3JtczoKLSAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdJ
bnZhbGlkIHBsYXRmb3JtOiAiJXMiJyAlIChwbGF0Zm9ybSkpCi0gICAgICAgICAgICAgICAgYmFp
bCA9IFRydWUKLSAgICAgICAgaWYgYmFpbDoKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAg
IHJlYmFzZWxpbmVfcGxhdGZvcm1zID0gb3B0aW9ucy5wbGF0Zm9ybXMKLSAgICBlbHNlOgotICAg
ICAgICByZWJhc2VsaW5lX3BsYXRmb3JtcyA9IGFsbF9wbGF0Zm9ybXMKLQotICAgICMgRklYTUU6
IFRoZXNlIGxvZyBtZXNzYWdlcyB3aWxsIGJlIHdyb25nIGlmIHBvcnRzIHN0b3JlIGJhc2VsaW5l
cyBvdXRzaWRlCi0gICAgIyBvZiBsYXlvdXRfdGVzdHNfZGlyKCksIGJ1dCB0aGUgY29kZSBzaG91
bGQgd29yayBjb3JyZWN0bHkuCi0gICAgbGF5b3V0X3Rlc3RzX2RpciA9IHRhcmdldF9wb3J0X29i
ai5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICBleHBlY3RhdGlvbnNfcGF0aCA9IHRhcmdldF9wb3J0
X29iai5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKQotICAgIF9sb2cuaW5mbygnVXNp
bmcgJXMnICUgbGF5b3V0X3Rlc3RzX2RpcikKLSAgICBfbG9nLmluZm8oJyAgYW5kICVzJyAlIGV4
cGVjdGF0aW9uc19wYXRoKQotCi0gICAgcmViYXNlbGluZWRfdGVzdHMgPSBzZXQoKQotICAgIGxv
Z2dlZF9iZWZvcmUgPSBGYWxzZQotICAgIGZvciBwbGF0Zm9ybSBpbiByZWJhc2VsaW5lX3BsYXRm
b3JtczoKLSAgICAgICAgcmViYXNlbGluZXIgPSBSZWJhc2VsaW5lcihob3N0LCBob3N0X3BvcnRf
b2JqLCB0YXJnZXRfcG9ydF9vYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGxhdGZvcm0sIG9wdGlvbnMsIHVybF9mZXRjaGVyLCB6aXBfZmFjdG9yeSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2dnZWRfYmVmb3JlKQotCi0gICAgICAgIF9sb2cuZGVi
dWcoJycpCi0gICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5lIHN0YXJ0ZWQnLCBw
bGF0Zm9ybSkKLSAgICAgICAgaWYgcmViYXNlbGluZXIucnVuKCk6Ci0gICAgICAgICAgICBsb2df
ZGFzaGVkX3N0cmluZygnUmViYXNlbGluZSBkb25lJywgcGxhdGZvcm0pCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluZSBmYWlsZWQnLCBwbGF0
Zm9ybSkKLQotICAgICAgICByZWJhc2VsaW5lZF90ZXN0cyB8PSBzZXQocmViYXNlbGluZXIuZ2V0
X3JlYmFzZWxpbmVkX3Rlc3RzKCkpCi0gICAgICAgIGxvZ2dlZF9iZWZvcmUgPSByZWJhc2VsaW5l
ci5kaWRfbG9nCi0KLSAgICBpZiByZWJhc2VsaW5lZF90ZXN0czoKLSAgICAgICAgcmViYXNlbGlu
ZXIucmVtb3ZlX3JlYmFzZWxpbmluZ19leHBlY3RhdGlvbnMocmViYXNlbGluZWRfdGVzdHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMuYmFja3VwKQotCi0gICAgX2xvZy5kZWJ1ZygnJykKLSAgICBsb2dfZGFzaGVkX3N0cmluZygn
UmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJpc29uIHN0YXJ0ZWQnKQotICAgIGh0bWxfZ2VuZXJh
dG9yID0gSHRtbEdlbmVyYXRvcihob3N0LCBob3N0X3BvcnRfb2JqLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcG9ydF9vYmosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlYmFzZWxpbmVfcGxhdGZvcm1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWJhc2VsaW5lZF90ZXN0cykKLSAgICBodG1sX2dlbmVyYXRvci5nZW5lcmF0ZV9odG1s
KCkKLSAgICBpZiBub3Qgb3B0aW9ucy5xdWlldDoKLSAgICAgICAgaHRtbF9nZW5lcmF0b3Iuc2hv
d19odG1sKCkKLSAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluaW5nIHJlc3VsdCBjb21w
YXJpc29uIGRvbmUnKQotCi0gICAgcmV0dXJuIDAKLQotCi1pZiAnX19tYWluX18nID09IF9fbmFt
ZV9fOgotICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRf
dGVzdHNfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RvX2JlX21vdmVkL3Jl
YmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNDRkY2RmMmZmNWM5MWY4ODM2NzVmMjYxOTAwMDNlOTc2NWFiNmFl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVz
dHNfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzODcgKzAsMCBAQAotIyEvdXNyL2Jp
bi9weXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0
cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJVbml0IHRlc3RzIGZvciByZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weS4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20g
d2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgdXJsZmV0Y2hlcl9tb2NrCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bSBpbXBvcnQgemlwZmlsZXNldF9tb2NrCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1w
b3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUg
aW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMgaW1wb3J0IHBvcnQKLWZyb20gd2Via2l0cHkudG9fYmVfbW92ZWQgaW1wb3J0IHJlYmFzZWxp
bmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzCi0KLQotY2xhc3MgTW9ja1BvcnQob2JqZWN0KToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfZGlmZl9leGlzdHMpOgotICAgICAgICBzZWxmLmlt
YWdlX2RpZmZfZXhpc3RzID0gaW1hZ2VfZGlmZl9leGlzdHMKLQotICAgIGRlZiBjaGVja19pbWFn
ZV9kaWZmKHNlbGYsIG92ZXJyaWRlX3N0ZXAsIGxvZ2dpbmcpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5pbWFnZV9kaWZmX2V4aXN0cwotCi0KLWNsYXNzIE1vY2tQb3J0RmFjdG9yeShvYmplY3QpOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWdfZXhwZWN0YXRpb25zKToKLSAgICAgICAgc2Vs
Zi5jb25maWdfZXhwZWN0YXRpb25zID0gY29uZmlnX2V4cGVjdGF0aW9ucwotCi0gICAgZGVmIGdl
dChzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKLSAgICAgICAgcmV0dXJuIE1v
Y2tQb3J0KHNlbGYuY29uZmlnX2V4cGVjdGF0aW9uc1tvcHRpb25zLmNvbmZpZ3VyYXRpb25dKQot
Ci0KLUFSQ0hJVkVfVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3QvbGF5b3V0X3Rlc3RfcmVzdWx0cycK
LQotCi1kZWYgdGVzdF9vcHRpb25zKCk6Ci0gICAgcmV0dXJuIE1vY2tPcHRpb25zKGNvbmZpZ3Vy
YXRpb249Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwPUZhbHNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT0nL3RtcCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfdXJsPUFSQ0hJVkVfVVJM
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9hcmNoaXZlX3VybD1Ob25l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPUZhbHNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBxdWlldD1GYWxzZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGxhdGZvcm1zPU5vbmUpCi0KLQotZGVmIHRlc3RfaG9zdF9wb3J0X2Fu
ZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucyk6Ci0gICAgaG9zdCA9IE1vY2tIb3N0
KCkKLSAgICBob3N0X3BvcnRfb2JqID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0Jywgb3B0
aW9ucykKLSAgICBleHBlY3RhdGlvbnNfcGF0aCA9IGhvc3RfcG9ydF9vYmoucGF0aF90b190ZXN0
X2V4cGVjdGF0aW9uc19maWxlKCkKLSAgICBob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxl
KGV4cGVjdGF0aW9uc19wYXRoLCBleHBlY3RhdGlvbnMpCi0gICAgcmV0dXJuIChob3N0LCBob3N0
X3BvcnRfb2JqLCBob3N0LmZpbGVzeXN0ZW0pCi0KLQotZGVmIHRlc3RfdXJsX2ZldGNoZXIoZmls
ZXN5c3RlbSk6Ci0gICAgdXJscyA9IHsKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9N
YWMxMF82Lyc6ICc8YSBocmVmPSI0LyI+JywKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtp
dF9NYWMxMF81Lyc6ICc8YSBocmVmPSIxLyI+PGEgaHJlZj0iMi8iPicsCi0gICAgICAgIEFSQ0hJ
VkVfVVJMICsgJy9XZWJraXRfV2luNy8nOiAnPGEgaHJlZj0iMS8iPicsCi0gICAgICAgIEFSQ0hJ
VkVfVVJMICsgJy9XZWJraXRfVmlzdGEvJzogJzxhIGhyZWY9IjEvIj4nLAotICAgICAgICBBUkNI
SVZFX1VSTCArICcvV2Via2l0X1dpbi8nOiAnPGEgaHJlZj0iMS8iPicsCi0gICAgICAgIEFSQ0hJ
VkVfVVJMICsgJy9XZWJraXRfTGludXgvJzogJzxhIGhyZWY9IjEvIj4nLAotICAgIH0KLSAgICBy
ZXR1cm4gdXJsZmV0Y2hlcl9tb2NrLm1ha2VfZmV0Y2hlcl9jbHModXJscykoZmlsZXN5c3RlbSkK
LQotCi1kZWYgdGVzdF96aXBfZmFjdG9yeSgpOgotICAgIHppcGhhc2hlcyA9IHsKLSAgICAgICAg
QVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81LzIvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAn
OiB7Ci0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9p
bWFnZS1hY3R1YWwudHh0JzogJ25ldy1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10
ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ25l
dy1pbWFnZS1jaGVja3N1bScsCi0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWls
dXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ25ldy1pbWFnZS1wbmcnLAotICAgICAg
ICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tz
dW0tYWN0dWFsLnR4dCc6ICdwbmctY29tbWVudC10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10
ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tYWN0dWFsLmNoZWNr
c3VtJzogJzAxMjM0NTY3ODknLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFp
bHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tYWN0dWFsLnBuZyc6ICd0RVh0Y2hlY2tzdW1c
eDAwMDEyMzQ1Njc4OScsCi0gICAgICAgIH0sCi0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJr
aXRfTWFjMTBfNi80L2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xh
eW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICdu
ZXctaW1hZ2UtdHh0JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICduZXctaW1hZ2UtY2hlY2tzdW0nLAot
ICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2Ut
YWN0dWFsLnBuZyc6ICduZXctaW1hZ2UtcG5nJywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElW
RV9VUkwgKyAnL1dlYmtpdF9WaXN0YS8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewotICAg
ICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0
dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1
bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2Ut
Y2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhw
ZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5nJywKLSAgICAgICAgfSwKLSAg
ICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9XaW43LzEvbGF5b3V0LXRlc3QtcmVzdWx0cy56
aXAnOiB7Ci0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3Rl
ZC9pbWFnZS1hY3R1YWwudHh0JzogJ3dpbi1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xheW91
dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzog
J3dpbi1pbWFnZS1jaGVja3N1bScsCi0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9m
YWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ3dpbi1pbWFnZS1wbmcnLAotICAg
ICAgICB9LAotICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dpbi8xL2xheW91dC10ZXN0
LXJlc3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKLSAgICAgICAg
ICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5j
aGVja3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0
LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2Ut
cG5nJywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9MaW51eC8x
L2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJl
c3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0
JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2lt
YWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAgICAg
J2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6
ICd3aW4taW1hZ2UtcG5nJywKLSAgICAgICAgfSwKLSAgICB9Ci0gICAgcmV0dXJuIHppcGZpbGVz
ZXRfbW9jay5tYWtlX2ZhY3RvcnkoemlwaGFzaGVzKQotCi0KLWRlZiB0ZXN0X2FyY2hpdmUob3Jp
Z19hcmNoaXZlX2RpY3QpOgotICAgIG5ld19hcmNoaXZlX2RpY3QgPSB7fQotICAgIGZvciBwbGF0
Zm9ybSwgZGlybmFtZSBpbiBvcmlnX2FyY2hpdmVfZGljdC5pdGVyaXRlbXMoKToKLSAgICAgICAg
IyBUaGlzIGlzIGEgZ2lhbnQgaGFjay4gOigKLSAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5y
ZXBsYWNlKCdjaHJvbWl1bScsICd0ZXN0JykKLSAgICAgICAgbmV3X2FyY2hpdmVfZGljdFtwbGF0
Zm9ybV0gPSBkaXJuYW1lCi0gICAgcmV0dXJuIG5ld19hcmNoaXZlX2RpY3QKLQotCi1jbGFzcyBU
ZXN0R2V0SG9zdFBvcnRPYmplY3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBhc3NlcnRf
cmVzdWx0KHNlbGYsIHJlbGVhc2VfcHJlc2VudCwgZGVidWdfcHJlc2VudCwgdmFsaWRfcG9ydF9v
YmopOgotICAgICAgICAjIFRlc3RzIHdoZXRoZXIgd2UgZ2V0IGEgdmFsaWQgcG9ydCBvYmplY3Qg
cmV0dXJuZWQgd2hlbiB3ZSBjbGFpbQotICAgICAgICAjIHRoYXQgSW1hZ2UgZGlmZiBpcyAob3Ig
aXNuJ3QpIHByZXNlbnQgaW4gdGhlIHR3byBjb25maWdzLgotICAgICAgICBwb3J0X2ZhY3Rvcnkg
PSBNb2NrUG9ydEZhY3RvcnkoeydSZWxlYXNlJzogcmVsZWFzZV9wcmVzZW50LCAnRGVidWcnOiBk
ZWJ1Z19wcmVzZW50fSkKLSAgICAgICAgb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNvbmZpZ3VyYXRp
b249Tm9uZSwgaHRtbF9kaXJlY3Rvcnk9Jy90bXAnKQotICAgICAgICBwb3J0X29iaiA9IHJlYmFz
ZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLmdldF9ob3N0X3BvcnRfb2JqZWN0KHBvcnRfZmFj
dG9yeSwgb3B0aW9ucykKLSAgICAgICAgaWYgdmFsaWRfcG9ydF9vYmo6Ci0gICAgICAgICAgICBz
ZWxmLmFzc2VydE5vdEVxdWFsKHBvcnRfb2JqLCBOb25lKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0X29iaiwgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2dl
dF9ob3N0X3BvcnRfb2JqZWN0KHNlbGYpOgotICAgICAgICAjIFRlc3Qgd2hldGhlciB3ZSBnZXQg
YSB2YWxpZCBwb3J0IG9iamVjdCBiYWNrIGZvciB0aGUgZm91cgotICAgICAgICAjIHBvc3NpYmxl
IGNhc2VzIG9mIGhhdmluZyBJbWFnZURpZmZzIGJ1aWx0LiBJdCBzaG91bGQgd29yayB3aGVuCi0g
ICAgICAgICMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGJpbmFyeSBwcmVzZW50LgotICAgICAgICBz
ZWxmLmFzc2VydF9yZXN1bHQoRmFsc2UsIEZhbHNlLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfcmVzdWx0KFRydWUsIEZhbHNlLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF9yZXN1bHQo
RmFsc2UsIFRydWUsIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3Jlc3VsdChUcnVlLCBUcnVl
LCBUcnVlKQotCi0KLWNsYXNzIFRlc3RPcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBk
ZWYgdGVzdF9wYXJzZV9vcHRpb25zKHNlbGYpOgotICAgICAgICAob3B0aW9ucywgdGFyZ2V0X29w
dGlvbnMpID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucGFyc2Vfb3B0aW9ucyhb
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmdldF9vcHRpb25zLmNocm9taXVtKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMudG9sZXJhbmNlLCAwKQotCi0gICAgICAgIChv
cHRpb25zLCB0YXJnZXRfb3B0aW9ucykgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0
cy5wYXJzZV9vcHRpb25zKFsnLS10YXJnZXQtcGxhdGZvcm0nLCAncXQnXSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShoYXNhdHRyKHRhcmdldF9vcHRpb25zLCAnY2hyb21pdW0nKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLnRvbGVyYW5jZSwgMCkKLQotCi1jbGFzcyBUZXN0
UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAg
ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19vcmlnX2FyY2hpdmUnKToKLSAgICAgICAgICAg
IHNlbGYuX29yaWdfYXJjaGl2ZSA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLkFS
Q0hJVkVfRElSX05BTUVfRElDVAotICAgICAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJr
aXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUID0gdGVzdF9hcmNoaXZlKHNlbGYuX29yaWdf
YXJjaGl2ZSkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgcmViYXNlbGluZV9j
aHJvbWl1bV93ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUID0gc2VsZi5fb3JpZ19h
cmNoaXZlCi0KLSAgICBkZWYgbWFrZV9yZWJhc2VsaW5lcihzZWxmLCBleHBlY3RhdGlvbnMpOgot
ICAgICAgICBvcHRpb25zID0gdGVzdF9vcHRpb25zKCkKLSAgICAgICAgaG9zdCwgaG9zdF9wb3J0
X29iaiwgZmlsZXN5c3RlbSA9IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMs
IGV4cGVjdGF0aW9ucykKLQotICAgICAgICB0YXJnZXRfb3B0aW9ucyA9IG9wdGlvbnMKLSAgICAg
ICAgdGFyZ2V0X3BvcnRfb2JqID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0JywgdGFyZ2V0
X29wdGlvbnMpCi0gICAgICAgIHBsYXRmb3JtID0gdGFyZ2V0X3BvcnRfb2JqLm5hbWUoKQotCi0g
ICAgICAgIHVybF9mZXRjaGVyID0gdGVzdF91cmxfZmV0Y2hlcihmaWxlc3lzdGVtKQotICAgICAg
ICB6aXBfZmFjdG9yeSA9IHRlc3RfemlwX2ZhY3RvcnkoKQotCi0gICAgICAgICMgRklYTUU6IFND
TSBtb2R1bGUgZG9lc24ndCBoYW5kbGUgcGF0aHMgdGhhdCBhcmVuJ3QgcmVsYXRpdmUgdG8gdGhl
IGNoZWNrb3V0X3Jvb3QgY29uc2lzdGVudGx5LgotICAgICAgICBmaWxlc3lzdGVtLmNoZGlyKGZp
bGVzeXN0ZW0uZGlybmFtZShob3N0X3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKSkpCi0KLSAg
ICAgICAgcmViYXNlbGluZXIgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5SZWJh
c2VsaW5lcihob3N0LCBob3N0X3BvcnRfb2JqLAotICAgICAgICAgICAgdGFyZ2V0X3BvcnRfb2Jq
LCBwbGF0Zm9ybSwgb3B0aW9ucywgdXJsX2ZldGNoZXIsIHppcF9mYWN0b3J5KQotICAgICAgICBy
ZXR1cm4gcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0KLQotICAgIGRlZiB0ZXN0X25vb3Aoc2VsZik6
Ci0gICAgICAgICMgdGhpcyBtZXRob2QgdGVzdHMgdGhhdCB3YXMgY2FuIGF0IGxlYXN0IGluc3Rh
bnRpYXRlIGFuIG9iamVjdCwgZXZlbgotICAgICAgICAjIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8g
ZG8uCi0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxp
bmVyKCIiKQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxKQotCi0gICAgZGVmIHRlc3RfcmVi
YXNlbGluaW5nX3Rlc3RzKHNlbGYpOgotICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9
IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKLSAgICAgICAgICAgICJCVUdYIFJFQkFTRUxJTkUgTUFD
IDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdFIikKLSAgICAgICAgY29tcGls
ZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2NvbXBpbGVfcmViYXNlbGluaW5nX3Rlc3RzKCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBpbGVfc3VjY2VzcykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZXQoWydmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sJ10pLCByZWJhc2VsaW5l
ci5fcmViYXNlbGluaW5nX3Rlc3RzKQotCi0gICAgZGVmIHRlc3RfcmViYXNlbGluaW5nX3Rlc3Rz
X3Nob3VsZF9pZ25vcmVfcmVmdGVzdHMoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxl
c3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJVR1ggUkVCQVNF
TElORSA6IGZhaWx1cmVzL2V4cGVjdGVkL3JlZnRlc3QuaHRtbCA9IElNQUdFIikKLSAgICAgICAg
Y29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2NvbXBpbGVfcmViYXNlbGluaW5nX3Rlc3Rz
KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb21waWxlX3N1Y2Nlc3MpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UocmViYXNlbGluZXIuX3JlYmFzZWxpbmluZ190ZXN0cykKLQotICAgIGRl
ZiB0ZXN0X29uZV9wbGF0Zm9ybShzZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0
ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCi0gICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5F
IE1BQyA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFHRSIpCi0KLSAgICAgICAg
cmViYXNlbGluZXIucnVuKCkKLSAgICAgICAgbGF5b3V0X3Rlc3RfZGlyID0gcmViYXNlbGluZXIu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCi0gICAgICAgICMgV2UgZXhwZWN0IHRvIGhhdmUgd3Jp
dHRlbiAxMyBmaWxlcyBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhpcyByZWJhc2VsaW5lOgotICAgICAg
ICAjICopIDMgZmlsZXMgaW4gL19faW1fdG1wIGZvciB0aGUgZXh0cmFjdGVkIGFyY2hpdmUgbWVt
YmVycwotICAgICAgICAjICopIDMgbmV3IGJhc2VsaW5lcyB1bmRlciBsYXlvdXRfdGVzdF9kaXIK
LSAgICAgICAgIyAqKSA0IGZpbGVzIGluIC90bXAgZm9yIHRoZSBuZXcgYW5kIG9sZCBiYXNlbGlu
ZXMgaW4gdGhlIHJlc3VsdCBmaWxlCi0gICAgICAgICMgICAgKC17b2xkLG5ld30ue3R4dCxwbmd9
Ci0gICAgICAgICMgKikgMSB0ZXh0IGRpZmYgaW4gL3RtcCBmb3IgdGhlIHJlc3VsdCBmaWxlICgt
ZGlmZi50eHQpLgotICAgICAgICAjICopIDEgaW1hZ2UgZGlmZiBpbiAvdG1wIGZvciB0aGUgcmVz
dWx0IGZpbGUgKC1kaWZmLnBuZykuCi0gICAgICAgICMgKikgMSB1cGRhdGVkIHRlc3RfZXhwZWN0
YXRpb25zIGZpbGUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0
dGVuX2ZpbGVzKSwgMTMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxl
c1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMv
ZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQuY2hlY2tzdW0nXSwgJ25ldy1pbWFnZS1jaGVja3N1bScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9k
aXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2Ut
ZXhwZWN0ZWQucG5nJ10sICduZXctaW1hZ2UtcG5nJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMt
bGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC50eHQnXSwgJ25ldy1pbWFn
ZS10eHQnKQotCi0gICAgZGVmIHRlc3RfYWxsX3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAgcmVi
YXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCi0gICAgICAgICAg
ICAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdF
IikKLSAgICAgICAgbGF5b3V0X3Rlc3RfZGlyID0gcmViYXNlbGluZXIuX3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpCi0gICAgICAgIHJlYmFzZWxpbmVyLnJ1bigpCi0gICAgICAgICMgU2VlIGNvbW1l
bnQgaW4gdGVzdF9vbmVfcGxhdGZvcm0gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSAxMyB3cml0
dGVuIHRlc3RzLgotICAgICAgICAjIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmViYXNlbGlu
ZSBpcyBtYXJrZWQgZm9yIGFsbCBwbGF0Zm9ybXMsIGVhY2gKLSAgICAgICAgIyByZWJhc2VsaW5l
ciBvbmx5IGV2ZXIgZG9lcyBvbmUuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVz
eXN0ZW0ud3JpdHRlbl9maWxlcyksIDEzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVz
eXN0ZW0uZmlsZXNbbGF5b3V0X3Rlc3RfZGlyICsgJy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJk
L2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLmNoZWNrc3VtJ10sICduZXctaW1hZ2Ut
Y2hlY2tzdW0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbbGF5
b3V0X3Rlc3RfZGlyICsgJy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVj
dGVkL2ltYWdlLWV4cGVjdGVkLnBuZyddLCAnbmV3LWltYWdlLXBuZycpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3Jt
L3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQudHh0J10s
ICduZXctaW1hZ2UtdHh0JykKLQotICAgIGRlZiB0ZXN0X3BuZ19maWxlX3dpdGhfY29tbWVudChz
ZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNl
bGluZXIoCi0gICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIE1BQyA6IGZhaWx1cmVzL2V4cGVj
dGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwgPSBJTUFHRSIpCi0gICAgICAgIGxheW91dF90ZXN0X2Rp
ciA9IHJlYmFzZWxpbmVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQotICAgICAgICBjb21waWxl
X3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoY29tcGlsZV9zdWNjZXNzKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNldChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnXSksIHJl
YmFzZWxpbmVyLl9yZWJhc2VsaW5pbmdfdGVzdHMpCi0gICAgICAgIHJlYmFzZWxpbmVyLnJ1bigp
Ci0gICAgICAgICMgVGhlcmUgaXMgb25lIGxlc3MgZmlsZSB3cml0dGVuIHRoYW4gfHRlc3Rfb25l
X3BsYXRmb3JtfCBiZWNhdXNlIHdlIG9ubHkKLSAgICAgICAgIyB3cml0ZSAyIGV4cGVjdGF0aW9u
cyAodGhlIHBuZyBhbmQgdGhlIHR4dCBmaWxlKS4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
ZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFj
LWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQucG5nJ10s
ICd0RVh0Y2hlY2tzdW1ceDAwMDEyMzQ1Njc4OScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxl
b3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQudHh0J10sICdw
bmctY29tbWVudC10eHQnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVzeXN0ZW0uZmls
ZXMuZ2V0KGxheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWls
dXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1bScsIE5vbmUpKQot
Ci0gICAgZGVmIHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21tZW50X3JlbW92ZV9vbGRfY2hlY2tzdW0o
c2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFz
ZWxpbmVyKAotICAgICAgICAgICAgIkJVR1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJlcy9leHBl
Y3RlZC9pbWFnZV9jaGVja3N1bS5odG1sID0gSU1BR0UiKQotICAgICAgICBsYXlvdXRfdGVzdF9k
aXIgPSByZWJhc2VsaW5lci5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgZmlsZXN5
c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQv
ZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQucG5nJ10gPSAnb2xkJwot
ICAgICAgICBmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVz
dC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5j
aGVja3N1bSddID0gJ29sZCcKLSAgICAgICAgZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9k
aXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2Vf
Y2hlY2tzdW0tZXhwZWN0ZWQudHh0J10gPSAnb2xkJwotCi0gICAgICAgIGNvbXBpbGVfc3VjY2Vz
cyA9IHJlYmFzZWxpbmVyLl9jb21waWxlX3JlYmFzZWxpbmluZ190ZXN0cygpCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShjb21waWxlX3N1Y2Nlc3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2V0KFsnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0uaHRtbCddKSwgcmViYXNlbGlu
ZXIuX3JlYmFzZWxpbmluZ190ZXN0cykKLSAgICAgICAgcmViYXNlbGluZXIucnVuKCkKLSAgICAg
ICAgIyBUaGVyZSBpcyBvbmUgbW9yZSBmaWxlIHdyaXR0ZW4gdGhhbiB8dGVzdF9wbmdfZmlsZV93
aXRoX2NvbW1lbnRfcmVtb3ZlX29sZF9jaGVja3N1bXwKLSAgICAgICAgIyBiZWNhdXNlIHdlIGFs
c28gZGVsZXRlIHRoZSBvbGQgY2hlY2tzdW0uCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVu
KGZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcyksIDEzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGZpbGVzeXN0ZW0uZmlsZXNbbGF5b3V0X3Rlc3RfZGlyICsgJy9wbGF0Zm9ybS90ZXN0LW1hYy1s
ZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnBuZyddLCAn
dEVYdGNoZWNrc3VtXHgwMDAxMjM0NTY3ODknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZp
bGVzeXN0ZW0uZmlsZXNbbGF5b3V0X3Rlc3RfZGlyICsgJy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9w
YXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCddLCAncG5n
LWNvbW1lbnQtdHh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
LmdldChsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQuY2hlY2tzdW0nLCBOb25lKSwgTm9u
ZSkKLQotICAgIGRlZiB0ZXN0X3BuZ19maWxlX3dpdGhfY29tbWVudF9hc19kdXBsaWNhdGUoc2Vs
Zik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxp
bmVyKAotICAgICAgICAgICAgIkJVR1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJlcy9leHBlY3Rl
ZC9pbWFnZV9jaGVja3N1bS5odG1sID0gSU1BR0UiKQotICAgICAgICBsYXlvdXRfdGVzdF9kaXIg
PSByZWJhc2VsaW5lci5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgZmlsZXN5c3Rl
bS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLXNub3dsZW9wYXJk
L2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnBuZyddID0gJ3RFWHRj
aGVja3N1bVx4MDAwMTIzNDU2Nzg5JwotICAgICAgICBmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90
ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMtc25vd2xlb3BhcmQvZmFpbHVyZXMvZXhwZWN0
ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQudHh0J10gPSAncG5nLWNvbW1lbnQtdHh0JwotCi0g
ICAgICAgIGNvbXBpbGVfc3VjY2VzcyA9IHJlYmFzZWxpbmVyLl9jb21waWxlX3JlYmFzZWxpbmlu
Z190ZXN0cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21waWxlX3N1Y2Nlc3MpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFsnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tz
dW0uaHRtbCddKSwgcmViYXNlbGluZXIuX3JlYmFzZWxpbmluZ190ZXN0cykKLSAgICAgICAgcmVi
YXNlbGluZXIucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
LmdldChsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQucG5nJywgTm9uZSksIE5vbmUpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlcy5nZXQobGF5b3V0X3Rlc3Rf
ZGlyICsgJy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdl
X2NoZWNrc3VtLWV4cGVjdGVkLnR4dCcsIE5vbmUpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXMuZ2V0KGxheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0v
dGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3Rl
ZC5jaGVja3N1bScsIE5vbmUpLCBOb25lKQotCi0gICAgZGVmIHRlc3RfZGlmZl9iYXNlbGluZXNf
dHh0KHNlbGYpOgotICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9y
ZWJhc2VsaW5lcigiIikKLSAgICAgICAgcG9ydCA9IHJlYmFzZWxpbmVyLl9wb3J0Ci0gICAgICAg
IG91dHB1dCA9IHBvcnQuZXhwZWN0ZWRfdGV4dCgncGFzc2VzL3RleHQuaHRtbCcpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UocmViYXNlbGluZXIuX2RpZmZfYmFzZWxpbmVzKG91dHB1dCwgb3V0
cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc19pbWFnZT1GYWxzZSkpCi0KLSAgICBkZWYgdGVzdF9kaWZmX2Jhc2VsaW5lc19wbmcoc2Vs
Zik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxp
bmVyKCcnKQotICAgICAgICBwb3J0ID0gcmViYXNlbGluZXIuX3BvcnQKLSAgICAgICAgaW1hZ2Ug
PSBwb3J0LmV4cGVjdGVkX2ltYWdlKCdwYXNzZXMvaW1hZ2UuaHRtbCcpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UocmViYXNlbGluZXIuX2RpZmZfYmFzZWxpbmVzKGltYWdlLCBpbWFnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1h
Z2U9VHJ1ZSkpCi0KLQotY2xhc3MgVGVzdFJlYWxNYWluKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAg
ICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfb3JpZ19h
cmNoaXZlJyk6Ci0gICAgICAgICAgICBzZWxmLl9vcmlnX2FyY2hpdmUgPSByZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5BUkNISVZFX0RJUl9OQU1FX0RJQ1QKLSAgICAgICAgICAgIHJl
YmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLkFSQ0hJVkVfRElSX05BTUVfRElDVCA9IHRl
c3RfYXJjaGl2ZShzZWxmLl9vcmlnX2FyY2hpdmUpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6
Ci0gICAgICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLkFSQ0hJVkVfRElSX05B
TUVfRElDVCA9IHNlbGYuX29yaWdfYXJjaGl2ZQotCi0gICAgZGVmIHRlc3RfYWxsX3BsYXRmb3Jt
cyhzZWxmKToKLSAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVR1ggUkVCQVNFTElORSA6IGZhaWx1
cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFHRSIKLQotICAgICAgICBvcHRpb25zID0gdGVz
dF9vcHRpb25zKCkKLSAgICAgICAgaG9zdCwgaG9zdF9wb3J0X29iaiwgZmlsZXN5c3RlbSA9IHRl
c3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykKLSAgICAg
ICAgdXJsX2ZldGNoZXIgPSB0ZXN0X3VybF9mZXRjaGVyKGZpbGVzeXN0ZW0pCi0gICAgICAgIHpp
cF9mYWN0b3J5ID0gdGVzdF96aXBfZmFjdG9yeSgpCi0KLSAgICAgICAgIyBGSVhNRTogU0NNIG1v
ZHVsZSBkb2Vzbid0IGhhbmRsZSBwYXRocyB0aGF0IGFyZW4ndCByZWxhdGl2ZSB0byB0aGUgY2hl
Y2tvdXRfcm9vdCBjb25zaXN0ZW50bHkuCi0gICAgICAgIGZpbGVzeXN0ZW0uY2hkaXIoZmlsZXN5
c3RlbS5kaXJuYW1lKGhvc3RfcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpKSkKLQotICAgICAg
ICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAgIG9jLmNhcHR1cmVf
b3V0cHV0KCkKLSAgICAgICAgcmVzID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMu
cmVhbF9tYWluKGhvc3QsIG9wdGlvbnMsIG9wdGlvbnMsCi0gICAgICAgICAgICBob3N0X3BvcnRf
b2JqLCBob3N0X3BvcnRfb2JqLCB1cmxfZmV0Y2hlciwgemlwX2ZhY3RvcnkpCi0gICAgICAgIG9j
LnJlc3RvcmVfb3V0cHV0KCkKLQotICAgICAgICAjIFdlIGV4cGVjdCB0byBoYXZlIHdyaXR0ZW4g
MzggZmlsZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmViYXNlbGluZToKLSAgICAgICAgIyAq
KSA2KjMgZmlsZXMgaW4gL19faW1fdG1wLyBmb3IgdGhlIGFyY2hpdmVkIG1lbWJlcnMgb2YgdGhl
IDYgcG9ydHMKLSAgICAgICAgIyAqKSAyKjMgZmlsZXMgaW4gL3Rlc3QuY2hlY2tvdXQgZm9yIGFj
dHVhbGx5IGRpZmZlcmluZyBiYXNlbGluZXMKLSAgICAgICAgIyAqKSAxIGZpbGUgaW4gL3Rlc3Qu
Y2hlY2tvdXQgZm9yIHRoZSB1cGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUKLSAgICAgICAg
IyAqKSAyKjQgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIG9sZC9uZXcgYmFzZWxpbmVzIGZvciB0aGUg
dHdvIGFjdHVhbCBwb3J0cwotICAgICAgICAjICopIDIgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIHRl
eHQgZGlmZnMgZm9yIHRoZSB0d28gcG9ydHMKLSAgICAgICAgIyAqKSAyIGZpbGVzIGluIC90bXAg
Zm9yIHRoZSBpbWFnZSBkaWZmcyBmb3IgdGhlIHR3byBwb3J0cwotICAgICAgICAjICopIDEgZmls
ZSBpbiAvdG1wIGZvciB0aGUgcmViYXNlbGluZSByZXN1bHRzIGh0bWwgZmlsZQotICAgICAgICAj
IEZJWE1FOiBUaGVzZSBudW1iZXJzIGRlcGVuZCBvbiBNb2NrU0NNLmV4aXN0cygpIHJldHVybmlu
ZyBUcnVlIGZvciBhbGwgZmlsZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAz
OCkKLQotCi1jbGFzcyBUZXN0SHRtbEdlbmVyYXRvcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAg
ZGVmIG1ha2VfZ2VuZXJhdG9yKHNlbGYsIGZpbGVzLCB0ZXN0cyk6Ci0gICAgICAgIG9wdGlvbnMg
PSBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPU5vbmUsIGh0bWxfZGlyZWN0b3J5PScvdG1wJykK
LSAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgZnMgPSBob3N0LmZpbGVzeXN0ZW0K
LSAgICAgICAgZm9yIGZpbGVuYW1lLCBjb250ZW50cyBpbiBmaWxlcy5pdGVyaXRlbXMoKToKLSAg
ICAgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUoZmlsZW5hbWUpKQot
ICAgICAgICAgICAgZnMud3JpdGVfYmluYXJ5X2ZpbGUoZmlsZW5hbWUsIGNvbnRlbnRzKQotICAg
ICAgICBob3N0X3BvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QnLCBvcHRpb25zKQot
ICAgICAgICBnZW5lcmF0b3IgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5IdG1s
R2VuZXJhdG9yKGhvc3QsIGhvc3RfcG9ydCwKLSAgICAgICAgICAgIHRhcmdldF9wb3J0PU5vbmUs
IG9wdGlvbnM9b3B0aW9ucywgcGxhdGZvcm1zPVsndGVzdC1tYWMtbGVvcGFyZCddLCByZWJhc2Vs
aW5pbmdfdGVzdHM9dGVzdHMpCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IsIGhvc3RfcG9ydAot
Ci0gICAgZGVmIHRlc3RfZ2VuZXJhdGVfYmFzZWxpbmVfbGlua3Moc2VsZik6Ci0gICAgICAgIGZp
bGVzID0gewotICAgICAgICAgICAgIi90bXAvZm9vLWV4cGVjdGVkLW1hYy1vbGQudHh0IjogIiIs
Ci0gICAgICAgICAgICAiL3RtcC9mb28tZXhwZWN0ZWQtbWFjLW5ldy50eHQiOiAiIiwKLSAgICAg
ICAgICAgICIvdG1wL2Zvby1leHBlY3RlZC1tYWMtZGlmZi50eHQiOiAiIiwKLSAgICAgICAgfQot
ICAgICAgICB0ZXN0cyA9IFsiZm9vLnR4dCJdCi0gICAgICAgIGdlbmVyYXRvciwgaG9zdF9wb3J0
ID0gc2VsZi5tYWtlX2dlbmVyYXRvcihmaWxlcywgdGVzdHMpCi0gICAgICAgIGxpbmtzID0gZ2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9iYXNlbGluZV9saW5rcygiZm9vIiwgIi50eHQiLCAibWFjIikKLSAg
ICAgICAgZXhwZWN0ZWRfbGlua3MgPSAnPHRkIGFsaWduPWNlbnRlcj48YSBocmVmPSJmaWxlOi8v
L3RtcC9mb28tZXhwZWN0ZWQtbWFjLW9sZC50eHQiPmZvby1leHBlY3RlZC50eHQ8L2E+PC90ZD48
dGQgYWxpZ249Y2VudGVyPjxhIGhyZWY9ImZpbGU6Ly8vdG1wL2Zvby1leHBlY3RlZC1tYWMtbmV3
LnR4dCI+Zm9vLWV4cGVjdGVkLnR4dDwvYT48L3RkPjx0ZCBhbGlnbj1jZW50ZXI+PGEgaHJlZj0i
ZmlsZTovLy90bXAvZm9vLWV4cGVjdGVkLW1hYy1kaWZmLnR4dCI+RGlmZjwvYT48L3RkPicKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rcywgZXhwZWN0ZWRfbGlua3MpCi0KLQotaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130257</attachid>
            <date>2012-03-05 18:19:54 -0800</date>
            <delta_ts>2012-03-05 18:19:54 -0800</delta_ts>
            <desc>missed the wrapper in Scripts</desc>
            <filename>bug-80347-20120305181953.patch</filename>
            <type>text/plain</type>
            <size>69425</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5ODMxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzQyZjE0YzVjMGJkMjEyNDc2ZWZjNDBjMWU3ODY1ZWNi
NGM0NzAyNy4uMDYyMzJmMTYzMzk1YjY1OGE2M2RkNmRhZmIwYTEzMDQzY2VjNTI1OCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2
IEBACiAyMDEyLTAzLTA1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzIGlzIG9ic29sZXRlIGFuZCBz
aG91bGQgYmUgcmVtb3ZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODAzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAg
ICAgICogU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0czogUmVtb3ZlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RvX2JlX21vdmVkL3JlYmFzZWxpbmVfY2hyb21p
dW1fd2Via2l0X3Rlc3RzLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6
IFJlbW92ZWQuCisKKzIwMTItMDMtMDUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5v
cmc+CisKICAgICAgICAgVGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIGRpc2FibGUgb3B0aW1pemVy
IGluIHdlYmtpdC1wYXRjaCByZWJhc2VsaW5lLWV4cGVjdGF0aW9ucwogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1OTAKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1Njcmlw
dHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDk0MjJkMDE2N2E5ZGY4MmY0OTBhZTRkMTIzNTQ5MTRkYzcyYTY1ZDguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy9y
ZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICsw
LDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBz
eXMKLQotaW1wb3J0IHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX2NoZWNrCi0KLWltcG9ydCB3ZWJr
aXRweS50b19iZV9tb3ZlZC5yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cwotCi0KLWlm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcHJpbnQgIiIiVGhpcyBzY3JpcHQgaXMgZGVw
cmVjaWF0ZWQuICBQbGVhc2UgdXNlIHVzZSAid2Via2l0LXBhdGNoIHJlYmFzZWxpbmUtZXhwZWN0
YXRpb25zIiBpbnN0ZWFkLgotCi1JZiB0aGF0IGNvbW1hbmQgZG9lcyBub3Qgd29yayBwcm9wZXJs
eSwgcGxlYXNlIGZpbGUgYSBidWcgYW5kIENDIGFiYXJ0aC4gSWYgeW91Ci1yZWFsbHkgbmVlZCB0
byB1c2UgdGhlIG9sZCBzY3JpcHQsIHJ1biB0aGlzIGNvbW1hbmQgYWdhaW4gd2l0aAotLS11c2Ut
ZGVwcmVjYXRlZC1zY3JpcHQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiIiIgotCi0gICAgaWYgbGVu
KHN5cy5hcmd2KSA+IDEgYW5kIHN5cy5hcmd2WzFdID09ICctLXVzZS1kZXByZWNhdGVkLXNjcmlw
dCc6Ci0gICAgICAgIHN5cy5leGl0KHdlYmtpdHB5LnRvX2JlX21vdmVkLnJlYmFzZWxpbmVfY2hy
b21pdW1fd2Via2l0X3Rlc3RzLm1haW4oc3lzLmFyZ3ZbMjpdKSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRf
dGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RvX2JlX21vdmVkL3JlYmFzZWxpbmVf
Y2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
N2RiNzIwMjI5YmIxYWY4ZGFkMzYwOWQwYTM4NDZmMjJiOGU1YjEzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9f
YmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDQ0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSIiIlJlYmFzZWxpbmluZyB0b29sIHRoYXQgYXV0b21hdGljYWxseSBwcm9kdWNlcyBi
YXNlbGluZXMgZm9yIGFsbCBwbGF0Zm9ybXMuCi0KLVRoZSBzY3JpcHQgZG9lcyB0aGUgZm9sbG93
aW5nIGZvciBlYWNoIHBsYXRmb3JtIHNwZWNpZmllZDoKLSAgMS4gQ29tcGlsZSBhIGxpc3Qgb2Yg
dGVzdHMgdGhhdCBuZWVkIHJlYmFzZWxpbmluZy4KLSAgMi4gRG93bmxvYWQgdGVzdCByZXN1bHQg
YXJjaGl2ZSBmcm9tIGJ1aWxkYm90IGZvciB0aGUgcGxhdGZvcm0uCi0gIDMuIEV4dHJhY3QgYmFz
ZWxpbmVzIGZyb20gdGhlIGFyY2hpdmUgZmlsZSBmb3IgYWxsIGlkZW50aWZpZWQgZmlsZXMuCi0g
IDQuIEFkZCBuZXcgYmFzZWxpbmVzIHRvIFNWTiByZXBvc2l0b3J5LgotICA1LiBGb3IgZWFjaCB0
ZXN0IHRoYXQgaGFzIGJlZW4gcmViYXNlbGluZWQsIHJlbW92ZSB0aGlzIHBsYXRmb3JtIG9wdGlv
biBmcm9tCi0gICAgIHRoZSB0ZXN0IGluIHRlc3RfZXhwZWN0YXRpb24udHh0LiBJZiBubyBvdGhl
ciBwbGF0Zm9ybXMgcmVtYWluIGFmdGVyCi0gICAgIHJlbW92YWwsIGRlbGV0ZSB0aGUgcmViYXNl
bGluZWQgdGVzdCBmcm9tIHRoZSBmaWxlLgotCi1BdCB0aGUgZW5kLCB0aGUgc2NyaXB0IGdlbmVy
YXRlcyBhIGh0bWwgdGhhdCBjb21wYXJlcyBvbGQgYW5kIG5ldyBiYXNlbGluZXMuCi0iIiIKLQot
aW1wb3J0IGNvcHkKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCByZQot
aW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLQotZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQg
aW1wb3J0IHNjbQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB6aXBmaWxlc2V0
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgdXJsZmV0Y2hlcgotZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKLWZyb20gd2Via2l0cHkuY29tbW9uLmhv
c3QgaW1wb3J0IEhvc3QKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5mYWN0b3J5
IGltcG9ydCBQb3J0RmFjdG9yeQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJl
YWRfY2hlY2tzdW1fZnJvbV9wbmcKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBp
bXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKLQotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCi0KLUJBU0VMSU5FX1NVRkZJWEVTID0gKCcudHh0JywgJy5wbmcnLCAnLmNoZWNrc3Vt
JykKLQotQVJDSElWRV9ESVJfTkFNRV9ESUNUID0gewotICAgICdjaHJvbWl1bS13aW4td2luNyc6
ICdXZWJraXRfV2luNycsCi0gICAgJ2Nocm9taXVtLXdpbi12aXN0YSc6ICdXZWJraXRfVmlzdGEn
LAotICAgICdjaHJvbWl1bS13aW4teHAnOiAnV2Via2l0X1dpbicsCi0gICAgJ2Nocm9taXVtLW1h
Yy1sZW9wYXJkJzogJ1dlYmtpdF9NYWMxMF81JywKLSAgICAnY2hyb21pdW0tbWFjLXNub3dsZW9w
YXJkJzogJ1dlYmtpdF9NYWMxMF82JywKLSAgICAnY2hyb21pdW0tbGludXgteDg2JzogJ1dlYmtp
dF9MaW51eF8zMicsCi0gICAgJ2Nocm9taXVtLWxpbnV4LXg4Nl82NCc6ICdXZWJraXRfTGludXgn
LAotICAgICdjaHJvbWl1bS1ncHUtbWFjLXNub3dsZW9wYXJkJzogJ1dlYmtpdF9NYWMxMF82Xy1f
R1BVJywKLSAgICAnY2hyb21pdW0tZ3B1LXdpbi14cCc6ICdXZWJraXRfV2luXy1fR1BVJywKLSAg
ICAnY2hyb21pdW0tZ3B1LXdpbi13aW43JzogJ1dlYmtpdF9XaW43Xy1fR1BVJywKLSAgICAnY2hy
b21pdW0tZ3B1LWxpbnV4LXg4Nl82NCc6ICdXZWJraXRfTGludXhfLV9HUFUnLAotICAgICdjaHJv
bWl1bS1ncHUtbGludXgteDg2JzogJ1dlYmtpdF9MaW51eF8zMl8tX0dQVScsCi19Ci0KLQotZGVm
IGxvZ19kYXNoZWRfc3RyaW5nKHRleHQsIHBsYXRmb3JtPU5vbmUsIGxvZ2dpbmdfbGV2ZWw9bG9n
Z2luZy5ERUJVRyk6Ci0gICAgIiIiTG9nIHRleHQgbWVzc2FnZSB3aXRoIGRhc2hlcyBvbiBib3Ro
IHNpZGVzLiIiIgotICAgIG1zZyA9IHRleHQKLSAgICBpZiBwbGF0Zm9ybToKLSAgICAgICAgbXNn
ICs9ICc6ICcgKyBwbGF0Zm9ybQotICAgIGlmIGxlbihtc2cpIDwgNzg6Ci0gICAgICAgIGRhc2hl
cyA9ICctJyAqICgoNzggLSBsZW4obXNnKSkgLyAyKQotICAgICAgICBtc2cgPSAnJXMgJXMgJXMn
ICUgKGRhc2hlcywgbXNnLCBkYXNoZXMpCi0gICAgX2xvZy5sb2cobG9nZ2luZ19sZXZlbCwgbXNn
KQotCi0KLWRlZiBzZXR1cF9odG1sX2RpcmVjdG9yeShmaWxlc3lzdGVtLCBwYXJlbnRfZGlyZWN0
b3J5KToKLSAgICAiIiJTZXR1cCB0aGUgZGlyZWN0b3J5IHRvIHN0b3JlIGh0bWwgcmVzdWx0cy4K
LQotICAgICAgIEFsbCBodG1sIHJlbGF0ZWQgZmlsZXMgYXJlIHN0b3JlZCBpbiB0aGUgInJlYmFz
ZWxpbmVfaHRtbCIgc3ViZGlyZWN0b3J5IG9mCi0gICAgICAgdGhlIHBhcmVudCBkaXJlY3Rvcnku
IFRoZSBwYXRoIHRvIHRoZSBjcmVhdGVkIGRpcmVjdG9yeSBpcyByZXR1cm5lZC4KLSAgICAiIiIK
LQotICAgIGlmIG5vdCBwYXJlbnRfZGlyZWN0b3J5OgotICAgICAgICBwYXJlbnRfZGlyZWN0b3J5
ID0gc3RyKGZpbGVzeXN0ZW0ubWtkdGVtcCgpKQotICAgIGVsc2U6Ci0gICAgICAgIGZpbGVzeXN0
ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkocGFyZW50X2RpcmVjdG9yeSkKLQotICAgIGh0bWxfZGly
ZWN0b3J5ID0gZmlsZXN5c3RlbS5qb2luKHBhcmVudF9kaXJlY3RvcnksICdyZWJhc2VsaW5lX2h0
bWwnKQotICAgIF9sb2cuZGVidWcoJ0h0bWwgZGlyZWN0b3J5OiAiJXMiJywgaHRtbF9kaXJlY3Rv
cnkpCi0KLSAgICBpZiBmaWxlc3lzdGVtLmV4aXN0cyhodG1sX2RpcmVjdG9yeSk6Ci0gICAgICAg
IGZpbGVzeXN0ZW0ucm10cmVlKGh0bWxfZGlyZWN0b3J5KQotICAgICAgICBfbG9nLmRlYnVnKCdE
ZWxldGVkIGh0bWwgZGlyZWN0b3J5OiAiJXMiJywgaHRtbF9kaXJlY3RvcnkpCi0KLSAgICBmaWxl
c3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGh0bWxfZGlyZWN0b3J5KQotICAgIHJldHVybiBo
dG1sX2RpcmVjdG9yeQotCi0KLWRlZiBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoZmlsZXN5c3Rl
bSwgaHRtbF9kaXJlY3RvcnksIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUpOgotICAgICIiIkdldCBmdWxsIHBhdGgg
b2YgdGhlIGJhc2VsaW5lIHJlc3VsdCBmaWxlLgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVzeXN0
ZW06IHdyYXBwZXIgb2JqZWN0Ci0gICAgICBodG1sX2RpcmVjdG9yeTogZGlyZWN0b3J5IHRoYXQg
c3RvcmVzIHRoZSBodG1sIHJlbGF0ZWQgZmlsZXMuCi0gICAgICBiYXNlbGluZV9maWxlbmFtZTog
bmFtZSBvZiB0aGUgYmFzZWxpbmUgZmlsZS4KLSAgICAgIHBsYXRmb3JtOiB3aW4sIGxpbnV4IG9y
IG1hYwotICAgICAgcmVzdWx0X3R5cGU6IHR5cGUgb2YgdGhlIGJhc2VsaW5lIHJlc3VsdDogJy50
eHQnLCAnLnBuZycuCi0KLSAgICBSZXR1cm5zOgotICAgICAgRnVsbCBwYXRoIG9mIHRoZSBiYXNl
bGluZSBmaWxlIGZvciByZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24uCi0gICAgIiIiCi0K
LSAgICBiYXNlLCBleHQgPSBmaWxlc3lzdGVtLnNwbGl0ZXh0KGJhc2VsaW5lX2ZpbGVuYW1lKQot
ICAgIHJlc3VsdF9maWxlbmFtZSA9ICclcy0lcy0lcyVzJyAlIChiYXNlLCBwbGF0Zm9ybSwgcmVz
dWx0X3R5cGUsIGV4dCkKLSAgICBmdWxscGF0aCA9IGZpbGVzeXN0ZW0uam9pbihodG1sX2RpcmVj
dG9yeSwgcmVzdWx0X2ZpbGVuYW1lKQotICAgIF9sb2cuZGVidWcoJyAgUmVzdWx0IGZpbGUgZnVs
bCBwYXRoOiAiJXMiLicsIGZ1bGxwYXRoKQotICAgIHJldHVybiBmdWxscGF0aAotCi0KLWNsYXNz
IFJlYmFzZWxpbmVyKG9iamVjdCk6Ci0gICAgIiIiQ2xhc3MgdG8gcHJvZHVjZSBuZXcgYmFzZWxp
bmVzIGZvciBhIGdpdmVuIHBsYXRmb3JtLiIiIgotCi0gICAgUkVWSVNJT05fUkVHRVggPSByJzxh
IGhyZWY9XCIoXGQrKS9cIj4nCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcnVubmlu
Z19wb3J0LCB0YXJnZXRfcG9ydCwgcGxhdGZvcm0sIG9wdGlvbnMsIHVybF9mZXRjaGVyLCB6aXBf
ZmFjdG9yeSwgbG9nZ2VkX2JlZm9yZT1GYWxzZSk6Ci0gICAgICAgICIiIgotICAgICAgICBBcmdz
OgotICAgICAgICAgICAgcnVubmluZ19wb3J0OiB0aGUgUG9ydCB0aGUgc2NyaXB0IGlzIHJ1bm5p
bmcgb24uCi0gICAgICAgICAgICB0YXJnZXRfcG9ydDogdGhlIFBvcnQgdGhlIHNjcmlwdCB1c2Vz
IHRvIGZpbmQgcG9ydC1zcGVjaWZpYwotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5m
b3JtYXRpb24gbGlrZSB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0Ci0gICAgICAgICAgICAgICAg
ZmlsZSBsb2NhdGlvbiBhbmQgdGhlIGxpc3Qgb2YgdGVzdCBwbGF0Zm9ybXMuCi0gICAgICAgICAg
ICBwbGF0Zm9ybTogdGhlIHRlc3QgcGxhdGZvcm0gdG8gcmViYXNlbGluZQotICAgICAgICAgICAg
b3B0aW9uczogdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIG9iamVjdC4KLSAgICAgICAgICAgIHVy
bF9mZXRjaGVyOiBvYmplY3QgdGhhdCBjYW4gZmV0Y2ggb2JqZWN0cyBmcm9tIFVSTHMKLSAgICAg
ICAgICAgIHppcF9mYWN0b3J5OiBvcHRpb25hbCBvYmplY3QgdGhhdCBjYW4gZmV0Y2ggemlwIGZp
bGVzIGZyb20gVVJMcwotICAgICAgICAgICAgc2NtOiBzY20gb2JqZWN0IGZvciBhZGRpbmcgbmV3
IGJhc2VsaW5lcwotICAgICAgICAgICAgbG9nZ2VkX2JlZm9yZTogd2hldGhlciB0aGUgcHJldmlv
dXMgcnVubmluZyBwb3J0IGxvZ2dlZCBhbnl0aGluZy4KLSAgICAgICAgIiIiCi0gICAgICAgIHNl
bGYuX3BsYXRmb3JtID0gcGxhdGZvcm0KLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMK
LSAgICAgICAgc2VsZi5fcG9ydCA9IHJ1bm5pbmdfcG9ydAotICAgICAgICBzZWxmLl9maWxlc3lz
dGVtID0gaG9zdC5maWxlc3lzdGVtCi0gICAgICAgIHNlbGYuX3RhcmdldF9wb3J0ID0gdGFyZ2V0
X3BvcnQKLQotICAgICAgICBzZWxmLl9yZWJhc2VsaW5lX3BvcnQgPSBob3N0LnBvcnRfZmFjdG9y
eS5nZXQocGxhdGZvcm0sIG9wdGlvbnMpCi0gICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0
cyA9IHNldCgpCi0gICAgICAgIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzID0gW10KLSAgICAgICAg
c2VsZi5fbG9nZ2VkX2JlZm9yZSA9IGxvZ2dlZF9iZWZvcmUKLSAgICAgICAgc2VsZi5kaWRfbG9n
ID0gRmFsc2UKLQotICAgICAgICAjIENyZWF0ZSB0ZXN0cyBhbmQgZXhwZWN0YXRpb25zIGhlbHBl
ciB3aGljaCBpcyB1c2VkIHRvOgotICAgICAgICAjICAgLS4gY29tcGlsZSBsaXN0IG9mIHRlc3Rz
IHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuCi0gICAgICAgICMgICAtLiB1cGRhdGUgdGhlIHRlc3Rz
IGluIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUgYWZ0ZXIgcmViYXNlbGluZQotICAgICAgICAjICAg
ICAgaXMgZG9uZS4KLSAgICAgICAgZXhwZWN0YXRpb25zX3N0ciA9IHNlbGYuX3JlYmFzZWxpbmVf
cG9ydC50ZXN0X2V4cGVjdGF0aW9ucygpCi0gICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25z
ID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucygKLSAgICAgICAgICAgIHNlbGYu
X3JlYmFzZWxpbmVfcG9ydCwgTm9uZSwgZXhwZWN0YXRpb25zX3N0ciwgc2VsZi5fcmViYXNlbGlu
ZV9wb3J0LnRlc3RfY29uZmlndXJhdGlvbigpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5fdXJsX2Zl
dGNoZXIgPSB1cmxfZmV0Y2hlcgotICAgICAgICBzZWxmLl96aXBfZmFjdG9yeSA9IHppcF9mYWN0
b3J5Ci0gICAgICAgIHNlbGYuX3NjbSA9IGhvc3Quc2NtKCkKLQotICAgIGRlZiBydW4oc2VsZik6
Ci0gICAgICAgICIiIlJ1biByZWJhc2VsaW5lIHByb2Nlc3MuIiIiCi0KLSAgICAgICAgbG9nX2Rh
c2hlZF9zdHJpbmcoJ0NvbXBpbGluZyByZWJhc2VsaW5pbmcgdGVzdHMnLCBzZWxmLl9wbGF0Zm9y
bSwgbG9nZ2luZy5ERUJVRykKLSAgICAgICAgaWYgbm90IHNlbGYuX2NvbXBpbGVfcmViYXNlbGlu
aW5nX3Rlc3RzKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgbm90IHNl
bGYuX3JlYmFzZWxpbmluZ190ZXN0czoKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAg
ICAgc2VsZi5kaWRfbG9nID0gVHJ1ZQotICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnRG93bmxv
YWRpbmcgYXJjaGl2ZScsIHNlbGYuX3BsYXRmb3JtLCBsb2dnaW5nLkRFQlVHKQotICAgICAgICBh
cmNoaXZlX2ZpbGUgPSBzZWxmLl9kb3dubG9hZF9idWlsZGJvdF9hcmNoaXZlKCkKLSAgICAgICAg
X2xvZy5kZWJ1ZygnJykKLSAgICAgICAgaWYgbm90IGFyY2hpdmVfZmlsZToKLSAgICAgICAgICAg
IF9sb2cuZXJyb3IoJ05vIGFyY2hpdmUgZm91bmQuJykKLSAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotCi0gICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdFeHRyYWN0aW5nIGFuZCBhZGRpbmcgbmV3
IGJhc2VsaW5lcycsIHNlbGYuX3BsYXRmb3JtLCBsb2dnaW5nLkRFQlVHKQotICAgICAgICBzZWxm
Ll9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lcyhhcmNoaXZlX2ZpbGUpCi0gICAgICAgIGFy
Y2hpdmVfZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1VwZGF0aW5n
IHJlYmFzZWxpbmVkIHRlc3RzIGluIGZpbGUnLCBzZWxmLl9wbGF0Zm9ybSkKLQotICAgICAgICBp
ZiBsZW4oc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKSAhPSBsZW4oc2VsZi5fcmViYXNlbGluZWRf
dGVzdHMpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJykKLSAgICAgICAgICAgIF9sb2cuZGVi
dWcoJ05PVCBBTEwgVEVTVFMgV0VSRSBSRUJBU0VMSU5FRC4nKQotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnICBOdW1iZXIgbWFya2VkIGZvciByZWJhc2VsaW5pbmc6ICVkJywgbGVuKHNlbGYuX3Jl
YmFzZWxpbmluZ190ZXN0cykpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgIE51bWJlciBhY3R1
YWxseSByZWJhc2VsaW5lZDogJWQnLCBsZW4oc2VsZi5fcmViYXNlbGluZWRfdGVzdHMpKQotICAg
ICAgICAgICAgX2xvZy5pbmZvKCcnKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAg
ICAgX2xvZy5kZWJ1ZygnICBBbGwgdGVzdHMgbmVlZGluZyByZWJhc2VsaW5pbmcgd2VyZSBzdWNj
ZXNzZnVsbHkgcmViYXNlbGluZWQuJykKLSAgICAgICAgX2xvZy5pbmZvKCcnKQotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCi0gICAgZGVmIHJlbW92ZV9yZWJhc2VsaW5pbmdfZXhwZWN0YXRpb25zKHNl
bGYsIHRlc3RzLCBiYWNrdXApOgotICAgICAgICAiIiJpZiBiYWNrdXAgaXMgVHJ1ZSwgd2UgYmFj
a3VwIHRoZSBvcmlnaW5hbCB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlLiIiIgotICAgICAgICBuZXdf
ZXhwZWN0YXRpb25zID0gc2VsZi5fdGVzdF9leHBlY3RhdGlvbnMucmVtb3ZlX3JlYmFzZWxpbmVk
X3Rlc3RzKHRlc3RzKQotICAgICAgICBwYXRoID0gc2VsZi5fdGFyZ2V0X3BvcnQucGF0aF90b190
ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkKLSAgICAgICAgaWYgYmFja3VwOgotICAgICAgICAgICAg
ZGF0ZV9zdWZmaXggPSB0aW1lLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnLCB0aW1lLmxvY2FsdGlt
ZSh0aW1lLnRpbWUoKSkpCi0gICAgICAgICAgICBiYWNrdXBfZmlsZSA9ICclcy5vcmlnLiVzJyAl
IChwYXRoLCBkYXRlX3N1ZmZpeCkKLSAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhp
c3RzKGJhY2t1cF9maWxlKToKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92
ZShiYWNrdXBfZmlsZSkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1NhdmluZyBvcmlnaW5hbCBm
aWxlIHRvICIlcyInLCBiYWNrdXBfZmlsZSkKLSAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
bW92ZShwYXRoLCBiYWNrdXBfZmlsZSkKLQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRl
X3RleHRfZmlsZShwYXRoLCBuZXdfZXhwZWN0YXRpb25zKQotICAgICAgICAjIHNlbGYuX3NjbS5h
ZGQocGF0aCkKLQotICAgIGRlZiBnZXRfcmViYXNlbGluZWRfdGVzdHMoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cwotCi0gICAgZGVmIF9jb21waWxlX3JlYmFz
ZWxpbmluZ190ZXN0cyhzZWxmKToKLSAgICAgICAgIiIiQ29tcGlsZSBsaXN0IG9mIHRlc3RzIHRo
YXQgbmVlZCByZWJhc2VsaW5pbmcgZm9yIHRoZSBwbGF0Zm9ybS4KLQotICAgICAgICBSZXR1cm5z
OgotICAgICAgICAgIEZhbHNlIGlmIHJlZnRlc3RzIGFyZSB3cm9uZ2x5IG1hcmtlZCBhcyAnbmVl
ZHMgcmViYXNlbGluaW5nJyBvciBUcnVlCi0gICAgICAgICIiIgotCi0gICAgICAgIHNlbGYuX3Jl
YmFzZWxpbmluZ190ZXN0cyA9IHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zLmdldF9yZWJhc2VsaW5p
bmdfZmFpbHVyZXMoKQotICAgICAgICBpZiBub3Qgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgot
ICAgICAgICAgICAgX2xvZy5pbmZvKCclczogTm8gdGVzdHMgdG8gcmViYXNlbGluZS4nLCBzZWxm
Ll9wbGF0Zm9ybSkKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgZnMgPSBzZWxm
Ll90YXJnZXRfcG9ydC5fZmlsZXN5c3RlbQotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9yZWJh
c2VsaW5pbmdfdGVzdHM6Ci0gICAgICAgICAgICBpZiBzZWxmLl90YXJnZXRfcG9ydC5yZWZlcmVu
Y2VfZmlsZXModGVzdCk6Ci0gICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgc2VlbXMgdG8g
YmUgYSByZWZ0ZXN0LiBXZSBjYW4gbm90IHJlYmFzZSBmb3IgcmVmdGVzdHMuJywgdGVzdCkKLSAg
ICAgICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMgPSBzZXQoKQotICAgICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIGlmIG5vdCBzZWxmLl9sb2dnZWRfYmVmb3Jl
OgotICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQotICAgICAgICBfbG9nLmluZm8oJyVzOiBSZWJh
c2VsaW5pbmcgJWQgdGVzdHM6Jywgc2VsZi5fcGxhdGZvcm0sIGxlbihzZWxmLl9yZWJhc2VsaW5p
bmdfdGVzdHMpKQotICAgICAgICB0ZXN0X25vID0gMQotICAgICAgICBmb3IgdGVzdCBpbiBzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHM6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVkOiAlcycs
IHRlc3Rfbm8sIHRlc3QpCi0gICAgICAgICAgICB0ZXN0X25vICs9IDEKLQotICAgICAgICByZXR1
cm4gVHJ1ZQotCi0gICAgZGVmIF9nZXRfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVybCk6Ci0gICAg
ICAgICIiIkdldCB0aGUgbGF0ZXN0IGxheW91dCB0ZXN0IHJldmlzaW9uIG51bWJlciBmcm9tIGJ1
aWxkYm90LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdXJsOiBVcmwgdG8gcmV0cmlldmUg
bGF5b3V0IHRlc3QgcmV2aXNpb24gbnVtYmVycy4KLQotICAgICAgICBSZXR1cm5zOgotICAgICAg
ICAgIGxhdGVzdCByZXZpc2lvbiBvcgotICAgICAgICAgIE5vbmUgb24gZmFpbHVyZS4KLSAgICAg
ICAgIiIiCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnVXJsIHRvIHJldHJpZXZlIHJldmlzaW9uOiAi
JXMiJywgdXJsKQotCi0gICAgICAgIGNvbnRlbnQgPSBzZWxmLl91cmxfZmV0Y2hlci5mZXRjaCh1
cmwpCi0KLSAgICAgICAgcmV2aXNpb25zID0gcmUuZmluZGFsbChzZWxmLlJFVklTSU9OX1JFR0VY
LCBjb250ZW50KQotICAgICAgICBpZiBub3QgcmV2aXNpb25zOgotICAgICAgICAgICAgX2xvZy5l
cnJvcignRmFpbGVkIHRvIGZpbmQgcmV2aXNpb24sIGNvbnRlbnQ6ICIlcyInLCBjb250ZW50KQot
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICByZXZpc2lvbnMuc29ydChrZXk9aW50
KQotICAgICAgICBfbG9nLmRlYnVnKCcgIExhdGVzdCByZXZpc2lvbjogJXMnLCByZXZpc2lvbnNb
bGVuKHJldmlzaW9ucykgLSAxXSkKLSAgICAgICAgcmV0dXJuIHJldmlzaW9uc1tsZW4ocmV2aXNp
b25zKSAtIDFdCi0KLSAgICBkZWYgX2dldF9hcmNoaXZlX2Rpcl9uYW1lKHNlbGYsIHBsYXRmb3Jt
KToKLSAgICAgICAgIiIiR2V0IG5hbWUgb2YgdGhlIGxheW91dCB0ZXN0IGFyY2hpdmUgZGlyZWN0
b3J5LgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgRGlyZWN0b3J5IG5hbWUgb3IKLSAg
ICAgICAgICBOb25lIG9uIGZhaWx1cmUKLSAgICAgICAgIiIiCi0KLSAgICAgICAgaWYgcGxhdGZv
cm0gaW4gQVJDSElWRV9ESVJfTkFNRV9ESUNUOgotICAgICAgICAgICAgcmV0dXJuIEFSQ0hJVkVf
RElSX05BTUVfRElDVFtwbGF0Zm9ybV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJ0Nhbm5vdCBmaW5kIHBsYXRmb3JtIGtleSAlcyBpbiBhcmNoaXZlICcKLSAgICAgICAg
ICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSBuYW1lIGRpY3Rpb25hcnknLCBwbGF0Zm9ybSkKLSAg
ICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgX2dldF9hcmNoaXZlX3VybChzZWxmKToK
LSAgICAgICAgIiIiR2VuZXJhdGUgdGhlIHVybCB0byBkb3dubG9hZCBsYXRlc3QgbGF5b3V0IHRl
c3QgYXJjaGl2ZS4KLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIFVybCB0byBkb3dubG9h
ZCBhcmNoaXZlIG9yCi0gICAgICAgICAgTm9uZSBvbiBmYWlsdXJlCi0gICAgICAgICIiIgotCi0g
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZm9yY2VfYXJjaGl2ZV91cmw6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fb3B0aW9ucy5mb3JjZV9hcmNoaXZlX3VybAotCi0gICAgICAgIGRpcl9uYW1l
ID0gc2VsZi5fZ2V0X2FyY2hpdmVfZGlyX25hbWUoc2VsZi5fcGxhdGZvcm0pCi0gICAgICAgIGlm
IG5vdCBkaXJfbmFtZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgX2xvZy5k
ZWJ1ZygnQnVpbGRib3QgcGxhdGZvcm0gZGlyIG5hbWU6ICIlcyInLCBkaXJfbmFtZSkKLQotICAg
ICAgICB1cmxfYmFzZSA9ICclcy8lcy8nICUgKHNlbGYuX29wdGlvbnMuYXJjaGl2ZV91cmwsIGRp
cl9uYW1lKQotICAgICAgICBsYXRlc3RfcmV2aXNpb24gPSBzZWxmLl9nZXRfbGF0ZXN0X3Jldmlz
aW9uKHVybF9iYXNlKQotICAgICAgICBpZiBsYXRlc3RfcmV2aXNpb24gaXMgTm9uZSBvciBsYXRl
c3RfcmV2aXNpb24gPD0gMDoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGFyY2hp
dmVfdXJsID0gJyVzJXMvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnICUgKHVybF9iYXNlLCBsYXRl
c3RfcmV2aXNpb24pCi0gICAgICAgIF9sb2cuaW5mbygnICBVc2luZyAlcycsIGFyY2hpdmVfdXJs
KQotICAgICAgICByZXR1cm4gYXJjaGl2ZV91cmwKLQotICAgIGRlZiBfZG93bmxvYWRfYnVpbGRi
b3RfYXJjaGl2ZShzZWxmKToKLSAgICAgICAgIiIiRG93bmxvYWQgbGF5b3V0IHRlc3QgYXJjaGl2
ZSBmaWxlIGZyb20gYnVpbGRib3QgYW5kIHJldHVybiBhIGhhbmRsZSB0byBpdC4iIiIKLSAgICAg
ICAgdXJsID0gc2VsZi5fZ2V0X2FyY2hpdmVfdXJsKCkKLSAgICAgICAgaWYgdXJsIGlzIE5vbmU6
Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIGFyY2hpdmVfZmlsZSA9IHppcGZp
bGVzZXQuWmlwRmlsZVNldCh1cmwsIGZpbGVzeXN0ZW09c2VsZi5fZmlsZXN5c3RlbSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcF9mYWN0b3J5PXNlbGYu
X3ppcF9mYWN0b3J5KQotICAgICAgICBfbG9nLmRlYnVnKCdBcmNoaXZlIGRvd25sb2FkZWQnKQot
ICAgICAgICByZXR1cm4gYXJjaGl2ZV9maWxlCi0KLSAgICBkZWYgX2V4dHJhY3RfYW5kX2FkZF9u
ZXdfYmFzZWxpbmVzKHNlbGYsIHppcF9maWxlKToKLSAgICAgICAgIiIiRXh0cmFjdCBuZXcgYmFz
ZWxpbmVzIGZyb20gdGhlIHppcCBmaWxlIGFuZCBhZGQgdGhlbSB0byBTVk4gcmVwb3NpdG9yeS4K
LQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIExpc3Qgb2YgdGVzdHMgdGhhdCBoYXZlIGJl
ZW4gcmViYXNlbGluZWQgb3IgTm9uZSBvbiBmYWlsdXJlLiIiIgotICAgICAgICB6aXBfbmFtZWxp
c3QgPSB6aXBfZmlsZS5uYW1lbGlzdCgpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnemlwIGZpbGUg
bmFtZWxpc3Q6JykKLSAgICAgICAgZm9yIG5hbWUgaW4gemlwX25hbWVsaXN0OgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygnICAnICsgbmFtZSkKLQotICAgICAgICBfbG9nLmRlYnVnKCdQbGF0Zm9y
bSBkaXI6ICIlcyInLCBzZWxmLl9wbGF0Zm9ybSkKLQotICAgICAgICBzZWxmLl9yZWJhc2VsaW5l
ZF90ZXN0cyA9IFtdCi0gICAgICAgIGZvciB0ZXN0X25vLCB0ZXN0IGluIGVudW1lcmF0ZShzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHMpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdCAlZDog
JXMnLCB0ZXN0X25vICsgMSwgdGVzdCkKLSAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfYW5kX2Fk
ZF9uZXdfYmFzZWxpbmUodGVzdCwgemlwX2ZpbGUpCi0KLSAgICBkZWYgX2V4dHJhY3RfYW5kX2Fk
ZF9uZXdfYmFzZWxpbmUoc2VsZiwgdGVzdCwgemlwX2ZpbGUpOgotICAgICAgICBmb3VuZCA9IEZh
bHNlCi0gICAgICAgIHNjbV9lcnJvciA9IEZhbHNlCi0gICAgICAgIHRlc3RfYmFzZW5hbWUgPSBz
ZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KHRlc3QpWzBdCi0gICAgICAgIGZvciBzdWZmaXggaW4g
QkFTRUxJTkVfU1VGRklYRVM6Ci0gICAgICAgICAgICBhcmNoaXZlX3Rlc3RfbmFtZSA9ICdsYXlv
dXQtdGVzdC1yZXN1bHRzLyVzLWFjdHVhbCVzJyAlICh0ZXN0X2Jhc2VuYW1lLCBzdWZmaXgpCi0g
ICAgICAgICAgICBfbG9nLmRlYnVnKCcgIEFyY2hpdmUgdGVzdCBmaWxlIG5hbWU6ICIlcyInLCBh
cmNoaXZlX3Rlc3RfbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBhcmNoaXZlX3Rlc3RfbmFtZSBp
biB6aXBfZmlsZS5uYW1lbGlzdCgpOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgJXMg
ZmlsZSBub3QgaW4gYXJjaGl2ZS4nLCBzdWZmaXgpCi0gICAgICAgICAgICAgICAgY29udGludWUK
LQotICAgICAgICAgICAgZm91bmQgPSBUcnVlCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgICVz
IGZpbGUgZm91bmQgaW4gYXJjaGl2ZS4nLCBzdWZmaXgpCi0KLSAgICAgICAgICAgIHRlbXBfbmFt
ZSA9IHNlbGYuX2V4dHJhY3RfZnJvbV96aXBfdG9fdGVtcGZpbGUoemlwX2ZpbGUsIGFyY2hpdmVf
dGVzdF9uYW1lKQotCi0gICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9ICclcy1leHBlY3Rl
ZCVzJyAlICh0ZXN0X2Jhc2VuYW1lLCBzdWZmaXgpCi0gICAgICAgICAgICBleHBlY3RlZF9mdWxs
cGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbigKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWJh
c2VsaW5lX3BvcnQuYmFzZWxpbmVfcGF0aCgpLCBleHBlY3RlZF9maWxlbmFtZSkKLSAgICAgICAg
ICAgIGV4cGVjdGVkX2Z1bGxwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5ub3JtcGF0aChleHBlY3Rl
ZF9mdWxscGF0aCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgRXhwZWN0ZWQgZmlsZSBmdWxs
IHBhdGg6ICIlcyInLCBleHBlY3RlZF9mdWxscGF0aCkKLQotICAgICAgICAgICAgcmVscGF0aCA9
IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChleHBlY3RlZF9mdWxscGF0aCwgc2VsZi5fdGFyZ2V0
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpKQotCi0gICAgICAgICAgICAjIFRPRE8odmljdG9ydyk6
IGZvciBub3csIHRoZSByZWJhc2VsaW5pbmcgdG9vbCBjaGVja3Mgd2hldGhlcgotICAgICAgICAg
ICAgIyBvciBub3QgVEhJUyBiYXNlbGluZSBpcyBkdXBsaWNhdGUgYW5kIHNob3VsZCBiZSBza2lw
cGVkLgotICAgICAgICAgICAgIyBXZSBjb3VsZCBpbXByb3ZlIHRoZSB0b29sIHRvIGNoZWNrIGFs
bCBiYXNlbGluZXMgaW4gdXBwZXIKLSAgICAgICAgICAgICMgYW5kIGxvd2VyIGxldmVscyBhbmQg
cmVtb3ZlIGFsbCBkdXBsaWNhdGVkIGJhc2VsaW5lcy4KLSAgICAgICAgICAgIGlmIHNlbGYuX2lz
X2R1cF9iYXNlbGluZSh0ZW1wX25hbWUsIGV4cGVjdGVkX2Z1bGxwYXRoLCB0ZXN0LCBzdWZmaXgs
IHNlbGYuX3BsYXRmb3JtKToKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92
ZSh0ZW1wX25hbWUpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMo
ZXhwZWN0ZWRfZnVsbHBhdGgpOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oJyAgUmVt
b3ZpbmcgJXMnICUgcmVscGF0aCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVsZXRlX2Jh
c2VsaW5lKGV4cGVjdGVkX2Z1bGxwYXRoKQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAg
JXMgaXMgYSBkdXBsaWNhdGUnICUgcmVscGF0aCkKLQotICAgICAgICAgICAgICAgICMgRklYTUU6
IFdlIGNvbnNpZGVyIGEgZHVwbGljYXRlIGJhc2VsaW5lIGEgc3VjY2VzcyBpbiB0aGUgbm9ybWFs
IGNhc2UuCi0gICAgICAgICAgICAgICAgIyBGSVhNRTogVGhpcyBtYXkgbm90IGJlIHdoYXQgeW91
IHdhbnQgc29tZXRpbWVzOyBzaG91bGQgdGhpcyBiZQotICAgICAgICAgICAgICAgICMgRklYTUU6
IGNvbnRyb2xsYWJsZT8KLSAgICAgICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cy5h
cHBlbmQodGVzdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBpZiBz
dWZmaXggPT0gJy5jaGVja3N1bScgYW5kIHNlbGYuX3BuZ19oYXNfc2FtZV9jaGVja3N1bSh0ZW1w
X25hbWUsIHRlc3QsIGV4cGVjdGVkX2Z1bGxwYXRoKToKLSAgICAgICAgICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLnJlbW92ZSh0ZW1wX25hbWUpCi0gICAgICAgICAgICAgICAgIyBJZiBhbiBvbGQg
Y2hlY2tzdW0gZXhpc3RzLCBkZWxldGUgaXQuCi0gICAgICAgICAgICAgICAgc2VsZi5fZGVsZXRl
X2Jhc2VsaW5lKGV4cGVjdGVkX2Z1bGxwYXRoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0K
LSAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5f
ZmlsZXN5c3RlbS5kaXJuYW1lKGV4cGVjdGVkX2Z1bGxwYXRoKSkKLSAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0ubW92ZSh0ZW1wX25hbWUsIGV4cGVjdGVkX2Z1bGxwYXRoKQotCi0gICAgICAg
ICAgICBwYXRoX2Zyb21fYmFzZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChleHBlY3RlZF9m
dWxscGF0aCkKLSAgICAgICAgICAgIGlmIHNlbGYuX3NjbS5leGlzdHMocGF0aF9mcm9tX2Jhc2Up
OgotICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICBVcGRhdGluZyAlcycgJSByZWxwYXRoKQot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBfbG9nLmluZm8oJyAgQWRkaW5nICVz
JyAlIHJlbHBhdGgpCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX3NjbS5hZGQoZXhwZWN0ZWRfZnVs
bHBhdGgsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTog
cHJpbnQgZGV0YWlsZWQgZGlhZ25vc2UgbWVzc2FnZXMKLSAgICAgICAgICAgICAgICBzY21fZXJy
b3IgPSBUcnVlCi0gICAgICAgICAgICBlbGlmIHN1ZmZpeCAhPSAnLmNoZWNrc3VtJzoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9jcmVhdGVfaHRtbF9iYXNlbGluZV9maWxlcyhleHBlY3RlZF9mdWxs
cGF0aCkKLQotICAgICAgICBpZiBub3QgZm91bmQ6Ci0gICAgICAgICAgICBfbG9nLndhcm4oJ05v
IHJlc3VsdHMgaW4gYXJjaGl2ZSBmb3IgJXMnICUgdGVzdCkKLSAgICAgICAgZWxpZiBzY21fZXJy
b3I6Ci0gICAgICAgICAgICBfbG9nLndhcm4oJ0ZhaWxlZCB0byBhZGQgYmFzZWxpbmVzIHRvIHlv
dXIgcmVwb3NpdG9yeS4nKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
ICBSZWJhc2VsaW5lIHN1Y2NlZWRlZC4nKQotICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRf
dGVzdHMuYXBwZW5kKHRlc3QpCi0KLSAgICBkZWYgX2V4dHJhY3RfZnJvbV96aXBfdG9fdGVtcGZp
bGUoc2VsZiwgemlwX2ZpbGUsIGZpbGVuYW1lKToKLSAgICAgICAgIiIiRXh0cmFjdHMgfGZpbGVu
YW1lfCBmcm9tIHx6aXBfZmlsZXwsIGEgWmlwRmlsZVNldC4gUmV0dXJucyB0aGUgZnVsbAotICAg
ICAgICAgICBwYXRoIG5hbWUgdG8gdGhlIGV4dHJhY3RlZCBmaWxlLiIiIgotICAgICAgICBkYXRh
ID0gemlwX2ZpbGUucmVhZChmaWxlbmFtZSkKLSAgICAgICAgc3VmZml4ID0gc2VsZi5fZmlsZXN5
c3RlbS5zcGxpdGV4dChmaWxlbmFtZSlbMV0KLSAgICAgICAgdGVtcGZpbGUsIHRlbXBfbmFtZSA9
IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl9iaW5hcnlfdGVtcGZpbGUoc3VmZml4KQotICAgICAgICB0
ZW1wZmlsZS53cml0ZShkYXRhKQotICAgICAgICB0ZW1wZmlsZS5jbG9zZSgpCi0gICAgICAgIHJl
dHVybiB0ZW1wX25hbWUKLQotICAgIGRlZiBfcG5nX2hhc19zYW1lX2NoZWNrc3VtKHNlbGYsIGNo
ZWNrc3VtX3BhdGgsIHRlc3QsIGNoZWNrc3VtX2V4cGVjdGVkX2Z1bGxwYXRoKToKLSAgICAgICAg
IiIiUmV0dXJucyBUcnVlIGlmIHRoZSBmYWxsYmFjayBwbmcgZm9yIHxjaGVja3N1bV9leHBlY3Rl
ZF9mdWxscGF0aHwKLSAgICAgICAgY29udGFpbnMgdGhlIHNhbWUgY2hlY2tzdW0uIiIiCi0gICAg
ICAgIGZzID0gc2VsZi5fZmlsZXN5c3RlbQotICAgICAgICBwbmdfZnVsbHBhdGggPSBzZWxmLl9m
aXJzdF9mYWxsYmFja19wbmdfZm9yX3Rlc3QodGVzdCkKLQotICAgICAgICBpZiBub3QgZnMuZXhp
c3RzKHBuZ19mdWxscGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCcgIENoZWNrc3VtIHdp
dGhvdXQgcG5nIGZpbGUgZm91bmQhIEV4cGVjdGVkICVzIHRvIGV4aXN0LicgJSBwbmdfZnVsbHBh
dGgpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICB3aXRoIGZzLm9wZW5fYmlu
YXJ5X2ZpbGVfZm9yX3JlYWRpbmcocG5nX2Z1bGxwYXRoKSBhcyBmaWxlaGFuZGxlOgotICAgICAg
ICAgICAgY2hlY2tzdW1faW5fcG5nID0gcmVhZF9jaGVja3N1bV9mcm9tX3BuZy5yZWFkX2NoZWNr
c3VtKGZpbGVoYW5kbGUpCi0gICAgICAgICAgICBjaGVja3N1bV9pbl90ZXh0X2ZpbGUgPSBmcy5y
ZWFkX3RleHRfZmlsZShjaGVja3N1bV9wYXRoKQotICAgICAgICAgICAgaWYgY2hlY2tzdW1faW5f
cG5nIGFuZCBjaGVja3N1bV9pbl9wbmcgIT0gY2hlY2tzdW1faW5fdGV4dF9maWxlOgotICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIiAgY2hlY2tzdW0gaW4gJXMgYW5kICVzIGRvbid0IG1hdGNo
ISAgQ29udGludWluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gY29weSBidXQg
cGxlYXNlIGludmVzdGlnYXRlLiIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a3N1bV9leHBlY3RlZF9mdWxscGF0aCwgcG5nX2Z1bGxwYXRoKSkKLSAgICAgICAgICAgIHJldHVy
biBjaGVja3N1bV9pbl90ZXh0X2ZpbGUgPT0gY2hlY2tzdW1faW5fcG5nCi0KLSAgICBkZWYgX2Zp
cnN0X2ZhbGxiYWNrX3BuZ19mb3JfdGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgYWxsX2Jhc2Vs
aW5lcyA9IHNlbGYuX3JlYmFzZWxpbmVfcG9ydC5leHBlY3RlZF9iYXNlbGluZXModGVzdCwgJy5w
bmcnLCBUcnVlKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFsbF9iYXNl
bGluZXNbMF1bMF0sIGFsbF9iYXNlbGluZXNbMF1bMV0pCi0KLSAgICBkZWYgX2lzX2R1cF9iYXNl
bGluZShzZWxmLCBuZXdfYmFzZWxpbmUsIGJhc2VsaW5lX3BhdGgsIHRlc3QsIHN1ZmZpeCwgcGxh
dGZvcm0pOgotICAgICAgICAiIiJDaGVjayB3aGV0aGVyIGEgYmFzZWxpbmUgaXMgZHVwbGljYXRl
IGFuZCBjYW4gZmFsbGJhY2sgdG8gc2FtZQotICAgICAgICAgICBiYXNlbGluZSBmb3IgYW5vdGhl
ciBwbGF0Zm9ybS4gRm9yIGV4YW1wbGUsIGlmIGEgdGVzdCBoYXMgc2FtZQotICAgICAgICAgICBi
YXNlbGluZSBvbiBsaW51eCBhbmQgd2luZG93cywgdGhlbiB3ZSBvbmx5IHN0b3JlIHdpbmRvd3MK
LSAgICAgICAgICAgYmFzZWxpbmUgYW5kIGxpbnV4IGJhc2VsaW5lIHdpbGwgZmFsbGJhY2sgdG8g
dGhlIHdpbmRvd3MgdmVyc2lvbi4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIG5ld19iYXNl
bGluZTogdGVtcCBmaWxlbmFtZSBjb250YWluaW5nIHRoZSBuZXcgYmFzZWxpbmUgcmVzdWx0cwot
ICAgICAgICAgIGJhc2VsaW5lX3BhdGg6IGJhc2VsaW5lIGV4cGVjdGF0aW9uIGZpbGUgbmFtZS4K
LSAgICAgICAgICB0ZXN0OiB0ZXN0IG5hbWUuCi0gICAgICAgICAgc3VmZml4OiBmaWxlIHN1ZmZp
eCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsKLSAgICAgICAgICAgICAg
ICAgIGUuZy4gJy50eHQnIG9yICcucG5nJy4KLSAgICAgICAgICBwbGF0Zm9ybTogYmFzZWxpbmUg
cGxhdGZvcm0gJ21hYycsICd3aW4nIG9yICdsaW51eCcuCi0KLSAgICAgICAgUmV0dXJuczoKLSAg
ICAgICAgICBUcnVlIGlmIHRoZSBiYXNlbGluZSBpcyB1bm5lY2Vzc2FyeS4KLSAgICAgICAgICBG
YWxzZSBvdGhlcndpc2UuCi0gICAgICAgICIiIgotICAgICAgICBhbGxfYmFzZWxpbmVzID0gc2Vs
Zi5fcmViYXNlbGluZV9wb3J0LmV4cGVjdGVkX2Jhc2VsaW5lcyh0ZXN0LCBzdWZmaXgsIFRydWUp
Ci0KLSAgICAgICAgZm9yIGZhbGxiYWNrX2RpciwgZmFsbGJhY2tfZmlsZSBpbiBhbGxfYmFzZWxp
bmVzOgotICAgICAgICAgICAgaWYgbm90IGZhbGxiYWNrX2RpciBvciBub3QgZmFsbGJhY2tfZmls
ZToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmYWxsYmFja19mdWxs
cGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ubm9ybXBhdGgoCi0gICAgICAgICAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKGZhbGxiYWNrX2RpciwgZmFsbGJhY2tfZmlsZSkpCi0gICAgICAgICAg
ICBpZiBmYWxsYmFja19mdWxscGF0aC5sb3dlcigpID09IGJhc2VsaW5lX3BhdGgubG93ZXIoKToK
LSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZmFsbGJhY2tfZGlyX3JlbHBh
dGggPSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoZmFsbGJhY2tfZGlyLCBzZWxmLl90YXJnZXRf
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpCi0gICAgICAgICAgICBpZiBmYWxsYmFja19kaXJfcmVs
cGF0aCA9PSAnJzoKLSAgICAgICAgICAgICAgICBmYWxsYmFja19kaXJfcmVscGF0aCA9ICc8Z2Vu
ZXJpYz4nCi0KLSAgICAgICAgICAgIG5ld19vdXRwdXQgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRf
YmluYXJ5X2ZpbGUobmV3X2Jhc2VsaW5lKQotICAgICAgICAgICAgZmFsbGJhY2tfb3V0cHV0ID0g
c2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKGZhbGxiYWNrX2Z1bGxwYXRoKQotICAg
ICAgICAgICAgaXNfaW1hZ2UgPSBiYXNlbGluZV9wYXRoLmxvd2VyKCkuZW5kc3dpdGgoJy5wbmcn
KQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2RpZmZfYmFzZWxpbmVzKG5ld19vdXRwdXQsIGZh
bGxiYWNrX291dHB1dCwgaXNfaW1hZ2UpOgotICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICBT
a2lwcGluZyAlcyAobWF0Y2hlcyAlcyknLCB0ZXN0LCBmYWxsYmFja19kaXJfcmVscGF0aCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAg
ICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX2RpZmZfYmFzZWxpbmVzKHNlbGYsIG91dHB1
dDEsIG91dHB1dDIsIGlzX2ltYWdlKToKLSAgICAgICAgIiIiQ2hlY2sgd2hldGhlciB0d28gYmFz
ZWxpbmVzIGFyZSBkaWZmZXJlbnQuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBvdXRwdXQx
LCBvdXRwdXQyOiBjb250ZW50cyBvZiB0aGUgYmFzZWxpbmVzIHRvIGNvbXBhcmUuCi0KLSAgICAg
ICAgUmV0dXJuczoKLSAgICAgICAgICBUcnVlIGlmIHR3byBmaWxlcyBhcmUgZGlmZmVyZW50IG9y
IGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbnMuCi0gICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgot
ICAgICAgICAiIiIKLQotICAgICAgICBpZiBpc19pbWFnZToKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLl9wb3J0LmRpZmZfaW1hZ2Uob3V0cHV0MSwgb3V0cHV0MilbMF0KLQotICAgICAgICByZXR1
cm4gc2VsZi5fcG9ydC5kb190ZXh0X3Jlc3VsdHNfZGlmZmVyKG91dHB1dDEsIG91dHB1dDIpCi0K
LSAgICBkZWYgX2RlbGV0ZV9iYXNlbGluZShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIlJl
bW92ZSB0aGUgZmlsZSBmcm9tIHJlcG9zaXRvcnkgYW5kIGRlbGV0ZSBpdCBmcm9tIGRpc2suCi0K
LSAgICAgICAgQXJnczoKLSAgICAgICAgICBmaWxlbmFtZTogZnVsbCBwYXRoIG9mIHRoZSBmaWxl
IHRvIGRlbGV0ZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgaWYgbm90IGZpbGVuYW1lIG9yIG5v
dCBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShmaWxlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgc2VsZi5fc2NtLmRlbGV0ZShmaWxlbmFtZSkKLQotICAgIGRlZiBfY3JlYXRlX2h0
bWxfYmFzZWxpbmVfZmlsZXMoc2VsZiwgYmFzZWxpbmVfZnVsbHBhdGgpOgotICAgICAgICAiIiJD
cmVhdGUgYmFzZWxpbmUgZmlsZXMgKG9sZCwgbmV3IGFuZCBkaWZmKSBpbiBodG1sIGRpcmVjdG9y
eS4KLQotICAgICAgICAgICBUaGUgZmlsZXMgYXJlIHVzZWQgdG8gY29tcGFyZSB0aGUgcmViYXNl
bGluaW5nIHJlc3VsdHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBiYXNlbGluZV9mdWxs
cGF0aDogZnVsbCBwYXRoIG9mIHRoZSBleHBlY3RlZCBiYXNlbGluZSBmaWxlLgotICAgICAgICAi
IiIKLQotICAgICAgICBiYXNlbGluZV9yZWxwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRo
KGJhc2VsaW5lX2Z1bGxwYXRoKQotICAgICAgICBfbG9nLmRlYnVnKCcgIEh0bWw6IGNyZWF0ZSBi
YXNlbGluZXMgZm9yICIlcyInLCBiYXNlbGluZV9yZWxwYXRoKQotCi0gICAgICAgIGlmIChub3Qg
YmFzZWxpbmVfZnVsbHBhdGgKLSAgICAgICAgICAgIG9yIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyhiYXNlbGluZV9mdWxscGF0aCkpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBIdG1s
OiBEb2VzIG5vdCBleGlzdDogIiVzIicsIGJhc2VsaW5lX2Z1bGxwYXRoKQotICAgICAgICAgICAg
cmV0dXJuCi0KLSAgICAgICAgaWYgbm90IHNlbGYuX3NjbS5leGlzdHMoYmFzZWxpbmVfcmVscGF0
aCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgIEh0bWw6IERvZXMgbm90IGV4aXN0IGluIHNj
bTogIiVzIicsIGJhc2VsaW5lX3JlbHBhdGgpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAg
ICAjIENvcHkgdGhlIG5ldyBiYXNlbGluZSB0byBodG1sIGRpcmVjdG9yeSBmb3IgcmVzdWx0IGNv
bXBhcmlzb24uCi0gICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5i
YXNlbmFtZShiYXNlbGluZV9mdWxscGF0aCkKLSAgICAgICAgbmV3X2ZpbGUgPSBnZXRfcmVzdWx0
X2ZpbGVfZnVsbHBhdGgoc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVj
dG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVfZmlsZW5hbWUsIHNlbGYuX3BsYXRmb3JtLCAnbmV3JykKLSAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS5jb3B5ZmlsZShiYXNlbGluZV9mdWxscGF0aCwgbmV3X2ZpbGUpCi0gICAgICAgIF9sb2cu
ZGVidWcoJyAgSHRtbDogY29waWVkIG5ldyBiYXNlbGluZSBmaWxlIGZyb20gIiVzIiB0byAiJXMi
LicsCi0gICAgICAgICAgICAgICAgICBiYXNlbGluZV9mdWxscGF0aCwgbmV3X2ZpbGUpCi0KLSAg
ICAgICAgIyBHZXQgdGhlIG9sZCBiYXNlbGluZSBmcm9tIHRoZSByZXBvc2l0b3J5IGFuZCBzYXZl
IHRvIHRoZSBodG1sIGRpcmVjdG9yeS4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0
ID0gc2VsZi5fc2NtLnNob3dfaGVhZChiYXNlbGluZV9yZWxwYXRoKQotICAgICAgICBleGNlcHQg
U2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9nLndhcm5pbmcoZSkKLSAgICAgICAgICAg
IG91dHB1dCA9ICIiCi0KLSAgICAgICAgaWYgKG5vdCBvdXRwdXQpIG9yIChvdXRwdXQudXBwZXIo
KS5yc3RyaXAoKS5lbmRzd2l0aCgnTk8gU1VDSCBGSUxFIE9SIERJUkVDVE9SWScpKToKLSAgICAg
ICAgICAgIF9sb2cud2FybmluZygnICBObyBiYXNlIGZpbGU6ICIlcyInLCBiYXNlbGluZV9mdWxs
cGF0aCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBiYXNlX2ZpbGUgPSBnZXRfcmVzdWx0
X2ZpbGVfZnVsbHBhdGgoc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVj
dG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vs
aW5lX2ZpbGVuYW1lLCBzZWxmLl9wbGF0Zm9ybSwgJ29sZCcpCi0gICAgICAgIGlmIGJhc2VfZmls
ZS51cHBlcigpLmVuZHN3aXRoKCcuUE5HJyk6Ci0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVt
LndyaXRlX2JpbmFyeV9maWxlKGJhc2VfZmlsZSwgb3V0cHV0KQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoYmFzZV9maWxlLCBvdXRw
dXQpCi0gICAgICAgIF9sb2cuZGVidWcoJyAgSHRtbDogY3JlYXRlZCBvbGQgYmFzZWxpbmUgZmls
ZTogIiVzIi4nLCBiYXNlX2ZpbGUpCi0KLSAgICAgICAgIyBHZXQgdGhlIGRpZmYgYmV0d2VlbiBv
bGQgYW5kIG5ldyBiYXNlbGluZXMgYW5kIHNhdmUgdG8gdGhlIGh0bWwgZGlyLgotICAgICAgICBk
aWZmX2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5fZmlsZXN5c3RlbSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
aHRtbF9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNlbGluZV9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtLCAnZGlmZicpCi0gICAgICAgIGhhc19kaWZmID0g
RmFsc2UKLSAgICAgICAgaWYgYmFzZWxpbmVfZmlsZW5hbWUudXBwZXIoKS5lbmRzd2l0aCgnLlRY
VCcpOgotICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5fc2NtLmRpZmZfZm9yX2ZpbGUoYmFzZWxp
bmVfcmVscGF0aCwgbG9nPV9sb2cpCi0gICAgICAgICAgICBpZiBvdXRwdXQ6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoZGlmZl9maWxlLCBvdXRwdXQp
Ci0gICAgICAgICAgICAgICAgaGFzX2RpZmYgPSBUcnVlCi0gICAgICAgIGVsaWYgYmFzZWxpbmVf
ZmlsZW5hbWUudXBwZXIoKS5lbmRzd2l0aCgnLlBORycpOgotICAgICAgICAgICAgb2xkX2ZpbGUg
PSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5fZmlsZXN5c3RlbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuaHRtbF9k
aXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYXNlbGluZV9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtLCAnb2xkJykKLSAgICAgICAgICAgIG5ld19maWxl
ID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmh0bWxf
ZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwgJ25ldycpCi0gICAgICAgICAgICBfbG9nLmRl
YnVnKCcgSHRtbDogZGlmZmluZyAiJXMiIGFuZCAiJXMiJywgb2xkX2ZpbGUsIG5ld19maWxlKQot
ICAgICAgICAgICAgb2xkX291dHB1dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmls
ZShvbGRfZmlsZSkKLSAgICAgICAgICAgIG5ld19vdXRwdXQgPSBzZWxmLl9maWxlc3lzdGVtLnJl
YWRfYmluYXJ5X2ZpbGUobmV3X2ZpbGUpCi0gICAgICAgICAgICBpbWFnZV9kaWZmID0gc2VsZi5f
cG9ydC5kaWZmX2ltYWdlKG9sZF9vdXRwdXQsIG5ld19vdXRwdXQpWzBdCi0gICAgICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLndyaXRlX2JpbmFyeV9maWxlKGRpZmZfZmlsZSwgaW1hZ2VfZGlmZikK
LQotICAgICAgICBpZiBoYXNfZGlmZjoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgSHRtbDog
Y3JlYXRlZCBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyIuJywgZGlmZl9maWxlKQotCi0KLWNsYXNz
IEh0bWxHZW5lcmF0b3Iob2JqZWN0KToKLSAgICAiIiJDbGFzcyB0byBnZW5lcmF0ZSByZWJhc2Vs
aW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gaHRtbC4iIiIKLQotICAgIEhUTUxfUkVCQVNFTElORSA9
ICgnPGh0bWw+JwotICAgICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JwotICAgICAgICAgICAg
ICAgICAgICAgICAnPHN0eWxlPicKLSAgICAgICAgICAgICAgICAgICAgICAgJ2JvZHkge2ZvbnQt
ZmFtaWx5OiBzYW5zLXNlcmlmO30nCi0gICAgICAgICAgICAgICAgICAgICAgICcubWFpblRhYmxl
IHtiYWNrZ3JvdW5kOiAjNjY2NjY2O30nCi0gICAgICAgICAgICAgICAgICAgICAgICcubWFpblRh
YmxlIHRkICwgLm1haW5UYWJsZSB0aCB7YmFja2dyb3VuZDogd2hpdGU7fScKLSAgICAgICAgICAg
ICAgICAgICAgICAgJy5kZXRhaWwge21hcmdpbi1sZWZ0OiAxMHB4OyBtYXJnaW4tdG9wOiAzcHg7
fScKLSAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+JwotICAgICAgICAgICAgICAgICAg
ICAgICAnPHRpdGxlPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFyaXNvbiAoJSh0aW1lKXMpJwot
ICAgICAgICAgICAgICAgICAgICAgICAnPC90aXRsZT4nCi0gICAgICAgICAgICAgICAgICAgICAg
ICc8L2hlYWQ+JwotICAgICAgICAgICAgICAgICAgICAgICAnPGJvZHk+JwotICAgICAgICAgICAg
ICAgICAgICAgICAnPGgyPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFyaXNvbiAoJSh0aW1lKXMp
PC9oMj4nCi0gICAgICAgICAgICAgICAgICAgICAgICclKGJvZHkpcycKLSAgICAgICAgICAgICAg
ICAgICAgICAgJzwvYm9keT4nCi0gICAgICAgICAgICAgICAgICAgICAgICc8L2h0bWw+JykKLSAg
ICBIVE1MX05PX1JFQkFTRUxJTklOR19URVNUUyA9ICgKLSAgICAgICAgJzxwPk5vIHRlc3RzIGZv
dW5kIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuPC9wPicpCi0gICAgSFRNTF9UQUJMRV9URVNUID0g
KCc8dGFibGUgY2xhc3M9Im1haW5UYWJsZSIgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01PicK
LSAgICAgICAgICAgICAgICAgICAgICAgJyVzPC90YWJsZT48YnI+JykKLSAgICBIVE1MX1RSX1RF
U1QgPSAoJzx0cj4nCi0gICAgICAgICAgICAgICAgICAgICc8dGggc3R5bGU9ImJhY2tncm91bmQt
Y29sb3I6ICNDREVDREU7IGJvcmRlci1ib3R0b206ICcKLSAgICAgICAgICAgICAgICAgICAgJzFw
eCBzb2xpZCBibGFjazsgZm9udC1zaXplOiAxOHB0OyBmb250LXdlaWdodDogYm9sZCIgJwotICAg
ICAgICAgICAgICAgICAgICAnY29sc3Bhbj0iNSI+JwotICAgICAgICAgICAgICAgICAgICAnPGEg
aHJlZj0iJXMiPiVzPC9hPicKLSAgICAgICAgICAgICAgICAgICAgJzwvdGg+JwotICAgICAgICAg
ICAgICAgICAgICAnPC90cj4nKQotICAgIEhUTUxfVEVTVF9ERVRBSUwgPSAoJzxkaXYgY2xhc3M9
ImRldGFpbCI+JwotICAgICAgICAgICAgICAgICAgICAgICAgJzx0cj4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPkJhc2VsaW5lPC90aD4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPlBsYXRmb3JtPC90aD4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAnPHRoIHdpZHRoPSIyMDAiPk9sZDwvdGg+JwotICAgICAgICAgICAgICAgICAg
ICAgICAgJzx0aCB3aWR0aD0iMjAwIj5OZXc8L3RoPicKLSAgICAgICAgICAgICAgICAgICAgICAg
ICc8dGggd2lkdGg9IjE1MCI+RGlmZmVyZW5jZTwvdGg+JwotICAgICAgICAgICAgICAgICAgICAg
ICAgJzwvdHI+JwotICAgICAgICAgICAgICAgICAgICAgICAgJyVzJwotICAgICAgICAgICAgICAg
ICAgICAgICAgJzwvZGl2PicpCi0gICAgSFRNTF9URF9OT0xJTksgPSAnPHRkIGFsaWduPWNlbnRl
cj48YT4lczwvYT48L3RkPicKLSAgICBIVE1MX1REX0xJTksgPSAnPHRkIGFsaWduPWNlbnRlcj48
YSBocmVmPSIlKHVyaSlzIj4lKG5hbWUpczwvYT48L3RkPicKLSAgICBIVE1MX1REX0xJTktfSU1H
ID0gKCc8dGQ+PGEgaHJlZj0iJSh1cmkpcyI+JwotICAgICAgICAgICAgICAgICAgICAgICAgJzxp
bWcgc3R5bGU9IndpZHRoOiAyMDAiIHNyYz0iJSh1cmkpcyIgLz48L2E+PC90ZD4nKQotICAgIEhU
TUxfVFIgPSAnPHRyPiVzPC90cj4nCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9y
dCwgdGFyZ2V0X3BvcnQsIG9wdGlvbnMsIHBsYXRmb3JtcywgcmViYXNlbGluaW5nX3Rlc3RzKToK
LSAgICAgICAgc2VsZi5faHRtbF9kaXJlY3RvcnkgPSBvcHRpb25zLmh0bWxfZGlyZWN0b3J5Ci0g
ICAgICAgIHNlbGYuX2hvc3QgPSBob3N0Ci0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBob3N0
LmZpbGVzeXN0ZW0KLSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi5fdGFy
Z2V0X3BvcnQgPSB0YXJnZXRfcG9ydAotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwot
ICAgICAgICBzZWxmLl9wbGF0Zm9ybXMgPSBwbGF0Zm9ybXMKLSAgICAgICAgc2VsZi5fcmViYXNl
bGluaW5nX3Rlc3RzID0gcmViYXNlbGluaW5nX3Rlc3RzCi0gICAgICAgIHNlbGYuX2h0bWxfZmls
ZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihvcHRpb25zLmh0bWxfZGlyZWN0b3J5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmUuaHRt
bCcpCi0KLSAgICBkZWYgYWJzcGF0aF90b191cmkoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICAi
IiJDb252ZXJ0cyBhbiBhYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZTogVVJJLiIiIgotICAgICAgICBy
ZXR1cm4gcGF0aC5hYnNwYXRoX3RvX3VyaShmaWxlbmFtZSwgc2VsZi5fcG9ydC5fZXhlY3V0aXZl
KQotCi0gICAgZGVmIGdlbmVyYXRlX2h0bWwoc2VsZik6Ci0gICAgICAgICIiIkdlbmVyYXRlIGh0
bWwgZmlsZSBmb3IgcmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJpc29uLiIiIgotCi0gICAgICAg
IF9sb2cuZGVidWcoJ0dlbmVyYXRpbmcgaHRtbCBmaWxlJykKLQotICAgICAgICBodG1sX2JvZHkg
PSAnJwotICAgICAgICBpZiBub3Qgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgotICAgICAgICAg
ICAgaHRtbF9ib2R5ICs9IHNlbGYuSFRNTF9OT19SRUJBU0VMSU5JTkdfVEVTVFMKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMp
Ci0gICAgICAgICAgICB0ZXN0cy5zb3J0KCkKLQotICAgICAgICAgICAgdGVzdF9ubyA9IDEKLSAg
ICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWco
J1Rlc3QgJWQ6ICVzJywgdGVzdF9ubywgdGVzdCkKLSAgICAgICAgICAgICAgICBodG1sX2JvZHkg
Kz0gc2VsZi5fZ2VuZXJhdGVfaHRtbF9mb3Jfb25lX3Rlc3QodGVzdCkKLQotICAgICAgICBodG1s
ID0gc2VsZi5IVE1MX1JFQkFTRUxJTkUgJSAoeyd0aW1lJzogdGltZS5hc2N0aW1lKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvZHknOiBodG1sX2JvZHl9KQot
ICAgICAgICBfbG9nLmRlYnVnKGh0bWwpCi0KLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0
ZV90ZXh0X2ZpbGUoc2VsZi5faHRtbF9maWxlLCBodG1sKQotICAgICAgICBfbG9nLmRlYnVnKCdC
YXNlbGluZSBjb21wYXJpc29uIGh0bWwgZ2VuZXJhdGVkIGF0ICIlcyInLCBzZWxmLl9odG1sX2Zp
bGUpCi0KLSAgICBkZWYgc2hvd19odG1sKHNlbGYpOgotICAgICAgICAiIiJMYXVuY2ggdGhlIHJl
YmFzZWxpbmluZyBodG1sIGluIGJyd29zZXIuIiIiCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnTGF1
bmNoaW5nIGh0bWw6ICIlcyInLCBzZWxmLl9odG1sX2ZpbGUpCi0gICAgICAgIHNlbGYuX2hvc3Qu
dXNlci5vcGVuX3VybChzZWxmLl9odG1sX2ZpbGUpCi0gICAgICAgIF9sb2cuZGVidWcoJ0h0bWwg
bGF1bmNoZWQuJykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYmFzZWxpbmVfbGlua3Moc2VsZiwgdGVz
dF9iYXNlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybSk6Ci0gICAgICAgICIiIkdlbmVyYXRlIGxpbmtz
IGZvciBiYXNlbGluZSByZXN1bHRzIChvbGQsIG5ldyBhbmQgZGlmZikuCi0KLSAgICAgICAgQXJn
czoKLSAgICAgICAgICB0ZXN0X2Jhc2VuYW1lOiBiYXNlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0Ci0g
ICAgICAgICAgc3VmZml4OiBiYXNlbGluZSBmaWxlIHN1ZmZpeGVzOiAnLnR4dCcsICcucG5nJwot
ICAgICAgICAgIHBsYXRmb3JtOiB3aW4sIGxpbnV4IG9yIG1hYwotCi0gICAgICAgIFJldHVybnM6
Ci0gICAgICAgICAgaHRtbCBsaW5rcyBmb3Igc2hvd2luZyBiYXNlbGluZSByZXN1bHRzIChvbGQs
IG5ldyBhbmQgZGlmZikKLSAgICAgICAgIiIiCi0KLSAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUg
PSAnJXMtZXhwZWN0ZWQlcycgJSAodGVzdF9iYXNlbmFtZSwgc3VmZml4KQotICAgICAgICBfbG9n
LmRlYnVnKCcgICAgYmFzZWxpbmUgZmlsZW5hbWU6ICIlcyInLCBiYXNlbGluZV9maWxlbmFtZSkK
LQotICAgICAgICBuZXdfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9maWxl
c3lzdGVtLCBzZWxmLl9odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBsYXRmb3JtLCAnbmV3JykKLSAg
ICAgICAgX2xvZy5kZWJ1ZygnICAgIE5ldyBiYXNlbGluZSBmaWxlOiAiJXMiJywgbmV3X2ZpbGUp
Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhuZXdfZmlsZSk6Ci0gICAg
ICAgICAgICBfbG9nLmRlYnVnKCcgICAgTm8gbmV3IGJhc2VsaW5lIGZpbGU6ICIlcyInLCBuZXdf
ZmlsZSkKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIG9sZF9maWxlID0gZ2V0X3Jl
c3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX2h0bWxfZGlyZWN0b3J5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9m
aWxlbmFtZSwgcGxhdGZvcm0sICdvbGQnKQotICAgICAgICBfbG9nLmRlYnVnKCcgICAgT2xkIGJh
c2VsaW5lIGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKLSAgICAgICAgaWYgc3VmZml4ID09ICcucG5n
JzoKLSAgICAgICAgICAgIGh0bWxfdGRfbGluayA9IHNlbGYuSFRNTF9URF9MSU5LX0lNRwotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgaHRtbF90ZF9saW5rID0gc2VsZi5IVE1MX1REX0xJTksK
LQotICAgICAgICBsaW5rcyA9ICcnCi0gICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3Rz
KG9sZF9maWxlKToKLSAgICAgICAgICAgIGxpbmtzICs9IGh0bWxfdGRfbGluayAlIHsKLSAgICAg
ICAgICAgICAgICAndXJpJzogc2VsZi5hYnNwYXRoX3RvX3VyaShvbGRfZmlsZSksCi0gICAgICAg
ICAgICAgICAgJ25hbWUnOiBiYXNlbGluZV9maWxlbmFtZX0KLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoJyAgICBObyBvbGQgYmFzZWxpbmUgZmlsZTogIiVzIicsIG9sZF9m
aWxlKQotICAgICAgICAgICAgbGlua3MgKz0gc2VsZi5IVE1MX1REX05PTElOSyAlICcnCi0KLSAg
ICAgICAgbGlua3MgKz0gaHRtbF90ZF9saW5rICUgeyd1cmknOiBzZWxmLmFic3BhdGhfdG9fdXJp
KG5ld19maWxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogYmFz
ZWxpbmVfZmlsZW5hbWV9Ci0KLSAgICAgICAgZGlmZl9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1
bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX2h0bWxfZGlyZWN0b3J5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBs
YXRmb3JtLCAnZGlmZicpCi0gICAgICAgIF9sb2cuZGVidWcoJyAgICBCYXNlbGluZSBkaWZmIGZp
bGU6ICIlcyInLCBkaWZmX2ZpbGUpCi0gICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3Rz
KGRpZmZfZmlsZSk6Ci0gICAgICAgICAgICBsaW5rcyArPSBodG1sX3RkX2xpbmsgJSB7J3VyaSc6
IHNlbGYuYWJzcGF0aF90b191cmkoZGlmZl9maWxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnbmFtZSc6ICdEaWZmJ30KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IF9sb2cuZGVidWcoJyAgICBObyBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZmX2ZpbGUp
Ci0gICAgICAgICAgICBsaW5rcyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgJycKLQotICAgICAg
ICByZXR1cm4gbGlua3MKLQotICAgIGRlZiBfZ2VuZXJhdGVfaHRtbF9mb3Jfb25lX3Rlc3Qoc2Vs
ZiwgdGVzdCk6Ci0gICAgICAgICIiIkdlbmVyYXRlIGh0bWwgZm9yIG9uZSByZWJhc2VsaW5pbmcg
dGVzdC4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRlc3Q6IGxheW91dCB0ZXN0IG5hbWUK
LQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIGh0bWwgdGhhdCBjb21wYXJlcyBiYXNlbGlu
ZSByZXN1bHRzIGZvciB0aGUgdGVzdC4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgdGVzdF9iYXNl
bmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uYmFzZW5hbWUoc2VsZi5fZmlsZXN5c3RlbS5zcGxpdGV4
dCh0ZXN0KVswXSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnICBiYXNlbmFtZTogIiVzIicsIHRlc3Rf
YmFzZW5hbWUpCi0gICAgICAgIHJvd3MgPSBbXQotICAgICAgICBmb3Igc3VmZml4IGluIEJBU0VM
SU5FX1NVRkZJWEVTOgotICAgICAgICAgICAgaWYgc3VmZml4ID09ICcuY2hlY2tzdW0nOgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgQ2hlY2tp
bmcgJXMgZmlsZXMnLCBzdWZmaXgpCi0gICAgICAgICAgICBmb3IgcGxhdGZvcm0gaW4gc2VsZi5f
cGxhdGZvcm1zOgotICAgICAgICAgICAgICAgIGxpbmtzID0gc2VsZi5fZ2VuZXJhdGVfYmFzZWxp
bmVfbGlua3ModGVzdF9iYXNlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybSkKLSAgICAgICAgICAgICAg
ICBpZiBsaW5rczoKLSAgICAgICAgICAgICAgICAgICAgcm93ID0gc2VsZi5IVE1MX1REX05PTElO
SyAlIHNlbGYuX2dldF9iYXNlbGluZV9yZXN1bHRfdHlwZShzdWZmaXgpCi0gICAgICAgICAgICAg
ICAgICAgIHJvdyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgcGxhdGZvcm0KLSAgICAgICAgICAg
ICAgICAgICAgcm93ICs9IGxpbmtzCi0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAg
ICBodG1sIHJvdzogJXMnLCByb3cpCi0KLSAgICAgICAgICAgICAgICAgICAgcm93cy5hcHBlbmQo
c2VsZi5IVE1MX1RSICUgcm93KQotCi0gICAgICAgIGlmIHJvd3M6Ci0gICAgICAgICAgICB0ZXN0
X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fdGFyZ2V0X3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpLCB0ZXN0KQotICAgICAgICAgICAgaHRtbCA9IHNlbGYuSFRNTF9UUl9URVNUICUg
KHNlbGYuYWJzcGF0aF90b191cmkodGVzdF9wYXRoKSwgdGVzdCkKLSAgICAgICAgICAgIGh0bWwg
Kz0gc2VsZi5IVE1MX1RFU1RfREVUQUlMICUgJyAnLmpvaW4ocm93cykKLQotICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnICAgIGh0bWwgZm9yIHRlc3Q6ICVzJywgaHRtbCkKLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLkhUTUxfVEFCTEVfVEVTVCAlIGh0bWwKLQotICAgICAgICByZXR1cm4gJycKLQot
ICAgIGRlZiBfZ2V0X2Jhc2VsaW5lX3Jlc3VsdF90eXBlKHNlbGYsIHN1ZmZpeCk6Ci0gICAgICAg
ICIiIk5hbWUgb2YgdGhlIGJhc2VsaW5lIHJlc3VsdCB0eXBlLiIiIgotCi0gICAgICAgIGlmIHN1
ZmZpeCA9PSAnLnBuZyc6Ci0gICAgICAgICAgICByZXR1cm4gJ1BpeGVsJwotICAgICAgICBlbGlm
IHN1ZmZpeCA9PSAnLnR4dCc6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlbmRlciBUcmVlJwotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICdPdGhlcicKLQotCi1kZWYgZ2V0X2hvc3Rf
cG9ydF9vYmplY3QocG9ydF9mYWN0b3J5LCBvcHRpb25zKToKLSAgICAiIiJSZXR1cm4gYSBwb3J0
IG9iamVjdCBmb3IgdGhlIHBsYXRmb3JtIHdlJ3JlIHJ1bm5pbmcgb24uIiIiCi0gICAgIyBXZSB3
YW50IHRoZSBJbWFnZURpZmYgbG9naWMgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgY2hyb21pdW0gYm90
cywgc28gd2UKLSAgICAjIGZvcmNlIHRoZSB1c2Ugb2YgYSBDaHJvbWl1bSBwb3J0LiAgV2Ugd2ls
bCBsb29rIGZvciBlaXRoZXIgRGVidWcgb3IKLSAgICAjIFJlbGVhc2UgdmVyc2lvbnMuCi0gICAg
b3B0aW9ucy5jb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCi0gICAgb3B0aW9ucy5jaHJvbWl1bSA9
IFRydWUKLSAgICBwb3J0X29iaiA9IHBvcnRfZmFjdG9yeS5nZXQob3B0aW9ucz1vcHRpb25zKQot
ICAgIGlmIG5vdCBwb3J0X29iai5jaGVja19pbWFnZV9kaWZmKG92ZXJyaWRlX3N0ZXA9Tm9uZSwg
bG9nZ2luZz1GYWxzZSk6Ci0gICAgICAgIF9sb2cuZGVidWcoJ05vIHJlbGVhc2UgdmVyc2lvbiBv
ZiB0aGUgaW1hZ2UgZGlmZiBiaW5hcnkgd2FzIGZvdW5kLicpCi0gICAgICAgIG9wdGlvbnMuY29u
ZmlndXJhdGlvbiA9ICJEZWJ1ZyIKLSAgICAgICAgcG9ydF9vYmogPSBwb3J0X2ZhY3RvcnkuZ2V0
KG9wdGlvbnM9b3B0aW9ucykKLSAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2ltYWdlX2Rp
ZmYob3ZlcnJpZGVfc3RlcD1Ob25lLCBsb2dnaW5nPUZhbHNlKToKLSAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJ05vIHZlcnNpb24gb2YgaW1hZ2UgZGlmZiB3YXMgZm91bmQuIENoZWNrIHlvdXIgYnVp
bGQuJykKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdGb3VuZCB0aGUgZGVidWcgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgZGlmZiBi
aW5hcnkuJykKLSAgICBlbHNlOgotICAgICAgICBfbG9nLmRlYnVnKCdGb3VuZCB0aGUgcmVsZWFz
ZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBkaWZmIGJpbmFyeS4nKQotICAgIHJldHVybiBwb3J0X29i
agotCi0KLWRlZiBwYXJzZV9vcHRpb25zKGFyZ3MpOgotICAgICIiIlBhcnNlIG9wdGlvbnMgYW5k
IHJldHVybiBhIHBhaXIgb2YgaG9zdCBvcHRpb25zIGFuZCB0YXJnZXQgb3B0aW9ucy4iIiIKLSAg
ICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2luY2x1
ZGUgZGVidWctbGV2ZWwgbG9nZ2luZy4nKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctcScsICctLXF1aWV0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdz
dG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3VwcHJlc3Mg
cmVzdWx0IEhUTUwgdmlld2luZycpCi0KLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1w
JywgJy0tcGxhdGZvcm1zJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1O
b25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnQ29tbWEgZGVsaW1pdGVk
IGxpc3Qgb2YgcGxhdGZvcm1zICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3RoYXQgbmVlZCByZWJhc2VsaW5pbmcuJykpCi0KLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRp
b24oJy11JywgJy0tYXJjaGl2ZV91cmwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PSgnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtLycKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dF90ZXN0X3Jlc3VsdHMnKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1VybCB0byBmaW5kIHRoZSBsYXlvdXQg
dGVzdCByZXN1bHQgYXJjaGl2ZScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyBmaWxlLicpKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLVUnLCAnLS1mb3JjZV9h
cmNoaXZlX3VybCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdVcmwgb2Yg
cmVzdWx0IHppcCBmaWxlLiBUaGlzIG9wdGlvbiBpcyBmb3IgZGVidWdnaW5nICcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B1cnBvc2VzJykpCi0KLSAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYmFja3VwJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1doZXRo
ZXIgb3Igbm90IHRvIGJhY2t1cCB0aGUgb3JpZ2luYWwgdGVzdCcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyBleHBlY3RhdGlvbnMgZmlsZSBhZnRlciByZWJhc2VsaW5lLicp
KQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWh0bWxfZGlyZWN0b3J5
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0oJ1RoZSBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgdGhlIHJl
c3VsdHMgZm9yICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxp
bmluZyBjb21wYXJpc29uLicpKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCcnLCAn
LS11c2VfZHJ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90
cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1VzZSBJbWFnZURpZmYgZnJvbSBEdW1wUmVu
ZGVyVHJlZSBpbnN0ZWFkICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29m
IGltYWdlX2RpZmYgZm9yIHBpeGVsIHRlc3RzLicpKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCctdycsICctLXdlYmtpdF9jYW5hcnknLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnREVQUkVD
QVRFRC4gVGhpcyBmbGFnIG5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICcgIFRoZSBjYW5hcmllcyBhcmUgYWx3YXlzIHVzZWQuJykp
Ci0KLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJycsICctLXRhcmdldC1wbGF0Zm9ybScs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2Nocm9taXVtJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1RoZSB0YXJnZXQgcGxhdGZvcm0gdG8gcmVi
YXNlbGluZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoIm1hYyIsICJj
aHJvbWl1bSIsICJxdCIsIGV0Yy4pLiBEZWZhdWx0cyAnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICd0byAiY2hyb21pdW0iLicpKQotCi0gICAgb3B0aW9ucyA9IG9wdGlvbl9w
YXJzZXIucGFyc2VfYXJncyhhcmdzKVswXQotICAgIGlmIG9wdGlvbnMud2Via2l0X2NhbmFyeToK
LSAgICAgICAgcHJpbnQgIi13Ly0td2Via2l0LWNhbmFyeSBpcyBubyBsb25nZXIgbmVjZXNzYXJ5
LCBpZ25vcmluZy4iCi0KLSAgICB0YXJnZXRfb3B0aW9ucyA9IGNvcHkuY29weShvcHRpb25zKQot
ICAgIGlmIG9wdGlvbnMudGFyZ2V0X3BsYXRmb3JtID09ICdjaHJvbWl1bSc6Ci0gICAgICAgIHRh
cmdldF9vcHRpb25zLmNocm9taXVtID0gVHJ1ZQotICAgIG9wdGlvbnMudG9sZXJhbmNlID0gMAot
Ci0gICAgcmV0dXJuIChvcHRpb25zLCB0YXJnZXRfb3B0aW9ucykKLQotCi1jbGFzcyBEZWJ1Z0xv
Z0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKLSAgICBudW1fZmFpbHVyZXMgPSAwCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxm
KQotICAgICAgICBzZWxmLmZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKGZtdD0oJyUoYXNj
dGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubyktM2QgJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnKSkK
LSAgICAgICAgc2VsZi5zZXRGb3JtYXR0ZXIoc2VsZi5mb3JtYXR0ZXIpCi0KLSAgICBkZWYgZW1p
dChzZWxmLCByZWNvcmQpOgotICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5G
TzoKLSAgICAgICAgICAgIHNlbGYubnVtX2ZhaWx1cmVzICs9IDEKLSAgICAgICAgcHJpbnQgc2Vs
Zi5mb3JtYXQocmVjb3JkKQotCi0KLWNsYXNzIE5vcm1hbExvZ0hhbmRsZXIobG9nZ2luZy5IYW5k
bGVyKToKLSAgICBsYXN0X2xldmVsbm8gPSBOb25lCi0gICAgbnVtX2ZhaWx1cmVzID0gMAotCi0g
ICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKLSAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBs
b2dnaW5nLklORk86Ci0gICAgICAgICAgICBzZWxmLm51bV9mYWlsdXJlcyArPSAxCi0gICAgICAg
IGlmIHNlbGYubGFzdF9sZXZlbG5vICE9IHJlY29yZC5sZXZlbG5vOgotICAgICAgICAgICAgcHJp
bnQKLSAgICAgICAgICAgIHNlbGYubGFzdF9sZXZlbG5vID0gcmVjb3JkLmxldmVsbm8KLSAgICAg
ICAgcHJlZml4ID0gJycKLSAgICAgICAgbXNnID0gcmVjb3JkLmdldE1lc3NhZ2UoKQotICAgICAg
ICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTyBhbmQgbXNnOgotICAgICAgICAgICAg
cHJlZml4ID0gJyVzOiAnICUgcmVjb3JkLmxldmVsbmFtZQotICAgICAgICBwcmludCAnJXMlcycg
JSAocHJlZml4LCBtc2cpCi0KLQotZGVmIG1haW4oYXJncyk6Ci0gICAgIiIiQm9vdHN0cmFwIGZ1
bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgb2JqZWN0IHJlZmVyZW5jZXMgd2UgbmVlZCBhbmQgY2Fs
bHMgcmVhbF9tYWluKCkuIiIiCi0gICAgb3B0aW9ucywgdGFyZ2V0X29wdGlvbnMgPSBwYXJzZV9v
cHRpb25zKGFyZ3MpCi0KLSAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCi0gICAgbG9n
Z2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKLSAgICBpZiBvcHRpb25zLnZlcmJvc2U6Ci0gICAg
ICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKLSAgICAgICAgbG9nX2hhbmRsZXIgPSBEZWJ1
Z0xvZ0hhbmRsZXIoKQotICAgIGVsc2U6Ci0gICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5G
TwotICAgICAgICBsb2dfaGFuZGxlciA9IE5vcm1hbExvZ0hhbmRsZXIoKQotCi0gICAgbG9nZ2Vy
ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQotICAgIGxvZ2dlci5zZXRMZXZlbChsb2dfbGV2ZWwpCi0g
ICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nX2hhbmRsZXIpCi0KLSAgICBob3N0ID0gSG9zdCgpCi0g
ICAgaG9zdC5faW5pdGlhbGl6ZV9zY20oKQotICAgIHRhcmdldF9wb3J0X29iaiA9IGhvc3QucG9y
dF9mYWN0b3J5LmdldChOb25lLCB0YXJnZXRfb3B0aW9ucykKLSAgICBob3N0X3BvcnRfb2JqID0g
Z2V0X2hvc3RfcG9ydF9vYmplY3QoaG9zdC5wb3J0X2ZhY3RvcnksIG9wdGlvbnMpCi0gICAgaWYg
bm90IGhvc3RfcG9ydF9vYmogb3Igbm90IHRhcmdldF9wb3J0X29iajoKLSAgICAgICAgcmV0dXJu
IDEKLQotICAgIHVybF9mZXRjaGVyID0gdXJsZmV0Y2hlci5VcmxGZXRjaGVyKGhvc3QuZmlsZXN5
c3RlbSkKLQotICAgICMgV2UgdXNlIHRoZSBkZWZhdWx0IHppcCBmYWN0b3J5IG1ldGhvZC4KLSAg
ICB6aXBfZmFjdG9yeSA9IE5vbmUKLQotICAgICMgRklYTUU6IFNDTSBtb2R1bGUgZG9lc24ndCBo
YW5kbGUgcGF0aHMgdGhhdCBhcmVuJ3QgcmVsYXRpdmUgdG8gdGhlIGNoZWNrb3V0X3Jvb3QgY29u
c2lzdGVudGx5LgotICAgIGhvc3RfcG9ydF9vYmouX2ZpbGVzeXN0ZW0uY2hkaXIoaG9zdC5zY20o
KS5jaGVja291dF9yb290KQotCi0gICAgcmV0X2NvZGUgPSByZWFsX21haW4oaG9zdCwgb3B0aW9u
cywgdGFyZ2V0X29wdGlvbnMsIGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgdXJsX2Zl
dGNoZXIsIHppcF9mYWN0b3J5KQotICAgIGlmIG5vdCByZXRfY29kZSBhbmQgbG9nX2hhbmRsZXIu
bnVtX2ZhaWx1cmVzOgotICAgICAgICByZXRfY29kZSA9IDEKLSAgICBwcmludCAnJwotICAgIGlm
IHJldF9jb2RlOgotICAgICAgICBwcmludCAnUmViYXNlbGluaW5nIGZhaWxlZC4nCi0gICAgZWxz
ZToKLSAgICAgICAgcHJpbnQgJ1JlYmFzZWxpbmluZyBzdWNjZWVkZWQuJwotICAgIHJldHVybiBy
ZXRfY29kZQotCi0KLWRlZiByZWFsX21haW4oaG9zdCwgb3B0aW9ucywgdGFyZ2V0X29wdGlvbnMs
IGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIsIHppcF9mYWN0b3J5
KToKLSAgICAiIiJNYWluIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5lcy4gVGhlIFJl
YmFzZWxpbmVyIG9iamVjdCB1c2VzIHR3bwotICAgIGRpZmZlcmVudCBQb3J0IG9iamVjdHMgLSBv
bmUgdG8gcmVwcmVzZW50IHRoZSBtYWNoaW5lIHRoZSBvYmplY3QgaXMgcnVubmluZwotICAgIG9u
LCBhbmQgb25lIHRvIHJlcHJlc2VudCB0aGUgcG9ydCB3aG9zZSBleHBlY3RhdGlvbnMgYXJlIGJl
aW5nIHVwZGF0ZWQuCi0gICAgRS5nLiwgeW91IGNhbiBydW4gdGhlIHNjcmlwdCBvbiBhIG1hYyBh
bmQgcmViYXNlbGluZSB0aGUgJ3dpbicgcG9ydC4KLQotICAgIEFyZ3M6Ci0gICAgICAgIGhvc3Q6
IEhvc3Qgb2JqZWN0Ci0gICAgICAgIG9wdGlvbnM6IGNvbW1hbmQtbGluZSBhcmd1bWVudCB1c2Vk
IGZvciB0aGUgaG9zdF9wb3J0X29iaiAoc2VlIGJlbG93KQotICAgICAgICB0YXJnZXRfb3B0aW9u
czogY29tbWFuZF9saW5lIGFyZ3VtZW50IHVzZWQgZm9yIHRoZSB0YXJnZXRfcG9ydF9vYmouCi0g
ICAgICAgICAgICBUaGlzIG9iamVjdCBtYXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgdmFsdWVz
IHRoYW4gfG9wdGlvbnN8LgotICAgICAgICBob3N0X3BvcnRfb2JqOiBhIFBvcnQgb2JqZWN0IGZv
ciB0aGUgcGxhdGZvcm0gdGhlIHNjcmlwdCBpcyBydW5uaW5nCi0gICAgICAgICAgICBvbi4gVGhp
cyBpcyB1c2VkIHRvIHByb2R1Y2UgaW1hZ2UgYW5kIHRleHQgZGlmZnMsIG1vc3RseSwgYW5kCi0g
ICAgICAgICAgICBpcyB1c3VhbGx5IGFjcXVpcmVkIGZyb20gZ2V0X2hvc3RfcG9ydF9vYmooKS4K
LSAgICAgICAgdGFyZ2V0X3BvcnRfb2JqOiBhIFBvcnQgb2JqIHJlcHJlc2VudGluZyB0aGUgcG9y
dCBnZXR0aW5nIHJlYmFzZWxpbmVkLgotICAgICAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGZpbmQg
dGhlIGV4cGVjdGF0aW9ucyBmaWxlLCB0aGUgYmFzZWxpbmUgcGF0aHMsCi0gICAgICAgICAgICBl
dGMuCi0gICAgICAgIHVybF9mZXRjaGVyOiBvYmplY3QgdXNlZCB0byBkb3dubG9hZCB0aGUgYnVp
bGQgYXJjaGl2ZXMgZnJvbSB0aGUgYm90cwotICAgICAgICB6aXBfZmFjdG9yeTogZmFjdG9yeSBm
dW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB6aXAgZmlsZSBvYmplY3RzIGZvcgotICAgICAgICAgICAg
dGhlIGFyY2hpdmVzLgotICAgICIiIgotICAgIG9wdGlvbnMuaHRtbF9kaXJlY3RvcnkgPSBzZXR1
cF9odG1sX2RpcmVjdG9yeShob3N0X3BvcnRfb2JqLl9maWxlc3lzdGVtLCBvcHRpb25zLmh0bWxf
ZGlyZWN0b3J5KQotICAgIGFsbF9wbGF0Zm9ybXMgPSB0YXJnZXRfcG9ydF9vYmouYWxsX2Jhc2Vs
aW5lX3ZhcmlhbnRzKCkKLSAgICBpZiBvcHRpb25zLnBsYXRmb3JtczoKLSAgICAgICAgYmFpbCA9
IEZhbHNlCi0gICAgICAgIGZvciBwbGF0Zm9ybSBpbiBvcHRpb25zLnBsYXRmb3JtczoKLSAgICAg
ICAgICAgIGlmIG5vdCBwbGF0Zm9ybSBpbiBhbGxfcGxhdGZvcm1zOgotICAgICAgICAgICAgICAg
IF9sb2cuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIlcyInICUgKHBsYXRmb3JtKSkKLSAgICAg
ICAgICAgICAgICBiYWlsID0gVHJ1ZQotICAgICAgICBpZiBiYWlsOgotICAgICAgICAgICAgcmV0
dXJuIDEKLSAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMgPSBvcHRpb25zLnBsYXRmb3Jtcwot
ICAgIGVsc2U6Ci0gICAgICAgIHJlYmFzZWxpbmVfcGxhdGZvcm1zID0gYWxsX3BsYXRmb3Jtcwot
Ci0gICAgIyBGSVhNRTogVGhlc2UgbG9nIG1lc3NhZ2VzIHdpbGwgYmUgd3JvbmcgaWYgcG9ydHMg
c3RvcmUgYmFzZWxpbmVzIG91dHNpZGUKLSAgICAjIG9mIGxheW91dF90ZXN0c19kaXIoKSwgYnV0
IHRoZSBjb2RlIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICBsYXlvdXRfdGVzdHNfZGlyID0g
dGFyZ2V0X3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQotICAgIGV4cGVjdGF0aW9uc19wYXRo
ID0gdGFyZ2V0X3BvcnRfb2JqLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpCi0gICAg
X2xvZy5pbmZvKCdVc2luZyAlcycgJSBsYXlvdXRfdGVzdHNfZGlyKQotICAgIF9sb2cuaW5mbygn
ICBhbmQgJXMnICUgZXhwZWN0YXRpb25zX3BhdGgpCi0KLSAgICByZWJhc2VsaW5lZF90ZXN0cyA9
IHNldCgpCi0gICAgbG9nZ2VkX2JlZm9yZSA9IEZhbHNlCi0gICAgZm9yIHBsYXRmb3JtIGluIHJl
YmFzZWxpbmVfcGxhdGZvcm1zOgotICAgICAgICByZWJhc2VsaW5lciA9IFJlYmFzZWxpbmVyKGhv
c3QsIGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbGF0Zm9ybSwgb3B0aW9ucywgdXJsX2ZldGNoZXIsIHppcF9mYWN0b3J5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlZF9iZWZvcmUpCi0KLSAg
ICAgICAgX2xvZy5kZWJ1ZygnJykKLSAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxp
bmUgc3RhcnRlZCcsIHBsYXRmb3JtKQotICAgICAgICBpZiByZWJhc2VsaW5lci5ydW4oKToKLSAg
ICAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5lIGRvbmUnLCBwbGF0Zm9ybSkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5l
IGZhaWxlZCcsIHBsYXRmb3JtKQotCi0gICAgICAgIHJlYmFzZWxpbmVkX3Rlc3RzIHw9IHNldChy
ZWJhc2VsaW5lci5nZXRfcmViYXNlbGluZWRfdGVzdHMoKSkKLSAgICAgICAgbG9nZ2VkX2JlZm9y
ZSA9IHJlYmFzZWxpbmVyLmRpZF9sb2cKLQotICAgIGlmIHJlYmFzZWxpbmVkX3Rlc3RzOgotICAg
ICAgICByZWJhc2VsaW5lci5yZW1vdmVfcmViYXNlbGluaW5nX2V4cGVjdGF0aW9ucyhyZWJhc2Vs
aW5lZF90ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucy5iYWNrdXApCi0KLSAgICBfbG9nLmRlYnVnKCcnKQotICAgIGxvZ19k
YXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gc3RhcnRlZCcpCi0g
ICAgaHRtbF9nZW5lcmF0b3IgPSBIdG1sR2VuZXJhdG9yKGhvc3QsIGhvc3RfcG9ydF9vYmosCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wb3J0X29iaiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlYmFzZWxpbmVkX3Rlc3RzKQotICAgIGh0bWxfZ2VuZXJhdG9y
LmdlbmVyYXRlX2h0bWwoKQotICAgIGlmIG5vdCBvcHRpb25zLnF1aWV0OgotICAgICAgICBodG1s
X2dlbmVyYXRvci5zaG93X2h0bWwoKQotICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5p
bmcgcmVzdWx0IGNvbXBhcmlzb24gZG9uZScpCi0KLSAgICByZXR1cm4gMAotCi0KLWlmICdfX21h
aW5fXycgPT0gX19uYW1lX186Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NGRjZGYyZmY1YzkxZjg4MzY3NWYyNjE5
MDAwM2U5NzY1YWI2YWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9t
aXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM4NyArMCww
IEBACi0jIS91c3IvYmluL3B5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMg
Zm9yIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5LiIiIgotCi1pbXBvcnQgdW5p
dHRlc3QKLQotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwot
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB1cmxmZXRjaGVyX21vY2sKLWZyb20g
d2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKLQotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCB6aXBmaWxlc2V0X21vY2sKLWZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgotCi1mcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAotZnJvbSB3ZWJraXRweS50b19iZV9tb3ZlZCBp
bXBvcnQgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMKLQotCi1jbGFzcyBNb2NrUG9y
dChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9kaWZmX2V4aXN0cyk6Ci0g
ICAgICAgIHNlbGYuaW1hZ2VfZGlmZl9leGlzdHMgPSBpbWFnZV9kaWZmX2V4aXN0cwotCi0gICAg
ZGVmIGNoZWNrX2ltYWdlX2RpZmYoc2VsZiwgb3ZlcnJpZGVfc3RlcCwgbG9nZ2luZyk6Ci0gICAg
ICAgIHJldHVybiBzZWxmLmltYWdlX2RpZmZfZXhpc3RzCi0KLQotY2xhc3MgTW9ja1BvcnRGYWN0
b3J5KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ19leHBlY3RhdGlvbnMp
OgotICAgICAgICBzZWxmLmNvbmZpZ19leHBlY3RhdGlvbnMgPSBjb25maWdfZXhwZWN0YXRpb25z
Ci0KLSAgICBkZWYgZ2V0KHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgotICAg
ICAgICByZXR1cm4gTW9ja1BvcnQoc2VsZi5jb25maWdfZXhwZWN0YXRpb25zW29wdGlvbnMuY29u
ZmlndXJhdGlvbl0pCi0KLQotQVJDSElWRV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdC9sYXlvdXRf
dGVzdF9yZXN1bHRzJwotCi0KLWRlZiB0ZXN0X29wdGlvbnMoKToKLSAgICByZXR1cm4gTW9ja09w
dGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYWNrdXA9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZGly
ZWN0b3J5PScvdG1wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV91
cmw9QVJDSElWRV9VUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2Fy
Y2hpdmVfdXJsPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9
RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0PUZhbHNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybXM9Tm9uZSkKLQotCi1kZWYgdGVz
dF9ob3N0X3BvcnRfYW5kX2ZpbGVzeXN0ZW0ob3B0aW9ucywgZXhwZWN0YXRpb25zKToKLSAgICBo
b3N0ID0gTW9ja0hvc3QoKQotICAgIGhvc3RfcG9ydF9vYmogPSBob3N0LnBvcnRfZmFjdG9yeS5n
ZXQoJ3Rlc3QnLCBvcHRpb25zKQotICAgIGV4cGVjdGF0aW9uc19wYXRoID0gaG9zdF9wb3J0X29i
ai5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKQotICAgIGhvc3QuZmlsZXN5c3RlbS53
cml0ZV90ZXh0X2ZpbGUoZXhwZWN0YXRpb25zX3BhdGgsIGV4cGVjdGF0aW9ucykKLSAgICByZXR1
cm4gKGhvc3QsIGhvc3RfcG9ydF9vYmosIGhvc3QuZmlsZXN5c3RlbSkKLQotCi1kZWYgdGVzdF91
cmxfZmV0Y2hlcihmaWxlc3lzdGVtKToKLSAgICB1cmxzID0gewotICAgICAgICBBUkNISVZFX1VS
TCArICcvV2Via2l0X01hYzEwXzYvJzogJzxhIGhyZWY9IjQvIj4nLAotICAgICAgICBBUkNISVZF
X1VSTCArICcvV2Via2l0X01hYzEwXzUvJzogJzxhIGhyZWY9IjEvIj48YSBocmVmPSIyLyI+JywK
LSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9XaW43Lyc6ICc8YSBocmVmPSIxLyI+JywK
LSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9WaXN0YS8nOiAnPGEgaHJlZj0iMS8iPics
Ci0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfV2luLyc6ICc8YSBocmVmPSIxLyI+JywK
LSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9MaW51eC8nOiAnPGEgaHJlZj0iMS8iPics
Ci0gICAgfQotICAgIHJldHVybiB1cmxmZXRjaGVyX21vY2subWFrZV9mZXRjaGVyX2Nscyh1cmxz
KShmaWxlc3lzdGVtKQotCi0KLWRlZiB0ZXN0X3ppcF9mYWN0b3J5KCk6Ci0gICAgemlwaGFzaGVz
ID0gewotICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X01hYzEwXzUvMi9sYXlvdXQtdGVz
dC1yZXN1bHRzLnppcCc6IHsKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1
cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC50eHQnOiAnbmV3LWltYWdlLXR4dCcsCi0gICAgICAg
ICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwu
Y2hlY2tzdW0nOiAnbmV3LWltYWdlLWNoZWNrc3VtJywKLSAgICAgICAgICAgICdsYXlvdXQtdGVz
dC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5wbmcnOiAnbmV3LWltYWdl
LXBuZycsCi0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3Rl
ZC9pbWFnZV9jaGVja3N1bS1hY3R1YWwudHh0JzogJ3BuZy1jb21tZW50LXR4dCcsCi0gICAgICAg
ICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1
bS1hY3R1YWwuY2hlY2tzdW0nOiAnMDEyMzQ1Njc4OScsCi0gICAgICAgICAgICAnbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1hY3R1YWwucG5nJzog
J3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElW
RV9VUkwgKyAnL1dlYmtpdF9NYWMxMF82LzQvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7Ci0g
ICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1h
Y3R1YWwudHh0JzogJ25ldy1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJl
c3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ25ldy1pbWFn
ZS1jaGVja3N1bScsCi0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ25ldy1pbWFnZS1wbmcnLAotICAgICAgICB9LAot
ICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1Zpc3RhLzEvbGF5b3V0LXRlc3QtcmVzdWx0
cy56aXAnOiB7Ci0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBl
Y3RlZC9pbWFnZS1hY3R1YWwudHh0JzogJ3dpbi1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xh
eW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3Vt
JzogJ3dpbi1pbWFnZS1jaGVja3N1bScsCi0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ3dpbi1pbWFnZS1wbmcnLAot
ICAgICAgICB9LAotICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dpbjcvMS9sYXlvdXQt
dGVzdC1yZXN1bHRzLnppcCc6IHsKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2Zh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC50eHQnOiAnd2luLWltYWdlLXR4dCcsCi0gICAg
ICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1
YWwuY2hlY2tzdW0nOiAnd2luLWltYWdlLWNoZWNrc3VtJywKLSAgICAgICAgICAgICdsYXlvdXQt
dGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5wbmcnOiAnd2luLWlt
YWdlLXBuZycsCi0gICAgICAgIH0sCi0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfV2lu
LzEvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7Ci0gICAgICAgICAgICAnbGF5b3V0LXRlc3Qt
cmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0JzogJ3dpbi1pbWFnZS10
eHQnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQv
aW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ3dpbi1pbWFnZS1jaGVja3N1bScsCi0gICAgICAgICAg
ICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5n
JzogJ3dpbi1pbWFnZS1wbmcnLAotICAgICAgICB9LAotICAgICAgICBBUkNISVZFX1VSTCArICcv
V2Via2l0X0xpbnV4LzEvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7Ci0gICAgICAgICAgICAn
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0Jzog
J3dpbi1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ3dpbi1pbWFnZS1jaGVja3N1bScs
Ci0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFn
ZS1hY3R1YWwucG5nJzogJ3dpbi1pbWFnZS1wbmcnLAotICAgICAgICB9LAotICAgIH0KLSAgICBy
ZXR1cm4gemlwZmlsZXNldF9tb2NrLm1ha2VfZmFjdG9yeSh6aXBoYXNoZXMpCi0KLQotZGVmIHRl
c3RfYXJjaGl2ZShvcmlnX2FyY2hpdmVfZGljdCk6Ci0gICAgbmV3X2FyY2hpdmVfZGljdCA9IHt9
Ci0gICAgZm9yIHBsYXRmb3JtLCBkaXJuYW1lIGluIG9yaWdfYXJjaGl2ZV9kaWN0Lml0ZXJpdGVt
cygpOgotICAgICAgICAjIFRoaXMgaXMgYSBnaWFudCBoYWNrLiA6KAotICAgICAgICBwbGF0Zm9y
bSA9IHBsYXRmb3JtLnJlcGxhY2UoJ2Nocm9taXVtJywgJ3Rlc3QnKQotICAgICAgICBuZXdfYXJj
aGl2ZV9kaWN0W3BsYXRmb3JtXSA9IGRpcm5hbWUKLSAgICByZXR1cm4gbmV3X2FyY2hpdmVfZGlj
dAotCi0KLWNsYXNzIFRlc3RHZXRIb3N0UG9ydE9iamVjdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0g
ICAgZGVmIGFzc2VydF9yZXN1bHQoc2VsZiwgcmVsZWFzZV9wcmVzZW50LCBkZWJ1Z19wcmVzZW50
LCB2YWxpZF9wb3J0X29iaik6Ci0gICAgICAgICMgVGVzdHMgd2hldGhlciB3ZSBnZXQgYSB2YWxp
ZCBwb3J0IG9iamVjdCByZXR1cm5lZCB3aGVuIHdlIGNsYWltCi0gICAgICAgICMgdGhhdCBJbWFn
ZSBkaWZmIGlzIChvciBpc24ndCkgcHJlc2VudCBpbiB0aGUgdHdvIGNvbmZpZ3MuCi0gICAgICAg
IHBvcnRfZmFjdG9yeSA9IE1vY2tQb3J0RmFjdG9yeSh7J1JlbGVhc2UnOiByZWxlYXNlX3ByZXNl
bnQsICdEZWJ1Zyc6IGRlYnVnX3ByZXNlbnR9KQotICAgICAgICBvcHRpb25zID0gTW9ja09wdGlv
bnMoY29uZmlndXJhdGlvbj1Ob25lLCBodG1sX2RpcmVjdG9yeT0nL3RtcCcpCi0gICAgICAgIHBv
cnRfb2JqID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuZ2V0X2hvc3RfcG9ydF9v
YmplY3QocG9ydF9mYWN0b3J5LCBvcHRpb25zKQotICAgICAgICBpZiB2YWxpZF9wb3J0X29iajoK
LSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocG9ydF9vYmosIE5vbmUpCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnRfb2JqLCBOb25lKQotCi0g
ICAgZGVmIHRlc3RfZ2V0X2hvc3RfcG9ydF9vYmplY3Qoc2VsZik6Ci0gICAgICAgICMgVGVzdCB3
aGV0aGVyIHdlIGdldCBhIHZhbGlkIHBvcnQgb2JqZWN0IGJhY2sgZm9yIHRoZSBmb3VyCi0gICAg
ICAgICMgcG9zc2libGUgY2FzZXMgb2YgaGF2aW5nIEltYWdlRGlmZnMgYnVpbHQuIEl0IHNob3Vs
ZCB3b3JrIHdoZW4KLSAgICAgICAgIyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgYmluYXJ5IHByZXNl
bnQuCi0gICAgICAgIHNlbGYuYXNzZXJ0X3Jlc3VsdChGYWxzZSwgRmFsc2UsIEZhbHNlKQotICAg
ICAgICBzZWxmLmFzc2VydF9yZXN1bHQoVHJ1ZSwgRmFsc2UsIFRydWUpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X3Jlc3VsdChGYWxzZSwgVHJ1ZSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfcmVz
dWx0KFRydWUsIFRydWUsIFRydWUpCi0KLQotY2xhc3MgVGVzdE9wdGlvbnModW5pdHRlc3QuVGVz
dENhc2UpOgotICAgIGRlZiB0ZXN0X3BhcnNlX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIChvcHRp
b25zLCB0YXJnZXRfb3B0aW9ucykgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5w
YXJzZV9vcHRpb25zKFtdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0X29wdGlvbnMu
Y2hyb21pdW0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucy50b2xlcmFuY2UsIDAp
Ci0KLSAgICAgICAgKG9wdGlvbnMsIHRhcmdldF9vcHRpb25zKSA9IHJlYmFzZWxpbmVfY2hyb21p
dW1fd2Via2l0X3Rlc3RzLnBhcnNlX29wdGlvbnMoWyctLXRhcmdldC1wbGF0Zm9ybScsICdxdCdd
KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIodGFyZ2V0X29wdGlvbnMsICdjaHJv
bWl1bScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMudG9sZXJhbmNlLCAwKQot
Ci0KLWNsYXNzIFRlc3RSZWJhc2VsaW5lcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNl
dFVwKHNlbGYpOgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX29yaWdfYXJjaGl2ZScp
OgotICAgICAgICAgICAgc2VsZi5fb3JpZ19hcmNoaXZlID0gcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUCi0gICAgICAgICAgICByZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0cy5BUkNISVZFX0RJUl9OQU1FX0RJQ1QgPSB0ZXN0X2FyY2hp
dmUoc2VsZi5fb3JpZ19hcmNoaXZlKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAg
ICByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5BUkNISVZFX0RJUl9OQU1FX0RJQ1Qg
PSBzZWxmLl9vcmlnX2FyY2hpdmUKLQotICAgIGRlZiBtYWtlX3JlYmFzZWxpbmVyKHNlbGYsIGV4
cGVjdGF0aW9ucyk6Ci0gICAgICAgIG9wdGlvbnMgPSB0ZXN0X29wdGlvbnMoKQotICAgICAgICBo
b3N0LCBob3N0X3BvcnRfb2JqLCBmaWxlc3lzdGVtID0gdGVzdF9ob3N0X3BvcnRfYW5kX2ZpbGVz
eXN0ZW0ob3B0aW9ucywgZXhwZWN0YXRpb25zKQotCi0gICAgICAgIHRhcmdldF9vcHRpb25zID0g
b3B0aW9ucwotICAgICAgICB0YXJnZXRfcG9ydF9vYmogPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQo
J3Rlc3QnLCB0YXJnZXRfb3B0aW9ucykKLSAgICAgICAgcGxhdGZvcm0gPSB0YXJnZXRfcG9ydF9v
YmoubmFtZSgpCi0KLSAgICAgICAgdXJsX2ZldGNoZXIgPSB0ZXN0X3VybF9mZXRjaGVyKGZpbGVz
eXN0ZW0pCi0gICAgICAgIHppcF9mYWN0b3J5ID0gdGVzdF96aXBfZmFjdG9yeSgpCi0KLSAgICAg
ICAgIyBGSVhNRTogU0NNIG1vZHVsZSBkb2Vzbid0IGhhbmRsZSBwYXRocyB0aGF0IGFyZW4ndCBy
ZWxhdGl2ZSB0byB0aGUgY2hlY2tvdXRfcm9vdCBjb25zaXN0ZW50bHkuCi0gICAgICAgIGZpbGVz
eXN0ZW0uY2hkaXIoZmlsZXN5c3RlbS5kaXJuYW1lKGhvc3RfcG9ydF9vYmoubGF5b3V0X3Rlc3Rz
X2RpcigpKSkKLQotICAgICAgICByZWJhc2VsaW5lciA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzLlJlYmFzZWxpbmVyKGhvc3QsIGhvc3RfcG9ydF9vYmosCi0gICAgICAgICAgICB0
YXJnZXRfcG9ydF9vYmosIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0Y2hlciwgemlwX2ZhY3Rv
cnkpCi0gICAgICAgIHJldHVybiByZWJhc2VsaW5lciwgZmlsZXN5c3RlbQotCi0gICAgZGVmIHRl
c3Rfbm9vcChzZWxmKToKLSAgICAgICAgIyB0aGlzIG1ldGhvZCB0ZXN0cyB0aGF0IHdhcyBjYW4g
YXQgbGVhc3QgaW5zdGFudGlhdGUgYW4gb2JqZWN0LCBldmVuCi0gICAgICAgICMgaWYgdGhlcmUg
aXMgbm90aGluZyB0byBkby4KLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxm
Lm1ha2VfcmViYXNlbGluZXIoIiIpCi0gICAgICAgIHJlYmFzZWxpbmVyLnJ1bigpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcyksIDEpCi0KLSAg
ICBkZWYgdGVzdF9yZWJhc2VsaW5pbmdfdGVzdHMoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVy
LCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJVR1gg
UkVCQVNFTElORSBNQUMgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiKQot
ICAgICAgICBjb21waWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2VsaW5p
bmdfdGVzdHMoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGlsZV9zdWNjZXNzKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwn
XSksIHJlYmFzZWxpbmVyLl9yZWJhc2VsaW5pbmdfdGVzdHMpCi0KLSAgICBkZWYgdGVzdF9yZWJh
c2VsaW5pbmdfdGVzdHNfc2hvdWxkX2lnbm9yZV9yZWZ0ZXN0cyhzZWxmKToKLSAgICAgICAgcmVi
YXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCi0gICAgICAgICAg
ICAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvcmVmdGVzdC5odG1sID0gSU1B
R0UiKQotICAgICAgICBjb21waWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJh
c2VsaW5pbmdfdGVzdHMoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbXBpbGVfc3VjY2Vz
cykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rl
c3RzKQotCi0gICAgZGVmIHRlc3Rfb25lX3BsYXRmb3JtKHNlbGYpOgotICAgICAgICByZWJhc2Vs
aW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKLSAgICAgICAgICAgICJC
VUdYIFJFQkFTRUxJTkUgTUFDIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdF
IikKLQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICBsYXlvdXRfdGVzdF9kaXIg
PSByZWJhc2VsaW5lci5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgIyBXZSBleHBl
Y3QgdG8gaGF2ZSB3cml0dGVuIDEzIGZpbGVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGlzIHJlYmFz
ZWxpbmU6Ci0gICAgICAgICMgKikgMyBmaWxlcyBpbiAvX19pbV90bXAgZm9yIHRoZSBleHRyYWN0
ZWQgYXJjaGl2ZSBtZW1iZXJzCi0gICAgICAgICMgKikgMyBuZXcgYmFzZWxpbmVzIHVuZGVyIGxh
eW91dF90ZXN0X2RpcgotICAgICAgICAjICopIDQgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIG5ldyBh
bmQgb2xkIGJhc2VsaW5lcyBpbiB0aGUgcmVzdWx0IGZpbGUKLSAgICAgICAgIyAgICAoLXtvbGQs
bmV3fS57dHh0LHBuZ30KLSAgICAgICAgIyAqKSAxIHRleHQgZGlmZiBpbiAvdG1wIGZvciB0aGUg
cmVzdWx0IGZpbGUgKC1kaWZmLnR4dCkuCi0gICAgICAgICMgKikgMSBpbWFnZSBkaWZmIGluIC90
bXAgZm9yIHRoZSByZXN1bHQgZmlsZSAoLWRpZmYucG5nKS4KLSAgICAgICAgIyAqKSAxIHVwZGF0
ZWQgdGVzdF9leHBlY3RhdGlvbnMgZmlsZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihm
aWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChm
aWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMtbGVv
cGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC5jaGVja3N1bSddLCAnbmV3LWlt
YWdlLWNoZWNrc3VtJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
W2xheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZS1leHBlY3RlZC5wbmcnXSwgJ25ldy1pbWFnZS1wbmcnKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbbGF5b3V0X3Rlc3RfZGlyICsgJy9wbGF0
Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLnR4
dCddLCAnbmV3LWltYWdlLXR4dCcpCi0KLSAgICBkZWYgdGVzdF9hbGxfcGxhdGZvcm1zKHNlbGYp
OgotICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5l
cigKLSAgICAgICAgICAgICJCVUdYIFJFQkFTRUxJTkUgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFn
ZS5odG1sID0gSU1BR0UiKQotICAgICAgICBsYXlvdXRfdGVzdF9kaXIgPSByZWJhc2VsaW5lci5f
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgcmViYXNlbGluZXIucnVuKCkKLSAgICAg
ICAgIyBTZWUgY29tbWVudCBpbiB0ZXN0X29uZV9wbGF0Zm9ybSBmb3IgYW4gZXhwbGFuYXRpb24g
b2YgdGhlIDEzIHdyaXR0ZW4gdGVzdHMuCi0gICAgICAgICMgTm90ZSB0aGF0IGV2ZW4gdGhvdWdo
IHRoZSByZWJhc2VsaW5lIGlzIG1hcmtlZCBmb3IgYWxsIHBsYXRmb3JtcywgZWFjaAotICAgICAg
ICAjIHJlYmFzZWxpbmVyIG9ubHkgZXZlciBkb2VzIG9uZS4KLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTMpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rl
c3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQuY2hlY2tzdW0n
XSwgJ25ldy1pbWFnZS1jaGVja3N1bScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5
c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQv
ZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICduZXctaW1hZ2UtcG5nJykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2Rp
ciArICcvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1l
eHBlY3RlZC50eHQnXSwgJ25ldy1pbWFnZS10eHQnKQotCi0gICAgZGVmIHRlc3RfcG5nX2ZpbGVf
d2l0aF9jb21tZW50KHNlbGYpOgotICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNl
bGYubWFrZV9yZWJhc2VsaW5lcigKLSAgICAgICAgICAgICJCVUdYIFJFQkFTRUxJTkUgTUFDIDog
ZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0uaHRtbCA9IElNQUdFIikKLSAgICAgICAg
bGF5b3V0X3Rlc3RfZGlyID0gcmViYXNlbGluZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCi0g
ICAgICAgIGNvbXBpbGVfc3VjY2VzcyA9IHJlYmFzZWxpbmVyLl9jb21waWxlX3JlYmFzZWxpbmlu
Z190ZXN0cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21waWxlX3N1Y2Nlc3MpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFsnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tz
dW0uaHRtbCddKSwgcmViYXNlbGluZXIuX3JlYmFzZWxpbmluZ190ZXN0cykKLSAgICAgICAgcmVi
YXNlbGluZXIucnVuKCkKLSAgICAgICAgIyBUaGVyZSBpcyBvbmUgbGVzcyBmaWxlIHdyaXR0ZW4g
dGhhbiB8dGVzdF9vbmVfcGxhdGZvcm18IGJlY2F1c2Ugd2Ugb25seQotICAgICAgICAjIHdyaXRl
IDIgZXhwZWN0YXRpb25zICh0aGUgcG5nIGFuZCB0aGUgdHh0IGZpbGUpLgotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMikKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2RpciArICcvcGxh
dGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1l
eHBlY3RlZC5wbmcnXSwgJ3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2RpciArICcvcGxhdGZv
cm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBl
Y3RlZC50eHQnXSwgJ3BuZy1jb21tZW50LXR4dCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZmlsZXN5c3RlbS5maWxlcy5nZXQobGF5b3V0X3Rlc3RfZGlyICsgJy9wbGF0Zm9ybS90ZXN0LW1h
Yy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLmNoZWNr
c3VtJywgTm9uZSkpCi0KLSAgICBkZWYgdGVzdF9wbmdfZmlsZV93aXRoX2NvbW1lbnRfcmVtb3Zl
X29sZF9jaGVja3N1bShzZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBz
ZWxmLm1ha2VfcmViYXNlbGluZXIoCi0gICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIE1BQyA6
IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwgPSBJTUFHRSIpCi0gICAgICAg
IGxheW91dF90ZXN0X2RpciA9IHJlYmFzZWxpbmVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQot
ICAgICAgICBmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVz
dC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5w
bmcnXSA9ICdvbGQnCi0gICAgICAgIGZpbGVzeXN0ZW0uZmlsZXNbbGF5b3V0X3Rlc3RfZGlyICsg
Jy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNr
c3VtLWV4cGVjdGVkLmNoZWNrc3VtJ10gPSAnb2xkJwotICAgICAgICBmaWxlc3lzdGVtLmZpbGVz
W2xheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC50eHQnXSA9ICdvbGQnCi0KLSAgICAgICAg
Y29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2NvbXBpbGVfcmViYXNlbGluaW5nX3Rlc3Rz
KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBpbGVfc3VjY2VzcykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1s
J10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rlc3RzKQotICAgICAgICByZWJhc2VsaW5l
ci5ydW4oKQotICAgICAgICAjIFRoZXJlIGlzIG9uZSBtb3JlIGZpbGUgd3JpdHRlbiB0aGFuIHx0
ZXN0X3BuZ19maWxlX3dpdGhfY29tbWVudF9yZW1vdmVfb2xkX2NoZWNrc3VtfAotICAgICAgICAj
IGJlY2F1c2Ugd2UgYWxzbyBkZWxldGUgdGhlIG9sZCBjaGVja3N1bS4KLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTMpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRm
b3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhw
ZWN0ZWQucG5nJ10sICd0RVh0Y2hlY2tzdW1ceDAwMDEyMzQ1Njc4OScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1tsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3Jt
L3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0
ZWQudHh0J10sICdwbmctY29tbWVudC10eHQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZp
bGVzeXN0ZW0uZmlsZXMuZ2V0KGxheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMt
bGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1
bScsIE5vbmUpLCBOb25lKQotCi0gICAgZGVmIHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21tZW50X2Fz
X2R1cGxpY2F0ZShzZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxm
Lm1ha2VfcmViYXNlbGluZXIoCi0gICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIE1BQyA6IGZh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwgPSBJTUFHRSIpCi0gICAgICAgIGxh
eW91dF90ZXN0X2RpciA9IHJlYmFzZWxpbmVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQotICAg
ICAgICBmaWxlc3lzdGVtLmZpbGVzW2xheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1t
YWMtc25vd2xlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQu
cG5nJ10gPSAndEVYdGNoZWNrc3VtXHgwMDAxMjM0NTY3ODknCi0gICAgICAgIGZpbGVzeXN0ZW0u
ZmlsZXNbbGF5b3V0X3Rlc3RfZGlyICsgJy9wbGF0Zm9ybS90ZXN0LW1hYy1zbm93bGVvcGFyZC9m
YWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC50eHQnXSA9ICdwbmctY29t
bWVudC10eHQnCi0KLSAgICAgICAgY29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2NvbXBp
bGVfcmViYXNlbGluaW5nX3Rlc3RzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBpbGVf
c3VjY2VzcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9leHBlY3Rl
ZC9pbWFnZV9jaGVja3N1bS5odG1sJ10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rlc3Rz
KQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZp
bGVzeXN0ZW0uZmlsZXMuZ2V0KGxheW91dF90ZXN0X2RpciArICcvcGxhdGZvcm0vdGVzdC1tYWMt
bGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5wbmcnLCBO
b25lKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzLmdl
dChsYXlvdXRfdGVzdF9kaXIgKyAnL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMv
ZXhwZWN0ZWQvaW1hZ2VfY2hlY2tzdW0tZXhwZWN0ZWQudHh0JywgTm9uZSksIE5vbmUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlcy5nZXQobGF5b3V0X3Rlc3RfZGly
ICsgJy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2No
ZWNrc3VtLWV4cGVjdGVkLmNoZWNrc3VtJywgTm9uZSksIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9k
aWZmX2Jhc2VsaW5lc190eHQoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVt
ID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCIiKQotICAgICAgICBwb3J0ID0gcmViYXNlbGluZXIu
X3BvcnQKLSAgICAgICAgb3V0cHV0ID0gcG9ydC5leHBlY3RlZF90ZXh0KCdwYXNzZXMvdGV4dC5o
dG1sJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJhc2VsaW5lci5fZGlmZl9iYXNlbGlu
ZXMob3V0cHV0LCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzX2ltYWdlPUZhbHNlKSkKLQotICAgIGRlZiB0ZXN0X2RpZmZfYmFz
ZWxpbmVzX3BuZyhzZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxm
Lm1ha2VfcmViYXNlbGluZXIoJycpCi0gICAgICAgIHBvcnQgPSByZWJhc2VsaW5lci5fcG9ydAot
ICAgICAgICBpbWFnZSA9IHBvcnQuZXhwZWN0ZWRfaW1hZ2UoJ3Bhc3Nlcy9pbWFnZS5odG1sJykK
LSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJhc2VsaW5lci5fZGlmZl9iYXNlbGluZXMoaW1h
Z2UsIGltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc19pbWFnZT1UcnVlKSkKLQotCi1jbGFzcyBUZXN0UmVhbE1haW4odW5pdHRlc3Qu
VGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgaWYgbm90IGhhc2F0dHIo
c2VsZiwgJ19vcmlnX2FyY2hpdmUnKToKLSAgICAgICAgICAgIHNlbGYuX29yaWdfYXJjaGl2ZSA9
IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLkFSQ0hJVkVfRElSX05BTUVfRElDVAot
ICAgICAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJf
TkFNRV9ESUNUID0gdGVzdF9hcmNoaXZlKHNlbGYuX29yaWdfYXJjaGl2ZSkKLQotICAgIGRlZiB0
ZWFyRG93bihzZWxmKToKLSAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMu
QVJDSElWRV9ESVJfTkFNRV9ESUNUID0gc2VsZi5fb3JpZ19hcmNoaXZlCi0KLSAgICBkZWYgdGVz
dF9hbGxfcGxhdGZvcm1zKHNlbGYpOgotICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHWCBSRUJB
U0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdFIgotCi0gICAgICAg
IG9wdGlvbnMgPSB0ZXN0X29wdGlvbnMoKQotICAgICAgICBob3N0LCBob3N0X3BvcnRfb2JqLCBm
aWxlc3lzdGVtID0gdGVzdF9ob3N0X3BvcnRfYW5kX2ZpbGVzeXN0ZW0ob3B0aW9ucywgZXhwZWN0
YXRpb25zKQotICAgICAgICB1cmxfZmV0Y2hlciA9IHRlc3RfdXJsX2ZldGNoZXIoZmlsZXN5c3Rl
bSkKLSAgICAgICAgemlwX2ZhY3RvcnkgPSB0ZXN0X3ppcF9mYWN0b3J5KCkKLQotICAgICAgICAj
IEZJWE1FOiBTQ00gbW9kdWxlIGRvZXNuJ3QgaGFuZGxlIHBhdGhzIHRoYXQgYXJlbid0IHJlbGF0
aXZlIHRvIHRoZSBjaGVja291dF9yb290IGNvbnNpc3RlbnRseS4KLSAgICAgICAgZmlsZXN5c3Rl
bS5jaGRpcihmaWxlc3lzdGVtLmRpcm5hbWUoaG9zdF9wb3J0X29iai5sYXlvdXRfdGVzdHNfZGly
KCkpKQotCi0gICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAg
ICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICByZXMgPSByZWJhc2VsaW5lX2Nocm9taXVt
X3dlYmtpdF90ZXN0cy5yZWFsX21haW4oaG9zdCwgb3B0aW9ucywgb3B0aW9ucywKLSAgICAgICAg
ICAgIGhvc3RfcG9ydF9vYmosIGhvc3RfcG9ydF9vYmosIHVybF9mZXRjaGVyLCB6aXBfZmFjdG9y
eSkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAgICAgICMgV2UgZXhwZWN0IHRv
IGhhdmUgd3JpdHRlbiAzOCBmaWxlcyBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhpcyByZWJhc2VsaW5l
OgotICAgICAgICAjICopIDYqMyBmaWxlcyBpbiAvX19pbV90bXAvIGZvciB0aGUgYXJjaGl2ZWQg
bWVtYmVycyBvZiB0aGUgNiBwb3J0cwotICAgICAgICAjICopIDIqMyBmaWxlcyBpbiAvdGVzdC5j
aGVja291dCBmb3IgYWN0dWFsbHkgZGlmZmVyaW5nIGJhc2VsaW5lcwotICAgICAgICAjICopIDEg
ZmlsZSBpbiAvdGVzdC5jaGVja291dCBmb3IgdGhlIHVwZGF0ZWQgdGVzdF9leHBlY3RhdGlvbnMg
ZmlsZQotICAgICAgICAjICopIDIqNCBmaWxlcyBpbiAvdG1wIGZvciB0aGUgb2xkL25ldyBiYXNl
bGluZXMgZm9yIHRoZSB0d28gYWN0dWFsIHBvcnRzCi0gICAgICAgICMgKikgMiBmaWxlcyBpbiAv
dG1wIGZvciB0aGUgdGV4dCBkaWZmcyBmb3IgdGhlIHR3byBwb3J0cwotICAgICAgICAjICopIDIg
ZmlsZXMgaW4gL3RtcCBmb3IgdGhlIGltYWdlIGRpZmZzIGZvciB0aGUgdHdvIHBvcnRzCi0gICAg
ICAgICMgKikgMSBmaWxlIGluIC90bXAgZm9yIHRoZSByZWJhc2VsaW5lIHJlc3VsdHMgaHRtbCBm
aWxlCi0gICAgICAgICMgRklYTUU6IFRoZXNlIG51bWJlcnMgZGVwZW5kIG9uIE1vY2tTQ00uZXhp
c3RzKCkgcmV0dXJuaW5nIFRydWUgZm9yIGFsbCBmaWxlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXMsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVzeXN0ZW0ud3Jp
dHRlbl9maWxlcyksIDM4KQotCi0KLWNsYXNzIFRlc3RIdG1sR2VuZXJhdG9yKHVuaXR0ZXN0LlRl
c3RDYXNlKToKLSAgICBkZWYgbWFrZV9nZW5lcmF0b3Ioc2VsZiwgZmlsZXMsIHRlc3RzKToKLSAg
ICAgICAgb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249Tm9uZSwgaHRtbF9kaXJl
Y3Rvcnk9Jy90bXAnKQotICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQotICAgICAgICBmcyA9IGhv
c3QuZmlsZXN5c3RlbQotICAgICAgICBmb3IgZmlsZW5hbWUsIGNvbnRlbnRzIGluIGZpbGVzLml0
ZXJpdGVtcygpOgotICAgICAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3RvcnkoZnMuZGlybmFt
ZShmaWxlbmFtZSkpCi0gICAgICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZShmaWxlbmFtZSwg
Y29udGVudHMpCi0gICAgICAgIGhvc3RfcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVz
dCcsIG9wdGlvbnMpCi0gICAgICAgIGdlbmVyYXRvciA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzLkh0bWxHZW5lcmF0b3IoaG9zdCwgaG9zdF9wb3J0LAotICAgICAgICAgICAgdGFy
Z2V0X3BvcnQ9Tm9uZSwgb3B0aW9ucz1vcHRpb25zLCBwbGF0Zm9ybXM9Wyd0ZXN0LW1hYy1sZW9w
YXJkJ10sIHJlYmFzZWxpbmluZ190ZXN0cz10ZXN0cykKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ciwgaG9zdF9wb3J0Ci0KLSAgICBkZWYgdGVzdF9nZW5lcmF0ZV9iYXNlbGluZV9saW5rcyhzZWxm
KToKLSAgICAgICAgZmlsZXMgPSB7Ci0gICAgICAgICAgICAiL3RtcC9mb28tZXhwZWN0ZWQtbWFj
LW9sZC50eHQiOiAiIiwKLSAgICAgICAgICAgICIvdG1wL2Zvby1leHBlY3RlZC1tYWMtbmV3LnR4
dCI6ICIiLAotICAgICAgICAgICAgIi90bXAvZm9vLWV4cGVjdGVkLW1hYy1kaWZmLnR4dCI6ICIi
LAotICAgICAgICB9Ci0gICAgICAgIHRlc3RzID0gWyJmb28udHh0Il0KLSAgICAgICAgZ2VuZXJh
dG9yLCBob3N0X3BvcnQgPSBzZWxmLm1ha2VfZ2VuZXJhdG9yKGZpbGVzLCB0ZXN0cykKLSAgICAg
ICAgbGlua3MgPSBnZW5lcmF0b3IuX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKCJmb28iLCAiLnR4
dCIsICJtYWMiKQotICAgICAgICBleHBlY3RlZF9saW5rcyA9ICc8dGQgYWxpZ249Y2VudGVyPjxh
IGhyZWY9ImZpbGU6Ly8vdG1wL2Zvby1leHBlY3RlZC1tYWMtb2xkLnR4dCI+Zm9vLWV4cGVjdGVk
LnR4dDwvYT48L3RkPjx0ZCBhbGlnbj1jZW50ZXI+PGEgaHJlZj0iZmlsZTovLy90bXAvZm9vLWV4
cGVjdGVkLW1hYy1uZXcudHh0Ij5mb28tZXhwZWN0ZWQudHh0PC9hPjwvdGQ+PHRkIGFsaWduPWNl
bnRlcj48YSBocmVmPSJmaWxlOi8vL3RtcC9mb28tZXhwZWN0ZWQtbWFjLWRpZmYudHh0Ij5EaWZm
PC9hPjwvdGQ+JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtzLCBleHBlY3RlZF9saW5r
cykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>