<?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>134766</bug_id>
          
          <creation_ts>2014-07-09 07:01:15 -0700</creation_ts>
          <short_desc>Add support for automated W3C conformance testing</short_desc>
          <delta_ts>2016-03-10 12:12:02 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          <dependson>134764</dependson>
    
    <dependson>136848</dependson>
          <blocked>134767</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>agouaillard</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>bjonesbe</cc>
    
    <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>rhauck</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1021354</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-07-09 07:01:15 -0700</bug_when>
    <thetext>Automated W3C conformance testing based on run-webkit-tests would enable assessing how WebKit complies with W3C test suite. It could also serve as a tool to ease W3C test suite import witihn WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021356</commentid>
    <comment_count>1</comment_count>
      <attachid>234635</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-07-09 07:07:13 -0700</bug_when>
    <thetext>Created attachment 234635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021360</commentid>
    <comment_count>2</comment_count>
      <attachid>234637</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-07-09 07:17:22 -0700</bug_when>
    <thetext>Created attachment 234637
Adding static files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022785</commentid>
    <comment_count>3</comment_count>
      <attachid>235012</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-07-16 11:35:47 -0700</bug_when>
    <thetext>Created attachment 235012
Start adding support for ref tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035427</commentid>
    <comment_count>4</comment_count>
      <attachid>238166</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-09-16 02:47:02 -0700</bug_when>
    <thetext>Created attachment 238166
Support of all tests, result generated in WebKitBuild sub-folder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035433</commentid>
    <comment_count>5</comment_count>
      <attachid>238169</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-09-16 03:06:52 -0700</bug_when>
    <thetext>Created attachment 238169
updated according 136848</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057588</commentid>
    <comment_count>6</comment_count>
      <attachid>243675</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-23 07:21:13 -0800</bug_when>
    <thetext>Created attachment 243675
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057589</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-23 07:23:55 -0800</bug_when>
    <thetext>Attachment 243675 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/w3c/run_w3c_conformance_tests.py:43:  No name &apos;web_platform_test_importer&apos; in module &apos;webkitpy.w3c&apos;  [pylint/E0611] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057676</commentid>
    <comment_count>8</comment_count>
      <attachid>243703</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-23 15:37:10 -0800</bug_when>
    <thetext>Created attachment 243703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059007</commentid>
    <comment_count>9</comment_count>
      <attachid>243703</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2015-01-06 08:03:49 -0800</bug_when>
    <thetext>Comment on attachment 243703
Patch

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

&gt; LayoutTests/imported/w3c/resources/w3c_conformance_results.html:156
&gt; +            (results.tests_directory ? results.tests_directory : &quot;imported-tests&quot;)

Your indentation is all confused at a bunch of places in this file. Maybe you&apos;re mixing tabs and spaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059132</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-06 13:13:45 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 243703 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=243703&amp;action=review
&gt; 
&gt; &gt; LayoutTests/imported/w3c/resources/w3c_conformance_results.html:156
&gt; &gt; +            (results.tests_directory ? results.tests_directory : &quot;imported-tests&quot;)
&gt; 
&gt; Your indentation is all confused at a bunch of places in this file. Maybe
&gt; you&apos;re mixing tabs and spaces?

Woups, I&apos;ll clean that.
I will also add the possibility to filter tests according result and add bug-filing links</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060821</commentid>
    <comment_count>11</comment_count>
      <attachid>244513</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-13 07:45:59 -0800</bug_when>
    <thetext>Created attachment 244513
Adding CSS testsuite support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060860</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-13 11:40:47 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created attachment 244513 [details]
&gt; Adding CSS testsuite support

This patch also generates two files, one to update the whitelist used to import W3C tests and one to update the test expectations (to skip infrastructure folders).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073342</commentid>
    <comment_count>13</comment_count>
      <attachid>247675</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-02 09:24:10 -0800</bug_when>
    <thetext>Created attachment 247675
Rebasing against new TestRepositories description</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081150</commentid>
    <comment_count>14</comment_count>
      <attachid>249727</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-30 06:27:03 -0700</bug_when>
    <thetext>Created attachment 249727
Refreshing and adding unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173151</commentid>
    <comment_count>15</comment_count>
      <attachid>249727</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-10 10:41:32 -0800</bug_when>
    <thetext>Comment on attachment 249727
Refreshing and adding unit tests

This seems like a really good tool!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173152</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-10 10:42:37 -0800</bug_when>
    <thetext>I can&apos;t get EWS to process this file. Youenn, would you mind rebaselining the patch and uploading it again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173231</commentid>
    <comment_count>17</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-10 12:01:52 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I can&apos;t get EWS to process this file. Youenn, would you mind rebaselining
&gt; the patch and uploading it again?

The patch is old and webkitpy infrastructure changed a bit.
Time permitting, I will look at it again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234635</attachid>
            <date>2014-07-09 07:07:13 -0700</date>
            <delta_ts>2014-07-09 07:17:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134766-20140709160654.patch</filename>
            <type>text/plain</type>
            <size>21954</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwNzk5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1
bi13M2MtY29uZm9ybWFuY2UtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi13M2MtY29uZm9ybWFu
Y2UtdGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNmMDE3NWE4NzYyYjA1Y2JjZGQ5YTdhZjk2MTI1NDFiMjk5
MjYyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXczYy1jb25mb3JtYW5j
ZS10ZXN0cwpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5
cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiV3JhcHBlciBhcm91bmQgd2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2Vf
dGVzdHMucHkiIiIKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBtdWx0aXByb2Nlc3Npbmdf
Ym9vdHN0cmFwCisKK211bHRpcHJvY2Vzc2luZ19ib290c3RyYXAucnVuKCd3ZWJraXRweScsICd3
M2MnLCAncnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weScpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3czYy9ydW5fdzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weQpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NTBhOWYyYzIzZTg1NDcwMjRmZTIyODg1ODc5MGQ5ZDBmNTIyODk2Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90
ZXN0cy5weQpAQCAtMCwwICsxLDE3MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBD
YW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3JpcHQg
ZXZhbHVhdGVzIFczQyB0ZXN0cyBjb25mb3JtYW5jZSBieToKKyAgICAtIGltcG9ydGluZyBXM0Mg
dGVzdHMgYXMgV2ViS2l0IHRlc3RzICh1c2luZyB3ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlcikK
KyAgICAtIGdlbmVyYXRpbmcgZXhwZWN0ZWQudHh0IGZpbGVzICh1c2luZyBydW4td2Via2l0LXRl
c3RzKQorICAgIC0gY29tcHV0aW5nIHdoZXRoZXIgYSB0ZXN0IGlzIHBhc3Npbmcgb3Igbm90IGJ5
IGNoZWNraW5nIFBBU1MvRkFJTCBhc3NlcnRpb25zIG91dHB1dHRlZCB3aXRoaW4gdGhlIGV4cGVj
dGVkLnR4dCBmaWxlcworIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuY29t
bW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IEV4ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRl
c3RfZXhwZWN0YXRpb25zIGltcG9ydCBUZXN0RXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IHBsYXRmb3JtX29wdGlvbnMKK2Zyb20gd2Via2l0cHkudzNjLmZhY3RvcnkgaW1w
b3J0IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyCitmcm9tIHdlYmtpdHB5LnczYy50ZXN0X3Jl
c3VsdHNfbWFuYWdlciBpbXBvcnQgVGVzdFJlc3VsdHNNYW5hZ2VyCitmcm9tIHdlYmtpdHB5Lncz
Yy53ZWJfcGxhdGZvcm1fdGVzdF9zZXR1cCBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2V0dXAKK2Zy
b20gd2Via2l0cHkudzNjLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyIGltcG9ydCBXZWJQbGF0
Zm9ybVRlc3RJbXBvcnRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisK
KworY2xhc3MgVzNDQ29uZm9ybWFuY2VSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAg
ICBzZWxmLmZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLm9w
dGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIg
PSBXZWJQbGF0Zm9ybVRlc3RJbXBvcnRlcihwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLnRl
c3RzID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci50ZXN0cygpCisgICAgICAgIHNl
bGYuX3Jlc3VsdHNfbWFuYWdlciA9IE5vbmUKKworICAgIGRlZiBnZXRfY29uZm9ybWFuY2VfcmVz
dWx0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0uam9p
bihzZWxmLnBvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgIi4uIiwgInczYy1jb25mb3JtYW5jZS1y
ZXN1bHRzIikKKworICAgIGRlZiBsYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuZ2V0X2NvbmZvcm1hbmNl
X3Jlc3VsdHNfZGlyZWN0b3J5KCksICJsYXlvdXQtdGVzdC1yZXN1bHRzIikKKworICAgIGRlZiB0
ZXN0X3N1aXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
aW1wb3J0ZXIudGVzdF9zdWl0ZXMoKQorCisgICAgZGVmIHJ1bl90ZXN0X3N1aXRlcyhzZWxmLCBw
YXJhbWV0ZXJzKToKKyAgICAgICAgI1RPRE86IGNsZWFuIHRoaXMgdG8gaGF2ZSBhIGJldHRlciBw
YXRoIGNvbXB1dGF0aW9uCisgICAgICAgIHVwID0gb3MucGF0aC5kaXJuYW1lCisgICAgICAgIHNj
cmlwdF9kaXIgPSB1cCh1cCh1cChvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpCisgICAgICAg
IHRtcF9hcmdzID0gW3NlbGYuZmlsZXN5c3RlbS5qb2luKHNjcmlwdF9kaXIsICdydW4td2Via2l0
LXRlc3RzJyldICsgcGFyYW1ldGVycyArIFsnLS1yZXN1bHRzLWRpcmVjdG9yeT0nICsgc2VsZi5s
YXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSgpXQorICAgICAgICB0bXBfYXJncy5hcHBlbmQo
Jy0tJyArIHNlbGYub3B0aW9ucy5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLndl
YmtpdF90ZXN0X3J1bm5lciBpcyBUcnVlOgorICAgICAgICAgICAgdG1wX2FyZ3MuYXBwZW5kKCct
MicpCisKKyAgICAgICAgI2NvbXB1dGUgbGlzdCBvZiB0ZXN0cyB0byBydW4KKyAgICAgICAgZm9y
IHRlc3Rfc3VpdGUgaW4gc2VsZi50ZXN0X3N1aXRlcygpOgorICAgICAgICAgICAgcGF0aCA9IHNl
bGYuZmlsZXN5c3RlbS5qb2luKCdMYXlvdXRUZXN0cycsICBzZWxmLm9wdGlvbnMuX19kaWN0X19b
J2ltcG9ydGRpciddLCB0ZXN0X3N1aXRlKQorICAgICAgICAgICAgdG1wX2FyZ3MuYXBwZW5kKHBh
dGgpCisgICAgICAgIEV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5kKHRtcF9hcmdzLCBlcnJvcl9oYW5k
bGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIHJldHVybl9zdGRlcnI9KG5vdCBzZWxmLm9wdGlv
bnMuX19kaWN0X19bJ3czY192ZXJib3NlJ10pLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQorICAgICAg
ICBzZWxmLl9yZXN1bHRzX21hbmFnZXIgPSBUZXN0UmVzdWx0c01hbmFnZXIoc2VsZi5wb3J0LCBz
ZWxmLm9wdGlvbnMucGxhdGZvcm0sIHNlbGYub3B0aW9ucy5fX2RpY3RfX1snaW1wb3J0ZGlyJ10s
IHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3RvcnkoKSwgc2VsZi50ZXN0cykKKworICAg
IGRlZiBydW5fdGVzdHNfdG9fZ2VuZXJhdGVfdGVzdF9iYXNlbGluZShzZWxmKToKKyAgICAgICAg
c2VsZi5ydW5fdGVzdF9zdWl0ZXMoWyctcScsICctLW5vLXJldHJ5LWZhaWx1cmVzJywgJy0tbm8t
c2hvdy1yZXN1bHRzJywgJy0tc2tpcHBlZD1pZ25vcmUnXSkKKworICAgIGRlZiByZW1vdmVfdGVz
dF9leHBlY3RlZF9maWxlcyhzZWxmKToKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi50ZXN0czoK
KyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3Qs
ICcudHh0JywgRmFsc2UpCisgICAgICAgICAgICBpZiBub3QoZmlsZW5hbWUgaXMgTm9uZSk6Cisg
ICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5wb3J0
LmxheW91dF90ZXN0c19kaXIoKSwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5maWxl
c3lzdGVtLnJlbW92ZShmaWxlX3BhdGgpCisKKyAgICBkZWYgcmVzdWx0c19tYW5hZ2VyKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0c19tYW5hZ2VyCisKKyAgICBkZWYgcnVuX3Rl
c3RzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuX19kaWN0X19bJ3czY19saXN0J10g
aXMgVHJ1ZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgaW1wb3J0IHRl
c3RzCisgICAgICAgIF9sb2cuaW5mbygnSW1wb3J0aW5nIHRlc3RzLi4uJykKKyAgICAgICAgc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci5pbXBvcnRfdGVzdHMoKQorCisgICAgICAgICMg
c2V0dXAgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgIHdwdF9zZXR1
cCA9IFdlYlBsYXRmb3JtVGVzdFNldHVwKHNlbGYucG9ydC5ob3N0LCBzZWxmLm9wdGlvbnMpCisg
ICAgICAgIHdwdF9zZXR1cC5jb3B5X3dlYmtpdF90ZXN0aGFybmVzc3JlcG9ydCgpCisgICAgICAg
IHdwdF9zZXR1cC5jb3B5X3dwdF9qc29uX2NvbmZpZygpCisKKyAgICAgICAgc2VsZi5yZW1vdmVf
dGVzdF9leHBlY3RlZF9maWxlcygpCisKKyAgICAgICAgX2xvZy5pbmZvKCdSdW5uaW5nIHRlc3Rz
Li4uJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdHNfdG9fZ2VuZXJhdGVfdGVzdF9iYXNlbGluZSgp
CisKKyAgICAgICAgIyBnZW5lcmF0ZSBjb25mb3JtYW5jZSByZXN1bHRzCisgICAgICAgIHNlbGYu
ZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLmdldF9jb25mb3JtYW5jZV9yZXN1
bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICBzZWxmLnJlc3VsdHNfbWFuYWdlcigpLndyaXRlX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMoc2VsZi5nZXRfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rvcnko
KSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByaW50X3Jlc3VsdHNfdG9fY29u
c29sZShzZWxmKToKKyAgICAgICAgc3VtbWFyeSA9IHNlbGYucmVzdWx0c19tYW5hZ2VyKCkuc3Vt
bWFyeSgpCisgICAgICAgIF9sb2cuaW5mbygnUnVuICcgKyBzdHIoc3VtbWFyeVsndG90YWwnXSkg
KyAnIHRlc3RzJykKKyAgICAgICAgX2xvZy5pbmZvKCdQYXNzOiAnICsgc3RyKHN1bW1hcnlbJ251
bV9wYXNzJ10pKQorICAgICAgICBfbG9nLmluZm8oJ1BhcnRpYWw6ICcgKyBzdHIoc3VtbWFyeVsn
bnVtX3BhcnRpYWwnXSkpCisgICAgICAgIF9sb2cuaW5mbygnRmFpbDogJyArIHN0cihzdW1tYXJ5
WydudW1fZmFpbCddKSkKKyAgICAgICAgX2xvZy5pbmZvKCdFcnJvcjogJyArIHN0cihzdW1tYXJ5
WydudW1fZXJyb3InXSkpCisKKyAgICBkZWYgcHJpbnRfcG90ZW50aWFsX3Rlc3RfZXhwZWN0YXRp
b25zX3VwZGF0ZShzZWxmKToKKyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0
YXRpb25zKHNlbGYucG9ydCkubW9kZWwoKQorICAgICAgICBjb25mb3JtYW5jZSA9IHNlbGYucmVz
dWx0c19tYW5hZ2VyKCkuY29uZm9ybWFuY2VfcmVzdWx0cygpCisgICAgICAgICMgVE9ETzogRmlu
YWxpemUgdGhpcyBjaGVjayB0byBnZXQgbWVhbmluZ2Z1bCBpbmZvcm1hdGlvbgorICAgICAgICBm
b3IgdGVzdCBpbiBzZWxmLnRlc3RzOgorICAgICAgICAgICAgaWYgbm90IHRlc3RfZXhwZWN0YXRp
b25zLmhhc190ZXN0KHRlc3QpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjb25mb3JtYW5jZVt0
ZXN0XSA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygndGVzdCAnICsg
dGVzdCArICcgaXMgbm90IHBhc3NpbmcnKQorICAgICAgICAgICAgZWxpZiBjb25mb3JtYW5jZVt0
ZXN0XSA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCd0ZXN0ICcgKyB0ZXN0
ICsgJyBpcyBub3cgcGFzc2luZycpCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAg
Y2xhc3MgTG9nSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgICAgICBkZWYgZm9y
bWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dp
bmcuSU5GTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVs
bmFtZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0
TWVzc2FnZSgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2Vy
LnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAg
aGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFu
ZGxlcikKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3Rk
ZXJyKToKKyAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgaG9zdCA9IEhvc3QoKQorICAgIHBh
cnNlciA9IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyKGhvc3QsIGhvc3QuZmlsZXN5c3RlbS5i
YXNlbmFtZShfX2ZpbGVfXykpCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9rbm93
bl9hcmdzKGFyZ3YpCisgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBs
YXRmb3JtLCBvcHRwYXJzZS5WYWx1ZXMoeyd3ZWJraXRfdGVzdF9ydW5uZXInOiBvcHRpb25zLndl
YmtpdF90ZXN0X3J1bm5lcn0pKQorCisgICAgcnVubmVyID0gVzNDQ29uZm9ybWFuY2VSdW5uZXIo
cG9ydCwgb3B0aW9ucykKKyAgICBpZiBydW5uZXIucnVuX3Rlc3RzKCk6CisgICAgICAgIHJ1bm5l
ci5wcmludF9yZXN1bHRzX3RvX2NvbnNvbGUoKQorICAgICAgICBydW5uZXIucHJpbnRfcG90ZW50
aWFsX3Rlc3RfZXhwZWN0YXRpb25zX3VwZGF0ZSgpCisgICAgICAgIHJ1bm5lci5yZW1vdmVfdGVz
dF9leHBlY3RlZF9maWxlcygpCisgICAgICAgIF9sb2cuaW5mbygiUmVzdWx0cyBleHBvcnRlZCBp
biAnIiArIHJ1bm5lci5nZXRfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3RvcnkoKSArICInIikK
KworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2
WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3czYy90ZXN0X3Jlc3VsdHNfbWFuYWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5MDliYjRlZmMz
Yzg2YjQzNThhODMyOWFhMWYxZTdjNjZlMmE1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3Jlc3VsdHNfbWFuYWdlci5weQpAQCAtMCwwICsxLDE2
MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3JpcHQgbWFuYWdlIEpTT04gYW5kIHJlc3Vs
dHMuaHRtbCBmaWxlcyBmb3IgVzNDIHRlc3QgcmVzdWx0cy4KKworIiIiCisKK2ltcG9ydCBjb2xs
ZWN0aW9ucworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBpbworaW1wb3J0IGpzb24KK2ltcG9ydCBv
cworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhv
c3QKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yCisKKworY2xhc3MgVGVzdFJlc3VsdHNNYW5hZ2VyKG9iamVjdCk6
CisKKyAgICBSRUFTT05TID0gWydUSU1FT1VUJywgJ0NSQVNIJywgJ0ZBSUxVUkUnXQorICAgIEVY
VEVOU0lPTlMgPSBbJy5odG1sJywgJy5odG0nLCAnLnhodG1sJywgJy5zdmcnLCAnLnhtbCcsICcu
eGh0J10KKworICAgIF9KU09OX1BSRUZJWCA9ICdBRERfQ09ORk9STUFOQ0VfUkVTVUxUUygnCisg
ICAgX0pTT05fU1VGRklYID0gJyk7JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHBs
YXRmb3JtLCBiYXNlX2RpciwgcmVzdWx0X2RpciwgdGVzdHMpOgorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0K
KyAgICAgICAgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRfZGlyCisgICAgICAgIHNl
bGYuX3BsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5fdGVzdHMgPSB0ZXN0cworICAg
ICAgICByZXN1bHRzX2pzb25fcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9yZXN1
bHRzX2RpcmVjdG9yeSwgJ2Z1bGxfcmVzdWx0cy5qc29uJykKKyAgICAgICAgcmVzdWx0c19qc29u
ID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5sb2FkX2pzb24oc2VsZi5fZmlsZXN5c3RlbSwgcmVz
dWx0c19qc29uX3BhdGgpCisKKyAgICAgICAgIyBSb290IGRpcmVjdG9yeSBvZiBXM0MgaW1wb3J0
ZWQgdGVzdAorICAgICAgICBzZWxmLl9iYXNlX2RpciA9IGJhc2VfZGlyCisKKyAgICAgICAgIyBU
T0RPOiBjYW4gd2Ugc2ltcGxpZnkgdGhpcworICAgICAgICBzZWxmLl9qc29uX3Rlc3RfZGljdCA9
IE5vbmUKKyAgICAgICAgaWYgcmVzdWx0c19qc29uWyd0ZXN0cyddOgorICAgICAgICAgICAgcGF0
aCA9IFtdCisgICAgICAgICAgICBub2RlID0gc2VsZi5fZmlsZXN5c3RlbS5zcGxpdChzZWxmLl9i
YXNlX2RpcikKKyAgICAgICAgICAgIHdoaWxlIG5vZGVbMF06CisgICAgICAgICAgICAgICAgcGF0
aC5hcHBlbmQobm9kZVsxXSkKKyAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5fZmlsZXN5c3Rl
bS5zcGxpdChub2RlWzBdKQorICAgICAgICAgICAgcGF0aC5hcHBlbmQobm9kZVsxXSkKKyAgICAg
ICAgICAgIHBhdGgucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLl9qc29uX3Rlc3RfZGljdCA9
IHJlc3VsdHNfanNvblsndGVzdHMnXQorICAgICAgICAgICAgZm9yIGtleSBpbiBwYXRoOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2pzb25fdGVzdF9kaWN0ID0gc2VsZi5fanNvbl90ZXN0X2RpY3Rb
a2V5XQorCisgICAgZGVmIF9nZXRfdGVzdF9yZXN1bHRzKHNlbGYsIHRlc3RzLCB0ZXN0X2RpY3Q9
Tm9uZSwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgdGVzdF9kaWN0IGlzIE5vbmU6CisgICAgICAg
ICAgICB0ZXN0X2RpY3QgPSBzZWxmLl9qc29uX3Rlc3RfZGljdAorICAgICAgICAgICAgaWYgdGVz
dF9kaWN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHBhdGgg
aXMgTm9uZToKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLl9iYXNlX2RpcgorICAgICAgICBmb3Ig
a2V5IGluIHRlc3RfZGljdC5rZXlzKCk6CisgICAgICAgICAgICBfcGF0aCA9IHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihwYXRoLCBrZXkpCisgICAgICAgICAgICAoZmlsZW5hbWUsIGV4dCkgPSBvcy5w
YXRoLnNwbGl0ZXh0KGtleSkKKyAgICAgICAgICAgIGlmIGV4dCBpbiBzZWxmLkVYVEVOU0lPTlM6
CisgICAgICAgICAgICAgICAgdGVzdHNbX3BhdGhdID0gdGVzdF9kaWN0W2tleV0KKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBQcm9jZXNzIHN1YmRpcmVjdG9yaWVzCisgICAg
ICAgICAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0ZXN0cywgdGVzdF9kaWN0W2tleV0s
IF9wYXRoKQorCisgICAgZGVmIHRlc3RfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgdGVzdF9yZXN1
bHRzID0ge30KKyAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0ZXN0X3Jlc3VsdHMpCisg
ICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMKKworICAgIGRlZiBfZ2V0X2NvbmZvcm1hbmNlX2Zy
b21fZXhwZWN0ZWRfdGV4dChzZWxmLCB0ZXN0X25hbWUsIHRleHQsIHRlc3RfcmVzdWx0cyk6Cisg
ICAgICAgIGlmIHRleHQgaXMgTm9uZSBvciBsZW4odGV4dCkgPT0gMDoKKyAgICAgICAgICAgICMg
ZW1wdHkgZXhwZWN0ZWQgZmlsZSwgcHJvYmFibHkgZHVlIHRvIENSQVNIIG9yIFRJTUVPVVQuIExl
dCdzIGZpbmQgd2h5IGluIGpzb24gcmVzdWx0cy4KKyAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBp
biB0ZXN0X3Jlc3VsdHMgYW5kICdhY3R1YWwnIGluIHRlc3RfcmVzdWx0c1t0ZXN0X25hbWVdOgor
ICAgICAgICAgICAgICAgIHJlYXNvbiA9IHRlc3RfcmVzdWx0c1t0ZXN0X25hbWVdWydhY3R1YWwn
XQorICAgICAgICAgICAgICAgIGlmIHJlYXNvbiA9PSAnQ1JBU0gnIG9yIHJlYXNvbiA9PSAnVElN
RU9VVCc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFzb24KKyAgICAgICAgICAgIHJl
dHVybiAnRVJST1InCisgICAgICAgICMgTGV0J3MgY2hlY2sgd2hldGhlciBzb21lIGxpbmVzIHN0
YXJ0IHdpdGggUEFTUyBvciBGQUlMCisgICAgICAgICMgVGVzdCBpcyBzYWlkIHRvIFBBU1MgaWYg
YXQgbGVhc3Qgb25lIGxpbmUgaXMgUEFTUyBhbiBubyBsaW5lIGlzIEZBSUwKKyAgICAgICAgaGFz
RmFpbCA9IEZhbHNlCisgICAgICAgIGhhc1Bhc3MgPSBGYWxzZQorICAgICAgICBidWYgPSBpby5T
dHJpbmdJTyh1bmljb2RlKHRleHQsICJ1dGYtOCIpKQorICAgICAgICBmb3IgbGluZSBpbiBidWYu
cmVhZGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BBU1MnKToKKyAg
ICAgICAgICAgICAgICBoYXNQYXNzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0
c3dpdGgoJ0ZBSUwnKToKKyAgICAgICAgICAgICAgICBoYXNGYWlsID0gVHJ1ZQorICAgICAgICBp
ZiBoYXNQYXNzOgorICAgICAgICAgICAgcmV0dXJuICdQQVJUSUFMJyBpZiBoYXNGYWlsIGVsc2Ug
J1BBU1MnCisgICAgICAgIGlmIGhhc0ZhaWw6CisgICAgICAgICAgICByZXR1cm4gJ0ZBSUwnCisg
ICAgICAgIHJldHVybiAnRVJST1InCisKKyAgICBkZWYgY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxm
KToKKyAgICAgICAgc3RhdHVzID0ge30KKyAgICAgICAgdGVzdF9yZXN1bHRzID0gc2VsZi50ZXN0
X3Jlc3VsdHMoKQorICAgICAgICBmb3IgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RzOgorICAgICAg
ICAgICAgc3RhdHVzW3Rlc3RfbmFtZV0gPSBzZWxmLl9nZXRfY29uZm9ybWFuY2VfZnJvbV9leHBl
Y3RlZF90ZXh0KHRlc3RfbmFtZSwgc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfbmFtZSks
IHRlc3RfcmVzdWx0cykKKyAgICAgICAgcmV0dXJuIHN0YXR1cworCisgICAgZGVmIHN1bW1hcnko
c2VsZik6CisgICAgICAgIG51bV9wYXNzID0gbnVtX3BhcnRpYWwgPSBudW1fZmFpbCA9IG51bV9l
cnJvciA9IDAKKyAgICAgICAgc3RhdHVzID0gc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzKCkKKyAg
ICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0czoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHN0YXR1c1t0ZXN0X25hbWVdCisgICAgICAgICAgICBpZiByZXN1bHQgPT0gJ1BBU1MnOgorICAg
ICAgICAgICAgICAgIG51bV9wYXNzICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09ICdQ
QVJUSUFMJzoKKyAgICAgICAgICAgICAgICBudW1fcGFydGlhbCArPSAxCisgICAgICAgICAgICBl
bGlmIHJlc3VsdCA9PSAnRkFJTCc6CisgICAgICAgICAgICAgICAgbnVtX2ZhaWwgKz0gMQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBudW1fZXJyb3IgKz0gMQorICAgICAgICBz
dW1tYXJ5ID0ge30KKyAgICAgICAgc3VtbWFyeVsndG90YWwnXSA9IG51bV9wYXNzICsgbnVtX2Zh
aWwgKyBudW1fcGFydGlhbCArIG51bV9lcnJvcgorICAgICAgICBzdW1tYXJ5WydudW1fcGFzcydd
ID0gbnVtX3Bhc3MKKyAgICAgICAgc3VtbWFyeVsnbnVtX2ZhaWwnXSA9IG51bV9mYWlsCisgICAg
ICAgIHN1bW1hcnlbJ251bV9wYXJ0aWFsJ10gPSBudW1fcGFydGlhbAorICAgICAgICBzdW1tYXJ5
WydudW1fZXJyb3InXSA9IG51bV9lcnJvcgorICAgICAgICByZXR1cm4gc3VtbWFyeQorCisgICAg
ZGVmIHdyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIHN0YXR1
cyA9IHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0cygpCisgICAgICAgIHJlc3VsdHMgPSB7fQorICAg
ICAgICByZXN1bHRzWydjb25mb3JtYW5jZV9yZXN1bHRzJ10gPSBzdGF0dXMKKyAgICAgICAgcmVz
dWx0c1sncG9ydF9uYW1lJ10gPSBzZWxmLl9wb3J0LnBvcnRfbmFtZQorICAgICAgICAjIGNvcHkg
Y29uZm9ybWFuY2UgcmVzdWx0cyBhcyBqc29uIGRhdGEKKyAgICAgICAganNvbl9zdHJpbmcgPSBq
c29uLmR1bXBzKHJlc3VsdHMsIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAganNvbl9z
dHJpbmcgPSBzZWxmLl9KU09OX1BSRUZJWCArIGpzb25fc3RyaW5nICsgc2VsZi5fSlNPTl9TVUZG
SVgKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHBhdGgsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5qc29uJyksIGpzb25fc3Ry
aW5nKQorICAgICAgICAjIGNvcHkgaHRtbCB0ZW1wbGF0ZQorICAgICAgICByZXN1bHRzX2ZpbGUg
PSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnLCAnaW1wb3J0
ZWQnLCAndzNjJywgJ3Jlc291cmNlcycsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sJykK
KyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIHJlc3VsdHMuaHRtbCB0ZW1wbGF0ZSBmaWxlIHdvbid0
IGV4aXN0IHdoZW4gd2UncmUgdXNpbmcgYSBNb2NrRmlsZVN5c3RlbSBkdXJpbmcgdW5pdCB0ZXN0
cywKKyAgICAgICAgIyBzbyBtYWtlIHN1cmUgaXQgZXhpc3RzIGJlZm9yZSB3ZSB0cnkgdG8gY29w
eSBpdC4KKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocmVzdWx0c19maWxlKToK
KyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUocmVzdWx0c19maWxlLCBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4ocGF0aCwgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwnKSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9wbGF0Zm9ybV90ZXN0
X3NldHVwLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd2ViX3BsYXRmb3JtX3Rlc3Rf
c2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZiYTM5MzBjN2IwZDVkMDQzMDJkNjYzN2M0OWU1MTY2MWRh
MDc3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9w
bGF0Zm9ybV90ZXN0X3NldHVwLnB5CkBAIC0wLDAgKzEsNzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBu
YW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCBhbGxvd3Mgc2V0dGluZyB1cCB0
aGUgd2ViIHBsYXRmb3JtIHRlc3QgcGFyYW1ldGVycyBzdWNoIGFzOgorICAgIC0gVGhlIGNvbmZp
Zy5qc29uIGZpbGUgdXNlZCBieSB0aGUgV1BUIGh0dHAgc2VydmVyCisgICAgLSBUaGUgdGVzdGhh
cm5lc3NyZXBvcnQuanMgdXNlZCBmb3Igd2ViIHBsYXRmb3JtIHRlc3RzIChjb3B5IG9mIHdlYmtp
dCB0ZXN0aGFybmVzc3JlcG9ydC5qcykuCisiIiIKKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3
ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24ud2Vi
a2l0X2ZpbmRlciBpbXBvcnQgV2ViS2l0RmluZGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworCitjbGFzcyBXZWJQbGF0Zm9ybVRlc3RTZXR1cChvYmplY3QpOgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLmZpbGVz
eXN0ZW0gPSBob3N0LmZpbGVzeXN0ZW0KKworICAgICAgICB3ZWJraXRfZmluZGVyID0gV2ViS2l0
RmluZGVyKHNlbGYuZmlsZXN5c3RlbSkKKyAgICAgICAgc2VsZi5fd2Via2l0X3Jvb3QgPSB3ZWJr
aXRfZmluZGVyLndlYmtpdF9iYXNlKCkKKyAgICAgICAgc2VsZi5fd3B0X3Jvb3QgPSBzZWxmLmZp
bGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfcm9vdCwgJ0xheW91dFRlc3RzJywgb3B0aW9ucy5f
X2RpY3RfX1snaW1wb3J0ZGlyJ10pCisgICAgICAgIHNlbGYuX2xheW91dF9yb290ID0gc2VsZi5m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X3Jvb3QsICJMYXlvdXRUZXN0cyIpCisKKyAgICBk
ZWYgcmVzdG9yZV93M2NfdGVzdGhhcm5lc3NyZXBvcnQoc2VsZik6CisgICAgICAgIF9sb2cuZGVi
dWcoJ1VzaW5nIFczQyBXUFQgdGVzdGhhcm5lc3NyZXBvcnQuanMnKQorICAgICAgICB0ZXN0aGFy
bmVzc3JlcG9ydF93cHRfZmlsZW5hbWUgPSBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRf
cm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC13cHQuanMiKQorICAgICAgICBp
ZiBzZWxmLmZpbGVzeXN0ZW0uaXNmaWxlKHRlc3RoYXJuZXNzcmVwb3J0X3dwdF9maWxlbmFtZSk6
CisgICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0uY29weWZpbGUodGVzdGhhcm5lc3NyZXBvcnRf
d3B0X2ZpbGVuYW1lLCBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291
cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpKQorICAgICAgICAgICAgc2VsZi5maWxlc3lz
dGVtLnJlbW92ZSh0ZXN0aGFybmVzc3JlcG9ydF93cHRfZmlsZW5hbWUpCisKKyAgICBkZWYgY29w
eV93ZWJraXRfdGVzdGhhcm5lc3NyZXBvcnQoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ1Vz
aW5nIFdlYktpdCB0ZXN0aGFybmVzc3JlcG9ydC5qcycpCisgICAgICAgIHRlc3RoYXJuZXNzcmVw
b3J0X3drX2ZpbGVuYW1lID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jvb3Qs
ICJyZXNvdXJjZXMiLCAidGVzdGhhcm5lc3NyZXBvcnQuanMiKQorICAgICAgICBpZiBzZWxmLmZp
bGVzeXN0ZW0uaXNmaWxlKHRlc3RoYXJuZXNzcmVwb3J0X3drX2ZpbGVuYW1lKToKKyAgICAgICAg
ICAgIHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93
cHRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpLCBzZWxmLmZpbGVz
eXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9y
dC13cHQuanMiKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShzZWxmLmZp
bGVzeXN0ZW0uam9pbihzZWxmLl9sYXlvdXRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVz
c3JlcG9ydC5qcyIpLCBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291
cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpKQorCisgICAgZGVmIGNvcHlfd3B0X2pzb25f
Y29uZmlnKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdDb3B5aW5nIGpzb24gd2ViIHBsYXRm
b3JtIHNlcnZlciBjb25maWcnKQorICAgICAgICBjb25maWdfd3B0X2ZpbGVuYW1lID0gc2VsZi5m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jvb3QsICJpbXBvcnRlZCIsICJ3M2MiLCAiY29u
ZmlnLmpzb24iKQorICAgICAgICBpZiBzZWxmLmZpbGVzeXN0ZW0uaXNmaWxlKGNvbmZpZ193cHRf
ZmlsZW5hbWUpOgorICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLmNvcHlmaWxlKGNvbmZpZ193
cHRfZmlsZW5hbWUsIHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dwdF9yb290LCAiY29uZmln
Lmpzb24iKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234637</attachid>
            <date>2014-07-09 07:17:22 -0700</date>
            <delta_ts>2014-07-16 11:35:41 -0700</delta_ts>
            <desc>Adding static files</desc>
            <filename>bug-134766-20140709161700.patch</filename>
            <type>text/plain</type>
            <size>26159</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwNzk5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1
bi13M2MtY29uZm9ybWFuY2UtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi13M2MtY29uZm9ybWFu
Y2UtdGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNmMDE3NWE4NzYyYjA1Y2JjZGQ5YTdhZjk2MTI1NDFiMjk5
MjYyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXczYy1jb25mb3JtYW5j
ZS10ZXN0cwpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5
cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiV3JhcHBlciBhcm91bmQgd2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2Vf
dGVzdHMucHkiIiIKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBtdWx0aXByb2Nlc3Npbmdf
Ym9vdHN0cmFwCisKK211bHRpcHJvY2Vzc2luZ19ib290c3RyYXAucnVuKCd3ZWJraXRweScsICd3
M2MnLCAncnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weScpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3czYy9ydW5fdzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weQpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NTBhOWYyYzIzZTg1NDcwMjRmZTIyODg1ODc5MGQ5ZDBmNTIyODk2Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90
ZXN0cy5weQpAQCAtMCwwICsxLDE3MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBD
YW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3JpcHQg
ZXZhbHVhdGVzIFczQyB0ZXN0cyBjb25mb3JtYW5jZSBieToKKyAgICAtIGltcG9ydGluZyBXM0Mg
dGVzdHMgYXMgV2ViS2l0IHRlc3RzICh1c2luZyB3ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlcikK
KyAgICAtIGdlbmVyYXRpbmcgZXhwZWN0ZWQudHh0IGZpbGVzICh1c2luZyBydW4td2Via2l0LXRl
c3RzKQorICAgIC0gY29tcHV0aW5nIHdoZXRoZXIgYSB0ZXN0IGlzIHBhc3Npbmcgb3Igbm90IGJ5
IGNoZWNraW5nIFBBU1MvRkFJTCBhc3NlcnRpb25zIG91dHB1dHRlZCB3aXRoaW4gdGhlIGV4cGVj
dGVkLnR4dCBmaWxlcworIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuY29t
bW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IEV4ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRl
c3RfZXhwZWN0YXRpb25zIGltcG9ydCBUZXN0RXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IHBsYXRmb3JtX29wdGlvbnMKK2Zyb20gd2Via2l0cHkudzNjLmZhY3RvcnkgaW1w
b3J0IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyCitmcm9tIHdlYmtpdHB5LnczYy50ZXN0X3Jl
c3VsdHNfbWFuYWdlciBpbXBvcnQgVGVzdFJlc3VsdHNNYW5hZ2VyCitmcm9tIHdlYmtpdHB5Lncz
Yy53ZWJfcGxhdGZvcm1fdGVzdF9zZXR1cCBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2V0dXAKK2Zy
b20gd2Via2l0cHkudzNjLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyIGltcG9ydCBXZWJQbGF0
Zm9ybVRlc3RJbXBvcnRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisK
KworY2xhc3MgVzNDQ29uZm9ybWFuY2VSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAg
ICBzZWxmLmZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLm9w
dGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIg
PSBXZWJQbGF0Zm9ybVRlc3RJbXBvcnRlcihwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLnRl
c3RzID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci50ZXN0cygpCisgICAgICAgIHNl
bGYuX3Jlc3VsdHNfbWFuYWdlciA9IE5vbmUKKworICAgIGRlZiBnZXRfY29uZm9ybWFuY2VfcmVz
dWx0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0uam9p
bihzZWxmLnBvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgIi4uIiwgInczYy1jb25mb3JtYW5jZS1y
ZXN1bHRzIikKKworICAgIGRlZiBsYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuZ2V0X2NvbmZvcm1hbmNl
X3Jlc3VsdHNfZGlyZWN0b3J5KCksICJsYXlvdXQtdGVzdC1yZXN1bHRzIikKKworICAgIGRlZiB0
ZXN0X3N1aXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
aW1wb3J0ZXIudGVzdF9zdWl0ZXMoKQorCisgICAgZGVmIHJ1bl90ZXN0X3N1aXRlcyhzZWxmLCBw
YXJhbWV0ZXJzKToKKyAgICAgICAgI1RPRE86IGNsZWFuIHRoaXMgdG8gaGF2ZSBhIGJldHRlciBw
YXRoIGNvbXB1dGF0aW9uCisgICAgICAgIHVwID0gb3MucGF0aC5kaXJuYW1lCisgICAgICAgIHNj
cmlwdF9kaXIgPSB1cCh1cCh1cChvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpCisgICAgICAg
IHRtcF9hcmdzID0gW3NlbGYuZmlsZXN5c3RlbS5qb2luKHNjcmlwdF9kaXIsICdydW4td2Via2l0
LXRlc3RzJyldICsgcGFyYW1ldGVycyArIFsnLS1yZXN1bHRzLWRpcmVjdG9yeT0nICsgc2VsZi5s
YXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSgpXQorICAgICAgICB0bXBfYXJncy5hcHBlbmQo
Jy0tJyArIHNlbGYub3B0aW9ucy5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLndl
YmtpdF90ZXN0X3J1bm5lciBpcyBUcnVlOgorICAgICAgICAgICAgdG1wX2FyZ3MuYXBwZW5kKCct
MicpCisKKyAgICAgICAgI2NvbXB1dGUgbGlzdCBvZiB0ZXN0cyB0byBydW4KKyAgICAgICAgZm9y
IHRlc3Rfc3VpdGUgaW4gc2VsZi50ZXN0X3N1aXRlcygpOgorICAgICAgICAgICAgcGF0aCA9IHNl
bGYuZmlsZXN5c3RlbS5qb2luKCdMYXlvdXRUZXN0cycsICBzZWxmLm9wdGlvbnMuX19kaWN0X19b
J2ltcG9ydGRpciddLCB0ZXN0X3N1aXRlKQorICAgICAgICAgICAgdG1wX2FyZ3MuYXBwZW5kKHBh
dGgpCisgICAgICAgIEV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5kKHRtcF9hcmdzLCBlcnJvcl9oYW5k
bGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIHJldHVybl9zdGRlcnI9KG5vdCBzZWxmLm9wdGlv
bnMuX19kaWN0X19bJ3czY192ZXJib3NlJ10pLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQorICAgICAg
ICBzZWxmLl9yZXN1bHRzX21hbmFnZXIgPSBUZXN0UmVzdWx0c01hbmFnZXIoc2VsZi5wb3J0LCBz
ZWxmLm9wdGlvbnMucGxhdGZvcm0sIHNlbGYub3B0aW9ucy5fX2RpY3RfX1snaW1wb3J0ZGlyJ10s
IHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3RvcnkoKSwgc2VsZi50ZXN0cykKKworICAg
IGRlZiBydW5fdGVzdHNfdG9fZ2VuZXJhdGVfdGVzdF9iYXNlbGluZShzZWxmKToKKyAgICAgICAg
c2VsZi5ydW5fdGVzdF9zdWl0ZXMoWyctcScsICctLW5vLXJldHJ5LWZhaWx1cmVzJywgJy0tbm8t
c2hvdy1yZXN1bHRzJywgJy0tc2tpcHBlZD1pZ25vcmUnXSkKKworICAgIGRlZiByZW1vdmVfdGVz
dF9leHBlY3RlZF9maWxlcyhzZWxmKToKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi50ZXN0czoK
KyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3Qs
ICcudHh0JywgRmFsc2UpCisgICAgICAgICAgICBpZiBub3QoZmlsZW5hbWUgaXMgTm9uZSk6Cisg
ICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5wb3J0
LmxheW91dF90ZXN0c19kaXIoKSwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5maWxl
c3lzdGVtLnJlbW92ZShmaWxlX3BhdGgpCisKKyAgICBkZWYgcmVzdWx0c19tYW5hZ2VyKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0c19tYW5hZ2VyCisKKyAgICBkZWYgcnVuX3Rl
c3RzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuX19kaWN0X19bJ3czY19saXN0J10g
aXMgVHJ1ZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgaW1wb3J0IHRl
c3RzCisgICAgICAgIF9sb2cuaW5mbygnSW1wb3J0aW5nIHRlc3RzLi4uJykKKyAgICAgICAgc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci5pbXBvcnRfdGVzdHMoKQorCisgICAgICAgICMg
c2V0dXAgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgIHdwdF9zZXR1
cCA9IFdlYlBsYXRmb3JtVGVzdFNldHVwKHNlbGYucG9ydC5ob3N0LCBzZWxmLm9wdGlvbnMpCisg
ICAgICAgIHdwdF9zZXR1cC5jb3B5X3dlYmtpdF90ZXN0aGFybmVzc3JlcG9ydCgpCisgICAgICAg
IHdwdF9zZXR1cC5jb3B5X3dwdF9qc29uX2NvbmZpZygpCisKKyAgICAgICAgc2VsZi5yZW1vdmVf
dGVzdF9leHBlY3RlZF9maWxlcygpCisKKyAgICAgICAgX2xvZy5pbmZvKCdSdW5uaW5nIHRlc3Rz
Li4uJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdHNfdG9fZ2VuZXJhdGVfdGVzdF9iYXNlbGluZSgp
CisKKyAgICAgICAgIyBnZW5lcmF0ZSBjb25mb3JtYW5jZSByZXN1bHRzCisgICAgICAgIHNlbGYu
ZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLmdldF9jb25mb3JtYW5jZV9yZXN1
bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICBzZWxmLnJlc3VsdHNfbWFuYWdlcigpLndyaXRlX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMoc2VsZi5nZXRfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rvcnko
KSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByaW50X3Jlc3VsdHNfdG9fY29u
c29sZShzZWxmKToKKyAgICAgICAgc3VtbWFyeSA9IHNlbGYucmVzdWx0c19tYW5hZ2VyKCkuc3Vt
bWFyeSgpCisgICAgICAgIF9sb2cuaW5mbygnUnVuICcgKyBzdHIoc3VtbWFyeVsndG90YWwnXSkg
KyAnIHRlc3RzJykKKyAgICAgICAgX2xvZy5pbmZvKCdQYXNzOiAnICsgc3RyKHN1bW1hcnlbJ251
bV9wYXNzJ10pKQorICAgICAgICBfbG9nLmluZm8oJ1BhcnRpYWw6ICcgKyBzdHIoc3VtbWFyeVsn
bnVtX3BhcnRpYWwnXSkpCisgICAgICAgIF9sb2cuaW5mbygnRmFpbDogJyArIHN0cihzdW1tYXJ5
WydudW1fZmFpbCddKSkKKyAgICAgICAgX2xvZy5pbmZvKCdFcnJvcjogJyArIHN0cihzdW1tYXJ5
WydudW1fZXJyb3InXSkpCisKKyAgICBkZWYgcHJpbnRfcG90ZW50aWFsX3Rlc3RfZXhwZWN0YXRp
b25zX3VwZGF0ZShzZWxmKToKKyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0
YXRpb25zKHNlbGYucG9ydCkubW9kZWwoKQorICAgICAgICBjb25mb3JtYW5jZSA9IHNlbGYucmVz
dWx0c19tYW5hZ2VyKCkuY29uZm9ybWFuY2VfcmVzdWx0cygpCisgICAgICAgICMgVE9ETzogRmlu
YWxpemUgdGhpcyBjaGVjayB0byBnZXQgbWVhbmluZ2Z1bCBpbmZvcm1hdGlvbgorICAgICAgICBm
b3IgdGVzdCBpbiBzZWxmLnRlc3RzOgorICAgICAgICAgICAgaWYgbm90IHRlc3RfZXhwZWN0YXRp
b25zLmhhc190ZXN0KHRlc3QpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjb25mb3JtYW5jZVt0
ZXN0XSA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygndGVzdCAnICsg
dGVzdCArICcgaXMgbm90IHBhc3NpbmcnKQorICAgICAgICAgICAgZWxpZiBjb25mb3JtYW5jZVt0
ZXN0XSA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCd0ZXN0ICcgKyB0ZXN0
ICsgJyBpcyBub3cgcGFzc2luZycpCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAg
Y2xhc3MgTG9nSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgICAgICBkZWYgZm9y
bWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dp
bmcuSU5GTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVs
bmFtZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0
TWVzc2FnZSgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2Vy
LnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAg
aGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFu
ZGxlcikKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3Rk
ZXJyKToKKyAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgaG9zdCA9IEhvc3QoKQorICAgIHBh
cnNlciA9IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyKGhvc3QsIGhvc3QuZmlsZXN5c3RlbS5i
YXNlbmFtZShfX2ZpbGVfXykpCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9rbm93
bl9hcmdzKGFyZ3YpCisgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBs
YXRmb3JtLCBvcHRwYXJzZS5WYWx1ZXMoeyd3ZWJraXRfdGVzdF9ydW5uZXInOiBvcHRpb25zLndl
YmtpdF90ZXN0X3J1bm5lcn0pKQorCisgICAgcnVubmVyID0gVzNDQ29uZm9ybWFuY2VSdW5uZXIo
cG9ydCwgb3B0aW9ucykKKyAgICBpZiBydW5uZXIucnVuX3Rlc3RzKCk6CisgICAgICAgIHJ1bm5l
ci5wcmludF9yZXN1bHRzX3RvX2NvbnNvbGUoKQorICAgICAgICBydW5uZXIucHJpbnRfcG90ZW50
aWFsX3Rlc3RfZXhwZWN0YXRpb25zX3VwZGF0ZSgpCisgICAgICAgIHJ1bm5lci5yZW1vdmVfdGVz
dF9leHBlY3RlZF9maWxlcygpCisgICAgICAgIF9sb2cuaW5mbygiUmVzdWx0cyBleHBvcnRlZCBp
biAnIiArIHJ1bm5lci5nZXRfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3RvcnkoKSArICInIikK
KworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2
WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3czYy90ZXN0X3Jlc3VsdHNfbWFuYWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5MDliYjRlZmMz
Yzg2YjQzNThhODMyOWFhMWYxZTdjNjZlMmE1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3Jlc3VsdHNfbWFuYWdlci5weQpAQCAtMCwwICsxLDE2
MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3JpcHQgbWFuYWdlIEpTT04gYW5kIHJlc3Vs
dHMuaHRtbCBmaWxlcyBmb3IgVzNDIHRlc3QgcmVzdWx0cy4KKworIiIiCisKK2ltcG9ydCBjb2xs
ZWN0aW9ucworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBpbworaW1wb3J0IGpzb24KK2ltcG9ydCBv
cworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhv
c3QKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yCisKKworY2xhc3MgVGVzdFJlc3VsdHNNYW5hZ2VyKG9iamVjdCk6
CisKKyAgICBSRUFTT05TID0gWydUSU1FT1VUJywgJ0NSQVNIJywgJ0ZBSUxVUkUnXQorICAgIEVY
VEVOU0lPTlMgPSBbJy5odG1sJywgJy5odG0nLCAnLnhodG1sJywgJy5zdmcnLCAnLnhtbCcsICcu
eGh0J10KKworICAgIF9KU09OX1BSRUZJWCA9ICdBRERfQ09ORk9STUFOQ0VfUkVTVUxUUygnCisg
ICAgX0pTT05fU1VGRklYID0gJyk7JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHBs
YXRmb3JtLCBiYXNlX2RpciwgcmVzdWx0X2RpciwgdGVzdHMpOgorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0K
KyAgICAgICAgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRfZGlyCisgICAgICAgIHNl
bGYuX3BsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5fdGVzdHMgPSB0ZXN0cworICAg
ICAgICByZXN1bHRzX2pzb25fcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9yZXN1
bHRzX2RpcmVjdG9yeSwgJ2Z1bGxfcmVzdWx0cy5qc29uJykKKyAgICAgICAgcmVzdWx0c19qc29u
ID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5sb2FkX2pzb24oc2VsZi5fZmlsZXN5c3RlbSwgcmVz
dWx0c19qc29uX3BhdGgpCisKKyAgICAgICAgIyBSb290IGRpcmVjdG9yeSBvZiBXM0MgaW1wb3J0
ZWQgdGVzdAorICAgICAgICBzZWxmLl9iYXNlX2RpciA9IGJhc2VfZGlyCisKKyAgICAgICAgIyBU
T0RPOiBjYW4gd2Ugc2ltcGxpZnkgdGhpcworICAgICAgICBzZWxmLl9qc29uX3Rlc3RfZGljdCA9
IE5vbmUKKyAgICAgICAgaWYgcmVzdWx0c19qc29uWyd0ZXN0cyddOgorICAgICAgICAgICAgcGF0
aCA9IFtdCisgICAgICAgICAgICBub2RlID0gc2VsZi5fZmlsZXN5c3RlbS5zcGxpdChzZWxmLl9i
YXNlX2RpcikKKyAgICAgICAgICAgIHdoaWxlIG5vZGVbMF06CisgICAgICAgICAgICAgICAgcGF0
aC5hcHBlbmQobm9kZVsxXSkKKyAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5fZmlsZXN5c3Rl
bS5zcGxpdChub2RlWzBdKQorICAgICAgICAgICAgcGF0aC5hcHBlbmQobm9kZVsxXSkKKyAgICAg
ICAgICAgIHBhdGgucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLl9qc29uX3Rlc3RfZGljdCA9
IHJlc3VsdHNfanNvblsndGVzdHMnXQorICAgICAgICAgICAgZm9yIGtleSBpbiBwYXRoOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2pzb25fdGVzdF9kaWN0ID0gc2VsZi5fanNvbl90ZXN0X2RpY3Rb
a2V5XQorCisgICAgZGVmIF9nZXRfdGVzdF9yZXN1bHRzKHNlbGYsIHRlc3RzLCB0ZXN0X2RpY3Q9
Tm9uZSwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgdGVzdF9kaWN0IGlzIE5vbmU6CisgICAgICAg
ICAgICB0ZXN0X2RpY3QgPSBzZWxmLl9qc29uX3Rlc3RfZGljdAorICAgICAgICAgICAgaWYgdGVz
dF9kaWN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHBhdGgg
aXMgTm9uZToKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLl9iYXNlX2RpcgorICAgICAgICBmb3Ig
a2V5IGluIHRlc3RfZGljdC5rZXlzKCk6CisgICAgICAgICAgICBfcGF0aCA9IHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihwYXRoLCBrZXkpCisgICAgICAgICAgICAoZmlsZW5hbWUsIGV4dCkgPSBvcy5w
YXRoLnNwbGl0ZXh0KGtleSkKKyAgICAgICAgICAgIGlmIGV4dCBpbiBzZWxmLkVYVEVOU0lPTlM6
CisgICAgICAgICAgICAgICAgdGVzdHNbX3BhdGhdID0gdGVzdF9kaWN0W2tleV0KKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBQcm9jZXNzIHN1YmRpcmVjdG9yaWVzCisgICAg
ICAgICAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0ZXN0cywgdGVzdF9kaWN0W2tleV0s
IF9wYXRoKQorCisgICAgZGVmIHRlc3RfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgdGVzdF9yZXN1
bHRzID0ge30KKyAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0ZXN0X3Jlc3VsdHMpCisg
ICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMKKworICAgIGRlZiBfZ2V0X2NvbmZvcm1hbmNlX2Zy
b21fZXhwZWN0ZWRfdGV4dChzZWxmLCB0ZXN0X25hbWUsIHRleHQsIHRlc3RfcmVzdWx0cyk6Cisg
ICAgICAgIGlmIHRleHQgaXMgTm9uZSBvciBsZW4odGV4dCkgPT0gMDoKKyAgICAgICAgICAgICMg
ZW1wdHkgZXhwZWN0ZWQgZmlsZSwgcHJvYmFibHkgZHVlIHRvIENSQVNIIG9yIFRJTUVPVVQuIExl
dCdzIGZpbmQgd2h5IGluIGpzb24gcmVzdWx0cy4KKyAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBp
biB0ZXN0X3Jlc3VsdHMgYW5kICdhY3R1YWwnIGluIHRlc3RfcmVzdWx0c1t0ZXN0X25hbWVdOgor
ICAgICAgICAgICAgICAgIHJlYXNvbiA9IHRlc3RfcmVzdWx0c1t0ZXN0X25hbWVdWydhY3R1YWwn
XQorICAgICAgICAgICAgICAgIGlmIHJlYXNvbiA9PSAnQ1JBU0gnIG9yIHJlYXNvbiA9PSAnVElN
RU9VVCc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFzb24KKyAgICAgICAgICAgIHJl
dHVybiAnRVJST1InCisgICAgICAgICMgTGV0J3MgY2hlY2sgd2hldGhlciBzb21lIGxpbmVzIHN0
YXJ0IHdpdGggUEFTUyBvciBGQUlMCisgICAgICAgICMgVGVzdCBpcyBzYWlkIHRvIFBBU1MgaWYg
YXQgbGVhc3Qgb25lIGxpbmUgaXMgUEFTUyBhbiBubyBsaW5lIGlzIEZBSUwKKyAgICAgICAgaGFz
RmFpbCA9IEZhbHNlCisgICAgICAgIGhhc1Bhc3MgPSBGYWxzZQorICAgICAgICBidWYgPSBpby5T
dHJpbmdJTyh1bmljb2RlKHRleHQsICJ1dGYtOCIpKQorICAgICAgICBmb3IgbGluZSBpbiBidWYu
cmVhZGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BBU1MnKToKKyAg
ICAgICAgICAgICAgICBoYXNQYXNzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0
c3dpdGgoJ0ZBSUwnKToKKyAgICAgICAgICAgICAgICBoYXNGYWlsID0gVHJ1ZQorICAgICAgICBp
ZiBoYXNQYXNzOgorICAgICAgICAgICAgcmV0dXJuICdQQVJUSUFMJyBpZiBoYXNGYWlsIGVsc2Ug
J1BBU1MnCisgICAgICAgIGlmIGhhc0ZhaWw6CisgICAgICAgICAgICByZXR1cm4gJ0ZBSUwnCisg
ICAgICAgIHJldHVybiAnRVJST1InCisKKyAgICBkZWYgY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxm
KToKKyAgICAgICAgc3RhdHVzID0ge30KKyAgICAgICAgdGVzdF9yZXN1bHRzID0gc2VsZi50ZXN0
X3Jlc3VsdHMoKQorICAgICAgICBmb3IgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RzOgorICAgICAg
ICAgICAgc3RhdHVzW3Rlc3RfbmFtZV0gPSBzZWxmLl9nZXRfY29uZm9ybWFuY2VfZnJvbV9leHBl
Y3RlZF90ZXh0KHRlc3RfbmFtZSwgc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfbmFtZSks
IHRlc3RfcmVzdWx0cykKKyAgICAgICAgcmV0dXJuIHN0YXR1cworCisgICAgZGVmIHN1bW1hcnko
c2VsZik6CisgICAgICAgIG51bV9wYXNzID0gbnVtX3BhcnRpYWwgPSBudW1fZmFpbCA9IG51bV9l
cnJvciA9IDAKKyAgICAgICAgc3RhdHVzID0gc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzKCkKKyAg
ICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0czoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHN0YXR1c1t0ZXN0X25hbWVdCisgICAgICAgICAgICBpZiByZXN1bHQgPT0gJ1BBU1MnOgorICAg
ICAgICAgICAgICAgIG51bV9wYXNzICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09ICdQ
QVJUSUFMJzoKKyAgICAgICAgICAgICAgICBudW1fcGFydGlhbCArPSAxCisgICAgICAgICAgICBl
bGlmIHJlc3VsdCA9PSAnRkFJTCc6CisgICAgICAgICAgICAgICAgbnVtX2ZhaWwgKz0gMQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBudW1fZXJyb3IgKz0gMQorICAgICAgICBz
dW1tYXJ5ID0ge30KKyAgICAgICAgc3VtbWFyeVsndG90YWwnXSA9IG51bV9wYXNzICsgbnVtX2Zh
aWwgKyBudW1fcGFydGlhbCArIG51bV9lcnJvcgorICAgICAgICBzdW1tYXJ5WydudW1fcGFzcydd
ID0gbnVtX3Bhc3MKKyAgICAgICAgc3VtbWFyeVsnbnVtX2ZhaWwnXSA9IG51bV9mYWlsCisgICAg
ICAgIHN1bW1hcnlbJ251bV9wYXJ0aWFsJ10gPSBudW1fcGFydGlhbAorICAgICAgICBzdW1tYXJ5
WydudW1fZXJyb3InXSA9IG51bV9lcnJvcgorICAgICAgICByZXR1cm4gc3VtbWFyeQorCisgICAg
ZGVmIHdyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIHN0YXR1
cyA9IHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0cygpCisgICAgICAgIHJlc3VsdHMgPSB7fQorICAg
ICAgICByZXN1bHRzWydjb25mb3JtYW5jZV9yZXN1bHRzJ10gPSBzdGF0dXMKKyAgICAgICAgcmVz
dWx0c1sncG9ydF9uYW1lJ10gPSBzZWxmLl9wb3J0LnBvcnRfbmFtZQorICAgICAgICAjIGNvcHkg
Y29uZm9ybWFuY2UgcmVzdWx0cyBhcyBqc29uIGRhdGEKKyAgICAgICAganNvbl9zdHJpbmcgPSBq
c29uLmR1bXBzKHJlc3VsdHMsIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAganNvbl9z
dHJpbmcgPSBzZWxmLl9KU09OX1BSRUZJWCArIGpzb25fc3RyaW5nICsgc2VsZi5fSlNPTl9TVUZG
SVgKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHBhdGgsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5qc29uJyksIGpzb25fc3Ry
aW5nKQorICAgICAgICAjIGNvcHkgaHRtbCB0ZW1wbGF0ZQorICAgICAgICByZXN1bHRzX2ZpbGUg
PSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnLCAnaW1wb3J0
ZWQnLCAndzNjJywgJ3Jlc291cmNlcycsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sJykK
KyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIHJlc3VsdHMuaHRtbCB0ZW1wbGF0ZSBmaWxlIHdvbid0
IGV4aXN0IHdoZW4gd2UncmUgdXNpbmcgYSBNb2NrRmlsZVN5c3RlbSBkdXJpbmcgdW5pdCB0ZXN0
cywKKyAgICAgICAgIyBzbyBtYWtlIHN1cmUgaXQgZXhpc3RzIGJlZm9yZSB3ZSB0cnkgdG8gY29w
eSBpdC4KKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocmVzdWx0c19maWxlKToK
KyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUocmVzdWx0c19maWxlLCBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4ocGF0aCwgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwnKSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9wbGF0Zm9ybV90ZXN0
X3NldHVwLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd2ViX3BsYXRmb3JtX3Rlc3Rf
c2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZiYTM5MzBjN2IwZDVkMDQzMDJkNjYzN2M0OWU1MTY2MWRh
MDc3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9w
bGF0Zm9ybV90ZXN0X3NldHVwLnB5CkBAIC0wLDAgKzEsNzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBu
YW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCBhbGxvd3Mgc2V0dGluZyB1cCB0
aGUgd2ViIHBsYXRmb3JtIHRlc3QgcGFyYW1ldGVycyBzdWNoIGFzOgorICAgIC0gVGhlIGNvbmZp
Zy5qc29uIGZpbGUgdXNlZCBieSB0aGUgV1BUIGh0dHAgc2VydmVyCisgICAgLSBUaGUgdGVzdGhh
cm5lc3NyZXBvcnQuanMgdXNlZCBmb3Igd2ViIHBsYXRmb3JtIHRlc3RzIChjb3B5IG9mIHdlYmtp
dCB0ZXN0aGFybmVzc3JlcG9ydC5qcykuCisiIiIKKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3
ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24ud2Vi
a2l0X2ZpbmRlciBpbXBvcnQgV2ViS2l0RmluZGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworCitjbGFzcyBXZWJQbGF0Zm9ybVRlc3RTZXR1cChvYmplY3QpOgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLmZpbGVz
eXN0ZW0gPSBob3N0LmZpbGVzeXN0ZW0KKworICAgICAgICB3ZWJraXRfZmluZGVyID0gV2ViS2l0
RmluZGVyKHNlbGYuZmlsZXN5c3RlbSkKKyAgICAgICAgc2VsZi5fd2Via2l0X3Jvb3QgPSB3ZWJr
aXRfZmluZGVyLndlYmtpdF9iYXNlKCkKKyAgICAgICAgc2VsZi5fd3B0X3Jvb3QgPSBzZWxmLmZp
bGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfcm9vdCwgJ0xheW91dFRlc3RzJywgb3B0aW9ucy5f
X2RpY3RfX1snaW1wb3J0ZGlyJ10pCisgICAgICAgIHNlbGYuX2xheW91dF9yb290ID0gc2VsZi5m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X3Jvb3QsICJMYXlvdXRUZXN0cyIpCisKKyAgICBk
ZWYgcmVzdG9yZV93M2NfdGVzdGhhcm5lc3NyZXBvcnQoc2VsZik6CisgICAgICAgIF9sb2cuZGVi
dWcoJ1VzaW5nIFczQyBXUFQgdGVzdGhhcm5lc3NyZXBvcnQuanMnKQorICAgICAgICB0ZXN0aGFy
bmVzc3JlcG9ydF93cHRfZmlsZW5hbWUgPSBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRf
cm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC13cHQuanMiKQorICAgICAgICBp
ZiBzZWxmLmZpbGVzeXN0ZW0uaXNmaWxlKHRlc3RoYXJuZXNzcmVwb3J0X3dwdF9maWxlbmFtZSk6
CisgICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0uY29weWZpbGUodGVzdGhhcm5lc3NyZXBvcnRf
d3B0X2ZpbGVuYW1lLCBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291
cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpKQorICAgICAgICAgICAgc2VsZi5maWxlc3lz
dGVtLnJlbW92ZSh0ZXN0aGFybmVzc3JlcG9ydF93cHRfZmlsZW5hbWUpCisKKyAgICBkZWYgY29w
eV93ZWJraXRfdGVzdGhhcm5lc3NyZXBvcnQoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ1Vz
aW5nIFdlYktpdCB0ZXN0aGFybmVzc3JlcG9ydC5qcycpCisgICAgICAgIHRlc3RoYXJuZXNzcmVw
b3J0X3drX2ZpbGVuYW1lID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jvb3Qs
ICJyZXNvdXJjZXMiLCAidGVzdGhhcm5lc3NyZXBvcnQuanMiKQorICAgICAgICBpZiBzZWxmLmZp
bGVzeXN0ZW0uaXNmaWxlKHRlc3RoYXJuZXNzcmVwb3J0X3drX2ZpbGVuYW1lKToKKyAgICAgICAg
ICAgIHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93
cHRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpLCBzZWxmLmZpbGVz
eXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9y
dC13cHQuanMiKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShzZWxmLmZp
bGVzeXN0ZW0uam9pbihzZWxmLl9sYXlvdXRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVz
c3JlcG9ydC5qcyIpLCBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291
cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpKQorCisgICAgZGVmIGNvcHlfd3B0X2pzb25f
Y29uZmlnKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdDb3B5aW5nIGpzb24gd2ViIHBsYXRm
b3JtIHNlcnZlciBjb25maWcnKQorICAgICAgICBjb25maWdfd3B0X2ZpbGVuYW1lID0gc2VsZi5m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jvb3QsICJpbXBvcnRlZCIsICJ3M2MiLCAiY29u
ZmlnLmpzb24iKQorICAgICAgICBpZiBzZWxmLmZpbGVzeXN0ZW0uaXNmaWxlKGNvbmZpZ193cHRf
ZmlsZW5hbWUpOgorICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLmNvcHlmaWxlKGNvbmZpZ193
cHRfZmlsZW5hbWUsIHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dwdF9yb290LCAiY29uZmln
Lmpzb24iKSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9jb25maWcuanNv
biBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9jb25maWcuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmIz
MGUwMWFiYWZkMTZkZThkYjBlMTA5NGRjMDRkZjQ4M2QyYWFiCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL2NvbmZpZy5qc29uCkBAIC0wLDAgKzEsNyBAQAoreyJo
b3N0IjogImxvY2FsaG9zdCIsCisgInBvcnRzIjp7Imh0dHAiOls4ODAwLCA4ODAxXSwKKyAgICAg
ICAgICAiaHR0cHMiOltdLAorICAgICAgICAgICJ3cyI6WzQ5MDAxXX0sCisgImNoZWNrX3N1YmRv
bWFpbnMiOiBmYWxzZSwKKyAibG9nX2xldmVsIjoiZGVidWciLAorICJiaW5kX2hvc3RuYW1lIjog
ZmFsc2V9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL3cz
Y19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVz
b3VyY2VzL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJlNWQ1OGI4
YzM3MmJiODRlZGY1M2FmMjY0ZmJjYjg3M2U2YzRhYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRt
bApAQCAtMCwwICsxLDEzNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorI3Jlc3VsdHMgeworCWRpc3BsYXk6IHRhYmxlOworCWNsZWFyOiBib3RoOworCXBhZGRp
bmc6IDIwcHg7Cit9Cisjc3VtbWFyeSB7CisJcGFkZGluZzogMjBweDsKK30KKworLnRlc3Qgewor
CWRpc3BsYXk6IHRhYmxlLXJvdzsKKwliYWNrZ3JvdW5kLWNvbG9yOiBsYXZlbmRlcjsKK30KKy50
ZXN0bmFtZSwgLnRlc3RyZXN1bHQgeworCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCB3aGl0ZTsK
Kwlib3JkZXItdG9wOiAxcHggc29saWQgd2hpdGU7CisJcGFkZGluZy1yaWdodDogMTBweDsKKwlk
aXNwbGF5OiB0YWJsZS1jZWxsOworfQorLnRlc3RyZXN1bHQgYSB7CisJdGV4dC10cmFuc2Zvcm06
IGNhcGl0YWxpemU7Cit9CisKKy5wYXNzIGEgeworCWNvbG9yOiBncmVlbjsKK30KKworLnBhcnRp
YWwgYSB7CisJY29sb3I6IHllbGxvdzsKK30KKworLmZhaWwgYSB7CisJY29sb3I6IG9yYW5nZTsK
K30KKworLnRpbWVvdXQgYSB7CisJY29sb3I6IHJlZDsKK30KKworLmNyYXNoIGEgeworCWNvbG9y
OiByZWQ7Cit9CisKKy5lcnJvciBhIHsKKwljb2xvcjogcmVkOworfQorCisuZXJyb3ItcmVzdWx0
cy1oaXN0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisgICAgZmxvYXQ6IGxlZnQ7Cit9
CisKKy5mYWlsLXJlc3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogb3JhbmdlOwor
ICAgIGZsb2F0OiBsZWZ0OworfQorCisucGFydGlhbC1yZXN1bHRzLWhpc3QgeworICAgIGJhY2tn
cm91bmQtY29sb3I6IHllbGxvdzsKKyAgICBmbG9hdDogbGVmdDsKK30KKy5wYXNzLXJlc3VsdHMt
aGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgZmxvYXQ6IGxlZnQ7Cit9
CisKKzwvc3R5bGU+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBwcmV0dHlfdGVzdG5hbWUodGVzdG5h
bWUpCit7CisJcmV0dXJuIHRlc3RuYW1lLnJlcGxhY2UoImltcG9ydGVkL3czYy93cHQvIiwiIikK
K30KKworZnVuY3Rpb24gZ2V0X3Rlc3RfbGluayh0ZXN0bmFtZSkKK3sKKwlyZXR1cm4gIjxhIGhy
ZWY9JyIgKyAiLi4vLi4vLi4vTGF5b3V0VGVzdHMvIiArIHRlc3RuYW1lICsgIic+IiArIHByZXR0
eV90ZXN0bmFtZSh0ZXN0bmFtZSkgKyAiPC9hPiIKK30KKworZnVuY3Rpb24gZ2V0X3Rlc3RfcmVz
dWx0X2xpbmsodGVzdG5hbWUsIHJlc3VsdCkKK3sKKwlzdWZmaXggPSAiLiIgKyB0ZXN0bmFtZS5z
cGxpdCgnLicpLnBvcCgpOworCXJldHVybiAiPGEgaHJlZj0nIiArICJsYXlvdXQtdGVzdC1yZXN1
bHRzLyIgKyB0ZXN0bmFtZS5yZXBsYWNlKHN1ZmZpeCwiLWFjdHVhbC50eHQiKSArICInPiIgKyBy
ZXN1bHQudG9Mb3dlckNhc2UoKSArICI8L2E+IgorfQorCitmdW5jdGlvbiB0ZXN0U3VpdGVIaXN0
KG51bUVycm9yLCBudW1GYWlsLCBudW1QYXJ0aWFsLCBudW1QYXNzKQoreworICAgIHZhciB0b3Rh
bCA9IG51bUVycm9yICsgbnVtUGFzcyArIG51bVBhcnRpYWwgKyBudW1GYWlsOworCisgICAgaHRt
bCA9ICc8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxMHB4Ij4gQ29uZm9ybWFu
Y2Ugc3VtbWFyeSA8L2Rpdj4gPGRpdiBzdHlsZT0iZmxvYXQ6bGVmdDt3aWR0aDoxNTBweDsiPic7
CisgICAgaWYgKG51bUVycm9yKQorICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJlcnJvci1y
ZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51bUVycm9yIC8gdG90YWwpICsg
JyUiPiZuYnNwOzwvZGl2Pic7CisgICAgaWYgKG51bUZhaWwpCisgICAgICAgIGh0bWwgKz0gJzxk
aXYgY2xhc3M9ImZhaWwtcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1G
YWlsIC8gdG90YWwpICArICclIj4mbmJzcDs8L2Rpdj4nOworICAgIGlmIChudW1QYXJ0aWFsKQor
ICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJwYXJ0aWFsLXJlc3VsdHMtaGlzdCIgc3R5bGU9
IndpZHRoOicgKyAoMTAwICogbnVtUGFydGlhbCAvIHRvdGFsKSArICclIj4mbmJzcDs8L2Rpdj4n
OworICAgIGlmIChudW1QYXNzKQorICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJwYXNzLXJl
c3VsdHMtaGlzdCIgc3R5bGU9IndpZHRoOicgKyAoMTAwICogbnVtUGFzcyAvIHRvdGFsKSArICcl
Ij4mbmJzcDs8L2Rpdj4nOworICAgIGh0bWwgKz0gJzwvZGl2Pic7CisgICAgcmV0dXJuIGh0bWw7
Cit9CitmdW5jdGlvbiBBRERfQ09ORk9STUFOQ0VfUkVTVUxUUyhyZXN1bHRzKQoreworCXZhciBu
dW1QYXNzID0gbnVtUGFydGlhbCA9IG51bUZhaWwgPSBudW1FcnJvciA9IDAKKwl2YXIgaW5uZXJI
VE1MID0gIjxkaXYgY2xhc3M9J3Rlc3QnPjxkaXYgY2xhc3M9J3Rlc3RuYW1lJz5UZXN0IE5hbWU8
L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0cmVzdWx0Jz4iICsgcmVzdWx0cy5wb3J0X25hbWUudG9VcHBl
ckNhc2UoKSArICI8L2Rpdj48L2Rpdj4iCisJT2JqZWN0LmtleXMocmVzdWx0cy5jb25mb3JtYW5j
ZV9yZXN1bHRzKQorCQkuc29ydCgpCisJCS5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworCQkJ
cmVzdWx0ID0gcmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRzW2tleV0KKwkJCWlubmVySFRNTCAr
PSAiPGRpdiBjbGFzcz0ndGVzdCc+PGRpdiBjbGFzcz0ndGVzdG5hbWUnPiIgKyBnZXRfdGVzdF9s
aW5rKGtleSkgKyAiPC9kaXY+PGRpdiBjbGFzcz0ndGVzdHJlc3VsdCAiICsgcmVzdWx0LnRvTG93
ZXJDYXNlKCkgKyAiJz4iICsgZ2V0X3Rlc3RfcmVzdWx0X2xpbmsoa2V5LCByZXN1bHQpICsgIjwv
ZGl2PjwvZGl2PiIKKwkJCWlmIChyZXN1bHQgPT0gIlBBU1MiKSBudW1QYXNzKysKKwkJCWVsc2Ug
aWYgKHJlc3VsdCA9PSAiUEFSVElBTCIpIG51bVBhcnRpYWwrKworCQkJZWxzZSBpZiAocmVzdWx0
ID09ICJGQUlMIikgbnVtRmFpbCsrCisJCQllbHNlIG51bUVycm9yKysKKyAgICAgICB9KTsKKwlk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3VtbWFyeSIpLmlubmVySFRNTCA9IHRlc3RTdWl0ZUhp
c3QobnVtRXJyb3IsIG51bUZhaWwsIG51bVBhcnRpYWwsIG51bVBhc3MpCisJZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJlc3VsdHMiKS5pbm5lckhUTUwgPSBpbm5lckhUTUwKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PgorVzNDIGNvbmZvcm1hbmNlIHJlc3VsdHMgZnJvbSBy
dW4td2Via2l0LXRlc3QgKDxhIGhyZWY9ImxheW91dC10ZXN0LXJlc3VsdHMvcmVzdWx0cy5odG1s
Ij5ydW4td2Via2l0LXRlc3QgcmVzdWx0czwvYT4pCis8L2Rpdj4KKzxkaXYgaWQ9InN1bW1hcnki
PgorPC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHRzIj4KKzwvZGl2PgorPHNjcmlwdCBzcmM9InczY19j
b25mb3JtYW5jZV9yZXN1bHRzLmpzb24iPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235012</attachid>
            <date>2014-07-16 11:35:47 -0700</date>
            <delta_ts>2014-09-16 02:46:57 -0700</delta_ts>
            <desc>Start adding support for ref tests</desc>
            <filename>bug-134766-20140716203529.patch</filename>
            <type>text/plain</type>
            <size>29980</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwNzk5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWQ4MTIyY2IxM2M2YTUyOTY4ZWEwZTA5MjIxZWQ0NDQ5
YzBjMzE0My4uOWQ5ODMwYzg5MzdjOTU0YTkzNjJlZTNkYmYxYzgzZTQ5YzRhYTU5YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3
IEBACisyMDE0LTA3LTE0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2Ug
dGVzdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0NzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VzNDQ29uZm9ybWFuY2VSdW5uZXIgaW1wb3J0cyBXM0MgdGVzdHMgYW5kIGdlbmVyYXRlcyBleHBl
Y3RlZC50eHQgZmlsZXMuCisgICAgICAgIENvbmZvcm1hbmNlIGlzIGNoZWNrZWQgYnkgYW5hbHl6
aW5nIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cyB1c2luZyBUZXN0UmVzdWx0c01hbmFnZXIuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3J1bi13M2MtY29uZm9ybWFuY2UtdGVzdHM6IEFkZGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHk6IEFk
ZGVkLgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIpOiBSZXNwb25zaWJsZSBvZiBjaGVj
a2luZyBXZWJLaXQgY29uZm9ybWFuY2UgYWdhaW5zdCBXM0MgdGVzdCBzdWl0ZS4KKyAgICAgICAg
KFczQ0NvbmZvcm1hbmNlUnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNl
UnVubmVyLmdldF9jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgIChXM0ND
b25mb3JtYW5jZVJ1bm5lci5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSk6CisgICAgICAg
IChXM0NDb25mb3JtYW5jZVJ1bm5lci50ZXN0X3N1aXRlcyk6CisgICAgICAgIChXM0NDb25mb3Jt
YW5jZVJ1bm5lci5ydW5fdGVzdF9zdWl0ZXMpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5u
ZXIucnVuX3Rlc3RzX3RvX2dlbmVyYXRlX3Rlc3RfYmFzZWxpbmUpOgorICAgICAgICAoVzNDQ29u
Zm9ybWFuY2VSdW5uZXIucmVtb3ZlX3Rlc3RfZXhwZWN0ZWRfZmlsZXMpOgorICAgICAgICAoVzND
Q29uZm9ybWFuY2VSdW5uZXIucmVzdWx0c19tYW5hZ2VyKToKKyAgICAgICAgKFczQ0NvbmZvcm1h
bmNlUnVubmVyLnJ1bl90ZXN0cyk6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci5wcmlu
dF9yZXN1bHRzX3RvX2NvbnNvbGUpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIucHJp
bnRfcG90ZW50aWFsX3Rlc3RfZXhwZWN0YXRpb25zX3VwZGF0ZSk6CisgICAgICAgIChjb25maWd1
cmVfbG9nZ2luZyk6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZy5Mb2dIYW5kbGVyKToKKyAg
ICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIuZm9ybWF0KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2Vy
LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlcik6IFJlc3BvbnNpYmxlIG9m
IGFuYWx5c2luZyBjb25mb3JtYW5jZSBiYXNlZCBvbiBleHBlY3RlZC50eHQgZmlsZXMgZ2VuZXJh
dGlvbi4KKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlci5fX2luaXRfXyk6CisgICAgICAgIChU
ZXN0UmVzdWx0c01hbmFnZXIuX2dldF90ZXN0X3Jlc3VsdHMpOgorICAgICAgICAoVGVzdFJlc3Vs
dHNNYW5hZ2VyLnRlc3RfcmVzdWx0cyk6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX2dl
dF9jb25mb3JtYW5jZV9mcm9tX2V4cGVjdGVkX3RleHQpOgorICAgICAgICAoVGVzdFJlc3VsdHNN
YW5hZ2VyLmNvbmZvcm1hbmNlX3Jlc3VsdHMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2Vy
LnN1bW1hcnkpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLndyaXRlX2NvbmZvcm1hbmNl
X3Jlc3VsdHMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9wbGF0Zm9ybV90
ZXN0X3NldHVwLnB5OiBBZGRlZC4KKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNldHVwKTogVXBk
YXRlIGltcG9ydGVkIFczQyB0ZXN0IHBsYXRmb3JtIHdpdGggV2ViS2l0IHNwZWNpZmljIGZpbGVz
ICh0ZXN0aGFybmVzcyBhbmQgd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIGNvbmZpZyBmaWxlKS4K
KyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNldHVwLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlBs
YXRmb3JtVGVzdFNldHVwLnJlc3RvcmVfdzNjX3Rlc3RoYXJuZXNzcmVwb3J0KToKKyAgICAgICAg
KFdlYlBsYXRmb3JtVGVzdFNldHVwLmNvcHlfd2Via2l0X3Rlc3RoYXJuZXNzcmVwb3J0KToKKyAg
ICAgICAgKFdlYlBsYXRmb3JtVGVzdFNldHVwLmNvcHlfd3B0X2pzb25fY29uZmlnKToKKwogMjAx
NC0wNy0wMyAgU2hpdmFrdW1hciBKTSAgPHNoaXZhLmptQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IFtFRkxdW1dLMl0gRW5oYW5jZSB0aGUgTWluaWJyb3dzZXIgdG8gc2hvdyB0ZXh0IHNlYXJjaCBj
b3VudCBhbmQgY2xvc2Ugc2VhcmNoIGJhci4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVu
LXczYy1jb25mb3JtYW5jZS10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXczYy1jb25mb3JtYW5j
ZS10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kY2YwMTc1YTg3NjJiMDVjYmNkZDlhN2FmOTYxMjU0MWIyOTky
NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNl
LXRlc3RzCkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHly
aWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisiIiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90
ZXN0cy5weSIiIgorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG11bHRpcHJvY2Vzc2luZ19i
b290c3RyYXAKKworbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5ydW4oJ3dlYmtpdHB5JywgJ3cz
YycsICdydW5fdzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5JykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3czYy9ydW5fdzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA0YWYyZGU1NzIyODI1N2E3M2NlOWFhNjI0OGY3OTY0NDg5NGE3NjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9ydW5fdzNjX2NvbmZvcm1hbmNlX3Rl
c3RzLnB5CkBAIC0wLDAgKzEsMTc0IEBACisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENh
bm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCBl
dmFsdWF0ZXMgVzNDIHRlc3RzIGNvbmZvcm1hbmNlIGJ5OgorICAgIC0gaW1wb3J0aW5nIFczQyB0
ZXN0cyBhcyBXZWJLaXQgdGVzdHMgKHVzaW5nIHdlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyKQor
ICAgIC0gZ2VuZXJhdGluZyBleHBlY3RlZC50eHQgZmlsZXMgKHVzaW5nIHJ1bi13ZWJraXQtdGVz
dHMpCisgICAgLSBjb21wdXRpbmcgd2hldGhlciBhIHRlc3QgaXMgcGFzc2luZyBvciBub3QgYnkg
Y2hlY2tpbmcgUEFTUy9GQUlMIGFzc2VydGlvbnMgb3V0cHV0dGVkIHdpdGhpbiB0aGUgZXhwZWN0
ZWQudHh0IGZpbGVzCisiIiIKKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworaW1w
b3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21t
b24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2
ZSBpbXBvcnQgRXhlY3V0aXZlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVz
dF9leHBlY3RhdGlvbnMgaW1wb3J0IFRlc3RFeHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0cHkucG9y
dCBpbXBvcnQgcGxhdGZvcm1fb3B0aW9ucworZnJvbSB3ZWJraXRweS53M2MuZmFjdG9yeSBpbXBv
cnQgdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJzZXIKK2Zyb20gd2Via2l0cHkudzNjLnRlc3RfcmVz
dWx0c19tYW5hZ2VyIGltcG9ydCBUZXN0UmVzdWx0c01hbmFnZXIKK2Zyb20gd2Via2l0cHkudzNj
LndlYl9wbGF0Zm9ybV90ZXN0X3NldHVwIGltcG9ydCBXZWJQbGF0Zm9ybVRlc3RTZXR1cAorZnJv
bSB3ZWJraXRweS53M2Mud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIgaW1wb3J0IFdlYlBsYXRm
b3JtVGVzdEltcG9ydGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKwor
CitjbGFzcyBXM0NDb25mb3JtYW5jZVJ1bm5lcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAg
IHNlbGYuZmlsZXN5c3RlbSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYub3B0
aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlciA9
IFdlYlBsYXRmb3JtVGVzdEltcG9ydGVyKHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHNlbGYudGVz
dHMgPSBOb25lCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfbWFuYWdlciA9IE5vbmUKKworICAgIGRl
ZiBnZXRfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLnBvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgIi4u
IiwgInczYy1jb25mb3JtYW5jZS1yZXN1bHRzIikKKworICAgIGRlZiBsYXlvdXRfdGVzdHNfcmVz
dWx0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5qb2lu
KHNlbGYuZ2V0X2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCksICJsYXlvdXQtdGVzdC1y
ZXN1bHRzIikKKworICAgIGRlZiB0ZXN0X3N1aXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIudGVzdF9zdWl0ZXMoKQorCisgICAgZGVmIHJ1
bl90ZXN0X3N1aXRlcyhzZWxmLCBwYXJhbWV0ZXJzKToKKyAgICAgICAgI1RPRE86IGNsZWFuIHRo
aXMgdG8gaGF2ZSBhIGJldHRlciBwYXRoIGNvbXB1dGF0aW9uCisgICAgICAgIHVwID0gb3MucGF0
aC5kaXJuYW1lCisgICAgICAgIHNjcmlwdF9kaXIgPSB1cCh1cCh1cChvcy5wYXRoLmFic3BhdGgo
X19maWxlX18pKSkpCisgICAgICAgIHRtcF9hcmdzID0gW3NlbGYuZmlsZXN5c3RlbS5qb2luKHNj
cmlwdF9kaXIsICdydW4td2Via2l0LXRlc3RzJyldICsgcGFyYW1ldGVycyArIFsnLS1yZXN1bHRz
LWRpcmVjdG9yeT0nICsgc2VsZi5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSgpXQorICAg
ICAgICB0bXBfYXJncy5hcHBlbmQoJy0tJyArIHNlbGYub3B0aW9ucy5wbGF0Zm9ybSkKKyAgICAg
ICAgaWYgc2VsZi5vcHRpb25zLndlYmtpdF90ZXN0X3J1bm5lciBpcyBUcnVlOgorICAgICAgICAg
ICAgdG1wX2FyZ3MuYXBwZW5kKCctMicpCisKKyAgICAgICAgI2NvbXB1dGUgbGlzdCBvZiB0ZXN0
cyB0byBydW4KKyAgICAgICAgZm9yIHRlc3Rfc3VpdGUgaW4gc2VsZi50ZXN0X3N1aXRlcygpOgor
ICAgICAgICAgICAgcGF0aCA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKCdMYXlvdXRUZXN0cycsICBz
ZWxmLm9wdGlvbnMuX19kaWN0X19bJ2ltcG9ydGRpciddLCB0ZXN0X3N1aXRlKQorICAgICAgICAg
ICAgdG1wX2FyZ3MuYXBwZW5kKHBhdGgpCisgICAgICAgIEV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5k
KHRtcF9hcmdzLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIHJldHVybl9z
dGRlcnI9KG5vdCBzZWxmLm9wdGlvbnMuX19kaWN0X19bJ3czY192ZXJib3NlJ10pLCBkZWNvZGVf
b3V0cHV0PUZhbHNlKQorICAgICAgICBzZWxmLl9yZXN1bHRzX21hbmFnZXIgPSBUZXN0UmVzdWx0
c01hbmFnZXIoc2VsZi5wb3J0LCBzZWxmLm9wdGlvbnMucGxhdGZvcm0sIHNlbGYub3B0aW9ucy5f
X2RpY3RfX1snaW1wb3J0ZGlyJ10sIHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3Rvcnko
KSwgc2VsZi50ZXN0cykKKworICAgIGRlZiBydW5fdGVzdHNfdG9fZ2VuZXJhdGVfdGVzdF9iYXNl
bGluZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zdWl0ZXMoWyctcScsICctLW5vLXJl
dHJ5LWZhaWx1cmVzJywgJy0tbm8tc2hvdy1yZXN1bHRzJywgJy0tc2tpcHBlZD1pZ25vcmUnXSkK
KworICAgIGRlZiByZW1vdmVfdGVzdF9leHBlY3RlZF9maWxlcyhzZWxmKToKKyAgICAgICAgZm9y
IHRlc3QgaW4gc2VsZi50ZXN0czoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5wb3J0LmV4
cGVjdGVkX2ZpbGVuYW1lKHRlc3QsICcudHh0JywgRmFsc2UpCisgICAgICAgICAgICBpZiBub3Qo
ZmlsZW5hbWUgaXMgTm9uZSk6CisgICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gc2VsZi5maWxl
c3lzdGVtLmpvaW4oc2VsZi5wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgZmlsZW5hbWUpCisgICAg
ICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLnJlbW92ZShmaWxlX3BhdGgpCisKKyAgICBkZWYg
cmVzdWx0c19tYW5hZ2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0c19tYW5h
Z2VyCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMu
X19kaWN0X19bJ3czY19saXN0J10gaXMgVHJ1ZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgICAgICMgaW1wb3J0IHRlc3RzCisgICAgICAgIF9sb2cuaW5mbygnSW1wb3J0aW5nIHRl
c3RzLi4uJykKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci5pbXBvcnRf
dGVzdHMoKQorICAgICAgICBzZWxmLnRlc3RzID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBv
cnRlci50ZXN0cygpCisKKyAgICAgICAgIyBzZXR1cCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRp
b24gZmlsZXMKKyAgICAgICAgd3B0X3NldHVwID0gV2ViUGxhdGZvcm1UZXN0U2V0dXAoc2VsZi5w
b3J0Lmhvc3QsIHNlbGYub3B0aW9ucykKKyAgICAgICAgd3B0X3NldHVwLmNvcHlfd2Via2l0X3Rl
c3RoYXJuZXNzcmVwb3J0KCkKKyAgICAgICAgd3B0X3NldHVwLmNvcHlfd3B0X2pzb25fY29uZmln
KCkKKworICAgICAgICBzZWxmLnJlbW92ZV90ZXN0X2V4cGVjdGVkX2ZpbGVzKCkKKworICAgICAg
ICBfbG9nLmluZm8oJ1J1bm5pbmcgdGVzdHMuLi4nKQorICAgICAgICBzZWxmLnJ1bl90ZXN0c190
b19nZW5lcmF0ZV90ZXN0X2Jhc2VsaW5lKCkKKworICAgICAgICAjIGdlbmVyYXRlIGNvbmZvcm1h
bmNlIHJlc3VsdHMKKyAgICAgICAgc2VsZi5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5
KHNlbGYuZ2V0X2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHNlbGYu
cmVzdWx0c19tYW5hZ2VyKCkud3JpdGVfY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxmLmdldF9jb25m
b3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgcHJpbnRfcmVzdWx0c190b19jb25zb2xlKHNlbGYpOgorICAgICAgICBzdW1tYXJ5ID0g
c2VsZi5yZXN1bHRzX21hbmFnZXIoKS5zdW1tYXJ5KCkKKyAgICAgICAgX2xvZy5pbmZvKCdSdW4g
JyArIHN0cihzdW1tYXJ5Wyd0b3RhbCddKSArICcgdGVzdHMnKQorICAgICAgICBfbG9nLmluZm8o
J1Bhc3M6ICcgKyBzdHIoc3VtbWFyeVsnbnVtX3Bhc3MnXSkpCisgICAgICAgIF9sb2cuaW5mbygn
UGFydGlhbDogJyArIHN0cihzdW1tYXJ5WydudW1fcGFydGlhbCddKSkKKyAgICAgICAgX2xvZy5p
bmZvKCdGYWlsOiAnICsgc3RyKHN1bW1hcnlbJ251bV9mYWlsJ10pKQorICAgICAgICBfbG9nLmlu
Zm8oJ0Vycm9yOiAnICsgc3RyKHN1bW1hcnlbJ251bV9lcnJvciddKSkKKworICAgIGRlZiBwcmlu
dF9wb3RlbnRpYWxfdGVzdF9leHBlY3RhdGlvbnNfdXBkYXRlKHNlbGYpOgorICAgICAgICB0ZXN0
X2V4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMoc2VsZi5wb3J0KS5tb2RlbCgpCisgICAg
ICAgIGNvbmZvcm1hbmNlID0gc2VsZi5yZXN1bHRzX21hbmFnZXIoKS5jb25mb3JtYW5jZV9yZXN1
bHRzKCkKKyAgICAgICAgIyBUT0RPOiBGaW5hbGl6ZSB0aGlzIGNoZWNrIHRvIGdldCBtZWFuaW5n
ZnVsIGluZm9ybWF0aW9uCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYudGVzdHM6CisgICAgICAg
ICAgICBpZiBub3QgdGVzdF9leHBlY3RhdGlvbnMuaGFzX3Rlc3QodGVzdCk6CisgICAgICAgICAg
ICAgICAgaWYgbm90IGNvbmZvcm1hbmNlW3Rlc3RdID09ICdQQVNTJzoKKyAgICAgICAgICAgICAg
ICAgICAgX2xvZy5pbmZvKCd0ZXN0ICcgKyB0ZXN0ICsgJyBpcyBub3QgcGFzc2luZycpCisgICAg
ICAgICAgICBlbGlmIGNvbmZvcm1hbmNlW3Rlc3RdID09ICdQQVNTJzoKKyAgICAgICAgICAgICAg
ICBfbG9nLmluZm8oJ3Rlc3QgJyArIHRlc3QgKyAnIGlzIG5vdyBwYXNzaW5nJykKKworCitkZWYg
Y29uZmlndXJlX2xvZ2dpbmcoKToKKyAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuU3RyZWFt
SGFuZGxlcik6CisgICAgICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAg
IGlmIHJlY29yZC5sZXZlbG5vID4gbG9nZ2luZy5JTkZPOgorICAgICAgICAgICAgICAgIHJldHVy
biAiJXM6ICVzIiAlIChyZWNvcmQubGV2ZWxuYW1lLCByZWNvcmQuZ2V0TWVzc2FnZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlY29yZC5nZXRNZXNzYWdlKCkKKworICAgIGxvZ2dlciA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGhh
bmRsZXIgPSBMb2dIYW5kbGVyKCkKKyAgICBoYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuSU5GTykK
KyAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorICAgIHJldHVybiBoYW5kbGVyCisKKwor
ZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkK
KyAgICBob3N0ID0gSG9zdCgpCisgICAgcGFyc2VyID0gdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJz
ZXIoaG9zdCwgaG9zdC5maWxlc3lzdGVtLmJhc2VuYW1lKF9fZmlsZV9fKSkKKyAgICBvcHRpb25z
LCBhcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKKyAgICBwb3J0ID0gaG9zdC5w
b3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdHBhcnNlLlZhbHVlcyh7J3dlYmtp
dF90ZXN0X3J1bm5lcic6IG9wdGlvbnMud2Via2l0X3Rlc3RfcnVubmVyfSkpCisKKyAgICBydW5u
ZXIgPSBXM0NDb25mb3JtYW5jZVJ1bm5lcihwb3J0LCBvcHRpb25zKQorICAgIGlmIHJ1bm5lci5y
dW5fdGVzdHMoKToKKyAgICAgICAgcnVubmVyLnByaW50X3Jlc3VsdHNfdG9fY29uc29sZSgpCisg
ICAgICAgIHJ1bm5lci5wcmludF9wb3RlbnRpYWxfdGVzdF9leHBlY3RhdGlvbnNfdXBkYXRlKCkK
KyAgICAgICAgcnVubmVyLnJlbW92ZV90ZXN0X2V4cGVjdGVkX2ZpbGVzKCkKKyAgICAgICAgX2xv
Zy5pbmZvKCJSZXN1bHRzIGV4cG9ydGVkIGluICciICsgcnVubmVyLmdldF9jb25mb3JtYW5jZV9y
ZXN1bHRzX2RpcmVjdG9yeSgpICsgIiciKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgor
ICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5h
Z2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9yZXN1bHRzX21hbmFnZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzE4Yzc4MTU3ZTEyNTQ0NDNlYzVjOTJjZmRkNTZkODgyOGYzZTkxYwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0
c19tYW5hZ2VyLnB5CkBAIC0wLDAgKzEsMTY2IEBACisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fu
b24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNj
cmlwdCBtYW5hZ2UgSlNPTiBhbmQgcmVzdWx0cy5odG1sIGZpbGVzIGZvciBXM0MgdGVzdCByZXN1
bHRzLgorCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0
IGlvCitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSB3ZWJr
aXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKKworCitjbGFzcyBU
ZXN0UmVzdWx0c01hbmFnZXIob2JqZWN0KToKKworICAgIFJFQVNPTlMgPSBbJ1RJTUVPVVQnLCAn
Q1JBU0gnLCAnRkFJTFVSRSddCisgICAgRVhURU5TSU9OUyA9IFsnLmh0bWwnLCAnLmh0bScsICcu
eGh0bWwnLCAnLnN2ZycsICcueG1sJywgJy54aHQnXQorCisgICAgX0pTT05fUFJFRklYID0gJ0FE
RF9DT05GT1JNQU5DRV9SRVNVTFRTKCcKKyAgICBfSlNPTl9TVUZGSVggPSAnKTsnCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgcGxhdGZvcm0sIGJhc2VfZGlyLCByZXN1bHRfZGlyLCB0
ZXN0cyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0
ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9y
eSA9IHJlc3VsdF9kaXIKKyAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAg
ICBzZWxmLl90ZXN0cyA9IHRlc3RzCisgICAgICAgIHJlc3VsdHNfanNvbl9wYXRoID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAnZnVsbF9yZXN1bHRzLmpz
b24nKQorICAgICAgICByZXN1bHRzX2pzb24gPSBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLmxvYWRf
anNvbihzZWxmLl9maWxlc3lzdGVtLCByZXN1bHRzX2pzb25fcGF0aCkKKworICAgICAgICAjIFJv
b3QgZGlyZWN0b3J5IG9mIFczQyBpbXBvcnRlZCB0ZXN0CisgICAgICAgIHNlbGYuX2Jhc2VfZGly
ID0gYmFzZV9kaXIKKworICAgICAgICAjIFRPRE86IGNhbiB3ZSBzaW1wbGlmeSB0aGlzCisgICAg
ICAgIHNlbGYuX2pzb25fdGVzdF9kaWN0ID0gTm9uZQorICAgICAgICBpZiByZXN1bHRzX2pzb25b
J3Rlc3RzJ106CisgICAgICAgICAgICBwYXRoID0gW10KKyAgICAgICAgICAgIG5vZGUgPSBzZWxm
Ll9maWxlc3lzdGVtLnNwbGl0KHNlbGYuX2Jhc2VfZGlyKQorICAgICAgICAgICAgd2hpbGUgbm9k
ZVswXToKKyAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChub2RlWzFdKQorICAgICAgICAgICAg
ICAgIG5vZGUgPSBzZWxmLl9maWxlc3lzdGVtLnNwbGl0KG5vZGVbMF0pCisgICAgICAgICAgICBw
YXRoLmFwcGVuZChub2RlWzFdKQorICAgICAgICAgICAgcGF0aC5yZXZlcnNlKCkKKyAgICAgICAg
ICAgIHNlbGYuX2pzb25fdGVzdF9kaWN0ID0gcmVzdWx0c19qc29uWyd0ZXN0cyddCisgICAgICAg
ICAgICBmb3Iga2V5IGluIHBhdGg6CisgICAgICAgICAgICAgICAgc2VsZi5fanNvbl90ZXN0X2Rp
Y3QgPSBzZWxmLl9qc29uX3Rlc3RfZGljdFtrZXldCisKKyAgICBkZWYgX2dldF90ZXN0X3Jlc3Vs
dHMoc2VsZiwgdGVzdHMsIHRlc3RfZGljdD1Ob25lLCBwYXRoPU5vbmUpOgorICAgICAgICBpZiB0
ZXN0X2RpY3QgaXMgTm9uZToKKyAgICAgICAgICAgIHRlc3RfZGljdCA9IHNlbGYuX2pzb25fdGVz
dF9kaWN0CisgICAgICAgICAgICBpZiB0ZXN0X2RpY3QgaXMgTm9uZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcGF0aCA9IHNl
bGYuX2Jhc2VfZGlyCisgICAgICAgIGZvciBrZXkgaW4gdGVzdF9kaWN0LmtleXMoKToKKyAgICAg
ICAgICAgIF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIGtleSkKKyAgICAgICAg
ICAgIChmaWxlbmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoa2V5KQorICAgICAgICAgICAg
aWYgZXh0IGluIHNlbGYuRVhURU5TSU9OUzoKKyAgICAgICAgICAgICAgICB0ZXN0c1tfcGF0aF0g
PSB0ZXN0X2RpY3Rba2V5XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFBy
b2Nlc3Mgc3ViZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICBzZWxmLl9nZXRfdGVzdF9yZXN1
bHRzKHRlc3RzLCB0ZXN0X2RpY3Rba2V5XSwgX3BhdGgpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRz
KHNlbGYpOgorICAgICAgICB0ZXN0X3Jlc3VsdHMgPSB7fQorICAgICAgICBzZWxmLl9nZXRfdGVz
dF9yZXN1bHRzKHRlc3RfcmVzdWx0cykKKyAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0cworCisg
ICAgZGVmIF9nZXRfY29uZm9ybWFuY2VfZnJvbV9leHBlY3RlZF90ZXh0KHNlbGYsIHRlc3RfbmFt
ZSwgdGV4dCwgdGVzdF9yZXN1bHRzKToKKyAgICAgICAgaWYgdGV4dCBpcyBOb25lIG9yIGxlbih0
ZXh0KSA9PSAwOgorICAgICAgICAgICAgIyBlbXB0eSBleHBlY3RlZCBmaWxlLCBwcm9iYWJseSBk
dWUgdG8gQ1JBU0ggb3IgVElNRU9VVC4gTGV0J3MgZmluZCB3aHkgaW4ganNvbiByZXN1bHRzLgor
ICAgICAgICAgICAgaWYgdGVzdF9uYW1lIGluIHRlc3RfcmVzdWx0cyBhbmQgJ2FjdHVhbCcgaW4g
dGVzdF9yZXN1bHRzW3Rlc3RfbmFtZV06CisgICAgICAgICAgICAgICAgcmVhc29uID0gdGVzdF9y
ZXN1bHRzW3Rlc3RfbmFtZV1bJ2FjdHVhbCddCisgICAgICAgICAgICAgICAgaWYgcmVhc29uID09
ICdDUkFTSCcgb3IgcmVhc29uID09ICdUSU1FT1VUJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlYXNvbgorICAgICAgICAgICAgICAgIHJldHVybiAnRVJST1InCisgICAgICAgICAgICAj
SWYgdGVzdCBpcyBhIHJlZiB0ZXN0IHRoaXMgaXMgb2ssIG90aGVyd2lzZSB0aGlzIGlzIGFuIGVy
cm9yCisgICAgICAgICAgICAjIEZJWE1FOiBXZSBtYXkgd2FudCB0byB2YWxpZGF0ZSB0aGF0IHRo
aXMgaXMgYWN0dWFsbHkgYSByZWYgdGVzdAorICAgICAgICAgICAgcmV0dXJuICdQQVNTJworICAg
ICAgICAjIExldCdzIGNoZWNrIHdoZXRoZXIgc29tZSBsaW5lcyBzdGFydCB3aXRoIFBBU1Mgb3Ig
RkFJTAorICAgICAgICAjIFRlc3QgaXMgc2FpZCB0byBQQVNTIGlmIGF0IGxlYXN0IG9uZSBsaW5l
IGlzIFBBU1MgYW4gbm8gbGluZSBpcyBGQUlMCisgICAgICAgIGhhc0ZhaWwgPSBGYWxzZQorICAg
ICAgICBoYXNQYXNzID0gRmFsc2UKKyAgICAgICAgYnVmID0gaW8uU3RyaW5nSU8odW5pY29kZSh0
ZXh0LCAidXRmLTgiKSkKKyAgICAgICAgZm9yIGxpbmUgaW4gYnVmLnJlYWRsaW5lcygpOgorICAg
ICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQVNTJyk6CisgICAgICAgICAgICAgICAgaGFz
UGFzcyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdGQUlMJyk6Cisg
ICAgICAgICAgICAgICAgaGFzRmFpbCA9IFRydWUKKyAgICAgICAgaWYgaGFzUGFzczoKKyAgICAg
ICAgICAgIHJldHVybiAnUEFSVElBTCcgaWYgaGFzRmFpbCBlbHNlICdQQVNTJworICAgICAgICBp
ZiBoYXNGYWlsOgorICAgICAgICAgICAgcmV0dXJuICdGQUlMJworICAgICAgICByZXR1cm4gJ0VS
Uk9SJworCisgICAgZGVmIGNvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZik6CisgICAgICAgIHN0YXR1
cyA9IHt9CisgICAgICAgIHRlc3RfcmVzdWx0cyA9IHNlbGYudGVzdF9yZXN1bHRzKCkKKyAgICAg
ICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0czoKKyAgICAgICAgICAgIHN0YXR1c1t0ZXN0
X25hbWVdID0gc2VsZi5fZ2V0X2NvbmZvcm1hbmNlX2Zyb21fZXhwZWN0ZWRfdGV4dCh0ZXN0X25h
bWUsIHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dCh0ZXN0X25hbWUpLCB0ZXN0X3Jlc3VsdHMpCisg
ICAgICAgIHJldHVybiBzdGF0dXMKKworICAgIGRlZiBzdW1tYXJ5KHNlbGYpOgorICAgICAgICBu
dW1fcGFzcyA9IG51bV9wYXJ0aWFsID0gbnVtX2ZhaWwgPSBudW1fZXJyb3IgPSAwCisgICAgICAg
IHN0YXR1cyA9IHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0cygpCisgICAgICAgIGZvciB0ZXN0X25h
bWUgaW4gc2VsZi5fdGVzdHM6CisgICAgICAgICAgICByZXN1bHQgPSBzdGF0dXNbdGVzdF9uYW1l
XQorICAgICAgICAgICAgaWYgcmVzdWx0ID09ICdQQVNTJzoKKyAgICAgICAgICAgICAgICBudW1f
cGFzcyArPSAxCisgICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSAnUEFSVElBTCc6CisgICAgICAg
ICAgICAgICAgbnVtX3BhcnRpYWwgKz0gMQorICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gJ0ZB
SUwnOgorICAgICAgICAgICAgICAgIG51bV9mYWlsICs9IDEKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgbnVtX2Vycm9yICs9IDEKKyAgICAgICAgc3VtbWFyeSA9IHt9CisgICAg
ICAgIHN1bW1hcnlbJ3RvdGFsJ10gPSBudW1fcGFzcyArIG51bV9mYWlsICsgbnVtX3BhcnRpYWwg
KyBudW1fZXJyb3IKKyAgICAgICAgc3VtbWFyeVsnbnVtX3Bhc3MnXSA9IG51bV9wYXNzCisgICAg
ICAgIHN1bW1hcnlbJ251bV9mYWlsJ10gPSBudW1fZmFpbAorICAgICAgICBzdW1tYXJ5WydudW1f
cGFydGlhbCddID0gbnVtX3BhcnRpYWwKKyAgICAgICAgc3VtbWFyeVsnbnVtX2Vycm9yJ10gPSBu
dW1fZXJyb3IKKyAgICAgICAgcmV0dXJuIHN1bW1hcnkKKworICAgIGRlZiB3cml0ZV9jb25mb3Jt
YW5jZV9yZXN1bHRzKHNlbGYsIHBhdGgpOgorICAgICAgICBzdGF0dXMgPSBzZWxmLmNvbmZvcm1h
bmNlX3Jlc3VsdHMoKQorICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgcmVzdWx0c1snY29u
Zm9ybWFuY2VfcmVzdWx0cyddID0gc3RhdHVzCisgICAgICAgIHJlc3VsdHNbJ3BvcnRfbmFtZSdd
ID0gc2VsZi5fcG9ydC5wb3J0X25hbWUKKyAgICAgICAgIyBjb3B5IGNvbmZvcm1hbmNlIHJlc3Vs
dHMgYXMganNvbiBkYXRhCisgICAgICAgIGpzb25fc3RyaW5nID0ganNvbi5kdW1wcyhyZXN1bHRz
LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCisgICAgICAgIGpzb25fc3RyaW5nID0gc2VsZi5fSlNP
Tl9QUkVGSVggKyBqc29uX3N0cmluZyArIHNlbGYuX0pTT05fU1VGRklYCisgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwYXRoLCAn
dzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuanNvbicpLCBqc29uX3N0cmluZykKKyAgICAgICAgIyBj
b3B5IGh0bWwgdGVtcGxhdGUKKyAgICAgICAgcmVzdWx0c19maWxlID0gc2VsZi5fcG9ydC5wYXRo
X2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycsICdyZXNv
dXJjZXMnLCAndzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbCcpCisgICAgICAgICMgTm90ZSB0
aGF0IHRoZSByZXN1bHRzLmh0bWwgdGVtcGxhdGUgZmlsZSB3b24ndCBleGlzdCB3aGVuIHdlJ3Jl
IHVzaW5nIGEgTW9ja0ZpbGVTeXN0ZW0gZHVyaW5nIHVuaXQgdGVzdHMsCisgICAgICAgICMgc28g
bWFrZSBzdXJlIGl0IGV4aXN0cyBiZWZvcmUgd2UgdHJ5IHRvIGNvcHkgaXQuCisgICAgICAgIGlm
IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHJlc3VsdHNfZmlsZSk6CisgICAgICAgICAgICBzZWxm
Ll9maWxlc3lzdGVtLmNvcHlmaWxlKHJlc3VsdHNfZmlsZSwgc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHBhdGgsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sJykpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3czYy93ZWJfcGxhdGZvcm1fdGVzdF9zZXR1cC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9wbGF0Zm9ybV90ZXN0X3NldHVwLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk5Mzc2ODA4Y2Y3NDY2MTliZGUyNmUzMzRlYWQzZmI0OWU1ZWE2ZDcKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93ZWJfcGxhdGZvcm1fdGVzdF9zZXR1
cC5weQpAQCAtMCwwICsxLDcwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmln
aHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBD
QU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworIiIiCisgVGhpcyBzY3JpcHQgYWxsb3dzIHNldHRpbmcgdXAgdGhlIHdlYiBwbGF0Zm9ybSB0
ZXN0IHBhcmFtZXRlcnMgc3VjaCBhczoKKyAgICAtIFRoZSBjb25maWcuanNvbiBmaWxlIHVzZWQg
YnkgdGhlIFdQVCBodHRwIHNlcnZlcgorICAgIC0gVGhlIHRlc3RoYXJuZXNzcmVwb3J0LmpzIHVz
ZWQgZm9yIHdlYiBwbGF0Zm9ybSB0ZXN0cyAoY29weSBvZiB3ZWJraXQgdGVzdGhhcm5lc3NyZXBv
cnQuanMpLgorIiIiCisKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhv
c3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0
IFdlYktpdEZpbmRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
Y2xhc3MgV2ViUGxhdGZvcm1UZXN0U2V0dXAob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBob3N0LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gaG9zdC5maWxl
c3lzdGVtCisKKyAgICAgICAgd2Via2l0X2ZpbmRlciA9IFdlYktpdEZpbmRlcihzZWxmLmZpbGVz
eXN0ZW0pCisgICAgICAgIHNlbGYuX3dlYmtpdF9yb290ID0gd2Via2l0X2ZpbmRlci53ZWJraXRf
YmFzZSgpCisgICAgICAgIHNlbGYuX3dwdF9yb290ID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2Vs
Zi5fd2Via2l0X3Jvb3QsICdMYXlvdXRUZXN0cycsIG9wdGlvbnMuX19kaWN0X19bJ2ltcG9ydGRp
ciddKQorICAgICAgICBzZWxmLl9sYXlvdXRfcm9vdCA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHNl
bGYuX3dlYmtpdF9yb290LCAiTGF5b3V0VGVzdHMiKQorCisgICAgZGVmIHJlc3RvcmVfdzNjX3Rl
c3RoYXJuZXNzcmVwb3J0KHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdVc2luZyBXM0MgV1BU
IHRlc3RoYXJuZXNzcmVwb3J0LmpzJykKKyAgICAgICAgdGVzdGhhcm5lc3NyZXBvcnRfd3B0X2Zp
bGVuYW1lID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fd3B0X3Jvb3QsICJyZXNvdXJjZXMi
LCAidGVzdGhhcm5lc3NyZXBvcnQuanN+IikKKyAgICAgICAgaWYgc2VsZi5maWxlc3lzdGVtLmlz
ZmlsZSh0ZXN0aGFybmVzc3JlcG9ydF93cHRfZmlsZW5hbWUpOgorICAgICAgICAgICAgc2VsZi5m
aWxlc3lzdGVtLmNvcHlmaWxlKHRlc3RoYXJuZXNzcmVwb3J0X3dwdF9maWxlbmFtZSwgc2VsZi5m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fd3B0X3Jvb3QsICJyZXNvdXJjZXMiLCAidGVzdGhhcm5lc3Ny
ZXBvcnQuanMiKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbS5yZW1vdmUodGVzdGhhcm5l
c3NyZXBvcnRfd3B0X2ZpbGVuYW1lKQorCisgICAgZGVmIGNvcHlfd2Via2l0X3Rlc3RoYXJuZXNz
cmVwb3J0KHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdVc2luZyBXZWJLaXQgdGVzdGhhcm5l
c3NyZXBvcnQuanMnKQorICAgICAgICB0ZXN0aGFybmVzc3JlcG9ydF93a19maWxlbmFtZSA9IHNl
bGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuX2xheW91dF9yb290LCAicmVzb3VyY2VzIiwgInRlc3Ro
YXJuZXNzcmVwb3J0LmpzIikKKyAgICAgICAgaWYgc2VsZi5maWxlc3lzdGVtLmlzZmlsZSh0ZXN0
aGFybmVzc3JlcG9ydF93a19maWxlbmFtZSk6CisgICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0u
Y29weWZpbGUoc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fd3B0X3Jvb3QsICJyZXNvdXJjZXMi
LCAidGVzdGhhcm5lc3NyZXBvcnQuanMiKSwgc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fd3B0
X3Jvb3QsICJyZXNvdXJjZXMiLCAidGVzdGhhcm5lc3NyZXBvcnQuanN+IikpCisgICAgICAgICAg
ICBzZWxmLmZpbGVzeXN0ZW0uY29weWZpbGUoc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5
b3V0X3Jvb3QsICJyZXNvdXJjZXMiLCAidGVzdGhhcm5lc3NyZXBvcnQuanMiKSwgc2VsZi5maWxl
c3lzdGVtLmpvaW4oc2VsZi5fd3B0X3Jvb3QsICJyZXNvdXJjZXMiLCAidGVzdGhhcm5lc3NyZXBv
cnQuanMiKSkKKworICAgIGRlZiBjb3B5X3dwdF9qc29uX2NvbmZpZyhzZWxmKToKKyAgICAgICAg
X2xvZy5kZWJ1ZygnQ29weWluZyBqc29uIHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgY29uZmlnJykKKyAg
ICAgICAgY29uZmlnX3dwdF9maWxlbmFtZSA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuX2xh
eW91dF9yb290LCAiaW1wb3J0ZWQiLCAidzNjIiwgImNvbmZpZy5qc29uIikKKyAgICAgICAgaWYg
c2VsZi5maWxlc3lzdGVtLmlzZmlsZShjb25maWdfd3B0X2ZpbGVuYW1lKToKKyAgICAgICAgICAg
IHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShjb25maWdfd3B0X2ZpbGVuYW1lLCBzZWxmLmZpbGVz
eXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgImNvbmZpZy5qc29uIikpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZwppbmRleCA0MWNmZjRjMWQwZDI5YjU3OWQzMWQ5MWVmMTM3YWM5ODMxYmNk
MWM2Li5kYTUwMzdhZThlMjI5YjA0OTU4ZmE1ZWEwMWMzY2FkZjM1NGE3ZjhkIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNC0wNy0xNCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIHN0YXJ0IHN1
cHBvcnRpbmcgcmVmIHRlc3RzCisKKyAgICAgICAgdXBkYXRpbmcgd2VicGxhdGZvcm0gdGVzdCBz
ZXR1cCB0byBzdG9yZSB0ZXN0aGFybmVzc3JlcG9ydC5qcyBhcyB+CisKKyAgICAgICAgZml4aW5n
IHRlc3QgY29tcHV0YXRpb24gaXNzdWUgaW4gcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cworCisg
ICAgICAgIGFkZGluZyBjb25mb3JtYW5jZSBydW5uZXIKKworICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgYXV0b21hdGVkIFczQyBjb25mb3JtYW5jZSB0ZXN0aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3NjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbmZpZy5qc29uOiBBZGRlZC4KKyAgICAg
ICAgKiByZXNvdXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbDogQWRkZWQuCisKIDIw
MTMtMTItMDMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1w
b3J0IHRoZSBYSFRNTCBwYXJzaW5nIGFuZCBzZXJpYWxpemF0aW9uIHRlc3RzIGZvciB0ZW1wbGF0
ZSBlbGVtZW50cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL2NvbmZpZy5q
c29uIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL2NvbmZpZy5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhm
YjMwZTAxYWJhZmQxNmRlOGRiMGUxMDk0ZGMwNGRmNDgzZDJhYWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvY29uZmlnLmpzb24KQEAgLTAsMCArMSw3IEBACit7
Imhvc3QiOiAibG9jYWxob3N0IiwKKyAicG9ydHMiOnsiaHR0cCI6Wzg4MDAsIDg4MDFdLAorICAg
ICAgICAgICJodHRwcyI6W10sCisgICAgICAgICAgIndzIjpbNDkwMDFdfSwKKyAiY2hlY2tfc3Vi
ZG9tYWlucyI6IGZhbHNlLAorICJsb2dfbGV2ZWwiOiJkZWJ1ZyIsCisgImJpbmRfaG9zdG5hbWUi
OiBmYWxzZX0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMv
dzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9y
ZXNvdXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYmU1ZDU4
YjhjMzcyYmI4NGVkZjUzYWYyNjRmYmNiODczZTZjNGFhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5o
dG1sCkBAIC0wLDAgKzEsMTM1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c3R5bGU+CisjcmVzdWx0cyB7CisJZGlzcGxheTogdGFibGU7CisJY2xlYXI6IGJvdGg7CisJcGFk
ZGluZzogMjBweDsKK30KKyNzdW1tYXJ5IHsKKwlwYWRkaW5nOiAyMHB4OworfQorCisudGVzdCB7
CisJZGlzcGxheTogdGFibGUtcm93OworCWJhY2tncm91bmQtY29sb3I6IGxhdmVuZGVyOworfQor
LnRlc3RuYW1lLCAudGVzdHJlc3VsdCB7CisJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHdoaXRl
OworCWJvcmRlci10b3A6IDFweCBzb2xpZCB3aGl0ZTsKKwlwYWRkaW5nLXJpZ2h0OiAxMHB4Owor
CWRpc3BsYXk6IHRhYmxlLWNlbGw7Cit9CisudGVzdHJlc3VsdCBhIHsKKwl0ZXh0LXRyYW5zZm9y
bTogY2FwaXRhbGl6ZTsKK30KKworLnBhc3MgYSB7CisJY29sb3I6IGdyZWVuOworfQorCisucGFy
dGlhbCBhIHsKKwljb2xvcjogeWVsbG93OworfQorCisuZmFpbCBhIHsKKwljb2xvcjogb3Jhbmdl
OworfQorCisudGltZW91dCBhIHsKKwljb2xvcjogcmVkOworfQorCisuY3Jhc2ggYSB7CisJY29s
b3I6IHJlZDsKK30KKworLmVycm9yIGEgeworCWNvbG9yOiByZWQ7Cit9CisKKy5lcnJvci1yZXN1
bHRzLWhpc3QgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICBmbG9hdDogbGVmdDsK
K30KKworLmZhaWwtcmVzdWx0cy1oaXN0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBvcmFuZ2U7
CisgICAgZmxvYXQ6IGxlZnQ7Cit9CisKKy5wYXJ0aWFsLXJlc3VsdHMtaGlzdCB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogeWVsbG93OworICAgIGZsb2F0OiBsZWZ0OworfQorLnBhc3MtcmVzdWx0
cy1oaXN0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICBmbG9hdDogbGVmdDsK
K30KKworPC9zdHlsZT4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHByZXR0eV90ZXN0bmFtZSh0ZXN0
bmFtZSkKK3sKKwlyZXR1cm4gdGVzdG5hbWUucmVwbGFjZSgiaW1wb3J0ZWQvdzNjL3dwdC8iLCIi
KQorfQorCitmdW5jdGlvbiBnZXRfdGVzdF9saW5rKHRlc3RuYW1lKQoreworCXJldHVybiAiPGEg
aHJlZj0nIiArICIuLi8uLi8uLi9MYXlvdXRUZXN0cy8iICsgdGVzdG5hbWUgKyAiJz4iICsgcHJl
dHR5X3Rlc3RuYW1lKHRlc3RuYW1lKSArICI8L2E+IgorfQorCitmdW5jdGlvbiBnZXRfdGVzdF9y
ZXN1bHRfbGluayh0ZXN0bmFtZSwgcmVzdWx0KQoreworCXN1ZmZpeCA9ICIuIiArIHRlc3RuYW1l
LnNwbGl0KCcuJykucG9wKCk7CisJcmV0dXJuICI8YSBocmVmPSciICsgImxheW91dC10ZXN0LXJl
c3VsdHMvIiArIHRlc3RuYW1lLnJlcGxhY2Uoc3VmZml4LCItYWN0dWFsLnR4dCIpICsgIic+IiAr
IHJlc3VsdC50b0xvd2VyQ2FzZSgpICsgIjwvYT4iCit9CisKK2Z1bmN0aW9uIHRlc3RTdWl0ZUhp
c3QobnVtRXJyb3IsIG51bUZhaWwsIG51bVBhcnRpYWwsIG51bVBhc3MpCit7CisgICAgdmFyIHRv
dGFsID0gbnVtRXJyb3IgKyBudW1QYXNzICsgbnVtUGFydGlhbCArIG51bUZhaWw7CisKKyAgICBo
dG1sID0gJzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjEwcHgiPiBDb25mb3Jt
YW5jZSBzdW1tYXJ5IDwvZGl2PiA8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0O3dpZHRoOjE1MHB4OyI+
JzsKKyAgICBpZiAobnVtRXJyb3IpCisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImVycm9y
LXJlc3VsdHMtaGlzdCIgc3R5bGU9IndpZHRoOicgKyAoMTAwICogbnVtRXJyb3IgLyB0b3RhbCkg
KyAnJSI+Jm5ic3A7PC9kaXY+JzsKKyAgICBpZiAobnVtRmFpbCkKKyAgICAgICAgaHRtbCArPSAn
PGRpdiBjbGFzcz0iZmFpbC1yZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51
bUZhaWwgLyB0b3RhbCkgICsgJyUiPiZuYnNwOzwvZGl2Pic7CisgICAgaWYgKG51bVBhcnRpYWwp
CisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InBhcnRpYWwtcmVzdWx0cy1oaXN0IiBzdHls
ZT0id2lkdGg6JyArICgxMDAgKiBudW1QYXJ0aWFsIC8gdG90YWwpICsgJyUiPiZuYnNwOzwvZGl2
Pic7CisgICAgaWYgKG51bVBhc3MpCisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InBhc3Mt
cmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1QYXNzIC8gdG90YWwpICsg
JyUiPiZuYnNwOzwvZGl2Pic7CisgICAgaHRtbCArPSAnPC9kaXY+JzsKKyAgICByZXR1cm4gaHRt
bDsKK30KK2Z1bmN0aW9uIEFERF9DT05GT1JNQU5DRV9SRVNVTFRTKHJlc3VsdHMpCit7CisJdmFy
IG51bVBhc3MgPSBudW1QYXJ0aWFsID0gbnVtRmFpbCA9IG51bUVycm9yID0gMAorCXZhciBpbm5l
ckhUTUwgPSAiPGRpdiBjbGFzcz0ndGVzdCc+PGRpdiBjbGFzcz0ndGVzdG5hbWUnPlRlc3QgTmFt
ZTwvZGl2PjxkaXYgY2xhc3M9J3Rlc3RyZXN1bHQnPiIgKyByZXN1bHRzLnBvcnRfbmFtZS50b1Vw
cGVyQ2FzZSgpICsgIjwvZGl2PjwvZGl2PiIKKwlPYmplY3Qua2V5cyhyZXN1bHRzLmNvbmZvcm1h
bmNlX3Jlc3VsdHMpCisJCS5zb3J0KCkKKwkJLmZvckVhY2goZnVuY3Rpb24oa2V5LCBpKSB7CisJ
CQlyZXN1bHQgPSByZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHNba2V5XQorCQkJaW5uZXJIVE1M
ICs9ICI8ZGl2IGNsYXNzPSd0ZXN0Jz48ZGl2IGNsYXNzPSd0ZXN0bmFtZSc+IiArIGdldF90ZXN0
X2xpbmsoa2V5KSArICI8L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0cmVzdWx0ICIgKyByZXN1bHQudG9M
b3dlckNhc2UoKSArICInPiIgKyBnZXRfdGVzdF9yZXN1bHRfbGluayhrZXksIHJlc3VsdCkgKyAi
PC9kaXY+PC9kaXY+IgorCQkJaWYgKHJlc3VsdCA9PSAiUEFTUyIpIG51bVBhc3MrKworCQkJZWxz
ZSBpZiAocmVzdWx0ID09ICJQQVJUSUFMIikgbnVtUGFydGlhbCsrCisJCQllbHNlIGlmIChyZXN1
bHQgPT0gIkZBSUwiKSBudW1GYWlsKysKKwkJCWVsc2UgbnVtRXJyb3IrKworICAgICAgIH0pOwor
CWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdW1tYXJ5IikuaW5uZXJIVE1MID0gdGVzdFN1aXRl
SGlzdChudW1FcnJvciwgbnVtRmFpbCwgbnVtUGFydGlhbCwgbnVtUGFzcykKKwlkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9IGlubmVySFRNTAorfQorPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CitXM0MgY29uZm9ybWFuY2UgcmVzdWx0cyBmcm9t
IHJ1bi13ZWJraXQtdGVzdCAoPGEgaHJlZj0ibGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1bHRzLmh0
bWwiPnJ1bi13ZWJraXQtdGVzdCByZXN1bHRzPC9hPikKKzwvZGl2PgorPGRpdiBpZD0ic3VtbWFy
eSI+Cis8L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdHMiPgorPC9kaXY+Cis8c2NyaXB0IHNyYz0idzNj
X2NvbmZvcm1hbmNlX3Jlc3VsdHMuanNvbiI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238166</attachid>
            <date>2014-09-16 02:47:02 -0700</date>
            <delta_ts>2014-09-16 03:06:47 -0700</delta_ts>
            <desc>Support of all tests, result generated in WebKitBuild sub-folder</desc>
            <filename>bug-134766-20140916114658.patch</filename>
            <type>text/plain</type>
            <size>38425</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjAxYjEwMjM2OGU4YzVmZGE3NWZiZjI1NjQwOWYxYzJj
NjVlZmFiNy4uMjc1OWY0NzA3NDNkY2ViZWQwMjJhNDRlNmEyMWVhMTdiNmU0MWRhYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3
IEBACisyMDE0LTA5LTE2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2Ug
dGVzdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0NzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTY3JpcHRzL3J1bi13M2MtY29uZm9ybWFuY2UtdGVzdHM6IEFkZGVkIChtYWluIHNjcmlwdCku
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0
cy5weTogQWRkZWQgKEhhbmRsZSBjb25mb3JtYW5jZSB0ZXN0IHJ1bm5uaW5nIHVzaW5nIHJ3dCku
CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lcik6CisgICAgICAgIChXM0NDb25mb3JtYW5j
ZVJ1bm5lci5fX2luaXRfXyk6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci5jb25mb3Jt
YW5jZV9yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci5s
YXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSk6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1
bm5lci50ZXN0X3N1aXRlcyk6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci5ydW5fd2Vi
a2l0X3Rlc3RzKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLnJ1bl90ZXN0X2xpc3Qp
OgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIucmVzdWx0c19tYW5hZ2VyKToKKyAgICAg
ICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLnRlc3RzKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNl
UnVubmVyLmNvbmZvcm1hbmNlX3Jlc3VsdCk6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5l
ci5ydW5fdGVzdHMpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIucHJpbnRfcmVzdWx0
c190b19jb25zb2xlKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLnByaW50X3BvdGVu
dGlhbF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VS
dW5uZXIud3JpdGVfY29uZm9ybWFuY2VfcmVzdWx0cyk6CisgICAgICAgIChjb25maWd1cmVfbG9n
Z2luZyk6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZy5Mb2dIYW5kbGVyKToKKyAgICAgICAg
KGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIuZm9ybWF0KToKKyAgICAgICAgKG1haW4pOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5OiBB
ZGRlZCAoUGFyc2Ugcnd0IHJlc3VsdHMgdG8gY29tcHV0ZSBjb25mb3JtYW5jZSByZXN1bHRzKS4K
KyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlcik6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFn
ZXIuX19pbml0X18pOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnczY190ZXN0X25hbWUp
OgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLl9nZXRfdGVzdF9yZXN1bHRzKToKKyAgICAg
ICAgKFRlc3RSZXN1bHRzTWFuYWdlci5wcm9jZXNzX3Rlc3RfcmVzdWx0cyk6CisgICAgICAgIChU
ZXN0UmVzdWx0c01hbmFnZXIuX2NvbXB1dGVfY29uZm9ybWFuY2Vfc3RhdHVzKToKKyAgICAgICAg
KFRlc3RSZXN1bHRzTWFuYWdlci5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMpOgorICAgICAg
ICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnN1bW1hcnkpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5h
Z2VyLndyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdzNjL3dlYl9wbGF0Zm9ybV90ZXN0X3NldHVwLnB5OiBBZGRlZCAodXBkYXRlIHdwdCBmaWxl
cywgd3B0IHRlc3RoYXJuZXNzLXJlcG9ydC5qcyBhbmQgd3B0IHNlcnZlciBjb25maWcgZmlsZSku
CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXR1cCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRl
c3RTZXR1cC5fX2luaXRfXyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXR1cC5yZXN0b3Jl
X3czY190ZXN0aGFybmVzc3JlcG9ydCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXR1cC5j
b3B5X3dlYmtpdF90ZXN0aGFybmVzc3JlcG9ydCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RT
ZXR1cC5jb3B5X3dwdF9qc29uX2NvbmZpZyk6CisKIDIwMTQtMDktMTIgIEJyaWFuIEouIEJ1cmcg
IDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbWlu
ZCBhYm91dCByZWJhc2VsaW5pbmcgZ2VuZXJhdG9yIHRlc3QgcmVzdWx0cwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9y
dW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZjAxNzVhODc2MmIwNWNiY2Rk
OWE3YWY5NjEyNTQxYjI5OTI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1
bi13M2MtY29uZm9ybWFuY2UtdGVzdHMKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhl
IG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgYXJvdW5kIHdlYmtpdHB5L3czYy9ydW5f
dzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5IiIiCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQg
bXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcAorCittdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwLnJ1
bignd2Via2l0cHknLCAndzNjJywgJ3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHknKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90
ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2Vf
dGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU1MDRiNmI5M2U0YzBiODI1NjU4Mjg3MWQyNjkwMzQwY2Zl
ZmEwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3J1bl93
M2NfY29uZm9ybWFuY2VfdGVzdHMucHkKQEAgLTAsMCArMSwxOTYgQEAKKyMgQ29weXJpZ2h0IChj
KSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04g
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENB
Tk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IgorIFRoaXMgc2NyaXB0IGV2YWx1YXRlcyBXM0MgdGVzdHMgY29uZm9ybWFuY2UgYnk6CisgICAg
LSBpbXBvcnRpbmcgVzNDIHRlc3RzIGFzIFdlYktpdCB0ZXN0cyAodXNpbmcgd2ViX3BsYXRmb3Jt
X3Rlc3RfaW1wb3J0ZXIpCisgICAgLSBnZW5lcmF0aW5nIGV4cGVjdGVkLnR4dCBmaWxlcyAodXNp
bmcgcnVuLXdlYmtpdC10ZXN0cykKKyAgICAtIGNvbXB1dGluZyB3aGV0aGVyIGEgdGVzdCBpcyBw
YXNzaW5nIG9yIG5vdCBieSBjaGVja2luZyBQQVNTL0ZBSUwgYXNzZXJ0aW9ucyBvdXRwdXR0ZWQg
d2l0aGluIHRoZSBleHBlY3RlZC50eHQgZmlsZXMKKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRw
eS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2Rl
bHMudGVzdF9leHBlY3RhdGlvbnMgaW1wb3J0IFRlc3RFeHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgcGxhdGZvcm1fb3B0aW9ucworZnJvbSB3ZWJraXRweS53M2MuZmFjdG9y
eSBpbXBvcnQgdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJzZXIKK2Zyb20gd2Via2l0cHkudzNjLnRl
c3RfcmVzdWx0c19tYW5hZ2VyIGltcG9ydCBUZXN0UmVzdWx0c01hbmFnZXIKK2Zyb20gd2Via2l0
cHkudzNjLndlYl9wbGF0Zm9ybV90ZXN0X3NldHVwIGltcG9ydCBXZWJQbGF0Zm9ybVRlc3RTZXR1
cAorZnJvbSB3ZWJraXRweS53M2Mud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIgaW1wb3J0IFdl
YlBsYXRmb3JtVGVzdEltcG9ydGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBXM0NDb25mb3JtYW5jZVJ1bm5lcihvYmplY3QpOgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAor
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcmVzdWx0c19tYW5hZ2VyID0g
Tm9uZQorICAgICAgICBzZWxmLl90ZXN0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29uZm9ybWFu
Y2VfcmVzdWx0cyA9IE5vbmUKKworICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9y
dGVyID0gV2ViUGxhdGZvcm1UZXN0SW1wb3J0ZXIocG9ydCwgb3B0aW9ucykKKyAgICAgICAgc2Vs
Zi5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnkgPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9y
dGVyLmltcG9ydGVkX3Rlc3RzX2RpcmVjdG9yeQorICAgICAgICBzZWxmLnJ1bm5lZF90ZXN0c19k
aXJlY3RvcnkgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocG9ydC53M2NfY29uZm9ybWFuY2VfcmVz
dWx0c19kaXJlY3RvcnkoKSwgInJ1bm5lZC10ZXN0cyIpCisKKyAgICBkZWYgY29uZm9ybWFuY2Vf
cmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0LnczY19j
b25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpCisKKyAgICBkZWYgbGF5b3V0X3Rlc3RzX3Jl
c3VsdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpv
aW4oc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpLCAibGF5b3V0LXRlc3QtcmVz
dWx0cyIpCisKKyAgICBkZWYgdGVzdF9zdWl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLnRlc3Rfc3VpdGVzKCkKKworICAgIGRlZiBydW5f
d2Via2l0X3Rlc3RzKHNlbGYsIHBhcmFtZXRlcnMpOgorICAgICAgICB0bXBfYXJncyA9IFtzZWxm
Ll9wb3J0LnBhdGhfdG9fc2NyaXB0KCdydW4td2Via2l0LXRlc3RzJyldICsgcGFyYW1ldGVycwor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBsYXRmb3JtOgorICAgICAgICAgICAgdG1wX2FyZ3Mu
YXBwZW5kKCctLScgKyBzZWxmLl9vcHRpb25zLnBsYXRmb3JtKQorICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLndlYmtpdF90ZXN0X3J1bm5lciBpcyBUcnVlOgorICAgICAgICAgICAgdG1wX2FyZ3Mu
YXBwZW5kKCctMicpCisgICAgICAgIEV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5kKHRtcF9hcmdzLCBl
cnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIHJldHVybl9zdGRlcnI9KHNlbGYu
X29wdGlvbnMuX19kaWN0X19bJ3czY19xdWlldCddKSwgZGVjb2RlX291dHB1dD1GYWxzZSkKKwor
ICAgIGRlZiBydW5fdGVzdF9saXN0KHNlbGYsIHRlc3RzKToKKyAgICAgICAgdGVzdF9saXN0X2Zp
bGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9y
eSwgJ3Rlc3RfbGlzdC50eHQnKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9saXN0X2ZpbGVuYW1l
LCAndysnKSBhcyBvdXQ6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAg
ICAgICAgICBvdXQud3JpdGUodGVzdCArICdcbicpCisgICAgICAgICAgICBvdXQuY2xvc2UoKQor
CisgICAgICAgIHJ1bl93ZWJraXRfYXJncyA9IFsnLXEnLCAnLS1uby1yZXRyeS1mYWlsdXJlcycs
ICctLW5vLXNob3ctcmVzdWx0cycsICctLWZ1bGwtcmVzdWx0cy1odG1sJywgJy0tcmVzdWx0cy1k
aXJlY3Rvcnk9JyArIHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3RvcnkoKSwgJy0td3B0
c2VydmVyLWRvYy1yb290PScgKyBzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksICctLXRlc3Qt
bGlzdD0nICsgdGVzdF9saXN0X2ZpbGVuYW1lXQorCisgICAgICAgIHNlbGYucnVuX3dlYmtpdF90
ZXN0cyhydW5fd2Via2l0X2FyZ3MpCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfbWFuYWdlciA9IFRl
c3RSZXN1bHRzTWFuYWdlcihzZWxmLl9wb3J0LCBzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3Rvcnks
IHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3RvcnkoKSwgc2VsZi50ZXN0cygpKQorICAg
ICAgICByZXR1cm4gc2VsZi5fcmVzdWx0c19tYW5hZ2VyLnByb2Nlc3NfdGVzdF9yZXN1bHRzKCkK
KworICAgIGRlZiByZXN1bHRzX21hbmFnZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9y
ZXN1bHRzX21hbmFnZXIKKworICAgIGRlZiB0ZXN0cyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5f
dGVzdHMgaXMgTm9uZToKKyAgICAgICAgICAgIHRlc3Rfc3VpdGVfcGF0aHMgPSBbc2VsZi5fZmls
ZXN5c3RlbS5qb2luKHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgdGVzdF9zdWl0ZSkgZm9y
IHRlc3Rfc3VpdGUgaW4gc2VsZi50ZXN0X3N1aXRlcygpXQorICAgICAgICAgICAgc2VsZi5fdGVz
dHMgPSBzZWxmLl9wb3J0LnRlc3RzKHRlc3Rfc3VpdGVfcGF0aHMpCisgICAgICAgIHJldHVybiBz
ZWxmLl90ZXN0cworCisgICAgZGVmIGNvbmZvcm1hbmNlX3Jlc3VsdChzZWxmLCB0ZXN0KToKKyAg
ICAgICAgaWYgc2VsZi5fY29uZm9ybWFuY2VfcmVzdWx0cyBpcyBOb25lOgorICAgICAgICAgICAg
c2VsZi5fY29uZm9ybWFuY2VfcmVzdWx0cyA9IHNlbGYucmVzdWx0c19tYW5hZ2VyKCkuY29tcHV0
ZV9jb25mb3JtYW5jZV9yZXN1bHRzKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZvcm1hbmNl
X3Jlc3VsdHNbc2VsZi5yZXN1bHRzX21hbmFnZXIoKS53M2NfdGVzdF9uYW1lKHRlc3QpXQorCisg
ICAgZGVmIHJ1bl90ZXN0cyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5fX2RpY3Rf
X1sndzNjX2xpc3QnXSBpcyBUcnVlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5fX2RpY3RfX1sndzNjX3JlZnJlc2gnXSBpcyBUcnVlOgorICAg
ICAgICAgICAgX2xvZy5pbmZvKCdJbXBvcnRpbmcgdGVzdHMuLi4nKQorICAgICAgICAgICAgc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci5pbXBvcnRfdGVzdHMoKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGluZyB0ZXN0IGltcG9ydC4uLicpCisKKyAg
ICAgICAgX2xvZy5pbmZvKCdTZXR0aW5nIHVwIGNvbmZpZ3VyYXRpb24gZmlsZXMuLi4nKQorICAg
ICAgICB3cHRfc2V0dXAgPSBXZWJQbGF0Zm9ybVRlc3RTZXR1cChzZWxmLl9wb3J0Lmhvc3QsIHNl
bGYuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5KQorICAgICAgICB3cHRfc2V0dXAuY29weV93ZWJr
aXRfdGVzdGhhcm5lc3NyZXBvcnQoKQorICAgICAgICB3cHRfc2V0dXAuY29weV93cHRfanNvbl9j
b25maWcoKQorCisgICAgICAgIF9sb2cuaW5mbygnQ29weWluZyBpbXBvcnRlZF90ZXN0c19kaXJl
Y3RvcnkgYXMgcnVubmVkX3Rlc3RfZGlyZWN0b3J5JykKKyAgICAgICAgIyBBIGRpZmZlcmVudCBk
aXJlY3RvcnksIHJ1bm5lZF90ZXN0X2RpcmVjdG9yeSwgaXMgdXNlZCB0byBydW4gdGVzdHMgc28g
dGhhdCBpbXBvcnRlZF90ZXN0c19kaXJlY3RvcnkgcmVtYWlucyBjbGVhbi4KKyAgICAgICAgIyBy
dW5uZWRfdGVzdF9kaXJlY3RvcnkgaXMgYWxzbyByZWNyZWF0ZWQgZWFjaCB0aW1lIHRvIHN0YXJ0
IGluIGEgY2xlYW4gc3RhdGUuCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucm10cmVlKHNlbGYu
cnVubmVkX3Rlc3RzX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5dHJl
ZShzZWxmLmltcG9ydGVkX3Rlc3RzX2RpcmVjdG9yeSwgc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0
b3J5KQorCisgICAgICAgIF9sb2cuaW5mbygnUnVubmluZyB0ZXN0cy4uLicpCisgICAgICAgIHNl
bGYucnVuX3Rlc3RfbGlzdChzZWxmLnRlc3RzKCkpCisKKyAgICAgICAgX2xvZy5pbmZvKCdHZW5l
cmF0aW5nIGNvbmZvcm1hbmNlIHJlc3VsdHMuLi4nKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVt
Lm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rvcnko
KSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKCkKKworICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByaW50X3Jlc3VsdHNfdG9fY29uc29sZShzZWxmKToKKyAg
ICAgICAgc3VtbWFyeSA9IHNlbGYucmVzdWx0c19tYW5hZ2VyKCkuc3VtbWFyeSgpCisgICAgICAg
IF9sb2cuaW5mbygnUnVuICcgKyBzdHIoc3VtbWFyeVsndG90YWwnXSkgKyAnIHRlc3RzJykKKyAg
ICAgICAgX2xvZy5pbmZvKCdQYXNzOiAnICsgc3RyKHN1bW1hcnlbJ251bV9wYXNzJ10pKQorICAg
ICAgICBfbG9nLmluZm8oJ1BhcnRpYWw6ICcgKyBzdHIoc3VtbWFyeVsnbnVtX3BhcnRpYWwnXSkp
CisgICAgICAgIF9sb2cuaW5mbygnRmFpbDogJyArIHN0cihzdW1tYXJ5WydudW1fZmFpbCddKSkK
KyAgICAgICAgX2xvZy5pbmZvKCdFcnJvcjogJyArIHN0cihzdW1tYXJ5WydudW1fZXJyb3InXSkp
CisKKyAgICBkZWYgcHJpbnRfcG90ZW50aWFsX3Rlc3RfZXhwZWN0YXRpb25zX3VwZGF0ZShzZWxm
KToKKyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zKHNlbGYuX3Bv
cnQpLm1vZGVsKCkKKyAgICAgICAgY29uZm9ybWFuY2UgPSBzZWxmLnJlc3VsdHNfbWFuYWdlcigp
LmNvbXB1dGVfY29uZm9ybWFuY2VfcmVzdWx0cygpCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYu
dGVzdHMoKToKKyAgICAgICAgICAgIHczY190ZXN0X25hbWUgPSBzZWxmLnJlc3VsdHNfbWFuYWdl
cigpLnczY190ZXN0X25hbWUodGVzdCkKKyAgICAgICAgICAgIHdrX3Rlc3RfbmFtZSA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbignaW1wb3J0ZWQnLCAndzNjJywgJ3dwdCcsIHczY190ZXN0X25hbWUp
CisgICAgICAgICAgICBpZiBub3QgdGVzdF9leHBlY3RhdGlvbnMuaGFzX3Rlc3Qod2tfdGVzdF9u
YW1lKToKKyAgICAgICAgICAgICAgICBpZiBub3QgY29uZm9ybWFuY2VbdzNjX3Rlc3RfbmFtZV0g
PT0gJ1BBU1MnOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ3Rlc3QgJyArIHdrX3Rl
c3RfbmFtZSArICcgaXMgbm90IHBhc3NpbmcnKQorICAgICAgICAgICAgZWxpZiBjb25mb3JtYW5j
ZVt3M2NfdGVzdF9uYW1lXSA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCd0
ZXN0ICcgKyB3a190ZXN0X25hbWUgKyAnIGlzIHBhc3NpbmcnKQorCisgICAgZGVmIHdyaXRlX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMoc2VsZik6CisgICAgICAgIHRlc3RfcnVuX2luZm8gPSB7fQorICAg
ICAgICB0ZXN0X3J1bl9pbmZvWydwb3J0X25hbWUnXSA9IHNlbGYuX3BvcnQucG9ydF9uYW1lCisg
ICAgICAgIHRlc3RfcnVuX2luZm9bJ3Rlc3RzX3ZlcnNpb24nXSA9IHNlbGYud2ViX3BsYXRmb3Jt
X3Rlc3RfaW1wb3J0ZXIud3B0c2hhKCkKKyAgICAgICAgdGVzdF9ydW5faW5mb1sncmVzdWx0c19k
aXJlY3RvcnknXSA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChzZWxmLmxheW91dF90ZXN0c19y
ZXN1bHRfZGlyZWN0b3J5KCksIHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3RvcnkoKSkK
KyAgICAgICAgdGVzdF9ydW5faW5mb1sndGVzdHNfZGlyZWN0b3J5J10gPSBzZWxmLl9maWxlc3lz
dGVtLnJlbHBhdGgoc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLmNvbmZvcm1hbmNl
X3Jlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHNlbGYucmVzdWx0c19tYW5hZ2VyKCkud3Jp
dGVfY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5
KCksIHRlc3RfcnVuX2luZm8pCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAgY2xh
c3MgTG9nSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgICAgICBkZWYgZm9ybWF0
KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcu
SU5GTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVsbmFt
ZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0TWVz
c2FnZSgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNl
dExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAgaGFu
ZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxl
cikKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3RkZXJy
KToKKyAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgaG9zdCA9IEhvc3QoKQorICAgIHBhcnNl
ciA9IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyKGhvc3QsIGhvc3QuZmlsZXN5c3RlbS5iYXNl
bmFtZShfX2ZpbGVfXykpCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9h
cmdzKGFyZ3YpCisgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBsYXRm
b3JtLCBvcHRwYXJzZS5WYWx1ZXMoeyd3ZWJraXRfdGVzdF9ydW5uZXInOiBvcHRpb25zLndlYmtp
dF90ZXN0X3J1bm5lcn0pKQorCisgICAgcnVubmVyID0gVzNDQ29uZm9ybWFuY2VSdW5uZXIocG9y
dCwgb3B0aW9ucykKKyAgICBpZiBydW5uZXIucnVuX3Rlc3RzKCk6CisgICAgICAgIHJ1bm5lci5w
cmludF9yZXN1bHRzX3RvX2NvbnNvbGUoKQorICAgICAgICBydW5uZXIucHJpbnRfcG90ZW50aWFs
X3Rlc3RfZXhwZWN0YXRpb25zX3VwZGF0ZSgpCisgICAgICAgIF9sb2cuaW5mbygiUmVzdWx0cyBl
eHBvcnRlZCBpbiAnIiArIHJ1bm5lci5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpICsg
IiciKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIHN5cy5leGl0KG1haW4oc3lz
LmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93M2MvdGVzdF9yZXN1bHRzX21hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU1YmYz
NzIyYmViYjExNjVlNWZmZTQyN2I3YmE4NDg1Y2RiN2NiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5CkBAIC0wLDAg
KzEsMTM5IEBACisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCBtYW5hZ2UgSlNPTiBhbmQg
cmVzdWx0cy5odG1sIGZpbGVzIGZvciBXM0MgdGVzdCByZXN1bHRzLgorIiIiCisKK2ltcG9ydCBp
bworaW1wb3J0IGpzb24KKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKKworCitjbGFzcyBUZXN0UmVzdWx0c01h
bmFnZXIob2JqZWN0KToKKworICAgIF9KU09OX1BSRUZJWCA9ICdBRERfQ09ORk9STUFOQ0VfUkVT
VUxUUygnCisgICAgX0pTT05fU1VGRklYID0gJyk7JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIGJhc2VfZGlyZWN0b3J5LCByZXN1bHRfZGlyLCB0ZXN0cyk6CisgICAgICAgIHNlbGYu
X3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5
c3RlbQorICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdF9kaXIKKyAgICAg
ICAgc2VsZi5fdGVzdHMgPSB0ZXN0cworCisgICAgICAgICMgUm9vdCBkaXJlY3Rvcnkgb2YgVzND
IGltcG9ydGVkIHRlc3QKKyAgICAgICAgc2VsZi5fYmFzZV9kaXJlY3RvcnkgPSBiYXNlX2RpcmVj
dG9yeQorCisgICAgZGVmIHczY190ZXN0X25hbWUoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVy
biBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgodGVzdCwgc2VsZi5fYmFzZV9kaXJlY3RvcnkpCisK
KyAgICBkZWYgX2dldF90ZXN0X3Jlc3VsdHMoc2VsZiwgdGVzdHMsIHRlc3RfZGljdCwgcGF0aCk6
CisgICAgICAgIGZvciBrZXkgaW4gdGVzdF9kaWN0LmtleXMoKToKKyAgICAgICAgICAgIF9wYXRo
ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIGtleSkKKyAgICAgICAgICAgIF9wb3RlbnRp
YWxfdGVzdCA9IHRlc3RfZGljdFtrZXldCisgICAgICAgICAgICBpZiAnYWN0dWFsJyBpbiBfcG90
ZW50aWFsX3Rlc3Q6CisgICAgICAgICAgICAgICAgIyBTdG9yZSB0aGUgdGVzdAorICAgICAgICAg
ICAgICAgIHRlc3RzW19wYXRoXSA9IF9wb3RlbnRpYWxfdGVzdAorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAjIFByb2Nlc3Mgc3ViZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAg
ICBzZWxmLl9nZXRfdGVzdF9yZXN1bHRzKHRlc3RzLCBfcG90ZW50aWFsX3Rlc3QsIF9wYXRoKQor
CisgICAgZGVmIHByb2Nlc3NfdGVzdF9yZXN1bHRzKHNlbGYpOgorICAgICAgICB0ZXN0X3Jlc3Vs
dHMgPSB7fQorICAgICAgICByZXN1bHRzX2pzb25fcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgJ2Z1bGxfcmVzdWx0cy5qc29uJykKKyAgICAgICAg
cmVzdWx0c19qc29uID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5sb2FkX2pzb24oc2VsZi5fZmls
ZXN5c3RlbSwgcmVzdWx0c19qc29uX3BhdGgpCisgICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lz
dGVtLnNlcCBpZiBzZWxmLl9maWxlc3lzdGVtLmlzYWJzKHNlbGYuX2Jhc2VfZGlyZWN0b3J5KSBl
bHNlICcnCisgICAgICAgIHNlbGYuX2dldF90ZXN0X3Jlc3VsdHModGVzdF9yZXN1bHRzLCByZXN1
bHRzX2pzb25bJ3Rlc3RzJ10sIHBhdGgpCisgICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMKKwor
ICAgIGRlZiBfY29tcHV0ZV9jb25mb3JtYW5jZV9zdGF0dXMoc2VsZiwgdGVzdF9uYW1lLCB0ZXN0
X3Jlc3VsdHMpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHRlc3Rf
bmFtZSkKKyAgICAgICAgaWYgdGV4dCBpcyBOb25lIG9yIGxlbih0ZXh0KSA9PSAwOgorICAgICAg
ICAgICAgIyBpZiB0aGUgZW1wdHkgZXhwZWN0ZWQgZmlsZSwgdGVzdCBtYXkgYmUgZmFpbGluZyBv
ciBhIHJlZiB0ZXN0LgorICAgICAgICAgICAgIyBMZXQncyBmaW5kIG91dCBmcm9tIGpzb24gcmVz
dWx0cyBpZiB0aGUgdGVzdCBpcyBmYWlsaW5nLgorICAgICAgICAgICAgaWYgdGVzdF9uYW1lIGlu
IHRlc3RfcmVzdWx0cyBhbmQgJ2FjdHVhbCcgaW4gdGVzdF9yZXN1bHRzW3Rlc3RfbmFtZV06Cisg
ICAgICAgICAgICAgICAgcmVhc29uID0gdGVzdF9yZXN1bHRzW3Rlc3RfbmFtZV1bJ2FjdHVhbCdd
CisgICAgICAgICAgICAgICAgaWYgcmVhc29uID09ICdDUkFTSCcgb3IgcmVhc29uID09ICdUSU1F
T1VUJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbgorICAgICAgICAgICAgICAg
IHJldHVybiAnRVJST1InCisgICAgICAgICAgICAjIFRPRE86IFdlIG1heSB3YW50IHRvIHZhbGlk
YXRlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBhIHJlZiB0ZXN0CisgICAgICAgICAgICByZXR1cm4g
J1BBU1MnCisgICAgICAgICMgTGV0J3MgY2hlY2sgd2hldGhlciBzb21lIGxpbmVzIHN0YXJ0IHdp
dGggUEFTUyBvciBGQUlMCisgICAgICAgICMgVGVzdCBpcyBzYWlkIHRvIFBBU1MgaWYgYXQgbGVh
c3Qgb25lIGxpbmUgaXMgUEFTUyBhbiBubyBsaW5lIGlzIEZBSUwKKyAgICAgICAgaGFzRmFpbCA9
IEZhbHNlCisgICAgICAgIGhhc1Bhc3MgPSBGYWxzZQorICAgICAgICBidWYgPSBpby5TdHJpbmdJ
Tyh1bmljb2RlKHRleHQsICJ1dGYtOCIpKQorICAgICAgICBmb3IgbGluZSBpbiBidWYucmVhZGxp
bmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BBU1MnKToKKyAgICAgICAg
ICAgICAgICBoYXNQYXNzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgo
J0ZBSUwnKToKKyAgICAgICAgICAgICAgICBoYXNGYWlsID0gVHJ1ZQorICAgICAgICBpZiBoYXNQ
YXNzOgorICAgICAgICAgICAgcmV0dXJuICdQQVJUSUFMJyBpZiBoYXNGYWlsIGVsc2UgJ1BBU1Mn
CisgICAgICAgIGlmIGhhc0ZhaWw6CisgICAgICAgICAgICByZXR1cm4gJ0ZBSUwnCisgICAgICAg
IHJldHVybiAnRVJST1InCisKKyAgICBkZWYgY29tcHV0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKHNl
bGYpOgorICAgICAgICBzdGF0dXMgPSB7fQorICAgICAgICB0ZXN0X3Jlc3VsdHMgPSBzZWxmLnBy
b2Nlc3NfdGVzdF9yZXN1bHRzKCkKKyAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0
czoKKyAgICAgICAgICAgIHN0YXR1c1tzZWxmLnczY190ZXN0X25hbWUodGVzdF9uYW1lKV0gPSBz
ZWxmLl9jb21wdXRlX2NvbmZvcm1hbmNlX3N0YXR1cyh0ZXN0X25hbWUsIHRlc3RfcmVzdWx0cykK
KyAgICAgICAgcmV0dXJuIHN0YXR1cworCisgICAgZGVmIHN1bW1hcnkoc2VsZik6CisgICAgICAg
IG51bV9wYXNzID0gbnVtX3BhcnRpYWwgPSBudW1fZmFpbCA9IG51bV9lcnJvciA9IDAKKyAgICAg
ICAgc3RhdHVzID0gc2VsZi5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoKQorICAgICAgICBm
b3IgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RzOgorICAgICAgICAgICAgcmVzdWx0ID0gc3RhdHVz
W3NlbGYudzNjX3Rlc3RfbmFtZSh0ZXN0X25hbWUpXQorICAgICAgICAgICAgaWYgcmVzdWx0ID09
ICdQQVNTJzoKKyAgICAgICAgICAgICAgICBudW1fcGFzcyArPSAxCisgICAgICAgICAgICBlbGlm
IHJlc3VsdCA9PSAnUEFSVElBTCc6CisgICAgICAgICAgICAgICAgbnVtX3BhcnRpYWwgKz0gMQor
ICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gJ0ZBSUwnOgorICAgICAgICAgICAgICAgIG51bV9m
YWlsICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnVtX2Vycm9yICs9
IDEKKyAgICAgICAgc3VtbWFyeSA9IHt9CisgICAgICAgIHN1bW1hcnlbJ3RvdGFsJ10gPSBudW1f
cGFzcyArIG51bV9mYWlsICsgbnVtX3BhcnRpYWwgKyBudW1fZXJyb3IKKyAgICAgICAgc3VtbWFy
eVsnbnVtX3Bhc3MnXSA9IG51bV9wYXNzCisgICAgICAgIHN1bW1hcnlbJ251bV9mYWlsJ10gPSBu
dW1fZmFpbAorICAgICAgICBzdW1tYXJ5WydudW1fcGFydGlhbCddID0gbnVtX3BhcnRpYWwKKyAg
ICAgICAgc3VtbWFyeVsnbnVtX2Vycm9yJ10gPSBudW1fZXJyb3IKKyAgICAgICAgcmV0dXJuIHN1
bW1hcnkKKworICAgIGRlZiB3cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKHNlbGYsIHBhdGgsIHRl
c3RfcnVuX2luZm8pOgorICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgcmVzdWx0c1snY29u
Zm9ybWFuY2VfcmVzdWx0cyddID0gc2VsZi5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoKQor
ICAgICAgICByZXN1bHRzLnVwZGF0ZSh0ZXN0X3J1bl9pbmZvKQorICAgICAgICAjIGNvcHkgY29u
Zm9ybWFuY2UgcmVzdWx0cyBhcyBqc29uIGRhdGEKKyAgICAgICAganNvbl9zdHJpbmcgPSBqc29u
LmR1bXBzKHJlc3VsdHMsIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAganNvbl9zdHJp
bmcgPSBzZWxmLl9KU09OX1BSRUZJWCArIGpzb25fc3RyaW5nICsgc2VsZi5fSlNPTl9TVUZGSVgK
KyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHBhdGgsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5qc29uJyksIGpzb25fc3RyaW5n
KQorICAgICAgICAjIGNvcHkgaHRtbCB0ZW1wbGF0ZQorICAgICAgICByZXN1bHRzX2ZpbGUgPSBz
ZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnLCAnaW1wb3J0ZWQn
LCAndzNjJywgJ3Jlc291cmNlcycsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sJykKKyAg
ICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocmVzdWx0c19maWxlKToKKyAgICAgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUocmVzdWx0c19maWxlLCBzZWxmLl9maWxlc3lz
dGVtLmpvaW4ocGF0aCwgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwnKSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9wbGF0Zm9ybV90ZXN0X3NldHVwLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd2ViX3BsYXRmb3JtX3Rlc3Rfc2V0dXAucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDQwOGJkOTI1OTQyOTY4ZTlmZjI1N2QzYWE3ZGM2NzliYWI3NGViMQotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dlYl9wbGF0Zm9ybV90
ZXN0X3NldHVwLnB5CkBAIC0wLDAgKzEsNjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisj
IENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgor
IyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisj
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCBhbGxvd3Mgc2V0dGluZyB1cCB0aGUgd2ViIHBs
YXRmb3JtIHRlc3QgcGFyYW1ldGVycyBzdWNoIGFzOgorICAgIC0gVGhlIGNvbmZpZy5qc29uIGZp
bGUgdXNlZCBieSB0aGUgV1BUIGh0dHAgc2VydmVyCisgICAgLSBUaGUgdGVzdGhhcm5lc3NyZXBv
cnQuanMgdXNlZCBmb3Igd2ViIHBsYXRmb3JtIHRlc3RzIChjb3B5IG9mIHdlYmtpdCB0ZXN0aGFy
bmVzc3JlcG9ydC5qcykuCisiIiIKKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5j
b21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24ud2Via2l0X2ZpbmRl
ciBpbXBvcnQgV2ViS2l0RmluZGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBXZWJQbGF0Zm9ybVRlc3RTZXR1cChvYmplY3QpOgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGhvc3QsIHRlc3RfZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbSA9IGhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl93cHRfcm9vdCA9IHRlc3RfZGly
ZWN0b3J5CisgICAgICAgIHNlbGYuX2xheW91dF9yb290ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KFdlYktpdEZpbmRlcihzZWxmLl9maWxlc3lzdGVtKS53ZWJraXRfYmFzZSgpLCAiTGF5b3V0VGVz
dHMiKQorCisgICAgZGVmIHJlc3RvcmVfdzNjX3Rlc3RoYXJuZXNzcmVwb3J0KHNlbGYpOgorICAg
ICAgICBfbG9nLmRlYnVnKCdVc2luZyBXM0MgV1BUIHRlc3RoYXJuZXNzcmVwb3J0LmpzJykKKyAg
ICAgICAgdGVzdGhhcm5lc3NyZXBvcnRfd3B0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5q
b2luKHNlbGYuX3dwdF9yb290LCAicmVzb3VyY2VzIiwgInRlc3RoYXJuZXNzcmVwb3J0LmpzfiIp
CisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKHRlc3RoYXJuZXNzcmVwb3J0X3dw
dF9maWxlbmFtZSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHlmaWxlKHRlc3Ro
YXJuZXNzcmVwb3J0X3dwdF9maWxlbmFtZSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dw
dF9yb290LCAicmVzb3VyY2VzIiwgInRlc3RoYXJuZXNzcmVwb3J0LmpzIikpCisgICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZSh0ZXN0aGFybmVzc3JlcG9ydF93cHRfZmlsZW5hbWUp
CisKKyAgICBkZWYgY29weV93ZWJraXRfdGVzdGhhcm5lc3NyZXBvcnQoc2VsZik6CisgICAgICAg
IF9sb2cuZGVidWcoJ1VzaW5nIFdlYktpdCB0ZXN0aGFybmVzc3JlcG9ydC5qcycpCisgICAgICAg
IHRlc3RoYXJuZXNzcmVwb3J0X3drX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYuX2xheW91dF9yb290LCAicmVzb3VyY2VzIiwgInRlc3RoYXJuZXNzcmVwb3J0LmpzIikKKyAg
ICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUodGVzdGhhcm5lc3NyZXBvcnRfd2tfZmls
ZW5hbWUpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5ZmlsZShzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5fd3B0X3Jvb3QsICJyZXNvdXJjZXMiLCAidGVzdGhhcm5lc3NyZXBv
cnQuanMiKSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dwdF9yb290LCAicmVzb3VyY2Vz
IiwgInRlc3RoYXJuZXNzcmVwb3J0LmpzfiIpKQorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3Rl
bS5jb3B5ZmlsZShzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jvb3QsICJyZXNv
dXJjZXMiLCAidGVzdGhhcm5lc3NyZXBvcnQuanMiKSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYuX3dwdF9yb290LCAicmVzb3VyY2VzIiwgInRlc3RoYXJuZXNzcmVwb3J0LmpzIikpCisKKyAg
ICBkZWYgY29weV93cHRfanNvbl9jb25maWcoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ0Nv
cHlpbmcganNvbiB3ZWIgcGxhdGZvcm0gc2VydmVyIGNvbmZpZycpCisgICAgICAgIGNvbmZpZ193
cHRfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jvb3QsICJp
bXBvcnRlZCIsICJ3M2MiLCAicmVzb3VyY2VzIiwgImNvbmZpZy5qc29uIikKKyAgICAgICAgaWYg
c2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoY29uZmlnX3dwdF9maWxlbmFtZSk6CisgICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLmNvcHlmaWxlKGNvbmZpZ193cHRfZmlsZW5hbWUsIHNlbGYuX2Zp
bGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgImNvbmZpZy5qc29uIikpCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL0NoYW5nZUxvZwppbmRleCA0MWNmZjRjMWQwZDI5YjU3OWQzMWQ5MWVmMTM3YWM5ODMx
YmNkMWM2Li43ZjQwYjg4NDU3ZGQ5OTkxMGRhMjZjMDZmNGFjNzM0ZDgwYzE2MDE0IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0wOS0xNiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIEFkZCBz
dXBwb3J0IGZvciBhdXRvbWF0ZWQgVzNDIGNvbmZvcm1hbmNlIHRlc3RpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDc2NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcmVzb3VyY2VzL2NvbmZpZy5q
c29uOiBBZGRlZCAod3B0IGh0dHAgc2VydmVyIGNvbmZpZyBmaWxlKS4KKyAgICAgICAgKiByZXNv
dXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbDogQWRkZWQgKHRlbXBsYXRlIGNvbmZv
cm1hbmNlIHJlc3VsdCBmaWxlKS4KKwogMjAxMy0xMi0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBvcnQgdGhlIFhIVE1MIHBhcnNpbmcgYW5kIHNlcmlh
bGl6YXRpb24gdGVzdHMgZm9yIHRlbXBsYXRlIGVsZW1lbnRzCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL2NvbmZpZy5qc29uIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3Jlc291cmNlcy9jb25maWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmIzMGUwMWFiYWZk
MTZkZThkYjBlMTA5NGRjMDRkZjQ4M2QyYWFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25maWcuanNvbgpAQCAtMCwwICsxLDcgQEAKK3si
aG9zdCI6ICJsb2NhbGhvc3QiLAorICJwb3J0cyI6eyJodHRwIjpbODgwMCwgODgwMV0sCisgICAg
ICAgICAgImh0dHBzIjpbXSwKKyAgICAgICAgICAid3MiOls0OTAwMV19LAorICJjaGVja19zdWJk
b21haW5zIjogZmFsc2UsCisgImxvZ19sZXZlbCI6ImRlYnVnIiwKKyAiYmluZF9ob3N0bmFtZSI6
IGZhbHNlfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93
M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jl
c291cmNlcy93M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyZTYwMjk0
Y2NmNmVjNzE3YmRkNTg1ZWUzZWQ3Y2E2ZjdhOWJlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0
bWwKQEAgLTAsMCArMSw0MjcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
dHlsZT4KKyNyZXN1bHRzIHsKKwlkaXNwbGF5OiB0YWJsZTsKKyAgICBwYWRkaW5nOiAyMHB4Owor
CWNsZWFyOiBib3RoOworfQorI3N1bW1hcnkgeworICAgIG1hcmdpbi10b3A6IDIwcHg7CisgICAg
bWFyZ2luLWJvdHRvbTogMjBweDsKK30KKworLnRlc3QsIC5maXJzdGxpbmUgeworCWRpc3BsYXk6
IHRhYmxlOworfQorLnRlc3RuYW1lLCAudGVzdHJlc3VsdCwgLmZpcnN0TGluZSA+IGRpdiB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogbGF2ZW5kZXI7CisgICAgYm9yZGVyLWJvdHRvbTpzb2xpZCAx
cHggd2hpdGU7Cit9CisKKy5maXJzdExpbmVDZWxseworCWRpc3BsYXk6IHRhYmxlLWNlbGw7CisJ
dGV4dC1hbGlnbjogY2VudGVyOworCXdpZHRoOiA4MDBweDsKK30KKworLnNlY29uZExpbmVDZWxs
IHsKKwlkaXNwbGF5OiB0YWJsZS1jZWxsOworCXBhZGRpbmctbGVmdDogNTBweDsKKwl3aWR0aDog
NzUwcHg7Cit9CisKKy50ZXN0bmFtZSB7CisJZGlzcGxheTogdGFibGUtY2VsbDsKKwl3aWR0aDog
ODAwcHg7CisJbWFyZ2luLWxlZnQ6MjBweDsKK30KKworLnRlc3RyZXN1bHQsIC5wb3J0IHsKKwlk
aXNwbGF5OiB0YWJsZS1jZWxsOworCXdpZHRoOiAyNTBweDsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7
Cit9CisKKy50ZXN0cmVzdWx0IGEgeworICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwor
fQorCisucGFydGlhbCwgLnBhc3MsIC5mYWlsLCAudGltZW91dCwgLmVycm9yIHsKKwl0ZXh0LWFs
aWduOiBjZW50ZXI7Cit9CisucGFzcyBhIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisKKy5wYXJ0
aWFsIGEgeworICAgIGNvbG9yOiB5ZWxsb3c7Cit9CisKKy5mYWlsIGEgeworICAgIGNvbG9yOiBv
cmFuZ2U7Cit9CisKKy50aW1lb3V0IGEgeworICAgIGNvbG9yOiByZWQ7Cit9CisKKy5jcmFzaCBh
IHsKKyAgICBjb2xvcjogcmVkOworfQorCisuZXJyb3IgYSB7CisgICAgY29sb3I6IHJlZDsKK30K
KworLmVycm9yLXJlc3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAg
IGZsb2F0OiBsZWZ0OyAKK30KKyAKKy5mYWlsLXJlc3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogb3JhbmdlOworICAgIGZsb2F0OiBsZWZ0OworfQorCisucGFydGlhbC1yZXN1bHRz
LWhpc3QgeworICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKKyAgICBmbG9hdDogbGVmdDsK
K30KKy5wYXNzLXJlc3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47Cisg
ICAgZmxvYXQ6IGxlZnQ7Cit9CisKKy5tb2R1bGUtbmFtZSB7CisJZGlzcGxheTp0YWJsZS1jZWxs
OworCXdpZHRoOiA4MDBweDsKK30KKworLm51bWJlci1vZi10ZXN0cyB7CisJZGlzcGxheTppbmxp
bmUtYmxvY2s7CisJd2lkdGg6IDUwcHg7Cit9CisKKy5tb2R1bGUtcmVzdWx0cyB7CisJdGV4dC1h
bGlnbjogY2VudGVyOworCWRpc3BsYXk6dGFibGUtY2VsbDsKKwl3aWR0aDogMjUwcHg7Cit9CisK
Ky5oaXN0b2dyYW0geworCWRpc3BsYXk6aW5saW5lLWJsb2NrOworCW1hcmdpbi1sZWZ0OiA0MHB4
OworCW1hcmdpbi10b3A6IDVweDsKKwl3aWR0aDoxNTBweDsKK30KKworLm1vZHVsZXsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiBsYXZlbmRlcjsKKyAgICBib3JkZXI6c29saWQgMXB4IHdoaXRlOwor
CWRpc3BsYXk6dGFibGU7Cit9CisKKy5tb2R1bGUtc3VtbWFyeSwgLnNlY29uZExpbmUgeworCWRp
c3BsYXk6dGFibGU7CisgICAgYmFja2dyb3VuZDogbGF2ZW5kZXI7CisgICAgYm9yZGVyOnNvbGlk
IDFweCB3aGl0ZTsKKyAgICBoZWlnaHQ6IDI1cHg7CisgICAgY3Vyc29yOnBvaW50ZXI7Cit9CisK
Ky5ib3h7CisJZGlzcGxheTogdGFibGU7Cit9CisKKy5oaWRkZW4tZGF0YSB7CisgICAgZGlzcGxh
eTogbm9uZQorfQorCisubGVnZW5kID4gZGl2IHsKKwlmbG9hdDogbGVmdDsKKwltYXJnaW4tcmln
aHQ6IDVweDsKKwltaW4td2lkdGg6IDIwcHg7Cit9CisKKy5sZWdlbmQgeworfQorPC9zdHlsZT4K
KzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGdldFRlc3RzRGlyZWN0b3J5KHJlc3VsdHMpCit7CisgICAg
cmV0dXJuIChyZXN1bHRzLnJvb3RfZGlyZWN0b3J5ID8gcmVzdWx0cy5yb290X2RpcmVjdG9yeSA6
IHJlc3VsdHMucG9ydF9uYW1lKSArICIvIiArIAorICAgICAgICAgICAgKHJlc3VsdHMudGVzdHNf
ZGlyZWN0b3J5ID8gcmVzdWx0cy50ZXN0c19kaXJlY3RvcnkgOiAiaW1wb3J0ZWQtdGVzdHMiKQor
fQorCitmdW5jdGlvbiBnZXRSZXN1bHRzRGlyZWN0b3J5KHJlc3VsdHMpCit7CisgICAgcmV0dXJu
IChyZXN1bHRzLnJvb3RfZGlyZWN0b3J5ID8gcmVzdWx0cy5yb290X2RpcmVjdG9yeSA6IHJlc3Vs
dHMucG9ydF9uYW1lKSArICIvIiArIAorICAgICAgICAgICAgKHJlc3VsdHMucmVzdWx0c19kaXJl
Y3RvcnkgPyByZXN1bHRzLnJlc3VsdHNfZGlyZWN0b3J5IDogImxheW91dC10ZXN0LXJlc3VsdHMi
KQorfQorCitmdW5jdGlvbiBnZXRUZXN0TGluayh0ZXN0bmFtZSwgcmVzdWx0cykKK3sKKwlyZXR1
cm4gIjxkaXYgc3R5bGU9J2Zsb2F0OmxlZnQ7IG1hcmdpbi1yaWdodDoxMHB4Jz48YSBocmVmPSci
ICsgZ2V0VGVzdHNEaXJlY3RvcnkocmVzdWx0cykgKyAiLyIgKyB0ZXN0bmFtZSArICInPiIgKyB0
ZXN0bmFtZSArICI8L2E+PC9kaXY+IgorCQkrICI8ZGl2Pig8YSBocmVmPSdodHRwczovL2dpdGh1
Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9ibG9iLyIgKyByZXN1bHRzLnRlc3RzX3ZlcnNp
b24gKyAiLyIgKyB0ZXN0bmFtZSArICInPmdpdGh1YjwvYT4pPC9kaXY+IiAKK30KKworZnVuY3Rp
b24gZ2V0VGVzdFJlc3VsdExpbmsodGVzdG5hbWUsIHJlc3VsdCwgcmVzdWx0cykKK3sKKwlzdWZm
aXggPSAiLiIgKyB0ZXN0bmFtZS5zcGxpdCgnLicpLnBvcCgpOworCXJldHVybiAiPGEgaHJlZj0n
IiArIGdldFRlc3RzRGlyZWN0b3J5KHJlc3VsdHMpICsgIi8iICsgdGVzdG5hbWUucmVwbGFjZShz
dWZmaXgsIi1leHBlY3RlZC50eHQiKSArICInPiIgKyByZXN1bHQudG9Mb3dlckNhc2UoKSArICI8
L2E+IgorfQorCitmdW5jdGlvbiB0ZXN0U3VpdGVIaXN0KG51bUVycm9yLCBudW1GYWlsLCBudW1Q
YXJ0aWFsLCBudW1QYXNzKQoreworICAgIHZhciB0b3RhbCA9IG51bUVycm9yICsgbnVtUGFzcyAr
IG51bVBhcnRpYWwgKyBudW1GYWlsOworCisgICAgaHRtbCA9ICc8ZGl2IGNsYXNzPSJtb2R1bGUt
cmVzdWx0cyI+JworCisgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ibnVtYmVyLW9mLXRlc3RzIj4n
ICsgbnVtUGFzcyArICcvJyArIHRvdGFsICsgJzwvZGl2PicKKworCWh0bWwgKz0gJzxkaXYgY2xh
c3M9Imhpc3RvZ3JhbSI+JworICAgIGlmIChudW1FcnJvcikKKyAgICAgICAgaHRtbCArPSAnPGRp
diBjbGFzcz0iZXJyb3ItcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1F
cnJvciAvIHRvdGFsKSArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYgKG51bUZhaWwpCisgICAg
ICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImZhaWwtcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6
JyArICgxMDAgKiBudW1GYWlsIC8gdG90YWwpICArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYg
KG51bVBhcnRpYWwpCisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InBhcnRpYWwtcmVzdWx0
cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1QYXJ0aWFsIC8gdG90YWwpICsgJyUi
PiZuYnNwOzwvZGl2PicKKyAgICBpZiAobnVtUGFzcykKKyAgICAgICAgaHRtbCArPSAnPGRpdiBj
bGFzcz0icGFzcy1yZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51bVBhc3Mg
LyB0b3RhbCkgKyAnJSI+Jm5ic3A7PC9kaXY+JworICAgIGh0bWwgKz0gJzwvZGl2PicKKworICAg
IHJldHVybiBodG1sICsgJzwvZGl2Pic7Cit9CisKK2Z1bmN0aW9uIGdldFRlc3RzdWl0ZU1vZHVs
ZXMocmVzdWx0cykKKyB7CisJdmFyIG1vZHVsZXMgPSB7fQorCS8vIGZpcnN0IHRyeSB0byBvbmx5
IHNob3cgbW9kdWxlIGZyb20gVVJMIGhhc2gKKwl2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5o
YXNoLnN1YnN0cmluZygxKQorCXZhciBoYXNUZXN0ID0gZmFsc2UKKwlpZiAoaGFzaC5sZW5ndGgp
CisJCU9iamVjdC5rZXlzKHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0cykKKwkJCS5zb3J0KCkK
KwkJCS5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworCQkJCXZhciB0ZXN0TmFtZSA9IGtleQor
CQkJCWlmICh0ZXN0TmFtZS5pbmRleE9mKGhhc2gpID09IDApIHsKKwkJCQkJaGFzVGVzdCA9IHRy
dWUKKwkJCQkJdmFyIGl0ZW1zID0gdGVzdE5hbWUuc3BsaXQoIi8iKQorCQkJCQl2YXIgbmFtZSA9
IGl0ZW1zWzBdCisJCQkJCWlmIChtb2R1bGVzW25hbWVdKQorCQkJCQkJbW9kdWxlc1tuYW1lXS5w
dXNoKGtleSkKKwkJCQkJZWxzZQorCQkJCQkJbW9kdWxlc1tuYW1lXSA9IFtrZXldCisJCQkJfQor
CQl9KQorCWlmIChoYXNUZXN0KQorCQlyZXR1cm4gbW9kdWxlcworCS8vIGlmIG5vIHRlc3RzLCBz
aG93IGFsbCBtb2R1bGVzCisgICAgT2JqZWN0LmtleXMocmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1
bHRzKQorICAgICAgICAuc29ydCgpCisgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkg
eworCQkJdmFyIHRlc3ROYW1lID0ga2V5CisJCQl2YXIgaXRlbXMgPSB0ZXN0TmFtZS5zcGxpdCgi
LyIpCisJCQl2YXIgbmFtZSA9IGl0ZW1zWzBdCisJCQkvLyBJbiBjYXNlIG9mIGh0bWwgbW9kdWxl
LCB3ZSBzcGxpdCBhZ2FpbgorCQkJaWYgKG5hbWUgPT0gJ2h0bWwnKQorCQkJCW5hbWUgKz0gJy8n
ICsgaXRlbXNbMV0KKwkJCWlmIChtb2R1bGVzW25hbWVdKQorCQkJCW1vZHVsZXNbbmFtZV0ucHVz
aChrZXkpCisJCQllbHNlCisJCQkJbW9kdWxlc1tuYW1lXSA9IFtrZXldCisJfSkKKwlyZXR1cm4g
bW9kdWxlcworIH0KKworZnVuY3Rpb24gdG9nZ2xlVGVzdHMoZGl2KQoreworCXZhciBib3ggPSBk
aXYubmV4dEVsZW1lbnRTaWJsaW5nCisJaWYgKGJveCkgeworCQlpZiAoYm94LmNsYXNzTmFtZSA9
PSAnYm94JykKKyAgICAgICAgICAgIGJveC5jbGFzc05hbWUgPSdoaWRkZW4tZGF0YScKKwkJZWxz
ZQorCQkJYm94LmNsYXNzTmFtZSA9ICdib3gnCisJfQorfQorCitmdW5jdGlvbiBjb21wdXRlR2xv
YmFsQ29uZm9ybWFuY2UocmVzdWx0cykKK3sKKwl2YXIgc3VtbWFyeSA9IHtudW1QYXNzOiAwLCBu
dW1QYXJ0aWFsOiAwLCBudW1GYWlsOiAwLCBudW1FcnJvcjogMH0KKwlmb3IgKHZhciB0ZXN0IGlu
IHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0cykgeworCQlpZiAocmVzdWx0cy5jb25mb3JtYW5j
ZV9yZXN1bHRzLmhhc093blByb3BlcnR5KHRlc3QpKSB7CisJCQlyZXN1bHQgPSByZXN1bHRzLmNv
bmZvcm1hbmNlX3Jlc3VsdHNbdGVzdF0KKwkJCWlmIChyZXN1bHQgPT0gIlBBU1MiKSBzdW1tYXJ5
Lm51bVBhc3MrKworCQkJZWxzZSBpZiAocmVzdWx0ID09ICJQQVJUSUFMIikgc3VtbWFyeS5udW1Q
YXJ0aWFsKysKKwkJCWVsc2UgaWYgKHJlc3VsdCA9PSAiRkFJTCIpIHN1bW1hcnkubnVtRmFpbCsr
CisJCQllbHNlIHN1bW1hcnkubnVtRXJyb3IrKworCQl9CisJfQorCXJldHVybiBzdW1tYXJ5Cit9
CisKK2Z1bmN0aW9uIGNvbXB1dGVTdGF0aXN0aWNzKHJlc3VsdHNTdW1tYXJ5LCByZXN1bHQsIHJl
c3VsdHMpCit7CisJc3VtbWFyeSA9IHJlc3VsdHNTdW1tYXJ5W3Jlc3VsdHMucG9ydF9uYW1lXQor
CWlmICghc3VtbWFyeSkKKwkJcmVzdWx0c1N1bW1hcnlbcmVzdWx0cy5wb3J0X25hbWVdID0gc3Vt
bWFyeSA9IHtudW1QYXNzOiAwLCBudW1QYXJ0aWFsOiAwLCBudW1GYWlsOiAwLCBudW1FcnJvcjog
MH0KKwlpZiAocmVzdWx0ID09ICJQQVNTIikgc3VtbWFyeS5udW1QYXNzKysKKwllbHNlIGlmIChy
ZXN1bHQgPT0gIlBBUlRJQUwiKSBzdW1tYXJ5Lm51bVBhcnRpYWwrKworCWVsc2UgaWYgKHJlc3Vs
dCA9PSAiRkFJTCIpIHN1bW1hcnkubnVtRmFpbCsrCisJZWxzZSBzdW1tYXJ5Lm51bUVycm9yKysK
K30KKworZnVuY3Rpb24gYWRkVGVzdFN1aXRlTGlzdE9mUmVzdWx0cyhtb2R1bGVOYW1lLCB0ZXN0
cywgbGlzdE9mUmVzdWx0cywgaXNPcGVuKQoreworCXZhciByZXN1bHRzU3VtbWFyeSA9ICB7fQor
ICAgIHZhciBudW1QYXNzID0gbnVtUGFydGlhbCA9IG51bUZhaWwgPSBudW1FcnJvciA9IDAKKyAg
ICB2YXIgaW5uZXJIVE1MID0gIiIKKyAgICB0ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkg
eworCQkJaW5uZXJIVE1MICs9ICI8ZGl2IGNsYXNzPSd0ZXN0Jz48ZGl2IGNsYXNzPSd0ZXN0bmFt
ZSc+IiArIGdldFRlc3RMaW5rKGtleSwgbGlzdE9mUmVzdWx0c1swXSkgKyAiPC9kaXY+IgorCQkJ
bGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKwkJCQlyZXN1bHQgPSBy
ZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHNba2V5XQorICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJNaXNzaW5nIgorICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygiV0FSTklORzogdGVzdCAiICsga2V5ICsgIiBpcyBtaXNz
aW5nIik7CisgICAgICAgICAgICAgICAgfQorCQkJCWlubmVySFRNTCArPSAiPGRpdiBjbGFzcz0n
dGVzdHJlc3VsdCAiICsgcmVzdWx0LnRvTG93ZXJDYXNlKCkgKyAiJz4iICsgZ2V0VGVzdFJlc3Vs
dExpbmsoa2V5LCByZXN1bHQsIHJlc3VsdHMpICsgIjwvZGl2PiIKKwkJCQljb21wdXRlU3RhdGlz
dGljcyhyZXN1bHRzU3VtbWFyeSwgcmVzdWx0LCByZXN1bHRzKQorCQkJfSkKKwkJCWlubmVySFRN
TCArPSAiPC9kaXY+IgorICAgICAgIH0pCisgICAgdmFyIGh0bWwgPSAnPGRpdiBjbGFzcz0ibW9k
dWxlIj48ZGl2IGNsYXNzPSJtb2R1bGUtc3VtbWFyeSIgb25jbGljaz0idG9nZ2xlVGVzdHMoZXZl
bnQuY3VycmVudFRhcmdldCkiPjxkaXYgY2xhc3M9Im1vZHVsZS1uYW1lIj4nICsgbW9kdWxlTmFt
ZSArICc8L2Rpdj4nCisJbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsK
KwkJdmFyIHN1bW1hcnkgPSByZXN1bHRzU3VtbWFyeVtyZXN1bHRzLnBvcnRfbmFtZV0KKwkJaHRt
bCArPSB0ZXN0U3VpdGVIaXN0KHN1bW1hcnkubnVtRXJyb3IsIHN1bW1hcnkubnVtRmFpbCwgc3Vt
bWFyeS5udW1QYXJ0aWFsLCBzdW1tYXJ5Lm51bVBhc3MpCisJfSkKKwlodG1sICs9ICc8L2Rpdj48
ZGl2IGNsYXNzPSInICsgKGlzT3BlbiA/ICJib3giIDogImhpZGRlbi1kYXRhIikgKyAnIj4nOwor
ICAgIGh0bWwgKz0gaW5uZXJIVE1MCisgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIikuaW5uZXJIVE1MICs9IGh0bWwKK30KKwor
ZnVuY3Rpb24gd3JpdGVTdW1tYXJ5KCkKK3sKKwl2YXIgaHRtbCA9ICI8ZGl2PlczQyBjb25mb3Jt
YW5jZSByZXN1bHRzIGZyb20gcnVuLXdlYmtpdC10ZXN0ICgiCisgICAgbGlzdE9mUmVzdWx0cy5m
b3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKyAgICAgICAgaHRtbCArPSAiPGEgaHJlZj0nIiAr
IGdldFJlc3VsdHNEaXJlY3RvcnkocmVzdWx0cykgKyAiJz4iICsgcmVzdWx0cy5wb3J0X25hbWUg
KyAiPC9hPiAmbmJzcDsiCisgICAgfSkKKyAgICBodG1sICs9ICIpPC9kaXY+IgorCisJaWYgKGxp
c3RPZlJlc3VsdHMubGVuZ3RoID4gMSkgeworCQl2YXIgc2FtZVRlc3RWZXJzaW9uID0gdHJ1ZQor
CQlsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworCQkJaWYgKGxpc3RP
ZlJlc3VsdHNbMF0udGVzdHNfdmVyc2lvbiAhPSByZXN1bHRzLnRlc3RzX3ZlcnNpb24pIHsKKwkJ
CQlzYW1lVGVzdFZlcnNpb24gPSBmYWxzZQorICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxkaXY+
V2FybmluZzogVzNDIHRlc3QgdmVyc2lvbiBhcmUgbm90IHRoZSBzYW1lIGZvciBhbGwgcGxhdGZv
cm1zOiAiCisgICAgICAgICAgICAgICAgaHRtbCArPSBsaXN0T2ZSZXN1bHRzWzBdLnRlc3RzX3Zl
cnNpb24gKyAiIHZzICIgKyByZXN1bHRzLnRlc3RzX3ZlcnNpb24gKyAiIG9mIHBsYXRmb3JtICIg
KyByZXN1bHRzLnBvcnRfbmFtZQorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMp
CisgICAgICAgICAgICAgICAgaHRtbCArPSAiPC9kaXY+IgorCQkJfQorCQl9KQorCQlpZiAoIXNh
bWVUZXN0VmVyc2lvbikgey8qCisJCQlodG1sICs9ICI8ZGl2Pldhcm5pbmc6IFczQyB0ZXN0IHZl
cnNpb24gYXJlIG5vdCB0aGUgc2FtZSBmb3IgYWxsIHBsYXRmb3JtczogIgorICAgICAgICAgICAg
aHRtbCArPSBsaXN0T2ZSZXN1bHRzWzBdLnRlc3RzX3ZlcnNpb24gKyAiIHZzICIgKyByZXN1bHRz
LnRlc3RzX3ZlcnNpb24gKyAiIG9mIHBsYXRmb3JtICIgKyByZXN1bHRzLnBvcnRfbmFtZQorICAg
ICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cykKKyAgICAgICAgICAgIGh0bWwgKz0gIjwvZGl2
PiIqLworICAgICAgICB9CisJCWVsc2UgaWYgKGxpc3RPZlJlc3VsdHNbMF0udGVzdHNfdmVyc2lv
biA9PSAibWFzdGVyIikKKwkJCWh0bWwgKz0gIjxkaXY+V2FybmluZzogdXNpbmcgbWFzdGVyIGFz
IFczQyB0ZXN0IHZlcnNpb248L2Rpdj4iCisJfQorCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInN1bW1hcnkiKS5pbm5lckhUTUwgPSBodG1sCit9CisKK2Z1bmN0aW9uIGRpc3BsYXlSZXN1
bHRzKCkKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgIHsKKwl2YXIgZmlyc3RMaW5lSFRN
TCA9ICI8ZGl2IGNsYXNzPSdmaXJzdExpbmUnPjxkaXYgY2xhc3M9J2ZpcnN0TGluZUNlbGwnPk1v
ZHVsZS9UZXN0IE5hbWU8L2Rpdj4iCisJbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJl
c3VsdHMpIHsKKwkJZmlyc3RMaW5lSFRNTCArPSAiPGRpdiBjbGFzcz0ncG9ydCc+IiArIHJlc3Vs
dHMucG9ydF9uYW1lLnRvVXBwZXJDYXNlKCkgKyAiPC9kaXY+IgorCX0pCisJZmlyc3RMaW5lSFRN
TCArPSAiPC9kaXY+IgorCXZhciBzZWNvbmRMaW5lSFRNTCA9ICI8ZGl2IGNsYXNzPSdzZWNvbmRM
aW5lJz48ZGl2IGNsYXNzPSdzZWNvbmRMaW5lQ2VsbCc+T3ZlcmFsbCBjb25mb3JtYW5jZTwvZGl2
PiIKKwlsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworCQlzdW1tYXJ5
ID0gY29tcHV0ZUdsb2JhbENvbmZvcm1hbmNlKHJlc3VsdHMpCisJCXNlY29uZExpbmVIVE1MICs9
IHRlc3RTdWl0ZUhpc3Qoc3VtbWFyeS5udW1FcnJvciwgc3VtbWFyeS5udW1GYWlsLCBzdW1tYXJ5
Lm51bVBhcnRpYWwsIHN1bW1hcnkubnVtUGFzcykKKwl9KQorCXNlY29uZExpbmVIVE1MICs9ICI8
L2Rpdj4iCisKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9
IGZpcnN0TGluZUhUTUwgKyBzZWNvbmRMaW5lSFRNTAorCXZhciBtb2R1bGVzID0gIGdldFRlc3Rz
dWl0ZU1vZHVsZXMobGlzdE9mUmVzdWx0c1swXSkKKwl2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1v
ZHVsZXMpCisgICAga2V5cy5zb3J0KCkuZm9yRWFjaCggZnVuY3Rpb24oa2V5LCBpKSB7CisJCWFk
ZFRlc3RTdWl0ZUxpc3RPZlJlc3VsdHMoa2V5LCBtb2R1bGVzW2tleV0sIGxpc3RPZlJlc3VsdHMs
IGtleXMubGVuZ3RoID09IDEpCisJfSkKKwl3cml0ZVN1bW1hcnkobGlzdE9mUmVzdWx0cykKKyAg
ICB9LCAwKQorfQorCisgCitsaXN0T2ZSZXN1bHRzID0gW10gCitmdW5jdGlvbiBBRERfQ09ORk9S
TUFOQ0VfUkVTVUxUUyhyZXN1bHRzKQoreworICAgIHJlc3VsdHMucm9vdF9kaXJlY3RvcnkgPSBk
aXJzW2NvdW50ZXJdCisJbGlzdE9mUmVzdWx0cy5wdXNoKHJlc3VsdHMpCisgICAgc2V0VGltZW91
dChsb2FkU2NyaXB0cywgMCkKKyAgICAKK30KKworLy93aW5kb3cub25sb2FkID0gZGlzcGxheVJl
c3VsdHMKK3ZhciBjb3VudGVyCit2YXIgZGlycworZnVuY3Rpb24gbG9hZFNjcmlwdHMoZGlyZWN0
b3JpZXMpCit7CisgICAgaWYgKGRpcmVjdG9yaWVzKSB7CisgICAgICAgIGRpcnMgPSBkaXJlY3Rv
cmllcworICAgICAgICBjb3VudGVyID0gLTEKKyAgICB9CisgICAgaWYgKGNvdW50ZXIgPCBkaXJz
Lmxlbmd0aCAtIDEpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnkn
KS5pbm5lckhUTUwgPSAiTG9hZGluZyAiICsgZGlyc1srK2NvdW50ZXJdICsgIi4uLiIKKyAgICAg
ICAgdmFyIGhlYWQ9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07Cisg
ICAgICAgIHZhciBzY3JpcHQ9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAg
ICAgICBzY3JpcHQudHlwZT0gJ3RleHQvamF2YXNjcmlwdCc7CisgICAgICAgIHNjcmlwdC5zcmM9
IGRpcnNbY291bnRlcl0gKyAnL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24nOworICAgICAg
ICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeScpLmlubmVySFRNTCA9ICJEaXNwbGF5aW5n
IHJlc3VsdHMuLi4iCisgICAgICAgIHNldFRpbWVvdXQoZGlzcGxheVJlc3VsdHMsIDApCisgICAg
fQorfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ic3VtbWFyeSI+Cisg
ICAgTG9hZGluZy4uLgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJsZWdlbmQiPgorCTxkaXYgY2xhc3M9
ImVycm9yLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwvZGl2PgorCTxkaXY+RXJyb3IsIFRp
bWVvdXQgb3IgQ3Jhc2g8L2Rpdj4KKwk8ZGl2IGNsYXNzPSJmYWlsLXJlc3VsdHMtaGlzdCBsZWdl
bmQiPiZuYnNwOzwvZGl2PgorCTxkaXY+IEFsbCBhc3NlcnRpb25zIGZhaWxpbmc8L2Rpdj4KKwk8
ZGl2IGNsYXNzPSJwYXJ0aWFsLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwvZGl2PgorCTxk
aXY+IFNvbWUgYXNzZXJ0aW9ucyBwYXNzaW5nPC9kaXY+CisJPGRpdiBjbGFzcz0icGFzcy1yZXN1
bHRzLWhpc3QgbGVnZW5kIj4mbmJzcDs8L2Rpdj4KKwk8ZGl2PiBBbGwgYXNzZXJ0aW9ucyBwYXNz
aW5nPC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdHMiPgorPC9kaXY+Cis8IS0tIHBsYWNl
IGFzIG1hbnkgLmpzb24gZmlsZSBhcyBuZWVkZWQgLS0+Cis8c2NyaXB0PgorICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxvYWRTY3JpcHRzKFsKKyAgICAgICAgICAgICIuIgor
ICAgICAgICBdKQorICAgIH0sIDApCis8L3NjcmlwdD4KKzwhLS1zY3JpcHQgc3JjPSJlZmwvdzNj
X2NvbmZvcm1hbmNlX3Jlc3VsdHMuanNvbiI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZ3RrL3cz
Y19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Im1hYy93
M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5qc29uIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJtYWMt
d2syL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24iPjwvc2NyaXB0LS0+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238169</attachid>
            <date>2014-09-16 03:06:52 -0700</date>
            <delta_ts>2014-12-23 07:21:07 -0800</delta_ts>
            <desc>updated according 136848</desc>
            <filename>bug-134766-20140916120648.patch</filename>
            <type>text/plain</type>
            <size>39364</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjAxYjEwMjM2OGU4YzVmZGE3NWZiZjI1NjQwOWYxYzJj
NjVlZmFiNy4uYjc4YzNhODA4NDEzYTBmN2U3YWM4MTg4NTg5MDhkYzBjNjYyMDQyZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5
IEBACisyMDE0LTA5LTE2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2Ug
dGVzdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0NzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTY3JpcHRzL3J1bi13M2MtY29uZm9ybWFuY2UtdGVzdHM6IEFkZGVkIChtYWluIHNjcmlwdCku
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0
LnczY19jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSk6IFBhdGggdG8gdGhlIHdvcmtpbmcg
ZGlyZWN0b3J5IGZvciBjb25mb3JtYW5jZSB0ZXN0aW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHk6IEFkZGVkIChIYW5kbGUgY29u
Zm9ybWFuY2UgdGVzdCBydW5ubmluZyB1c2luZyByd3QpLgorICAgICAgICAoVzNDQ29uZm9ybWFu
Y2VSdW5uZXIpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIuX19pbml0X18pOgorICAg
ICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIuY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rvcnkp
OgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJl
Y3RvcnkpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIudGVzdF9zdWl0ZXMpOgorICAg
ICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIucnVuX3dlYmtpdF90ZXN0cyk6CisgICAgICAgIChX
M0NDb25mb3JtYW5jZVJ1bm5lci5ydW5fdGVzdF9saXN0KToKKyAgICAgICAgKFczQ0NvbmZvcm1h
bmNlUnVubmVyLnJlc3VsdHNfbWFuYWdlcik6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5l
ci50ZXN0cyk6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci5jb25mb3JtYW5jZV9yZXN1
bHQpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIucnVuX3Rlc3RzKToKKyAgICAgICAg
KFczQ0NvbmZvcm1hbmNlUnVubmVyLnByaW50X3Jlc3VsdHNfdG9fY29uc29sZSk6CisgICAgICAg
IChXM0NDb25mb3JtYW5jZVJ1bm5lci5wcmludF9wb3RlbnRpYWxfdGVzdF9leHBlY3RhdGlvbnNf
dXBkYXRlKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLndyaXRlX2NvbmZvcm1hbmNl
X3Jlc3VsdHMpOgorICAgICAgICAoY29uZmlndXJlX2xvZ2dpbmcpOgorICAgICAgICAoY29uZmln
dXJlX2xvZ2dpbmcuTG9nSGFuZGxlcik6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZy5Mb2dI
YW5kbGVyLmZvcm1hdCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3czYy90ZXN0X3Jlc3VsdHNfbWFuYWdlci5weTogQWRkZWQgKFBhcnNlIHJ3dCByZXN1bHRz
IHRvIGNvbXB1dGUgY29uZm9ybWFuY2UgcmVzdWx0cykuCisgICAgICAgIChUZXN0UmVzdWx0c01h
bmFnZXIpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLl9faW5pdF9fKToKKyAgICAgICAg
KFRlc3RSZXN1bHRzTWFuYWdlci53M2NfdGVzdF9uYW1lKToKKyAgICAgICAgKFRlc3RSZXN1bHRz
TWFuYWdlci5fZ2V0X3Rlc3RfcmVzdWx0cyk6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIu
cHJvY2Vzc190ZXN0X3Jlc3VsdHMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLl9jb21w
dXRlX2NvbmZvcm1hbmNlX3N0YXR1cyk6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuY29t
cHV0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlci5z
dW1tYXJ5KToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlci53cml0ZV9jb25mb3JtYW5jZV9y
ZXN1bHRzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy93ZWJfcGxhdGZvcm1fdGVz
dF9zZXR1cC5weTogQWRkZWQgKHVwZGF0ZSB3cHQgZmlsZXMsIHdwdCB0ZXN0aGFybmVzcy1yZXBv
cnQuanMgYW5kIHdwdCBzZXJ2ZXIgY29uZmlnIGZpbGUpLgorICAgICAgICAoV2ViUGxhdGZvcm1U
ZXN0U2V0dXApOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2V0dXAuX19pbml0X18pOgorICAg
ICAgICAoV2ViUGxhdGZvcm1UZXN0U2V0dXAucmVzdG9yZV93M2NfdGVzdGhhcm5lc3NyZXBvcnQp
OgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2V0dXAuY29weV93ZWJraXRfdGVzdGhhcm5lc3Ny
ZXBvcnQpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2V0dXAuY29weV93cHRfanNvbl9jb25m
aWcpOgorCiAyMDE0LTA5LTEyICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVk
dT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1pbmQgYWJvdXQgcmViYXNlbGluaW5nIGdl
bmVyYXRvciB0ZXN0IHJlc3VsdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLXczYy1j
b25mb3JtYW5jZS10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXczYy1jb25mb3JtYW5jZS10ZXN0
cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kY2YwMTc1YTg3NjJiMDVjYmNkZDlhN2FmOTYxMjU0MWIyOTkyNjI4Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3Rz
CkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAo
YykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9O
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBD
QU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisi
IiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5w
eSIiIgorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG11bHRpcHJvY2Vzc2luZ19ib290c3Ry
YXAKKworbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5ydW4oJ3dlYmtpdHB5JywgJ3czYycsICdy
dW5fdzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5JykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkKaW5kZXggYTRiNmFkMWMwNGI1NjY1ZjkzOTc2MDY2ZTg4NWQ0MTljMWIxMWJjYi4uZjUzNGVl
MTBjOWZmYzNjMGE1OGZmMjU1MzY1MTNkZTNmMWFlNGRiYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkKQEAgLTc5MCw2ICs3OTAsMTAgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAg
IGRlZiBwZXJmX3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
YnVpbGRfcGF0aCgpCiAKKyAgICBkZWYgdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5
KHNlbGYpOgorICAgICAgICAiIiJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbGFjZSB0byBzdG9yZSB0
aGUgdGVzdCByZXN1bHRzICh1c2VzIC0tdzNjLWNvbmZvcm1hbmNlLWRpcmVjdG9yeSkuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCd3M2MtY29uZm9ybWFuY2UtcmVzdWx0cycp
CisKICAgICBkZWYgZGVmYXVsdF9yZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgIiIi
QWJzb2x1dGUgcGF0aCB0byB0aGUgZGVmYXVsdCBwbGFjZSB0byBzdG9yZSB0aGUgdGVzdCByZXN1
bHRzLiIiIgogICAgICAgICAjIFJlc3VsdHMgYXJlIHN0b3JlIHJlbGF0aXZlIHRvIHRoZSBidWls
dCBwcm9kdWN0cyB0byBtYWtlIGl0IGVhc3kKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3czYy9ydW5fdzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlNTA0
YjZiOTNlNGMwYjgyNTY1ODI4NzFkMjY5MDM0MGNmZWZhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9ydW5fdzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5CkBA
IC0wLDAgKzEsMTk2IEBACisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4g
bm9yIHRoZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCBldmFsdWF0ZXMg
VzNDIHRlc3RzIGNvbmZvcm1hbmNlIGJ5OgorICAgIC0gaW1wb3J0aW5nIFczQyB0ZXN0cyBhcyBX
ZWJLaXQgdGVzdHMgKHVzaW5nIHdlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyKQorICAgIC0gZ2Vu
ZXJhdGluZyBleHBlY3RlZC50eHQgZmlsZXMgKHVzaW5nIHJ1bi13ZWJraXQtdGVzdHMpCisgICAg
LSBjb21wdXRpbmcgd2hldGhlciBhIHRlc3QgaXMgcGFzc2luZyBvciBub3QgYnkgY2hlY2tpbmcg
UEFTUy9GQUlMIGFzc2VydGlvbnMgb3V0cHV0dGVkIHdpdGhpbiB0aGUgZXhwZWN0ZWQudHh0IGZp
bGVzCisiIiIKKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBh
cnNlCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGltcG9y
dCBUZXN0RXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBsYXRmb3JtX29w
dGlvbnMKK2Zyb20gd2Via2l0cHkudzNjLmZhY3RvcnkgaW1wb3J0IHczY19jcmVhdGVfYXJndW1l
bnRfcGFyc2VyCitmcm9tIHdlYmtpdHB5LnczYy50ZXN0X3Jlc3VsdHNfbWFuYWdlciBpbXBvcnQg
VGVzdFJlc3VsdHNNYW5hZ2VyCitmcm9tIHdlYmtpdHB5LnczYy53ZWJfcGxhdGZvcm1fdGVzdF9z
ZXR1cCBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2V0dXAKK2Zyb20gd2Via2l0cHkudzNjLndlYl9w
bGF0Zm9ybV90ZXN0X2ltcG9ydGVyIGltcG9ydCBXZWJQbGF0Zm9ybVRlc3RJbXBvcnRlcgorCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgVzNDQ29uZm9ybWFu
Y2VSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25z
KToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9
IHBvcnQuaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisg
ICAgICAgIHNlbGYuX3Jlc3VsdHNfbWFuYWdlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGVzdHMg
PSBOb25lCisgICAgICAgIHNlbGYuX2NvbmZvcm1hbmNlX3Jlc3VsdHMgPSBOb25lCisKKyAgICAg
ICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlciA9IFdlYlBsYXRmb3JtVGVzdEltcG9y
dGVyKHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHNlbGYuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5
ID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci5pbXBvcnRlZF90ZXN0c19kaXJlY3Rv
cnkKKyAgICAgICAgc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5ID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHBvcnQudzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCksICJydW5uZWQt
dGVzdHMiKQorCisgICAgZGVmIGNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC53M2NfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rv
cnkoKQorCisgICAgZGVmIGxheW91dF90ZXN0c19yZXN1bHRfZGlyZWN0b3J5KHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0
c19kaXJlY3RvcnkoKSwgImxheW91dC10ZXN0LXJlc3VsdHMiKQorCisgICAgZGVmIHRlc3Rfc3Vp
dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRl
ci50ZXN0X3N1aXRlcygpCisKKyAgICBkZWYgcnVuX3dlYmtpdF90ZXN0cyhzZWxmLCBwYXJhbWV0
ZXJzKToKKyAgICAgICAgdG1wX2FyZ3MgPSBbc2VsZi5fcG9ydC5wYXRoX3RvX3NjcmlwdCgncnVu
LXdlYmtpdC10ZXN0cycpXSArIHBhcmFtZXRlcnMKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5w
bGF0Zm9ybToKKyAgICAgICAgICAgIHRtcF9hcmdzLmFwcGVuZCgnLS0nICsgc2VsZi5fb3B0aW9u
cy5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy53ZWJraXRfdGVzdF9ydW5uZXIg
aXMgVHJ1ZToKKyAgICAgICAgICAgIHRtcF9hcmdzLmFwcGVuZCgnLTInKQorICAgICAgICBFeGVj
dXRpdmUoKS5ydW5fY29tbWFuZCh0bXBfYXJncywgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdu
b3JlX2Vycm9yLCByZXR1cm5fc3RkZXJyPShzZWxmLl9vcHRpb25zLl9fZGljdF9fWyd3M2NfcXVp
ZXQnXSksIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisKKyAgICBkZWYgcnVuX3Rlc3RfbGlzdChzZWxm
LCB0ZXN0cyk6CisgICAgICAgIHRlc3RfbGlzdF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksICd0ZXN0X2xpc3QudHh0JykKKyAgICAg
ICAgd2l0aCBvcGVuKHRlc3RfbGlzdF9maWxlbmFtZSwgJ3crJykgYXMgb3V0OgorICAgICAgICAg
ICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKHRlc3QgKyAn
XG4nKQorICAgICAgICAgICAgb3V0LmNsb3NlKCkKKworICAgICAgICBydW5fd2Via2l0X2FyZ3Mg
PSBbJy1xJywgJy0tbm8tcmV0cnktZmFpbHVyZXMnLCAnLS1uby1zaG93LXJlc3VsdHMnLCAnLS1m
dWxsLXJlc3VsdHMtaHRtbCcsICctLXJlc3VsdHMtZGlyZWN0b3J5PScgKyBzZWxmLmxheW91dF90
ZXN0c19yZXN1bHRfZGlyZWN0b3J5KCksICctLXdwdHNlcnZlci1kb2Mtcm9vdD0nICsgc2VsZi5y
dW5uZWRfdGVzdHNfZGlyZWN0b3J5LCAnLS10ZXN0LWxpc3Q9JyArIHRlc3RfbGlzdF9maWxlbmFt
ZV0KKworICAgICAgICBzZWxmLnJ1bl93ZWJraXRfdGVzdHMocnVuX3dlYmtpdF9hcmdzKQorICAg
ICAgICBzZWxmLl9yZXN1bHRzX21hbmFnZXIgPSBUZXN0UmVzdWx0c01hbmFnZXIoc2VsZi5fcG9y
dCwgc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLmxheW91dF90ZXN0c19yZXN1bHRf
ZGlyZWN0b3J5KCksIHNlbGYudGVzdHMoKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdHNf
bWFuYWdlci5wcm9jZXNzX3Rlc3RfcmVzdWx0cygpCisKKyAgICBkZWYgcmVzdWx0c19tYW5hZ2Vy
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0c19tYW5hZ2VyCisKKyAgICBkZWYg
dGVzdHMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Rlc3RzIGlzIE5vbmU6CisgICAgICAgICAg
ICB0ZXN0X3N1aXRlX3BhdGhzID0gW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJ1bm5lZF90
ZXN0c19kaXJlY3RvcnksIHRlc3Rfc3VpdGUpIGZvciB0ZXN0X3N1aXRlIGluIHNlbGYudGVzdF9z
dWl0ZXMoKV0KKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzID0gc2VsZi5fcG9ydC50ZXN0cyh0ZXN0
X3N1aXRlX3BhdGhzKQorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdHMKKworICAgIGRlZiBjb25m
b3JtYW5jZV9yZXN1bHQoc2VsZiwgdGVzdCk6CisgICAgICAgIGlmIHNlbGYuX2NvbmZvcm1hbmNl
X3Jlc3VsdHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2NvbmZvcm1hbmNlX3Jlc3VsdHMg
PSBzZWxmLnJlc3VsdHNfbWFuYWdlcigpLmNvbXB1dGVfY29uZm9ybWFuY2VfcmVzdWx0cygpCisg
ICAgICAgIHJldHVybiBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzW3NlbGYucmVzdWx0c19tYW5h
Z2VyKCkudzNjX3Rlc3RfbmFtZSh0ZXN0KV0KKworICAgIGRlZiBydW5fdGVzdHMoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMuX19kaWN0X19bJ3czY19saXN0J10gaXMgVHJ1ZToKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuX19kaWN0
X19bJ3czY19yZWZyZXNoJ10gaXMgVHJ1ZToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnSW1wb3J0
aW5nIHRlc3RzLi4uJykKKyAgICAgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0
ZXIuaW1wb3J0X3Rlc3RzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuaW5mbygn
U2tpcHBpbmcgdGVzdCBpbXBvcnQuLi4nKQorCisgICAgICAgIF9sb2cuaW5mbygnU2V0dGluZyB1
cCBjb25maWd1cmF0aW9uIGZpbGVzLi4uJykKKyAgICAgICAgd3B0X3NldHVwID0gV2ViUGxhdGZv
cm1UZXN0U2V0dXAoc2VsZi5fcG9ydC5ob3N0LCBzZWxmLmltcG9ydGVkX3Rlc3RzX2RpcmVjdG9y
eSkKKyAgICAgICAgd3B0X3NldHVwLmNvcHlfd2Via2l0X3Rlc3RoYXJuZXNzcmVwb3J0KCkKKyAg
ICAgICAgd3B0X3NldHVwLmNvcHlfd3B0X2pzb25fY29uZmlnKCkKKworICAgICAgICBfbG9nLmlu
Zm8oJ0NvcHlpbmcgaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5IGFzIHJ1bm5lZF90ZXN0X2RpcmVj
dG9yeScpCisgICAgICAgICMgQSBkaWZmZXJlbnQgZGlyZWN0b3J5LCBydW5uZWRfdGVzdF9kaXJl
Y3RvcnksIGlzIHVzZWQgdG8gcnVuIHRlc3RzIHNvIHRoYXQgaW1wb3J0ZWRfdGVzdHNfZGlyZWN0
b3J5IHJlbWFpbnMgY2xlYW4uCisgICAgICAgICMgcnVubmVkX3Rlc3RfZGlyZWN0b3J5IGlzIGFs
c28gcmVjcmVhdGVkIGVhY2ggdGltZSB0byBzdGFydCBpbiBhIGNsZWFuIHN0YXRlLgorICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLnJtdHJlZShzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnkpCisg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weXRyZWUoc2VsZi5pbXBvcnRlZF90ZXN0c19kaXJl
Y3RvcnksIHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSkKKworICAgICAgICBfbG9nLmluZm8o
J1J1bm5pbmcgdGVzdHMuLi4nKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2xpc3Qoc2VsZi50ZXN0
cygpKQorCisgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGluZyBjb25mb3JtYW5jZSByZXN1bHRz
Li4uJykKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxm
LmNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHNlbGYud3JpdGVfY29u
Zm9ybWFuY2VfcmVzdWx0cygpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwcmlu
dF9yZXN1bHRzX3RvX2NvbnNvbGUoc2VsZik6CisgICAgICAgIHN1bW1hcnkgPSBzZWxmLnJlc3Vs
dHNfbWFuYWdlcigpLnN1bW1hcnkoKQorICAgICAgICBfbG9nLmluZm8oJ1J1biAnICsgc3RyKHN1
bW1hcnlbJ3RvdGFsJ10pICsgJyB0ZXN0cycpCisgICAgICAgIF9sb2cuaW5mbygnUGFzczogJyAr
IHN0cihzdW1tYXJ5WydudW1fcGFzcyddKSkKKyAgICAgICAgX2xvZy5pbmZvKCdQYXJ0aWFsOiAn
ICsgc3RyKHN1bW1hcnlbJ251bV9wYXJ0aWFsJ10pKQorICAgICAgICBfbG9nLmluZm8oJ0ZhaWw6
ICcgKyBzdHIoc3VtbWFyeVsnbnVtX2ZhaWwnXSkpCisgICAgICAgIF9sb2cuaW5mbygnRXJyb3I6
ICcgKyBzdHIoc3VtbWFyeVsnbnVtX2Vycm9yJ10pKQorCisgICAgZGVmIHByaW50X3BvdGVudGlh
bF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUoc2VsZik6CisgICAgICAgIHRlc3RfZXhwZWN0YXRp
b25zID0gVGVzdEV4cGVjdGF0aW9ucyhzZWxmLl9wb3J0KS5tb2RlbCgpCisgICAgICAgIGNvbmZv
cm1hbmNlID0gc2VsZi5yZXN1bHRzX21hbmFnZXIoKS5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3Vs
dHMoKQorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLnRlc3RzKCk6CisgICAgICAgICAgICB3M2Nf
dGVzdF9uYW1lID0gc2VsZi5yZXN1bHRzX21hbmFnZXIoKS53M2NfdGVzdF9uYW1lKHRlc3QpCisg
ICAgICAgICAgICB3a190ZXN0X25hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oJ2ltcG9ydGVk
JywgJ3czYycsICd3cHQnLCB3M2NfdGVzdF9uYW1lKQorICAgICAgICAgICAgaWYgbm90IHRlc3Rf
ZXhwZWN0YXRpb25zLmhhc190ZXN0KHdrX3Rlc3RfbmFtZSk6CisgICAgICAgICAgICAgICAgaWYg
bm90IGNvbmZvcm1hbmNlW3czY190ZXN0X25hbWVdID09ICdQQVNTJzoKKyAgICAgICAgICAgICAg
ICAgICAgX2xvZy5pbmZvKCd0ZXN0ICcgKyB3a190ZXN0X25hbWUgKyAnIGlzIG5vdCBwYXNzaW5n
JykKKyAgICAgICAgICAgIGVsaWYgY29uZm9ybWFuY2VbdzNjX3Rlc3RfbmFtZV0gPT0gJ1BBU1Mn
OgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygndGVzdCAnICsgd2tfdGVzdF9uYW1lICsgJyBp
cyBwYXNzaW5nJykKKworICAgIGRlZiB3cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKHNlbGYpOgor
ICAgICAgICB0ZXN0X3J1bl9pbmZvID0ge30KKyAgICAgICAgdGVzdF9ydW5faW5mb1sncG9ydF9u
YW1lJ10gPSBzZWxmLl9wb3J0LnBvcnRfbmFtZQorICAgICAgICB0ZXN0X3J1bl9pbmZvWyd0ZXN0
c192ZXJzaW9uJ10gPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLndwdHNoYSgpCisg
ICAgICAgIHRlc3RfcnVuX2luZm9bJ3Jlc3VsdHNfZGlyZWN0b3J5J10gPSBzZWxmLl9maWxlc3lz
dGVtLnJlbHBhdGgoc2VsZi5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSgpLCBzZWxmLmNv
bmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHRlc3RfcnVuX2luZm9bJ3Rl
c3RzX2RpcmVjdG9yeSddID0gc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKHNlbGYucnVubmVkX3Rl
c3RzX2RpcmVjdG9yeSwgc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpKQorICAg
ICAgICBzZWxmLnJlc3VsdHNfbWFuYWdlcigpLndyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2Vs
Zi5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpLCB0ZXN0X3J1bl9pbmZvKQorCisKK2Rl
ZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5TdHJl
YW1IYW5kbGVyKToKKyAgICAgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgorICAgICAgICAg
ICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklORk86CisgICAgICAgICAgICAgICAgcmV0
dXJuICIlczogJXMiICUgKHJlY29yZC5sZXZlbG5hbWUsIHJlY29yZC5nZXRNZXNzYWdlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVjb3JkLmdldE1lc3NhZ2UoKQorCisgICAgbG9nZ2VyID0gbG9n
Z2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAg
aGFuZGxlciA9IExvZ0hhbmRsZXIoKQorICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZP
KQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisgICAgcmV0dXJuIGhhbmRsZXIKKwor
CitkZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgY29uZmlndXJlX2xvZ2dpbmco
KQorICAgIGhvc3QgPSBIb3N0KCkKKyAgICBwYXJzZXIgPSB3M2NfY3JlYXRlX2FyZ3VtZW50X3Bh
cnNlcihob3N0LCBob3N0LmZpbGVzeXN0ZW0uYmFzZW5hbWUoX19maWxlX18pKQorICAgIG9wdGlv
bnMsIGFyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQorICAgIHBvcnQgPSBob3N0
LnBvcnRfZmFjdG9yeS5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0cGFyc2UuVmFsdWVzKHsnd2Vi
a2l0X3Rlc3RfcnVubmVyJzogb3B0aW9ucy53ZWJraXRfdGVzdF9ydW5uZXJ9KSkKKworICAgIHJ1
bm5lciA9IFczQ0NvbmZvcm1hbmNlUnVubmVyKHBvcnQsIG9wdGlvbnMpCisgICAgaWYgcnVubmVy
LnJ1bl90ZXN0cygpOgorICAgICAgICBydW5uZXIucHJpbnRfcmVzdWx0c190b19jb25zb2xlKCkK
KyAgICAgICAgcnVubmVyLnByaW50X3BvdGVudGlhbF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUo
KQorICAgICAgICBfbG9nLmluZm8oIlJlc3VsdHMgZXhwb3J0ZWQgaW4gJyIgKyBydW5uZXIuY29u
Zm9ybWFuY2VfcmVzdWx0c19kaXJlY3RvcnkoKSArICInIikKKworaWYgJ19fbWFpbl9fJyA9PSBf
X25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwgc3lz
LnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3Jl
c3VsdHNfbWFuYWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0
c19tYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlNWJmMzcyMmJlYmIxMTY1ZTVmZmU0MjdiN2JhODQ4
NWNkYjdjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90
ZXN0X3Jlc3VsdHNfbWFuYWdlci5weQpAQCAtMCwwICsxLDEzOSBAQAorIyBDb3B5cmlnaHQgKGMp
IDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FO
T04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
CisgVGhpcyBzY3JpcHQgbWFuYWdlIEpTT04gYW5kIHJlc3VsdHMuaHRtbCBmaWxlcyBmb3IgVzND
IHRlc3QgcmVzdWx0cy4KKyIiIgorCitpbXBvcnQgaW8KK2ltcG9ydCBqc29uCisKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2Vu
ZXJhdG9yCisKKworY2xhc3MgVGVzdFJlc3VsdHNNYW5hZ2VyKG9iamVjdCk6CisKKyAgICBfSlNP
Tl9QUkVGSVggPSAnQUREX0NPTkZPUk1BTkNFX1JFU1VMVFMoJworICAgIF9KU09OX1NVRkZJWCA9
ICcpOycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBiYXNlX2RpcmVjdG9yeSwgcmVz
dWx0X2RpciwgdGVzdHMpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxm
Ll9maWxlc3lzdGVtID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fcmVzdWx0
c19kaXJlY3RvcnkgPSByZXN1bHRfZGlyCisgICAgICAgIHNlbGYuX3Rlc3RzID0gdGVzdHMKKwor
ICAgICAgICAjIFJvb3QgZGlyZWN0b3J5IG9mIFczQyBpbXBvcnRlZCB0ZXN0CisgICAgICAgIHNl
bGYuX2Jhc2VfZGlyZWN0b3J5ID0gYmFzZV9kaXJlY3RvcnkKKworICAgIGRlZiB3M2NfdGVzdF9u
YW1lKHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRo
KHRlc3QsIHNlbGYuX2Jhc2VfZGlyZWN0b3J5KQorCisgICAgZGVmIF9nZXRfdGVzdF9yZXN1bHRz
KHNlbGYsIHRlc3RzLCB0ZXN0X2RpY3QsIHBhdGgpOgorICAgICAgICBmb3Iga2V5IGluIHRlc3Rf
ZGljdC5rZXlzKCk6CisgICAgICAgICAgICBfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihw
YXRoLCBrZXkpCisgICAgICAgICAgICBfcG90ZW50aWFsX3Rlc3QgPSB0ZXN0X2RpY3Rba2V5XQor
ICAgICAgICAgICAgaWYgJ2FjdHVhbCcgaW4gX3BvdGVudGlhbF90ZXN0OgorICAgICAgICAgICAg
ICAgICMgU3RvcmUgdGhlIHRlc3QKKyAgICAgICAgICAgICAgICB0ZXN0c1tfcGF0aF0gPSBfcG90
ZW50aWFsX3Rlc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBQcm9jZXNz
IHN1YmRpcmVjdG9yaWVzCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0
ZXN0cywgX3BvdGVudGlhbF90ZXN0LCBfcGF0aCkKKworICAgIGRlZiBwcm9jZXNzX3Rlc3RfcmVz
dWx0cyhzZWxmKToKKyAgICAgICAgdGVzdF9yZXN1bHRzID0ge30KKyAgICAgICAgcmVzdWx0c19q
c29uX3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fcmVzdWx0c19kaXJlY3Rvcnks
ICdmdWxsX3Jlc3VsdHMuanNvbicpCisgICAgICAgIHJlc3VsdHNfanNvbiA9IGpzb25fcmVzdWx0
c19nZW5lcmF0b3IubG9hZF9qc29uKHNlbGYuX2ZpbGVzeXN0ZW0sIHJlc3VsdHNfanNvbl9wYXRo
KQorICAgICAgICBwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5zZXAgaWYgc2VsZi5fZmlsZXN5c3Rl
bS5pc2FicyhzZWxmLl9iYXNlX2RpcmVjdG9yeSkgZWxzZSAnJworICAgICAgICBzZWxmLl9nZXRf
dGVzdF9yZXN1bHRzKHRlc3RfcmVzdWx0cywgcmVzdWx0c19qc29uWyd0ZXN0cyddLCBwYXRoKQor
ICAgICAgICByZXR1cm4gdGVzdF9yZXN1bHRzCisKKyAgICBkZWYgX2NvbXB1dGVfY29uZm9ybWFu
Y2Vfc3RhdHVzKHNlbGYsIHRlc3RfbmFtZSwgdGVzdF9yZXN1bHRzKToKKyAgICAgICAgdGV4dCA9
IHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dCh0ZXN0X25hbWUpCisgICAgICAgIGlmIHRleHQgaXMg
Tm9uZSBvciBsZW4odGV4dCkgPT0gMDoKKyAgICAgICAgICAgICMgaWYgdGhlIGVtcHR5IGV4cGVj
dGVkIGZpbGUsIHRlc3QgbWF5IGJlIGZhaWxpbmcgb3IgYSByZWYgdGVzdC4KKyAgICAgICAgICAg
ICMgTGV0J3MgZmluZCBvdXQgZnJvbSBqc29uIHJlc3VsdHMgaWYgdGhlIHRlc3QgaXMgZmFpbGlu
Zy4KKyAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBpbiB0ZXN0X3Jlc3VsdHMgYW5kICdhY3R1YWwn
IGluIHRlc3RfcmVzdWx0c1t0ZXN0X25hbWVdOgorICAgICAgICAgICAgICAgIHJlYXNvbiA9IHRl
c3RfcmVzdWx0c1t0ZXN0X25hbWVdWydhY3R1YWwnXQorICAgICAgICAgICAgICAgIGlmIHJlYXNv
biA9PSAnQ1JBU0gnIG9yIHJlYXNvbiA9PSAnVElNRU9VVCc6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZWFzb24KKyAgICAgICAgICAgICAgICByZXR1cm4gJ0VSUk9SJworICAgICAgICAg
ICAgIyBUT0RPOiBXZSBtYXkgd2FudCB0byB2YWxpZGF0ZSB0aGF0IHRoaXMgaXMgYWN0dWFsbHkg
YSByZWYgdGVzdAorICAgICAgICAgICAgcmV0dXJuICdQQVNTJworICAgICAgICAjIExldCdzIGNo
ZWNrIHdoZXRoZXIgc29tZSBsaW5lcyBzdGFydCB3aXRoIFBBU1Mgb3IgRkFJTAorICAgICAgICAj
IFRlc3QgaXMgc2FpZCB0byBQQVNTIGlmIGF0IGxlYXN0IG9uZSBsaW5lIGlzIFBBU1MgYW4gbm8g
bGluZSBpcyBGQUlMCisgICAgICAgIGhhc0ZhaWwgPSBGYWxzZQorICAgICAgICBoYXNQYXNzID0g
RmFsc2UKKyAgICAgICAgYnVmID0gaW8uU3RyaW5nSU8odW5pY29kZSh0ZXh0LCAidXRmLTgiKSkK
KyAgICAgICAgZm9yIGxpbmUgaW4gYnVmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGlu
ZS5zdGFydHN3aXRoKCdQQVNTJyk6CisgICAgICAgICAgICAgICAgaGFzUGFzcyA9IFRydWUKKyAg
ICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdGQUlMJyk6CisgICAgICAgICAgICAgICAg
aGFzRmFpbCA9IFRydWUKKyAgICAgICAgaWYgaGFzUGFzczoKKyAgICAgICAgICAgIHJldHVybiAn
UEFSVElBTCcgaWYgaGFzRmFpbCBlbHNlICdQQVNTJworICAgICAgICBpZiBoYXNGYWlsOgorICAg
ICAgICAgICAgcmV0dXJuICdGQUlMJworICAgICAgICByZXR1cm4gJ0VSUk9SJworCisgICAgZGVm
IGNvbXB1dGVfY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgc3RhdHVzID0ge30K
KyAgICAgICAgdGVzdF9yZXN1bHRzID0gc2VsZi5wcm9jZXNzX3Rlc3RfcmVzdWx0cygpCisgICAg
ICAgIGZvciB0ZXN0X25hbWUgaW4gc2VsZi5fdGVzdHM6CisgICAgICAgICAgICBzdGF0dXNbc2Vs
Zi53M2NfdGVzdF9uYW1lKHRlc3RfbmFtZSldID0gc2VsZi5fY29tcHV0ZV9jb25mb3JtYW5jZV9z
dGF0dXModGVzdF9uYW1lLCB0ZXN0X3Jlc3VsdHMpCisgICAgICAgIHJldHVybiBzdGF0dXMKKwor
ICAgIGRlZiBzdW1tYXJ5KHNlbGYpOgorICAgICAgICBudW1fcGFzcyA9IG51bV9wYXJ0aWFsID0g
bnVtX2ZhaWwgPSBudW1fZXJyb3IgPSAwCisgICAgICAgIHN0YXR1cyA9IHNlbGYuY29tcHV0ZV9j
b25mb3JtYW5jZV9yZXN1bHRzKCkKKyAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0
czoKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXR1c1tzZWxmLnczY190ZXN0X25hbWUodGVzdF9u
YW1lKV0KKyAgICAgICAgICAgIGlmIHJlc3VsdCA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAg
bnVtX3Bhc3MgKz0gMQorICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gJ1BBUlRJQUwnOgorICAg
ICAgICAgICAgICAgIG51bV9wYXJ0aWFsICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09
ICdGQUlMJzoKKyAgICAgICAgICAgICAgICBudW1fZmFpbCArPSAxCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIG51bV9lcnJvciArPSAxCisgICAgICAgIHN1bW1hcnkgPSB7fQor
ICAgICAgICBzdW1tYXJ5Wyd0b3RhbCddID0gbnVtX3Bhc3MgKyBudW1fZmFpbCArIG51bV9wYXJ0
aWFsICsgbnVtX2Vycm9yCisgICAgICAgIHN1bW1hcnlbJ251bV9wYXNzJ10gPSBudW1fcGFzcwor
ICAgICAgICBzdW1tYXJ5WydudW1fZmFpbCddID0gbnVtX2ZhaWwKKyAgICAgICAgc3VtbWFyeVsn
bnVtX3BhcnRpYWwnXSA9IG51bV9wYXJ0aWFsCisgICAgICAgIHN1bW1hcnlbJ251bV9lcnJvcidd
ID0gbnVtX2Vycm9yCisgICAgICAgIHJldHVybiBzdW1tYXJ5CisKKyAgICBkZWYgd3JpdGVfY29u
Zm9ybWFuY2VfcmVzdWx0cyhzZWxmLCBwYXRoLCB0ZXN0X3J1bl9pbmZvKToKKyAgICAgICAgcmVz
dWx0cyA9IHt9CisgICAgICAgIHJlc3VsdHNbJ2NvbmZvcm1hbmNlX3Jlc3VsdHMnXSA9IHNlbGYu
Y29tcHV0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKCkKKyAgICAgICAgcmVzdWx0cy51cGRhdGUodGVz
dF9ydW5faW5mbykKKyAgICAgICAgIyBjb3B5IGNvbmZvcm1hbmNlIHJlc3VsdHMgYXMganNvbiBk
YXRhCisgICAgICAgIGpzb25fc3RyaW5nID0ganNvbi5kdW1wcyhyZXN1bHRzLCBzZXBhcmF0b3Jz
PSgnLCcsICc6JykpCisgICAgICAgIGpzb25fc3RyaW5nID0gc2VsZi5fSlNPTl9QUkVGSVggKyBq
c29uX3N0cmluZyArIHNlbGYuX0pTT05fU1VGRklYCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
d3JpdGVfdGV4dF9maWxlKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwYXRoLCAndzNjX2NvbmZvcm1h
bmNlX3Jlc3VsdHMuanNvbicpLCBqc29uX3N0cmluZykKKyAgICAgICAgIyBjb3B5IGh0bWwgdGVt
cGxhdGUKKyAgICAgICAgcmVzdWx0c19maWxlID0gc2VsZi5fcG9ydC5wYXRoX2Zyb21fd2Via2l0
X2Jhc2UoJ0xheW91dFRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycsICdyZXNvdXJjZXMnLCAndzNj
X2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbCcpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0u
ZXhpc3RzKHJlc3VsdHNfZmlsZSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHlm
aWxlKHJlc3VsdHNfZmlsZSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsICd3M2NfY29uZm9y
bWFuY2VfcmVzdWx0cy5odG1sJykpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3czYy93ZWJfcGxhdGZvcm1fdGVzdF9zZXR1cC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dzNjL3dlYl9wbGF0Zm9ybV90ZXN0X3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MDhiZDkyNTk0Mjk2
OGU5ZmYyNTdkM2FhN2RjNjc5YmFiNzRlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3czYy93ZWJfcGxhdGZvcm1fdGVzdF9zZXR1cC5weQpAQCAtMCwwICsxLDY3
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3Jp
cHQgYWxsb3dzIHNldHRpbmcgdXAgdGhlIHdlYiBwbGF0Zm9ybSB0ZXN0IHBhcmFtZXRlcnMgc3Vj
aCBhczoKKyAgICAtIFRoZSBjb25maWcuanNvbiBmaWxlIHVzZWQgYnkgdGhlIFdQVCBodHRwIHNl
cnZlcgorICAgIC0gVGhlIHRlc3RoYXJuZXNzcmVwb3J0LmpzIHVzZWQgZm9yIHdlYiBwbGF0Zm9y
bSB0ZXN0cyAoY29weSBvZiB3ZWJraXQgdGVzdGhhcm5lc3NyZXBvcnQuanMpLgorIiIiCisKK2lt
cG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zy
b20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgorCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgV2ViUGxhdGZvcm1U
ZXN0U2V0dXAob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCB0ZXN0X2Rp
cmVjdG9yeSk6CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBob3N0LmZpbGVzeXN0ZW0KKyAg
ICAgICAgc2VsZi5fd3B0X3Jvb3QgPSB0ZXN0X2RpcmVjdG9yeQorICAgICAgICBzZWxmLl9sYXlv
dXRfcm9vdCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihXZWJLaXRGaW5kZXIoc2VsZi5fZmlsZXN5
c3RlbSkud2Via2l0X2Jhc2UoKSwgIkxheW91dFRlc3RzIikKKworICAgIGRlZiByZXN0b3JlX3cz
Y190ZXN0aGFybmVzc3JlcG9ydChzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnVXNpbmcgVzND
IFdQVCB0ZXN0aGFybmVzc3JlcG9ydC5qcycpCisgICAgICAgIHRlc3RoYXJuZXNzcmVwb3J0X3dw
dF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291
cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qc34iKQorICAgICAgICBpZiBzZWxmLl9maWxlc3lz
dGVtLmlzZmlsZSh0ZXN0aGFybmVzc3JlcG9ydF93cHRfZmlsZW5hbWUpOgorICAgICAgICAgICAg
c2VsZi5fZmlsZXN5c3RlbS5jb3B5ZmlsZSh0ZXN0aGFybmVzc3JlcG9ydF93cHRfZmlsZW5hbWUs
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0
aGFybmVzc3JlcG9ydC5qcyIpKQorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUo
dGVzdGhhcm5lc3NyZXBvcnRfd3B0X2ZpbGVuYW1lKQorCisgICAgZGVmIGNvcHlfd2Via2l0X3Rl
c3RoYXJuZXNzcmVwb3J0KHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdVc2luZyBXZWJLaXQg
dGVzdGhhcm5lc3NyZXBvcnQuanMnKQorICAgICAgICB0ZXN0aGFybmVzc3JlcG9ydF93a19maWxl
bmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9sYXlvdXRfcm9vdCwgInJlc291cmNl
cyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0u
aXNmaWxlKHRlc3RoYXJuZXNzcmVwb3J0X3drX2ZpbGVuYW1lKToKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0uY29weWZpbGUoc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dwdF9yb290
LCAicmVzb3VyY2VzIiwgInRlc3RoYXJuZXNzcmVwb3J0LmpzIiksIHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLl93cHRfcm9vdCwgInJlc291cmNlcyIsICJ0ZXN0aGFybmVzc3JlcG9ydC5qc34i
KSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUoc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX2xheW91dF9yb290LCAicmVzb3VyY2VzIiwgInRlc3RoYXJuZXNzcmVwb3J0
LmpzIiksIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93cHRfcm9vdCwgInJlc291cmNlcyIs
ICJ0ZXN0aGFybmVzc3JlcG9ydC5qcyIpKQorCisgICAgZGVmIGNvcHlfd3B0X2pzb25fY29uZmln
KHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdDb3B5aW5nIGpzb24gd2ViIHBsYXRmb3JtIHNl
cnZlciBjb25maWcnKQorICAgICAgICBjb25maWdfd3B0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHNlbGYuX2xheW91dF9yb290LCAiaW1wb3J0ZWQiLCAidzNjIiwgInJlc291cmNl
cyIsICJjb25maWcuanNvbiIpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKGNv
bmZpZ193cHRfZmlsZW5hbWUpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5Zmls
ZShjb25maWdfd3B0X2ZpbGVuYW1lLCBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd3B0X3Jv
b3QsICJjb25maWcuanNvbiIpKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggNDFj
ZmY0YzFkMGQyOWI1NzlkMzFkOTFlZjEzN2FjOTgzMWJjZDFjNi4uMTgwZDg4ZDg0NzZkYmJiNjFl
ZmQxYzhiZmViNzFmOWVjMDM5M2U5MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTQtMDktMTYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0
QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGVkIFczQyBj
b25mb3JtYW5jZSB0ZXN0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzQ3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHJlc291cmNlcy9jb25maWcuanNvbjogQWRkZWQgKHRlc3Qgc2VydmVyIGNv
bmZpZyBmaWxlKS4KKyAgICAgICAgKiByZXNvdXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMu
aHRtbDogQWRkZWQgKGNvbmZvcm1hbmNlIHJlc3VsdCB0ZW1wbGF0ZSBmaWxlKS4KKwogMjAxMy0x
Mi0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBvcnQg
dGhlIFhIVE1MIHBhcnNpbmcgYW5kIHNlcmlhbGl6YXRpb24gdGVzdHMgZm9yIHRlbXBsYXRlIGVs
ZW1lbnRzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL2Nv
bmZpZy5qc29uIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25maWcuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ZmIzMGUwMWFiYWZkMTZkZThkYjBlMTA5NGRjMDRkZjQ4M2QyYWFiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25m
aWcuanNvbgpAQCAtMCwwICsxLDcgQEAKK3siaG9zdCI6ICJsb2NhbGhvc3QiLAorICJwb3J0cyI6
eyJodHRwIjpbODgwMCwgODgwMV0sCisgICAgICAgICAgImh0dHBzIjpbXSwKKyAgICAgICAgICAi
d3MiOls0OTAwMV19LAorICJjaGVja19zdWJkb21haW5zIjogZmFsc2UsCisgImxvZ19sZXZlbCI6
ImRlYnVnIiwKKyAiYmluZF9ob3N0bmFtZSI6IGZhbHNlfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2NfY29uZm9ybWFuY2VfcmVzdWx0
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjEyZTYwMjk0Y2NmNmVjNzE3YmRkNTg1ZWUzZWQ3Y2E2ZjdhOWJl
OTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2Vz
L3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwKQEAgLTAsMCArMSw0MjcgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNyZXN1bHRzIHsKKwlkaXNwbGF5OiB0
YWJsZTsKKyAgICBwYWRkaW5nOiAyMHB4OworCWNsZWFyOiBib3RoOworfQorI3N1bW1hcnkgewor
ICAgIG1hcmdpbi10b3A6IDIwcHg7CisgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKK30KKworLnRl
c3QsIC5maXJzdGxpbmUgeworCWRpc3BsYXk6IHRhYmxlOworfQorLnRlc3RuYW1lLCAudGVzdHJl
c3VsdCwgLmZpcnN0TGluZSA+IGRpdiB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGF2ZW5kZXI7
CisgICAgYm9yZGVyLWJvdHRvbTpzb2xpZCAxcHggd2hpdGU7Cit9CisKKy5maXJzdExpbmVDZWxs
eworCWRpc3BsYXk6IHRhYmxlLWNlbGw7CisJdGV4dC1hbGlnbjogY2VudGVyOworCXdpZHRoOiA4
MDBweDsKK30KKworLnNlY29uZExpbmVDZWxsIHsKKwlkaXNwbGF5OiB0YWJsZS1jZWxsOworCXBh
ZGRpbmctbGVmdDogNTBweDsKKwl3aWR0aDogNzUwcHg7Cit9CisKKy50ZXN0bmFtZSB7CisJZGlz
cGxheTogdGFibGUtY2VsbDsKKwl3aWR0aDogODAwcHg7CisJbWFyZ2luLWxlZnQ6MjBweDsKK30K
KworLnRlc3RyZXN1bHQsIC5wb3J0IHsKKwlkaXNwbGF5OiB0YWJsZS1jZWxsOworCXdpZHRoOiAy
NTBweDsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy50ZXN0cmVzdWx0IGEgeworICAgIHRl
eHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOworfQorCisucGFydGlhbCwgLnBhc3MsIC5mYWlsLCAu
dGltZW91dCwgLmVycm9yIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisucGFzcyBhIHsKKyAg
ICBjb2xvcjogZ3JlZW47Cit9CisKKy5wYXJ0aWFsIGEgeworICAgIGNvbG9yOiB5ZWxsb3c7Cit9
CisKKy5mYWlsIGEgeworICAgIGNvbG9yOiBvcmFuZ2U7Cit9CisKKy50aW1lb3V0IGEgeworICAg
IGNvbG9yOiByZWQ7Cit9CisKKy5jcmFzaCBhIHsKKyAgICBjb2xvcjogcmVkOworfQorCisuZXJy
b3IgYSB7CisgICAgY29sb3I6IHJlZDsKK30KKworLmVycm9yLXJlc3VsdHMtaGlzdCB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIGZsb2F0OiBsZWZ0OyAKK30KKyAKKy5mYWlsLXJl
c3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogb3JhbmdlOworICAgIGZsb2F0OiBs
ZWZ0OworfQorCisucGFydGlhbC1yZXN1bHRzLWhpc3QgeworICAgIGJhY2tncm91bmQtY29sb3I6
IHllbGxvdzsKKyAgICBmbG9hdDogbGVmdDsKK30KKy5wYXNzLXJlc3VsdHMtaGlzdCB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgZmxvYXQ6IGxlZnQ7Cit9CisKKy5tb2R1bGUt
bmFtZSB7CisJZGlzcGxheTp0YWJsZS1jZWxsOworCXdpZHRoOiA4MDBweDsKK30KKworLm51bWJl
ci1vZi10ZXN0cyB7CisJZGlzcGxheTppbmxpbmUtYmxvY2s7CisJd2lkdGg6IDUwcHg7Cit9CisK
Ky5tb2R1bGUtcmVzdWx0cyB7CisJdGV4dC1hbGlnbjogY2VudGVyOworCWRpc3BsYXk6dGFibGUt
Y2VsbDsKKwl3aWR0aDogMjUwcHg7Cit9CisKKy5oaXN0b2dyYW0geworCWRpc3BsYXk6aW5saW5l
LWJsb2NrOworCW1hcmdpbi1sZWZ0OiA0MHB4OworCW1hcmdpbi10b3A6IDVweDsKKwl3aWR0aDox
NTBweDsKK30KKworLm1vZHVsZXsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsYXZlbmRlcjsKKyAg
ICBib3JkZXI6c29saWQgMXB4IHdoaXRlOworCWRpc3BsYXk6dGFibGU7Cit9CisKKy5tb2R1bGUt
c3VtbWFyeSwgLnNlY29uZExpbmUgeworCWRpc3BsYXk6dGFibGU7CisgICAgYmFja2dyb3VuZDog
bGF2ZW5kZXI7CisgICAgYm9yZGVyOnNvbGlkIDFweCB3aGl0ZTsKKyAgICBoZWlnaHQ6IDI1cHg7
CisgICAgY3Vyc29yOnBvaW50ZXI7Cit9CisKKy5ib3h7CisJZGlzcGxheTogdGFibGU7Cit9CisK
Ky5oaWRkZW4tZGF0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQorCisubGVnZW5kID4gZGl2IHsK
KwlmbG9hdDogbGVmdDsKKwltYXJnaW4tcmlnaHQ6IDVweDsKKwltaW4td2lkdGg6IDIwcHg7Cit9
CisKKy5sZWdlbmQgeworfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGdldFRlc3Rz
RGlyZWN0b3J5KHJlc3VsdHMpCit7CisgICAgcmV0dXJuIChyZXN1bHRzLnJvb3RfZGlyZWN0b3J5
ID8gcmVzdWx0cy5yb290X2RpcmVjdG9yeSA6IHJlc3VsdHMucG9ydF9uYW1lKSArICIvIiArIAor
ICAgICAgICAgICAgKHJlc3VsdHMudGVzdHNfZGlyZWN0b3J5ID8gcmVzdWx0cy50ZXN0c19kaXJl
Y3RvcnkgOiAiaW1wb3J0ZWQtdGVzdHMiKQorfQorCitmdW5jdGlvbiBnZXRSZXN1bHRzRGlyZWN0
b3J5KHJlc3VsdHMpCit7CisgICAgcmV0dXJuIChyZXN1bHRzLnJvb3RfZGlyZWN0b3J5ID8gcmVz
dWx0cy5yb290X2RpcmVjdG9yeSA6IHJlc3VsdHMucG9ydF9uYW1lKSArICIvIiArIAorICAgICAg
ICAgICAgKHJlc3VsdHMucmVzdWx0c19kaXJlY3RvcnkgPyByZXN1bHRzLnJlc3VsdHNfZGlyZWN0
b3J5IDogImxheW91dC10ZXN0LXJlc3VsdHMiKQorfQorCitmdW5jdGlvbiBnZXRUZXN0TGluayh0
ZXN0bmFtZSwgcmVzdWx0cykKK3sKKwlyZXR1cm4gIjxkaXYgc3R5bGU9J2Zsb2F0OmxlZnQ7IG1h
cmdpbi1yaWdodDoxMHB4Jz48YSBocmVmPSciICsgZ2V0VGVzdHNEaXJlY3RvcnkocmVzdWx0cykg
KyAiLyIgKyB0ZXN0bmFtZSArICInPiIgKyB0ZXN0bmFtZSArICI8L2E+PC9kaXY+IgorCQkrICI8
ZGl2Pig8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9i
bG9iLyIgKyByZXN1bHRzLnRlc3RzX3ZlcnNpb24gKyAiLyIgKyB0ZXN0bmFtZSArICInPmdpdGh1
YjwvYT4pPC9kaXY+IiAKK30KKworZnVuY3Rpb24gZ2V0VGVzdFJlc3VsdExpbmsodGVzdG5hbWUs
IHJlc3VsdCwgcmVzdWx0cykKK3sKKwlzdWZmaXggPSAiLiIgKyB0ZXN0bmFtZS5zcGxpdCgnLicp
LnBvcCgpOworCXJldHVybiAiPGEgaHJlZj0nIiArIGdldFRlc3RzRGlyZWN0b3J5KHJlc3VsdHMp
ICsgIi8iICsgdGVzdG5hbWUucmVwbGFjZShzdWZmaXgsIi1leHBlY3RlZC50eHQiKSArICInPiIg
KyByZXN1bHQudG9Mb3dlckNhc2UoKSArICI8L2E+IgorfQorCitmdW5jdGlvbiB0ZXN0U3VpdGVI
aXN0KG51bUVycm9yLCBudW1GYWlsLCBudW1QYXJ0aWFsLCBudW1QYXNzKQoreworICAgIHZhciB0
b3RhbCA9IG51bUVycm9yICsgbnVtUGFzcyArIG51bVBhcnRpYWwgKyBudW1GYWlsOworCisgICAg
aHRtbCA9ICc8ZGl2IGNsYXNzPSJtb2R1bGUtcmVzdWx0cyI+JworCisgICAgaHRtbCArPSAnPGRp
diBjbGFzcz0ibnVtYmVyLW9mLXRlc3RzIj4nICsgbnVtUGFzcyArICcvJyArIHRvdGFsICsgJzwv
ZGl2PicKKworCWh0bWwgKz0gJzxkaXYgY2xhc3M9Imhpc3RvZ3JhbSI+JworICAgIGlmIChudW1F
cnJvcikKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZXJyb3ItcmVzdWx0cy1oaXN0IiBz
dHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1FcnJvciAvIHRvdGFsKSArICclIj4mbmJzcDs8L2Rp
dj4nCisgICAgaWYgKG51bUZhaWwpCisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImZhaWwt
cmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1GYWlsIC8gdG90YWwpICAr
ICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYgKG51bVBhcnRpYWwpCisgICAgICAgIGh0bWwgKz0g
JzxkaXYgY2xhc3M9InBhcnRpYWwtcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAg
KiBudW1QYXJ0aWFsIC8gdG90YWwpICsgJyUiPiZuYnNwOzwvZGl2PicKKyAgICBpZiAobnVtUGFz
cykKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icGFzcy1yZXN1bHRzLWhpc3QiIHN0eWxl
PSJ3aWR0aDonICsgKDEwMCAqIG51bVBhc3MgLyB0b3RhbCkgKyAnJSI+Jm5ic3A7PC9kaXY+Jwor
ICAgIGh0bWwgKz0gJzwvZGl2PicKKworICAgIHJldHVybiBodG1sICsgJzwvZGl2Pic7Cit9CisK
K2Z1bmN0aW9uIGdldFRlc3RzdWl0ZU1vZHVsZXMocmVzdWx0cykKKyB7CisJdmFyIG1vZHVsZXMg
PSB7fQorCS8vIGZpcnN0IHRyeSB0byBvbmx5IHNob3cgbW9kdWxlIGZyb20gVVJMIGhhc2gKKwl2
YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKQorCXZhciBoYXNUZXN0
ID0gZmFsc2UKKwlpZiAoaGFzaC5sZW5ndGgpCisJCU9iamVjdC5rZXlzKHJlc3VsdHMuY29uZm9y
bWFuY2VfcmVzdWx0cykKKwkJCS5zb3J0KCkKKwkJCS5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkg
eworCQkJCXZhciB0ZXN0TmFtZSA9IGtleQorCQkJCWlmICh0ZXN0TmFtZS5pbmRleE9mKGhhc2gp
ID09IDApIHsKKwkJCQkJaGFzVGVzdCA9IHRydWUKKwkJCQkJdmFyIGl0ZW1zID0gdGVzdE5hbWUu
c3BsaXQoIi8iKQorCQkJCQl2YXIgbmFtZSA9IGl0ZW1zWzBdCisJCQkJCWlmIChtb2R1bGVzW25h
bWVdKQorCQkJCQkJbW9kdWxlc1tuYW1lXS5wdXNoKGtleSkKKwkJCQkJZWxzZQorCQkJCQkJbW9k
dWxlc1tuYW1lXSA9IFtrZXldCisJCQkJfQorCQl9KQorCWlmIChoYXNUZXN0KQorCQlyZXR1cm4g
bW9kdWxlcworCS8vIGlmIG5vIHRlc3RzLCBzaG93IGFsbCBtb2R1bGVzCisgICAgT2JqZWN0Lmtl
eXMocmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRzKQorICAgICAgICAuc29ydCgpCisgICAgICAg
IC5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworCQkJdmFyIHRlc3ROYW1lID0ga2V5CisJCQl2
YXIgaXRlbXMgPSB0ZXN0TmFtZS5zcGxpdCgiLyIpCisJCQl2YXIgbmFtZSA9IGl0ZW1zWzBdCisJ
CQkvLyBJbiBjYXNlIG9mIGh0bWwgbW9kdWxlLCB3ZSBzcGxpdCBhZ2FpbgorCQkJaWYgKG5hbWUg
PT0gJ2h0bWwnKQorCQkJCW5hbWUgKz0gJy8nICsgaXRlbXNbMV0KKwkJCWlmIChtb2R1bGVzW25h
bWVdKQorCQkJCW1vZHVsZXNbbmFtZV0ucHVzaChrZXkpCisJCQllbHNlCisJCQkJbW9kdWxlc1tu
YW1lXSA9IFtrZXldCisJfSkKKwlyZXR1cm4gbW9kdWxlcworIH0KKworZnVuY3Rpb24gdG9nZ2xl
VGVzdHMoZGl2KQoreworCXZhciBib3ggPSBkaXYubmV4dEVsZW1lbnRTaWJsaW5nCisJaWYgKGJv
eCkgeworCQlpZiAoYm94LmNsYXNzTmFtZSA9PSAnYm94JykKKyAgICAgICAgICAgIGJveC5jbGFz
c05hbWUgPSdoaWRkZW4tZGF0YScKKwkJZWxzZQorCQkJYm94LmNsYXNzTmFtZSA9ICdib3gnCisJ
fQorfQorCitmdW5jdGlvbiBjb21wdXRlR2xvYmFsQ29uZm9ybWFuY2UocmVzdWx0cykKK3sKKwl2
YXIgc3VtbWFyeSA9IHtudW1QYXNzOiAwLCBudW1QYXJ0aWFsOiAwLCBudW1GYWlsOiAwLCBudW1F
cnJvcjogMH0KKwlmb3IgKHZhciB0ZXN0IGluIHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0cykg
eworCQlpZiAocmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRzLmhhc093blByb3BlcnR5KHRlc3Qp
KSB7CisJCQlyZXN1bHQgPSByZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHNbdGVzdF0KKwkJCWlm
IChyZXN1bHQgPT0gIlBBU1MiKSBzdW1tYXJ5Lm51bVBhc3MrKworCQkJZWxzZSBpZiAocmVzdWx0
ID09ICJQQVJUSUFMIikgc3VtbWFyeS5udW1QYXJ0aWFsKysKKwkJCWVsc2UgaWYgKHJlc3VsdCA9
PSAiRkFJTCIpIHN1bW1hcnkubnVtRmFpbCsrCisJCQllbHNlIHN1bW1hcnkubnVtRXJyb3IrKwor
CQl9CisJfQorCXJldHVybiBzdW1tYXJ5Cit9CisKK2Z1bmN0aW9uIGNvbXB1dGVTdGF0aXN0aWNz
KHJlc3VsdHNTdW1tYXJ5LCByZXN1bHQsIHJlc3VsdHMpCit7CisJc3VtbWFyeSA9IHJlc3VsdHNT
dW1tYXJ5W3Jlc3VsdHMucG9ydF9uYW1lXQorCWlmICghc3VtbWFyeSkKKwkJcmVzdWx0c1N1bW1h
cnlbcmVzdWx0cy5wb3J0X25hbWVdID0gc3VtbWFyeSA9IHtudW1QYXNzOiAwLCBudW1QYXJ0aWFs
OiAwLCBudW1GYWlsOiAwLCBudW1FcnJvcjogMH0KKwlpZiAocmVzdWx0ID09ICJQQVNTIikgc3Vt
bWFyeS5udW1QYXNzKysKKwllbHNlIGlmIChyZXN1bHQgPT0gIlBBUlRJQUwiKSBzdW1tYXJ5Lm51
bVBhcnRpYWwrKworCWVsc2UgaWYgKHJlc3VsdCA9PSAiRkFJTCIpIHN1bW1hcnkubnVtRmFpbCsr
CisJZWxzZSBzdW1tYXJ5Lm51bUVycm9yKysKK30KKworZnVuY3Rpb24gYWRkVGVzdFN1aXRlTGlz
dE9mUmVzdWx0cyhtb2R1bGVOYW1lLCB0ZXN0cywgbGlzdE9mUmVzdWx0cywgaXNPcGVuKQorewor
CXZhciByZXN1bHRzU3VtbWFyeSA9ICB7fQorICAgIHZhciBudW1QYXNzID0gbnVtUGFydGlhbCA9
IG51bUZhaWwgPSBudW1FcnJvciA9IDAKKyAgICB2YXIgaW5uZXJIVE1MID0gIiIKKyAgICB0ZXN0
cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworCQkJaW5uZXJIVE1MICs9ICI8ZGl2IGNsYXNz
PSd0ZXN0Jz48ZGl2IGNsYXNzPSd0ZXN0bmFtZSc+IiArIGdldFRlc3RMaW5rKGtleSwgbGlzdE9m
UmVzdWx0c1swXSkgKyAiPC9kaXY+IgorCQkJbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9u
KHJlc3VsdHMpIHsKKwkJCQlyZXN1bHQgPSByZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHNba2V5
XQorICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9ICJNaXNzaW5nIgorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiV0FSTklO
RzogdGVzdCAiICsga2V5ICsgIiBpcyBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAgfQorCQkJ
CWlubmVySFRNTCArPSAiPGRpdiBjbGFzcz0ndGVzdHJlc3VsdCAiICsgcmVzdWx0LnRvTG93ZXJD
YXNlKCkgKyAiJz4iICsgZ2V0VGVzdFJlc3VsdExpbmsoa2V5LCByZXN1bHQsIHJlc3VsdHMpICsg
IjwvZGl2PiIKKwkJCQljb21wdXRlU3RhdGlzdGljcyhyZXN1bHRzU3VtbWFyeSwgcmVzdWx0LCBy
ZXN1bHRzKQorCQkJfSkKKwkJCWlubmVySFRNTCArPSAiPC9kaXY+IgorICAgICAgIH0pCisgICAg
dmFyIGh0bWwgPSAnPGRpdiBjbGFzcz0ibW9kdWxlIj48ZGl2IGNsYXNzPSJtb2R1bGUtc3VtbWFy
eSIgb25jbGljaz0idG9nZ2xlVGVzdHMoZXZlbnQuY3VycmVudFRhcmdldCkiPjxkaXYgY2xhc3M9
Im1vZHVsZS1uYW1lIj4nICsgbW9kdWxlTmFtZSArICc8L2Rpdj4nCisJbGlzdE9mUmVzdWx0cy5m
b3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKwkJdmFyIHN1bW1hcnkgPSByZXN1bHRzU3VtbWFy
eVtyZXN1bHRzLnBvcnRfbmFtZV0KKwkJaHRtbCArPSB0ZXN0U3VpdGVIaXN0KHN1bW1hcnkubnVt
RXJyb3IsIHN1bW1hcnkubnVtRmFpbCwgc3VtbWFyeS5udW1QYXJ0aWFsLCBzdW1tYXJ5Lm51bVBh
c3MpCisJfSkKKwlodG1sICs9ICc8L2Rpdj48ZGl2IGNsYXNzPSInICsgKGlzT3BlbiA/ICJib3gi
IDogImhpZGRlbi1kYXRhIikgKyAnIj4nOworICAgIGh0bWwgKz0gaW5uZXJIVE1MCisgICAgaHRt
bCArPSAnPC9kaXY+PC9kaXY+JworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRz
IikuaW5uZXJIVE1MICs9IGh0bWwKK30KKworZnVuY3Rpb24gd3JpdGVTdW1tYXJ5KCkKK3sKKwl2
YXIgaHRtbCA9ICI8ZGl2PlczQyBjb25mb3JtYW5jZSByZXN1bHRzIGZyb20gcnVuLXdlYmtpdC10
ZXN0ICgiCisgICAgbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKyAg
ICAgICAgaHRtbCArPSAiPGEgaHJlZj0nIiArIGdldFJlc3VsdHNEaXJlY3RvcnkocmVzdWx0cykg
KyAiJz4iICsgcmVzdWx0cy5wb3J0X25hbWUgKyAiPC9hPiAmbmJzcDsiCisgICAgfSkKKyAgICBo
dG1sICs9ICIpPC9kaXY+IgorCisJaWYgKGxpc3RPZlJlc3VsdHMubGVuZ3RoID4gMSkgeworCQl2
YXIgc2FtZVRlc3RWZXJzaW9uID0gdHJ1ZQorCQlsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rp
b24ocmVzdWx0cykgeworCQkJaWYgKGxpc3RPZlJlc3VsdHNbMF0udGVzdHNfdmVyc2lvbiAhPSBy
ZXN1bHRzLnRlc3RzX3ZlcnNpb24pIHsKKwkJCQlzYW1lVGVzdFZlcnNpb24gPSBmYWxzZQorICAg
ICAgICAgICAgICAgIGh0bWwgKz0gIjxkaXY+V2FybmluZzogVzNDIHRlc3QgdmVyc2lvbiBhcmUg
bm90IHRoZSBzYW1lIGZvciBhbGwgcGxhdGZvcm1zOiAiCisgICAgICAgICAgICAgICAgaHRtbCAr
PSBsaXN0T2ZSZXN1bHRzWzBdLnRlc3RzX3ZlcnNpb24gKyAiIHZzICIgKyByZXN1bHRzLnRlc3Rz
X3ZlcnNpb24gKyAiIG9mIHBsYXRmb3JtICIgKyByZXN1bHRzLnBvcnRfbmFtZQorICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpCisgICAgICAgICAgICAgICAgaHRtbCArPSAiPC9k
aXY+IgorCQkJfQorCQl9KQorCQlpZiAoIXNhbWVUZXN0VmVyc2lvbikgey8qCisJCQlodG1sICs9
ICI8ZGl2Pldhcm5pbmc6IFczQyB0ZXN0IHZlcnNpb24gYXJlIG5vdCB0aGUgc2FtZSBmb3IgYWxs
IHBsYXRmb3JtczogIgorICAgICAgICAgICAgaHRtbCArPSBsaXN0T2ZSZXN1bHRzWzBdLnRlc3Rz
X3ZlcnNpb24gKyAiIHZzICIgKyByZXN1bHRzLnRlc3RzX3ZlcnNpb24gKyAiIG9mIHBsYXRmb3Jt
ICIgKyByZXN1bHRzLnBvcnRfbmFtZQorICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cykK
KyAgICAgICAgICAgIGh0bWwgKz0gIjwvZGl2PiIqLworICAgICAgICB9CisJCWVsc2UgaWYgKGxp
c3RPZlJlc3VsdHNbMF0udGVzdHNfdmVyc2lvbiA9PSAibWFzdGVyIikKKwkJCWh0bWwgKz0gIjxk
aXY+V2FybmluZzogdXNpbmcgbWFzdGVyIGFzIFczQyB0ZXN0IHZlcnNpb248L2Rpdj4iCisJfQor
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN1bW1hcnkiKS5pbm5lckhUTUwgPSBodG1s
Cit9CisKK2Z1bmN0aW9uIGRpc3BsYXlSZXN1bHRzKCkKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgIHsKKwl2YXIgZmlyc3RMaW5lSFRNTCA9ICI8ZGl2IGNsYXNzPSdmaXJzdExpbmUnPjxk
aXYgY2xhc3M9J2ZpcnN0TGluZUNlbGwnPk1vZHVsZS9UZXN0IE5hbWU8L2Rpdj4iCisJbGlzdE9m
UmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKwkJZmlyc3RMaW5lSFRNTCArPSAi
PGRpdiBjbGFzcz0ncG9ydCc+IiArIHJlc3VsdHMucG9ydF9uYW1lLnRvVXBwZXJDYXNlKCkgKyAi
PC9kaXY+IgorCX0pCisJZmlyc3RMaW5lSFRNTCArPSAiPC9kaXY+IgorCXZhciBzZWNvbmRMaW5l
SFRNTCA9ICI8ZGl2IGNsYXNzPSdzZWNvbmRMaW5lJz48ZGl2IGNsYXNzPSdzZWNvbmRMaW5lQ2Vs
bCc+T3ZlcmFsbCBjb25mb3JtYW5jZTwvZGl2PiIKKwlsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVu
Y3Rpb24ocmVzdWx0cykgeworCQlzdW1tYXJ5ID0gY29tcHV0ZUdsb2JhbENvbmZvcm1hbmNlKHJl
c3VsdHMpCisJCXNlY29uZExpbmVIVE1MICs9IHRlc3RTdWl0ZUhpc3Qoc3VtbWFyeS5udW1FcnJv
ciwgc3VtbWFyeS5udW1GYWlsLCBzdW1tYXJ5Lm51bVBhcnRpYWwsIHN1bW1hcnkubnVtUGFzcykK
Kwl9KQorCXNlY29uZExpbmVIVE1MICs9ICI8L2Rpdj4iCisKKwlkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9IGZpcnN0TGluZUhUTUwgKyBzZWNvbmRMaW5lSFRN
TAorCXZhciBtb2R1bGVzID0gIGdldFRlc3RzdWl0ZU1vZHVsZXMobGlzdE9mUmVzdWx0c1swXSkK
Kwl2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1vZHVsZXMpCisgICAga2V5cy5zb3J0KCkuZm9yRWFj
aCggZnVuY3Rpb24oa2V5LCBpKSB7CisJCWFkZFRlc3RTdWl0ZUxpc3RPZlJlc3VsdHMoa2V5LCBt
b2R1bGVzW2tleV0sIGxpc3RPZlJlc3VsdHMsIGtleXMubGVuZ3RoID09IDEpCisJfSkKKwl3cml0
ZVN1bW1hcnkobGlzdE9mUmVzdWx0cykKKyAgICB9LCAwKQorfQorCisgCitsaXN0T2ZSZXN1bHRz
ID0gW10gCitmdW5jdGlvbiBBRERfQ09ORk9STUFOQ0VfUkVTVUxUUyhyZXN1bHRzKQoreworICAg
IHJlc3VsdHMucm9vdF9kaXJlY3RvcnkgPSBkaXJzW2NvdW50ZXJdCisJbGlzdE9mUmVzdWx0cy5w
dXNoKHJlc3VsdHMpCisgICAgc2V0VGltZW91dChsb2FkU2NyaXB0cywgMCkKKyAgICAKK30KKwor
Ly93aW5kb3cub25sb2FkID0gZGlzcGxheVJlc3VsdHMKK3ZhciBjb3VudGVyCit2YXIgZGlycwor
ZnVuY3Rpb24gbG9hZFNjcmlwdHMoZGlyZWN0b3JpZXMpCit7CisgICAgaWYgKGRpcmVjdG9yaWVz
KSB7CisgICAgICAgIGRpcnMgPSBkaXJlY3RvcmllcworICAgICAgICBjb3VudGVyID0gLTEKKyAg
ICB9CisgICAgaWYgKGNvdW50ZXIgPCBkaXJzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnknKS5pbm5lckhUTUwgPSAiTG9hZGluZyAiICsgZGly
c1srK2NvdW50ZXJdICsgIi4uLiIKKyAgICAgICAgdmFyIGhlYWQ9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CisgICAgICAgIHZhciBzY3JpcHQ9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgICAgICBzY3JpcHQudHlwZT0gJ3RleHQvamF2YXNj
cmlwdCc7CisgICAgICAgIHNjcmlwdC5zcmM9IGRpcnNbY291bnRlcl0gKyAnL3czY19jb25mb3Jt
YW5jZV9yZXN1bHRzLmpzb24nOworICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7Cisg
ICAgfQorICAgIGVsc2UgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFy
eScpLmlubmVySFRNTCA9ICJEaXNwbGF5aW5nIHJlc3VsdHMuLi4iCisgICAgICAgIHNldFRpbWVv
dXQoZGlzcGxheVJlc3VsdHMsIDApCisgICAgfQorfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0ic3VtbWFyeSI+CisgICAgTG9hZGluZy4uLgorPC9kaXY+Cis8ZGl2IGNs
YXNzPSJsZWdlbmQiPgorCTxkaXYgY2xhc3M9ImVycm9yLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZu
YnNwOzwvZGl2PgorCTxkaXY+RXJyb3IsIFRpbWVvdXQgb3IgQ3Jhc2g8L2Rpdj4KKwk8ZGl2IGNs
YXNzPSJmYWlsLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwvZGl2PgorCTxkaXY+IEFsbCBh
c3NlcnRpb25zIGZhaWxpbmc8L2Rpdj4KKwk8ZGl2IGNsYXNzPSJwYXJ0aWFsLXJlc3VsdHMtaGlz
dCBsZWdlbmQiPiZuYnNwOzwvZGl2PgorCTxkaXY+IFNvbWUgYXNzZXJ0aW9ucyBwYXNzaW5nPC9k
aXY+CisJPGRpdiBjbGFzcz0icGFzcy1yZXN1bHRzLWhpc3QgbGVnZW5kIj4mbmJzcDs8L2Rpdj4K
Kwk8ZGl2PiBBbGwgYXNzZXJ0aW9ucyBwYXNzaW5nPC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InJl
c3VsdHMiPgorPC9kaXY+Cis8IS0tIHBsYWNlIGFzIG1hbnkgLmpzb24gZmlsZSBhcyBuZWVkZWQg
LS0+Cis8c2NyaXB0PgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxvYWRT
Y3JpcHRzKFsKKyAgICAgICAgICAgICIuIgorICAgICAgICBdKQorICAgIH0sIDApCis8L3Njcmlw
dD4KKzwhLS1zY3JpcHQgc3JjPSJlZmwvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuanNvbiI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iZ3RrL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24iPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Im1hYy93M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5qc29uIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJtYWMtd2syL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpz
b24iPjwvc2NyaXB0LS0+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243675</attachid>
            <date>2014-12-23 07:21:13 -0800</date>
            <delta_ts>2014-12-23 15:37:04 -0800</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-134766-20141223162112.patch</filename>
            <type>text/plain</type>
            <size>36177</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGM2N2ZmOWVjZDIxOWYwYjhjOGEyZDcwNmY1MWQ2Yjgx
NjU3Y2UxYS4uYTljOThhZjdlNTZiNDQ5YWVlYjgzNDQzZjJmYjc5MjAyM2NjYmJkZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUy
IEBACisyMDE0LTEyLTIzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2Ug
dGVzdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0NzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzIGlzIHRoZSBleGVjdXRhYmxlIHRvIHRl
c3QgV2ViIFBsYXRmb3JtIHRlc3QgY29uZm9ybWFuY2UuCisgICAgICAgIFJlc3VsdHMgYXJlIHN0
b3JlZCBieSBkZWZhdWx0IGluIGEgV2ViS2l0QnVpbGQgc3ViLWZvbGRlciAoc2VlIFBvcnQudzNj
X2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KS4KKyAgICAgICAgU2NyaXB0cy93ZWJraXRw
eS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weSBpcyB0aGUgbWFpbiBzY3JpcHQuCisg
ICAgICAgIEl0IHVzZXMgd3B0IHRlc3QgaW1wb3J0ZXIgdG8gY2xvbmUgYW5kIGltcG9ydCB0aGUg
dGVzdHMuCisgICAgICAgIEl0IHRoZW4gdXNlcyBydW4td2Via2l0LXRlc3QgdG8gcnVuIHRoZSB0
ZXN0cyBhbmQgZ2VuZXJhdGUgdGhlIC1leHBlY3RlZC50eHQgZmlsZXMuCisgICAgICAgIEZyb20g
dGhlIC1leHBlY3RlZC50eHQgZmlsZXMsIGl0IGNvbXB1dGVzIHdoZXRoZXIgdGhlIHRlc3QgaXMg
cGFzc2luZywgcGFydGlhbGx5IHBhc3Npbmcgb3IgZmFpbGluZy4KKyAgICAgICAgUmVzdWx0cyBh
cmUgb3V0cHV0dGVkIHRocm91Z2ggVGVzdFJlc3VsdHNNYW5hZ2VyIGFzIGEganNvbiBmaWxlIHRo
YXQgY2FuIGJlIGxvYWRlZCB1c2luZyB3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sLgorCisg
ICAgICAgICogU2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQudzNjX2Nv
bmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KTogUGF0aCB0byB0aGUgd29ya2luZyBkaXJlY3Rv
cnkgZm9yIGNvbmZvcm1hbmNlIHRlc3RpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93
M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weTogQWRkZWQuCisgICAgICAgICh3M2NfY3Jl
YXRlX2FyZ3VtZW50X3BhcnNlcik6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lcik6Cisg
ICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci5fX2luaXRfXyk6CisgICAgICAgIChXM0NDb25m
b3JtYW5jZVJ1bm5lci5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgIChX
M0NDb25mb3JtYW5jZVJ1bm5lci5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSk6CisgICAg
ICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci50ZXN0X3N1aXRlcyk6CisgICAgICAgIChXM0NDb25m
b3JtYW5jZVJ1bm5lci5ydW5fd2Via2l0X3Rlc3RzKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNl
UnVubmVyLnJ1bl90ZXN0X2xpc3QpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIucmVz
dWx0c19tYW5hZ2VyKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLnRlc3RzKToKKyAg
ICAgICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLmNvbmZvcm1hbmNlX3Jlc3VsdCk6CisgICAgICAg
IChXM0NDb25mb3JtYW5jZVJ1bm5lci5ydW5fdGVzdHMpOgorICAgICAgICAoVzNDQ29uZm9ybWFu
Y2VSdW5uZXIucHJpbnRfcmVzdWx0c190b19jb25zb2xlKToKKyAgICAgICAgKFczQ0NvbmZvcm1h
bmNlUnVubmVyLnByaW50X3BvdGVudGlhbF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUpOgorICAg
ICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIud3JpdGVfY29uZm9ybWFuY2VfcmVzdWx0cyk6Cisg
ICAgICAgIChjb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZy5M
b2dIYW5kbGVyKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIuZm9ybWF0
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3Rf
cmVzdWx0c19tYW5hZ2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlcik6
CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoVGVzdFJl
c3VsdHNNYW5hZ2VyLnczY190ZXN0X25hbWUpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2Vy
Ll9nZXRfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlci5wcm9jZXNz
X3Rlc3RfcmVzdWx0cyk6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX2NvbXB1dGVfY29u
Zm9ybWFuY2Vfc3RhdHVzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlci5jb21wdXRlX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnN1bW1hcnkp
OgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLndyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMp
OgorCiAyMDE0LTEyLTE5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXaW5dIFJldmlzZSBEUlQgbG9naWMgdG8gbWF0Y2ggTWFjLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9y
dW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZjAxNzVhODc2MmIwNWNiY2Rk
OWE3YWY5NjEyNTQxYjI5OTI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1
bi13M2MtY29uZm9ybWFuY2UtdGVzdHMKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhl
IG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgYXJvdW5kIHdlYmtpdHB5L3czYy9ydW5f
dzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5IiIiCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQg
bXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcAorCittdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwLnJ1
bignd2Via2l0cHknLCAndzNjJywgJ3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHknKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBjOWU4NDlkNTQ0ZDQ0MDE5YzkyNDRiMmVk
ZjRjNTlkMWQ3OGQ2MTA5Li44YzA5ZDYwZWM0MzZjYjQ5ZmVjZDdhZDdiZWI3NzllNjYxMTJjNTU1
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNzY4LDYgKzc2OCwxMCBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVj
dG9yeShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3B5dGhvbi11bml0
dGVzdC1yZXN1bHRzJykKIAorICAgIGRlZiB3M2NfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rv
cnkoc2VsZik6CisgICAgICAgICIiIkFic29sdXRlIHBhdGggdG8gdGhlIHBsYWNlIHRvIHN0b3Jl
IHRoZSB0ZXN0IHJlc3VsdHMgKHVzZXMgLS13M2MtY29uZm9ybWFuY2UtZGlyZWN0b3J5KS4iIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3czYy1jb25mb3JtYW5jZS1yZXN1bHRz
JykKKwogICAgIGRlZiBkZWZhdWx0X3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICAi
IiJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkZWZhdWx0IHBsYWNlIHRvIHN0b3JlIHRoZSB0ZXN0IHJl
c3VsdHMuIiIiCiAgICAgICAgICMgUmVzdWx0cyBhcmUgc3RvcmUgcmVsYXRpdmUgdG8gdGhlIGJ1
aWx0IHByb2R1Y3RzIHRvIG1ha2UgaXQgZWFzeQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGEx
NTgxZjgxY2RlYmNjNDcyMzJmYTI1NWExNWY2N2ViZjE1Njg2ZAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHkK
QEAgLTAsMCArMSwyMTMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5j
LiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorIFRoaXMgc2NyaXB0IGV2YWx1YXRl
cyBXM0MgdGVzdHMgY29uZm9ybWFuY2UgYnk6CisgICAgLSBpbXBvcnRpbmcgVzNDIHRlc3RzIGFz
IFdlYktpdCB0ZXN0cyAodXNpbmcgd2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIpCisgICAgLSBn
ZW5lcmF0aW5nIGV4cGVjdGVkLnR4dCBmaWxlcyAodXNpbmcgcnVuLXdlYmtpdC10ZXN0cykKKyAg
ICAtIGNvbXB1dGluZyB3aGV0aGVyIGEgdGVzdCBpcyBwYXNzaW5nIG9yIG5vdCBieSBjaGVja2lu
ZyBQQVNTL0ZBSUwgYXNzZXJ0aW9ucyBvdXRwdXR0ZWQgd2l0aGluIHRoZSBleHBlY3RlZC50eHQg
ZmlsZXMKKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0
cGFyc2UKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9z
dAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZl
Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9leHBlY3RhdGlvbnMgaW1w
b3J0IFRlc3RFeHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcGxhdGZvcm1f
b3B0aW9ucworZnJvbSB3ZWJraXRweS53M2MudGVzdF9yZXN1bHRzX21hbmFnZXIgaW1wb3J0IFRl
c3RSZXN1bHRzTWFuYWdlcgorZnJvbSB3ZWJraXRweS53M2Mud2ViX3BsYXRmb3JtX3Rlc3RfaW1w
b3J0ZXIgaW1wb3J0IFdlYlBsYXRmb3JtVGVzdEltcG9ydGVyCisKK19sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKKworCitkZWYgdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJzZXIoaG9z
dCwgc2NyaXB0X25hbWUpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkK
KworICAgIGZvciBvcHQgaW4gcGxhdGZvcm1fb3B0aW9ucyh1c2VfZ2xvYnM9RmFsc2UpOgorICAg
ICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KG9wdC5nZXRfb3B0X3N0cmluZygpLCBhY3Rpb249b3B0
LmFjdGlvbiwgZGVzdD1vcHQuZGVzdCwgY29uc3Q9Z2V0YXR0cihvcHQsICdjb25zdCcpLCBoZWxw
PWdldGF0dHIob3B0LCAnaGVscCcpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0td2Via2l0
LXRlc3QtcnVubmVyJywgJy0yJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwK
KyAgICAgICAgaGVscD0nU2V0IFdlYktpdCBhcmNoaXRlY3R1cmUgV2ViS2l0MSBvciBXZWJLaXQy
IChkZWZhdWx0IFdLMSkuJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdzNjLXF1aWV0
JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nUHJp
bnQgbWluaW1hbCBsb2cuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXczYy12ZXJib3Nl
JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nUHJp
bnQgbWF4aW1hbCBsb2cuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdzNjLWwnLCAnLS13
M2MtbGlzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhl
bHA9J0xpc3QgYXZhaWxhYmxlIHRlc3QgZ3JvdXBzIGludG8gd2ViLXBsYXRmb3JtLXRlc3QgcmVw
b3NpdG9yeS4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy13M2MtdCcsICctLXczYy10ZXN0
c3VpdGUnLCBkZXN0PSd0ZXN0cycsIGRlZmF1bHQ9JycsCisgICAgICAgIGhlbHA9J0ltcG9ydCBh
bmQgcnVuIGEgc3BlY2lmaWMgbGlzdCBvZiB0ZXN0IGZvbGRlcnMgKC10IHRlc3RzdWl0ZTE6dGVz
dHN1aXRlMjouLi4pLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXczYy1zJywgJy0tdzNj
LXNraXAtcmVmcmVzaCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZWZhdWx0PVRydWUsIGRlc3Q9
J3czY19yZWZyZXNoJywKKyAgICAgICAgaGVscD0nRGlzYWJsZSByZWZyZXNoIG9mIHRlc3RzIChn
aXQgcHVsbCArIGltcG9ydCkuIEJ5IGRlZmF1bHQsIHRlc3RzIGFyZSByZWZyZXNoZWQuJykKKyAg
ICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdzNjLXYnLCAnLS13ZWItcGxhdGZvcm0tdGVzdHMtdmVy
c2lvbicsIGRlc3Q9J3dwdF92ZXJzaW9uJywKKyAgICAgICAgaGVscD0nQ2xvbmUgYSBzcGVjaWZp
YyB3ZWItcGxhdGZvcm0tdGVzdCByZXZpc2lvbiB1c2luZyB0aGUgcHJvdmlkZWQgc2hhIHZhbHVl
LiBCeSBkZWZhdWx0LCB1c2UgZmlsZSBjb21taXQgaW4gTGF5b3V0VGVzdHMvaW1wb3J0L3czYy4n
KQorCisgICAgcmV0dXJuIHBhcnNlcgorCisKK2NsYXNzIFczQ0NvbmZvcm1hbmNlUnVubmVyKG9i
amVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAg
IHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3Qu
ZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxm
Ll9yZXN1bHRzX21hbmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3Rlc3RzID0gTm9uZQorICAg
ICAgICBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzID0gTm9uZQorCisgICAgICAgIHNlbGYud2Vi
X3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIgPSBXZWJQbGF0Zm9ybVRlc3RJbXBvcnRlcihwb3J0LCBv
cHRpb25zKQorICAgICAgICBzZWxmLmltcG9ydGVkX3Rlc3RzX2RpcmVjdG9yeSA9IHNlbGYud2Vi
X3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5CisgICAgICAg
IHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwb3J0
LnczY19jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpLCAicnVubmVkLXRlc3RzIikKKwor
ICAgIGRlZiBjb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3BvcnQudzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkKKworICAg
IGRlZiBsYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5
KCksICJsYXlvdXQtdGVzdC1yZXN1bHRzIikKKworICAgIGRlZiB0ZXN0X3N1aXRlcyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIudGVzdF9zdWl0
ZXMoKQorCisgICAgZGVmIHJ1bl93ZWJraXRfdGVzdHMoc2VsZiwgcGFyYW1ldGVycyk6CisgICAg
ICAgIHRtcF9hcmdzID0gW3NlbGYuX3BvcnQucGF0aF90b19zY3JpcHQoJ3J1bi13ZWJraXQtdGVz
dHMnKV0gKyBwYXJhbWV0ZXJzCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGxhdGZvcm06Cisg
ICAgICAgICAgICB0bXBfYXJncy5hcHBlbmQoJy0tJyArIHNlbGYuX29wdGlvbnMucGxhdGZvcm0p
CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMud2Via2l0X3Rlc3RfcnVubmVyIGlzIFRydWU6Cisg
ICAgICAgICAgICB0bXBfYXJncy5hcHBlbmQoJy0yJykKKyAgICAgICAgRXhlY3V0aXZlKCkucnVu
X2NvbW1hbmQodG1wX2FyZ3MsIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvciwg
cmV0dXJuX3N0ZGVycj0oc2VsZi5fb3B0aW9ucy5fX2RpY3RfX1sndzNjX3F1aWV0J10pLCBkZWNv
ZGVfb3V0cHV0PUZhbHNlKQorCisgICAgZGVmIHJ1bl90ZXN0X2xpc3Qoc2VsZiwgdGVzdHMpOgor
ICAgICAgICB0ZXN0X2xpc3RfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5y
dW5uZWRfdGVzdHNfZGlyZWN0b3J5LCAndGVzdF9saXN0LnR4dCcpCisgICAgICAgIHdpdGggb3Bl
bih0ZXN0X2xpc3RfZmlsZW5hbWUsICd3KycpIGFzIG91dDoKKyAgICAgICAgICAgIGZvciB0ZXN0
IGluIHRlc3RzOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSh0ZXN0ICsgJ1xuJykKKyAgICAg
ICAgICAgIG91dC5jbG9zZSgpCisKKyAgICAgICAgcnVuX3dlYmtpdF9hcmdzID0gWyctcScsICct
LW5vLXJldHJ5LWZhaWx1cmVzJywgJy0tbm8tc2hvdy1yZXN1bHRzJywgJy0tZnVsbC1yZXN1bHRz
LWh0bWwnLCAnLS1yZXN1bHRzLWRpcmVjdG9yeT0nICsgc2VsZi5sYXlvdXRfdGVzdHNfcmVzdWx0
X2RpcmVjdG9yeSgpLCAnLS13cHRzZXJ2ZXItZG9jLXJvb3Q9JyArIHNlbGYucnVubmVkX3Rlc3Rz
X2RpcmVjdG9yeSwgJy0tdGVzdC1saXN0PScgKyB0ZXN0X2xpc3RfZmlsZW5hbWVdCisKKyAgICAg
ICAgc2VsZi5ydW5fd2Via2l0X3Rlc3RzKHJ1bl93ZWJraXRfYXJncykKKyAgICAgICAgc2VsZi5f
cmVzdWx0c19tYW5hZ2VyID0gVGVzdFJlc3VsdHNNYW5hZ2VyKHNlbGYuX3BvcnQsIHNlbGYucnVu
bmVkX3Rlc3RzX2RpcmVjdG9yeSwgc2VsZi5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSgp
LCBzZWxmLnRlc3RzKCkpCisgICAgICAgIHJldHVybiBzZWxmLl9yZXN1bHRzX21hbmFnZXIucHJv
Y2Vzc190ZXN0X3Jlc3VsdHMoKQorCisgICAgZGVmIHJlc3VsdHNfbWFuYWdlcihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdHNfbWFuYWdlcgorCisgICAgZGVmIHRlc3RzKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl90ZXN0cyBpcyBOb25lOgorICAgICAgICAgICAgdGVzdF9zdWl0
ZV9wYXRocyA9IFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0
b3J5LCB0ZXN0X3N1aXRlKSBmb3IgdGVzdF9zdWl0ZSBpbiBzZWxmLnRlc3Rfc3VpdGVzKCldCisg
ICAgICAgICAgICBzZWxmLl90ZXN0cyA9IHNlbGYuX3BvcnQudGVzdHModGVzdF9zdWl0ZV9wYXRo
cykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RzCisKKyAgICBkZWYgY29uZm9ybWFuY2VfcmVz
dWx0KHNlbGYsIHRlc3QpOgorICAgICAgICBpZiBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzIGlz
IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzID0gc2VsZi5yZXN1
bHRzX21hbmFnZXIoKS5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoKQorICAgICAgICByZXR1
cm4gc2VsZi5fY29uZm9ybWFuY2VfcmVzdWx0c1tzZWxmLnJlc3VsdHNfbWFuYWdlcigpLnczY190
ZXN0X25hbWUodGVzdCldCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLl9fZGljdF9fWyd3M2NfbGlzdCddIGlzIFRydWU6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLl9fZGljdF9fWyd3M2NfcmVm
cmVzaCddIGlzIFRydWU6CisgICAgICAgICAgICBfbG9nLmluZm8oJ0ltcG9ydGluZyB0ZXN0cy4u
LicpCisgICAgICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLmltcG9ydF90
ZXN0cygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmluZm8oJ1NraXBwaW5nIHRl
c3QgaW1wb3J0Li4uJykKKworICAgICAgICBfbG9nLmluZm8oJ0NvcHlpbmcgaW1wb3J0ZWRfdGVz
dHNfZGlyZWN0b3J5IGFzIHJ1bm5lZF90ZXN0X2RpcmVjdG9yeScpCisgICAgICAgICMgcnVubmVk
X3Rlc3RfZGlyZWN0b3J5IGlzIHVzZWQgdG8gcnVuIHRlc3RzIHNvIHRoYXQgaW1wb3J0ZWRfdGVz
dHNfZGlyZWN0b3J5IHJlbWFpbnMgY2xlYW4uCisgICAgICAgICMgcnVubmVkX3Rlc3RfZGlyZWN0
b3J5IGlzIHJlY3JlYXRlZCBlYWNoIHRpbWUgdG8gc3RhcnQgaW4gYSBjbGVhbiBzdGF0ZS4KKyAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5
KQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHl0cmVlKHNlbGYuaW1wb3J0ZWRfdGVzdHNf
ZGlyZWN0b3J5LCBzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnkpCisKKyAgICAgICAgX2xvZy5p
bmZvKCdSdW5uaW5nIHRlc3RzLi4uJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9saXN0KHNlbGYu
dGVzdHMoKSkKKworICAgICAgICBfbG9nLmluZm8oJ0dlbmVyYXRpbmcgY29uZm9ybWFuY2UgcmVz
dWx0cy4uLicpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnko
c2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICBzZWxmLndyaXRl
X2NvbmZvcm1hbmNlX3Jlc3VsdHMoKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
cHJpbnRfcmVzdWx0c190b19jb25zb2xlKHNlbGYpOgorICAgICAgICBzdW1tYXJ5ID0gc2VsZi5y
ZXN1bHRzX21hbmFnZXIoKS5zdW1tYXJ5KCkKKyAgICAgICAgX2xvZy5pbmZvKCdSdW4gJyArIHN0
cihzdW1tYXJ5Wyd0b3RhbCddKSArICcgdGVzdHMnKQorICAgICAgICBfbG9nLmluZm8oJ1Bhc3M6
ICcgKyBzdHIoc3VtbWFyeVsnbnVtX3Bhc3MnXSkpCisgICAgICAgIF9sb2cuaW5mbygnUGFydGlh
bDogJyArIHN0cihzdW1tYXJ5WydudW1fcGFydGlhbCddKSkKKyAgICAgICAgX2xvZy5pbmZvKCdG
YWlsOiAnICsgc3RyKHN1bW1hcnlbJ251bV9mYWlsJ10pKQorICAgICAgICBfbG9nLmluZm8oJ0Vy
cm9yOiAnICsgc3RyKHN1bW1hcnlbJ251bV9lcnJvciddKSkKKworICAgIGRlZiBwcmludF9wb3Rl
bnRpYWxfdGVzdF9leHBlY3RhdGlvbnNfdXBkYXRlKHNlbGYpOgorICAgICAgICB0ZXN0X2V4cGVj
dGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMoc2VsZi5fcG9ydCkubW9kZWwoKQorICAgICAgICBj
b25mb3JtYW5jZSA9IHNlbGYucmVzdWx0c19tYW5hZ2VyKCkuY29tcHV0ZV9jb25mb3JtYW5jZV9y
ZXN1bHRzKCkKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi50ZXN0cygpOgorICAgICAgICAgICAg
dzNjX3Rlc3RfbmFtZSA9IHNlbGYucmVzdWx0c19tYW5hZ2VyKCkudzNjX3Rlc3RfbmFtZSh0ZXN0
KQorICAgICAgICAgICAgd2tfdGVzdF9uYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKCdpbXBv
cnRlZCcsICd3M2MnLCAnd3B0JywgdzNjX3Rlc3RfbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCB0
ZXN0X2V4cGVjdGF0aW9ucy5oYXNfdGVzdCh3a190ZXN0X25hbWUpOgorICAgICAgICAgICAgICAg
IGlmIG5vdCBjb25mb3JtYW5jZVt3M2NfdGVzdF9uYW1lXSA9PSAnUEFTUyc6CisgICAgICAgICAg
ICAgICAgICAgIF9sb2cuaW5mbygndGVzdCAnICsgd2tfdGVzdF9uYW1lICsgJyBpcyBub3QgcGFz
c2luZycpCisgICAgICAgICAgICBlbGlmIGNvbmZvcm1hbmNlW3czY190ZXN0X25hbWVdID09ICdQ
QVNTJzoKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ3Rlc3QgJyArIHdrX3Rlc3RfbmFtZSAr
ICcgaXMgcGFzc2luZycpCisKKyAgICBkZWYgd3JpdGVfY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxm
KToKKyAgICAgICAgdGVzdF9ydW5faW5mbyA9IHt9CisgICAgICAgIHRlc3RfcnVuX2luZm9bJ3Bv
cnRfbmFtZSddID0gc2VsZi5fcG9ydC5wb3J0X25hbWUKKyAgICAgICAgdGVzdF9ydW5faW5mb1sn
dGVzdHNfdmVyc2lvbiddID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci53ZWJfcGxh
dGZvcm1fdGVzdF9zdWl0ZV92ZXJzaW9uKCkKKyAgICAgICAgdGVzdF9ydW5faW5mb1sncmVzdWx0
c19kaXJlY3RvcnknXSA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChzZWxmLmxheW91dF90ZXN0
c19yZXN1bHRfZGlyZWN0b3J5KCksIHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rvcnko
KSkKKyAgICAgICAgdGVzdF9ydW5faW5mb1sndGVzdHNfZGlyZWN0b3J5J10gPSBzZWxmLl9maWxl
c3lzdGVtLnJlbHBhdGgoc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLmNvbmZvcm1h
bmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHNlbGYucmVzdWx0c19tYW5hZ2VyKCku
d3JpdGVfY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0
b3J5KCksIHRlc3RfcnVuX2luZm8pCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAg
Y2xhc3MgTG9nSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgICAgICBkZWYgZm9y
bWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dp
bmcuSU5GTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVs
bmFtZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0
TWVzc2FnZSgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2Vy
LnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAg
aGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFu
ZGxlcikKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3Rk
ZXJyKToKKyAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgaG9zdCA9IEhvc3QoKQorICAgIHBh
cnNlciA9IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyKGhvc3QsIGhvc3QuZmlsZXN5c3RlbS5i
YXNlbmFtZShfX2ZpbGVfXykpCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9rbm93
bl9hcmdzKGFyZ3YpCisgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBs
YXRmb3JtLCBvcHRwYXJzZS5WYWx1ZXMoeyd3ZWJraXRfdGVzdF9ydW5uZXInOiBvcHRpb25zLndl
YmtpdF90ZXN0X3J1bm5lcn0pKQorCisgICAgcnVubmVyID0gVzNDQ29uZm9ybWFuY2VSdW5uZXIo
cG9ydCwgb3B0aW9ucykKKyAgICBpZiBydW5uZXIucnVuX3Rlc3RzKCk6CisgICAgICAgIHJ1bm5l
ci5wcmludF9yZXN1bHRzX3RvX2NvbnNvbGUoKQorICAgICAgICBydW5uZXIucHJpbnRfcG90ZW50
aWFsX3Rlc3RfZXhwZWN0YXRpb25zX3VwZGF0ZSgpCisgICAgICAgIF9sb2cuaW5mbygiUmVzdWx0
cyBleHBvcnRlZCBpbiAnIiArIHJ1bm5lci5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgp
ICsgIiciKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIHN5cy5leGl0KG1haW4o
c3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS93M2MvdGVzdF9yZXN1bHRzX21hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU1
YmYzNzIyYmViYjExNjVlNWZmZTQyN2I3YmE4NDg1Y2RiN2NiNwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5CkBAIC0w
LDAgKzEsMTM5IEBACisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9y
IHRoZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCBtYW5hZ2UgSlNPTiBh
bmQgcmVzdWx0cy5odG1sIGZpbGVzIGZvciBXM0MgdGVzdCByZXN1bHRzLgorIiIiCisKK2ltcG9y
dCBpbworaW1wb3J0IGpzb24KKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKKworCitjbGFzcyBUZXN0UmVzdWx0
c01hbmFnZXIob2JqZWN0KToKKworICAgIF9KU09OX1BSRUZJWCA9ICdBRERfQ09ORk9STUFOQ0Vf
UkVTVUxUUygnCisgICAgX0pTT05fU1VGRklYID0gJyk7JworCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnQsIGJhc2VfZGlyZWN0b3J5LCByZXN1bHRfZGlyLCB0ZXN0cyk6CisgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmls
ZXN5c3RlbQorICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdF9kaXIKKyAg
ICAgICAgc2VsZi5fdGVzdHMgPSB0ZXN0cworCisgICAgICAgICMgUm9vdCBkaXJlY3Rvcnkgb2Yg
VzNDIGltcG9ydGVkIHRlc3QKKyAgICAgICAgc2VsZi5fYmFzZV9kaXJlY3RvcnkgPSBiYXNlX2Rp
cmVjdG9yeQorCisgICAgZGVmIHczY190ZXN0X25hbWUoc2VsZiwgdGVzdCk6CisgICAgICAgIHJl
dHVybiBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgodGVzdCwgc2VsZi5fYmFzZV9kaXJlY3Rvcnkp
CisKKyAgICBkZWYgX2dldF90ZXN0X3Jlc3VsdHMoc2VsZiwgdGVzdHMsIHRlc3RfZGljdCwgcGF0
aCk6CisgICAgICAgIGZvciBrZXkgaW4gdGVzdF9kaWN0LmtleXMoKToKKyAgICAgICAgICAgIF9w
YXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIGtleSkKKyAgICAgICAgICAgIF9wb3Rl
bnRpYWxfdGVzdCA9IHRlc3RfZGljdFtrZXldCisgICAgICAgICAgICBpZiAnYWN0dWFsJyBpbiBf
cG90ZW50aWFsX3Rlc3Q6CisgICAgICAgICAgICAgICAgIyBTdG9yZSB0aGUgdGVzdAorICAgICAg
ICAgICAgICAgIHRlc3RzW19wYXRoXSA9IF9wb3RlbnRpYWxfdGVzdAorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAjIFByb2Nlc3Mgc3ViZGlyZWN0b3JpZXMKKyAgICAgICAgICAg
ICAgICBzZWxmLl9nZXRfdGVzdF9yZXN1bHRzKHRlc3RzLCBfcG90ZW50aWFsX3Rlc3QsIF9wYXRo
KQorCisgICAgZGVmIHByb2Nlc3NfdGVzdF9yZXN1bHRzKHNlbGYpOgorICAgICAgICB0ZXN0X3Jl
c3VsdHMgPSB7fQorICAgICAgICByZXN1bHRzX2pzb25fcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgJ2Z1bGxfcmVzdWx0cy5qc29uJykKKyAgICAg
ICAgcmVzdWx0c19qc29uID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5sb2FkX2pzb24oc2VsZi5f
ZmlsZXN5c3RlbSwgcmVzdWx0c19qc29uX3BhdGgpCisgICAgICAgIHBhdGggPSBzZWxmLl9maWxl
c3lzdGVtLnNlcCBpZiBzZWxmLl9maWxlc3lzdGVtLmlzYWJzKHNlbGYuX2Jhc2VfZGlyZWN0b3J5
KSBlbHNlICcnCisgICAgICAgIHNlbGYuX2dldF90ZXN0X3Jlc3VsdHModGVzdF9yZXN1bHRzLCBy
ZXN1bHRzX2pzb25bJ3Rlc3RzJ10sIHBhdGgpCisgICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMK
KworICAgIGRlZiBfY29tcHV0ZV9jb25mb3JtYW5jZV9zdGF0dXMoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0X3Jlc3VsdHMpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHRl
c3RfbmFtZSkKKyAgICAgICAgaWYgdGV4dCBpcyBOb25lIG9yIGxlbih0ZXh0KSA9PSAwOgorICAg
ICAgICAgICAgIyBpZiB0aGUgZW1wdHkgZXhwZWN0ZWQgZmlsZSwgdGVzdCBtYXkgYmUgZmFpbGlu
ZyBvciBhIHJlZiB0ZXN0LgorICAgICAgICAgICAgIyBMZXQncyBmaW5kIG91dCBmcm9tIGpzb24g
cmVzdWx0cyBpZiB0aGUgdGVzdCBpcyBmYWlsaW5nLgorICAgICAgICAgICAgaWYgdGVzdF9uYW1l
IGluIHRlc3RfcmVzdWx0cyBhbmQgJ2FjdHVhbCcgaW4gdGVzdF9yZXN1bHRzW3Rlc3RfbmFtZV06
CisgICAgICAgICAgICAgICAgcmVhc29uID0gdGVzdF9yZXN1bHRzW3Rlc3RfbmFtZV1bJ2FjdHVh
bCddCisgICAgICAgICAgICAgICAgaWYgcmVhc29uID09ICdDUkFTSCcgb3IgcmVhc29uID09ICdU
SU1FT1VUJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbgorICAgICAgICAgICAg
ICAgIHJldHVybiAnRVJST1InCisgICAgICAgICAgICAjIFRPRE86IFdlIG1heSB3YW50IHRvIHZh
bGlkYXRlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBhIHJlZiB0ZXN0CisgICAgICAgICAgICByZXR1
cm4gJ1BBU1MnCisgICAgICAgICMgTGV0J3MgY2hlY2sgd2hldGhlciBzb21lIGxpbmVzIHN0YXJ0
IHdpdGggUEFTUyBvciBGQUlMCisgICAgICAgICMgVGVzdCBpcyBzYWlkIHRvIFBBU1MgaWYgYXQg
bGVhc3Qgb25lIGxpbmUgaXMgUEFTUyBhbiBubyBsaW5lIGlzIEZBSUwKKyAgICAgICAgaGFzRmFp
bCA9IEZhbHNlCisgICAgICAgIGhhc1Bhc3MgPSBGYWxzZQorICAgICAgICBidWYgPSBpby5TdHJp
bmdJTyh1bmljb2RlKHRleHQsICJ1dGYtOCIpKQorICAgICAgICBmb3IgbGluZSBpbiBidWYucmVh
ZGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BBU1MnKToKKyAgICAg
ICAgICAgICAgICBoYXNQYXNzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dp
dGgoJ0ZBSUwnKToKKyAgICAgICAgICAgICAgICBoYXNGYWlsID0gVHJ1ZQorICAgICAgICBpZiBo
YXNQYXNzOgorICAgICAgICAgICAgcmV0dXJuICdQQVJUSUFMJyBpZiBoYXNGYWlsIGVsc2UgJ1BB
U1MnCisgICAgICAgIGlmIGhhc0ZhaWw6CisgICAgICAgICAgICByZXR1cm4gJ0ZBSUwnCisgICAg
ICAgIHJldHVybiAnRVJST1InCisKKyAgICBkZWYgY29tcHV0ZV9jb25mb3JtYW5jZV9yZXN1bHRz
KHNlbGYpOgorICAgICAgICBzdGF0dXMgPSB7fQorICAgICAgICB0ZXN0X3Jlc3VsdHMgPSBzZWxm
LnByb2Nlc3NfdGVzdF9yZXN1bHRzKCkKKyAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90
ZXN0czoKKyAgICAgICAgICAgIHN0YXR1c1tzZWxmLnczY190ZXN0X25hbWUodGVzdF9uYW1lKV0g
PSBzZWxmLl9jb21wdXRlX2NvbmZvcm1hbmNlX3N0YXR1cyh0ZXN0X25hbWUsIHRlc3RfcmVzdWx0
cykKKyAgICAgICAgcmV0dXJuIHN0YXR1cworCisgICAgZGVmIHN1bW1hcnkoc2VsZik6CisgICAg
ICAgIG51bV9wYXNzID0gbnVtX3BhcnRpYWwgPSBudW1fZmFpbCA9IG51bV9lcnJvciA9IDAKKyAg
ICAgICAgc3RhdHVzID0gc2VsZi5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoKQorICAgICAg
ICBmb3IgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RzOgorICAgICAgICAgICAgcmVzdWx0ID0gc3Rh
dHVzW3NlbGYudzNjX3Rlc3RfbmFtZSh0ZXN0X25hbWUpXQorICAgICAgICAgICAgaWYgcmVzdWx0
ID09ICdQQVNTJzoKKyAgICAgICAgICAgICAgICBudW1fcGFzcyArPSAxCisgICAgICAgICAgICBl
bGlmIHJlc3VsdCA9PSAnUEFSVElBTCc6CisgICAgICAgICAgICAgICAgbnVtX3BhcnRpYWwgKz0g
MQorICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gJ0ZBSUwnOgorICAgICAgICAgICAgICAgIG51
bV9mYWlsICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnVtX2Vycm9y
ICs9IDEKKyAgICAgICAgc3VtbWFyeSA9IHt9CisgICAgICAgIHN1bW1hcnlbJ3RvdGFsJ10gPSBu
dW1fcGFzcyArIG51bV9mYWlsICsgbnVtX3BhcnRpYWwgKyBudW1fZXJyb3IKKyAgICAgICAgc3Vt
bWFyeVsnbnVtX3Bhc3MnXSA9IG51bV9wYXNzCisgICAgICAgIHN1bW1hcnlbJ251bV9mYWlsJ10g
PSBudW1fZmFpbAorICAgICAgICBzdW1tYXJ5WydudW1fcGFydGlhbCddID0gbnVtX3BhcnRpYWwK
KyAgICAgICAgc3VtbWFyeVsnbnVtX2Vycm9yJ10gPSBudW1fZXJyb3IKKyAgICAgICAgcmV0dXJu
IHN1bW1hcnkKKworICAgIGRlZiB3cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKHNlbGYsIHBhdGgs
IHRlc3RfcnVuX2luZm8pOgorICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgcmVzdWx0c1sn
Y29uZm9ybWFuY2VfcmVzdWx0cyddID0gc2VsZi5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMo
KQorICAgICAgICByZXN1bHRzLnVwZGF0ZSh0ZXN0X3J1bl9pbmZvKQorICAgICAgICAjIGNvcHkg
Y29uZm9ybWFuY2UgcmVzdWx0cyBhcyBqc29uIGRhdGEKKyAgICAgICAganNvbl9zdHJpbmcgPSBq
c29uLmR1bXBzKHJlc3VsdHMsIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAganNvbl9z
dHJpbmcgPSBzZWxmLl9KU09OX1BSRUZJWCArIGpzb25fc3RyaW5nICsgc2VsZi5fSlNPTl9TVUZG
SVgKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHBhdGgsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5qc29uJyksIGpzb25fc3Ry
aW5nKQorICAgICAgICAjIGNvcHkgaHRtbCB0ZW1wbGF0ZQorICAgICAgICByZXN1bHRzX2ZpbGUg
PSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnLCAnaW1wb3J0
ZWQnLCAndzNjJywgJ3Jlc291cmNlcycsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sJykK
KyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocmVzdWx0c19maWxlKToKKyAgICAg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUocmVzdWx0c19maWxlLCBzZWxmLl9maWxl
c3lzdGVtLmpvaW4ocGF0aCwgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwnKSkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDVmNTQxMjdlMzFmMDk4NzRkY2Q5MDQ5N2E0NGEx
OTA5ZDQ1ODE0ZTcuLjQ3YzMwMmNiNjJmZWRiOTlmOGE0ZDdiYWJlMjIwY2Q2ODkzZWI3MjMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE0LTEyLTIz
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2UgdGVzdGluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzY2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgdzNjX2NvbmZvcm1hbmNl
X3Jlc3VsdHMuaHRtbCBpcyB0aGUgZ2VuZXJpYyBmaWxlIHRoYXQgY2FuIGRpc3BsYXkgY29uZm9y
bWFuY2UganNvbiByZXN1bHRzIG91dHB1dHRlZCBieSBydW5fdzNjX2NvbmZvcm1hbmNlLgorCisg
ICAgICAgICogcmVzb3VyY2VzL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWw6IEFkZGVkLgor
CiAyMDE0LTExLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+
CiAKICAgICAgICAgSW1wb3J0IHczYyB0ZXN0cyBmb3IgY2FudmFzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL3czY19jb25mb3JtYW5jZV9y
ZXN1bHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjMzOTc2ZGRkNzBlYzhlMjU2NmFjMTY1MjUwYjZhMTBm
YzcxNTY5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNv
dXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbApAQCAtMCwwICsxLDQzMCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3Jlc3VsdHMgeworCWRpc3Bs
YXk6IHRhYmxlOworICAgIHBhZGRpbmc6IDIwcHg7CisJY2xlYXI6IGJvdGg7Cit9Cisjc3VtbWFy
eSB7CisgICAgbWFyZ2luLXRvcDogMjBweDsKKyAgICBtYXJnaW4tYm90dG9tOiAyMHB4OworfQor
CisudGVzdCwgLmZpcnN0bGluZSB7CisJZGlzcGxheTogdGFibGU7Cit9CisudGVzdG5hbWUsIC50
ZXN0cmVzdWx0LCAuZmlyc3RMaW5lID4gZGl2IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsYXZl
bmRlcjsKKyAgICBib3JkZXItYm90dG9tOnNvbGlkIDFweCB3aGl0ZTsKK30KKworLmZpcnN0TGlu
ZUNlbGx7CisJZGlzcGxheTogdGFibGUtY2VsbDsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJd2lk
dGg6IDgwMHB4OworfQorCisuc2Vjb25kTGluZUNlbGwgeworCWRpc3BsYXk6IHRhYmxlLWNlbGw7
CisJcGFkZGluZy1sZWZ0OiA1MHB4OworCXdpZHRoOiA3NTBweDsKK30KKworLnRlc3RuYW1lIHsK
KwlkaXNwbGF5OiB0YWJsZS1jZWxsOworCXdpZHRoOiA4MDBweDsKKwltYXJnaW4tbGVmdDoyMHB4
OworfQorCisudGVzdHJlc3VsdCwgLnBvcnQgeworCWRpc3BsYXk6IHRhYmxlLWNlbGw7CisJd2lk
dGg6IDI1MHB4OworCXRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLnRlc3RyZXN1bHQgYSB7Cisg
ICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Cit9CisKKy5wYXJ0aWFsLCAucGFzcywgLmZh
aWwsIC50aW1lb3V0LCAuZXJyb3IgeworCXRleHQtYWxpZ246IGNlbnRlcjsKK30KKy5wYXNzIGEg
eworICAgIGNvbG9yOiBncmVlbjsKK30KKworLnBhcnRpYWwgYSB7CisgICAgY29sb3I6IHllbGxv
dzsKK30KKworLmZhaWwgYSB7CisgICAgY29sb3I6IG9yYW5nZTsKK30KKworLnRpbWVvdXQgYSB7
CisgICAgY29sb3I6IHJlZDsKK30KKworLmNyYXNoIGEgeworICAgIGNvbG9yOiByZWQ7Cit9CisK
Ky5lcnJvciBhIHsKKyAgICBjb2xvcjogcmVkOworfQorCisuZXJyb3ItcmVzdWx0cy1oaXN0IHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisgICAgZmxvYXQ6IGxlZnQ7IAorfQorIAorLmZh
aWwtcmVzdWx0cy1oaXN0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBvcmFuZ2U7CisgICAgZmxv
YXQ6IGxlZnQ7Cit9CisKKy5wYXJ0aWFsLXJlc3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogeWVsbG93OworICAgIGZsb2F0OiBsZWZ0OworfQorLnBhc3MtcmVzdWx0cy1oaXN0IHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICBmbG9hdDogbGVmdDsKK30KKworLm1v
ZHVsZS1uYW1lIHsKKwlkaXNwbGF5OnRhYmxlLWNlbGw7CisJd2lkdGg6IDgwMHB4OworfQorCisu
bnVtYmVyLW9mLXRlc3RzIHsKKwlkaXNwbGF5OmlubGluZS1ibG9jazsKKwl3aWR0aDogNTBweDsK
K30KKworLm1vZHVsZS1yZXN1bHRzIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJZGlzcGxheTp0
YWJsZS1jZWxsOworCXdpZHRoOiAyNTBweDsKK30KKworLmhpc3RvZ3JhbSB7CisJZGlzcGxheTpp
bmxpbmUtYmxvY2s7CisJbWFyZ2luLWxlZnQ6IDQwcHg7CisJbWFyZ2luLXRvcDogNXB4OworCXdp
ZHRoOjE1MHB4OworfQorCisubW9kdWxleworICAgIGJhY2tncm91bmQtY29sb3I6IGxhdmVuZGVy
OworICAgIGJvcmRlcjpzb2xpZCAxcHggd2hpdGU7CisJZGlzcGxheTp0YWJsZTsKK30KKworLm1v
ZHVsZS1zdW1tYXJ5LCAuc2Vjb25kTGluZSB7CisJZGlzcGxheTp0YWJsZTsKKyAgICBiYWNrZ3Jv
dW5kOiBsYXZlbmRlcjsKKyAgICBib3JkZXI6c29saWQgMXB4IHdoaXRlOworICAgIGhlaWdodDog
MjVweDsKKyAgICBjdXJzb3I6cG9pbnRlcjsKK30KKworLmJveHsKKwlkaXNwbGF5OiB0YWJsZTsK
K30KKworLmhpZGRlbi1kYXRhIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKKy5sZWdlbmQgPiBk
aXYgeworCWZsb2F0OiBsZWZ0OworCW1hcmdpbi1yaWdodDogNXB4OworCW1pbi13aWR0aDogMjBw
eDsKK30KKworLmxlZ2VuZCB7Cit9Cis8L3N0eWxlPgorPHNjcmlwdD4KKworZnVuY3Rpb24gZ2V0
VGVzdHNEaXJlY3RvcnkocmVzdWx0cykKK3sKKyAgICByZXR1cm4gKHJlc3VsdHMucm9vdF9kaXJl
Y3RvcnkgPyByZXN1bHRzLnJvb3RfZGlyZWN0b3J5IDogcmVzdWx0cy5wb3J0X25hbWUpICsgIi8i
ICsgCisgICAgICAgICAgICAocmVzdWx0cy50ZXN0c19kaXJlY3RvcnkgPyByZXN1bHRzLnRlc3Rz
X2RpcmVjdG9yeSA6ICJpbXBvcnRlZC10ZXN0cyIpCit9CisKK2Z1bmN0aW9uIGdldFJlc3VsdHNE
aXJlY3RvcnkocmVzdWx0cykKK3sKKyAgICByZXR1cm4gKHJlc3VsdHMucm9vdF9kaXJlY3Rvcnkg
PyByZXN1bHRzLnJvb3RfZGlyZWN0b3J5IDogcmVzdWx0cy5wb3J0X25hbWUpICsgIi8iICsgCisg
ICAgICAgICAgICAocmVzdWx0cy5yZXN1bHRzX2RpcmVjdG9yeSA/IHJlc3VsdHMucmVzdWx0c19k
aXJlY3RvcnkgOiAibGF5b3V0LXRlc3QtcmVzdWx0cyIpCit9CisKK2Z1bmN0aW9uIGdldFRlc3RM
aW5rKHRlc3RuYW1lLCByZXN1bHRzKQoreworICAgIHJldHVybiAiPGRpdiBzdHlsZT0nZmxvYXQ6
bGVmdDsgbWFyZ2luLXJpZ2h0OjEwcHgnPjxhIGhyZWY9JyIgKyBnZXRUZXN0c0RpcmVjdG9yeShy
ZXN1bHRzKSArICIvIiArIHRlc3RuYW1lICsgIic+IiArIHRlc3RuYW1lICsgIjwvYT48L2Rpdj4i
CisgICAgICAgICsgIjxkaXY+KDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2Jsb2IvIiArIHJlc3VsdHMudGVzdHNfdmVyc2lvbiArICIvIiArIHRlc3Ru
YW1lICsgIic+Z2l0aHViPC9hPik8L2Rpdj4iIAorfQorCitmdW5jdGlvbiBnZXRUZXN0UmVzdWx0
TGluayh0ZXN0bmFtZSwgcmVzdWx0LCByZXN1bHRzKQoreworCXN1ZmZpeCA9ICIuIiArIHRlc3Ru
YW1lLnNwbGl0KCcuJykucG9wKCkKKwluZXdfc3VmZml4ID0gIi1leHBlY3RlZC50eHQiCisJaWYg
KHJlc3VsdC50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PSAiY3Jhc2giKQorCQluZXdfc3VmZml4ID0g
Ii1jcmFzaC1sb2cudHh0IgorCXJldHVybiAiPGEgaHJlZj0nIiArIGdldFRlc3RzRGlyZWN0b3J5
KHJlc3VsdHMpICsgIi8iICsgdGVzdG5hbWUucmVwbGFjZShzdWZmaXgsIG5ld19zdWZmaXgpICsg
Iic+IiArIHJlc3VsdC50b0xvd2VyQ2FzZSgpICsgIjwvYT4iCit9CisKK2Z1bmN0aW9uIHRlc3RT
dWl0ZUhpc3QobnVtRXJyb3IsIG51bUZhaWwsIG51bVBhcnRpYWwsIG51bVBhc3MpCit7CisgICAg
dmFyIHRvdGFsID0gbnVtRXJyb3IgKyBudW1QYXNzICsgbnVtUGFydGlhbCArIG51bUZhaWw7CisK
KyAgICBodG1sID0gJzxkaXYgY2xhc3M9Im1vZHVsZS1yZXN1bHRzIj4nCisKKyAgICBodG1sICs9
ICc8ZGl2IGNsYXNzPSJudW1iZXItb2YtdGVzdHMiPicgKyBudW1QYXNzICsgJy8nICsgdG90YWwg
KyAnPC9kaXY+JworCisJaHRtbCArPSAnPGRpdiBjbGFzcz0iaGlzdG9ncmFtIj4nCisgICAgaWYg
KG51bUVycm9yKQorICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJlcnJvci1yZXN1bHRzLWhp
c3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51bUVycm9yIC8gdG90YWwpICsgJyUiPiZuYnNw
OzwvZGl2PicKKyAgICBpZiAobnVtRmFpbCkKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0i
ZmFpbC1yZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51bUZhaWwgLyB0b3Rh
bCkgICsgJyUiPiZuYnNwOzwvZGl2PicKKyAgICBpZiAobnVtUGFydGlhbCkKKyAgICAgICAgaHRt
bCArPSAnPGRpdiBjbGFzcz0icGFydGlhbC1yZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsg
KDEwMCAqIG51bVBhcnRpYWwgLyB0b3RhbCkgKyAnJSI+Jm5ic3A7PC9kaXY+JworICAgIGlmIChu
dW1QYXNzKQorICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJwYXNzLXJlc3VsdHMtaGlzdCIg
c3R5bGU9IndpZHRoOicgKyAoMTAwICogbnVtUGFzcyAvIHRvdGFsKSArICclIj4mbmJzcDs8L2Rp
dj4nCisgICAgaHRtbCArPSAnPC9kaXY+JworCisgICAgcmV0dXJuIGh0bWwgKyAnPC9kaXY+JzsK
K30KKworZnVuY3Rpb24gZ2V0VGVzdHN1aXRlTW9kdWxlcyhyZXN1bHRzKQorIHsKKwl2YXIgbW9k
dWxlcyA9IHt9CisJLy8gZmlyc3QgdHJ5IHRvIG9ubHkgc2hvdyBtb2R1bGUgZnJvbSBVUkwgaGFz
aAorCXZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpCisJdmFyIGhh
c1Rlc3QgPSBmYWxzZQorCWlmIChoYXNoLmxlbmd0aCkKKwkJT2JqZWN0LmtleXMocmVzdWx0cy5j
b25mb3JtYW5jZV9yZXN1bHRzKQorCQkJLnNvcnQoKQorCQkJLmZvckVhY2goZnVuY3Rpb24oa2V5
LCBpKSB7CisJCQkJdmFyIHRlc3ROYW1lID0ga2V5CisJCQkJaWYgKHRlc3ROYW1lLmluZGV4T2Yo
aGFzaCkgPT0gMCkgeworCQkJCQloYXNUZXN0ID0gdHJ1ZQorCQkJCQl2YXIgaXRlbXMgPSB0ZXN0
TmFtZS5zcGxpdCgiLyIpCisJCQkJCXZhciBuYW1lID0gaXRlbXNbMF0KKwkJCQkJaWYgKG1vZHVs
ZXNbbmFtZV0pCisJCQkJCQltb2R1bGVzW25hbWVdLnB1c2goa2V5KQorCQkJCQllbHNlCisJCQkJ
CQltb2R1bGVzW25hbWVdID0gW2tleV0KKwkJCQl9CisJCX0pCisJaWYgKGhhc1Rlc3QpCisJCXJl
dHVybiBtb2R1bGVzCisJLy8gaWYgbm8gdGVzdHMsIHNob3cgYWxsIG1vZHVsZXMKKyAgICBPYmpl
Y3Qua2V5cyhyZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHMpCisgICAgICAgIC5zb3J0KCkKKyAg
ICAgICAgLmZvckVhY2goZnVuY3Rpb24oa2V5LCBpKSB7CisJCQl2YXIgdGVzdE5hbWUgPSBrZXkK
KwkJCXZhciBpdGVtcyA9IHRlc3ROYW1lLnNwbGl0KCIvIikKKwkJCXZhciBuYW1lID0gaXRlbXNb
MF0KKwkJCS8vIEluIGNhc2Ugb2YgaHRtbCBtb2R1bGUsIHdlIHNwbGl0IGFnYWluCisJCQlpZiAo
bmFtZSA9PSAnaHRtbCcpCisJCQkJbmFtZSArPSAnLycgKyBpdGVtc1sxXQorCQkJaWYgKG1vZHVs
ZXNbbmFtZV0pCisJCQkJbW9kdWxlc1tuYW1lXS5wdXNoKGtleSkKKwkJCWVsc2UKKwkJCQltb2R1
bGVzW25hbWVdID0gW2tleV0KKwl9KQorCXJldHVybiBtb2R1bGVzCisgfQorCitmdW5jdGlvbiB0
b2dnbGVUZXN0cyhkaXYpCit7CisJdmFyIGJveCA9IGRpdi5uZXh0RWxlbWVudFNpYmxpbmcKKwlp
ZiAoYm94KSB7CisJCWlmIChib3guY2xhc3NOYW1lID09ICdib3gnKQorICAgICAgICAgICAgYm94
LmNsYXNzTmFtZSA9J2hpZGRlbi1kYXRhJworCQllbHNlCisJCQlib3guY2xhc3NOYW1lID0gJ2Jv
eCcKKwl9Cit9CisKK2Z1bmN0aW9uIGNvbXB1dGVHbG9iYWxDb25mb3JtYW5jZShyZXN1bHRzKQor
eworCXZhciBzdW1tYXJ5ID0ge251bVBhc3M6IDAsIG51bVBhcnRpYWw6IDAsIG51bUZhaWw6IDAs
IG51bUVycm9yOiAwfQorCWZvciAodmFyIHRlc3QgaW4gcmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1
bHRzKSB7CisJCWlmIChyZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHMuaGFzT3duUHJvcGVydHko
dGVzdCkpIHsKKwkJCXJlc3VsdCA9IHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0c1t0ZXN0XQor
CQkJaWYgKHJlc3VsdCA9PSAiUEFTUyIpIHN1bW1hcnkubnVtUGFzcysrCisJCQllbHNlIGlmIChy
ZXN1bHQgPT0gIlBBUlRJQUwiKSBzdW1tYXJ5Lm51bVBhcnRpYWwrKworCQkJZWxzZSBpZiAocmVz
dWx0ID09ICJGQUlMIikgc3VtbWFyeS5udW1GYWlsKysKKwkJCWVsc2Ugc3VtbWFyeS5udW1FcnJv
cisrCisJCX0KKwl9CisJcmV0dXJuIHN1bW1hcnkKK30KKworZnVuY3Rpb24gY29tcHV0ZVN0YXRp
c3RpY3MocmVzdWx0c1N1bW1hcnksIHJlc3VsdCwgcmVzdWx0cykKK3sKKwlzdW1tYXJ5ID0gcmVz
dWx0c1N1bW1hcnlbcmVzdWx0cy5wb3J0X25hbWVdCisJaWYgKCFzdW1tYXJ5KQorCQlyZXN1bHRz
U3VtbWFyeVtyZXN1bHRzLnBvcnRfbmFtZV0gPSBzdW1tYXJ5ID0ge251bVBhc3M6IDAsIG51bVBh
cnRpYWw6IDAsIG51bUZhaWw6IDAsIG51bUVycm9yOiAwfQorCWlmIChyZXN1bHQgPT0gIlBBU1Mi
KSBzdW1tYXJ5Lm51bVBhc3MrKworCWVsc2UgaWYgKHJlc3VsdCA9PSAiUEFSVElBTCIpIHN1bW1h
cnkubnVtUGFydGlhbCsrCisJZWxzZSBpZiAocmVzdWx0ID09ICJGQUlMIikgc3VtbWFyeS5udW1G
YWlsKysKKwllbHNlIHN1bW1hcnkubnVtRXJyb3IrKworfQorCitmdW5jdGlvbiBhZGRUZXN0U3Vp
dGVMaXN0T2ZSZXN1bHRzKG1vZHVsZU5hbWUsIHRlc3RzLCBsaXN0T2ZSZXN1bHRzLCBpc09wZW4p
Cit7CisJdmFyIHJlc3VsdHNTdW1tYXJ5ID0gIHt9CisgICAgdmFyIG51bVBhc3MgPSBudW1QYXJ0
aWFsID0gbnVtRmFpbCA9IG51bUVycm9yID0gMAorICAgIHZhciBpbm5lckhUTUwgPSAiIgorICAg
IHRlc3RzLmZvckVhY2goZnVuY3Rpb24oa2V5LCBpKSB7CisJCQlpbm5lckhUTUwgKz0gIjxkaXYg
Y2xhc3M9J3Rlc3QnPjxkaXYgY2xhc3M9J3Rlc3RuYW1lJz4iICsgZ2V0VGVzdExpbmsoa2V5LCBs
aXN0T2ZSZXN1bHRzWzBdKSArICI8L2Rpdj4iCisJCQlsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVu
Y3Rpb24ocmVzdWx0cykgeworCQkJCXJlc3VsdCA9IHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0
c1trZXldCisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gIk1pc3NpbmciCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJX
QVJOSU5HOiB0ZXN0ICIgKyBrZXkgKyAiIGlzIG1pc3NpbmciKTsKKyAgICAgICAgICAgICAgICB9
CisJCQkJaW5uZXJIVE1MICs9ICI8ZGl2IGNsYXNzPSd0ZXN0cmVzdWx0ICIgKyByZXN1bHQudG9M
b3dlckNhc2UoKSArICInPiIgKyBnZXRUZXN0UmVzdWx0TGluayhrZXksIHJlc3VsdCwgcmVzdWx0
cykgKyAiPC9kaXY+IgorCQkJCWNvbXB1dGVTdGF0aXN0aWNzKHJlc3VsdHNTdW1tYXJ5LCByZXN1
bHQsIHJlc3VsdHMpCisJCQl9KQorCQkJaW5uZXJIVE1MICs9ICI8L2Rpdj4iCisgICAgICAgfSkK
KyAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJtb2R1bGUiPjxkaXYgY2xhc3M9Im1vZHVsZS1z
dW1tYXJ5IiBvbmNsaWNrPSJ0b2dnbGVUZXN0cyhldmVudC5jdXJyZW50VGFyZ2V0KSI+PGRpdiBj
bGFzcz0ibW9kdWxlLW5hbWUiPicgKyBtb2R1bGVOYW1lICsgJzwvZGl2PicKKwlsaXN0T2ZSZXN1
bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworCQl2YXIgc3VtbWFyeSA9IHJlc3VsdHNT
dW1tYXJ5W3Jlc3VsdHMucG9ydF9uYW1lXQorCQlodG1sICs9IHRlc3RTdWl0ZUhpc3Qoc3VtbWFy
eS5udW1FcnJvciwgc3VtbWFyeS5udW1GYWlsLCBzdW1tYXJ5Lm51bVBhcnRpYWwsIHN1bW1hcnku
bnVtUGFzcykKKwl9KQorCWh0bWwgKz0gJzwvZGl2PjxkaXYgY2xhc3M9IicgKyAoaXNPcGVuID8g
ImJveCIgOiAiaGlkZGVuLWRhdGEiKSArICciPic7CisgICAgaHRtbCArPSBpbm5lckhUTUwKKyAg
ICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJl
c3VsdHMiKS5pbm5lckhUTUwgKz0gaHRtbAorfQorCitmdW5jdGlvbiB3cml0ZVN1bW1hcnkoKQor
eworCXZhciBodG1sID0gIjxkaXY+VzNDIGNvbmZvcm1hbmNlIHJlc3VsdHMgZnJvbSBydW4td2Vi
a2l0LXRlc3QgKCIKKyAgICBsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykg
eworICAgICAgICBodG1sICs9ICI8YSBocmVmPSciICsgZ2V0UmVzdWx0c0RpcmVjdG9yeShyZXN1
bHRzKSArICInPiIgKyByZXN1bHRzLnBvcnRfbmFtZSArICI8L2E+ICZuYnNwOyIKKyAgICB9KQor
ICAgIGh0bWwgKz0gIik8L2Rpdj4iCisKKwlpZiAobGlzdE9mUmVzdWx0cy5sZW5ndGggPiAxKSB7
CisJCXZhciBzYW1lVGVzdFZlcnNpb24gPSB0cnVlCisJCWxpc3RPZlJlc3VsdHMuZm9yRWFjaChm
dW5jdGlvbihyZXN1bHRzKSB7CisJCQlpZiAobGlzdE9mUmVzdWx0c1swXS50ZXN0c192ZXJzaW9u
ICE9IHJlc3VsdHMudGVzdHNfdmVyc2lvbikgeworCQkJCXNhbWVUZXN0VmVyc2lvbiA9IGZhbHNl
CisgICAgICAgICAgICAgICAgaHRtbCArPSAiPGRpdj5XYXJuaW5nOiBXM0MgdGVzdCB2ZXJzaW9u
IGFyZSBub3QgdGhlIHNhbWUgZm9yIGFsbCBwbGF0Zm9ybXM6ICIKKyAgICAgICAgICAgICAgICBo
dG1sICs9IGxpc3RPZlJlc3VsdHNbMF0udGVzdHNfdmVyc2lvbiArICIgdnMgIiArIHJlc3VsdHMu
dGVzdHNfdmVyc2lvbiArICIgb2YgcGxhdGZvcm0gIiArIHJlc3VsdHMucG9ydF9uYW1lCisgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cykKKyAgICAgICAgICAgICAgICBodG1sICs9
ICI8L2Rpdj4iCisJCQl9CisJCX0pCisJCWlmICghc2FtZVRlc3RWZXJzaW9uKSB7LyoKKwkJCWh0
bWwgKz0gIjxkaXY+V2FybmluZzogVzNDIHRlc3QgdmVyc2lvbiBhcmUgbm90IHRoZSBzYW1lIGZv
ciBhbGwgcGxhdGZvcm1zOiAiCisgICAgICAgICAgICBodG1sICs9IGxpc3RPZlJlc3VsdHNbMF0u
dGVzdHNfdmVyc2lvbiArICIgdnMgIiArIHJlc3VsdHMudGVzdHNfdmVyc2lvbiArICIgb2YgcGxh
dGZvcm0gIiArIHJlc3VsdHMucG9ydF9uYW1lCisgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1
bHRzKQorICAgICAgICAgICAgaHRtbCArPSAiPC9kaXY+IiovCisgICAgICAgIH0KKwkJZWxzZSBp
ZiAobGlzdE9mUmVzdWx0c1swXS50ZXN0c192ZXJzaW9uID09ICJtYXN0ZXIiKQorCQkJaHRtbCAr
PSAiPGRpdj5XYXJuaW5nOiB1c2luZyBtYXN0ZXIgYXMgVzNDIHRlc3QgdmVyc2lvbjwvZGl2PiIK
Kwl9CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3VtbWFyeSIpLmlubmVySFRNTCA9
IGh0bWwKK30KKworZnVuY3Rpb24gZGlzcGxheVJlc3VsdHMoKQoreworICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSAgeworCXZhciBmaXJzdExpbmVIVE1MID0gIjxkaXYgY2xhc3M9J2ZpcnN0TGlu
ZSc+PGRpdiBjbGFzcz0nZmlyc3RMaW5lQ2VsbCc+TW9kdWxlL1Rlc3QgTmFtZTwvZGl2PiIKKwls
aXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworCQlmaXJzdExpbmVIVE1M
ICs9ICI8ZGl2IGNsYXNzPSdwb3J0Jz4iICsgcmVzdWx0cy5wb3J0X25hbWUudG9VcHBlckNhc2Uo
KSArICI8L2Rpdj4iCisJfSkKKwlmaXJzdExpbmVIVE1MICs9ICI8L2Rpdj4iCisJdmFyIHNlY29u
ZExpbmVIVE1MID0gIjxkaXYgY2xhc3M9J3NlY29uZExpbmUnPjxkaXYgY2xhc3M9J3NlY29uZExp
bmVDZWxsJz5PdmVyYWxsIGNvbmZvcm1hbmNlPC9kaXY+IgorCWxpc3RPZlJlc3VsdHMuZm9yRWFj
aChmdW5jdGlvbihyZXN1bHRzKSB7CisJCXN1bW1hcnkgPSBjb21wdXRlR2xvYmFsQ29uZm9ybWFu
Y2UocmVzdWx0cykKKwkJc2Vjb25kTGluZUhUTUwgKz0gdGVzdFN1aXRlSGlzdChzdW1tYXJ5Lm51
bUVycm9yLCBzdW1tYXJ5Lm51bUZhaWwsIHN1bW1hcnkubnVtUGFydGlhbCwgc3VtbWFyeS5udW1Q
YXNzKQorCX0pCisJc2Vjb25kTGluZUhUTUwgKz0gIjwvZGl2PiIKKworCWRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHRzIikuaW5uZXJIVE1MID0gZmlyc3RMaW5lSFRNTCArIHNlY29uZExp
bmVIVE1MCisJdmFyIG1vZHVsZXMgPSAgZ2V0VGVzdHN1aXRlTW9kdWxlcyhsaXN0T2ZSZXN1bHRz
WzBdKQorCXZhciBrZXlzID0gT2JqZWN0LmtleXMobW9kdWxlcykKKyAgICBrZXlzLnNvcnQoKS5m
b3JFYWNoKCBmdW5jdGlvbihrZXksIGkpIHsKKwkJYWRkVGVzdFN1aXRlTGlzdE9mUmVzdWx0cyhr
ZXksIG1vZHVsZXNba2V5XSwgbGlzdE9mUmVzdWx0cywga2V5cy5sZW5ndGggPT0gMSkKKwl9KQor
CXdyaXRlU3VtbWFyeShsaXN0T2ZSZXN1bHRzKQorICAgIH0sIDApCit9CisKKyAKK2xpc3RPZlJl
c3VsdHMgPSBbXSAKK2Z1bmN0aW9uIEFERF9DT05GT1JNQU5DRV9SRVNVTFRTKHJlc3VsdHMpCit7
CisgICAgcmVzdWx0cy5yb290X2RpcmVjdG9yeSA9IGRpcnNbY291bnRlcl0KKwlsaXN0T2ZSZXN1
bHRzLnB1c2gocmVzdWx0cykKKyAgICBzZXRUaW1lb3V0KGxvYWRTY3JpcHRzLCAwKQorICAgIAor
fQorCisvL3dpbmRvdy5vbmxvYWQgPSBkaXNwbGF5UmVzdWx0cwordmFyIGNvdW50ZXIKK3ZhciBk
aXJzCitmdW5jdGlvbiBsb2FkU2NyaXB0cyhkaXJlY3RvcmllcykKK3sKKyAgICBpZiAoZGlyZWN0
b3JpZXMpIHsKKyAgICAgICAgZGlycyA9IGRpcmVjdG9yaWVzCisgICAgICAgIGNvdW50ZXIgPSAt
MQorICAgIH0KKyAgICBpZiAoY291bnRlciA8IGRpcnMubGVuZ3RoIC0gMSkgeworICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeScpLmlubmVySFRNTCA9ICJMb2FkaW5nICIg
KyBkaXJzWysrY291bnRlcl0gKyAiLi4uIgorICAgICAgICB2YXIgaGVhZD0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKKyAgICAgICAgdmFyIHNjcmlwdD0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CisgICAgICAgIHNjcmlwdC50eXBlPSAndGV4dC9q
YXZhc2NyaXB0JzsKKyAgICAgICAgc2NyaXB0LnNyYz0gZGlyc1tjb3VudGVyXSArICcvdzNjX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMuanNvbic7CisgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0
KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
dW1tYXJ5JykuaW5uZXJIVE1MID0gIkRpc3BsYXlpbmcgcmVzdWx0cy4uLiIKKyAgICAgICAgc2V0
VGltZW91dChkaXNwbGF5UmVzdWx0cywgMCkKKyAgICB9Cit9CisKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8ZGl2IGlkPSJzdW1tYXJ5Ij4KKyAgICBMb2FkaW5nLi4uCis8L2Rpdj4KKzxk
aXYgY2xhc3M9ImxlZ2VuZCI+CisJPGRpdiBjbGFzcz0iZXJyb3ItcmVzdWx0cy1oaXN0IGxlZ2Vu
ZCI+Jm5ic3A7PC9kaXY+CisJPGRpdj5FcnJvciwgVGltZW91dCBvciBDcmFzaDwvZGl2PgorCTxk
aXYgY2xhc3M9ImZhaWwtcmVzdWx0cy1oaXN0IGxlZ2VuZCI+Jm5ic3A7PC9kaXY+CisJPGRpdj4g
QWxsIGFzc2VydGlvbnMgZmFpbGluZzwvZGl2PgorCTxkaXYgY2xhc3M9InBhcnRpYWwtcmVzdWx0
cy1oaXN0IGxlZ2VuZCI+Jm5ic3A7PC9kaXY+CisJPGRpdj4gU29tZSBhc3NlcnRpb25zIHBhc3Np
bmc8L2Rpdj4KKwk8ZGl2IGNsYXNzPSJwYXNzLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwv
ZGl2PgorCTxkaXY+IEFsbCBhc3NlcnRpb25zIHBhc3Npbmc8L2Rpdj4KKzwvZGl2PgorPGRpdiBp
ZD0icmVzdWx0cyI+Cis8L2Rpdj4KKzwhLS0gcGxhY2UgYXMgbWFueSAuanNvbiBmaWxlIGFzIG5l
ZWRlZCAtLT4KKzxzY3JpcHQ+CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
bG9hZFNjcmlwdHMoWworICAgICAgICAgICAgIi4iCisgICAgICAgIF0pCisgICAgfSwgMCkKKzwv
c2NyaXB0PgorPCEtLXNjcmlwdCBzcmM9ImVmbC93M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5qc29u
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJndGsvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuanNv
biI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ibWFjL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpz
b24iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Im1hYy13azIvdzNjX2NvbmZvcm1hbmNlX3Jlc3Vs
dHMuanNvbiI+PC9zY3JpcHQtLT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243703</attachid>
            <date>2014-12-23 15:37:10 -0800</date>
            <delta_ts>2015-01-13 07:45:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134766-20141224003710.patch</filename>
            <type>text/plain</type>
            <size>35449</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGM2N2ZmOWVjZDIxOWYwYjhjOGEyZDcwNmY1MWQ2Yjgx
NjU3Y2UxYS4uYTljOThhZjdlNTZiNDQ5YWVlYjgzNDQzZjJmYjc5MjAyM2NjYmJkZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUy
IEBACisyMDE0LTEyLTIzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2Ug
dGVzdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0NzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzIGlzIHRoZSBleGVjdXRhYmxlIHRvIHRl
c3QgV2ViIFBsYXRmb3JtIHRlc3QgY29uZm9ybWFuY2UuCisgICAgICAgIFJlc3VsdHMgYXJlIHN0
b3JlZCBieSBkZWZhdWx0IGluIGEgV2ViS2l0QnVpbGQgc3ViLWZvbGRlciAoc2VlIFBvcnQudzNj
X2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KS4KKyAgICAgICAgU2NyaXB0cy93ZWJraXRw
eS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weSBpcyB0aGUgbWFpbiBzY3JpcHQuCisg
ICAgICAgIEl0IHVzZXMgd3B0IHRlc3QgaW1wb3J0ZXIgdG8gY2xvbmUgYW5kIGltcG9ydCB0aGUg
dGVzdHMuCisgICAgICAgIEl0IHRoZW4gdXNlcyBydW4td2Via2l0LXRlc3QgdG8gcnVuIHRoZSB0
ZXN0cyBhbmQgZ2VuZXJhdGUgdGhlIC1leHBlY3RlZC50eHQgZmlsZXMuCisgICAgICAgIEZyb20g
dGhlIC1leHBlY3RlZC50eHQgZmlsZXMsIGl0IGNvbXB1dGVzIHdoZXRoZXIgdGhlIHRlc3QgaXMg
cGFzc2luZywgcGFydGlhbGx5IHBhc3Npbmcgb3IgZmFpbGluZy4KKyAgICAgICAgUmVzdWx0cyBh
cmUgb3V0cHV0dGVkIHRocm91Z2ggVGVzdFJlc3VsdHNNYW5hZ2VyIGFzIGEganNvbiBmaWxlIHRo
YXQgY2FuIGJlIGxvYWRlZCB1c2luZyB3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sLgorCisg
ICAgICAgICogU2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQudzNjX2Nv
bmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KTogUGF0aCB0byB0aGUgd29ya2luZyBkaXJlY3Rv
cnkgZm9yIGNvbmZvcm1hbmNlIHRlc3RpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93
M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weTogQWRkZWQuCisgICAgICAgICh3M2NfY3Jl
YXRlX2FyZ3VtZW50X3BhcnNlcik6CisgICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lcik6Cisg
ICAgICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci5fX2luaXRfXyk6CisgICAgICAgIChXM0NDb25m
b3JtYW5jZVJ1bm5lci5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgIChX
M0NDb25mb3JtYW5jZVJ1bm5lci5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSk6CisgICAg
ICAgIChXM0NDb25mb3JtYW5jZVJ1bm5lci50ZXN0X3N1aXRlcyk6CisgICAgICAgIChXM0NDb25m
b3JtYW5jZVJ1bm5lci5ydW5fd2Via2l0X3Rlc3RzKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNl
UnVubmVyLnJ1bl90ZXN0X2xpc3QpOgorICAgICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIucmVz
dWx0c19tYW5hZ2VyKToKKyAgICAgICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLnRlc3RzKToKKyAg
ICAgICAgKFczQ0NvbmZvcm1hbmNlUnVubmVyLmNvbmZvcm1hbmNlX3Jlc3VsdCk6CisgICAgICAg
IChXM0NDb25mb3JtYW5jZVJ1bm5lci5ydW5fdGVzdHMpOgorICAgICAgICAoVzNDQ29uZm9ybWFu
Y2VSdW5uZXIucHJpbnRfcmVzdWx0c190b19jb25zb2xlKToKKyAgICAgICAgKFczQ0NvbmZvcm1h
bmNlUnVubmVyLnByaW50X3BvdGVudGlhbF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUpOgorICAg
ICAgICAoVzNDQ29uZm9ybWFuY2VSdW5uZXIud3JpdGVfY29uZm9ybWFuY2VfcmVzdWx0cyk6Cisg
ICAgICAgIChjb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZy5M
b2dIYW5kbGVyKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIuZm9ybWF0
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3Rf
cmVzdWx0c19tYW5hZ2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlcik6
CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoVGVzdFJl
c3VsdHNNYW5hZ2VyLnczY190ZXN0X25hbWUpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2Vy
Ll9nZXRfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlci5wcm9jZXNz
X3Rlc3RfcmVzdWx0cyk6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX2NvbXB1dGVfY29u
Zm9ybWFuY2Vfc3RhdHVzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdlci5jb21wdXRlX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnN1bW1hcnkp
OgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLndyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMp
OgorCiAyMDE0LTEyLTE5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXaW5dIFJldmlzZSBEUlQgbG9naWMgdG8gbWF0Y2ggTWFjLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy9ydW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9y
dW4tdzNjLWNvbmZvcm1hbmNlLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZjAxNzVhODc2MmIwNWNiY2Rk
OWE3YWY5NjEyNTQxYjI5OTI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1
bi13M2MtY29uZm9ybWFuY2UtdGVzdHMKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhl
IG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgYXJvdW5kIHdlYmtpdHB5L3czYy9ydW5f
dzNjX2NvbmZvcm1hbmNlX3Rlc3RzLnB5IiIiCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQg
bXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcAorCittdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwLnJ1
bignd2Via2l0cHknLCAndzNjJywgJ3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHknKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBjOWU4NDlkNTQ0ZDQ0MDE5YzkyNDRiMmVk
ZjRjNTlkMWQ3OGQ2MTA5Li44YzA5ZDYwZWM0MzZjYjQ5ZmVjZDdhZDdiZWI3NzllNjYxMTJjNTU1
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNzY4LDYgKzc2OCwxMCBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVj
dG9yeShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3B5dGhvbi11bml0
dGVzdC1yZXN1bHRzJykKIAorICAgIGRlZiB3M2NfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rv
cnkoc2VsZik6CisgICAgICAgICIiIkFic29sdXRlIHBhdGggdG8gdGhlIHBsYWNlIHRvIHN0b3Jl
IHRoZSB0ZXN0IHJlc3VsdHMgKHVzZXMgLS13M2MtY29uZm9ybWFuY2UtZGlyZWN0b3J5KS4iIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3czYy1jb25mb3JtYW5jZS1yZXN1bHRz
JykKKwogICAgIGRlZiBkZWZhdWx0X3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICAi
IiJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkZWZhdWx0IHBsYWNlIHRvIHN0b3JlIHRoZSB0ZXN0IHJl
c3VsdHMuIiIiCiAgICAgICAgICMgUmVzdWx0cyBhcmUgc3RvcmUgcmVsYXRpdmUgdG8gdGhlIGJ1
aWx0IHByb2R1Y3RzIHRvIG1ha2UgaXQgZWFzeQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93M2MvcnVuX3czY19jb25mb3JtYW5jZV90ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0
YTYwYmQ1ZDU0ZjFkOWI0ZWMwZDIwYzEzNDljYTI2MjdiMDYzNQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3J1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMucHkK
QEAgLTAsMCArMSwyMTQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5j
LiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorIFRoaXMgc2NyaXB0IGV2YWx1YXRl
cyBXM0MgdGVzdHMgY29uZm9ybWFuY2UgYnk6CisgICAgLSBpbXBvcnRpbmcgVzNDIHRlc3RzIGFz
IFdlYktpdCB0ZXN0cyAodXNpbmcgd2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIpCisgICAgLSBn
ZW5lcmF0aW5nIGV4cGVjdGVkLnR4dCBmaWxlcyAodXNpbmcgcnVuLXdlYmtpdC10ZXN0cykKKyAg
ICAtIGNvbXB1dGluZyB3aGV0aGVyIGEgdGVzdCBpcyBwYXNzaW5nIG9yIG5vdCBieSBjaGVja2lu
ZyBQQVNTL0ZBSUwgYXNzZXJ0aW9ucyBvdXRwdXR0ZWQgd2l0aGluIHRoZSBleHBlY3RlZC50eHQg
ZmlsZXMKKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0
cGFyc2UKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9z
dAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZl
Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9leHBlY3RhdGlvbnMgaW1w
b3J0IFRlc3RFeHBlY3RhdGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcGxhdGZvcm1f
b3B0aW9ucworZnJvbSB3ZWJraXRweS53M2MudGVzdF9yZXN1bHRzX21hbmFnZXIgaW1wb3J0IFRl
c3RSZXN1bHRzTWFuYWdlcgorZnJvbSB3ZWJraXRweS53M2Mud2ViX3BsYXRmb3JtX3Rlc3RfaW1w
b3J0ZXIgaW1wb3J0IFdlYlBsYXRmb3JtVGVzdEltcG9ydGVyCisKK19sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKKworCitkZWYgdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJzZXIoaG9z
dCwgc2NyaXB0X25hbWUpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkK
KworICAgIGZvciBvcHQgaW4gcGxhdGZvcm1fb3B0aW9ucyh1c2VfZ2xvYnM9RmFsc2UpOgorICAg
ICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KG9wdC5nZXRfb3B0X3N0cmluZygpLCBhY3Rpb249b3B0
LmFjdGlvbiwgZGVzdD1vcHQuZGVzdCwgY29uc3Q9Z2V0YXR0cihvcHQsICdjb25zdCcpLCBoZWxw
PWdldGF0dHIob3B0LCAnaGVscCcpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0td2Via2l0
LXRlc3QtcnVubmVyJywgJy0yJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwK
KyAgICAgICAgaGVscD0nU2V0IFdlYktpdCBhcmNoaXRlY3R1cmUgV2ViS2l0MSBvciBXZWJLaXQy
IChkZWZhdWx0IFdLMSkuJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdzNjLXF1aWV0
JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nUHJp
bnQgbWluaW1hbCBsb2cuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXczYy12ZXJib3Nl
JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nUHJp
bnQgbWF4aW1hbCBsb2cuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdzNjLWwnLCAnLS13
M2MtbGlzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhl
bHA9J0xpc3QgYXZhaWxhYmxlIHRlc3QgZ3JvdXBzIGludG8gd2ViLXBsYXRmb3JtLXRlc3QgcmVw
b3NpdG9yeS4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy13M2MtdCcsICctLXczYy10ZXN0
c3VpdGUnLCBkZXN0PSd0ZXN0cycsIGRlZmF1bHQ9JycsCisgICAgICAgIGhlbHA9J0ltcG9ydCBh
bmQgcnVuIGEgc3BlY2lmaWMgbGlzdCBvZiB0ZXN0IGZvbGRlcnMgKC10IHRlc3RzdWl0ZTE6dGVz
dHN1aXRlMjouLi4pLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXczYy1zJywgJy0tdzNj
LXNraXAtcmVmcmVzaCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZWZhdWx0PVRydWUsIGRlc3Q9
J3czY19yZWZyZXNoJywKKyAgICAgICAgaGVscD0nRGlzYWJsZSByZWZyZXNoIG9mIHRlc3RzIChn
aXQgcHVsbCArIGltcG9ydCkuIEJ5IGRlZmF1bHQsIHRlc3RzIGFyZSByZWZyZXNoZWQuJykKKyAg
ICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdzNjLXYnLCAnLS13ZWItcGxhdGZvcm0tdGVzdHMtdmVy
c2lvbicsIGRlc3Q9J3dwdF92ZXJzaW9uJywKKyAgICAgICAgaGVscD0nQ2xvbmUgYSBzcGVjaWZp
YyB3ZWItcGxhdGZvcm0tdGVzdCByZXZpc2lvbiB1c2luZyB0aGUgcHJvdmlkZWQgc2hhIHZhbHVl
LiBCeSBkZWZhdWx0LCB1c2UgZmlsZSBjb21taXQgaW4gTGF5b3V0VGVzdHMvaW1wb3J0L3czYy4n
KQorCisgICAgcmV0dXJuIHBhcnNlcgorCisKK2NsYXNzIFczQ0NvbmZvcm1hbmNlUnVubmVyKG9i
amVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAg
IHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3Qu
ZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxm
Ll9yZXN1bHRzX21hbmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3Rlc3RzID0gTm9uZQorICAg
ICAgICBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzID0gTm9uZQorCisgICAgICAgIHNlbGYud2Vi
X3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIgPSBXZWJQbGF0Zm9ybVRlc3RJbXBvcnRlcihwb3J0LCBv
cHRpb25zKQorICAgICAgICBzZWxmLmltcG9ydGVkX3Rlc3RzX2RpcmVjdG9yeSA9IHNlbGYud2Vi
X3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5CisgICAgICAg
IHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwb3J0
LnczY19jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpLCAicnVubmVkLXRlc3RzIikKKwor
ICAgIGRlZiBjb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3BvcnQudzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkKKworICAg
IGRlZiBsYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5
KCksICJsYXlvdXQtdGVzdC1yZXN1bHRzIikKKworICAgIGRlZiB0ZXN0X3N1aXRlcyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIudGVzdF9zdWl0
ZXMoKQorCisgICAgZGVmIHJ1bl93ZWJraXRfdGVzdHMoc2VsZiwgcGFyYW1ldGVycyk6CisgICAg
ICAgIHRtcF9hcmdzID0gW3NlbGYuX3BvcnQucGF0aF90b19zY3JpcHQoJ3J1bi13ZWJraXQtdGVz
dHMnKV0gKyBwYXJhbWV0ZXJzCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGxhdGZvcm06Cisg
ICAgICAgICAgICB0bXBfYXJncy5hcHBlbmQoJy0tJyArIHNlbGYuX29wdGlvbnMucGxhdGZvcm0p
CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMud2Via2l0X3Rlc3RfcnVubmVyIGlzIFRydWU6Cisg
ICAgICAgICAgICB0bXBfYXJncy5hcHBlbmQoJy0yJykKKyAgICAgICAgIyBGSVhNRTogQ2FwdHVy
ZSBvdXRwdXQgYW5kIHRyYW5zZm9ybSBpdCB0byBkaXNwbGF5IHRlc3QgcnVubmluZyBwcm9ncmVz
cyBpbmZvcm1hdGlvbgorICAgICAgICBFeGVjdXRpdmUoKS5ydW5fY29tbWFuZCh0bXBfYXJncywg
ZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yLCByZXR1cm5fc3RkZXJyPShzZWxm
Ll9vcHRpb25zLnczY19xdWlldCksIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisKKyAgICBkZWYgcnVu
X3Rlc3RfbGlzdChzZWxmLCB0ZXN0cyk6CisgICAgICAgIHRlc3RfbGlzdF9maWxlbmFtZSA9IHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksICd0ZXN0X2xp
c3QudHh0JykKKyAgICAgICAgd2l0aCBvcGVuKHRlc3RfbGlzdF9maWxlbmFtZSwgJ3crJykgYXMg
b3V0OgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgb3V0
LndyaXRlKHRlc3QgKyAnXG4nKQorICAgICAgICAgICAgb3V0LmNsb3NlKCkKKworICAgICAgICBy
dW5fd2Via2l0X2FyZ3MgPSBbJy1xJywgJy0tbm8tcmV0cnktZmFpbHVyZXMnLCAnLS1uby1zaG93
LXJlc3VsdHMnLCAnLS1mdWxsLXJlc3VsdHMtaHRtbCcsICctLXJlc3VsdHMtZGlyZWN0b3J5PScg
KyBzZWxmLmxheW91dF90ZXN0c19yZXN1bHRfZGlyZWN0b3J5KCksICctLXdwdHNlcnZlci1kb2Mt
cm9vdD0nICsgc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCAnLS10ZXN0LWxpc3Q9JyArIHRl
c3RfbGlzdF9maWxlbmFtZV0KKworICAgICAgICBzZWxmLnJ1bl93ZWJraXRfdGVzdHMocnVuX3dl
YmtpdF9hcmdzKQorICAgICAgICBzZWxmLl9yZXN1bHRzX21hbmFnZXIgPSBUZXN0UmVzdWx0c01h
bmFnZXIoc2VsZi5fcG9ydCwgc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLmxheW91
dF90ZXN0c19yZXN1bHRfZGlyZWN0b3J5KCksIHNlbGYudGVzdHMoKSkKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3Jlc3VsdHNfbWFuYWdlci5wcm9jZXNzX3Rlc3RfcmVzdWx0cygpCisKKyAgICBkZWYg
cmVzdWx0c19tYW5hZ2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0c19tYW5h
Z2VyCisKKyAgICBkZWYgdGVzdHMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Rlc3RzIGlzIE5v
bmU6CisgICAgICAgICAgICB0ZXN0X3N1aXRlX3BhdGhzID0gW3NlbGYuX2ZpbGVzeXN0ZW0uam9p
bihzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksIHRlc3Rfc3VpdGUpIGZvciB0ZXN0X3N1aXRl
IGluIHNlbGYudGVzdF9zdWl0ZXMoKV0KKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzID0gc2VsZi5f
cG9ydC50ZXN0cyh0ZXN0X3N1aXRlX3BhdGhzKQorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdHMK
KworICAgIGRlZiBjb25mb3JtYW5jZV9yZXN1bHQoc2VsZiwgdGVzdCk6CisgICAgICAgIGlmIHNl
bGYuX2NvbmZvcm1hbmNlX3Jlc3VsdHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2NvbmZv
cm1hbmNlX3Jlc3VsdHMgPSBzZWxmLnJlc3VsdHNfbWFuYWdlcigpLmNvbXB1dGVfY29uZm9ybWFu
Y2VfcmVzdWx0cygpCisgICAgICAgIHJldHVybiBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzW3Nl
bGYucmVzdWx0c19tYW5hZ2VyKCkudzNjX3Rlc3RfbmFtZSh0ZXN0KV0KKworICAgIGRlZiBydW5f
dGVzdHMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudzNjX2xpc3QgaXMgVHJ1ZToK
KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudzNj
X3JlZnJlc2ggaXMgVHJ1ZToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnSW1wb3J0aW5nIHRlc3Rz
Li4uJykKKyAgICAgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIuaW1wb3J0
X3Rlc3RzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcg
dGVzdCBpbXBvcnQuLi4nKQorCisgICAgICAgIF9sb2cuaW5mbygnQ29weWluZyBpbXBvcnRlZF90
ZXN0c19kaXJlY3RvcnkgYXMgcnVubmVkX3Rlc3RfZGlyZWN0b3J5JykKKyAgICAgICAgIyBydW5u
ZWRfdGVzdF9kaXJlY3RvcnkgaXMgdXNlZCB0byBydW4gdGVzdHMgc28gdGhhdCBpbXBvcnRlZF90
ZXN0c19kaXJlY3RvcnkgcmVtYWlucyBjbGVhbi4KKyAgICAgICAgIyBydW5uZWRfdGVzdF9kaXJl
Y3RvcnkgaXMgcmVjcmVhdGVkIGVhY2ggdGltZSB0byBzdGFydCBpbiBhIGNsZWFuIHN0YXRlLgor
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJtdHJlZShzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3Rv
cnkpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weXRyZWUoc2VsZi5pbXBvcnRlZF90ZXN0
c19kaXJlY3RvcnksIHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSkKKworICAgICAgICBfbG9n
LmluZm8oJ1J1bm5pbmcgdGVzdHMuLi4nKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2xpc3Qoc2Vs
Zi50ZXN0cygpKQorCisgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGluZyBjb25mb3JtYW5jZSBy
ZXN1bHRzLi4uJykKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9y
eShzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHNlbGYud3Jp
dGVfY29uZm9ybWFuY2VfcmVzdWx0cygpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBwcmludF9yZXN1bHRzX3RvX2NvbnNvbGUoc2VsZik6CisgICAgICAgIHN1bW1hcnkgPSBzZWxm
LnJlc3VsdHNfbWFuYWdlcigpLnN1bW1hcnkoKQorICAgICAgICBfbG9nLmluZm8oJ1J1biAnICsg
c3RyKHN1bW1hcnlbJ3RvdGFsJ10pICsgJyB0ZXN0cycpCisgICAgICAgIF9sb2cuaW5mbygnUGFz
czogJyArIHN0cihzdW1tYXJ5WydudW1fcGFzcyddKSkKKyAgICAgICAgX2xvZy5pbmZvKCdQYXJ0
aWFsOiAnICsgc3RyKHN1bW1hcnlbJ251bV9wYXJ0aWFsJ10pKQorICAgICAgICBfbG9nLmluZm8o
J0ZhaWw6ICcgKyBzdHIoc3VtbWFyeVsnbnVtX2ZhaWwnXSkpCisgICAgICAgIF9sb2cuaW5mbygn
RXJyb3I6ICcgKyBzdHIoc3VtbWFyeVsnbnVtX2Vycm9yJ10pKQorCisgICAgZGVmIHByaW50X3Bv
dGVudGlhbF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUoc2VsZik6CisgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0aW9ucyhzZWxmLl9wb3J0KS5tb2RlbCgpCisgICAgICAg
IGNvbmZvcm1hbmNlID0gc2VsZi5yZXN1bHRzX21hbmFnZXIoKS5jb21wdXRlX2NvbmZvcm1hbmNl
X3Jlc3VsdHMoKQorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLnRlc3RzKCk6CisgICAgICAgICAg
ICB3M2NfdGVzdF9uYW1lID0gc2VsZi5yZXN1bHRzX21hbmFnZXIoKS53M2NfdGVzdF9uYW1lKHRl
c3QpCisgICAgICAgICAgICB3a190ZXN0X25hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oJ2lt
cG9ydGVkJywgJ3czYycsICd3cHQnLCB3M2NfdGVzdF9uYW1lKQorICAgICAgICAgICAgaWYgbm90
IHRlc3RfZXhwZWN0YXRpb25zLmhhc190ZXN0KHdrX3Rlc3RfbmFtZSk6CisgICAgICAgICAgICAg
ICAgaWYgbm90IGNvbmZvcm1hbmNlW3czY190ZXN0X25hbWVdID09ICdQQVNTJzoKKyAgICAgICAg
ICAgICAgICAgICAgX2xvZy5pbmZvKCd0ZXN0ICcgKyB3a190ZXN0X25hbWUgKyAnIGlzIG5vdCBw
YXNzaW5nJykKKyAgICAgICAgICAgIGVsaWYgY29uZm9ybWFuY2VbdzNjX3Rlc3RfbmFtZV0gPT0g
J1BBU1MnOgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygndGVzdCAnICsgd2tfdGVzdF9uYW1l
ICsgJyBpcyBwYXNzaW5nJykKKworICAgIGRlZiB3cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKHNl
bGYpOgorICAgICAgICB0ZXN0X3J1bl9pbmZvID0ge30KKyAgICAgICAgdGVzdF9ydW5faW5mb1sn
cG9ydF9uYW1lJ10gPSBzZWxmLl9wb3J0LnBvcnRfbmFtZQorICAgICAgICB0ZXN0X3J1bl9pbmZv
Wyd0ZXN0c192ZXJzaW9uJ10gPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLndlYl9w
bGF0Zm9ybV90ZXN0X3N1aXRlX3ZlcnNpb24oKQorICAgICAgICB0ZXN0X3J1bl9pbmZvWydyZXN1
bHRzX2RpcmVjdG9yeSddID0gc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKHNlbGYubGF5b3V0X3Rl
c3RzX3Jlc3VsdF9kaXJlY3RvcnkoKSwgc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9y
eSgpKQorICAgICAgICB0ZXN0X3J1bl9pbmZvWyd0ZXN0c19kaXJlY3RvcnknXSA9IHNlbGYuX2Zp
bGVzeXN0ZW0ucmVscGF0aChzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksIHNlbGYuY29uZm9y
bWFuY2VfcmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICAgICAgc2VsZi5yZXN1bHRzX21hbmFnZXIo
KS53cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0c19kaXJl
Y3RvcnkoKSwgdGVzdF9ydW5faW5mbykKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAg
ICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisgICAgICAgIGRlZiBm
b3JtYXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID4gbG9n
Z2luZy5JTkZPOgorICAgICAgICAgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChyZWNvcmQubGV2
ZWxuYW1lLCByZWNvcmQuZ2V0TWVzc2FnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5n
ZXRNZXNzYWdlKCkKKworICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBsb2dn
ZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGhhbmRsZXIgPSBMb2dIYW5kbGVyKCkKKyAg
ICBoYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBsb2dnZXIuYWRkSGFuZGxlciho
YW5kbGVyKQorICAgIHJldHVybiBoYW5kbGVyCisKKworZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBz
dGRlcnIpOgorICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKyAgICBob3N0ID0gSG9zdCgpCisgICAg
cGFyc2VyID0gdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJzZXIoaG9zdCwgaG9zdC5maWxlc3lzdGVt
LmJhc2VuYW1lKF9fZmlsZV9fKSkKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2tu
b3duX2FyZ3MoYXJndikKKyAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnMu
cGxhdGZvcm0sIG9wdHBhcnNlLlZhbHVlcyh7J3dlYmtpdF90ZXN0X3J1bm5lcic6IG9wdGlvbnMu
d2Via2l0X3Rlc3RfcnVubmVyfSkpCisKKyAgICBydW5uZXIgPSBXM0NDb25mb3JtYW5jZVJ1bm5l
cihwb3J0LCBvcHRpb25zKQorICAgIGlmIHJ1bm5lci5ydW5fdGVzdHMoKToKKyAgICAgICAgcnVu
bmVyLnByaW50X3Jlc3VsdHNfdG9fY29uc29sZSgpCisgICAgICAgIHJ1bm5lci5wcmludF9wb3Rl
bnRpYWxfdGVzdF9leHBlY3RhdGlvbnNfdXBkYXRlKCkKKyAgICAgICAgX2xvZy5pbmZvKCJSZXN1
bHRzIGV4cG9ydGVkIGluICciICsgcnVubmVyLmNvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5
KCkgKyAiJyIpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgc3lzLmV4aXQobWFp
bihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9yZXN1bHRzX21hbmFnZXIucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3Jlc3VsdHNfbWFuYWdlci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ZTViZjM3MjJiZWJiMTE2NWU1ZmZlNDI3YjdiYTg0ODVjZGI3Y2I3Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9yZXN1bHRzX21hbmFnZXIucHkKQEAg
LTAsMCArMSwxMzkgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBu
b3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorIFRoaXMgc2NyaXB0IG1hbmFnZSBKU09O
IGFuZCByZXN1bHRzLmh0bWwgZmlsZXMgZm9yIFczQyB0ZXN0IHJlc3VsdHMuCisiIiIKKworaW1w
b3J0IGlvCitpbXBvcnQganNvbgorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgorCisKK2NsYXNzIFRlc3RSZXN1
bHRzTWFuYWdlcihvYmplY3QpOgorCisgICAgX0pTT05fUFJFRklYID0gJ0FERF9DT05GT1JNQU5D
RV9SRVNVTFRTKCcKKyAgICBfSlNPTl9TVUZGSVggPSAnKTsnCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgYmFzZV9kaXJlY3RvcnksIHJlc3VsdF9kaXIsIHRlc3RzKToKKyAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuaG9zdC5m
aWxlc3lzdGVtCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gcmVzdWx0X2Rpcgor
ICAgICAgICBzZWxmLl90ZXN0cyA9IHRlc3RzCisKKyAgICAgICAgIyBSb290IGRpcmVjdG9yeSBv
ZiBXM0MgaW1wb3J0ZWQgdGVzdAorICAgICAgICBzZWxmLl9iYXNlX2RpcmVjdG9yeSA9IGJhc2Vf
ZGlyZWN0b3J5CisKKyAgICBkZWYgdzNjX3Rlc3RfbmFtZShzZWxmLCB0ZXN0KToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aCh0ZXN0LCBzZWxmLl9iYXNlX2RpcmVjdG9y
eSkKKworICAgIGRlZiBfZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmLCB0ZXN0cywgdGVzdF9kaWN0LCBw
YXRoKToKKyAgICAgICAgZm9yIGtleSBpbiB0ZXN0X2RpY3Qua2V5cygpOgorICAgICAgICAgICAg
X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aCwga2V5KQorICAgICAgICAgICAgX3Bv
dGVudGlhbF90ZXN0ID0gdGVzdF9kaWN0W2tleV0KKyAgICAgICAgICAgIGlmICdhY3R1YWwnIGlu
IF9wb3RlbnRpYWxfdGVzdDoKKyAgICAgICAgICAgICAgICAjIFN0b3JlIHRoZSB0ZXN0CisgICAg
ICAgICAgICAgICAgdGVzdHNbX3BhdGhdID0gX3BvdGVudGlhbF90ZXN0CisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICMgUHJvY2VzcyBzdWJkaXJlY3RvcmllcworICAgICAgICAg
ICAgICAgIHNlbGYuX2dldF90ZXN0X3Jlc3VsdHModGVzdHMsIF9wb3RlbnRpYWxfdGVzdCwgX3Bh
dGgpCisKKyAgICBkZWYgcHJvY2Vzc190ZXN0X3Jlc3VsdHMoc2VsZik6CisgICAgICAgIHRlc3Rf
cmVzdWx0cyA9IHt9CisgICAgICAgIHJlc3VsdHNfanNvbl9wYXRoID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAnZnVsbF9yZXN1bHRzLmpzb24nKQorICAg
ICAgICByZXN1bHRzX2pzb24gPSBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLmxvYWRfanNvbihzZWxm
Ll9maWxlc3lzdGVtLCByZXN1bHRzX2pzb25fcGF0aCkKKyAgICAgICAgcGF0aCA9IHNlbGYuX2Zp
bGVzeXN0ZW0uc2VwIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNhYnMoc2VsZi5fYmFzZV9kaXJlY3Rv
cnkpIGVsc2UgJycKKyAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0ZXN0X3Jlc3VsdHMs
IHJlc3VsdHNfanNvblsndGVzdHMnXSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0
cworCisgICAgZGVmIF9jb21wdXRlX2NvbmZvcm1hbmNlX3N0YXR1cyhzZWxmLCB0ZXN0X25hbWUs
IHRlc3RfcmVzdWx0cyk6CisgICAgICAgIHRleHQgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX3RleHQo
dGVzdF9uYW1lKQorICAgICAgICBpZiB0ZXh0IGlzIE5vbmUgb3IgbGVuKHRleHQpID09IDA6Cisg
ICAgICAgICAgICAjIGlmIHRoZSBlbXB0eSBleHBlY3RlZCBmaWxlLCB0ZXN0IG1heSBiZSBmYWls
aW5nIG9yIGEgcmVmIHRlc3QuCisgICAgICAgICAgICAjIExldCdzIGZpbmQgb3V0IGZyb20ganNv
biByZXN1bHRzIGlmIHRoZSB0ZXN0IGlzIGZhaWxpbmcuCisgICAgICAgICAgICBpZiB0ZXN0X25h
bWUgaW4gdGVzdF9yZXN1bHRzIGFuZCAnYWN0dWFsJyBpbiB0ZXN0X3Jlc3VsdHNbdGVzdF9uYW1l
XToKKyAgICAgICAgICAgICAgICByZWFzb24gPSB0ZXN0X3Jlc3VsdHNbdGVzdF9uYW1lXVsnYWN0
dWFsJ10KKyAgICAgICAgICAgICAgICBpZiByZWFzb24gPT0gJ0NSQVNIJyBvciByZWFzb24gPT0g
J1RJTUVPVVQnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uCisgICAgICAgICAg
ICAgICAgcmV0dXJuICdFUlJPUicKKyAgICAgICAgICAgICMgVE9ETzogV2UgbWF5IHdhbnQgdG8g
dmFsaWRhdGUgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGEgcmVmIHRlc3QKKyAgICAgICAgICAgIHJl
dHVybiAnUEFTUycKKyAgICAgICAgIyBMZXQncyBjaGVjayB3aGV0aGVyIHNvbWUgbGluZXMgc3Rh
cnQgd2l0aCBQQVNTIG9yIEZBSUwKKyAgICAgICAgIyBUZXN0IGlzIHNhaWQgdG8gUEFTUyBpZiBh
dCBsZWFzdCBvbmUgbGluZSBpcyBQQVNTIGFuIG5vIGxpbmUgaXMgRkFJTAorICAgICAgICBoYXNG
YWlsID0gRmFsc2UKKyAgICAgICAgaGFzUGFzcyA9IEZhbHNlCisgICAgICAgIGJ1ZiA9IGlvLlN0
cmluZ0lPKHVuaWNvZGUodGV4dCwgInV0Zi04IikpCisgICAgICAgIGZvciBsaW5lIGluIGJ1Zi5y
ZWFkbGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUEFTUycpOgorICAg
ICAgICAgICAgICAgIGhhc1Bhc3MgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRz
d2l0aCgnRkFJTCcpOgorICAgICAgICAgICAgICAgIGhhc0ZhaWwgPSBUcnVlCisgICAgICAgIGlm
IGhhc1Bhc3M6CisgICAgICAgICAgICByZXR1cm4gJ1BBUlRJQUwnIGlmIGhhc0ZhaWwgZWxzZSAn
UEFTUycKKyAgICAgICAgaWYgaGFzRmFpbDoKKyAgICAgICAgICAgIHJldHVybiAnRkFJTCcKKyAg
ICAgICAgcmV0dXJuICdFUlJPUicKKworICAgIGRlZiBjb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3Vs
dHMoc2VsZik6CisgICAgICAgIHN0YXR1cyA9IHt9CisgICAgICAgIHRlc3RfcmVzdWx0cyA9IHNl
bGYucHJvY2Vzc190ZXN0X3Jlc3VsdHMoKQorICAgICAgICBmb3IgdGVzdF9uYW1lIGluIHNlbGYu
X3Rlc3RzOgorICAgICAgICAgICAgc3RhdHVzW3NlbGYudzNjX3Rlc3RfbmFtZSh0ZXN0X25hbWUp
XSA9IHNlbGYuX2NvbXB1dGVfY29uZm9ybWFuY2Vfc3RhdHVzKHRlc3RfbmFtZSwgdGVzdF9yZXN1
bHRzKQorICAgICAgICByZXR1cm4gc3RhdHVzCisKKyAgICBkZWYgc3VtbWFyeShzZWxmKToKKyAg
ICAgICAgbnVtX3Bhc3MgPSBudW1fcGFydGlhbCA9IG51bV9mYWlsID0gbnVtX2Vycm9yID0gMAor
ICAgICAgICBzdGF0dXMgPSBzZWxmLmNvbXB1dGVfY29uZm9ybWFuY2VfcmVzdWx0cygpCisgICAg
ICAgIGZvciB0ZXN0X25hbWUgaW4gc2VsZi5fdGVzdHM6CisgICAgICAgICAgICByZXN1bHQgPSBz
dGF0dXNbc2VsZi53M2NfdGVzdF9uYW1lKHRlc3RfbmFtZSldCisgICAgICAgICAgICBpZiByZXN1
bHQgPT0gJ1BBU1MnOgorICAgICAgICAgICAgICAgIG51bV9wYXNzICs9IDEKKyAgICAgICAgICAg
IGVsaWYgcmVzdWx0ID09ICdQQVJUSUFMJzoKKyAgICAgICAgICAgICAgICBudW1fcGFydGlhbCAr
PSAxCisgICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSAnRkFJTCc6CisgICAgICAgICAgICAgICAg
bnVtX2ZhaWwgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBudW1fZXJy
b3IgKz0gMQorICAgICAgICBzdW1tYXJ5ID0ge30KKyAgICAgICAgc3VtbWFyeVsndG90YWwnXSA9
IG51bV9wYXNzICsgbnVtX2ZhaWwgKyBudW1fcGFydGlhbCArIG51bV9lcnJvcgorICAgICAgICBz
dW1tYXJ5WydudW1fcGFzcyddID0gbnVtX3Bhc3MKKyAgICAgICAgc3VtbWFyeVsnbnVtX2ZhaWwn
XSA9IG51bV9mYWlsCisgICAgICAgIHN1bW1hcnlbJ251bV9wYXJ0aWFsJ10gPSBudW1fcGFydGlh
bAorICAgICAgICBzdW1tYXJ5WydudW1fZXJyb3InXSA9IG51bV9lcnJvcgorICAgICAgICByZXR1
cm4gc3VtbWFyeQorCisgICAgZGVmIHdyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZiwgcGF0
aCwgdGVzdF9ydW5faW5mbyk6CisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICByZXN1bHRz
Wydjb25mb3JtYW5jZV9yZXN1bHRzJ10gPSBzZWxmLmNvbXB1dGVfY29uZm9ybWFuY2VfcmVzdWx0
cygpCisgICAgICAgIHJlc3VsdHMudXBkYXRlKHRlc3RfcnVuX2luZm8pCisgICAgICAgICMgY29w
eSBjb25mb3JtYW5jZSByZXN1bHRzIGFzIGpzb24gZGF0YQorICAgICAgICBqc29uX3N0cmluZyA9
IGpzb24uZHVtcHMocmVzdWx0cywgc2VwYXJhdG9ycz0oJywnLCAnOicpKQorICAgICAgICBqc29u
X3N0cmluZyA9IHNlbGYuX0pTT05fUFJFRklYICsganNvbl9zdHJpbmcgKyBzZWxmLl9KU09OX1NV
RkZJWAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9maWxl
c3lzdGVtLmpvaW4ocGF0aCwgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24nKSwganNvbl9z
dHJpbmcpCisgICAgICAgICMgY29weSBodG1sIHRlbXBsYXRlCisgICAgICAgIHJlc3VsdHNfZmls
ZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsICdpbXBv
cnRlZCcsICd3M2MnLCAncmVzb3VyY2VzJywgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwn
KQorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhyZXN1bHRzX2ZpbGUpOgorICAg
ICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5ZmlsZShyZXN1bHRzX2ZpbGUsIHNlbGYuX2Zp
bGVzeXN0ZW0uam9pbihwYXRoLCAndzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbCcpKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2NfY29uZm9ybWFu
Y2VfcmVzdWx0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2Nf
Y29uZm9ybWFuY2VfcmVzdWx0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzMzk3NmRkZDcwZWM4ZTI1NjZh
YzE2NTI1MGI2YTEwZmM3MTU2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvcmVzb3VyY2VzL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwKQEAgLTAsMCAr
MSw0MzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNyZXN1
bHRzIHsKKwlkaXNwbGF5OiB0YWJsZTsKKyAgICBwYWRkaW5nOiAyMHB4OworCWNsZWFyOiBib3Ro
OworfQorI3N1bW1hcnkgeworICAgIG1hcmdpbi10b3A6IDIwcHg7CisgICAgbWFyZ2luLWJvdHRv
bTogMjBweDsKK30KKworLnRlc3QsIC5maXJzdGxpbmUgeworCWRpc3BsYXk6IHRhYmxlOworfQor
LnRlc3RuYW1lLCAudGVzdHJlc3VsdCwgLmZpcnN0TGluZSA+IGRpdiB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogbGF2ZW5kZXI7CisgICAgYm9yZGVyLWJvdHRvbTpzb2xpZCAxcHggd2hpdGU7Cit9
CisKKy5maXJzdExpbmVDZWxseworCWRpc3BsYXk6IHRhYmxlLWNlbGw7CisJdGV4dC1hbGlnbjog
Y2VudGVyOworCXdpZHRoOiA4MDBweDsKK30KKworLnNlY29uZExpbmVDZWxsIHsKKwlkaXNwbGF5
OiB0YWJsZS1jZWxsOworCXBhZGRpbmctbGVmdDogNTBweDsKKwl3aWR0aDogNzUwcHg7Cit9CisK
Ky50ZXN0bmFtZSB7CisJZGlzcGxheTogdGFibGUtY2VsbDsKKwl3aWR0aDogODAwcHg7CisJbWFy
Z2luLWxlZnQ6MjBweDsKK30KKworLnRlc3RyZXN1bHQsIC5wb3J0IHsKKwlkaXNwbGF5OiB0YWJs
ZS1jZWxsOworCXdpZHRoOiAyNTBweDsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy50ZXN0
cmVzdWx0IGEgeworICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOworfQorCisucGFydGlh
bCwgLnBhc3MsIC5mYWlsLCAudGltZW91dCwgLmVycm9yIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7
Cit9CisucGFzcyBhIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisKKy5wYXJ0aWFsIGEgeworICAg
IGNvbG9yOiB5ZWxsb3c7Cit9CisKKy5mYWlsIGEgeworICAgIGNvbG9yOiBvcmFuZ2U7Cit9CisK
Ky50aW1lb3V0IGEgeworICAgIGNvbG9yOiByZWQ7Cit9CisKKy5jcmFzaCBhIHsKKyAgICBjb2xv
cjogcmVkOworfQorCisuZXJyb3IgYSB7CisgICAgY29sb3I6IHJlZDsKK30KKworLmVycm9yLXJl
c3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIGZsb2F0OiBsZWZ0
OyAKK30KKyAKKy5mYWlsLXJlc3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogb3Jh
bmdlOworICAgIGZsb2F0OiBsZWZ0OworfQorCisucGFydGlhbC1yZXN1bHRzLWhpc3QgeworICAg
IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKKyAgICBmbG9hdDogbGVmdDsKK30KKy5wYXNzLXJl
c3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgZmxvYXQ6IGxl
ZnQ7Cit9CisKKy5tb2R1bGUtbmFtZSB7CisJZGlzcGxheTp0YWJsZS1jZWxsOworCXdpZHRoOiA4
MDBweDsKK30KKworLm51bWJlci1vZi10ZXN0cyB7CisJZGlzcGxheTppbmxpbmUtYmxvY2s7CisJ
d2lkdGg6IDUwcHg7Cit9CisKKy5tb2R1bGUtcmVzdWx0cyB7CisJdGV4dC1hbGlnbjogY2VudGVy
OworCWRpc3BsYXk6dGFibGUtY2VsbDsKKwl3aWR0aDogMjUwcHg7Cit9CisKKy5oaXN0b2dyYW0g
eworCWRpc3BsYXk6aW5saW5lLWJsb2NrOworCW1hcmdpbi1sZWZ0OiA0MHB4OworCW1hcmdpbi10
b3A6IDVweDsKKwl3aWR0aDoxNTBweDsKK30KKworLm1vZHVsZXsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBsYXZlbmRlcjsKKyAgICBib3JkZXI6c29saWQgMXB4IHdoaXRlOworCWRpc3BsYXk6dGFi
bGU7Cit9CisKKy5tb2R1bGUtc3VtbWFyeSwgLnNlY29uZExpbmUgeworCWRpc3BsYXk6dGFibGU7
CisgICAgYmFja2dyb3VuZDogbGF2ZW5kZXI7CisgICAgYm9yZGVyOnNvbGlkIDFweCB3aGl0ZTsK
KyAgICBoZWlnaHQ6IDI1cHg7CisgICAgY3Vyc29yOnBvaW50ZXI7Cit9CisKKy5ib3h7CisJZGlz
cGxheTogdGFibGU7Cit9CisKKy5oaWRkZW4tZGF0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQor
CisubGVnZW5kID4gZGl2IHsKKwlmbG9hdDogbGVmdDsKKwltYXJnaW4tcmlnaHQ6IDVweDsKKwlt
aW4td2lkdGg6IDIwcHg7Cit9CisKKy5sZWdlbmQgeworfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisK
K2Z1bmN0aW9uIGdldFRlc3RzRGlyZWN0b3J5KHJlc3VsdHMpCit7CisgICAgcmV0dXJuIChyZXN1
bHRzLnJvb3RfZGlyZWN0b3J5ID8gcmVzdWx0cy5yb290X2RpcmVjdG9yeSA6IHJlc3VsdHMucG9y
dF9uYW1lKSArICIvIiArIAorICAgICAgICAgICAgKHJlc3VsdHMudGVzdHNfZGlyZWN0b3J5ID8g
cmVzdWx0cy50ZXN0c19kaXJlY3RvcnkgOiAiaW1wb3J0ZWQtdGVzdHMiKQorfQorCitmdW5jdGlv
biBnZXRSZXN1bHRzRGlyZWN0b3J5KHJlc3VsdHMpCit7CisgICAgcmV0dXJuIChyZXN1bHRzLnJv
b3RfZGlyZWN0b3J5ID8gcmVzdWx0cy5yb290X2RpcmVjdG9yeSA6IHJlc3VsdHMucG9ydF9uYW1l
KSArICIvIiArIAorICAgICAgICAgICAgKHJlc3VsdHMucmVzdWx0c19kaXJlY3RvcnkgPyByZXN1
bHRzLnJlc3VsdHNfZGlyZWN0b3J5IDogImxheW91dC10ZXN0LXJlc3VsdHMiKQorfQorCitmdW5j
dGlvbiBnZXRUZXN0TGluayh0ZXN0bmFtZSwgcmVzdWx0cykKK3sKKyAgICByZXR1cm4gIjxkaXYg
c3R5bGU9J2Zsb2F0OmxlZnQ7IG1hcmdpbi1yaWdodDoxMHB4Jz48YSBocmVmPSciICsgZ2V0VGVz
dHNEaXJlY3RvcnkocmVzdWx0cykgKyAiLyIgKyB0ZXN0bmFtZSArICInPiIgKyB0ZXN0bmFtZSAr
ICI8L2E+PC9kaXY+IgorICAgICAgICArICI8ZGl2Pig8YSBocmVmPSdodHRwczovL2dpdGh1Yi5j
b20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9ibG9iLyIgKyByZXN1bHRzLnRlc3RzX3ZlcnNpb24g
KyAiLyIgKyB0ZXN0bmFtZSArICInPmdpdGh1YjwvYT4pPC9kaXY+IiAKK30KKworZnVuY3Rpb24g
Z2V0VGVzdFJlc3VsdExpbmsodGVzdG5hbWUsIHJlc3VsdCwgcmVzdWx0cykKK3sKKwlzdWZmaXgg
PSAiLiIgKyB0ZXN0bmFtZS5zcGxpdCgnLicpLnBvcCgpCisJbmV3X3N1ZmZpeCA9ICItZXhwZWN0
ZWQudHh0IgorCWlmIChyZXN1bHQudG9Mb3dlckNhc2UoKS50cmltKCkgPT0gImNyYXNoIikKKwkJ
bmV3X3N1ZmZpeCA9ICItY3Jhc2gtbG9nLnR4dCIKKwlyZXR1cm4gIjxhIGhyZWY9JyIgKyBnZXRU
ZXN0c0RpcmVjdG9yeShyZXN1bHRzKSArICIvIiArIHRlc3RuYW1lLnJlcGxhY2Uoc3VmZml4LCBu
ZXdfc3VmZml4KSArICInPiIgKyByZXN1bHQudG9Mb3dlckNhc2UoKSArICI8L2E+IgorfQorCitm
dW5jdGlvbiB0ZXN0U3VpdGVIaXN0KG51bUVycm9yLCBudW1GYWlsLCBudW1QYXJ0aWFsLCBudW1Q
YXNzKQoreworICAgIHZhciB0b3RhbCA9IG51bUVycm9yICsgbnVtUGFzcyArIG51bVBhcnRpYWwg
KyBudW1GYWlsOworCisgICAgaHRtbCA9ICc8ZGl2IGNsYXNzPSJtb2R1bGUtcmVzdWx0cyI+Jwor
CisgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ibnVtYmVyLW9mLXRlc3RzIj4nICsgbnVtUGFzcyAr
ICcvJyArIHRvdGFsICsgJzwvZGl2PicKKworCWh0bWwgKz0gJzxkaXYgY2xhc3M9Imhpc3RvZ3Jh
bSI+JworICAgIGlmIChudW1FcnJvcikKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZXJy
b3ItcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1FcnJvciAvIHRvdGFs
KSArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYgKG51bUZhaWwpCisgICAgICAgIGh0bWwgKz0g
JzxkaXYgY2xhc3M9ImZhaWwtcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBu
dW1GYWlsIC8gdG90YWwpICArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYgKG51bVBhcnRpYWwp
CisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InBhcnRpYWwtcmVzdWx0cy1oaXN0IiBzdHls
ZT0id2lkdGg6JyArICgxMDAgKiBudW1QYXJ0aWFsIC8gdG90YWwpICsgJyUiPiZuYnNwOzwvZGl2
PicKKyAgICBpZiAobnVtUGFzcykKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icGFzcy1y
ZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51bVBhc3MgLyB0b3RhbCkgKyAn
JSI+Jm5ic3A7PC9kaXY+JworICAgIGh0bWwgKz0gJzwvZGl2PicKKworICAgIHJldHVybiBodG1s
ICsgJzwvZGl2Pic7Cit9CisKK2Z1bmN0aW9uIGdldFRlc3RzdWl0ZU1vZHVsZXMocmVzdWx0cykK
KyB7CisJdmFyIG1vZHVsZXMgPSB7fQorCS8vIGZpcnN0IHRyeSB0byBvbmx5IHNob3cgbW9kdWxl
IGZyb20gVVJMIGhhc2gKKwl2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmlu
ZygxKQorCXZhciBoYXNUZXN0ID0gZmFsc2UKKwlpZiAoaGFzaC5sZW5ndGgpCisJCU9iamVjdC5r
ZXlzKHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0cykKKwkJCS5zb3J0KCkKKwkJCS5mb3JFYWNo
KGZ1bmN0aW9uKGtleSwgaSkgeworCQkJCXZhciB0ZXN0TmFtZSA9IGtleQorCQkJCWlmICh0ZXN0
TmFtZS5pbmRleE9mKGhhc2gpID09IDApIHsKKwkJCQkJaGFzVGVzdCA9IHRydWUKKwkJCQkJdmFy
IGl0ZW1zID0gdGVzdE5hbWUuc3BsaXQoIi8iKQorCQkJCQl2YXIgbmFtZSA9IGl0ZW1zWzBdCisJ
CQkJCWlmIChtb2R1bGVzW25hbWVdKQorCQkJCQkJbW9kdWxlc1tuYW1lXS5wdXNoKGtleSkKKwkJ
CQkJZWxzZQorCQkJCQkJbW9kdWxlc1tuYW1lXSA9IFtrZXldCisJCQkJfQorCQl9KQorCWlmICho
YXNUZXN0KQorCQlyZXR1cm4gbW9kdWxlcworCS8vIGlmIG5vIHRlc3RzLCBzaG93IGFsbCBtb2R1
bGVzCisgICAgT2JqZWN0LmtleXMocmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRzKQorICAgICAg
ICAuc29ydCgpCisgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworCQkJdmFyIHRl
c3ROYW1lID0ga2V5CisJCQl2YXIgaXRlbXMgPSB0ZXN0TmFtZS5zcGxpdCgiLyIpCisJCQl2YXIg
bmFtZSA9IGl0ZW1zWzBdCisJCQkvLyBJbiBjYXNlIG9mIGh0bWwgbW9kdWxlLCB3ZSBzcGxpdCBh
Z2FpbgorCQkJaWYgKG5hbWUgPT0gJ2h0bWwnKQorCQkJCW5hbWUgKz0gJy8nICsgaXRlbXNbMV0K
KwkJCWlmIChtb2R1bGVzW25hbWVdKQorCQkJCW1vZHVsZXNbbmFtZV0ucHVzaChrZXkpCisJCQll
bHNlCisJCQkJbW9kdWxlc1tuYW1lXSA9IFtrZXldCisJfSkKKwlyZXR1cm4gbW9kdWxlcworIH0K
KworZnVuY3Rpb24gdG9nZ2xlVGVzdHMoZGl2KQoreworCXZhciBib3ggPSBkaXYubmV4dEVsZW1l
bnRTaWJsaW5nCisJaWYgKGJveCkgeworCQlpZiAoYm94LmNsYXNzTmFtZSA9PSAnYm94JykKKyAg
ICAgICAgICAgIGJveC5jbGFzc05hbWUgPSdoaWRkZW4tZGF0YScKKwkJZWxzZQorCQkJYm94LmNs
YXNzTmFtZSA9ICdib3gnCisJfQorfQorCitmdW5jdGlvbiBjb21wdXRlR2xvYmFsQ29uZm9ybWFu
Y2UocmVzdWx0cykKK3sKKwl2YXIgc3VtbWFyeSA9IHtudW1QYXNzOiAwLCBudW1QYXJ0aWFsOiAw
LCBudW1GYWlsOiAwLCBudW1FcnJvcjogMH0KKwlmb3IgKHZhciB0ZXN0IGluIHJlc3VsdHMuY29u
Zm9ybWFuY2VfcmVzdWx0cykgeworCQlpZiAocmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRzLmhh
c093blByb3BlcnR5KHRlc3QpKSB7CisJCQlyZXN1bHQgPSByZXN1bHRzLmNvbmZvcm1hbmNlX3Jl
c3VsdHNbdGVzdF0KKwkJCWlmIChyZXN1bHQgPT0gIlBBU1MiKSBzdW1tYXJ5Lm51bVBhc3MrKwor
CQkJZWxzZSBpZiAocmVzdWx0ID09ICJQQVJUSUFMIikgc3VtbWFyeS5udW1QYXJ0aWFsKysKKwkJ
CWVsc2UgaWYgKHJlc3VsdCA9PSAiRkFJTCIpIHN1bW1hcnkubnVtRmFpbCsrCisJCQllbHNlIHN1
bW1hcnkubnVtRXJyb3IrKworCQl9CisJfQorCXJldHVybiBzdW1tYXJ5Cit9CisKK2Z1bmN0aW9u
IGNvbXB1dGVTdGF0aXN0aWNzKHJlc3VsdHNTdW1tYXJ5LCByZXN1bHQsIHJlc3VsdHMpCit7CisJ
c3VtbWFyeSA9IHJlc3VsdHNTdW1tYXJ5W3Jlc3VsdHMucG9ydF9uYW1lXQorCWlmICghc3VtbWFy
eSkKKwkJcmVzdWx0c1N1bW1hcnlbcmVzdWx0cy5wb3J0X25hbWVdID0gc3VtbWFyeSA9IHtudW1Q
YXNzOiAwLCBudW1QYXJ0aWFsOiAwLCBudW1GYWlsOiAwLCBudW1FcnJvcjogMH0KKwlpZiAocmVz
dWx0ID09ICJQQVNTIikgc3VtbWFyeS5udW1QYXNzKysKKwllbHNlIGlmIChyZXN1bHQgPT0gIlBB
UlRJQUwiKSBzdW1tYXJ5Lm51bVBhcnRpYWwrKworCWVsc2UgaWYgKHJlc3VsdCA9PSAiRkFJTCIp
IHN1bW1hcnkubnVtRmFpbCsrCisJZWxzZSBzdW1tYXJ5Lm51bUVycm9yKysKK30KKworZnVuY3Rp
b24gYWRkVGVzdFN1aXRlTGlzdE9mUmVzdWx0cyhtb2R1bGVOYW1lLCB0ZXN0cywgbGlzdE9mUmVz
dWx0cywgaXNPcGVuKQoreworCXZhciByZXN1bHRzU3VtbWFyeSA9ICB7fQorICAgIHZhciBudW1Q
YXNzID0gbnVtUGFydGlhbCA9IG51bUZhaWwgPSBudW1FcnJvciA9IDAKKyAgICB2YXIgaW5uZXJI
VE1MID0gIiIKKyAgICB0ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworCQkJaW5uZXJI
VE1MICs9ICI8ZGl2IGNsYXNzPSd0ZXN0Jz48ZGl2IGNsYXNzPSd0ZXN0bmFtZSc+IiArIGdldFRl
c3RMaW5rKGtleSwgbGlzdE9mUmVzdWx0c1swXSkgKyAiPC9kaXY+IgorCQkJbGlzdE9mUmVzdWx0
cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKwkJCQlyZXN1bHQgPSByZXN1bHRzLmNvbmZv
cm1hbmNlX3Jlc3VsdHNba2V5XQorICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJNaXNzaW5nIgorICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLmxvZygiV0FSTklORzogdGVzdCAiICsga2V5ICsgIiBpcyBtaXNzaW5nIik7CisgICAg
ICAgICAgICAgICAgfQorCQkJCWlubmVySFRNTCArPSAiPGRpdiBjbGFzcz0ndGVzdHJlc3VsdCAi
ICsgcmVzdWx0LnRvTG93ZXJDYXNlKCkgKyAiJz4iICsgZ2V0VGVzdFJlc3VsdExpbmsoa2V5LCBy
ZXN1bHQsIHJlc3VsdHMpICsgIjwvZGl2PiIKKwkJCQljb21wdXRlU3RhdGlzdGljcyhyZXN1bHRz
U3VtbWFyeSwgcmVzdWx0LCByZXN1bHRzKQorCQkJfSkKKwkJCWlubmVySFRNTCArPSAiPC9kaXY+
IgorICAgICAgIH0pCisgICAgdmFyIGh0bWwgPSAnPGRpdiBjbGFzcz0ibW9kdWxlIj48ZGl2IGNs
YXNzPSJtb2R1bGUtc3VtbWFyeSIgb25jbGljaz0idG9nZ2xlVGVzdHMoZXZlbnQuY3VycmVudFRh
cmdldCkiPjxkaXYgY2xhc3M9Im1vZHVsZS1uYW1lIj4nICsgbW9kdWxlTmFtZSArICc8L2Rpdj4n
CisJbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKwkJdmFyIHN1bW1h
cnkgPSByZXN1bHRzU3VtbWFyeVtyZXN1bHRzLnBvcnRfbmFtZV0KKwkJaHRtbCArPSB0ZXN0U3Vp
dGVIaXN0KHN1bW1hcnkubnVtRXJyb3IsIHN1bW1hcnkubnVtRmFpbCwgc3VtbWFyeS5udW1QYXJ0
aWFsLCBzdW1tYXJ5Lm51bVBhc3MpCisJfSkKKwlodG1sICs9ICc8L2Rpdj48ZGl2IGNsYXNzPSIn
ICsgKGlzT3BlbiA/ICJib3giIDogImhpZGRlbi1kYXRhIikgKyAnIj4nOworICAgIGh0bWwgKz0g
aW5uZXJIVE1MCisgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHRzIikuaW5uZXJIVE1MICs9IGh0bWwKK30KKworZnVuY3Rpb24gd3Jp
dGVTdW1tYXJ5KCkKK3sKKwl2YXIgaHRtbCA9ICI8ZGl2PlczQyBjb25mb3JtYW5jZSByZXN1bHRz
IGZyb20gcnVuLXdlYmtpdC10ZXN0ICgiCisgICAgbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0
aW9uKHJlc3VsdHMpIHsKKyAgICAgICAgaHRtbCArPSAiPGEgaHJlZj0nIiArIGdldFJlc3VsdHNE
aXJlY3RvcnkocmVzdWx0cykgKyAiJz4iICsgcmVzdWx0cy5wb3J0X25hbWUgKyAiPC9hPiAmbmJz
cDsiCisgICAgfSkKKyAgICBodG1sICs9ICIpPC9kaXY+IgorCisJaWYgKGxpc3RPZlJlc3VsdHMu
bGVuZ3RoID4gMSkgeworCQl2YXIgc2FtZVRlc3RWZXJzaW9uID0gdHJ1ZQorCQlsaXN0T2ZSZXN1
bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworCQkJaWYgKGxpc3RPZlJlc3VsdHNbMF0u
dGVzdHNfdmVyc2lvbiAhPSByZXN1bHRzLnRlc3RzX3ZlcnNpb24pIHsKKwkJCQlzYW1lVGVzdFZl
cnNpb24gPSBmYWxzZQorICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxkaXY+V2FybmluZzogVzND
IHRlc3QgdmVyc2lvbiBhcmUgbm90IHRoZSBzYW1lIGZvciBhbGwgcGxhdGZvcm1zOiAiCisgICAg
ICAgICAgICAgICAgaHRtbCArPSBsaXN0T2ZSZXN1bHRzWzBdLnRlc3RzX3ZlcnNpb24gKyAiIHZz
ICIgKyByZXN1bHRzLnRlc3RzX3ZlcnNpb24gKyAiIG9mIHBsYXRmb3JtICIgKyByZXN1bHRzLnBv
cnRfbmFtZQorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpCisgICAgICAgICAg
ICAgICAgaHRtbCArPSAiPC9kaXY+IgorCQkJfQorCQl9KQorCQlpZiAoIXNhbWVUZXN0VmVyc2lv
bikgey8qCisJCQlodG1sICs9ICI8ZGl2Pldhcm5pbmc6IFczQyB0ZXN0IHZlcnNpb24gYXJlIG5v
dCB0aGUgc2FtZSBmb3IgYWxsIHBsYXRmb3JtczogIgorICAgICAgICAgICAgaHRtbCArPSBsaXN0
T2ZSZXN1bHRzWzBdLnRlc3RzX3ZlcnNpb24gKyAiIHZzICIgKyByZXN1bHRzLnRlc3RzX3ZlcnNp
b24gKyAiIG9mIHBsYXRmb3JtICIgKyByZXN1bHRzLnBvcnRfbmFtZQorICAgICAgICAgICAgY29u
c29sZS5sb2cocmVzdWx0cykKKyAgICAgICAgICAgIGh0bWwgKz0gIjwvZGl2PiIqLworICAgICAg
ICB9CisJCWVsc2UgaWYgKGxpc3RPZlJlc3VsdHNbMF0udGVzdHNfdmVyc2lvbiA9PSAibWFzdGVy
IikKKwkJCWh0bWwgKz0gIjxkaXY+V2FybmluZzogdXNpbmcgbWFzdGVyIGFzIFczQyB0ZXN0IHZl
cnNpb248L2Rpdj4iCisJfQorCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN1bW1hcnki
KS5pbm5lckhUTUwgPSBodG1sCit9CisKK2Z1bmN0aW9uIGRpc3BsYXlSZXN1bHRzKCkKK3sKKyAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgIHsKKwl2YXIgZmlyc3RMaW5lSFRNTCA9ICI8ZGl2IGNs
YXNzPSdmaXJzdExpbmUnPjxkaXYgY2xhc3M9J2ZpcnN0TGluZUNlbGwnPk1vZHVsZS9UZXN0IE5h
bWU8L2Rpdj4iCisJbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKwkJ
Zmlyc3RMaW5lSFRNTCArPSAiPGRpdiBjbGFzcz0ncG9ydCc+IiArIHJlc3VsdHMucG9ydF9uYW1l
LnRvVXBwZXJDYXNlKCkgKyAiPC9kaXY+IgorCX0pCisJZmlyc3RMaW5lSFRNTCArPSAiPC9kaXY+
IgorCXZhciBzZWNvbmRMaW5lSFRNTCA9ICI8ZGl2IGNsYXNzPSdzZWNvbmRMaW5lJz48ZGl2IGNs
YXNzPSdzZWNvbmRMaW5lQ2VsbCc+T3ZlcmFsbCBjb25mb3JtYW5jZTwvZGl2PiIKKwlsaXN0T2ZS
ZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworCQlzdW1tYXJ5ID0gY29tcHV0ZUds
b2JhbENvbmZvcm1hbmNlKHJlc3VsdHMpCisJCXNlY29uZExpbmVIVE1MICs9IHRlc3RTdWl0ZUhp
c3Qoc3VtbWFyeS5udW1FcnJvciwgc3VtbWFyeS5udW1GYWlsLCBzdW1tYXJ5Lm51bVBhcnRpYWws
IHN1bW1hcnkubnVtUGFzcykKKwl9KQorCXNlY29uZExpbmVIVE1MICs9ICI8L2Rpdj4iCisKKwlk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9IGZpcnN0TGluZUhU
TUwgKyBzZWNvbmRMaW5lSFRNTAorCXZhciBtb2R1bGVzID0gIGdldFRlc3RzdWl0ZU1vZHVsZXMo
bGlzdE9mUmVzdWx0c1swXSkKKwl2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1vZHVsZXMpCisgICAg
a2V5cy5zb3J0KCkuZm9yRWFjaCggZnVuY3Rpb24oa2V5LCBpKSB7CisJCWFkZFRlc3RTdWl0ZUxp
c3RPZlJlc3VsdHMoa2V5LCBtb2R1bGVzW2tleV0sIGxpc3RPZlJlc3VsdHMsIGtleXMubGVuZ3Ro
ID09IDEpCisJfSkKKwl3cml0ZVN1bW1hcnkobGlzdE9mUmVzdWx0cykKKyAgICB9LCAwKQorfQor
CisgCitsaXN0T2ZSZXN1bHRzID0gW10gCitmdW5jdGlvbiBBRERfQ09ORk9STUFOQ0VfUkVTVUxU
UyhyZXN1bHRzKQoreworICAgIHJlc3VsdHMucm9vdF9kaXJlY3RvcnkgPSBkaXJzW2NvdW50ZXJd
CisJbGlzdE9mUmVzdWx0cy5wdXNoKHJlc3VsdHMpCisgICAgc2V0VGltZW91dChsb2FkU2NyaXB0
cywgMCkKKyAgICAKK30KKworLy93aW5kb3cub25sb2FkID0gZGlzcGxheVJlc3VsdHMKK3ZhciBj
b3VudGVyCit2YXIgZGlycworZnVuY3Rpb24gbG9hZFNjcmlwdHMoZGlyZWN0b3JpZXMpCit7Cisg
ICAgaWYgKGRpcmVjdG9yaWVzKSB7CisgICAgICAgIGRpcnMgPSBkaXJlY3RvcmllcworICAgICAg
ICBjb3VudGVyID0gLTEKKyAgICB9CisgICAgaWYgKGNvdW50ZXIgPCBkaXJzLmxlbmd0aCAtIDEp
IHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnknKS5pbm5lckhUTUwg
PSAiTG9hZGluZyAiICsgZGlyc1srK2NvdW50ZXJdICsgIi4uLiIKKyAgICAgICAgdmFyIGhlYWQ9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CisgICAgICAgIHZhciBz
Y3JpcHQ9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgICAgICBzY3JpcHQu
dHlwZT0gJ3RleHQvamF2YXNjcmlwdCc7CisgICAgICAgIHNjcmlwdC5zcmM9IGRpcnNbY291bnRl
cl0gKyAnL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24nOworICAgICAgICBoZWFkLmFwcGVu
ZENoaWxkKHNjcmlwdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnc3VtbWFyeScpLmlubmVySFRNTCA9ICJEaXNwbGF5aW5nIHJlc3VsdHMuLi4i
CisgICAgICAgIHNldFRpbWVvdXQoZGlzcGxheVJlc3VsdHMsIDApCisgICAgfQorfQorCis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ic3VtbWFyeSI+CisgICAgTG9hZGluZy4u
LgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJsZWdlbmQiPgorCTxkaXYgY2xhc3M9ImVycm9yLXJlc3Vs
dHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwvZGl2PgorCTxkaXY+RXJyb3IsIFRpbWVvdXQgb3IgQ3Jh
c2g8L2Rpdj4KKwk8ZGl2IGNsYXNzPSJmYWlsLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwv
ZGl2PgorCTxkaXY+IEFsbCBhc3NlcnRpb25zIGZhaWxpbmc8L2Rpdj4KKwk8ZGl2IGNsYXNzPSJw
YXJ0aWFsLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwvZGl2PgorCTxkaXY+IFNvbWUgYXNz
ZXJ0aW9ucyBwYXNzaW5nPC9kaXY+CisJPGRpdiBjbGFzcz0icGFzcy1yZXN1bHRzLWhpc3QgbGVn
ZW5kIj4mbmJzcDs8L2Rpdj4KKwk8ZGl2PiBBbGwgYXNzZXJ0aW9ucyBwYXNzaW5nPC9kaXY+Cis8
L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdHMiPgorPC9kaXY+Cis8IS0tIHBsYWNlIGFzIG1hbnkgLmpz
b24gZmlsZSBhcyBuZWVkZWQgLS0+Cis8c2NyaXB0PgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgIGxvYWRTY3JpcHRzKFsKKyAgICAgICAgICAgICIuIgorICAgICAgICBdKQor
ICAgIH0sIDApCis8L3NjcmlwdD4KKzwhLS1zY3JpcHQgc3JjPSJlZmwvdzNjX2NvbmZvcm1hbmNl
X3Jlc3VsdHMuanNvbiI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZ3RrL3czY19jb25mb3JtYW5j
ZV9yZXN1bHRzLmpzb24iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Im1hYy93M2NfY29uZm9ybWFu
Y2VfcmVzdWx0cy5qc29uIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJtYWMtd2syL3czY19jb25m
b3JtYW5jZV9yZXN1bHRzLmpzb24iPjwvc2NyaXB0LS0+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244513</attachid>
            <date>2015-01-13 07:45:59 -0800</date>
            <delta_ts>2015-03-02 09:24:02 -0800</delta_ts>
            <desc>Adding CSS testsuite support</desc>
            <filename>bug-134766-20150113164603.patch</filename>
            <type>text/plain</type>
            <size>39809</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4MjU1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmVjY2Q3OTg5N2VjMTU5NDA2YTk3ZmYyNDBhNGYwMzA3
NzBmNmFjYS4uZTRiMTFkMzNjYTdlZTEzMjEwYmYxZGY0ZjYxNmYxOTAwY2VlYmJmOCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2
IEBACisyMDE1LTAxLTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgRml4IGZvciAxMzQ3NjYKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
YXV0b21hdGVkIFczQyBjb25mb3JtYW5jZSB0ZXN0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTY3JpcHRzL2NoZWNrLXczYy1jb25mb3JtYW5jZSBp
cyB0aGUgZXhlY3V0YWJsZSB0byB0ZXN0IFczQyB0ZXN0IGNvbmZvcm1hbmNlLgorICAgICAgICBS
ZXN1bHRzIGFyZSBzdG9yZWQgYnkgZGVmYXVsdCBpbiBhIFdlYktpdEJ1aWxkIHN1Yi1mb2xkZXIg
KHNlZSBQb3J0LnczY19jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSkuCisgICAgICAgIFNj
cmlwdHMvd2Via2l0cHkvdzNjL2NvbmZvcm1hbmNlX2NoZWNrZXIucHkgaXMgdGhlIG1haW4gc2Ny
aXB0LgorICAgICAgICBJdCB1c2VzIHRlc3QgaW1wb3J0ZXIgdG8gY2xvbmUgYW5kIGltcG9ydCB0
aGUgdGVzdHMuCisgICAgICAgIEl0IHRoZW4gdXNlcyBydW4td2Via2l0LXRlc3QgdG8gcnVuIHRo
ZSB0ZXN0cyBhbmQgZ2VuZXJhdGUgdGhlIC1leHBlY3RlZC50eHQgZmlsZXMgZm9yIHRlc3RoYXJu
ZXNzIHRlc3RzLgorICAgICAgICBGcm9tIHRoZSAtZXhwZWN0ZWQudHh0IGZpbGVzLCBpdCBjb21w
dXRlcyB3aGV0aGVyIHRoZSB0ZXN0IGlzIHBhc3NpbmcsIHBhcnRpYWxseSBwYXNzaW5nIG9yIGZh
aWxpbmcuCisgICAgICAgIFJlc3VsdHMgYXJlIG91dHB1dHRlZCB0aHJvdWdoIFRlc3RSZXN1bHRz
TWFuYWdlciBhcyBhIGpzb24gZmlsZSB0aGF0IGNhbiBiZSBsb2FkZWQgdXNpbmcgdzNjX2NvbmZv
cm1hbmNlX3Jlc3VsdHMuaHRtbC4KKyAgICAgICAgRHJhZnQgVGVzdCBleHBlY3RhdGlvbnMgYW5k
IGltcG9ydCBydWxlcyBhcmUgYWxzbyBnZW5lcmF0ZWQgaW4gdGhlIHNhbWUgZm9sZGVyLgorCisg
ICAgICAgICogU2NyaXB0cy9jaGVjay13M2MtY29uZm9ybWFuY2U6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC53M2NfY29uZm9y
bWFuY2VfcmVzdWx0c19kaXJlY3RvcnkpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNj
L2NvbmZvcm1hbmNlX2NoZWNrZXIucHk6IEFkZGVkLgorICAgICAgICAoY3JlYXRlX2FyZ3VtZW50
X3BhcnNlcik6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIpOgorICAgICAgICAoQ29uZm9y
bWFuY2VDaGVja2VyLl9faW5pdF9fKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci5fcHJp
bnRfcnd0X291dHB1dF9saW5lKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci5ydW5fdGVz
dHMpOgorICAgICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLnJlc3VsdHNfbWFuYWdlcik6CisgICAg
ICAgIChDb25mb3JtYW5jZUNoZWNrZXIuaW5pdF90ZXN0X2ltcG9ydGVyKToKKyAgICAgICAgKENv
bmZvcm1hbmNlQ2hlY2tlci50ZXN0X3N1aXRlcyk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNr
ZXIudGVzdHMpOgorICAgICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLmNvbmZvcm1hbmNlX3Jlc3Vs
dCk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIuY2hlY2tfY29uZm9ybWFuY2UpOgorICAg
ICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLnByaW50X3Jlc3VsdHNfdG9fY29uc29sZSk6CisgICAg
ICAgIChDb25mb3JtYW5jZUNoZWNrZXIud3JpdGVfaW1wb3J0X2V4cGVjdGF0aW9uX3VwZGF0ZXMp
OgorICAgICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLndyaXRlX3Rlc3RfZXhwZWN0YXRpb25fdXBk
YXRlcyk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIud3JpdGVfY29uZm9ybWFuY2VfcmVz
dWx0cyk6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChjb25maWd1cmVf
bG9nZ2luZy5Mb2dIYW5kbGVyKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRs
ZXIuZm9ybWF0KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RSZXN1bHRz
TWFuYWdlcik6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX19pbml0X18pOgorICAgICAg
ICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnczY190ZXN0X25hbWUpOgorICAgICAgICAoVGVzdFJlc3Vs
dHNNYW5hZ2VyLl9nZXRfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdl
ci5wcm9jZXNzX3Rlc3RfcmVzdWx0cyk6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX2pz
X3Rlc3RfY29uZm9ybWFuY2UpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLl9jb25mb3Jt
YW5jZV9zdGF0dXMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLmNvbmZvcm1hbmNlX3Jl
c3VsdHMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnN1bW1hcnkpOgorICAgICAgICAo
VGVzdFJlc3VsdHNNYW5hZ2VyLndyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMpOgorCiAyMDE1LTAx
LTEwICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBidWlsZC13ZWJraXQ6IHNpbGVuY2Ugb3V0cHV0IG9mICd3aGljaCcKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvY2hlY2stdzNjLWNvbmZvcm1hbmNlIGIvVG9vbHMvU2NyaXB0cy9jaGVjay13
M2MtY29uZm9ybWFuY2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2UyZTllMjhjNTY0MWU0YjRmNjQxMGY2NmU4NjA5
OTJjODdkOTFjZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvY2hlY2stdzNjLWNv
bmZvcm1hbmNlCkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENv
cHlyaWdodCAoYykgMjAxNSwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisiIiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRweS93M2MvY29uZm9ybWFuY2VfY2hlY2tl
ci5weSIiIgorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG11bHRpcHJvY2Vzc2luZ19ib290
c3RyYXAKKworbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5ydW4oJ3dlYmtpdHB5JywgJ3czYycs
ICdjb25mb3JtYW5jZV9jaGVja2VyLnB5JykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkK
aW5kZXggYzllODQ5ZDU0NGQ0NDAxOWM5MjQ0YjJlZGY0YzU5ZDFkNzhkNjEwOS4uOGMwOWQ2MGVj
NDM2Y2I0OWZlY2Q3YWQ3YmViNzc5ZTY2MTEyYzU1NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkKQEAgLTc2OCw2ICs3NjgsMTAgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgIGRl
ZiBweXRob25fdW5pdHRlc3RfcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLl9idWlsZF9wYXRoKCdweXRob24tdW5pdHRlc3QtcmVzdWx0cycpCiAKKyAgICBkZWYg
dzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICAiIiJBYnNv
bHV0ZSBwYXRoIHRvIHRoZSBwbGFjZSB0byBzdG9yZSB0aGUgdGVzdCByZXN1bHRzICh1c2VzIC0t
dzNjLWNvbmZvcm1hbmNlLWRpcmVjdG9yeSkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9idWls
ZF9wYXRoKCd3M2MtY29uZm9ybWFuY2UtcmVzdWx0cycpCisKICAgICBkZWYgZGVmYXVsdF9yZXN1
bHRzX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgIiIiQWJzb2x1dGUgcGF0aCB0byB0aGUgZGVm
YXVsdCBwbGFjZSB0byBzdG9yZSB0aGUgdGVzdCByZXN1bHRzLiIiIgogICAgICAgICAjIFJlc3Vs
dHMgYXJlIHN0b3JlIHJlbGF0aXZlIHRvIHRoZSBidWlsdCBwcm9kdWN0cyB0byBtYWtlIGl0IGVh
c3kKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL2NvbmZvcm1hbmNlX2No
ZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9jb25mb3JtYW5jZV9jaGVja2Vy
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcxYzZlZWEzOTM2Mjg3N2JmN2UwM2QyZDk5MGYyM2M5NmJlODBkMDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9jb25mb3JtYW5j
ZV9jaGVja2VyLnB5CkBAIC0wLDAgKzEsMjYyIEBACisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fu
b24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNj
cmlwdCBldmFsdWF0ZXMgVzNDIHRlc3RzIGNvbmZvcm1hbmNlIGJ5OgorICAgIC0gaW1wb3J0aW5n
IFczQyB0ZXN0cyBhcyBXZWJLaXQgdGVzdHMKKyAgICAtIGdlbmVyYXRpbmcgZXhwZWN0ZWQudHh0
IGZpbGVzICh1c2luZyBydW4td2Via2l0LXRlc3RzKQorICAgIC0gY29tcHV0aW5nIHdoZXRoZXIg
YSBqcyB0ZXN0IGlzIHBhc3Npbmcgb3Igbm90IGJ5IGNoZWNraW5nIFBBU1MvRkFJTCBhc3NlcnRp
b25zIG91dHB1dHRlZCB3aXRoaW4gdGhlIGV4cGVjdGVkLnR4dCBmaWxlcworIiIiCisKK2ltcG9y
dCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHN5cwor
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9ucyBpbXBvcnQgVGVzdEV4cGVjdGF0aW9u
cworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwbGF0Zm9ybV9vcHRpb25zCitpbXBvcnQgd2Vi
a2l0cHkudzNjLnRlc3RfaW1wb3J0ZXIgYXMgdGVzdF9pbXBvcnRlcgorZnJvbSB3ZWJraXRweS53
M2MudGVzdF9yZXN1bHRzX21hbmFnZXIgaW1wb3J0IFRlc3RSZXN1bHRzTWFuYWdlcgorZnJvbSB3
ZWJraXRweS53M2MudGVzdF9kb3dubG9hZGVyIGltcG9ydCBUZXN0RG93bmxvYWRlcgorCitfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworZGVmIGNyZWF0ZV9hcmd1bWVudF9w
YXJzZXIoKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisKKyAgICBm
b3Igb3B0IGluIHBsYXRmb3JtX29wdGlvbnModXNlX2dsb2JzPUZhbHNlKToKKyAgICAgICAgcGFy
c2VyLmFkZF9hcmd1bWVudChvcHQuZ2V0X29wdF9zdHJpbmcoKSwgYWN0aW9uPW9wdC5hY3Rpb24s
IGRlc3Q9b3B0LmRlc3QsIGNvbnN0PWdldGF0dHIob3B0LCAnY29uc3QnKSwgaGVscD1nZXRhdHRy
KG9wdCwgJ2hlbHAnKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXdlYmtpdC10ZXN0LXJ1
bm5lcicsICctMicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAg
IGhlbHA9J1NldCBXZWJLaXQgYXJjaGl0ZWN0dXJlIFdlYktpdDEgb3IgV2ViS2l0MiAoZGVmYXVs
dCBXSzEpLicpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsIGRlc3Q9J3F1aWV0Jywg
YWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nUHJpbnQg
bWluaW1hbCBsb2cuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsIGRlc3Q9J3ZlcmJv
c2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSdQ
cmludCBtYXhpbWFsIGxvZy4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdGVz
dC1wYXRoJywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSd0ZXN0X3BhdGhzJywgZGVmYXVsdD1bXSwK
KyAgICAgICAgaGVscD0nSW1wb3J0IGFuZCBydW4gb25seSB0ZXN0cyBpbiB0aGUgc3VwcGxpZWQg
c3ViZGlyZWN0b3J5IG9mIHRoZSB3M2NfdGVzdF9kaXJlY3RvcnkuIENhbiBiZSBzdXBwbGllZCBt
dWx0aXBsZSB0aW1lcyB0byBnaXZlIG11bHRpcGxlIHBhdGhzJykKKyAgICBwYXJzZXIuYWRkX2Fy
Z3VtZW50KCctcycsICctLXNraXAtcmVmcmVzaCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZWZh
dWx0PVRydWUsIGRlc3Q9J3JlZnJlc2gnLAorICAgICAgICBoZWxwPSdEaXNhYmxlIHJlZnJlc2gg
b2YgdGVzdHMgKGdpdCBjaGVja291dCAgKyBpbXBvcnQpLiBCeSBkZWZhdWx0LCB0ZXN0cyBhcmUg
cmVmcmVzaGVkLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby1mZXRjaCcsIGFjdGlv
bj0nc3RvcmVfZmFsc2UnLCBkZXN0PSdmZXRjaCcsIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgaGVs
cD0nRG8gbm90IGZldGNoIHRoZSBDU1MvV1BUIHJlcG9zaXRvcmllcy4gQnkgZGVmYXVsdCwgcmVw
b3NpdG9yaWVzIGFyZSBmZXRjaGVkIGlmIGEgVzNjIHRlc3QgZGlyZWN0b3J5IGlzIG5vdCBwcm92
aWRlZCcpCisKKyAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3MgQ29uZm9ybWFuY2VDaGVja2Vy
KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhv
c3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBz
ZWxmLl9yZXN1bHRzX21hbmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3Rlc3RzID0gTm9uZQor
ICAgICAgICBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzID0gTm9uZQorCisgICAgICAgIHNlbGYu
bGF5b3V0X3czY19kaXJlY3RvcnkgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oJ2ltcG9ydGVkJywg
J3czYycpCisgICAgICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSBzZWxmLl9wb3J0LnczY19j
b25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpCisgICAgICAgIHNlbGYubGF5b3V0X3Rlc3Rz
X3Jlc3VsdF9kaXJlY3RvcnkgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5yZXN1bHRzX2Rp
cmVjdG9yeSwgJ2xheW91dC10ZXN0LXJlc3VsdHMnKQorICAgICAgICBzZWxmLmltcG9ydGVkX3Rl
c3RzX2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0
b3J5LCAnaW1wb3J0ZWQtdGVzdHMnKQorICAgICAgICBzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3Rv
cnkgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwgJ3J1bm5l
ZC10ZXN0cycpCisKKyAgICAgICAgc2VsZi5pbml0X3Rlc3RfaW1wb3J0ZXIoKQorCisgICAgZGVm
IF9wcmludF9yd3Rfb3V0cHV0X2xpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIG5vdCBzZWxm
Ll9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1snKToK
KyAgICAgICAgICAgICAgICB0b2tlbnMgPSBsaW5lLnNwbGl0KCcgJykKKyAgICAgICAgICAgICAg
ICBzeXMuc3Rkb3V0LndyaXRlKCdccicgKyB0b2tlbnNbMF0gKyAnICcgKyB0b2tlbnNbMV0ucmVw
bGFjZShzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksICcnKVsxOl0gKyAnICcpCisgICAgICAg
ICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICBlbGlmIGxpbmUgPT0gJyc6
CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShsaW5lKQorCisgICAgZGVmIHJ1bl90ZXN0cyhz
ZWxmLCB0ZXN0cyk6CisgICAgICAgIHJ1bl93ZWJraXRfYXJncyA9IFtzZWxmLl9wb3J0LnBhdGhf
dG9fc2NyaXB0KCdydW4td2Via2l0LXRlc3RzJyksICctLW5vLXJldHJ5LWZhaWx1cmVzJywgJy0t
bm8tc2hvdy1yZXN1bHRzJywgJy0tZnVsbC1yZXN1bHRzLWh0bWwnXQorCisgICAgICAgIHRlc3Rf
bGlzdF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJ1bm5lZF90ZXN0c19k
aXJlY3RvcnksICd0ZXN0X2xpc3QudHh0JykKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0
ZV90ZXh0X2ZpbGUodGVzdF9saXN0X2ZpbGVuYW1lLCAnXG4nLmpvaW4odGVzdHMpKQorICAgICAg
ICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctLXRlc3QtbGlzdD0nICsgdGVzdF9saXN0X2ZpbGVu
YW1lKQorCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYubGF5b3V0X3Rl
c3RzX3Jlc3VsdF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRy
ZWUoc2VsZi5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSkKKyAgICAgICAgcnVuX3dlYmtp
dF9hcmdzLmFwcGVuZCgnLS1yZXN1bHRzLWRpcmVjdG9yeT0nICsgc2VsZi5sYXlvdXRfdGVzdHNf
cmVzdWx0X2RpcmVjdG9yeSkKKworICAgICAgICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctLXdw
dHNlcnZlci1kb2Mtcm9vdD0nICsgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucnVubmVkX3Rl
c3RzX2RpcmVjdG9yeSwgVGVzdERvd25sb2FkZXIuV1BUX05BTUUpKQorCisgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMucGxhdGZvcm06CisgICAgICAgICAgICBydW5fd2Via2l0X2FyZ3MuYXBwZW5k
KCctLScgKyBzZWxmLl9vcHRpb25zLnBsYXRmb3JtKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LndlYmtpdF90ZXN0X3J1bm5lciBpcyBUcnVlOgorICAgICAgICAgICAgcnVuX3dlYmtpdF9hcmdz
LmFwcGVuZCgnLTInKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Cisg
ICAgICAgICAgICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctcScpCisKKyAgICAgICAgcHJvY2Vz
cyA9IEV4ZWN1dGl2ZSgpLnBvcGVuKHJ1bl93ZWJraXRfYXJncywgc3Rkb3V0PUV4ZWN1dGl2ZS5Q
SVBFLCBzdGRlcnI9RXhlY3V0aXZlLlNURE9VVCkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgIGxpbmUgPSBwcm9jZXNzLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxm
Ll9wcmludF9yd3Rfb3V0cHV0X2xpbmUobGluZSkKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gJyc6
CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJvY2Vzcy53YWl0KCkKKworICAgIGRl
ZiByZXN1bHRzX21hbmFnZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXN1bHRzX21h
bmFnZXIKKworICAgIGRlZiBpbml0X3Rlc3RfaW1wb3J0ZXIoc2VsZik6CisgICAgICAgIGFyZ3Mg
PSBbJy1kJywgc2VsZi5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksICctLWlnbm9yZS1leHBlY3Rh
dGlvbnMnXQorCisgICAgICAgIGZvciB0ZXN0X3BhdGggaW4gc2VsZi5fb3B0aW9ucy50ZXN0X3Bh
dGhzOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJy10JykKKyAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKHRlc3RfcGF0aCkKKworICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5mZXRjaDoKKyAg
ICAgICAgICAgIGFyZ3MuYXBwZW5kKCctLW5vLWZldGNoJykKKworICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLXYnKQorICAgICAgICBl
bGlmIHNlbGYuX29wdGlvbnMucXVpZXQ6CisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcign
d2Via2l0cHkudzNjLnRlc3RfaW1wb3J0ZXInKS5zZXRMZXZlbChsb2dnaW5nLldBUk4pCisgICAg
ICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignd2Via2l0cHkudzNjLnRlc3RfY29udmVydGVyJyku
c2V0TGV2ZWwobG9nZ2luZy5XQVJOKQorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ3dl
YmtpdHB5LnczYy50ZXN0X2Rvd25sb2FkZXInKS5zZXRMZXZlbChsb2dnaW5nLldBUk4pCisKKyAg
ICAgICAgb3B0aW9ucywgYXJncyA9IHRlc3RfaW1wb3J0ZXIucGFyc2VfYXJncyhhcmdzKQorICAg
ICAgICBzZWxmLnRlc3RfaW1wb3J0ZXIgPSB0ZXN0X2ltcG9ydGVyLlRlc3RJbXBvcnRlcihzZWxm
Ll9wb3J0Lmhvc3QsIE5vbmUsIG9wdGlvbnMpCisKKyAgICBkZWYgdGVzdF9zdWl0ZXMoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9vcHRpb25zLnRlc3RfcGF0aHMgaWYgc2VsZi5fb3B0aW9u
cy50ZXN0X3BhdGhzIGVsc2Ugc2VsZi50ZXN0X2ltcG9ydGVyLnRlc3RfZG93bmxvYWRlcigpLmFs
bF90ZXN0X3BhdGhzKCkKKworICAgIGRlZiB0ZXN0cyhzZWxmKToKKyAgICAgICAgdGVzdF9zdWl0
ZXMgPSBzZWxmLnRlc3Rfc3VpdGVzKCkKKyAgICAgICAgaWYgc2VsZi5fdGVzdHMgaXMgTm9uZToK
KyAgICAgICAgICAgIHRlc3Rfc3VpdGVfcGF0aHMgPSBbc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgdGVzdF9zdWl0ZSkgZm9yIHRlc3Rfc3VpdGUgaW4g
dGVzdF9zdWl0ZXNdCisgICAgICAgICAgICBzZWxmLl90ZXN0cyA9IHNlbGYuX3BvcnQudGVzdHMo
dGVzdF9zdWl0ZV9wYXRocykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RzCisKKyAgICBkZWYg
Y29uZm9ybWFuY2VfcmVzdWx0KHNlbGYsIHRlc3QpOgorICAgICAgICBpZiBzZWxmLl9jb25mb3Jt
YW5jZV9yZXN1bHRzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jb25mb3JtYW5jZV9yZXN1
bHRzID0gc2VsZi5yZXN1bHRzX21hbmFnZXIoKS5jb25mb3JtYW5jZV9yZXN1bHRzKCkKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2NvbmZvcm1hbmNlX3Jlc3VsdHNbc2VsZi5yZXN1bHRzX21hbmFnZXIo
KS53M2NfdGVzdF9uYW1lKHRlc3QpXQorCisgICAgZGVmIGNoZWNrX2NvbmZvcm1hbmNlKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJlZnJlc2ggaXMgVHJ1ZToKKyAgICAgICAgICAg
IF9sb2cuaW5mbygnSW1wb3J0aW5nIHRlc3RzLi4uJykKKyAgICAgICAgICAgIHNlbGYudGVzdF9p
bXBvcnRlci5kb19pbXBvcnQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5pbmZv
KCdTa2lwcGluZyB0ZXN0IGltcG9ydC4uLicpCisKKyAgICAgICAgIyBSZWdlbmVyYXRlIHJ1bm5l
ZF90ZXN0X2RpcmVjdG9yeSB0byBzdGFydCBpbiBhIGNsZWFuIHN0YXRlIChubyAtZXhwZWN0ZWQu
dHh0IGZpbGVzIGluIHBhcnRpY3VsYXIpLgorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJtdHJl
ZShzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
Y29weXRyZWUoc2VsZi5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksIHNlbGYucnVubmVkX3Rlc3Rz
X2RpcmVjdG9yeSkKKworICAgICAgICBfbG9nLmluZm8oJ1J1bm5pbmcgdGVzdHMuLi4nKQorICAg
ICAgICBzZWxmLnJ1bl90ZXN0cyhzZWxmLnRlc3RzKCkpCisKKyAgICAgICAgX2xvZy5pbmZvKCdQ
YXJzaW5nIHRlc3QgcmVzdWx0cy4uLicpCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfbWFuYWdlciA9
IFRlc3RSZXN1bHRzTWFuYWdlcihzZWxmLl9wb3J0LCBzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3Rv
cnksIHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3RvcnksIHNlbGYudGVzdHMoKSkKKyAg
ICAgICAgc2VsZi5fcmVzdWx0c19tYW5hZ2VyLnByb2Nlc3NfdGVzdF9yZXN1bHRzKCkKKworICAg
ICAgICBfbG9nLmluZm8oJ0dlbmVyYXRpbmcgY29uZm9ybWFuY2UgcmVzdWx0cy4uLicpCisgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5yZXN1bHRzX2Rp
cmVjdG9yeSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKCkKKworICAg
ICAgICBfbG9nLmluZm8oJ0dlbmVyYXRpbmcgZXhwZWN0YXRpb24gdXBkYXRlcy4uLicpCisgICAg
ICAgIHNlbGYud3JpdGVfdGVzdF9leHBlY3RhdGlvbl91cGRhdGVzKHNlbGYucmVzdWx0c19kaXJl
Y3RvcnkpCisgICAgICAgIHNlbGYud3JpdGVfaW1wb3J0X2V4cGVjdGF0aW9uX3VwZGF0ZXMoc2Vs
Zi5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHBy
aW50X3Jlc3VsdHNfdG9fY29uc29sZShzZWxmKToKKyAgICAgICAgc3VtbWFyeSA9IHNlbGYucmVz
dWx0c19tYW5hZ2VyKCkuc3VtbWFyeSgpCisgICAgICAgIF9sb2cuaW5mbygnUnVuICcgKyBzdHIo
c3VtbWFyeVsndG90YWwnXSkgKyAnIHRlc3RzJykKKyAgICAgICAgX2xvZy5pbmZvKCdQYXNzOiAn
ICsgc3RyKHN1bW1hcnlbJ251bV9wYXNzJ10pKQorICAgICAgICBfbG9nLmluZm8oJ1BhcnRpYWw6
ICcgKyBzdHIoc3VtbWFyeVsnbnVtX3BhcnRpYWwnXSkpCisgICAgICAgIF9sb2cuaW5mbygnRmFp
bDogJyArIHN0cihzdW1tYXJ5WydudW1fZmFpbCddKSkKKyAgICAgICAgX2xvZy5pbmZvKCdFcnJv
cjogJyArIHN0cihzdW1tYXJ5WydudW1fZXJyb3InXSkpCisKKyAgICBkZWYgd3JpdGVfaW1wb3J0
X2V4cGVjdGF0aW9uX3VwZGF0ZXMoc2VsZiwgZGlyZWN0b3J5X3BhdGgpOgorICAgICAgICBpbXBv
cnRfZXhwZWN0YXRpb25zID0gW10KKyAgICAgICAgZm9yIHRlc3Rfc3VpdGUgaW4gc2VsZi50ZXN0
X3N1aXRlcygpOgorICAgICAgICAgICAgaW1wb3J0X2V4cGVjdGF0aW9ucy5hcHBlbmQoJyMgJXMg
WyBQYXNzIF0nICUgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3czY19kaXJlY3Rv
cnksIHRlc3Rfc3VpdGUpKQorCisgICAgICAgIGltcG9ydF9leHBlY3RhdGlvbnMuYXBwZW5kKCcn
KQorCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYudGVzdHMoKToKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdCh0ZXN0KSA9PSAnUEFTUyc6CisgICAgICAgICAgICAg
ICAgaW1wb3J0X2V4cGVjdGF0aW9ucy5hcHBlbmQoJyVzIFsgU2tpcCBdJyAlIHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLmxheW91dF93M2NfZGlyZWN0b3J5LCBzZWxmLnJlc3VsdHNfbWFuYWdl
cigpLnczY190ZXN0X25hbWUodGVzdCkpKQorCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3Jp
dGVfdGV4dF9maWxlKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihkaXJlY3RvcnlfcGF0aCwgJ0ltcG9y
dEV4cGVjdGF0aW9ucycpLCAnXG4nLmpvaW4oaW1wb3J0X2V4cGVjdGF0aW9ucykpCisKKyAgICBk
ZWYgd3JpdGVfdGVzdF9leHBlY3RhdGlvbl91cGRhdGVzKHNlbGYsIGRpcmVjdG9yeV9wYXRoKToK
KyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMgPSBbJyMgVzNDIHRlc3QgaW5mcmFzdHJ1Y3R1cmUg
Zm9sZGVycyddCisgICAgICAgIGZvciBwYXRoIGluIHNlbGYudGVzdF9pbXBvcnRlci50ZXN0X2Rv
d25sb2FkZXIoKS5pbmZyYXN0cnVjdHVyZV9wYXRoczoKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksIHBhdGgp
CisgICAgICAgICAgICBpZiAoc2VsZi5fZmlsZXN5c3RlbS5pc2RpcihmaWxlX3BhdGgpKToKKyAg
ICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5hcHBlbmQoJyVzIFsgU2tpcCBdJyAlIHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF93M2NfZGlyZWN0b3J5LCBwYXRoKSkKKyAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5c3RlbS5q
b2luKGRpcmVjdG9yeV9wYXRoLCAnVGVzdEV4cGVjdGF0aW9ucycpLCAnXG4nLmpvaW4odGVzdF9l
eHBlY3RhdGlvbnMpKQorCisgICAgZGVmIHdyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZik6
CisgICAgICAgIHRlc3RfcnVuX2luZm8gPSB7fQorICAgICAgICB0ZXN0X3J1bl9pbmZvWydwb3J0
X25hbWUnXSA9IHNlbGYuX3BvcnQucG9ydF9uYW1lCisgICAgICAgIHRlc3RfcnVuX2luZm9bJ3dl
Yl9wbGF0Zm9ybV90ZXN0c192ZXJzaW9uJ10gPSBzZWxmLnRlc3RfaW1wb3J0ZXIudGVzdF9kb3du
bG9hZGVyKCkudGVzdHNfdmVyc2lvbignV1BUJykKKyAgICAgICAgdGVzdF9ydW5faW5mb1snY3Nz
d2dfdGVzdHNfdmVyc2lvbiddID0gc2VsZi50ZXN0X2ltcG9ydGVyLnRlc3RfZG93bmxvYWRlcigp
LnRlc3RzX3ZlcnNpb24oJ0NTUycpCisgICAgICAgIHRlc3RfcnVuX2luZm9bJ3Jlc3VsdHNfZGly
ZWN0b3J5J10gPSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoc2VsZi5sYXlvdXRfdGVzdHNfcmVz
dWx0X2RpcmVjdG9yeSwgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgdGVzdF9ydW5f
aW5mb1sndGVzdHNfZGlyZWN0b3J5J10gPSBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoc2VsZi5y
dW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBz
ZWxmLnJlc3VsdHNfbWFuYWdlcigpLndyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZi5yZXN1
bHRzX2RpcmVjdG9yeSwgdGVzdF9ydW5faW5mbykKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmco
KToKKyAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisgICAgICAg
IGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIGlmIHJlY29yZC5sZXZlbG5v
ID4gbG9nZ2luZy5JTkZPOgorICAgICAgICAgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChyZWNv
cmQubGV2ZWxuYW1lLCByZWNvcmQuZ2V0TWVzc2FnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
Y29yZC5nZXRNZXNzYWdlKCkKKworICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAg
ICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGhhbmRsZXIgPSBMb2dIYW5kbGVy
KCkKKyAgICBoYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBsb2dnZXIuYWRkSGFu
ZGxlcihoYW5kbGVyKQorICAgIHJldHVybiBoYW5kbGVyCisKKworZGVmIG1haW4oYXJndiwgc3Rk
b3V0LCBzdGRlcnIpOgorICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKyAgICBob3N0ID0gSG9zdCgp
CisgICAgcGFyc2VyID0gY3JlYXRlX2FyZ3VtZW50X3BhcnNlcigpCisgICAgb3B0aW9ucywgYXJn
cyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCisgICAgcG9ydCA9IGhvc3QucG9ydF9m
YWN0b3J5LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRwYXJzZS5WYWx1ZXMoeyd3ZWJraXRfdGVz
dF9ydW5uZXInOiBvcHRpb25zLndlYmtpdF90ZXN0X3J1bm5lcn0pKQorCisgICAgcnVubmVyID0g
Q29uZm9ybWFuY2VDaGVja2VyKHBvcnQsIG9wdGlvbnMpCisgICAgaWYgcnVubmVyLmNoZWNrX2Nv
bmZvcm1hbmNlKCk6CisgICAgICAgIHJ1bm5lci5wcmludF9yZXN1bHRzX3RvX2NvbnNvbGUoKQor
ICAgICAgICBfbG9nLmluZm8oIlJlc3VsdHMgZXhwb3J0ZWQgaW4gJyIgKyBydW5uZXIucmVzdWx0
c19kaXJlY3RvcnkgKyAiJyIpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgc3lz
LmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9yZXN1bHRzX21hbmFnZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3Jlc3VsdHNfbWFuYWdlci5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42MGI4ZjRmMGMxMGNjMmJiNGI0ZjdhOTFiOTA3NzY4MjJmOTZmNjU3Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9yZXN1bHRzX21hbmFn
ZXIucHkKQEAgLTAsMCArMSwxNDYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fu
b24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorIFRoaXMgc2NyaXB0IG1h
bmFnZSBKU09OIGFuZCByZXN1bHRzLmh0bWwgZmlsZXMgZm9yIFczQyB0ZXN0IHJlc3VsdHMuCisi
IiIKKworaW1wb3J0IGpzb24KKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKKworCitjbGFzcyBUZXN0UmVzdWx0
c01hbmFnZXIob2JqZWN0KToKKworICAgIF9KU09OX1BSRUZJWCA9ICdBRERfQ09ORk9STUFOQ0Vf
UkVTVUxUUygnCisgICAgX0pTT05fU1VGRklYID0gJyk7JworCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnQsIGJhc2VfZGlyZWN0b3J5LCByZXN1bHRfZGlyLCB0ZXN0cyk6CisgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmls
ZXN5c3RlbQorICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdF9kaXIKKyAg
ICAgICAgc2VsZi5fdGVzdHMgPSB0ZXN0cworCisgICAgICAgICMgUm9vdCBkaXJlY3Rvcnkgb2Yg
VzNDIGltcG9ydGVkIHRlc3QKKyAgICAgICAgc2VsZi5fYmFzZV9kaXJlY3RvcnkgPSBiYXNlX2Rp
cmVjdG9yeQorCisgICAgZGVmIHczY190ZXN0X25hbWUoc2VsZiwgdGVzdCk6CisgICAgICAgIHJl
dHVybiBzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgodGVzdCwgc2VsZi5fYmFzZV9kaXJlY3Rvcnkp
CisKKyAgICBkZWYgX2dldF90ZXN0X3Jlc3VsdHMoc2VsZiwgdGVzdHMsIHRlc3RfZGljdCwgcGF0
aCk6CisgICAgICAgIGZvciBrZXkgaW4gdGVzdF9kaWN0LmtleXMoKToKKyAgICAgICAgICAgIF9w
YXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIGtleSkKKyAgICAgICAgICAgIF9wb3Rl
bnRpYWxfdGVzdCA9IHRlc3RfZGljdFtrZXldCisgICAgICAgICAgICAjIElzIGl0IGEgdGVzdCBl
bnRyeSBvciBhIHN1Yi1kaXJlY3RvcnkKKyAgICAgICAgICAgIGlmICdyZXBvcnQnIGluIF9wb3Rl
bnRpYWxfdGVzdDoKKyAgICAgICAgICAgICAgICAjIFN0b3JlIHRoZSB0ZXN0CisgICAgICAgICAg
ICAgICAgdGVzdHNbX3BhdGhdID0gX3BvdGVudGlhbF90ZXN0CisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2dldF90ZXN0X3Jlc3VsdHModGVzdHMsIF9wb3RlbnRpYWxf
dGVzdCwgX3BhdGgpCisKKyAgICBkZWYgcHJvY2Vzc190ZXN0X3Jlc3VsdHMoc2VsZik6CisgICAg
ICAgIHRlc3RfcmVzdWx0cyA9IHt9CisgICAgICAgIHJlc3VsdHNfanNvbl9wYXRoID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAnZnVsbF9yZXN1bHRzLmpz
b24nKQorICAgICAgICByZXN1bHRzX2pzb24gPSBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLmxvYWRf
anNvbihzZWxmLl9maWxlc3lzdGVtLCByZXN1bHRzX2pzb25fcGF0aCkKKyAgICAgICAgcGF0aCA9
IHNlbGYuX2ZpbGVzeXN0ZW0uc2VwIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNhYnMoc2VsZi5fYmFz
ZV9kaXJlY3RvcnkpIGVsc2UgJycKKyAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0ZXN0
X3Jlc3VsdHMsIHJlc3VsdHNfanNvblsndGVzdHMnXSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHRl
c3RfcmVzdWx0cworCisgICAgZGVmIF9qc190ZXN0X2NvbmZvcm1hbmNlKHNlbGYsIGV4cGVjdGVk
X3RleHQpOgorICAgICAgICAjIFRlc3QgaXMgc2FpZCB0byBQQVNTIGlmIGF0IGxlYXN0IG9uZSBs
aW5lIGlzIFBBU1MgYW5kIG5vIGxpbmUgaXMgRkFJTAorICAgICAgICBoYXNGYWlsID0gRmFsc2UK
KyAgICAgICAgaGFzUGFzcyA9IEZhbHNlCisgICAgICAgIGZvciBsaW5lIGluIGV4cGVjdGVkX3Rl
eHQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQVNTJyk6
CisgICAgICAgICAgICAgICAgaGFzUGFzcyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgbGluZS5z
dGFydHN3aXRoKCdGQUlMJyk6CisgICAgICAgICAgICAgICAgaGFzRmFpbCA9IFRydWUKKyAgICAg
ICAgaWYgaGFzUGFzczoKKyAgICAgICAgICAgIHJldHVybiAnUEFTUycgaWYgbm90IGhhc0ZhaWwg
ZWxzZSAnUEFSVElBTCcKKyAgICAgICAgaWYgaGFzRmFpbDoKKyAgICAgICAgICAgIHJldHVybiAn
RkFJTCcKKyAgICAgICAgcmV0dXJuICdFUlJPUicKKworICAgIGRlZiBfY29uZm9ybWFuY2Vfc3Rh
dHVzKHNlbGYsIHRlc3RfbmFtZSwgdGVzdF9yZXN1bHRzKToKKyAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGltcHJvdmUgcmVmdGVzdC9qc3Rlc3QgZGV0ZWN0aW9uLgorICAgICAgICBpZiBub3Qg
dGVzdF9uYW1lIGluIHRlc3RfcmVzdWx0czoKKyAgICAgICAgICAgIHJldHVybiB7J3R5cGUnOiAn
cmVmdGVzdCcsICdzdGF0dXMnOiAnUEFTUyd9CisKKyAgICAgICAgdGVzdF9yZXN1bHQgPSB0ZXN0
X3Jlc3VsdHNbdGVzdF9uYW1lXQorCisgICAgICAgIHJlcG9ydCA9IHRlc3RfcmVzdWx0WydyZXBv
cnQnXQorICAgICAgICBpZiByZXBvcnQgPT0gJ01JU1NJTkcnOgorICAgICAgICAgICAgdGV4dCA9
IHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dCh0ZXN0X25hbWUpCisgICAgICAgICAgICBpZiBub3Qo
dGV4dCBpcyBOb25lIG9yIGxlbih0ZXh0KSA9PSAwKToKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyd0eXBlJzogJ2pzdGVzdCcsICdzdGF0dXMnOiBzZWxmLl9qc190ZXN0X2NvbmZvcm1hbmNlKHRl
eHQpfQorICAgICAgICBlbGlmIHJlcG9ydCA9PSAnUkVHUkVTU0lPTic6CisgICAgICAgICAgICBy
ZXR1cm4geyd0eXBlJzogJ3JlZnRlc3QnLCAnc3RhdHVzJzogJ0ZBSUwnfQorCisgICAgICAgIHJl
YXNvbiA9IHRlc3RfcmVzdWx0WydhY3R1YWwnXQorICAgICAgICBpZiByZWFzb24gPT0gJ0NSQVNI
JyBvciByZWFzb24gPT0gJ1RJTUVPVVQnOgorICAgICAgICAgICAgcmV0dXJuIHsndHlwZSc6ICdq
c3Rlc3QnLCAnc3RhdHVzJzogcmVhc29ufQorCisgICAgICAgIHJldHVybiB7J3R5cGUnOiAnanN0
ZXN0JywgJ3N0YXR1cyc6ICdFUlJPUid9CisKKyAgICBkZWYgY29uZm9ybWFuY2VfcmVzdWx0cyhz
ZWxmKToKKyAgICAgICAgdGVzdF93a3JfcmVzdWx0cyA9IHNlbGYucHJvY2Vzc190ZXN0X3Jlc3Vs
dHMoKQorICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxm
Ll90ZXN0czoKKyAgICAgICAgICAgIHJlc3VsdHNbc2VsZi53M2NfdGVzdF9uYW1lKHRlc3RfbmFt
ZSldID0gc2VsZi5fY29uZm9ybWFuY2Vfc3RhdHVzKHRlc3RfbmFtZSwgdGVzdF93a3JfcmVzdWx0
cykKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGRlZiBzdW1tYXJ5KHNlbGYpOgorICAg
ICAgICBudW1fcGFzcyA9IG51bV9wYXJ0aWFsID0gbnVtX2ZhaWwgPSBudW1fZXJyb3IgPSAwCisg
ICAgICAgIGNvbmZvcm1hbmNlX3Jlc3VsdHMgPSBzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHMoKQor
ICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjb25mb3JtYW5jZV9yZXN1bHRzLml0ZXJpdGVtcygp
OgorICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWVbJ3N0YXR1cyddCisgICAgICAgICAgICBpZiBy
ZXN1bHQgPT0gJ1BBU1MnOgorICAgICAgICAgICAgICAgIG51bV9wYXNzICs9IDEKKyAgICAgICAg
ICAgIGVsaWYgcmVzdWx0ID09ICdQQVJUSUFMJzoKKyAgICAgICAgICAgICAgICBudW1fcGFydGlh
bCArPSAxCisgICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSAnRkFJTCc6CisgICAgICAgICAgICAg
ICAgbnVtX2ZhaWwgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBudW1f
ZXJyb3IgKz0gMQorICAgICAgICBzdW1tYXJ5ID0ge30KKyAgICAgICAgc3VtbWFyeVsndG90YWwn
XSA9IG51bV9wYXNzICsgbnVtX2ZhaWwgKyBudW1fcGFydGlhbCArIG51bV9lcnJvcgorICAgICAg
ICBzdW1tYXJ5WydudW1fcGFzcyddID0gbnVtX3Bhc3MKKyAgICAgICAgc3VtbWFyeVsnbnVtX2Zh
aWwnXSA9IG51bV9mYWlsCisgICAgICAgIHN1bW1hcnlbJ251bV9wYXJ0aWFsJ10gPSBudW1fcGFy
dGlhbAorICAgICAgICBzdW1tYXJ5WydudW1fZXJyb3InXSA9IG51bV9lcnJvcgorICAgICAgICBy
ZXR1cm4gc3VtbWFyeQorCisgICAgZGVmIHdyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZiwg
cGF0aCwgdGVzdF9ydW5faW5mbyk6CisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICByZXN1
bHRzWydjb25mb3JtYW5jZV9yZXN1bHRzJ10gPSBzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHMoKQor
ICAgICAgICByZXN1bHRzLnVwZGF0ZSh0ZXN0X3J1bl9pbmZvKQorCisgICAgICAgIGpzb25fc3Ry
aW5nID0ganNvbi5kdW1wcyhyZXN1bHRzLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUsIHNlcGFy
YXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAganNvbl9zdHJpbmcgPSBzZWxmLl9KU09OX1BSRUZJ
WCArIGpzb25fc3RyaW5nICsgc2VsZi5fSlNPTl9TVUZGSVgKKyAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsICd3M2NfY29u
Zm9ybWFuY2VfcmVzdWx0cy5qc29uJyksIGpzb25fc3RyaW5nKQorCisgICAgICAgIHJlc3VsdHNf
ZmlsZSA9IHNlbGYuX3BvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsICdp
bXBvcnRlZCcsICd3M2MnLCAncmVzb3VyY2VzJywgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0
bWwnKQorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhyZXN1bHRzX2ZpbGUpOgor
ICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5ZmlsZShyZXN1bHRzX2ZpbGUsIHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihwYXRoLCAndzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbCcpKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggNWY1NDEyN2UzMWYwOTg3NGRjZDkwNDk3
YTQ0YTE5MDlkNDU4MTRlNy4uMjA4MGVhNzRjZDJhZmM0ZTk4MzA4YjVhZDUzNzU5NDRkMjUyMTk1
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUt
MDEtMTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGVkIFczQyBjb25mb3JtYW5jZSB0ZXN0aW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3NjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgdGVtcGxh
dGUgdG8gZGlzcGxheSBjb25mb3JtYW5jZSByZXN1bHRzLgorCisgICAgICAgICogcmVzb3VyY2Vz
L3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWw6IEFkZGVkLgorCiAyMDE0LTExLTE0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wb3J0
IHczYyB0ZXN0cyBmb3IgY2FudmFzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2MvcmVzb3VyY2VzL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvcmVzb3VyY2VzL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDkxMmI2MjFkNzBlNzY0OGM0YjIwYzhmMGU2OWEwM2YyZTBlOGE0OQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvdzNjX2NvbmZvcm1h
bmNlX3Jlc3VsdHMuaHRtbApAQCAtMCwwICsxLDQ2NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHN0eWxlPgorI3Jlc3VsdHMgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAg
IHBhZGRpbmc6IDIwcHg7CisgICAgY2xlYXI6IGJvdGg7Cit9Cisjc3VtbWFyeSB7CisgICAgbWFy
Z2luLXRvcDogMjBweDsKKyAgICBtYXJnaW4tYm90dG9tOiAyMHB4OworfQorCisudGVzdCwgLmZp
cnN0bGluZSB7CisgICAgZGlzcGxheTogdGFibGU7Cit9CisudGVzdG5hbWUsIC50ZXN0cmVzdWx0
LCAuZmlyc3RMaW5lID4gZGl2IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsYXZlbmRlcjsKKyAg
ICBib3JkZXItYm90dG9tOnNvbGlkIDFweCB3aGl0ZTsKK30KKworLmZpcnN0TGluZUNlbGx7Cisg
ICAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lk
dGg6IDgwMHB4OworfQorCisuc2Vjb25kTGluZUNlbGwgeworICAgIGRpc3BsYXk6IHRhYmxlLWNl
bGw7CisgICAgcGFkZGluZy1sZWZ0OiA1MHB4OworICAgIHdpZHRoOiA3NTBweDsKK30KKworLnRl
c3RuYW1lIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHdpZHRoOiA5MDBweDsKKyAg
ICBtYXJnaW4tbGVmdDoyMHB4OworfQorCisudGVzdG5hbWVsaW5rIHsKKyAgICBmbG9hdDpsZWZ0
OworICAgIG1hcmdpbi1yaWdodDoxMHB4OworfQorCisudGVzdHJlc3VsdGxpbmsgIHsKKyAgICBm
bG9hdDogbGVmdDsKK30KKworLnRlc3RyZXN1bHRsaW5rIGEgeworICAgIHRleHQtdHJhbnNmb3Jt
OiBjYXBpdGFsaXplOworfQorCisuYnVnZmlsaW5nbGluayAgeworICAgIHRleHQtYWxpZ246IHJp
Z2h0OworfQorCisucG9ydCB7CisgICAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgICB3aWR0aDog
MjUwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisudGVzdHJlc3VsdCB7CisgICAg
ZGlzcGxheTogdGFibGUtY2VsbDsKKyAgICB3aWR0aDogMTUwcHg7CisgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworfQorCisudGVzdHJlc3VsdDpub3QoOmxhc3QtY2hpbGQpIHsKKyAgICBwYWRkaW5n
LXJpZ2h0OiAxMDBweDsKK30KKworLnBhcnRpYWwsIC5wYXNzLCAuZmFpbCwgLnRpbWVvdXQsIC5l
cnJvciB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorLnBhc3MgYSB7CisgICAgY29sb3I6
IGdyZWVuOworfQorCisucGFydGlhbCBhIHsKKyAgICBjb2xvcjogeWVsbG93OworfQorCisuZmFp
bCBhIHsKKyAgICBjb2xvcjogb3JhbmdlOworfQorCisudGltZW91dCBhIHsKKyAgICBjb2xvcjog
cmVkOworfQorCisuY3Jhc2ggYSB7CisgICAgY29sb3I6IHJlZDsKK30KKworLmVycm9yIGEgewor
ICAgIGNvbG9yOiByZWQ7Cit9CisKKy5lcnJvci1yZXN1bHRzLWhpc3QgeworICAgIGJhY2tncm91
bmQtY29sb3I6IHJlZDsKKyAgICBmbG9hdDogbGVmdDsgCit9CisgCisuZmFpbC1yZXN1bHRzLWhp
c3QgeworICAgIGJhY2tncm91bmQtY29sb3I6IG9yYW5nZTsKKyAgICBmbG9hdDogbGVmdDsKK30K
KworLnBhcnRpYWwtcmVzdWx0cy1oaXN0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7
CisgICAgZmxvYXQ6IGxlZnQ7Cit9CisucGFzcy1yZXN1bHRzLWhpc3QgeworICAgIGJhY2tncm91
bmQtY29sb3I6IGdyZWVuOworICAgIGZsb2F0OiBsZWZ0OworfQorCisubW9kdWxlLW5hbWUgewor
ICAgIGRpc3BsYXk6dGFibGUtY2VsbDsKKyAgICB3aWR0aDogODAwcHg7Cit9CisKKy5udW1iZXIt
b2YtdGVzdHMgeworICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOworICAgIHdpZHRoOiA1MHB4Owor
fQorCisubW9kdWxlLXJlc3VsdHMgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBkaXNw
bGF5OnRhYmxlLWNlbGw7CisgICAgd2lkdGg6IDI1MHB4OworfQorCisuaGlzdG9ncmFtIHsKKyAg
ICBkaXNwbGF5OmlubGluZS1ibG9jazsKKyAgICBtYXJnaW4tbGVmdDogNDBweDsKKyAgICBtYXJn
aW4tdG9wOiA1cHg7CisgICAgd2lkdGg6MTUwcHg7Cit9CisKKy5tb2R1bGV7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogbGF2ZW5kZXI7CisgICAgYm9yZGVyOnNvbGlkIDFweCB3aGl0ZTsKKyAgICBk
aXNwbGF5OnRhYmxlOworfQorCisubW9kdWxlLXN1bW1hcnksIC5zZWNvbmRMaW5lIHsKKyAgICBk
aXNwbGF5OnRhYmxlOworICAgIGJhY2tncm91bmQ6IGxhdmVuZGVyOworICAgIGJvcmRlcjpzb2xp
ZCAxcHggd2hpdGU7CisgICAgaGVpZ2h0OiAyNXB4OworICAgIGN1cnNvcjpwb2ludGVyOworfQor
CisuYm94eworICAgIGRpc3BsYXk6IHRhYmxlOworfQorCisuaGlkZGVuLWRhdGEgeworICAgIGRp
c3BsYXk6IG5vbmU7Cit9CisKKy5sZWdlbmQgPiBkaXYgeworICAgIGZsb2F0OiBsZWZ0OworICAg
IG1hcmdpbi1yaWdodDogNXB4OworICAgIG1pbi13aWR0aDogMjBweDsKK30KKworLmxlZ2VuZCB7
Cit9Cis8L3N0eWxlPgorPHNjcmlwdD4KKworZnVuY3Rpb24gdGVzdHNEaXJlY3RvcnkocmVzdWx0
cykKK3sKKyAgICByZXR1cm4gKHJlc3VsdHMucm9vdF9kaXJlY3RvcnkgPyByZXN1bHRzLnJvb3Rf
ZGlyZWN0b3J5IDogcmVzdWx0cy5wb3J0X25hbWUpICsgIi8iICsgCisgICAgICAgICAgICAocmVz
dWx0cy50ZXN0c19kaXJlY3RvcnkgPyByZXN1bHRzLnRlc3RzX2RpcmVjdG9yeSA6ICJpbXBvcnRl
ZC10ZXN0cyIpCit9CisKK2Z1bmN0aW9uIHJlc3VsdHNEaXJlY3RvcnkocmVzdWx0cykKK3sKKyAg
ICByZXR1cm4gKHJlc3VsdHMucm9vdF9kaXJlY3RvcnkgPyByZXN1bHRzLnJvb3RfZGlyZWN0b3J5
IDogcmVzdWx0cy5wb3J0X25hbWUpICsgIi8iICsgCisgICAgICAgICAgICAocmVzdWx0cy5yZXN1
bHRzX2RpcmVjdG9yeSA/IHJlc3VsdHMucmVzdWx0c19kaXJlY3RvcnkgOiAibGF5b3V0LXRlc3Qt
cmVzdWx0cyIpCit9CisKK2Z1bmN0aW9uIGdpdGh1YlRlc3RVUkwodGVzdG5hbWUsIHJlc3VsdHMp
Cit7CisgICAgcmV0dXJuICJodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9ibG9iLyIgKyByZXN1bHRzLnRlc3RzX3ZlcnNpb24gKyAiLyIgKyB0ZXN0bmFtZQorfQorCitm
dW5jdGlvbiBidWd6aWxsYVVSTCh0aXRsZSwgY29tbWVudCkKK3sKKyAgICByZXR1cm4gImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL2VudGVyX2J1Zy5jZ2k/YXNzaWduZWRfdG89d2Via2l0LXVuYXNz
aWduZWQlNDBsaXN0cy53ZWJraXQub3JnJnByb2R1Y3Q9V2ViS2l0JmZvcm1fbmFtZT1lbnRlcl9i
dWcmc2hvcnRfZGVzYz0iICsgdGl0bGUgKyAiJmNvbW1lbnQ9IiArIGNvbW1lbnQKK30KKworZnVu
Y3Rpb24gdGVzdEZpbGVMaW5rKHRlc3RuYW1lLCByZXN1bHRzKQoreworICAgIHJldHVybiAiPGRp
diBjbGFzcz0ndGVzdG5hbWVsaW5rJz48YSBocmVmPSciICsgdGVzdHNEaXJlY3RvcnkocmVzdWx0
cykgKyAiLyIgKyB0ZXN0bmFtZSArICInPiIgKyB0ZXN0bmFtZSArICI8L2E+PC9kaXY+IgorICAg
ICAgICArICI8ZGl2IGNsYXNzPSdnaXRodWJsaW5rJz4oPGEgaHJlZj0nIiArIGdpdGh1YlRlc3RV
UkwodGVzdG5hbWUsIHJlc3VsdHMpICsgIic+Z2l0aHViPC9hPik8L2Rpdj4iIAorfQorCitmdW5j
dGlvbiB0ZXN0UmVzdWx0RmlsZUxpbmsodGVzdG5hbWUsIHJlc3VsdCwgcmVzdWx0cykKK3sKKyAg
ICB2YXIgc3VmZml4ID0gIi4iICsgdGVzdG5hbWUuc3BsaXQoJy4nKS5wb3AoKQorICAgIHZhciBu
ZXdfc3VmZml4ID0gIi1leHBlY3RlZC50eHQiCisgICAgcmVzdWx0X3N0YXR1cyA9IHJlc3VsdC5z
dGF0dXMudG9Mb3dlckNhc2UoKS50cmltKCkKKyAgICBpZiAocmVzdWx0X3N0YXR1cyA9PSAiY3Jh
c2giKQorICAgICAgICBuZXdfc3VmZml4ID0gIi1jcmFzaC1sb2cudHh0IgorICAgIGlmIChyZXN1
bHQudHlwZSA9PSAicmVmdGVzdCIpCisgICAgICAgIG5ld19zdWZmaXggPSAiLWRpZmZzLmh0bWwi
CisgICAgCisgICAgdmFyIGxpbmsgPSAiPGRpdiBjbGFzcz0ndGVzdHJlc3VsdGxpbmsnPjxhIGhy
ZWY9JyIgKyB0ZXN0c0RpcmVjdG9yeShyZXN1bHRzKSArICIvIiArIHRlc3RuYW1lLnJlcGxhY2Uo
c3VmZml4LCBuZXdfc3VmZml4KSArICInPiIgKyByZXN1bHRfc3RhdHVzICsgIjwvYT48L2Rpdj4i
CisKKyAgICBpZiAocmVzdWx0ICE9ICJwYXNzIikgeworICAgICAgICB2YXIgdGl0bGUgPSBlbmNv
ZGVVUklDb21wb25lbnQoIlczQyAiICsgdGVzdG5hbWUgKyAiIHRlc3QgaXMgIiArIHJlc3VsdF9z
dGF0dXMgKyAiaW5nIikKKyAgICAgICAgdmFyIGNvbW1lbnQgPSBlbmNvZGVVUklDb21wb25lbnQo
Z2l0aHViVGVzdFVSTCh0ZXN0bmFtZSwgcmVzdWx0cykgKyAiIGlzICIgKyByZXN1bHRfc3RhdHVz
ICsgImluZyBvbiAiICsgcmVzdWx0cy5wb3J0X25hbWUudG9VcHBlckNhc2UoKSArICIuIikKKyAg
ICAgICAgbGluayArPSAiPGRpdiBjbGFzcz0nYnVnZmlsaW5nbGluayc+PGEgaHJlZj0nIiArIGJ1
Z3ppbGxhVVJMKHRpdGxlLCBjb21tZW50KSArICInPmZpbGUgYnVnPC9hPjwvZGl2PiIKKyAgICB9
CisKKyAgICByZXR1cm4gbGluaworfQorCitmdW5jdGlvbiB0ZXN0U3VpdGVTdGF0ZUhpc3RvZ3Jh
bShudW1FcnJvciwgbnVtRmFpbCwgbnVtUGFydGlhbCwgbnVtUGFzcykKK3sKKyAgICB2YXIgdG90
YWwgPSBudW1FcnJvciArIG51bVBhc3MgKyBudW1QYXJ0aWFsICsgbnVtRmFpbAorCisgICAgdmFy
IGh0bWwgPSAnPGRpdiBjbGFzcz0ibW9kdWxlLXJlc3VsdHMiPicKKworICAgIGh0bWwgKz0gJzxk
aXYgY2xhc3M9Im51bWJlci1vZi10ZXN0cyI+JyArIG51bVBhc3MgKyAnLycgKyB0b3RhbCArICc8
L2Rpdj4nCisKKyAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJoaXN0b2dyYW0iPicKKyAgICBpZiAo
bnVtRXJyb3IpCisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImVycm9yLXJlc3VsdHMtaGlz
dCIgc3R5bGU9IndpZHRoOicgKyAoMTAwICogbnVtRXJyb3IgLyB0b3RhbCkgKyAnJSI+Jm5ic3A7
PC9kaXY+JworICAgIGlmIChudW1GYWlsKQorICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJm
YWlsLXJlc3VsdHMtaGlzdCIgc3R5bGU9IndpZHRoOicgKyAoMTAwICogbnVtRmFpbCAvIHRvdGFs
KSAgKyAnJSI+Jm5ic3A7PC9kaXY+JworICAgIGlmIChudW1QYXJ0aWFsKQorICAgICAgICBodG1s
ICs9ICc8ZGl2IGNsYXNzPSJwYXJ0aWFsLXJlc3VsdHMtaGlzdCIgc3R5bGU9IndpZHRoOicgKyAo
MTAwICogbnVtUGFydGlhbCAvIHRvdGFsKSArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYgKG51
bVBhc3MpCisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InBhc3MtcmVzdWx0cy1oaXN0IiBz
dHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1QYXNzIC8gdG90YWwpICsgJyUiPiZuYnNwOzwvZGl2
PicKKyAgICBodG1sICs9ICc8L2Rpdj4nCisKKyAgICByZXR1cm4gaHRtbCArICc8L2Rpdj4nCit9
CisKK2Z1bmN0aW9uIHRlc3RzdWl0ZU1vZHVsZXMocmVzdWx0cykKKyB7CisgICAgdmFyIG1vZHVs
ZXMgPSB7fQorICAgIC8vIGZpcnN0IHRyeSB0byBvbmx5IHNob3cgbW9kdWxlIGZyb20gVVJMIGhh
c2gKKyAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKQorICAg
IHZhciBoYXNUZXN0ID0gZmFsc2UKKyAgICBpZiAoaGFzaC5sZW5ndGgpIHsKKyAgICAgICAgT2Jq
ZWN0LmtleXMocmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRzKS5zb3J0KCkuZm9yRWFjaChmdW5j
dGlvbihrZXksIGkpIHsKKyAgICAgICAgICAgIHZhciB0ZXN0TmFtZSA9IGtleQorICAgICAgICAg
ICAgaWYgKHRlc3ROYW1lLmluZGV4T2YoaGFzaCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGhh
c1Rlc3QgPSB0cnVlCisgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGVzdE5hbWUuc3BsaXQo
Ii8iKQorICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaXRlbXNbMF0KKyAgICAgICAgICAgICAg
ICBpZiAobW9kdWxlc1tuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1tuYW1lXS5w
dXNoKGtleSkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1vZHVs
ZXNbbmFtZV0gPSBba2V5XQorICAgICAgICAgICAgfQorICAgICAgICB9KQorICAgIH0KKyAgICBp
ZiAoaGFzVGVzdCkKKyAgICAgICAgcmV0dXJuIG1vZHVsZXMKKworICAgIC8vIElmIG5vIHRlc3Rz
LCBzaG93IGFsbCBtb2R1bGVzCisgICAgT2JqZWN0LmtleXMocmVzdWx0cy5jb25mb3JtYW5jZV9y
ZXN1bHRzKS5zb3J0KCkuZm9yRWFjaChmdW5jdGlvbihrZXksIGkpIHsKKyAgICAgICAgdmFyIHRl
c3ROYW1lID0ga2V5CisgICAgICAgIHZhciBpdGVtcyA9IHRlc3ROYW1lLnNwbGl0KCIvIikKKyAg
ICAgICAgdmFyIG5hbWUgPSBpdGVtc1swXQorICAgICAgICAvLyBJbiBjYXNlIG9mIGh0bWwgbW9k
dWxlLCB3ZSBzcGxpdCBkaXNwbGF5IGluIHN1Yi1tb2R1bGVzCisgICAgICAgIGlmIChuYW1lID09
ICd3ZWItcGxhdGZvcm0tdGVzdHMnIHx8IG5hbWUgPT0gJ2Nzc3dnLXRlc3RzJyB8fCBuYW1lID09
ICdodG1sJykKKyAgICAgICAgICAgIG5hbWUgKz0gJy8nICsgaXRlbXNbMV0KKyAgICAgICAgaWYg
KG1vZHVsZXNbbmFtZV0pCisgICAgICAgICAgICBtb2R1bGVzW25hbWVdLnB1c2goa2V5KQorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtb2R1bGVzW25hbWVdID0gW2tleV0KKyAgICB9KQorICAg
IHJldHVybiBtb2R1bGVzCisgfQorCitmdW5jdGlvbiB0b2dnbGVUZXN0cyhkaXYpCit7CisgICAg
dmFyIGJveCA9IGRpdi5uZXh0RWxlbWVudFNpYmxpbmcKKyAgICBpZiAoYm94KQorICAgICAgICBi
b3guY2xhc3NOYW1lID0gKGJveC5jbGFzc05hbWUgPT0gJ2JveCcpID8gJ2hpZGRlbi1kYXRhJyA6
ICdib3gnCit9CisKK2Z1bmN0aW9uIGluY3JlbWVudFN1bW1hcnkocmVzdWx0LCBzdW1tYXJ5KQor
eworICAgIGlmIChyZXN1bHQuc3RhdHVzID09ICJQQVNTIikKKyAgICAgICAgc3VtbWFyeS5udW1Q
YXNzKysKKyAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09ICJQQVJUSUFMIikKKyAgICAgICAg
c3VtbWFyeS5udW1QYXJ0aWFsKysKKyAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09ICJGQUlM
IikKKyAgICAgICAgc3VtbWFyeS5udW1GYWlsKysKKyAgICBlbHNlCisgICAgICAgIHN1bW1hcnku
bnVtRXJyb3IrKworfQorCitmdW5jdGlvbiBjb21wdXRlR2xvYmFsQ29uZm9ybWFuY2UocmVzdWx0
cykKK3sKKyAgICB2YXIgc3VtbWFyeSA9IHtudW1QYXNzOiAwLCBudW1QYXJ0aWFsOiAwLCBudW1G
YWlsOiAwLCBudW1FcnJvcjogMH0KKyAgICBmb3IgKHZhciB0ZXN0IGluIHJlc3VsdHMuY29uZm9y
bWFuY2VfcmVzdWx0cykgeworICAgICAgICBpZiAocmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRz
Lmhhc093blByb3BlcnR5KHRlc3QpKQorICAgICAgICAgICAgaW5jcmVtZW50U3VtbWFyeShyZXN1
bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHNbdGVzdF0sIHN1bW1hcnkpCisgICAgfQorICAgIHJldHVy
biBzdW1tYXJ5Cit9CisKK2Z1bmN0aW9uIGNvbXB1dGVTdGF0aXN0aWNzKHJlc3VsdHNTdW1tYXJ5
LCByZXN1bHQsIHJlc3VsdHMpCit7CisgICAgdmFyIHN1bW1hcnkgPSByZXN1bHRzU3VtbWFyeVty
ZXN1bHRzLnBvcnRfbmFtZV0KKworICAgIGlmICghc3VtbWFyeSkKKyAgICAgICAgcmVzdWx0c1N1
bW1hcnlbcmVzdWx0cy5wb3J0X25hbWVdID0gc3VtbWFyeSA9IHtudW1QYXNzOiAwLCBudW1QYXJ0
aWFsOiAwLCBudW1GYWlsOiAwLCBudW1FcnJvcjogMH0KKworICAgIGluY3JlbWVudFN1bW1hcnko
cmVzdWx0LCBzdW1tYXJ5KQorfQorCitmdW5jdGlvbiBhZGRUZXN0U3VpdGVMaXN0T2ZSZXN1bHRz
KG1vZHVsZU5hbWUsIHRlc3RzLCBsaXN0T2ZSZXN1bHRzLCBpc09wZW4pCit7CisgICAgdmFyIGlu
bmVySFRNTCA9ICIiCisgICAgdmFyIHJlc3VsdHNTdW1tYXJ5ID0gIHt9CisgICAgdGVzdHMuZm9y
RWFjaChmdW5jdGlvbihrZXksIGkpIHsKKyAgICAgICAgaW5uZXJIVE1MICs9ICI8ZGl2IGNsYXNz
PSd0ZXN0Jz48ZGl2IGNsYXNzPSd0ZXN0bmFtZSc+IiArIHRlc3RGaWxlTGluayhrZXksIGxpc3RP
ZlJlc3VsdHNbMF0pICsgIjwvZGl2PiIKKyAgICAgICAgbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1
bmN0aW9uKHJlc3VsdHMpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLmNvbmZv
cm1hbmNlX3Jlc3VsdHNba2V5XQorICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSAiTWlzc2luZyIKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygi
V0FSTklORzogdGVzdCAiICsga2V5ICsgIiBpcyBtaXNzaW5nIikKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlubmVySFRNTCArPSAiPGRpdiBjbGFzcz0ndGVzdHJlc3VsdCAiICsgcmVzdWx0
LnN0YXR1cy50b0xvd2VyQ2FzZSgpICsgIic+IiArIHRlc3RSZXN1bHRGaWxlTGluayhrZXksIHJl
c3VsdCwgcmVzdWx0cykgKyAiPC9kaXY+IgorICAgICAgICAgICAgY29tcHV0ZVN0YXRpc3RpY3Mo
cmVzdWx0c1N1bW1hcnksIHJlc3VsdCwgcmVzdWx0cykKKyAgICAgICAgfSkKKyAgICAgICAgaW5u
ZXJIVE1MICs9ICI8L2Rpdj4iCisgICAgfSkKKyAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJt
b2R1bGUiPjxkaXYgY2xhc3M9Im1vZHVsZS1zdW1tYXJ5IiBvbmNsaWNrPSJ0b2dnbGVUZXN0cyhl
dmVudC5jdXJyZW50VGFyZ2V0KSI+PGRpdiBjbGFzcz0ibW9kdWxlLW5hbWUiPicgKyBtb2R1bGVO
YW1lICsgJzwvZGl2PicKKyAgICBsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0
cykgeworICAgICAgICB2YXIgc3VtbWFyeSA9IHJlc3VsdHNTdW1tYXJ5W3Jlc3VsdHMucG9ydF9u
YW1lXQorICAgICAgICBodG1sICs9IHRlc3RTdWl0ZVN0YXRlSGlzdG9ncmFtKHN1bW1hcnkubnVt
RXJyb3IsIHN1bW1hcnkubnVtRmFpbCwgc3VtbWFyeS5udW1QYXJ0aWFsLCBzdW1tYXJ5Lm51bVBh
c3MpCisgICAgfSkKKyAgICBodG1sICs9ICc8L2Rpdj48ZGl2IGNsYXNzPSInICsgKGlzT3BlbiA/
ICJib3giIDogImhpZGRlbi1kYXRhIikgKyAnIj4nCisgICAgaHRtbCArPSBpbm5lckhUTUwKKyAg
ICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJl
c3VsdHMiKS5pbm5lckhUTUwgKz0gaHRtbAorfQorCitmdW5jdGlvbiB3cml0ZVN1bW1hcnkoKQor
eworICAgIHZhciBodG1sID0gIjxkaXY+VzNDIGNvbmZvcm1hbmNlIHJlc3VsdHMgZnJvbSBydW4t
d2Via2l0LXRlc3QgKCIKKyAgICBsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0
cykgeworICAgICAgICBodG1sICs9ICI8YSBocmVmPSciICsgcmVzdWx0c0RpcmVjdG9yeShyZXN1
bHRzKSArICInPiIgKyByZXN1bHRzLnBvcnRfbmFtZSArICI8L2E+ICZuYnNwOyIKKyAgICB9KQor
ICAgIGh0bWwgKz0gIik8L2Rpdj4iCisKKyAgICBodG1sICs9ICI8ZGl2PiBHZW5lcmF0ZWQgPGEg
aHJlZj0nVGVzdEV4cGVjdGF0aW9ucyc+dGVzdCBleHBlY3RhdGlvbnM8L2E+IGFuZCA8YSBocmVm
PSdJbXBvcnRFeHBlY3RhdGlvbnMnPmltcG9ydCBleHBlY3RhdGlvbnM8L2E+Li9kaXY+IgorCisg
ICAgaWYgKGxpc3RPZlJlc3VsdHMubGVuZ3RoID4gMSkgeworICAgICAgICB2YXIgc2FtZVRlc3RW
ZXJzaW9uID0gdHJ1ZQorICAgICAgICBsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVz
dWx0cykgeworICAgICAgICAgICAgaWYgKGxpc3RPZlJlc3VsdHNbMF0udGVzdHNfdmVyc2lvbiAh
PSByZXN1bHRzLnRlc3RzX3ZlcnNpb24pIHsKKyAgICAgICAgICAgICAgICBzYW1lVGVzdFZlcnNp
b24gPSBmYWxzZQorICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxkaXY+V2FybmluZzogVzNDIHRl
c3QgdmVyc2lvbiBhcmUgbm90IHRoZSBzYW1lIGZvciBhbGwgcGxhdGZvcm1zOiAiCisgICAgICAg
ICAgICAgICAgaHRtbCArPSBsaXN0T2ZSZXN1bHRzWzBdLnRlc3RzX3ZlcnNpb24gKyAiIHZzICIg
KyByZXN1bHRzLnRlc3RzX3ZlcnNpb24gKyAiIG9mIHBsYXRmb3JtICIgKyByZXN1bHRzLnBvcnRf
bmFtZQorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpCisgICAgICAgICAgICAg
ICAgaHRtbCArPSAiPC9kaXY+IgorICAgICAgICAgICAgfQorICAgICAgICB9KQorICAgICAgICBp
ZiAoIXNhbWVUZXN0VmVyc2lvbikgeworICAgICAgICAgICAgaHRtbCArPSAiPGRpdj5XYXJuaW5n
OiBXM0MgdGVzdCB2ZXJzaW9uIGFyZSBub3QgdGhlIHNhbWUgZm9yIGFsbCBwbGF0Zm9ybXM6ICIK
KyAgICAgICAgICAgIGh0bWwgKz0gbGlzdE9mUmVzdWx0c1swXS50ZXN0c192ZXJzaW9uICsgIiB2
cyAiICsgcmVzdWx0cy50ZXN0c192ZXJzaW9uICsgIiBvZiBwbGF0Zm9ybSAiICsgcmVzdWx0cy5w
b3J0X25hbWUKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpCisgICAgICAgICAgICBo
dG1sICs9ICI8L2Rpdj4iCisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgic3VtbWFyeSIpLmlubmVySFRNTCA9IGh0bWwKK30KKworZnVuY3Rpb24gZGlzcGxh
eVJlc3VsdHMoKQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSAgeworICAgICAgICB2YXIg
Zmlyc3RMaW5lSFRNTCA9ICI8ZGl2IGNsYXNzPSdmaXJzdExpbmUnPjxkaXYgY2xhc3M9J2ZpcnN0
TGluZUNlbGwnPk1vZHVsZS9UZXN0IE5hbWU8L2Rpdj4iCisgICAgICAgIGxpc3RPZlJlc3VsdHMu
Zm9yRWFjaChmdW5jdGlvbihyZXN1bHRzKSB7CisgICAgICAgICAgICBmaXJzdExpbmVIVE1MICs9
ICI8ZGl2IGNsYXNzPSdwb3J0Jz4iICsgcmVzdWx0cy5wb3J0X25hbWUudG9VcHBlckNhc2UoKSAr
ICI8L2Rpdj4iCisgICAgICAgIH0pCisgICAgICAgIGZpcnN0TGluZUhUTUwgKz0gIjwvZGl2PiIK
KyAgICAgICAgdmFyIHNlY29uZExpbmVIVE1MID0gIjxkaXYgY2xhc3M9J3NlY29uZExpbmUnPjxk
aXYgY2xhc3M9J3NlY29uZExpbmVDZWxsJz5PdmVyYWxsIGNvbmZvcm1hbmNlPC9kaXY+IgorICAg
ICAgICBsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworICAgICAgICAg
ICAgc3VtbWFyeSA9IGNvbXB1dGVHbG9iYWxDb25mb3JtYW5jZShyZXN1bHRzKQorICAgICAgICAg
ICAgc2Vjb25kTGluZUhUTUwgKz0gdGVzdFN1aXRlU3RhdGVIaXN0b2dyYW0oc3VtbWFyeS5udW1F
cnJvciwgc3VtbWFyeS5udW1GYWlsLCBzdW1tYXJ5Lm51bVBhcnRpYWwsIHN1bW1hcnkubnVtUGFz
cykKKyAgICAgICAgfSkKKyAgICAgICAgc2Vjb25kTGluZUhUTUwgKz0gIjwvZGl2PiIKKworICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9IGZpcnN0
TGluZUhUTUwgKyBzZWNvbmRMaW5lSFRNTAorICAgICAgICB2YXIgbW9kdWxlcyA9ICB0ZXN0c3Vp
dGVNb2R1bGVzKGxpc3RPZlJlc3VsdHNbMF0pCisgICAgICAgIHZhciBrZXlzID0gT2JqZWN0Lmtl
eXMobW9kdWxlcykKKyAgICAgICAga2V5cy5zb3J0KCkuZm9yRWFjaChmdW5jdGlvbihrZXksIGkp
IHsKKyAgICAgICAgICAgIGFkZFRlc3RTdWl0ZUxpc3RPZlJlc3VsdHMoa2V5LCBtb2R1bGVzW2tl
eV0sIGxpc3RPZlJlc3VsdHMsIGtleXMubGVuZ3RoID09IDEpCisgICAgICAgIH0pCisgICAgICAg
IHdyaXRlU3VtbWFyeShsaXN0T2ZSZXN1bHRzKQorICAgIH0sIDApCit9CisKKyAKK2xpc3RPZlJl
c3VsdHMgPSBbXSAKK2Z1bmN0aW9uIEFERF9DT05GT1JNQU5DRV9SRVNVTFRTKHJlc3VsdHMpCit7
CisgICAgcmVzdWx0cy5yb290X2RpcmVjdG9yeSA9IGRpcnNbY291bnRlcl0KKyAgICBsaXN0T2ZS
ZXN1bHRzLnB1c2gocmVzdWx0cykKKyAgICBzZXRUaW1lb3V0KGxvYWRTY3JpcHRzLCAwKSAgICAK
K30KKwordmFyIGNvdW50ZXIKK3ZhciBkaXJzCitmdW5jdGlvbiBsb2FkU2NyaXB0cyhkaXJlY3Rv
cmllcykKK3sKKyAgICBpZiAoZGlyZWN0b3JpZXMpIHsKKyAgICAgICAgZGlycyA9IGRpcmVjdG9y
aWVzCisgICAgICAgIGNvdW50ZXIgPSAtMQorICAgIH0KKyAgICBpZiAoY291bnRlciA8IGRpcnMu
bGVuZ3RoIC0gMSkgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeScp
LmlubmVySFRNTCA9ICJMb2FkaW5nICIgKyBkaXJzWysrY291bnRlcl0gKyAiLi4uIgorICAgICAg
ICB2YXIgaGVhZD0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXQorICAg
ICAgICB2YXIgc2NyaXB0PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKQorICAgICAg
ICBzY3JpcHQudHlwZT0gJ3RleHQvamF2YXNjcmlwdCcKKyAgICAgICAgc2NyaXB0LnNyYz0gZGly
c1tjb3VudGVyXSArICcvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuanNvbicKKyAgICAgICAgaGVh
ZC5hcHBlbmRDaGlsZChzY3JpcHQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeScpLmlubmVySFRNTCA9ICJEaXNwbGF5aW5nIHJlc3Vs
dHMuLi4iCisgICAgICAgIHNldFRpbWVvdXQoZGlzcGxheVJlc3VsdHMsIDApCisgICAgfQorfQor
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ic3VtbWFyeSI+CisgICAgTG9h
ZGluZy4uLgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJsZWdlbmQiPgorICAgIDxkaXYgY2xhc3M9ImVy
cm9yLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwvZGl2PgorICAgIDxkaXY+RXJyb3IsIFRp
bWVvdXQgb3IgQ3Jhc2g8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmYWlsLXJlc3VsdHMtaGlzdCBs
ZWdlbmQiPiZuYnNwOzwvZGl2PgorICAgIDxkaXY+IEFsbCBhc3NlcnRpb25zIGZhaWxpbmc8L2Rp
dj4KKyAgICA8ZGl2IGNsYXNzPSJwYXJ0aWFsLXJlc3VsdHMtaGlzdCBsZWdlbmQiPiZuYnNwOzwv
ZGl2PgorICAgIDxkaXY+IFNvbWUgYXNzZXJ0aW9ucyBwYXNzaW5nPC9kaXY+CisgICAgPGRpdiBj
bGFzcz0icGFzcy1yZXN1bHRzLWhpc3QgbGVnZW5kIj4mbmJzcDs8L2Rpdj4KKyAgICA8ZGl2PiBB
bGwgYXNzZXJ0aW9ucyBwYXNzaW5nPC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdHMiPgor
PC9kaXY+CisKKzwhLS0gQWRkIGFzIG1hbnkgZm9sZGVyIGNvbnRhaW5pbmcgdzNjX2NvbmZvcm1h
bmNlX3Jlc3VsdHMuanNvbiBhcyBuZWVkZWQgaW4gbG9hZFNjcmlwdHMgYXJyYXkgdG8gZGlzcGxh
eSBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cyAtLT4KKzxzY3JpcHQ+CisgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgbG9hZFNjcmlwdHMoWyIuIl0pCisgICAgfSwgMCkKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247675</attachid>
            <date>2015-03-02 09:24:10 -0800</date>
            <delta_ts>2015-03-30 06:26:56 -0700</delta_ts>
            <desc>Rebasing against new TestRepositories description</desc>
            <filename>bug-134766-20150302182352.patch</filename>
            <type>text/plain</type>
            <size>40449</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwODgyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGZmZTg3YWZhNGQxOWRjYWNjZWYxYTQ3NjFlZWI2Zjlj
MmRiMmEyYy4uN2EzZmYzNmEzNGZlZmUxNTMyMTg5ZTBlMmE5ZGVhNzRiOTY4YTE2NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2
IEBACisyMDE1LTAxLTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgRml4IGZvciAxMzQ3NjYKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
YXV0b21hdGVkIFczQyBjb25mb3JtYW5jZSB0ZXN0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTY3JpcHRzL2NoZWNrLXczYy1jb25mb3JtYW5jZSBp
cyB0aGUgZXhlY3V0YWJsZSB0byB0ZXN0IFczQyB0ZXN0IGNvbmZvcm1hbmNlLgorICAgICAgICBS
ZXN1bHRzIGFyZSBzdG9yZWQgYnkgZGVmYXVsdCBpbiBhIFdlYktpdEJ1aWxkIHN1Yi1mb2xkZXIg
KHNlZSBQb3J0LnczY19jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSkuCisgICAgICAgIFNj
cmlwdHMvd2Via2l0cHkvdzNjL2NvbmZvcm1hbmNlX2NoZWNrZXIucHkgaXMgdGhlIG1haW4gc2Ny
aXB0LgorICAgICAgICBJdCB1c2VzIHRlc3QgaW1wb3J0ZXIgdG8gY2xvbmUgYW5kIGltcG9ydCB0
aGUgdGVzdHMuCisgICAgICAgIEl0IHRoZW4gdXNlcyBydW4td2Via2l0LXRlc3QgdG8gcnVuIHRo
ZSB0ZXN0cyBhbmQgZ2VuZXJhdGUgdGhlIC1leHBlY3RlZC50eHQgZmlsZXMgZm9yIHRlc3RoYXJu
ZXNzIHRlc3RzLgorICAgICAgICBGcm9tIHRoZSAtZXhwZWN0ZWQudHh0IGZpbGVzLCBpdCBjb21w
dXRlcyB3aGV0aGVyIHRoZSB0ZXN0IGlzIHBhc3NpbmcsIHBhcnRpYWxseSBwYXNzaW5nIG9yIGZh
aWxpbmcuCisgICAgICAgIFJlc3VsdHMgYXJlIG91dHB1dHRlZCB0aHJvdWdoIFRlc3RSZXN1bHRz
TWFuYWdlciBhcyBhIGpzb24gZmlsZSB0aGF0IGNhbiBiZSBsb2FkZWQgdXNpbmcgdzNjX2NvbmZv
cm1hbmNlX3Jlc3VsdHMuaHRtbC4KKyAgICAgICAgRHJhZnQgVGVzdCBleHBlY3RhdGlvbnMgYW5k
IGltcG9ydCBydWxlcyBhcmUgYWxzbyBnZW5lcmF0ZWQgaW4gdGhlIHNhbWUgZm9sZGVyLgorCisg
ICAgICAgICogU2NyaXB0cy9jaGVjay13M2MtY29uZm9ybWFuY2U6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC53M2NfY29uZm9y
bWFuY2VfcmVzdWx0c19kaXJlY3RvcnkpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNj
L2NvbmZvcm1hbmNlX2NoZWNrZXIucHk6IEFkZGVkLgorICAgICAgICAoY3JlYXRlX2FyZ3VtZW50
X3BhcnNlcik6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIpOgorICAgICAgICAoQ29uZm9y
bWFuY2VDaGVja2VyLl9faW5pdF9fKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci5fcHJp
bnRfcnd0X291dHB1dF9saW5lKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci5ydW5fdGVz
dHMpOgorICAgICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLnJlc3VsdHNfbWFuYWdlcik6CisgICAg
ICAgIChDb25mb3JtYW5jZUNoZWNrZXIuaW5pdF90ZXN0X2ltcG9ydGVyKToKKyAgICAgICAgKENv
bmZvcm1hbmNlQ2hlY2tlci50ZXN0X3N1aXRlcyk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNr
ZXIudGVzdHMpOgorICAgICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLmNvbmZvcm1hbmNlX3Jlc3Vs
dCk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIuY2hlY2tfY29uZm9ybWFuY2UpOgorICAg
ICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLnByaW50X3Jlc3VsdHNfdG9fY29uc29sZSk6CisgICAg
ICAgIChDb25mb3JtYW5jZUNoZWNrZXIud3JpdGVfaW1wb3J0X2V4cGVjdGF0aW9uX3VwZGF0ZXMp
OgorICAgICAgICAoQ29uZm9ybWFuY2VDaGVja2VyLndyaXRlX3Rlc3RfZXhwZWN0YXRpb25fdXBk
YXRlcyk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIud3JpdGVfY29uZm9ybWFuY2VfcmVz
dWx0cyk6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChjb25maWd1cmVf
bG9nZ2luZy5Mb2dIYW5kbGVyKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRs
ZXIuZm9ybWF0KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dzNjL3Rlc3RfcmVzdWx0c19tYW5hZ2VyLnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RSZXN1bHRz
TWFuYWdlcik6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX19pbml0X18pOgorICAgICAg
ICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnczY190ZXN0X25hbWUpOgorICAgICAgICAoVGVzdFJlc3Vs
dHNNYW5hZ2VyLl9nZXRfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzTWFuYWdl
ci5wcm9jZXNzX3Rlc3RfcmVzdWx0cyk6CisgICAgICAgIChUZXN0UmVzdWx0c01hbmFnZXIuX2pz
X3Rlc3RfY29uZm9ybWFuY2UpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLl9jb25mb3Jt
YW5jZV9zdGF0dXMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLmNvbmZvcm1hbmNlX3Jl
c3VsdHMpOgorICAgICAgICAoVGVzdFJlc3VsdHNNYW5hZ2VyLnN1bW1hcnkpOgorICAgICAgICAo
VGVzdFJlc3VsdHNNYW5hZ2VyLndyaXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHMpOgorCiAyMDE1LTAy
LTI3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAg
ICAgVzNDIHRlc3QgaW1wb3J0ZXIgc2hvdWxkIHVzZSBmaWxlc3lzdGVtIGluc3RlYWQgb2Ygb3Mu
d2FsawpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9jaGVjay13M2MtY29uZm9ybWFuY2UgYi9U
b29scy9TY3JpcHRzL2NoZWNrLXczYy1jb25mb3JtYW5jZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTJlOWUyOGM1
NjQxZTRiNGY2NDEwZjY2ZTg2MDk5MmM4N2Q5MWNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy9jaGVjay13M2MtY29uZm9ybWFuY2UKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBu
b3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgYXJvdW5kIHdlYmtpdHB5L3cz
Yy9jb25mb3JtYW5jZV9jaGVja2VyLnB5IiIiCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQg
bXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcAorCittdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwLnJ1
bignd2Via2l0cHknLCAndzNjJywgJ2NvbmZvcm1hbmNlX2NoZWNrZXIucHknKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBlYmY0YmRkNjk1MDQ0YTQ5N2QwZGMxODVmNjk3MDhm
YmZjOTBhZjY4Li5lYjM3ZTMyMzBiMGFjODdiNTMyNWY1M2M3MWRmYmY3MTY3MTliMGFkIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNzc4LDYgKzc3OCwxMCBAQCBjbGFzcyBQ
b3J0KG9iamVjdCk6CiAgICAgZGVmIHB5dGhvbl91bml0dGVzdF9yZXN1bHRzX2RpcmVjdG9yeShz
ZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3B5dGhvbi11bml0dGVzdC1y
ZXN1bHRzJykKIAorICAgIGRlZiB3M2NfY29uZm9ybWFuY2VfcmVzdWx0c19kaXJlY3Rvcnkoc2Vs
Zik6CisgICAgICAgICIiIkFic29sdXRlIHBhdGggdG8gdGhlIHBsYWNlIHRvIHN0b3JlIHRoZSB0
ZXN0IHJlc3VsdHMgKHVzZXMgLS13M2MtY29uZm9ybWFuY2UtZGlyZWN0b3J5KS4iIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3czYy1jb25mb3JtYW5jZS1yZXN1bHRzJykKKwog
ICAgIGRlZiBkZWZhdWx0X3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICAiIiJBYnNv
bHV0ZSBwYXRoIHRvIHRoZSBkZWZhdWx0IHBsYWNlIHRvIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHMu
IiIiCiAgICAgICAgICMgUmVzdWx0cyBhcmUgc3RvcmUgcmVsYXRpdmUgdG8gdGhlIGJ1aWx0IHBy
b2R1Y3RzIHRvIG1ha2UgaXQgZWFzeQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS93M2MvY29uZm9ybWFuY2VfY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNj
L2NvbmZvcm1hbmNlX2NoZWNrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTBmNTEyNWI2YzU0N2ZhNGMxMjE0
ODFlNGIwOTZiNzIxZjM3ZjRlZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdzNjL2NvbmZvcm1hbmNlX2NoZWNrZXIucHkKQEAgLTAsMCArMSwyNzAgQEAKKyMgQ29w
eXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMg
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyIiIgorIFRoaXMgc2NyaXB0IGV2YWx1YXRlcyBXM0MgdGVzdHMgY29uZm9ybWFuY2Ug
Ynk6CisgICAgLSBpbXBvcnRpbmcgVzNDIHRlc3RzIGFzIFdlYktpdCB0ZXN0cworICAgIC0gZ2Vu
ZXJhdGluZyBleHBlY3RlZC50eHQgZmlsZXMgKHVzaW5nIHJ1bi13ZWJraXQtdGVzdHMpCisgICAg
LSBjb21wdXRpbmcgd2hldGhlciBhIGpzIHRlc3QgaXMgcGFzc2luZyBvciBub3QgYnkgY2hlY2tp
bmcgUEFTUy9GQUlMIGFzc2VydGlvbnMgb3V0cHV0dGVkIHdpdGhpbiB0aGUgZXhwZWN0ZWQudHh0
IGZpbGVzCisiIiIKKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9w
dHBhcnNlCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhv
c3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2
ZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGlt
cG9ydCBUZXN0RXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBsYXRmb3Jt
X29wdGlvbnMKK2ltcG9ydCB3ZWJraXRweS53M2MudGVzdF9pbXBvcnRlciBhcyB0ZXN0X2ltcG9y
dGVyCitmcm9tIHdlYmtpdHB5LnczYy50ZXN0X3Jlc3VsdHNfbWFuYWdlciBpbXBvcnQgVGVzdFJl
c3VsdHNNYW5hZ2VyCitmcm9tIHdlYmtpdHB5LnczYy50ZXN0X2Rvd25sb2FkZXIgaW1wb3J0IFRl
c3REb3dubG9hZGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitk
ZWYgY3JlYXRlX2FyZ3VtZW50X3BhcnNlcigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3Vt
ZW50UGFyc2VyKCkKKworICAgIGZvciBvcHQgaW4gcGxhdGZvcm1fb3B0aW9ucyh1c2VfZ2xvYnM9
RmFsc2UpOgorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KG9wdC5nZXRfb3B0X3N0cmluZygp
LCBhY3Rpb249b3B0LmFjdGlvbiwgZGVzdD1vcHQuZGVzdCwgY29uc3Q9Z2V0YXR0cihvcHQsICdj
b25zdCcpLCBoZWxwPWdldGF0dHIob3B0LCAnaGVscCcpKQorICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoJy0td2Via2l0LXRlc3QtcnVubmVyJywgJy0yJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVm
YXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nU2V0IFdlYktpdCBhcmNoaXRlY3R1cmUgV2ViS2l0
MSBvciBXZWJLaXQyIChkZWZhdWx0IFdLMSkuJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Jy1xJywgZGVzdD0ncXVpZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICBoZWxwPSdQcmludCBtaW5pbWFsIGxvZy4nKQorICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoJy12JywgZGVzdD0ndmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFs
c2UsCisgICAgICAgIGhlbHA9J1ByaW50IG1heGltYWwgbG9nLicpCisgICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLXQnLCAnLS10ZXN0LXBhdGgnLCBhY3Rpb249J2FwcGVuZCcsIGRlc3Q9J3Rlc3Rf
cGF0aHMnLCBkZWZhdWx0PVtdLAorICAgICAgICBoZWxwPSdJbXBvcnQgYW5kIHJ1biBvbmx5IHRl
c3RzIGluIHRoZSBzdXBwbGllZCBzdWJkaXJlY3Rvcnkgb2YgdGhlIHczY190ZXN0X2RpcmVjdG9y
eS4gQ2FuIGJlIHN1cHBsaWVkIG11bHRpcGxlIHRpbWVzIHRvIGdpdmUgbXVsdGlwbGUgcGF0aHMn
KQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2tpcC1yZWZyZXNoJywgYWN0aW9u
PSdzdG9yZV9mYWxzZScsIGRlZmF1bHQ9VHJ1ZSwgZGVzdD0ncmVmcmVzaCcsCisgICAgICAgIGhl
bHA9J0Rpc2FibGUgcmVmcmVzaCBvZiB0ZXN0cyAoZ2l0IGNoZWNrb3V0ICArIGltcG9ydCkuIEJ5
IGRlZmF1bHQsIHRlc3RzIGFyZSByZWZyZXNoZWQuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50
KCctLW5vLWZldGNoJywgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGRlc3Q9J2ZldGNoJywgZGVmYXVs
dD1UcnVlLAorICAgICAgICBoZWxwPSdEbyBub3QgZmV0Y2ggdGhlIENTUy9XUFQgcmVwb3NpdG9y
aWVzLiBCeSBkZWZhdWx0LCByZXBvc2l0b3JpZXMgYXJlIGZldGNoZWQgaWYgYSBXM2MgdGVzdCBk
aXJlY3RvcnkgaXMgbm90IHByb3ZpZGVkJykKKworICAgIHJldHVybiBwYXJzZXIKKworCitjbGFz
cyBDb25mb3JtYW5jZUNoZWNrZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfbWFuYWdlciA9IE5vbmUKKyAgICAgICAg
c2VsZi5fdGVzdHMgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbmZvcm1hbmNlX3Jlc3VsdHMgPSBO
b25lCisKKyAgICAgICAgc2VsZi5XUFRfVEVTVFNVSVRFID0gJ3dlYi1wbGF0Zm9ybS10ZXN0cycK
KyAgICAgICAgc2VsZi5sYXlvdXRfdzNjX2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bignaW1wb3J0ZWQnLCAndzNjJykKKyAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHNl
bGYuX3BvcnQudzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkKKyAgICAgICAgc2Vs
Zi5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihz
ZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCAnbGF5b3V0LXRlc3QtcmVzdWx0cycpCisgICAgICAgIHNl
bGYuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
cmVzdWx0c19kaXJlY3RvcnksICdpbXBvcnRlZC10ZXN0cycpCisgICAgICAgIHNlbGYucnVubmVk
X3Rlc3RzX2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGly
ZWN0b3J5LCAncnVubmVkLXRlc3RzJykKKworICAgICAgICBzZWxmLmluaXRfdGVzdF9pbXBvcnRl
cigpCisKKyAgICBkZWYgX3ByaW50X3J3dF9vdXRwdXRfbGluZShzZWxmLCBsaW5lKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIGlmIGxpbmUuc3Rh
cnRzd2l0aCgnWycpOgorICAgICAgICAgICAgICAgIHRva2VucyA9IGxpbmUuc3BsaXQoJyAnKQor
ICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJyArIHRva2Vuc1swXSArICcgJyAr
IHRva2Vuc1sxXS5yZXBsYWNlKHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgJycpWzE6XSAr
ICcgJykKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIGVs
aWYgbGluZSA9PSAnJzoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGxpbmUpCisKKyAgICBk
ZWYgcnVuX3Rlc3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgcnVuX3dlYmtpdF9hcmdzID0gW3Nl
bGYuX3BvcnQucGF0aF90b19zY3JpcHQoJ3J1bi13ZWJraXQtdGVzdHMnKSwgJy0tbm8tcmV0cnkt
ZmFpbHVyZXMnLCAnLS1uby1zaG93LXJlc3VsdHMnLCAnLS1mdWxsLXJlc3VsdHMtaHRtbCddCisK
KyAgICAgICAgdGVzdF9saXN0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
cnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgJ3Rlc3RfbGlzdC50eHQnKQorICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSh0ZXN0X2xpc3RfZmlsZW5hbWUsICdcbicuam9pbih0
ZXN0cykpCisgICAgICAgIHJ1bl93ZWJraXRfYXJncy5hcHBlbmQoJy0tdGVzdC1saXN0PScgKyB0
ZXN0X2xpc3RfZmlsZW5hbWUpCisKKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMo
c2VsZi5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSk6CisgICAgICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLnJtdHJlZShzZWxmLmxheW91dF90ZXN0c19yZXN1bHRfZGlyZWN0b3J5KQorICAg
ICAgICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctLXJlc3VsdHMtZGlyZWN0b3J5PScgKyBzZWxm
LmxheW91dF90ZXN0c19yZXN1bHRfZGlyZWN0b3J5KQorCisgICAgICAgIHJ1bl93ZWJraXRfYXJn
cy5hcHBlbmQoJy0td3B0c2VydmVyLWRvYy1yb290PScgKyBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
c2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLldQVF9URVNUU1VJVEUpKQorCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucGxhdGZvcm06CisgICAgICAgICAgICBydW5fd2Via2l0X2Fy
Z3MuYXBwZW5kKCctLScgKyBzZWxmLl9vcHRpb25zLnBsYXRmb3JtKQorICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLndlYmtpdF90ZXN0X3J1bm5lciBpcyBUcnVlOgorICAgICAgICAgICAgcnVuX3dl
YmtpdF9hcmdzLmFwcGVuZCgnLTInKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnZl
cmJvc2U6CisgICAgICAgICAgICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctcScpCisKKyAgICAg
ICAgcHJvY2VzcyA9IEV4ZWN1dGl2ZSgpLnBvcGVuKHJ1bl93ZWJraXRfYXJncywgc3Rkb3V0PUV4
ZWN1dGl2ZS5QSVBFLCBzdGRlcnI9RXhlY3V0aXZlLlNURE9VVCkKKyAgICAgICAgd2hpbGUgVHJ1
ZToKKyAgICAgICAgICAgIGxpbmUgPSBwcm9jZXNzLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAg
ICAgICBzZWxmLl9wcmludF9yd3Rfb3V0cHV0X2xpbmUobGluZSkKKyAgICAgICAgICAgIGlmIGxp
bmUgPT0gJyc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJvY2Vzcy53YWl0KCkK
KworICAgIGRlZiByZXN1bHRzX21hbmFnZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9y
ZXN1bHRzX21hbmFnZXIKKworICAgIGRlZiBpbml0X3Rlc3RfaW1wb3J0ZXIoc2VsZik6CisgICAg
ICAgIGFyZ3MgPSBbJy1kJywgc2VsZi5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksICctLWlnbm9y
ZS1leHBlY3RhdGlvbnMnXQorCisgICAgICAgIGZvciB0ZXN0X3BhdGggaW4gc2VsZi5fb3B0aW9u
cy50ZXN0X3BhdGhzOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJy10JykKKyAgICAgICAgICAg
IGFyZ3MuYXBwZW5kKHRlc3RfcGF0aCkKKworICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5m
ZXRjaDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctLW5vLWZldGNoJykKKworICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLXYnKQor
ICAgICAgICBlbGlmIHNlbGYuX29wdGlvbnMucXVpZXQ6CisgICAgICAgICAgICBsb2dnaW5nLmdl
dExvZ2dlcignd2Via2l0cHkudzNjLnRlc3RfaW1wb3J0ZXInKS5zZXRMZXZlbChsb2dnaW5nLldB
Uk4pCisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignd2Via2l0cHkudzNjLnRlc3RfY29u
dmVydGVyJykuc2V0TGV2ZWwobG9nZ2luZy5XQVJOKQorICAgICAgICAgICAgbG9nZ2luZy5nZXRM
b2dnZXIoJ3dlYmtpdHB5LnczYy50ZXN0X2Rvd25sb2FkZXInKS5zZXRMZXZlbChsb2dnaW5nLldB
Uk4pCisKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHRlc3RfaW1wb3J0ZXIucGFyc2VfYXJncyhh
cmdzKQorICAgICAgICBzZWxmLnRlc3RfaW1wb3J0ZXIgPSB0ZXN0X2ltcG9ydGVyLlRlc3RJbXBv
cnRlcihzZWxmLl9wb3J0Lmhvc3QsIE5vbmUsIG9wdGlvbnMpCisKKyAgICBkZWYgdGVzdF9zdWl0
ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vcHRpb25zLnRlc3RfcGF0aHMgaWYgc2Vs
Zi5fb3B0aW9ucy50ZXN0X3BhdGhzIGVsc2Ugc2VsZi50ZXN0X2ltcG9ydGVyLnRlc3RfZG93bmxv
YWRlcigpLmFsbF90ZXN0X3BhdGhzKCkKKworICAgIGRlZiB0ZXN0cyhzZWxmKToKKyAgICAgICAg
dGVzdF9zdWl0ZXMgPSBzZWxmLnRlc3Rfc3VpdGVzKCkKKyAgICAgICAgaWYgc2VsZi5fdGVzdHMg
aXMgTm9uZToKKyAgICAgICAgICAgIHRlc3Rfc3VpdGVfcGF0aHMgPSBbc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgdGVzdF9zdWl0ZSkgZm9yIHRlc3Rf
c3VpdGUgaW4gdGVzdF9zdWl0ZXNdCisgICAgICAgICAgICBzZWxmLl90ZXN0cyA9IHNlbGYuX3Bv
cnQudGVzdHModGVzdF9zdWl0ZV9wYXRocykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RzCisK
KyAgICBkZWYgY29uZm9ybWFuY2VfcmVzdWx0KHNlbGYsIHRlc3QpOgorICAgICAgICBpZiBzZWxm
Ll9jb25mb3JtYW5jZV9yZXN1bHRzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jb25mb3Jt
YW5jZV9yZXN1bHRzID0gc2VsZi5yZXN1bHRzX21hbmFnZXIoKS5jb25mb3JtYW5jZV9yZXN1bHRz
KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZvcm1hbmNlX3Jlc3VsdHNbc2VsZi5yZXN1bHRz
X21hbmFnZXIoKS53M2NfdGVzdF9uYW1lKHRlc3QpXQorCisgICAgZGVmIGNoZWNrX2NvbmZvcm1h
bmNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJlZnJlc2ggaXMgVHJ1ZToKKyAg
ICAgICAgICAgIF9sb2cuaW5mbygnSW1wb3J0aW5nIHRlc3RzLi4uJykKKyAgICAgICAgICAgIHNl
bGYudGVzdF9pbXBvcnRlci5kb19pbXBvcnQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
X2xvZy5pbmZvKCdTa2lwcGluZyB0ZXN0IGltcG9ydC4uLicpCisKKyAgICAgICAgIyBSZWdlbmVy
YXRlIHJ1bm5lZF90ZXN0X2RpcmVjdG9yeSB0byBzdGFydCBpbiBhIGNsZWFuIHN0YXRlIChubyAt
ZXhwZWN0ZWQudHh0IGZpbGVzIGluIHBhcnRpY3VsYXIpLgorICAgICAgICBzZWxmLl9maWxlc3lz
dGVtLnJtdHJlZShzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0uY29weXRyZWUoc2VsZi5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksIHNlbGYucnVu
bmVkX3Rlc3RzX2RpcmVjdG9yeSkKKworICAgICAgICBfbG9nLmluZm8oJ1J1bm5pbmcgdGVzdHMu
Li4nKQorICAgICAgICBzZWxmLnJ1bl90ZXN0cyhzZWxmLnRlc3RzKCkpCisKKyAgICAgICAgX2xv
Zy5pbmZvKCdQYXJzaW5nIHRlc3QgcmVzdWx0cy4uLicpCisgICAgICAgIHNlbGYuX3Jlc3VsdHNf
bWFuYWdlciA9IFRlc3RSZXN1bHRzTWFuYWdlcihzZWxmLl9wb3J0LCBzZWxmLnJ1bm5lZF90ZXN0
c19kaXJlY3RvcnksIHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3RvcnksIHNlbGYudGVz
dHMoKSkKKyAgICAgICAgc2VsZi5fcmVzdWx0c19tYW5hZ2VyLnByb2Nlc3NfdGVzdF9yZXN1bHRz
KCkKKworICAgICAgICBfbG9nLmluZm8oJ0dlbmVyYXRpbmcgY29uZm9ybWFuY2UgcmVzdWx0cy4u
LicpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5y
ZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRz
KCkKKworICAgICAgICBfbG9nLmluZm8oJ0dlbmVyYXRpbmcgZXhwZWN0YXRpb24gdXBkYXRlcy4u
LicpCisgICAgICAgIHNlbGYud3JpdGVfdGVzdF9leHBlY3RhdGlvbl91cGRhdGVzKHNlbGYucmVz
dWx0c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYud3JpdGVfaW1wb3J0X2V4cGVjdGF0aW9uX3Vw
ZGF0ZXMoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgZGVmIHByaW50X3Jlc3VsdHNfdG9fY29uc29sZShzZWxmKToKKyAgICAgICAgc3VtbWFyeSA9
IHNlbGYucmVzdWx0c19tYW5hZ2VyKCkuc3VtbWFyeSgpCisgICAgICAgIF9sb2cuaW5mbygnUnVu
ICcgKyBzdHIoc3VtbWFyeVsndG90YWwnXSkgKyAnIHRlc3RzJykKKyAgICAgICAgX2xvZy5pbmZv
KCdQYXNzOiAnICsgc3RyKHN1bW1hcnlbJ251bV9wYXNzJ10pKQorICAgICAgICBfbG9nLmluZm8o
J1BhcnRpYWw6ICcgKyBzdHIoc3VtbWFyeVsnbnVtX3BhcnRpYWwnXSkpCisgICAgICAgIF9sb2cu
aW5mbygnRmFpbDogJyArIHN0cihzdW1tYXJ5WydudW1fZmFpbCddKSkKKyAgICAgICAgX2xvZy5p
bmZvKCdFcnJvcjogJyArIHN0cihzdW1tYXJ5WydudW1fZXJyb3InXSkpCisKKyAgICBkZWYgd3Jp
dGVfaW1wb3J0X2V4cGVjdGF0aW9uX3VwZGF0ZXMoc2VsZiwgZGlyZWN0b3J5X3BhdGgpOgorICAg
ICAgICBpbXBvcnRfZXhwZWN0YXRpb25zID0gW10KKyAgICAgICAgZm9yIHRlc3Rfc3VpdGUgaW4g
c2VsZi50ZXN0X3N1aXRlcygpOgorICAgICAgICAgICAgaW1wb3J0X2V4cGVjdGF0aW9ucy5hcHBl
bmQoJyMgJXMgWyBQYXNzIF0nICUgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3cz
Y19kaXJlY3RvcnksIHRlc3Rfc3VpdGUpKQorCisgICAgICAgIGltcG9ydF9leHBlY3RhdGlvbnMu
YXBwZW5kKCcnKQorCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYudGVzdHMoKToKKyAgICAgICAg
ICAgIHN0YXR1cyA9IHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0KHRlc3QpWydzdGF0dXMnXQorICAg
ICAgICAgICAgaWYgbm90KHN0YXR1cyA9PSAnUEFTUycgb3Igc3RhdHVzID09ICdQQVJUSUFMJyk6
CisgICAgICAgICAgICAgICAgaW1wb3J0X2V4cGVjdGF0aW9ucy5hcHBlbmQoJyVzIFsgU2tpcCBd
JyAlIHNlbGYucmVzdWx0c19tYW5hZ2VyKCkudzNjX3Rlc3RfbmFtZSh0ZXN0KSkKKworICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9maWxlc3lzdGVtLmpvaW4o
ZGlyZWN0b3J5X3BhdGgsICdJbXBvcnRFeHBlY3RhdGlvbnMnKSwgJ1xuJy5qb2luKGltcG9ydF9l
eHBlY3RhdGlvbnMpKQorCisgICAgZGVmIHdyaXRlX3Rlc3RfZXhwZWN0YXRpb25fdXBkYXRlcyhz
ZWxmLCBkaXJlY3RvcnlfcGF0aCk6CisgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zID0gWycjIFcz
QyB0ZXN0IGluZnJhc3RydWN0dXJlIGZvbGRlcnMnXQorICAgICAgICBmb3IgdGVzdF9yZXBvc2l0
b3J5IGluIHNlbGYudGVzdF9pbXBvcnRlci50ZXN0X2Rvd25sb2FkZXIoKS50ZXN0X3JlcG9zaXRv
cmllczoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHRlc3RfcmVwb3NpdG9yeVsncGF0aHNfdG9f
aW1wb3J0J106CisgICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5q
b2luKHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgcGF0aCkKKyAgICAgICAgICAgICAgICBp
ZiAoc2VsZi5fZmlsZXN5c3RlbS5pc2RpcihmaWxlX3BhdGgpKToKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdF9leHBlY3RhdGlvbnMuYXBwZW5kKCclcyBbIFNraXAgXScgJSBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oc2VsZi5sYXlvdXRfdzNjX2RpcmVjdG9yeSwgcGF0aCkpCisKKyAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuYXBwZW5kKCcjUGFydGlhbGx5IHBhc3NpbmcgdGVzdHMnKQorICAgICAg
ICBmb3IgdGVzdCBpbiBzZWxmLnRlc3RzKCk6CisgICAgICAgICAgICBpZiBzZWxmLmNvbmZvcm1h
bmNlX3Jlc3VsdCh0ZXN0KVsnc3RhdHVzJ10gPT0gJ1BBUlRJQUwnOgorICAgICAgICAgICAgICAg
IHRlc3RfZXhwZWN0YXRpb25zLmFwcGVuZCgnJXMgWyBQYXNzIF0nICUgc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYubGF5b3V0X3czY19kaXJlY3RvcnksIHNlbGYucmVzdWx0c19tYW5hZ2VyKCku
dzNjX3Rlc3RfbmFtZSh0ZXN0KSkpCisKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90
ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5c3RlbS5qb2luKGRpcmVjdG9yeV9wYXRoLCAnVGVzdEV4cGVj
dGF0aW9ucycpLCAnXG4nLmpvaW4odGVzdF9leHBlY3RhdGlvbnMpKQorCisgICAgZGVmIHdyaXRl
X2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZik6CisgICAgICAgIHRlc3RfcnVuX2luZm8gPSB7fQor
ICAgICAgICB0ZXN0X3J1bl9pbmZvWydwb3J0X25hbWUnXSA9IHNlbGYuX3BvcnQucG9ydF9uYW1l
CisgICAgICAgIHRlc3RfcnVuX2luZm9bJ3Rlc3RfcmVwb3NpdG9yaWVzJ10gPSBzZWxmLnRlc3Rf
aW1wb3J0ZXIudGVzdF9kb3dubG9hZGVyKCkudGVzdF9yZXBvc2l0b3JpZXMKKyAgICAgICAgdGVz
dF9ydW5faW5mb1sncmVzdWx0c19kaXJlY3RvcnknXSA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0
aChzZWxmLmxheW91dF90ZXN0c19yZXN1bHRfZGlyZWN0b3J5LCBzZWxmLnJlc3VsdHNfZGlyZWN0
b3J5KQorICAgICAgICB0ZXN0X3J1bl9pbmZvWyd0ZXN0c19kaXJlY3RvcnknXSA9IHNlbGYuX2Zp
bGVzeXN0ZW0ucmVscGF0aChzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksIHNlbGYucmVzdWx0
c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYucmVzdWx0c19tYW5hZ2VyKCkud3JpdGVfY29uZm9y
bWFuY2VfcmVzdWx0cyhzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X3J1bl9pbmZvKQorCisK
K2RlZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5T
dHJlYW1IYW5kbGVyKToKKyAgICAgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgorICAgICAg
ICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklORk86CisgICAgICAgICAgICAgICAg
cmV0dXJuICIlczogJXMiICUgKHJlY29yZC5sZXZlbG5hbWUsIHJlY29yZC5nZXRNZXNzYWdlKCkp
CisgICAgICAgICAgICByZXR1cm4gcmVjb3JkLmdldE1lc3NhZ2UoKQorCisgICAgbG9nZ2VyID0g
bG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisg
ICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQorICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5J
TkZPKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisgICAgcmV0dXJuIGhhbmRsZXIK
KworCitkZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgY29uZmlndXJlX2xvZ2dp
bmcoKQorICAgIGhvc3QgPSBIb3N0KCkKKyAgICBwYXJzZXIgPSBjcmVhdGVfYXJndW1lbnRfcGFy
c2VyKCkKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikK
KyAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdHBh
cnNlLlZhbHVlcyh7J3dlYmtpdF90ZXN0X3J1bm5lcic6IG9wdGlvbnMud2Via2l0X3Rlc3RfcnVu
bmVyfSkpCisKKyAgICBydW5uZXIgPSBDb25mb3JtYW5jZUNoZWNrZXIocG9ydCwgb3B0aW9ucykK
KyAgICBpZiBydW5uZXIuY2hlY2tfY29uZm9ybWFuY2UoKToKKyAgICAgICAgcnVubmVyLnByaW50
X3Jlc3VsdHNfdG9fY29uc29sZSgpCisgICAgICAgIF9sb2cuaW5mbygiUmVzdWx0cyBleHBvcnRl
ZCBpbiAnIiArIHJ1bm5lci5yZXN1bHRzX2RpcmVjdG9yeSArICInIikKKworaWYgJ19fbWFpbl9f
JyA9PSBfX25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91
dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90
ZXN0X2Rvd25sb2FkZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2Rvd25s
b2FkZXIucHkKaW5kZXggYWNkZGUzODlhYzkwMjYwZWZmMTE4NThhYWEzNmJlNzcyMDdkZGZhZi4u
ZDVjYWIxM2Y1ZTUwZTA4ZDVjMzU3MDZiMTI5MzE0MzgxZWMyZGQ4YiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9kb3dubG9hZGVyLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZG93bmxvYWRlci5weQpAQCAtNzcsNiArNzcsOSBAQCBj
bGFzcyBUZXN0RG93bmxvYWRlcihvYmplY3QpOgogICAgICAgICAgICAgaW1wb3J0X2V4cGVjdGF0
aW9uc19wYXRoID0gd2Via2l0X2ZpbmRlci5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRl
c3RzJywgJ2ltcG9ydGVkJywgJ3czYycsICdyZXNvdXJjZXMnLCAnSW1wb3J0RXhwZWN0YXRpb25z
JykKICAgICAgICAgICAgIHNlbGYuX2luaXRfcGF0aHNfZnJvbV9leHBlY3RhdGlvbnMoaW1wb3J0
X2V4cGVjdGF0aW9uc19wYXRoKQogCisgICAgZGVmIGFsbF90ZXN0X3BhdGhzKHNlbGYpOgorICAg
ICAgICByZXR1cm4gW3Rlc3RfcmVwb3NpdG9yeS5uYW1lIGZvciB0ZXN0X3JlcG9zaXRvcnkgaW4g
c2VsZi50ZXN0X3JlcG9zaXRvcmllc10KKwogICAgIGRlZiBjaGVja291dF90ZXN0X3JlcG9zaXRv
cnkoc2VsZiwgcmV2aXNpb24sIHVybCwgZGlyZWN0b3J5KToKICAgICAgICAgZ2l0ID0gR2l0KCcu
JywgTm9uZSkKICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGRpcmVjdG9y
eSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3Jlc3VsdHNf
bWFuYWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfcmVzdWx0c19tYW5h
Z2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYwYjhmNGYwYzEwY2MyYmI0YjRmN2E5MWI5MDc3NjgyMmY5NmY2
NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3Jl
c3VsdHNfbWFuYWdlci5weQpAQCAtMCwwICsxLDE0NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTQs
IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMg
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhp
cyBzY3JpcHQgbWFuYWdlIEpTT04gYW5kIHJlc3VsdHMuaHRtbCBmaWxlcyBmb3IgVzNDIHRlc3Qg
cmVzdWx0cy4KKyIiIgorCitpbXBvcnQganNvbgorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgorCisKK2NsYXNz
IFRlc3RSZXN1bHRzTWFuYWdlcihvYmplY3QpOgorCisgICAgX0pTT05fUFJFRklYID0gJ0FERF9D
T05GT1JNQU5DRV9SRVNVTFRTKCcKKyAgICBfSlNPTl9TVUZGSVggPSAnKTsnCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCwgYmFzZV9kaXJlY3RvcnksIHJlc3VsdF9kaXIsIHRlc3RzKToK
KyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBv
cnQuaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gcmVz
dWx0X2RpcgorICAgICAgICBzZWxmLl90ZXN0cyA9IHRlc3RzCisKKyAgICAgICAgIyBSb290IGRp
cmVjdG9yeSBvZiBXM0MgaW1wb3J0ZWQgdGVzdAorICAgICAgICBzZWxmLl9iYXNlX2RpcmVjdG9y
eSA9IGJhc2VfZGlyZWN0b3J5CisKKyAgICBkZWYgdzNjX3Rlc3RfbmFtZShzZWxmLCB0ZXN0KToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aCh0ZXN0LCBzZWxmLl9iYXNl
X2RpcmVjdG9yeSkKKworICAgIGRlZiBfZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmLCB0ZXN0cywgdGVz
dF9kaWN0LCBwYXRoKToKKyAgICAgICAgZm9yIGtleSBpbiB0ZXN0X2RpY3Qua2V5cygpOgorICAg
ICAgICAgICAgX3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aCwga2V5KQorICAgICAg
ICAgICAgX3BvdGVudGlhbF90ZXN0ID0gdGVzdF9kaWN0W2tleV0KKyAgICAgICAgICAgICMgSXMg
aXQgYSB0ZXN0IGVudHJ5IG9yIGEgc3ViLWRpcmVjdG9yeQorICAgICAgICAgICAgaWYgJ3JlcG9y
dCcgaW4gX3BvdGVudGlhbF90ZXN0OgorICAgICAgICAgICAgICAgICMgU3RvcmUgdGhlIHRlc3QK
KyAgICAgICAgICAgICAgICB0ZXN0c1tfcGF0aF0gPSBfcG90ZW50aWFsX3Rlc3QKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3Rlc3RfcmVzdWx0cyh0ZXN0cywg
X3BvdGVudGlhbF90ZXN0LCBfcGF0aCkKKworICAgIGRlZiBwcm9jZXNzX3Rlc3RfcmVzdWx0cyhz
ZWxmKToKKyAgICAgICAgdGVzdF9yZXN1bHRzID0ge30KKyAgICAgICAgcmVzdWx0c19qc29uX3Bh
dGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICdmdWxs
X3Jlc3VsdHMuanNvbicpCisgICAgICAgIHJlc3VsdHNfanNvbiA9IGpzb25fcmVzdWx0c19nZW5l
cmF0b3IubG9hZF9qc29uKHNlbGYuX2ZpbGVzeXN0ZW0sIHJlc3VsdHNfanNvbl9wYXRoKQorICAg
ICAgICBwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5zZXAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2Fi
cyhzZWxmLl9iYXNlX2RpcmVjdG9yeSkgZWxzZSAnJworICAgICAgICBzZWxmLl9nZXRfdGVzdF9y
ZXN1bHRzKHRlc3RfcmVzdWx0cywgcmVzdWx0c19qc29uWyd0ZXN0cyddLCBwYXRoKQorICAgICAg
ICByZXR1cm4gdGVzdF9yZXN1bHRzCisKKyAgICBkZWYgX2pzX3Rlc3RfY29uZm9ybWFuY2Uoc2Vs
ZiwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgICMgVGVzdCBpcyBzYWlkIHRvIFBBU1MgaWYgYXQg
bGVhc3Qgb25lIGxpbmUgaXMgUEFTUyBhbmQgbm8gbGluZSBpcyBGQUlMCisgICAgICAgIGhhc0Zh
aWwgPSBGYWxzZQorICAgICAgICBoYXNQYXNzID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4g
ZXhwZWN0ZWRfdGV4dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dp
dGgoJ1BBU1MnKToKKyAgICAgICAgICAgICAgICBoYXNQYXNzID0gVHJ1ZQorICAgICAgICAgICAg
ZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0ZBSUwnKToKKyAgICAgICAgICAgICAgICBoYXNGYWlsID0g
VHJ1ZQorICAgICAgICBpZiBoYXNQYXNzOgorICAgICAgICAgICAgcmV0dXJuICdQQVNTJyBpZiBu
b3QgaGFzRmFpbCBlbHNlICdQQVJUSUFMJworICAgICAgICBpZiBoYXNGYWlsOgorICAgICAgICAg
ICAgcmV0dXJuICdGQUlMJworICAgICAgICByZXR1cm4gJ0VSUk9SJworCisgICAgZGVmIF9jb25m
b3JtYW5jZV9zdGF0dXMoc2VsZiwgdGVzdF9uYW1lLCB0ZXN0X3Jlc3VsdHMpOgorICAgICAgICAj
IEZJWE1FOiBXZSBzaG91bGQgaW1wcm92ZSByZWZ0ZXN0L2pzdGVzdCBkZXRlY3Rpb24uCisgICAg
ICAgIGlmIG5vdCB0ZXN0X25hbWUgaW4gdGVzdF9yZXN1bHRzOgorICAgICAgICAgICAgcmV0dXJu
IHsndHlwZSc6ICdyZWZ0ZXN0JywgJ3N0YXR1cyc6ICdQQVNTJ30KKworICAgICAgICB0ZXN0X3Jl
c3VsdCA9IHRlc3RfcmVzdWx0c1t0ZXN0X25hbWVdCisKKyAgICAgICAgcmVwb3J0ID0gdGVzdF9y
ZXN1bHRbJ3JlcG9ydCddCisgICAgICAgIGlmIHJlcG9ydCA9PSAnTUlTU0lORyc6CisgICAgICAg
ICAgICB0ZXh0ID0gc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfbmFtZSkKKyAgICAgICAg
ICAgIGlmIG5vdCh0ZXh0IGlzIE5vbmUgb3IgbGVuKHRleHQpID09IDApOgorICAgICAgICAgICAg
ICAgIHJldHVybiB7J3R5cGUnOiAnanN0ZXN0JywgJ3N0YXR1cyc6IHNlbGYuX2pzX3Rlc3RfY29u
Zm9ybWFuY2UodGV4dCl9CisgICAgICAgIGVsaWYgcmVwb3J0ID09ICdSRUdSRVNTSU9OJzoKKyAg
ICAgICAgICAgIHJldHVybiB7J3R5cGUnOiAncmVmdGVzdCcsICdzdGF0dXMnOiAnRkFJTCd9CisK
KyAgICAgICAgcmVhc29uID0gdGVzdF9yZXN1bHRbJ2FjdHVhbCddCisgICAgICAgIGlmIHJlYXNv
biA9PSAnQ1JBU0gnIG9yIHJlYXNvbiA9PSAnVElNRU9VVCc6CisgICAgICAgICAgICByZXR1cm4g
eyd0eXBlJzogJ2pzdGVzdCcsICdzdGF0dXMnOiByZWFzb259CisKKyAgICAgICAgcmV0dXJuIHsn
dHlwZSc6ICdqc3Rlc3QnLCAnc3RhdHVzJzogJ0VSUk9SJ30KKworICAgIGRlZiBjb25mb3JtYW5j
ZV9yZXN1bHRzKHNlbGYpOgorICAgICAgICB0ZXN0X3drcl9yZXN1bHRzID0gc2VsZi5wcm9jZXNz
X3Rlc3RfcmVzdWx0cygpCisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICBmb3IgdGVzdF9u
YW1lIGluIHNlbGYuX3Rlc3RzOgorICAgICAgICAgICAgcmVzdWx0c1tzZWxmLnczY190ZXN0X25h
bWUodGVzdF9uYW1lKV0gPSBzZWxmLl9jb25mb3JtYW5jZV9zdGF0dXModGVzdF9uYW1lLCB0ZXN0
X3drcl9yZXN1bHRzKQorICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgZGVmIHN1bW1hcnko
c2VsZik6CisgICAgICAgIG51bV9wYXNzID0gbnVtX3BhcnRpYWwgPSBudW1fZmFpbCA9IG51bV9l
cnJvciA9IDAKKyAgICAgICAgY29uZm9ybWFuY2VfcmVzdWx0cyA9IHNlbGYuY29uZm9ybWFuY2Vf
cmVzdWx0cygpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZvcm1hbmNlX3Jlc3VsdHMu
aXRlcml0ZW1zKCk6CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZVsnc3RhdHVzJ10KKyAgICAg
ICAgICAgIGlmIHJlc3VsdCA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgbnVtX3Bhc3MgKz0g
MQorICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gJ1BBUlRJQUwnOgorICAgICAgICAgICAgICAg
IG51bV9wYXJ0aWFsICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09ICdGQUlMJzoKKyAg
ICAgICAgICAgICAgICBudW1fZmFpbCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIG51bV9lcnJvciArPSAxCisgICAgICAgIHN1bW1hcnkgPSB7fQorICAgICAgICBzdW1t
YXJ5Wyd0b3RhbCddID0gbnVtX3Bhc3MgKyBudW1fZmFpbCArIG51bV9wYXJ0aWFsICsgbnVtX2Vy
cm9yCisgICAgICAgIHN1bW1hcnlbJ251bV9wYXNzJ10gPSBudW1fcGFzcworICAgICAgICBzdW1t
YXJ5WydudW1fZmFpbCddID0gbnVtX2ZhaWwKKyAgICAgICAgc3VtbWFyeVsnbnVtX3BhcnRpYWwn
XSA9IG51bV9wYXJ0aWFsCisgICAgICAgIHN1bW1hcnlbJ251bV9lcnJvciddID0gbnVtX2Vycm9y
CisgICAgICAgIHJldHVybiBzdW1tYXJ5CisKKyAgICBkZWYgd3JpdGVfY29uZm9ybWFuY2VfcmVz
dWx0cyhzZWxmLCBwYXRoLCB0ZXN0X3J1bl9pbmZvKToKKyAgICAgICAgcmVzdWx0cyA9IHt9Cisg
ICAgICAgIHJlc3VsdHNbJ2NvbmZvcm1hbmNlX3Jlc3VsdHMnXSA9IHNlbGYuY29uZm9ybWFuY2Vf
cmVzdWx0cygpCisgICAgICAgIHJlc3VsdHMudXBkYXRlKHRlc3RfcnVuX2luZm8pCisKKyAgICAg
ICAganNvbl9zdHJpbmcgPSBqc29uLmR1bXBzKHJlc3VsdHMsIGluZGVudD00LCBzb3J0X2tleXM9
VHJ1ZSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQorICAgICAgICBqc29uX3N0cmluZyA9IHNlbGYu
X0pTT05fUFJFRklYICsganNvbl9zdHJpbmcgKyBzZWxmLl9KU09OX1NVRkZJWAorICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0
aCwgJ3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24nKSwganNvbl9zdHJpbmcpCisKKyAgICAg
ICAgcmVzdWx0c19maWxlID0gc2VsZi5fcG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91
dFRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycsICdyZXNvdXJjZXMnLCAndzNjX2NvbmZvcm1hbmNl
X3Jlc3VsdHMuaHRtbCcpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHJlc3Vs
dHNfZmlsZSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHlmaWxlKHJlc3VsdHNf
ZmlsZSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsICd3M2NfY29uZm9ybWFuY2VfcmVzdWx0
cy5odG1sJykpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCBmMTdkZGZiOGZjZTRl
ZjYxYTNiNjRjZGE0NzlkNzk4YjFhMTBlMTZmLi4wM2YxMzNlNzBiNWQzMzViMGRkNDkyOWM5MDQ5
YWU2NmZlMjUwNTZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxNS0wMS0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9u
LmZyPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBhdXRvbWF0ZWQgVzNDIGNvbmZvcm1hbmNl
IHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNDc2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGNvbmZvcm1hbmNlIHJlc3VsdHMuCisKKyAgICAgICAg
KiByZXNvdXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbDogQWRkZWQuCisKIDIwMTUt
MDItMjAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHN2bjprZXl3b3JkcyBwcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy9yZXNvdXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvdzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iZmExMjhjN2YxZDllM2VmZGYwMjRjOWRmYTc0MmU0ZGI2NGIzYmI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2NfY29u
Zm9ybWFuY2VfcmVzdWx0cy5odG1sCkBAIC0wLDAgKzEsNDU1IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjcmVzdWx0cyB7CisgICAgZGlzcGxheTogdGFibGU7
CisgICAgcGFkZGluZzogMjBweDsKKyAgICBjbGVhcjogYm90aDsKK30KKyNzdW1tYXJ5IHsKKyAg
ICBtYXJnaW4tdG9wOiAyMHB4OworICAgIG1hcmdpbi1ib3R0b206IDIwcHg7Cit9CisKKy50ZXN0
LCAuZmlyc3RsaW5lIHsKKyAgICBkaXNwbGF5OiB0YWJsZTsKK30KKy50ZXN0bmFtZSwgLnRlc3Ry
ZXN1bHQsIC5maXJzdExpbmUgPiBkaXYgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxhdmVuZGVy
OworICAgIGJvcmRlci1ib3R0b206c29saWQgMXB4IHdoaXRlOworfQorCisuZmlyc3RMaW5lQ2Vs
bHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAg
ICB3aWR0aDogODAwcHg7Cit9CisKKy5zZWNvbmRMaW5lQ2VsbCB7CisgICAgZGlzcGxheTogdGFi
bGUtY2VsbDsKKyAgICBwYWRkaW5nLWxlZnQ6IDUwcHg7CisgICAgd2lkdGg6IDc1MHB4OworfQor
CisudGVzdG5hbWUgeworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgd2lkdGg6IDkwMHB4
OworICAgIG1hcmdpbi1sZWZ0OjIwcHg7Cit9CisKKy50ZXN0bmFtZWxpbmsgeworICAgIGZsb2F0
OmxlZnQ7CisgICAgbWFyZ2luLXJpZ2h0OjEwcHg7Cit9CisKKy50ZXN0cmVzdWx0bGluayAgewor
ICAgIGZsb2F0OiBsZWZ0OworfQorCisudGVzdHJlc3VsdGxpbmsgYSB7CisgICAgdGV4dC10cmFu
c2Zvcm06IGNhcGl0YWxpemU7Cit9CisKKy5idWdmaWxpbmdsaW5rICB7CisgICAgdGV4dC1hbGln
bjogcmlnaHQ7Cit9CisKKy5wb3J0IHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHdp
ZHRoOiAyNTBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy50ZXN0cmVzdWx0IHsK
KyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHdpZHRoOiAxNTBweDsKKyAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7Cit9CisKKy50ZXN0cmVzdWx0Om5vdCg6bGFzdC1jaGlsZCkgeworICAgIHBh
ZGRpbmctcmlnaHQ6IDEwMHB4OworfQorCisucGFydGlhbCwgLnBhc3MsIC5mYWlsLCAudGltZW91
dCwgLmVycm9yIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisucGFzcyBhIHsKKyAgICBj
b2xvcjogZ3JlZW47Cit9CisKKy5wYXJ0aWFsIGEgeworICAgIGNvbG9yOiB5ZWxsb3c7Cit9CisK
Ky5mYWlsIGEgeworICAgIGNvbG9yOiBvcmFuZ2U7Cit9CisKKy50aW1lb3V0IGEgeworICAgIGNv
bG9yOiByZWQ7Cit9CisKKy5jcmFzaCBhIHsKKyAgICBjb2xvcjogcmVkOworfQorCisuZXJyb3Ig
YSB7CisgICAgY29sb3I6IHJlZDsKK30KKworLmVycm9yLXJlc3VsdHMtaGlzdCB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmVkOworICAgIGZsb2F0OiBsZWZ0OyAKK30KKyAKKy5mYWlsLXJlc3Vs
dHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogb3JhbmdlOworICAgIGZsb2F0OiBsZWZ0
OworfQorCisucGFydGlhbC1yZXN1bHRzLWhpc3QgeworICAgIGJhY2tncm91bmQtY29sb3I6IHll
bGxvdzsKKyAgICBmbG9hdDogbGVmdDsKK30KKy5wYXNzLXJlc3VsdHMtaGlzdCB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgZmxvYXQ6IGxlZnQ7Cit9CisKKy5tb2R1bGUtbmFt
ZSB7CisgICAgZGlzcGxheTp0YWJsZS1jZWxsOworICAgIHdpZHRoOiA4MDBweDsKK30KKworLm51
bWJlci1vZi10ZXN0cyB7CisgICAgZGlzcGxheTppbmxpbmUtYmxvY2s7CisgICAgd2lkdGg6IDUw
cHg7Cit9CisKKy5tb2R1bGUtcmVzdWx0cyB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAg
IGRpc3BsYXk6dGFibGUtY2VsbDsKKyAgICB3aWR0aDogMjUwcHg7Cit9CisKKy5oaXN0b2dyYW0g
eworICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOworICAgIG1hcmdpbi1sZWZ0OiA0MHB4OworICAg
IG1hcmdpbi10b3A6IDVweDsKKyAgICB3aWR0aDoxNTBweDsKK30KKworLm1vZHVsZXsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiBsYXZlbmRlcjsKKyAgICBib3JkZXI6c29saWQgMXB4IHdoaXRlOwor
ICAgIGRpc3BsYXk6dGFibGU7Cit9CisKKy5tb2R1bGUtc3VtbWFyeSwgLnNlY29uZExpbmUgewor
ICAgIGRpc3BsYXk6dGFibGU7CisgICAgYmFja2dyb3VuZDogbGF2ZW5kZXI7CisgICAgYm9yZGVy
OnNvbGlkIDFweCB3aGl0ZTsKKyAgICBoZWlnaHQ6IDI1cHg7CisgICAgY3Vyc29yOnBvaW50ZXI7
Cit9CisKKy5ib3h7CisgICAgZGlzcGxheTogdGFibGU7Cit9CisKKy5oaWRkZW4tZGF0YSB7Cisg
ICAgZGlzcGxheTogbm9uZTsKK30KKworLmxlZ2VuZCA+IGRpdiB7CisgICAgZmxvYXQ6IGxlZnQ7
CisgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CisgICAgbWluLXdpZHRoOiAyMHB4OworfQorCisubGVn
ZW5kIHsKK30KKzwvc3R5bGU+Cis8c2NyaXB0PgorCitmdW5jdGlvbiB0ZXN0c0RpcmVjdG9yeShy
ZXN1bHRzKQoreworICAgIHJldHVybiAocmVzdWx0cy5yb290X2RpcmVjdG9yeSA/IHJlc3VsdHMu
cm9vdF9kaXJlY3RvcnkgOiByZXN1bHRzLnBvcnRfbmFtZSkgKyAiLyIgKyAKKyAgICAgICAgICAg
IChyZXN1bHRzLnRlc3RzX2RpcmVjdG9yeSA/IHJlc3VsdHMudGVzdHNfZGlyZWN0b3J5IDogImlt
cG9ydGVkLXRlc3RzIikKK30KKworZnVuY3Rpb24gcmVzdWx0c0RpcmVjdG9yeShyZXN1bHRzKQor
eworICAgIHJldHVybiAocmVzdWx0cy5yb290X2RpcmVjdG9yeSA/IHJlc3VsdHMucm9vdF9kaXJl
Y3RvcnkgOiByZXN1bHRzLnBvcnRfbmFtZSkgKyAiLyIgKyAKKyAgICAgICAgICAgIChyZXN1bHRz
LnJlc3VsdHNfZGlyZWN0b3J5ID8gcmVzdWx0cy5yZXN1bHRzX2RpcmVjdG9yeSA6ICJsYXlvdXQt
dGVzdC1yZXN1bHRzIikKK30KKworZnVuY3Rpb24gZ2l0aHViVGVzdFVSTCh0ZXN0bmFtZSwgcmVz
dWx0cykKK3sKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy50ZXN0X3JlcG9zaXRvcmll
cy5sZW5ndGg7IGkrKykgeworICAgICAgICByZXBvc2l0b3J5ID0gcmVzdWx0cy50ZXN0X3JlcG9z
aXRvcmllc1tpXQorICAgICAgICBpZiAodGVzdG5hbWUuaW5kZXhPZihyZXBvc2l0b3J5Lm5hbWUp
ID09IDApCisgICAgICAgICAgICByZXR1cm4gcmVwb3NpdG9yeS51cmwucmVwbGFjZSgiLmdpdCIs
IiIpICsgIi9ibG9iLyIgKyByZXBvc2l0b3J5LnJldmlzaW9uICsgdGVzdG5hbWUucmVwbGFjZShy
ZXBvc2l0b3J5Lm5hbWUsICIiKQorICAgIH0KKyAgICByZXR1cm4gIiNjYW5ub3QgZmluZCB0ZXN0
IHJlcG9zaXRvcnkiCit9CisKK2Z1bmN0aW9uIGJ1Z3ppbGxhVVJMKHRpdGxlLCBjb21tZW50KQor
eworICAgIHJldHVybiAiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvZW50ZXJfYnVnLmNnaT9hc3Np
Z25lZF90bz13ZWJraXQtdW5hc3NpZ25lZCU0MGxpc3RzLndlYmtpdC5vcmcmcHJvZHVjdD1XZWJL
aXQmZm9ybV9uYW1lPWVudGVyX2J1ZyZzaG9ydF9kZXNjPSIgKyB0aXRsZSArICImY29tbWVudD0i
ICsgY29tbWVudAorfQorCitmdW5jdGlvbiB0ZXN0RmlsZUxpbmsodGVzdG5hbWUsIHJlc3VsdHMp
Cit7CisgICAgcmV0dXJuICI8ZGl2IGNsYXNzPSd0ZXN0bmFtZWxpbmsnPjxhIGhyZWY9JyIgKyB0
ZXN0c0RpcmVjdG9yeShyZXN1bHRzKSArICIvIiArIHRlc3RuYW1lICsgIic+IiArIHRlc3RuYW1l
ICsgIjwvYT48L2Rpdj4iCisgICAgICAgICsgIjxkaXYgY2xhc3M9J2dpdGh1YmxpbmsnPig8YSBo
cmVmPSciICsgZ2l0aHViVGVzdFVSTCh0ZXN0bmFtZSwgcmVzdWx0cykgKyAiJz5naXRodWI8L2E+
KTwvZGl2PiIgCit9CisKK2Z1bmN0aW9uIHRlc3RSZXN1bHRGaWxlTGluayh0ZXN0bmFtZSwgcmVz
dWx0LCByZXN1bHRzKQoreworICAgIHZhciBzdWZmaXggPSAiLiIgKyB0ZXN0bmFtZS5zcGxpdCgn
LicpLnBvcCgpCisgICAgdmFyIG5ld19zdWZmaXggPSAiLWV4cGVjdGVkLnR4dCIKKyAgICByZXN1
bHRfc3RhdHVzID0gcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpLnRyaW0oKQorICAgIGlmIChy
ZXN1bHRfc3RhdHVzID09ICJjcmFzaCIpCisgICAgICAgIG5ld19zdWZmaXggPSAiLWNyYXNoLWxv
Zy50eHQiCisgICAgaWYgKHJlc3VsdC50eXBlID09ICJyZWZ0ZXN0IikKKyAgICAgICAgbmV3X3N1
ZmZpeCA9ICItZGlmZnMuaHRtbCIKKyAgICAKKyAgICB2YXIgbGluayA9ICI8ZGl2IGNsYXNzPSd0
ZXN0cmVzdWx0bGluayc+PGEgaHJlZj0nIiArIHRlc3RzRGlyZWN0b3J5KHJlc3VsdHMpICsgIi8i
ICsgdGVzdG5hbWUucmVwbGFjZShzdWZmaXgsIG5ld19zdWZmaXgpICsgIic+IiArIHJlc3VsdF9z
dGF0dXMgKyAiPC9hPjwvZGl2PiIKKworICAgIGlmIChyZXN1bHQgIT0gInBhc3MiKSB7CisgICAg
ICAgIHZhciB0aXRsZSA9IGVuY29kZVVSSUNvbXBvbmVudCgiVzNDICIgKyB0ZXN0bmFtZSArICIg
dGVzdCBpcyAiICsgcmVzdWx0X3N0YXR1cyArICJpbmciKQorICAgICAgICB2YXIgY29tbWVudCA9
IGVuY29kZVVSSUNvbXBvbmVudChnaXRodWJUZXN0VVJMKHRlc3RuYW1lLCByZXN1bHRzKSArICIg
aXMgIiArIHJlc3VsdF9zdGF0dXMgKyAiaW5nIG9uICIgKyByZXN1bHRzLnBvcnRfbmFtZS50b1Vw
cGVyQ2FzZSgpICsgIi4iKQorICAgICAgICBsaW5rICs9ICI8ZGl2IGNsYXNzPSdidWdmaWxpbmds
aW5rJz48YSBocmVmPSciICsgYnVnemlsbGFVUkwodGl0bGUsIGNvbW1lbnQpICsgIic+ZmlsZSBi
dWc8L2E+PC9kaXY+IgorICAgIH0KKworICAgIHJldHVybiBsaW5rCit9CisKK2Z1bmN0aW9uIHRl
c3RTdWl0ZVN0YXRlSGlzdG9ncmFtKG51bUVycm9yLCBudW1GYWlsLCBudW1QYXJ0aWFsLCBudW1Q
YXNzKQoreworICAgIHZhciB0b3RhbCA9IG51bUVycm9yICsgbnVtUGFzcyArIG51bVBhcnRpYWwg
KyBudW1GYWlsCisKKyAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJtb2R1bGUtcmVzdWx0cyI+
JworCisgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ibnVtYmVyLW9mLXRlc3RzIj4nICsgbnVtUGFz
cyArICcvJyArIHRvdGFsICsgJzwvZGl2PicKKworICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Imhp
c3RvZ3JhbSI+JworICAgIGlmIChudW1FcnJvcikKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFz
cz0iZXJyb3ItcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1FcnJvciAv
IHRvdGFsKSArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYgKG51bUZhaWwpCisgICAgICAgIGh0
bWwgKz0gJzxkaXYgY2xhc3M9ImZhaWwtcmVzdWx0cy1oaXN0IiBzdHlsZT0id2lkdGg6JyArICgx
MDAgKiBudW1GYWlsIC8gdG90YWwpICArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaWYgKG51bVBh
cnRpYWwpCisgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InBhcnRpYWwtcmVzdWx0cy1oaXN0
IiBzdHlsZT0id2lkdGg6JyArICgxMDAgKiBudW1QYXJ0aWFsIC8gdG90YWwpICsgJyUiPiZuYnNw
OzwvZGl2PicKKyAgICBpZiAobnVtUGFzcykKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0i
cGFzcy1yZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51bVBhc3MgLyB0b3Rh
bCkgKyAnJSI+Jm5ic3A7PC9kaXY+JworICAgIGh0bWwgKz0gJzwvZGl2PicKKworICAgIHJldHVy
biBodG1sICsgJzwvZGl2PicKK30KKworZnVuY3Rpb24gdGVzdHN1aXRlTW9kdWxlcyhyZXN1bHRz
KQorIHsKKyAgICB2YXIgbW9kdWxlcyA9IHt9CisgICAgLy8gZmlyc3QgdHJ5IHRvIG9ubHkgc2hv
dyBtb2R1bGUgZnJvbSBVUkwgaGFzaAorICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhh
c2guc3Vic3RyaW5nKDEpCisgICAgdmFyIGhhc1Rlc3QgPSBmYWxzZQorICAgIGlmIChoYXNoLmxl
bmd0aCkgeworICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHMp
LnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworICAgICAgICAgICAgdmFyIHRlc3RO
YW1lID0ga2V5CisgICAgICAgICAgICBpZiAodGVzdE5hbWUuaW5kZXhPZihoYXNoKSA9PSAwKSB7
CisgICAgICAgICAgICAgICAgaGFzVGVzdCA9IHRydWUKKyAgICAgICAgICAgICAgICB2YXIgaXRl
bXMgPSB0ZXN0TmFtZS5zcGxpdCgiLyIpCisgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBpdGVt
c1swXQorICAgICAgICAgICAgICAgIGlmIChtb2R1bGVzW25hbWVdKQorICAgICAgICAgICAgICAg
ICAgICBtb2R1bGVzW25hbWVdLnB1c2goa2V5KQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbW9kdWxlc1tuYW1lXSA9IFtrZXldCisgICAgICAgICAgICB9CisgICAg
ICAgIH0pCisgICAgfQorICAgIGlmIChoYXNUZXN0KQorICAgICAgICByZXR1cm4gbW9kdWxlcwor
CisgICAgLy8gSWYgbm8gdGVzdHMsIHNob3cgYWxsIG1vZHVsZXMKKyAgICBPYmplY3Qua2V5cyhy
ZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHMpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSwg
aSkgeworICAgICAgICB2YXIgdGVzdE5hbWUgPSBrZXkKKyAgICAgICAgdmFyIGl0ZW1zID0gdGVz
dE5hbWUuc3BsaXQoIi8iKQorICAgICAgICB2YXIgbmFtZSA9IGl0ZW1zWzBdCisgICAgICAgIC8v
IEluIGNhc2Ugb2YgaHRtbCBtb2R1bGUsIHdlIHNwbGl0IGRpc3BsYXkgaW4gc3ViLW1vZHVsZXMK
KyAgICAgICAgaWYgKG5hbWUgPT0gJ3dlYi1wbGF0Zm9ybS10ZXN0cycgfHwgbmFtZSA9PSAnY3Nz
d2ctdGVzdHMnIHx8IG5hbWUgPT0gJ2h0bWwnKQorICAgICAgICAgICAgbmFtZSArPSAnLycgKyBp
dGVtc1sxXQorICAgICAgICBpZiAobW9kdWxlc1tuYW1lXSkKKyAgICAgICAgICAgIG1vZHVsZXNb
bmFtZV0ucHVzaChrZXkpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vZHVsZXNbbmFtZV0g
PSBba2V5XQorICAgIH0pCisgICAgcmV0dXJuIG1vZHVsZXMKKyB9CisKK2Z1bmN0aW9uIHRvZ2ds
ZVRlc3RzKGRpdikKK3sKKyAgICB2YXIgYm94ID0gZGl2Lm5leHRFbGVtZW50U2libGluZworICAg
IGlmIChib3gpCisgICAgICAgIGJveC5jbGFzc05hbWUgPSAoYm94LmNsYXNzTmFtZSA9PSAnYm94
JykgPyAnaGlkZGVuLWRhdGEnIDogJ2JveCcKK30KKworZnVuY3Rpb24gaW5jcmVtZW50U3VtbWFy
eShyZXN1bHQsIHN1bW1hcnkpCit7CisgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT0gIlBBU1MiKQor
ICAgICAgICBzdW1tYXJ5Lm51bVBhc3MrKworICAgIGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT0g
IlBBUlRJQUwiKQorICAgICAgICBzdW1tYXJ5Lm51bVBhcnRpYWwrKworICAgIGVsc2UgaWYgKHJl
c3VsdC5zdGF0dXMgPT0gIkZBSUwiKQorICAgICAgICBzdW1tYXJ5Lm51bUZhaWwrKworICAgIGVs
c2UKKyAgICAgICAgc3VtbWFyeS5udW1FcnJvcisrCit9CisKK2Z1bmN0aW9uIGNvbXB1dGVHbG9i
YWxDb25mb3JtYW5jZShyZXN1bHRzKQoreworICAgIHZhciBzdW1tYXJ5ID0ge251bVBhc3M6IDAs
IG51bVBhcnRpYWw6IDAsIG51bUZhaWw6IDAsIG51bUVycm9yOiAwfQorICAgIGZvciAodmFyIHRl
c3QgaW4gcmVzdWx0cy5jb25mb3JtYW5jZV9yZXN1bHRzKSB7CisgICAgICAgIGlmIChyZXN1bHRz
LmNvbmZvcm1hbmNlX3Jlc3VsdHMuaGFzT3duUHJvcGVydHkodGVzdCkpCisgICAgICAgICAgICBp
bmNyZW1lbnRTdW1tYXJ5KHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0c1t0ZXN0XSwgc3VtbWFy
eSkKKyAgICB9CisgICAgcmV0dXJuIHN1bW1hcnkKK30KKworZnVuY3Rpb24gY29tcHV0ZVN0YXRp
c3RpY3MocmVzdWx0c1N1bW1hcnksIHJlc3VsdCwgcmVzdWx0cykKK3sKKyAgICB2YXIgc3VtbWFy
eSA9IHJlc3VsdHNTdW1tYXJ5W3Jlc3VsdHMucG9ydF9uYW1lXQorCisgICAgaWYgKCFzdW1tYXJ5
KQorICAgICAgICByZXN1bHRzU3VtbWFyeVtyZXN1bHRzLnBvcnRfbmFtZV0gPSBzdW1tYXJ5ID0g
e251bVBhc3M6IDAsIG51bVBhcnRpYWw6IDAsIG51bUZhaWw6IDAsIG51bUVycm9yOiAwfQorCisg
ICAgaW5jcmVtZW50U3VtbWFyeShyZXN1bHQsIHN1bW1hcnkpCit9CisKK2Z1bmN0aW9uIGFkZFRl
c3RTdWl0ZUxpc3RPZlJlc3VsdHMobW9kdWxlTmFtZSwgdGVzdHMsIGxpc3RPZlJlc3VsdHMsIGlz
T3BlbikKK3sKKyAgICB2YXIgaW5uZXJIVE1MID0gIiIKKyAgICB2YXIgcmVzdWx0c1N1bW1hcnkg
PSAge30KKyAgICB0ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworICAgICAgICBpbm5l
ckhUTUwgKz0gIjxkaXYgY2xhc3M9J3Rlc3QnPjxkaXYgY2xhc3M9J3Rlc3RuYW1lJz4iICsgdGVz
dEZpbGVMaW5rKGtleSwgbGlzdE9mUmVzdWx0c1swXSkgKyAiPC9kaXY+IgorICAgICAgICBsaXN0
T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworICAgICAgICAgICAgdmFyIHJl
c3VsdCA9IHJlc3VsdHMuY29uZm9ybWFuY2VfcmVzdWx0c1trZXldCisgICAgICAgICAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJNaXNzaW5nIgorICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKCJXQVJOSU5HOiB0ZXN0ICIgKyBrZXkgKyAiIGlzIG1pc3Npbmci
KQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5uZXJIVE1MICs9ICI8ZGl2IGNsYXNzPSd0
ZXN0cmVzdWx0ICIgKyByZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCkgKyAiJz4iICsgdGVzdFJl
c3VsdEZpbGVMaW5rKGtleSwgcmVzdWx0LCByZXN1bHRzKSArICI8L2Rpdj4iCisgICAgICAgICAg
ICBjb21wdXRlU3RhdGlzdGljcyhyZXN1bHRzU3VtbWFyeSwgcmVzdWx0LCByZXN1bHRzKQorICAg
ICAgICB9KQorICAgICAgICBpbm5lckhUTUwgKz0gIjwvZGl2PiIKKyAgICB9KQorICAgIHZhciBo
dG1sID0gJzxkaXYgY2xhc3M9Im1vZHVsZSI+PGRpdiBjbGFzcz0ibW9kdWxlLXN1bW1hcnkiIG9u
Y2xpY2s9InRvZ2dsZVRlc3RzKGV2ZW50LmN1cnJlbnRUYXJnZXQpIj48ZGl2IGNsYXNzPSJtb2R1
bGUtbmFtZSI+JyArIG1vZHVsZU5hbWUgKyAnPC9kaXY+JworICAgIGxpc3RPZlJlc3VsdHMuZm9y
RWFjaChmdW5jdGlvbihyZXN1bHRzKSB7CisgICAgICAgIHZhciBzdW1tYXJ5ID0gcmVzdWx0c1N1
bW1hcnlbcmVzdWx0cy5wb3J0X25hbWVdCisgICAgICAgIGh0bWwgKz0gdGVzdFN1aXRlU3RhdGVI
aXN0b2dyYW0oc3VtbWFyeS5udW1FcnJvciwgc3VtbWFyeS5udW1GYWlsLCBzdW1tYXJ5Lm51bVBh
cnRpYWwsIHN1bW1hcnkubnVtUGFzcykKKyAgICB9KQorICAgIGh0bWwgKz0gJzwvZGl2PjxkaXYg
Y2xhc3M9IicgKyAoaXNPcGVuID8gImJveCIgOiAiaGlkZGVuLWRhdGEiKSArICciPicKKyAgICBo
dG1sICs9IGlubmVySFRNTAorICAgIGh0bWwgKz0gJzwvZGl2PjwvZGl2PicKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCArPSBodG1sCit9CisKK2Z1bmN0
aW9uIHdyaXRlU3VtbWFyeSgpCit7CisgICAgdmFyIGh0bWwgPSAiPGRpdj5XM0MgY29uZm9ybWFu
Y2UgcmVzdWx0cyBmcm9tIHJ1bi13ZWJraXQtdGVzdCAoIgorICAgIGxpc3RPZlJlc3VsdHMuZm9y
RWFjaChmdW5jdGlvbihyZXN1bHRzKSB7CisgICAgICAgIGh0bWwgKz0gIjxhIGhyZWY9JyIgKyBy
ZXN1bHRzRGlyZWN0b3J5KHJlc3VsdHMpICsgIic+IiArIHJlc3VsdHMucG9ydF9uYW1lICsgIjwv
YT4gJm5ic3A7IgorICAgIH0pCisgICAgaHRtbCArPSAiKTwvZGl2PiIKKworICAgIGh0bWwgKz0g
IjxkaXY+IEdlbmVyYXRlZCA8YSBocmVmPSdUZXN0RXhwZWN0YXRpb25zJz50ZXN0IGV4cGVjdGF0
aW9uczwvYT4gYW5kIDxhIGhyZWY9J0ltcG9ydEV4cGVjdGF0aW9ucyc+aW1wb3J0IGV4cGVjdGF0
aW9uczwvYT4uPC9kaXY+IgorCisgICAgLy8gRklYTUU6IENoZWNrIHRoYXQgYWxsIGNvbmZvcm1h
bmNlIHJlc3VsdHMgdXNlIHRoZSBzYW1lIHRlc3Qgc3VpdGUgcmV2aXNpb25zLgorCisgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN1bW1hcnkiKS5pbm5lckhUTUwgPSBodG1sCit9CisKK2Z1
bmN0aW9uIGRpc3BsYXlSZXN1bHRzKCkKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgIHsK
KyAgICAgICAgdmFyIGZpcnN0TGluZUhUTUwgPSAiPGRpdiBjbGFzcz0nZmlyc3RMaW5lJz48ZGl2
IGNsYXNzPSdmaXJzdExpbmVDZWxsJz5Nb2R1bGUvVGVzdCBOYW1lPC9kaXY+IgorICAgICAgICBs
aXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24ocmVzdWx0cykgeworICAgICAgICAgICAgZmly
c3RMaW5lSFRNTCArPSAiPGRpdiBjbGFzcz0ncG9ydCc+IiArIHJlc3VsdHMucG9ydF9uYW1lLnRv
VXBwZXJDYXNlKCkgKyAiPC9kaXY+IgorICAgICAgICB9KQorICAgICAgICBmaXJzdExpbmVIVE1M
ICs9ICI8L2Rpdj4iCisgICAgICAgIHZhciBzZWNvbmRMaW5lSFRNTCA9ICI8ZGl2IGNsYXNzPSdz
ZWNvbmRMaW5lJz48ZGl2IGNsYXNzPSdzZWNvbmRMaW5lQ2VsbCc+T3ZlcmFsbCBjb25mb3JtYW5j
ZTwvZGl2PiIKKyAgICAgICAgbGlzdE9mUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMp
IHsKKyAgICAgICAgICAgIHN1bW1hcnkgPSBjb21wdXRlR2xvYmFsQ29uZm9ybWFuY2UocmVzdWx0
cykKKyAgICAgICAgICAgIHNlY29uZExpbmVIVE1MICs9IHRlc3RTdWl0ZVN0YXRlSGlzdG9ncmFt
KHN1bW1hcnkubnVtRXJyb3IsIHN1bW1hcnkubnVtRmFpbCwgc3VtbWFyeS5udW1QYXJ0aWFsLCBz
dW1tYXJ5Lm51bVBhc3MpCisgICAgICAgIH0pCisgICAgICAgIHNlY29uZExpbmVIVE1MICs9ICI8
L2Rpdj4iCisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKS5pbm5l
ckhUTUwgPSBmaXJzdExpbmVIVE1MICsgc2Vjb25kTGluZUhUTUwKKyAgICAgICAgdmFyIG1vZHVs
ZXMgPSAgdGVzdHN1aXRlTW9kdWxlcyhsaXN0T2ZSZXN1bHRzWzBdKQorICAgICAgICB2YXIga2V5
cyA9IE9iamVjdC5rZXlzKG1vZHVsZXMpCisgICAgICAgIGtleXMuc29ydCgpLmZvckVhY2goZnVu
Y3Rpb24oa2V5LCBpKSB7CisgICAgICAgICAgICBhZGRUZXN0U3VpdGVMaXN0T2ZSZXN1bHRzKGtl
eSwgbW9kdWxlc1trZXldLCBsaXN0T2ZSZXN1bHRzLCBrZXlzLmxlbmd0aCA9PSAxKQorICAgICAg
ICB9KQorICAgICAgICB3cml0ZVN1bW1hcnkobGlzdE9mUmVzdWx0cykKKyAgICB9LCAwKQorfQor
CisgCitsaXN0T2ZSZXN1bHRzID0gW10gCitmdW5jdGlvbiBBRERfQ09ORk9STUFOQ0VfUkVTVUxU
UyhyZXN1bHRzKQoreworICAgIHJlc3VsdHMucm9vdF9kaXJlY3RvcnkgPSBkaXJzW2NvdW50ZXJd
CisgICAgbGlzdE9mUmVzdWx0cy5wdXNoKHJlc3VsdHMpCisgICAgc2V0VGltZW91dChsb2FkU2Ny
aXB0cywgMCkgICAgCit9CisKK3ZhciBjb3VudGVyCit2YXIgZGlycworZnVuY3Rpb24gbG9hZFNj
cmlwdHMoZGlyZWN0b3JpZXMpCit7CisgICAgaWYgKGRpcmVjdG9yaWVzKSB7CisgICAgICAgIGRp
cnMgPSBkaXJlY3RvcmllcworICAgICAgICBjb3VudGVyID0gLTEKKyAgICB9CisgICAgaWYgKGNv
dW50ZXIgPCBkaXJzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3N1bW1hcnknKS5pbm5lckhUTUwgPSAiTG9hZGluZyAiICsgZGlyc1srK2NvdW50ZXJdICsg
Ii4uLiIKKyAgICAgICAgdmFyIGhlYWQ9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdo
ZWFkJylbMF0KKyAgICAgICAgdmFyIHNjcmlwdD0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2Ny
aXB0JykKKyAgICAgICAgc2NyaXB0LnR5cGU9ICd0ZXh0L2phdmFzY3JpcHQnCisgICAgICAgIHNj
cmlwdC5zcmM9IGRpcnNbY291bnRlcl0gKyAnL3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24n
CisgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KQorICAgIH0KKyAgICBlbHNlIHsKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnknKS5pbm5lckhUTUwgPSAiRGlz
cGxheWluZyByZXN1bHRzLi4uIgorICAgICAgICBzZXRUaW1lb3V0KGRpc3BsYXlSZXN1bHRzLCAw
KQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9InN1bW1h
cnkiPgorICAgIExvYWRpbmcuLi4KKzwvZGl2PgorPGRpdiBjbGFzcz0ibGVnZW5kIj4KKyAgICA8
ZGl2IGNsYXNzPSJlcnJvci1yZXN1bHRzLWhpc3QgbGVnZW5kIj4mbmJzcDs8L2Rpdj4KKyAgICA8
ZGl2PkVycm9yLCBUaW1lb3V0IG9yIENyYXNoPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iZmFpbC1y
ZXN1bHRzLWhpc3QgbGVnZW5kIj4mbmJzcDs8L2Rpdj4KKyAgICA8ZGl2PiBBbGwgYXNzZXJ0aW9u
cyBmYWlsaW5nPC9kaXY+CisgICAgPGRpdiBjbGFzcz0icGFydGlhbC1yZXN1bHRzLWhpc3QgbGVn
ZW5kIj4mbmJzcDs8L2Rpdj4KKyAgICA8ZGl2PiBTb21lIGFzc2VydGlvbnMgcGFzc2luZzwvZGl2
PgorICAgIDxkaXYgY2xhc3M9InBhc3MtcmVzdWx0cy1oaXN0IGxlZ2VuZCI+Jm5ic3A7PC9kaXY+
CisgICAgPGRpdj4gQWxsIGFzc2VydGlvbnMgcGFzc2luZzwvZGl2PgorPC9kaXY+Cis8ZGl2IGlk
PSJyZXN1bHRzIj4KKzwvZGl2PgorCis8IS0tIEFkZCBhcyBtYW55IGZvbGRlciBjb250YWluaW5n
IHczY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24gYXMgbmVlZGVkIGluIGxvYWRTY3JpcHRzIGFy
cmF5IHRvIGRpc3BsYXkgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMgLS0+Cis8c2NyaXB0PgorICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxvYWRTY3JpcHRzKFsiLiJdKQorICAg
IH0sIDApCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249727</attachid>
            <date>2015-03-30 06:27:03 -0700</date>
            <delta_ts>2016-03-10 12:12:02 -0800</delta_ts>
            <desc>Refreshing and adding unit tests</desc>
            <filename>bug-134766-20150330152620.patch</filename>
            <type>text/plain</type>
            <size>47151</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMTEzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDk0NTdmYTcxOWNiODg1YjY5MGM0NTY2NTNkZDBkNWY2
YTFiYmI0Yi4uNjlmMzU1MDQxMjBiMGU5MjFmZmZkOTk3NGFkZjkwNWNiZmFhZTI3NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2
IEBACisyMDE1LTAzLTMwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2Ug
dGVzdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0NzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2NyaXB0cy9jaGVjay13M2MtY29uZm9ybWFuY2UgaXMgdGhlIGV4ZWN1dGFibGUgdG8gdGVzdCBX
M0MgdGVzdCBjb25mb3JtYW5jZS4KKyAgICAgICAgUmVzdWx0cyBhcmUgc3RvcmVkIGJ5IGRlZmF1
bHQgaW4gYSBXZWJLaXRCdWlsZCBzdWItZm9sZGVyIChzZWUgUG9ydC53M2NfY29uZm9ybWFuY2Vf
cmVzdWx0c19kaXJlY3RvcnkpLgorICAgICAgICBTY3JpcHRzL3dlYmtpdHB5L3czYy9jb25mb3Jt
YW5jZV9jaGVja2VyLnB5IGlzIHRoZSBtYWluIHNjcmlwdC4KKyAgICAgICAgSXQgdXNlcyB0ZXN0
IGltcG9ydGVyIHRvIGNsb25lIGFuZCBpbXBvcnQgdGhlIHRlc3RzLgorICAgICAgICBJdCB0aGVu
IHVzZXMgcnVuLXdlYmtpdC10ZXN0IHRvIHJ1biB0aGUgdGVzdHMgYW5kIGdlbmVyYXRlIHRoZSAt
ZXhwZWN0ZWQudHh0IGZpbGVzIGZvciB0ZXN0aGFybmVzcyB0ZXN0cy4KKyAgICAgICAgRnJvbSB0
aGUgLWV4cGVjdGVkLnR4dCBmaWxlcywgaXQgY29tcHV0ZXMgd2hldGhlciB0aGUgdGVzdCBpcyBw
YXNzaW5nLCBwYXJ0aWFsbHkgcGFzc2luZyBvciBmYWlsaW5nLgorICAgICAgICBSZXN1bHRzIGFy
ZSBvdXRwdXR0ZWQgdGhyb3VnaCBUZXN0UmVzdWx0c01hbmFnZXIgYXMgYSBqc29uIGZpbGUgdGhh
dCBjYW4gYmUgbG9hZGVkIHVzaW5nIHczY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwuCisgICAg
ICAgIERyYWZ0IFRlc3QgZXhwZWN0YXRpb25zIGFuZCBpbXBvcnQgcnVsZXMgYXJlIGFsc28gZ2Vu
ZXJhdGVkIGluIHRoZSBzYW1lIGZvbGRlci4KKworICAgICAgICAqIFNjcmlwdHMvY2hlY2stdzNj
LWNvbmZvcm1hbmNlOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weToKKyAgICAgICAgKFBvcnQudzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy9jb25mb3JtYW5jZV9jaGVja2VyLnB5OiBB
ZGRlZC4KKyAgICAgICAgKGNyZWF0ZV9hcmd1bWVudF9wYXJzZXIpOgorICAgICAgICAoQ29uZm9y
bWFuY2VDaGVja2VyKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci5fX2luaXRfXyk6Cisg
ICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIuX3ByaW50X3J3dF9vdXRwdXRfbGluZSk6CisgICAg
ICAgIChDb25mb3JtYW5jZUNoZWNrZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKENvbmZvcm1hbmNl
Q2hlY2tlci5pbml0X3Rlc3RfaW1wb3J0ZXIpOgorICAgICAgICAoQ29uZm9ybWFuY2VDaGVja2Vy
LnRlc3Rfc3VpdGVzKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci5jaGVja19jb25mb3Jt
YW5jZSk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIucHJpbnRfc3VtbWFyeV90b19jb25z
b2xlKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci5pbXBvcnRfZXhwZWN0YXRpb25fdXBk
YXRlcyk6CisgICAgICAgIChDb25mb3JtYW5jZUNoZWNrZXIudGVzdF9leHBlY3RhdGlvbl91cGRh
dGVzKToKKyAgICAgICAgKENvbmZvcm1hbmNlQ2hlY2tlci53cml0ZV9jb25mb3JtYW5jZV9yZXN1
bHRzKToKKyAgICAgICAgKFRlc3RSZXN1bHRzQ29uZm9ybWFuY2VQYXJzZXIpOgorICAgICAgICAo
VGVzdFJlc3VsdHNDb25mb3JtYW5jZVBhcnNlci5fX2luaXRfXyk6CisgICAgICAgIChUZXN0UmVz
dWx0c0NvbmZvcm1hbmNlUGFyc2VyLl9nZXRfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKFRlc3RS
ZXN1bHRzQ29uZm9ybWFuY2VQYXJzZXIuX2pzX3Rlc3RfY29uZm9ybWFuY2UpOgorICAgICAgICAo
VGVzdFJlc3VsdHNDb25mb3JtYW5jZVBhcnNlci5fY29uZm9ybWFuY2Vfc3RhdHVzKToKKyAgICAg
ICAgKFRlc3RSZXN1bHRzQ29uZm9ybWFuY2VQYXJzZXIudzNjX3Rlc3RfbmFtZSk6CisgICAgICAg
IChUZXN0UmVzdWx0c0NvbmZvcm1hbmNlUGFyc2VyLmNvbXB1dGVfY29uZm9ybWFuY2VfcmVzdWx0
cyk6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChjb25maWd1cmVfbG9n
Z2luZy5Mb2dIYW5kbGVyKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIu
Zm9ybWF0KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNj
L2NvbmZvcm1hbmNlX2NoZWNrZXJfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoQ29uZm9y
bWFuY0NoZWNrZXJUZXN0KToKKyAgICAgICAgKENvbmZvcm1hbmNDaGVja2VyVGVzdC5zZXRVcCk6
CisgICAgICAgIChDb25mb3JtYW5jQ2hlY2tlclRlc3Qud3JpdGVfZXhwZWN0ZWRfZmlsZSk6Cisg
ICAgICAgIChDb25mb3JtYW5jQ2hlY2tlclRlc3QudGVzdF93M2NfbmFtZV9jb252ZXJzaW9uKToK
KyAgICAgICAgKENvbmZvcm1hbmNDaGVja2VyVGVzdC50ZXN0X2pzb25fcmVzdWx0X3BhcnNpbmcp
OgorICAgICAgICAoQ29uZm9ybWFuY0NoZWNrZXJUZXN0LnRlc3RfbWlzc2luZ190ZXN0KToKKyAg
ICAgICAgKENvbmZvcm1hbmNDaGVja2VyVGVzdC50ZXN0X3JlZl90ZXN0X3RpbWVvdXQpOgorICAg
ICAgICAoQ29uZm9ybWFuY0NoZWNrZXJUZXN0LnRlc3RfcmVmX3Rlc3RfY3Jhc2gpOgorICAgICAg
ICAoQ29uZm9ybWFuY0NoZWNrZXJUZXN0LnRlc3RfcmVmX3Rlc3RfZmFpbCk6CisgICAgICAgIChD
b25mb3JtYW5jQ2hlY2tlclRlc3QudGVzdF9qc190ZXN0X3Bhc3MpOgorICAgICAgICAoQ29uZm9y
bWFuY0NoZWNrZXJUZXN0LnRlc3RfanNfdGVzdF9wYXJ0aWFsKToKKyAgICAgICAgKENvbmZvcm1h
bmNDaGVja2VyVGVzdC50ZXN0X2pzX3Rlc3RfZmFpbCk6CisgICAgICAgIChDb25mb3JtYW5jQ2hl
Y2tlclRlc3QudGVzdF9qc190ZXN0X2NyYXNoKToKKyAgICAgICAgKENvbmZvcm1hbmNDaGVja2Vy
VGVzdC50ZXN0X2pzX3Rlc3RfdGltZW91dCk6CisgICAgICAgIChDb25mb3JtYW5jQ2hlY2tlclRl
c3QudGVzdF9pbXBvcnRfZXhwZWN0YXRpb25zX3VwZGF0ZSk6CisgICAgICAgIChDb25mb3JtYW5j
Q2hlY2tlclRlc3QudGVzdF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZG93bmxvYWRlci5weToKKyAgICAgICAgKFRlc3REb3du
bG9hZGVyLmFsbF90ZXN0X3BhdGhzKToKKwogMjAxNS0wMy0yNyAgR3l1eW91bmcgS2ltICA8Z3l1
eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtDTWFrZV0gUmVtb3ZlIHVubmVjZXNz
YXJ5IElOQ0xVREVfSUZfRVhJU1RTIG1hY3JvIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9j
aGVjay13M2MtY29uZm9ybWFuY2UgYi9Ub29scy9TY3JpcHRzL2NoZWNrLXczYy1jb25mb3JtYW5j
ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43ZTJlOWUyOGM1NjQxZTRiNGY2NDEwZjY2ZTg2MDk5MmM4N2Q5MWNmCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9jaGVjay13M2MtY29uZm9ybWFuY2UKQEAg
LTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAy
MDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9O
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldy
YXBwZXIgYXJvdW5kIHdlYmtpdHB5L3czYy9jb25mb3JtYW5jZV9jaGVja2VyLnB5IiIiCitmcm9t
IHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcAorCittdWx0
aXByb2Nlc3NpbmdfYm9vdHN0cmFwLnJ1bignd2Via2l0cHknLCAndzNjJywgJ2NvbmZvcm1hbmNl
X2NoZWNrZXIucHknKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jh
c2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCA5MzExMGI1
MTYyMWQ1MTJlMDU2MTFhMzY4NTI1MzE0MWNiOTlkYzY1Li4yNGYwY2QzZjU0MDM5YWQyNjZlOTY1
YjE3MzE2NjFjODYwZTAwNTMyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAt
Nzg0LDYgKzc4NCwxMCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIHB5dGhvbl91bml0
dGVzdF9yZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxk
X3BhdGgoJ3B5dGhvbi11bml0dGVzdC1yZXN1bHRzJykKIAorICAgIGRlZiB3M2NfY29uZm9ybWFu
Y2VfcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgICIiIkFic29sdXRlIHBhdGggdG8g
dGhlIHBsYWNlIHRvIHN0b3JlIHRoZSBXM0MgY29uZm9ybWFuY2UgcmVzdWx0cy4iIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3czYy1jb25mb3JtYW5jZS1yZXN1bHRzJykKKwog
ICAgIGRlZiBkZWZhdWx0X3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICAiIiJBYnNv
bHV0ZSBwYXRoIHRvIHRoZSBkZWZhdWx0IHBsYWNlIHRvIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHMu
IiIiCiAgICAgICAgICMgUmVzdWx0cyBhcmUgc3RvcmUgcmVsYXRpdmUgdG8gdGhlIGJ1aWx0IHBy
b2R1Y3RzIHRvIG1ha2UgaXQgZWFzeQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS93M2MvY29uZm9ybWFuY2VfY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNj
L2NvbmZvcm1hbmNlX2NoZWNrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRkZDkyYTJlZTdmNjNhZTRkMGZi
NGYzNWFhMGQ5M2Q5NDVjMjA4MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdzNjL2NvbmZvcm1hbmNlX2NoZWNrZXIucHkKQEAgLTAsMCArMSwzNTcgQEAKKyMgQ29w
eXJpZ2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMg
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyIiIgorIFRoaXMgc2NyaXB0IGV2YWx1YXRlcyBXM0MgdGVzdHMgY29uZm9ybWFuY2Ug
Ynk6CisgICAgLSBpbXBvcnRpbmcgVzNDIHRlc3RzIGFzIFdlYktpdCB0ZXN0cworICAgIC0gZ2Vu
ZXJhdGluZyBleHBlY3RlZC50eHQgZmlsZXMgKHVzaW5nIHJ1bi13ZWJraXQtdGVzdHMpCisgICAg
LSBjb21wdXRpbmcgd2hldGhlciBhIGpzIHRlc3QgaXMgcGFzc2luZyBvciBub3QgYnkgY2hlY2tp
bmcgUEFTUy9GQUlMIGFzc2VydGlvbnMgb3V0cHV0dGVkIHdpdGhpbiB0aGUgZXhwZWN0ZWQudHh0
IGZpbGVzCisiIiIKKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5o
b3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGlt
cG9ydCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdl
IGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMudGVzdF9leHBlY3RhdGlvbnMgaW1wb3J0IFRlc3RFeHBlY3RhdGlvbnMKK2Zyb20g
d2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlndXJhdGlvbl9vcHRpb25zLCBwbGF0Zm9ybV9vcHRp
b25zCitmcm9tIHdlYmtpdHB5LnczYy50ZXN0X2ltcG9ydGVyIGltcG9ydCBUZXN0SW1wb3J0ZXIK
K2Zyb20gd2Via2l0cHkudzNjLnRlc3RfaW1wb3J0ZXIgaW1wb3J0IHBhcnNlX2FyZ3MgYXMgcGFy
c2VfaW1wb3J0ZXJfYXJncworZnJvbSB3ZWJraXRweS53M2MudGVzdF9kb3dubG9hZGVyIGltcG9y
dCBUZXN0RG93bmxvYWRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisK
KworZGVmIGNyZWF0ZV9hcmd1bWVudF9wYXJzZXIoKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5B
cmd1bWVudFBhcnNlcigpCisKKyAgICBmb3Igb3B0IGluIHBsYXRmb3JtX29wdGlvbnModXNlX2ds
b2JzPUZhbHNlKToKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudChvcHQuZ2V0X29wdF9zdHJp
bmcoKSwgYWN0aW9uPW9wdC5hY3Rpb24sIGRlc3Q9b3B0LmRlc3QsIGNvbnN0PWdldGF0dHIob3B0
LCAnY29uc3QnKSwgaGVscD1nZXRhdHRyKG9wdCwgJ2hlbHAnKSkKKyAgICBwYXJzZXIuYWRkX2Fy
Z3VtZW50KCctLWR1bXAtcmVuZGVyLXRyZWUnLCAnLTEnLCBkZXN0PSd3ZWJraXRfdGVzdF9ydW5u
ZXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgZGVmYXVsdD1UcnVlLAorICAgICAgICBoZWxwPSdT
ZXQgV2ViS2l0IGFyY2hpdGVjdHVyZSBXZWJLaXQxIG9yIFdlYktpdDIgKGRlZmF1bHQgV0syKS4n
KQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZWJ1ZycsIGRlc3Q9J2NvbmZpZ3VyYXRp
b24nLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVmYXVsdD0nUmVsZWFz
ZScsCisgICAgICAgIGhlbHA9J1VzZSAiRGVidWciIGNvbmZpZ3VyYXRpb24uIERlZmF1bHQgaXMg
IlJlbGVhc2UiJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsIGRlc3Q9J3F1aWV0Jywg
YWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nUHJpbnQg
bWluaW1hbCBsb2cuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsIGRlc3Q9J3ZlcmJv
c2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSdQ
cmludCBtYXhpbWFsIGxvZy4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdGVz
dC1wYXRoJywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSd0ZXN0X3BhdGhzJywgZGVmYXVsdD1bXSwK
KyAgICAgICAgaGVscD0nSW1wb3J0IGFuZCBydW4gb25seSB0ZXN0cyBpbiB0aGUgc3VwcGxpZWQg
c3ViZGlyZWN0b3J5IG9mIHRoZSB3M2NfdGVzdF9kaXJlY3RvcnkuIENhbiBiZSBzdXBwbGllZCBt
dWx0aXBsZSB0aW1lcyB0byBnaXZlIG11bHRpcGxlIHBhdGhzJykKKyAgICBwYXJzZXIuYWRkX2Fy
Z3VtZW50KCctcycsICctLXNraXAtcmVmcmVzaCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZWZh
dWx0PVRydWUsIGRlc3Q9J3JlZnJlc2gnLAorICAgICAgICBoZWxwPSdEaXNhYmxlIHJlZnJlc2gg
b2YgdGVzdHMgKGdpdCBjaGVja291dCAgKyBpbXBvcnQpLiBCeSBkZWZhdWx0LCB0ZXN0cyBhcmUg
cmVmcmVzaGVkLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby1mZXRjaCcsIGFjdGlv
bj0nc3RvcmVfZmFsc2UnLCBkZXN0PSdmZXRjaCcsIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgaGVs
cD0nRG8gbm90IGZldGNoIHRoZSBDU1MvV1BUIHJlcG9zaXRvcmllcy4gQnkgZGVmYXVsdCwgcmVw
b3NpdG9yaWVzIGFyZSBmZXRjaGVkLicpCisKKyAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3Mg
Q29uZm9ybWFuY2VDaGVja2VyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9vcHRpb25zID0g
b3B0aW9ucworICAgICAgICBzZWxmLl9jb25mb3JtYW5jZV9yZXN1bHRzID0gTm9uZQorCisgICAg
ICAgIHNlbGYuV1BUX1RFU1RTVUlURSA9ICd3ZWItcGxhdGZvcm0tdGVzdHMnCisgICAgICAgIHNl
bGYubGF5b3V0X3czY19kaXJlY3RvcnkgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oJ2ltcG9ydGVk
JywgJ3czYycpCisKKyAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHNlbGYuX3BvcnQu
dzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCkKKyAgICAgICAgc2VsZi5sYXlvdXRf
dGVzdHNfcmVzdWx0X2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3Vs
dHNfZGlyZWN0b3J5LCAnbGF5b3V0LXRlc3QtcmVzdWx0cycpCisgICAgICAgIHNlbGYuaW1wb3J0
ZWRfdGVzdHNfZGlyZWN0b3J5ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0c19k
aXJlY3RvcnksICdpbXBvcnRlZC10ZXN0cycpCisgICAgICAgIHNlbGYucnVubmVkX3Rlc3RzX2Rp
cmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCAn
cnVubmVkLXRlc3RzJykKKworICAgICAgICBzZWxmLmluaXRfdGVzdF9pbXBvcnRlcigpCisKKyAg
ICBkZWYgX3ByaW50X3J3dF9vdXRwdXRfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90
IHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgn
WycpOgorICAgICAgICAgICAgICAgIHRva2VucyA9IGxpbmUuc3BsaXQoJyAnKQorICAgICAgICAg
ICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJyArIHRva2Vuc1swXSArICcgJyArIHRva2Vuc1sx
XS5yZXBsYWNlKHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgJycpWzE6XSArICcgJykKKyAg
ICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIGVsaWYgbGluZSA9
PSAnJzoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGxpbmUpCisKKyAgICBkZWYgcnVuX3Rl
c3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgcnVuX3dlYmtpdF9hcmdzID0gW3NlbGYuX3BvcnQu
cGF0aF90b19zY3JpcHQoJ3J1bi13ZWJraXQtdGVzdHMnKSwgJy0tbm8tcmV0cnktZmFpbHVyZXMn
LCAnLS1uby1zaG93LXJlc3VsdHMnLCAnLS1mdWxsLXJlc3VsdHMtaHRtbCddCisKKyAgICAgICAg
dGVzdF9saXN0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucnVubmVkX3Rl
c3RzX2RpcmVjdG9yeSwgJ3Rlc3RfbGlzdC50eHQnKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVt
LndyaXRlX3RleHRfZmlsZSh0ZXN0X2xpc3RfZmlsZW5hbWUsICdcbicuam9pbih0ZXN0cykpCisg
ICAgICAgIHJ1bl93ZWJraXRfYXJncy5hcHBlbmQoJy0tdGVzdC1saXN0PScgKyB0ZXN0X2xpc3Rf
ZmlsZW5hbWUpCisKKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5sYXlv
dXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVt
LnJtdHJlZShzZWxmLmxheW91dF90ZXN0c19yZXN1bHRfZGlyZWN0b3J5KQorICAgICAgICBydW5f
d2Via2l0X2FyZ3MuYXBwZW5kKCctLXJlc3VsdHMtZGlyZWN0b3J5PScgKyBzZWxmLmxheW91dF90
ZXN0c19yZXN1bHRfZGlyZWN0b3J5KQorCisgICAgICAgIHJ1bl93ZWJraXRfYXJncy5hcHBlbmQo
Jy0td3B0c2VydmVyLWRvYy1yb290PScgKyBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5ydW5u
ZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLldQVF9URVNUU1VJVEUpKQorCisgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMuY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgIHJ1bl93ZWJraXRfYXJncy5h
cHBlbmQoJy0tdGFyZ2V0PScgKyBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24pCisgICAgICAg
IGlmIHNlbGYuX29wdGlvbnMucGxhdGZvcm06CisgICAgICAgICAgICBydW5fd2Via2l0X2FyZ3Mu
YXBwZW5kKCctLXBsYXRmb3JtPScgKyBzZWxmLl9vcHRpb25zLnBsYXRmb3JtKQorICAgICAgICBp
ZiBub3Qgc2VsZi5fb3B0aW9ucy53ZWJraXRfdGVzdF9ydW5uZXI6CisgICAgICAgICAgICBydW5f
d2Via2l0X2FyZ3MuYXBwZW5kKCctMScpCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnZl
cmJvc2U6CisgICAgICAgICAgICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctcScpCisKKyAgICAg
ICAgcHJvY2VzcyA9IEV4ZWN1dGl2ZSgpLnBvcGVuKHJ1bl93ZWJraXRfYXJncywgc3Rkb3V0PUV4
ZWN1dGl2ZS5QSVBFLCBzdGRlcnI9RXhlY3V0aXZlLlNURE9VVCkKKyAgICAgICAgd2hpbGUgVHJ1
ZToKKyAgICAgICAgICAgIGxpbmUgPSBwcm9jZXNzLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAg
ICAgICBzZWxmLl9wcmludF9yd3Rfb3V0cHV0X2xpbmUobGluZSkKKyAgICAgICAgICAgIGlmIGxp
bmUgPT0gJyc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJvY2Vzcy53YWl0KCkK
KworICAgIGRlZiBpbml0X3Rlc3RfaW1wb3J0ZXIoc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJy1k
Jywgc2VsZi5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksICctLWlnbm9yZS1leHBlY3RhdGlvbnMn
XQorCisgICAgICAgIGZvciB0ZXN0X3BhdGggaW4gc2VsZi5fb3B0aW9ucy50ZXN0X3BhdGhzOgor
ICAgICAgICAgICAgYXJncy5hcHBlbmQoJy10JykKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHRl
c3RfcGF0aCkKKworICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5mZXRjaDoKKyAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKCctLW5vLWZldGNoJykKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LnZlcmJvc2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLXYnKQorICAgICAgICBlbGlmIHNl
bGYuX29wdGlvbnMucXVpZXQ6CisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignd2Via2l0
cHkudzNjLnRlc3RfaW1wb3J0ZXInKS5zZXRMZXZlbChsb2dnaW5nLldBUk4pCisgICAgICAgICAg
ICBsb2dnaW5nLmdldExvZ2dlcignd2Via2l0cHkudzNjLnRlc3RfY29udmVydGVyJykuc2V0TGV2
ZWwobG9nZ2luZy5XQVJOKQorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ3dlYmtpdHB5
LnczYy50ZXN0X2Rvd25sb2FkZXInKS5zZXRMZXZlbChsb2dnaW5nLldBUk4pCisKKyAgICAgICAg
b3B0aW9ucywgYXJncyA9IHBhcnNlX2ltcG9ydGVyX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi50
ZXN0X2ltcG9ydGVyID0gVGVzdEltcG9ydGVyKHNlbGYuX3BvcnQuaG9zdCwgTm9uZSwgb3B0aW9u
cykKKworICAgIGRlZiB0ZXN0X3N1aXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29w
dGlvbnMudGVzdF9wYXRocyBpZiBzZWxmLl9vcHRpb25zLnRlc3RfcGF0aHMgZWxzZSBzZWxmLnRl
c3RfaW1wb3J0ZXIudGVzdF9kb3dubG9hZGVyKCkuYWxsX3Rlc3RfcGF0aHMoKQorCisgICAgZGVm
IGNoZWNrX2NvbmZvcm1hbmNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJlZnJl
c2ggaXMgVHJ1ZToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnSW1wb3J0aW5nIHRlc3RzLi4uJykK
KyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucm10cmVlKHNlbGYuaW1wb3J0ZWRfdGVzdHNf
ZGlyZWN0b3J5KQorICAgICAgICAgICAgc2VsZi50ZXN0X2ltcG9ydGVyLmRvX2ltcG9ydCgpCisg
ICAgICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgaW5zdGFsbCBXUFQgbW9kdWxlcyBpbiBpbXBv
cnRlZCB0ZXN0cyBkaXJlY3RvcnkgdG8gbm90IHJlaW5zdGFsbCB0aGVtIGZvciBlYWNoIHJ1bi4K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgdGVzdCBpbXBv
cnQuLi4nKQorCisgICAgICAgICMgUmVnZW5lcmF0ZSBydW5uZWRfdGVzdF9kaXJlY3RvcnkgdG8g
c3RhcnQgaW4gYSBjbGVhbiBzdGF0ZSAobm8gLWV4cGVjdGVkLnR4dCBmaWxlcyBpbiBwYXJ0aWN1
bGFyKS4KKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc2VsZi5ydW5uZWRfdGVzdHNf
ZGlyZWN0b3J5KQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHl0cmVlKHNlbGYuaW1wb3J0
ZWRfdGVzdHNfZGlyZWN0b3J5LCBzZWxmLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnkpCisKKyAgICAg
ICAgX2xvZy5pbmZvKCdSdW5uaW5nIHRlc3RzLi4uJykKKyAgICAgICAgdGVzdHMgPSBzZWxmLl9w
b3J0LnRlc3RzKFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5ydW5uZWRfdGVzdHNfZGlyZWN0
b3J5LCB0ZXN0X3N1aXRlKSBmb3IgdGVzdF9zdWl0ZSBpbiBzZWxmLnRlc3Rfc3VpdGVzKCldKQor
ICAgICAgICBzZWxmLnJ1bl90ZXN0cyh0ZXN0cykKKworICAgICAgICBfbG9nLmluZm8oJ1BhcnNp
bmcgdGVzdCByZXN1bHRzLi4uJykKKyAgICAgICAganNvbl9maWxlX3BhdGggPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfcmVzdWx0X2RpcmVjdG9yeSwgJ2Z1bGxfcmVz
dWx0cy5qc29uJykKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGpzb25f
ZmlsZV9wYXRoKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCByZWFkIHJ1bi13ZWJr
aXQtdGVzdHMgcmVzdWx0IGZpbGUgIiVzIi4gcnVuLXdlYmtpdC10ZXN0cyBtYXkgaGF2ZSBydW4g
aW50byBzb21lIGVycm9ycy4gVXNlIC12IG9wdGlvblxuQWJvcnRpbmcuLi4nICUganNvbl9maWxl
X3BhdGgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fY29uZm9ybWFu
Y2VfcmVzdWx0cyA9IFRlc3RSZXN1bHRzQ29uZm9ybWFuY2VQYXJzZXIoc2VsZi5fcG9ydCwgc2Vs
Zi5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5KS5jb21wdXRlX2NvbmZvcm1hbmNlX3Jlc3VsdHModGVz
dHMsIGpzb25fZmlsZV9wYXRoKQorCisgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGluZyBjb25m
b3JtYW5jZSByZXN1bHRzLi4uJykKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtl
X2RpcmVjdG9yeShzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBzZWxmLndyaXRlX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMoKQorCisgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGluZyBleHBl
Y3RhdGlvbiB1cGRhdGVzLi4uJykKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0
X2ZpbGUoc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnksICdUZXN0
RXhwZWN0YXRpb25zJyksICdcbicuam9pbihzZWxmLnRlc3RfZXhwZWN0YXRpb25fdXBkYXRlcygp
KSkKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnksICdJbXBvcnRFeHBlY3RhdGlvbnMnKSwg
J1xuJy5qb2luKHNlbGYuaW1wb3J0X2V4cGVjdGF0aW9uX3VwZGF0ZXMoKSkpCisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgcHJpbnRfc3VtbWFyeV90b19jb25zb2xlKHNlbGYpOgorICAg
ICAgICBudW1fcGFzcyA9IG51bV9wYXJ0aWFsID0gbnVtX2ZhaWwgPSBudW1fZXJyb3IgPSAwCisg
ICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZVsnc3RhdHVzJ10KKyAgICAgICAgICAg
IGlmIHJlc3VsdCA9PSAnUEFTUyc6CisgICAgICAgICAgICAgICAgbnVtX3Bhc3MgKz0gMQorICAg
ICAgICAgICAgZWxpZiByZXN1bHQgPT0gJ1BBUlRJQUwnOgorICAgICAgICAgICAgICAgIG51bV9w
YXJ0aWFsICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09ICdGQUlMJzoKKyAgICAgICAg
ICAgICAgICBudW1fZmFpbCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IG51bV9lcnJvciArPSAxCisgICAgICAgIF9sb2cuaW5mbygnUnVuICcgKyBzdHIobnVtX3Bhc3Mg
KyBudW1fZmFpbCArIG51bV9wYXJ0aWFsICsgbnVtX2Vycm9yKSArICcgdGVzdHMnKQorICAgICAg
ICBfbG9nLmluZm8oJ1Bhc3M6ICcgKyBzdHIobnVtX3Bhc3MpKQorICAgICAgICBfbG9nLmluZm8o
J1BhcnRpYWw6ICcgKyBzdHIobnVtX3BhcnRpYWwpKQorICAgICAgICBfbG9nLmluZm8oJ0ZhaWw6
ICcgKyBzdHIobnVtX2ZhaWwpKQorICAgICAgICBfbG9nLmluZm8oJ0Vycm9yOiAnICsgc3RyKG51
bV9lcnJvcikpCisKKyAgICBkZWYgaW1wb3J0X2V4cGVjdGF0aW9uX3VwZGF0ZXMoc2VsZik6Cisg
ICAgICAgIGltcG9ydF9leHBlY3RhdGlvbnMgPSBbXQorICAgICAgICBmb3IgdGVzdF9zdWl0ZSBp
biBzZWxmLnRlc3Rfc3VpdGVzKCk6CisgICAgICAgICAgICBpbXBvcnRfZXhwZWN0YXRpb25zLmFw
cGVuZCgnIyAlcyBbIFBhc3MgXScgJSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRf
dzNjX2RpcmVjdG9yeSwgdGVzdF9zdWl0ZSkpCisKKyAgICAgICAgaW1wb3J0X2V4cGVjdGF0aW9u
cy5hcHBlbmQoJycpCisKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fY29uZm9ybWFuY2VfcmVz
dWx0cy5rZXlzKCk6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9jb25mb3JtYW5jZV9yZXN1
bHRzW3Rlc3RdWydzdGF0dXMnXQorICAgICAgICAgICAgaWYgbm90KHN0YXR1cyA9PSAnUEFTUycg
b3Igc3RhdHVzID09ICdQQVJUSUFMJyk6CisgICAgICAgICAgICAgICAgaW1wb3J0X2V4cGVjdGF0
aW9ucy5hcHBlbmQoJyVzIFsgU2tpcCBdJyAlIHRlc3QpCisgICAgICAgIHJldHVybiBpbXBvcnRf
ZXhwZWN0YXRpb25zCisKKyAgICBkZWYgdGVzdF9leHBlY3RhdGlvbl91cGRhdGVzKHNlbGYpOgor
ICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucyA9IFsnIyBXM0MgdGVzdCBpbmZyYXN0cnVjdHVyZSBm
b2xkZXJzJ10KKyAgICAgICAgZm9yIHRlc3RfcmVwb3NpdG9yeSBpbiBzZWxmLnRlc3RfaW1wb3J0
ZXIudGVzdF9kb3dubG9hZGVyKCkudGVzdF9yZXBvc2l0b3JpZXM6CisgICAgICAgICAgICBmb3Ig
cGF0aCBpbiB0ZXN0X3JlcG9zaXRvcnlbJ3BhdGhzX3RvX2ltcG9ydCddOgorICAgICAgICAgICAg
ICAgIGZpbGVfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJ1bm5lZF90ZXN0c19k
aXJlY3RvcnksIHBhdGgpCisgICAgICAgICAgICAgICAgaWYgKHNlbGYuX2ZpbGVzeXN0ZW0uaXNk
aXIoZmlsZV9wYXRoKSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLmFw
cGVuZCgnJXMgWyBTa2lwIF0nICUgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3cz
Y19kaXJlY3RvcnksIHBhdGgpKQorCisgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLmFwcGVuZCgn
IyBQYXJ0aWFsbHkgcGFzc2luZyB0ZXN0cycpCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2Nv
bmZvcm1hbmNlX3Jlc3VsdHMua2V5cygpOgorICAgICAgICAgICAgaWYgc2VsZi5fY29uZm9ybWFu
Y2VfcmVzdWx0c1t0ZXN0XVsnc3RhdHVzJ10gPT0gJ1BBUlRJQUwnOgorICAgICAgICAgICAgICAg
IHRlc3RfZXhwZWN0YXRpb25zLmFwcGVuZCgnJXMgWyBQYXNzIF0nICUgc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYubGF5b3V0X3czY19kaXJlY3RvcnksIHRlc3QpKQorICAgICAgICByZXR1cm4g
dGVzdF9leHBlY3RhdGlvbnMKKworICAgIGRlZiB3cml0ZV9jb25mb3JtYW5jZV9yZXN1bHRzKHNl
bGYpOgorICAgICAgICBfSlNPTl9QUkVGSVggPSAnQUREX0NPTkZPUk1BTkNFX1JFU1VMVFMoJwor
ICAgICAgICBfSlNPTl9TVUZGSVggPSAnKTsnCisKKyAgICAgICAgdGVzdF9ydW5faW5mbyA9IHt9
CisgICAgICAgIHRlc3RfcnVuX2luZm9bJ3BvcnRfbmFtZSddID0gc2VsZi5fcG9ydC5wb3J0X25h
bWUKKyAgICAgICAgdGVzdF9ydW5faW5mb1sndGVzdF9yZXBvc2l0b3JpZXMnXSA9IHNlbGYudGVz
dF9pbXBvcnRlci50ZXN0X2Rvd25sb2FkZXIoKS50ZXN0X3JlcG9zaXRvcmllcworICAgICAgICB0
ZXN0X3J1bl9pbmZvWydyZXN1bHRzX2RpcmVjdG9yeSddID0gc2VsZi5fZmlsZXN5c3RlbS5yZWxw
YXRoKHNlbGYubGF5b3V0X3Rlc3RzX3Jlc3VsdF9kaXJlY3RvcnksIHNlbGYucmVzdWx0c19kaXJl
Y3RvcnkpCisgICAgICAgIHRlc3RfcnVuX2luZm9bJ3Rlc3RzX2RpcmVjdG9yeSddID0gc2VsZi5f
ZmlsZXN5c3RlbS5yZWxwYXRoKHNlbGYucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgc2VsZi5yZXN1
bHRzX2RpcmVjdG9yeSkKKworICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgcmVzdWx0c1sn
Y29uZm9ybWFuY2VfcmVzdWx0cyddID0gc2VsZi5fY29uZm9ybWFuY2VfcmVzdWx0cworICAgICAg
ICByZXN1bHRzLnVwZGF0ZSh0ZXN0X3J1bl9pbmZvKQorCisgICAgICAgIGpzb25fc3RyaW5nID0g
anNvbi5kdW1wcyhyZXN1bHRzLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9
KCcsJywgJzonKSkKKyAgICAgICAganNvbl9zdHJpbmcgPSBfSlNPTl9QUkVGSVggKyBqc29uX3N0
cmluZyArIF9KU09OX1NVRkZJWAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZShzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwgJ3czY19j
b25mb3JtYW5jZV9yZXN1bHRzLmpzb24nKSwganNvbl9zdHJpbmcpCisKKyAgICAgICAgcmVzdWx0
c19maWxlID0gc2VsZi5fcG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRlc3RzJywg
J2ltcG9ydGVkJywgJ3czYycsICdyZXNvdXJjZXMnLCAndzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMu
aHRtbCcpCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhyZXN1bHRzX2Zp
bGUpOgorICAgICAgICAgICAgX2xvZy53YXJuaW5nKCd3M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5o
dG1sIHRlbXBsYXRlIGZpbGUgY2Fubm90IGJlIGZvdW5kIGFuZCBjb3BpZWQgdG8gY29uZm9ybWFu
Y2UgcmVzdWx0IGRpcmVjdG9yeScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbS5jb3B5ZmlsZShyZXN1bHRzX2ZpbGUsIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihz
ZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCAndzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHMuaHRtbCcpKQor
CisKK2NsYXNzIFRlc3RSZXN1bHRzQ29uZm9ybWFuY2VQYXJzZXIob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCwgYmFzZV9kaXJlY3RvcnkpOgorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0K
KyAgICAgICAgc2VsZi5fYmFzZV9kaXJlY3RvcnkgPSBiYXNlX2RpcmVjdG9yeQorCisgICAgZGVm
IF9nZXRfdGVzdF9yZXN1bHRzKHNlbGYsIHRlc3RzLCB0ZXN0X2RpY3QsIHBhdGgpOgorICAgICAg
ICBmb3Iga2V5IGluIHRlc3RfZGljdC5rZXlzKCk6CisgICAgICAgICAgICBfcGF0aCA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihwYXRoLCBrZXkpCisgICAgICAgICAgICBfcG90ZW50aWFsX3Rlc3Qg
PSB0ZXN0X2RpY3Rba2V5XQorICAgICAgICAgICAgIyBJcyBpdCBhIHRlc3QgZW50cnkgb3IgYSBz
dWItZGlyZWN0b3J5CisgICAgICAgICAgICBpZiAncmVwb3J0JyBpbiBfcG90ZW50aWFsX3Rlc3Q6
CisgICAgICAgICAgICAgICAgIyBTdG9yZSB0aGUgdGVzdAorICAgICAgICAgICAgICAgIHRlc3Rz
W19wYXRoXSA9IF9wb3RlbnRpYWxfdGVzdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9nZXRfdGVzdF9yZXN1bHRzKHRlc3RzLCBfcG90ZW50aWFsX3Rlc3QsIF9wYXRo
KQorCisgICAgZGVmIF9qc190ZXN0X2NvbmZvcm1hbmNlKHNlbGYsIGV4cGVjdGVkX3RleHQpOgor
ICAgICAgICAjIFRlc3QgaXMgc2FpZCB0byBQQVNTIGlmIGF0IGxlYXN0IG9uZSBsaW5lIGlzIFBB
U1MgYW5kIG5vIGxpbmUgaXMgRkFJTAorICAgICAgICBoYXNGYWlsID0gRmFsc2UKKyAgICAgICAg
aGFzUGFzcyA9IEZhbHNlCisgICAgICAgIGZvciBsaW5lIGluIGV4cGVjdGVkX3RleHQuc3BsaXRs
aW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQVNTJyk6CisgICAgICAg
ICAgICAgICAgaGFzUGFzcyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRo
KCdGQUlMJyk6CisgICAgICAgICAgICAgICAgaGFzRmFpbCA9IFRydWUKKyAgICAgICAgaWYgaGFz
UGFzczoKKyAgICAgICAgICAgIHJldHVybiAnUEFTUycgaWYgbm90IGhhc0ZhaWwgZWxzZSAnUEFS
VElBTCcKKyAgICAgICAgaWYgaGFzRmFpbDoKKyAgICAgICAgICAgIHJldHVybiAnRkFJTCcKKyAg
ICAgICAgcmV0dXJuICdFUlJPUicKKworICAgIGRlZiBfY29uZm9ybWFuY2Vfc3RhdHVzKHNlbGYs
IHRlc3RfbmFtZSwgdGVzdF9yZXN1bHRzKToKKyAgICAgICAgaWYgbm90IHRlc3RfbmFtZSBpbiB0
ZXN0X3Jlc3VsdHM6CisgICAgICAgICAgICByZXR1cm4geyd0eXBlJzogJ3JlZnRlc3QnLCAnc3Rh
dHVzJzogJ1BBU1MnfQorCisgICAgICAgIHRlc3RfcmVzdWx0ID0gdGVzdF9yZXN1bHRzW3Rlc3Rf
bmFtZV0KKyAgICAgICAgdGVzdF90eXBlID0gJ2pzdGVzdCcgaWYgKCdpc19taXNzaW5nX3RleHQn
IGluIHRlc3RfcmVzdWx0IGFuZCB0ZXN0X3Jlc3VsdFsnaXNfbWlzc2luZ190ZXh0J10pIGVsc2Ug
J3JlZnRlc3QnCisKKyAgICAgICAgcmVhc29uID0gdGVzdF9yZXN1bHRbJ2FjdHVhbCddCisgICAg
ICAgIGlmIHJlYXNvbiA9PSAnQ1JBU0gnIG9yIHJlYXNvbiA9PSAnVElNRU9VVCc6CisgICAgICAg
ICAgICByZXR1cm4geyd0eXBlJzogdGVzdF90eXBlLCAnc3RhdHVzJzogcmVhc29ufQorCisgICAg
ICAgIHJlcG9ydCA9IHRlc3RfcmVzdWx0WydyZXBvcnQnXQorICAgICAgICBpZiByZXBvcnQgPT0g
J01JU1NJTkcnOgorICAgICAgICAgICAgdGV4dCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dCh0
ZXN0X25hbWUpCisgICAgICAgICAgICBpZiBub3QodGV4dCBpcyBOb25lIG9yIGxlbih0ZXh0KSA9
PSAwKToKKyAgICAgICAgICAgICAgICByZXR1cm4geyd0eXBlJzogdGVzdF90eXBlLCAnc3RhdHVz
Jzogc2VsZi5fanNfdGVzdF9jb25mb3JtYW5jZSh0ZXh0KX0KKyAgICAgICAgZWxpZiByZXBvcnQg
PT0gJ1JFR1JFU1NJT04nOgorICAgICAgICAgICAgcmV0dXJuIHsndHlwZSc6IHRlc3RfdHlwZSwg
J3N0YXR1cyc6ICdGQUlMJ30KKworICAgICAgICByZXR1cm4geyd0eXBlJzogdGVzdF90eXBlLCAn
c3RhdHVzJzogJ0VSUk9SJ30KKworICAgIGRlZiB3M2NfdGVzdF9uYW1lKHNlbGYsIHRlc3QpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKHRlc3QsIHNlbGYuX2Jhc2Vf
ZGlyZWN0b3J5KQorCisgICAgZGVmIGNvbXB1dGVfY29uZm9ybWFuY2VfcmVzdWx0cyhzZWxmLCB0
ZXN0cywganNvbl9yZXN1bHRzX2ZpbGVwYXRoKToKKyAgICAgICAgdGVzdF9yZXN1bHRzID0ge30K
KyAgICAgICAgcmVzdWx0c19qc29uID0ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5sb2FkX2pzb24o
c2VsZi5fZmlsZXN5c3RlbSwganNvbl9yZXN1bHRzX2ZpbGVwYXRoKQorICAgICAgICBzZWxmLl9n
ZXRfdGVzdF9yZXN1bHRzKHRlc3RfcmVzdWx0cywgcmVzdWx0c19qc29uWyd0ZXN0cyddLCBzZWxm
Ll9maWxlc3lzdGVtLnNlcCBpZiBzZWxmLl9maWxlc3lzdGVtLmlzYWJzKHNlbGYuX2Jhc2VfZGly
ZWN0b3J5KSBlbHNlICcnKQorCisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICBmb3IgdGVz
dF9uYW1lIGluIHRlc3RzOgorICAgICAgICAgICAgcmVzdWx0c1tzZWxmLnczY190ZXN0X25hbWUo
dGVzdF9uYW1lKV0gPSBzZWxmLl9jb25mb3JtYW5jZV9zdGF0dXModGVzdF9uYW1lLCB0ZXN0X3Jl
c3VsdHMpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5n
KCk6CisgICAgY2xhc3MgTG9nSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgICAg
ICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxu
byA+IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVj
b3JkLmxldmVsbmFtZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZWNvcmQuZ2V0TWVzc2FnZSgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisg
ICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxl
cigpCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhh
bmRsZXIoaGFuZGxlcikKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBtYWluKGFyZ3YsIHN0
ZG91dCwgc3RkZXJyKToKKyAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgaG9zdCA9IEhvc3Qo
KQorICAgIHBhcnNlciA9IGNyZWF0ZV9hcmd1bWVudF9wYXJzZXIoKQorICAgIG9wdGlvbnMsIGFy
Z3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQorICAgICMgRklYTUU6IFdlIHNob3Vs
ZCBwYXNzIGFsbCBhcmdwYXJzZSBvcHRpb25zIHRvIHRoZSBwb3J0IGZhY3RvcnkuCisgICAgcG9y
dCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRwYXJzZS5WYWx1
ZXMoeydjb25maWd1cmF0aW9uJzogb3B0aW9ucy5jb25maWd1cmF0aW9uLCAnd2Via2l0X3Rlc3Rf
cnVubmVyJzogb3B0aW9ucy53ZWJraXRfdGVzdF9ydW5uZXJ9KSkKKworICAgIHJ1bm5lciA9IENv
bmZvcm1hbmNlQ2hlY2tlcihwb3J0LCBvcHRpb25zKQorICAgIGlmIHJ1bm5lci5jaGVja19jb25m
b3JtYW5jZSgpOgorICAgICAgICBydW5uZXIucHJpbnRfc3VtbWFyeV90b19jb25zb2xlKCkKKyAg
ICAgICAgX2xvZy5pbmZvKCJSZXN1bHRzIGV4cG9ydGVkIGluICciICsgcnVubmVyLnJlc3VsdHNf
ZGlyZWN0b3J5ICsgIiciKQorCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgc3lz
LmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvY29uZm9ybWFuY2VfY2hlY2tlcl91bml0
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL2NvbmZvcm1hbmNlX2NoZWNrZXJf
dW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTgxZTBiYTE2NjM3MGQ0ZmEyYjgzNWU3MWJkYmIxOWJl
OGQ3MzVjMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL2Nv
bmZvcm1hbmNlX2NoZWNrZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMTggQEAKKyMgQ29weXJp
Z2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
Q0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnczYy5jb25mb3JtYW5jZV9jaGVj
a2VyIGltcG9ydCBUZXN0UmVzdWx0c0NvbmZvcm1hbmNlUGFyc2VyLCBDb25mb3JtYW5jZUNoZWNr
ZXIsIGNyZWF0ZV9hcmd1bWVudF9wYXJzZXIKK2Zyb20gd2Via2l0cHkucG9ydC5iYXNlIGltcG9y
dCBQb3J0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9y
dCBNb2NrRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBN
b2NrSG9zdAorCisKK2NsYXNzIENvbmZvcm1hbmNDaGVja2VyVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmJhc2VfZGlyID0gJy90bXAv
Y29uZm9ybWFuY2UtZGlyZWN0b3J5L3czYy1jb25mb3JtYW5jZS1yZXN1bHRzL3J1bm5lZC10ZXN0
cycKKyAgICAgICAgc2VsZi5ob3N0ID0gTW9ja0hvc3QoKQorICAgICAgICBzZWxmLmZzID0gc2Vs
Zi5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5wb3J0ID0gUG9ydChzZWxmLmhvc3QsICdN
b2NrUG9ydCcpCisKKyAgICAgICAgc2VsZi53M2NfdGVzdHMgPSBbJ3Rlc3QxL3Bhc3MuaHRtbCcs
ICdtaXNzaW5nLmh0bWwnLCAncGFzcy5odG1sJywgJ2ZhaWwuaHRtbCcsICdwYXJ0aWFsLmh0bWwn
LCAnY3Jhc2guaHRtbCcsICd0aW1lb3V0Lmh0bWwnLCAncmVmX3Bhc3MuaHRtbCcsICdyZWZfZmFp
bC5odG1sJywgJ3JlZl9jcmFzaC5odG1sJywgJ3JlZl90aW1lb3V0Lmh0bWwnXQorICAgICAgICBz
ZWxmLnJ1bm5lZF90ZXN0cyA9IFtzZWxmLmZzLmpvaW4oc2VsZi5iYXNlX2RpciwgdGVzdCkgZm9y
IHRlc3QgaW4gc2VsZi53M2NfdGVzdHNdCisgICAgICAgIHNlbGYuanNvbl9maWxlX3BhdGggPSBz
ZWxmLmZzLmpvaW4oc2VsZi5iYXNlX2RpciwgJ3Jlc3VsdHNfZGlyJywgJ3Jlc3VsdHMuanNvbicp
CisgICAgICAgIHNlbGYuZnMud3JpdGVfdGV4dF9maWxlKHNlbGYuanNvbl9maWxlX3BhdGgsCisg
ICAgICAgICAgICAgICAgJ0FERF9SRVNVTFRTKHsidGVzdHMiOnsiIjp7InRtcCI6eyJjb25mb3Jt
YW5jZS1kaXJlY3RvcnkiOnsidzNjLWNvbmZvcm1hbmNlLXJlc3VsdHMiOnsicnVubmVkLXRlc3Rz
Ijp7InRlc3QxIjp7InBhc3MuaHRtbCI6eyJyZXBvcnQiOiJNSVNTSU5HIiwiZXhwZWN0ZWQiOiJQ
QVNTIiwiaXNfbWlzc2luZ190ZXh0Ijp0cnVlLCJhY3R1YWwiOiJNSVNTSU5HIn19LCJwYXNzLmh0
bWwiOnsicmVwb3J0IjoiTUlTU0lORyIsImV4cGVjdGVkIjoiUEFTUyIsImlzX21pc3NpbmdfdGV4
dCI6dHJ1ZSwiYWN0dWFsIjoiTUlTU0lORyJ9LCJmYWlsLmh0bWwiOnsicmVwb3J0IjoiTUlTU0lO
RyIsImV4cGVjdGVkIjoiUEFTUyIsImlzX21pc3NpbmdfdGV4dCI6dHJ1ZSwiYWN0dWFsIjoiTUlT
U0lORyJ9LCJwYXJ0aWFsLmh0bWwiOnsicmVwb3J0IjoiTUlTU0lORyIsImV4cGVjdGVkIjoiUEFT
UyIsImlzX21pc3NpbmdfdGV4dCI6dHJ1ZSwiYWN0dWFsIjoiTUlTU0lORyJ9LCJjcmFzaC5odG1s
Ijp7InJlcG9ydCI6Ik1JU1NJTkciLCJleHBlY3RlZCI6IlBBU1MiLCJpc19taXNzaW5nX3RleHQi
OnRydWUsImFjdHVhbCI6IkNSQVNIIn0sInRpbWVvdXQuaHRtbCI6eyJyZXBvcnQiOiJSRUdSRVNT
SU9OIiwiZXhwZWN0ZWQiOiJQQVNTIiwiaXNfbWlzc2luZ190ZXh0Ijp0cnVlLCJhY3R1YWwiOiJU
SU1FT1VUIn0sICJyZWZfZmFpbC5odG1sIjp7InJlcG9ydCI6IlJFR1JFU1NJT04iLCJleHBlY3Rl
ZCI6IlBBU1MiLCJhY3R1YWwiOiJJTUFHRSJ9LCAicmVmX2NyYXNoLmh0bWwiOnsicmVwb3J0Ijoi
UkVHUkVTU0lPTiIsImV4cGVjdGVkIjoiUEFTUyIsImFjdHVhbCI6IkNSQVNIIn0sICJyZWZfdGlt
ZW91dC5odG1sIjp7InJlcG9ydCI6IlJFR1JFU1NJT04iLCJleHBlY3RlZCI6IlBBU1MiLCJhY3R1
YWwiOiJUSU1FT1VUIn19fX19fX0sInNraXBwZWQiOjAsIm51bV9yZWdyZXNzaW9ucyI6MSwiaW50
ZXJydXB0ZWQiOmZhbHNlLCJudW1fbWlzc2luZyI6NiwibGF5b3V0X3Rlc3RzX2RpciI6IkxheW91
dFRlc3RzIiwidmVyc2lvbiI6MywibnVtX3Bhc3NlcyI6MCwicGl4ZWxfdGVzdHNfZW5hYmxlZCI6
ZmFsc2UsImhhc19wcmV0dHlfcGF0Y2giOnRydWUsImZpeGFibGUiOjEwLCJudW1fZmxha3kiOjAs
InVzZXNfZXhwZWN0YXRpb25zX2ZpbGUiOnRydWV9KTsnKQorICAgICAgICBzZWxmLndyaXRlX2V4
cGVjdGVkX2ZpbGUoJ3Rlc3QxL3Bhc3MuaHRtbCcsICdQQVNTIHRoaXMgaXMgYSBwYXNzaW5nIHRl
c3RcbicpCisgICAgICAgIHNlbGYud3JpdGVfZXhwZWN0ZWRfZmlsZSgncGFzcy5odG1sJywgJ0NP
TlNPTEU6IHRoaXMgaXMgYSB3YXJuaW5nIGxpbmVcblBBU1MgdGhpcyBpcyBhIHBhc3NpbmcgdGVz
dFxuJykKKyAgICAgICAgc2VsZi53cml0ZV9leHBlY3RlZF9maWxlKCdmYWlsLmh0bWwnLCAnQ09O
U09MRTogdGhpcyBpcyBhIHdhcm5pbmcgbGluZVxuRkFJTCB0aGlzIGlzIGEgZmFpbGluZyB0ZXN0
XG4nKQorICAgICAgICBzZWxmLndyaXRlX2V4cGVjdGVkX2ZpbGUoJ3BhcnRpYWwuaHRtbCcsICdD
T05TT0xFOiB0aGlzIGlzIGEgd2FybmluZyBsaW5lXG5QQVNTIHRoaXMgaXMgYSBwYXNzaW5nIHRl
c3RcbkZBSUwgdGhpcyBpcyBhIGZhaWxpbmcgdGVzdFxuJykKKworICAgICAgICBzZWxmLnBhcnNl
ciA9IFRlc3RSZXN1bHRzQ29uZm9ybWFuY2VQYXJzZXIoc2VsZi5wb3J0LCBzZWxmLmJhc2VfZGly
KQorICAgICAgICBzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHMgPSBzZWxmLnBhcnNlci5jb21wdXRl
X2NvbmZvcm1hbmNlX3Jlc3VsdHMoc2VsZi5ydW5uZWRfdGVzdHMsIHNlbGYuanNvbl9maWxlX3Bh
dGgpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBjcmVhdGVfYXJndW1lbnRfcGFyc2VyKCkucGFy
c2Vfa25vd25fYXJncyhbJy10IC4nXSkKKyAgICAgICAgc2VsZi5jb25mb3JtYW5jZV9jaGVja2Vy
ID0gQ29uZm9ybWFuY2VDaGVja2VyKHNlbGYucG9ydCwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5j
b25mb3JtYW5jZV9jaGVja2VyLl9jb25mb3JtYW5jZV9yZXN1bHRzID0gc2VsZi5jb25mb3JtYW5j
ZV9yZXN1bHRzCisKKyAgICBkZWYgd3JpdGVfZXhwZWN0ZWRfZmlsZShzZWxmLCB0ZXN0LCByZXN1
bHQpOgorICAgICAgICBzZWxmLmZzLndyaXRlX3RleHRfZmlsZShzZWxmLnBvcnQuZXhwZWN0ZWRf
ZmlsZW5hbWUoc2VsZi5mcy5qb2luKHNlbGYuYmFzZV9kaXIsIHRlc3QpLCAnLnR4dCcpLCByZXN1
bHQpCisKKyAgICBkZWYgdGVzdF93M2NfbmFtZV9jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhzZWxmLnBhcnNlci53M2NfdGVzdF9uYW1lKHNlbGYucnVubmVkX3Rl
c3RzWzBdKSwgc2VsZi53M2NfdGVzdHNbMF0pCisKKyAgICBkZWYgdGVzdF9qc29uX3Jlc3VsdF9w
YXJzaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi5jb25mb3Jt
YW5jZV9yZXN1bHRzLmtleXMoKSwgc2VsZi53M2NfdGVzdHMpCisKKyAgICBkZWYgdGVzdF9taXNz
aW5nX3Rlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuY29uZm9ybWFu
Y2VfcmVzdWx0c1snbWlzc2luZy5odG1sJ11bJ3R5cGUnXSwgJ3JlZnRlc3QnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNbJ21pc3NpbmcuaHRtbCdd
WydzdGF0dXMnXSwgJ1BBU1MnKQorCisgICAgZGVmIHRlc3RfcmVmX3Rlc3RfdGltZW91dChzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWydy
ZWZfdGltZW91dC5odG1sJ11bJ3R5cGUnXSwgJ3JlZnRlc3QnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNbJ3JlZl90aW1lb3V0Lmh0bWwnXVsnc3Rh
dHVzJ10sICdUSU1FT1VUJykKKworICAgIGRlZiB0ZXN0X3JlZl90ZXN0X2NyYXNoKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNbJ3JlZl9j
cmFzaC5odG1sJ11bJ3R5cGUnXSwgJ3JlZnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLmNvbmZvcm1hbmNlX3Jlc3VsdHNbJ3JlZl9jcmFzaC5odG1sJ11bJ3N0YXR1cyddLCAn
Q1JBU0gnKQorCisgICAgZGVmIHRlc3RfcmVmX3Rlc3RfZmFpbChzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWydyZWZfZmFpbC5odG1sJ11b
J3R5cGUnXSwgJ3JlZnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmNvbmZv
cm1hbmNlX3Jlc3VsdHNbJ3JlZl9mYWlsLmh0bWwnXVsnc3RhdHVzJ10sICdGQUlMJykKKworICAg
IGRlZiB0ZXN0X2pzX3Rlc3RfcGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWydwYXNzLmh0bWwnXVsndHlwZSddLCAnanN0ZXN0JykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWydwYXNz
Lmh0bWwnXVsnc3RhdHVzJ10sICdQQVNTJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2Vs
Zi5jb25mb3JtYW5jZV9yZXN1bHRzWyd0ZXN0MS9wYXNzLmh0bWwnXVsndHlwZSddLCAnanN0ZXN0
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWyd0
ZXN0MS9wYXNzLmh0bWwnXVsnc3RhdHVzJ10sICdQQVNTJykKKworICAgIGRlZiB0ZXN0X2pzX3Rl
c3RfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5jb25mb3Jt
YW5jZV9yZXN1bHRzWydwYXJ0aWFsLmh0bWwnXVsndHlwZSddLCAnanN0ZXN0JykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWydwYXJ0aWFsLmh0bWwn
XVsnc3RhdHVzJ10sICdQQVJUSUFMJykKKworICAgIGRlZiB0ZXN0X2pzX3Rlc3RfZmFpbChzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWydm
YWlsLmh0bWwnXVsndHlwZSddLCAnanN0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5jb25mb3JtYW5jZV9yZXN1bHRzWydmYWlsLmh0bWwnXVsnc3RhdHVzJ10sICdGQUlMJykK
KworICAgIGRlZiB0ZXN0X2pzX3Rlc3RfY3Jhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0c1snY3Jhc2guaHRtbCddWyd0eXBlJ10sICdq
c3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmNvbmZvcm1hbmNlX3Jlc3Vs
dHNbJ2NyYXNoLmh0bWwnXVsnc3RhdHVzJ10sICdDUkFTSCcpCisKKyAgICBkZWYgdGVzdF9qc190
ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuY29uZm9y
bWFuY2VfcmVzdWx0c1sndGltZW91dC5odG1sJ11bJ3R5cGUnXSwgJ2pzdGVzdCcpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuY29uZm9ybWFuY2VfcmVzdWx0c1sndGltZW91dC5odG1s
J11bJ3N0YXR1cyddLCAnVElNRU9VVCcpCisKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwZWN0YXRp
b25zX3VwZGF0ZShzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gJ1xuJy5qb2luKHNlbGYu
Y29uZm9ybWFuY2VfY2hlY2tlci5pbXBvcnRfZXhwZWN0YXRpb25fdXBkYXRlcygpKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoJ3RpbWVvdXQuaHRtbCBbIFNraXAgXScgaW4gZXhwZWN0YXRpb25z
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2NyYXNoLmh0bWwgWyBTa2lwIF0nIGluIGV4cGVj
dGF0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmYWlsLmh0bWwgWyBTa2lwIF0nIGlu
IGV4cGVjdGF0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdyZWZfY3Jhc2guaHRtbCBb
IFNraXAgXScgaW4gZXhwZWN0YXRpb25zKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3JlZl90
aW1lb3V0Lmh0bWwgWyBTa2lwIF0nIGluIGV4cGVjdGF0aW9ucykKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKCdyZWZfZmFpbC5odG1sIFsgU2tpcCBdJyBpbiBleHBlY3RhdGlvbnMpCisgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UoJ21pc3NpbmcuaHRtbCcgaW4gZXhwZWN0YXRpb25zKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKCdwYXJ0aWFsLmh0bWwnIGluIGV4cGVjdGF0aW9ucykKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZSgncGFzcy5odG1sJyBpbiBleHBlY3RhdGlvbnMpCisKKyAgICBk
ZWYgdGVzdF90ZXN0X2V4cGVjdGF0aW9uc191cGRhdGUoc2VsZik6CisgICAgICAgIGV4cGVjdGF0
aW9ucyA9ICdcbicuam9pbihzZWxmLmNvbmZvcm1hbmNlX2NoZWNrZXIudGVzdF9leHBlY3RhdGlv
bl91cGRhdGVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncGFydGlhbC5odG1sIFsgUGFz
cyBdJyBpbiBleHBlY3RhdGlvbnMpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3czYy90ZXN0X2Rvd25sb2FkZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0
X2Rvd25sb2FkZXIucHkKaW5kZXggNWFkYmEyYzkyMWNkNTkwOGM1ZTE0YWZjYmJhYWZmMTM1M2Qw
YjczNi4uYzJiMDdlNDk0ZjE5OGQ4YmM1YWExZTZkMjkzNWFjY2JhYzM0ZTEyNCAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9kb3dubG9hZGVyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZG93bmxvYWRlci5weQpAQCAtODEsNiArODEs
OSBAQCBjbGFzcyBUZXN0RG93bmxvYWRlcihvYmplY3QpOgogICAgIGRlZiBnaXQoc2VsZiwgdGVz
dF9yZXBvc2l0b3J5KToKICAgICAgICAgcmV0dXJuIEdpdCh0ZXN0X3JlcG9zaXRvcnksIE5vbmUs
IGV4ZWN1dGl2ZT1zZWxmLl9ob3N0LmV4ZWN1dGl2ZSwgZmlsZXN5c3RlbT1zZWxmLl9maWxlc3lz
dGVtKQogCisgICAgZGVmIGFsbF90ZXN0X3BhdGhzKHNlbGYpOgorICAgICAgICByZXR1cm4gW3Rl
c3RfcmVwb3NpdG9yeS5uYW1lIGZvciB0ZXN0X3JlcG9zaXRvcnkgaW4gc2VsZi50ZXN0X3JlcG9z
aXRvcmllc10KKwogICAgIGRlZiBjaGVja291dF90ZXN0X3JlcG9zaXRvcnkoc2VsZiwgcmV2aXNp
b24sIHVybCwgZGlyZWN0b3J5KToKICAgICAgICAgZ2l0ID0gc2VsZi5naXQoJy4nKQogICAgICAg
ICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoZGlyZWN0b3J5KToKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2MvQ2hhbmdlTG9nCmluZGV4IGJjNDc2NGMxMjAzZmY3NGIyN2M5YmFjNzA2NWRhNGMyZjRl
NzU2ZGUuLjY3YjFlYmUyYTQyMjlkODA2ZjI1NDY0ODg5OTkwZmZmNjk3MGJiMjQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAzLTMwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgQWRkIHN1
cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgY29uZm9ybWFuY2UgdGVzdGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NzY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRlbXBsYXRlIHRvIGRpc3Bs
YXkgY29uZm9ybWFuY2UgcmVzdWx0cy4KKworICAgICAgICAqIHJlc291cmNlcy93M2NfY29uZm9y
bWFuY2VfcmVzdWx0cy5odG1sOiBBZGRlZC4KKwogMjAxNS0wMy0xMyAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFdlYktpdCB0ZXN0IGluZnJh
c3RydWN0dXJlIHNob3VsZCBhdXRvbWF0ZSB0aGUgcHJvY2VzcyBvZiBjbG9uaW5nIFczQyB0ZXN0
IHN1aXRlIGFuZCBpbXBvcnRpbmcgdGVzdHMgZnJvbSBpdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2NfY29uZm9ybWFuY2VfcmVzdWx0cy5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy93M2NfY29uZm9ybWFuY2VfcmVzdWx0
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM4NGNiYzdjMWRkNzdmYTIyNThkZDY0ODYxMTI1MmMwMDZjNDY3
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2Vz
L3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmh0bWwKQEAgLTAsMCArMSw0NTUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNyZXN1bHRzIHsKKyAgICBkaXNwbGF5
OiB0YWJsZTsKKyAgICBwYWRkaW5nOiAyMHB4OworICAgIGNsZWFyOiBib3RoOworfQorI3N1bW1h
cnkgeworICAgIG1hcmdpbi10b3A6IDIwcHg7CisgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKK30K
KworLnRlc3QsIC5maXJzdGxpbmUgeworICAgIGRpc3BsYXk6IHRhYmxlOworfQorLnRlc3RuYW1l
LCAudGVzdHJlc3VsdCwgLmZpcnN0TGluZSA+IGRpdiB7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
bGF2ZW5kZXI7CisgICAgYm9yZGVyLWJvdHRvbTpzb2xpZCAxcHggd2hpdGU7Cit9CisKKy5maXJz
dExpbmVDZWxseworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgdGV4dC1hbGlnbjogY2Vu
dGVyOworICAgIHdpZHRoOiA4MDBweDsKK30KKworLnNlY29uZExpbmVDZWxsIHsKKyAgICBkaXNw
bGF5OiB0YWJsZS1jZWxsOworICAgIHBhZGRpbmctbGVmdDogNTBweDsKKyAgICB3aWR0aDogNzUw
cHg7Cit9CisKKy50ZXN0bmFtZSB7CisgICAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgICB3aWR0
aDogOTAwcHg7CisgICAgbWFyZ2luLWxlZnQ6MjBweDsKK30KKworLnRlc3RuYW1lbGluayB7Cisg
ICAgZmxvYXQ6bGVmdDsKKyAgICBtYXJnaW4tcmlnaHQ6MTBweDsKK30KKworLnRlc3RyZXN1bHRs
aW5rICB7CisgICAgZmxvYXQ6IGxlZnQ7Cit9CisKKy50ZXN0cmVzdWx0bGluayBhIHsKKyAgICB0
ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKK30KKworLmJ1Z2ZpbGluZ2xpbmsgIHsKKyAgICB0
ZXh0LWFsaWduOiByaWdodDsKK30KKworLnBvcnQgeworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7
CisgICAgd2lkdGg6IDI1MHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLnRlc3Ry
ZXN1bHQgeworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgd2lkdGg6IDE1MHB4OworICAg
IHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLnRlc3RyZXN1bHQ6bm90KDpsYXN0LWNoaWxkKSB7
CisgICAgcGFkZGluZy1yaWdodDogMTAwcHg7Cit9CisKKy5wYXJ0aWFsLCAucGFzcywgLmZhaWws
IC50aW1lb3V0LCAuZXJyb3IgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKy5wYXNzIGEg
eworICAgIGNvbG9yOiBncmVlbjsKK30KKworLnBhcnRpYWwgYSB7CisgICAgY29sb3I6IHllbGxv
dzsKK30KKworLmZhaWwgYSB7CisgICAgY29sb3I6IG9yYW5nZTsKK30KKworLnRpbWVvdXQgYSB7
CisgICAgY29sb3I6IHJlZDsKK30KKworLmNyYXNoIGEgeworICAgIGNvbG9yOiByZWQ7Cit9CisK
Ky5lcnJvciBhIHsKKyAgICBjb2xvcjogcmVkOworfQorCisuZXJyb3ItcmVzdWx0cy1oaXN0IHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisgICAgZmxvYXQ6IGxlZnQ7IAorfQorIAorLmZh
aWwtcmVzdWx0cy1oaXN0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBvcmFuZ2U7CisgICAgZmxv
YXQ6IGxlZnQ7Cit9CisKKy5wYXJ0aWFsLXJlc3VsdHMtaGlzdCB7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogeWVsbG93OworICAgIGZsb2F0OiBsZWZ0OworfQorLnBhc3MtcmVzdWx0cy1oaXN0IHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICBmbG9hdDogbGVmdDsKK30KKworLm1v
ZHVsZS1uYW1lIHsKKyAgICBkaXNwbGF5OnRhYmxlLWNlbGw7CisgICAgd2lkdGg6IDgwMHB4Owor
fQorCisubnVtYmVyLW9mLXRlc3RzIHsKKyAgICBkaXNwbGF5OmlubGluZS1ibG9jazsKKyAgICB3
aWR0aDogNTBweDsKK30KKworLm1vZHVsZS1yZXN1bHRzIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgZGlzcGxheTp0YWJsZS1jZWxsOworICAgIHdpZHRoOiAyNTBweDsKK30KKworLmhp
c3RvZ3JhbSB7CisgICAgZGlzcGxheTppbmxpbmUtYmxvY2s7CisgICAgbWFyZ2luLWxlZnQ6IDQw
cHg7CisgICAgbWFyZ2luLXRvcDogNXB4OworICAgIHdpZHRoOjE1MHB4OworfQorCisubW9kdWxl
eworICAgIGJhY2tncm91bmQtY29sb3I6IGxhdmVuZGVyOworICAgIGJvcmRlcjpzb2xpZCAxcHgg
d2hpdGU7CisgICAgZGlzcGxheTp0YWJsZTsKK30KKworLm1vZHVsZS1zdW1tYXJ5LCAuc2Vjb25k
TGluZSB7CisgICAgZGlzcGxheTp0YWJsZTsKKyAgICBiYWNrZ3JvdW5kOiBsYXZlbmRlcjsKKyAg
ICBib3JkZXI6c29saWQgMXB4IHdoaXRlOworICAgIGhlaWdodDogMjVweDsKKyAgICBjdXJzb3I6
cG9pbnRlcjsKK30KKworLmJveHsKKyAgICBkaXNwbGF5OiB0YWJsZTsKK30KKworLmhpZGRlbi1k
YXRhIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisubGVnZW5kID4gZGl2IHsKKyAgICBmbG9h
dDogbGVmdDsKKyAgICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgICBtaW4td2lkdGg6IDIwcHg7Cit9
CisKKy5sZWdlbmQgeworfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRlc3RzRGly
ZWN0b3J5KHJlc3VsdHMpCit7CisgICAgcmV0dXJuIChyZXN1bHRzLnJvb3RfZGlyZWN0b3J5ID8g
cmVzdWx0cy5yb290X2RpcmVjdG9yeSA6IHJlc3VsdHMucG9ydF9uYW1lKSArICIvIiArIAorICAg
ICAgICAgICAgKHJlc3VsdHMudGVzdHNfZGlyZWN0b3J5ID8gcmVzdWx0cy50ZXN0c19kaXJlY3Rv
cnkgOiAiaW1wb3J0ZWQtdGVzdHMiKQorfQorCitmdW5jdGlvbiByZXN1bHRzRGlyZWN0b3J5KHJl
c3VsdHMpCit7CisgICAgcmV0dXJuIChyZXN1bHRzLnJvb3RfZGlyZWN0b3J5ID8gcmVzdWx0cy5y
b290X2RpcmVjdG9yeSA6IHJlc3VsdHMucG9ydF9uYW1lKSArICIvIiArIAorICAgICAgICAgICAg
KHJlc3VsdHMucmVzdWx0c19kaXJlY3RvcnkgPyByZXN1bHRzLnJlc3VsdHNfZGlyZWN0b3J5IDog
ImxheW91dC10ZXN0LXJlc3VsdHMiKQorfQorCitmdW5jdGlvbiBnaXRodWJUZXN0VVJMKHRlc3Ru
YW1lLCByZXN1bHRzKQoreworICAgIGZvcih2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnRlc3RfcmVw
b3NpdG9yaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHJlcG9zaXRvcnkgPSByZXN1bHRzLnRl
c3RfcmVwb3NpdG9yaWVzW2ldCisgICAgICAgIGlmICh0ZXN0bmFtZS5pbmRleE9mKHJlcG9zaXRv
cnkubmFtZSkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZXBvc2l0b3J5LnVybC5yZXBsYWNl
KCIuZ2l0IiwiIikgKyAiL2Jsb2IvIiArIHJlcG9zaXRvcnkucmV2aXNpb24gKyB0ZXN0bmFtZS5y
ZXBsYWNlKHJlcG9zaXRvcnkubmFtZSwgIiIpCisgICAgfQorICAgIHJldHVybiAiI2Nhbm5vdCBm
aW5kIHRlc3QgcmVwb3NpdG9yeSIKK30KKworZnVuY3Rpb24gYnVnemlsbGFVUkwodGl0bGUsIGNv
bW1lbnQpCit7CisgICAgcmV0dXJuICJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9lbnRlcl9idWcu
Y2dpP2Fzc2lnbmVkX3RvPXdlYmtpdC11bmFzc2lnbmVkJTQwbGlzdHMud2Via2l0Lm9yZyZwcm9k
dWN0PVdlYktpdCZmb3JtX25hbWU9ZW50ZXJfYnVnJnNob3J0X2Rlc2M9IiArIHRpdGxlICsgIiZj
b21tZW50PSIgKyBjb21tZW50Cit9CisKK2Z1bmN0aW9uIHRlc3RGaWxlTGluayh0ZXN0bmFtZSwg
cmVzdWx0cykKK3sKKyAgICByZXR1cm4gIjxkaXYgY2xhc3M9J3Rlc3RuYW1lbGluayc+PGEgaHJl
Zj0nIiArIHRlc3RzRGlyZWN0b3J5KHJlc3VsdHMpICsgIi8iICsgdGVzdG5hbWUgKyAiJz4iICsg
dGVzdG5hbWUgKyAiPC9hPjwvZGl2PiIKKyAgICAgICAgKyAiPGRpdiBjbGFzcz0nZ2l0aHVibGlu
ayc+KDxhIGhyZWY9JyIgKyBnaXRodWJUZXN0VVJMKHRlc3RuYW1lLCByZXN1bHRzKSArICInPmdp
dGh1YjwvYT4pPC9kaXY+IiAKK30KKworZnVuY3Rpb24gdGVzdFJlc3VsdEZpbGVMaW5rKHRlc3Ru
YW1lLCByZXN1bHQsIHJlc3VsdHMpCit7CisgICAgdmFyIHN1ZmZpeCA9ICIuIiArIHRlc3RuYW1l
LnNwbGl0KCcuJykucG9wKCkKKyAgICB2YXIgbmV3X3N1ZmZpeCA9ICItZXhwZWN0ZWQudHh0Igor
ICAgIHJlc3VsdF9zdGF0dXMgPSByZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCkudHJpbSgpCisg
ICAgaWYgKHJlc3VsdF9zdGF0dXMgPT0gImNyYXNoIikKKyAgICAgICAgbmV3X3N1ZmZpeCA9ICIt
Y3Jhc2gtbG9nLnR4dCIKKyAgICBpZiAocmVzdWx0LnR5cGUgPT0gInJlZnRlc3QiKQorICAgICAg
ICBuZXdfc3VmZml4ID0gIi1kaWZmcy5odG1sIgorICAgIAorICAgIHZhciBsaW5rID0gIjxkaXYg
Y2xhc3M9J3Rlc3RyZXN1bHRsaW5rJz48YSBocmVmPSciICsgdGVzdHNEaXJlY3RvcnkocmVzdWx0
cykgKyAiLyIgKyB0ZXN0bmFtZS5yZXBsYWNlKHN1ZmZpeCwgbmV3X3N1ZmZpeCkgKyAiJz4iICsg
cmVzdWx0X3N0YXR1cyArICI8L2E+PC9kaXY+IgorCisgICAgaWYgKHJlc3VsdCAhPSAicGFzcyIp
IHsKKyAgICAgICAgdmFyIHRpdGxlID0gZW5jb2RlVVJJQ29tcG9uZW50KCJXM0MgIiArIHRlc3Ru
YW1lICsgIiB0ZXN0IGlzICIgKyByZXN1bHRfc3RhdHVzICsgImluZyIpCisgICAgICAgIHZhciBj
b21tZW50ID0gZW5jb2RlVVJJQ29tcG9uZW50KGdpdGh1YlRlc3RVUkwodGVzdG5hbWUsIHJlc3Vs
dHMpICsgIiBpcyAiICsgcmVzdWx0X3N0YXR1cyArICJpbmcgb24gIiArIHJlc3VsdHMucG9ydF9u
YW1lLnRvVXBwZXJDYXNlKCkgKyAiLiIpCisgICAgICAgIGxpbmsgKz0gIjxkaXYgY2xhc3M9J2J1
Z2ZpbGluZ2xpbmsnPjxhIGhyZWY9JyIgKyBidWd6aWxsYVVSTCh0aXRsZSwgY29tbWVudCkgKyAi
Jz5maWxlIGJ1ZzwvYT48L2Rpdj4iCisgICAgfQorCisgICAgcmV0dXJuIGxpbmsKK30KKworZnVu
Y3Rpb24gdGVzdFN1aXRlU3RhdGVIaXN0b2dyYW0obnVtRXJyb3IsIG51bUZhaWwsIG51bVBhcnRp
YWwsIG51bVBhc3MpCit7CisgICAgdmFyIHRvdGFsID0gbnVtRXJyb3IgKyBudW1QYXNzICsgbnVt
UGFydGlhbCArIG51bUZhaWwKKworICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9Im1vZHVsZS1y
ZXN1bHRzIj4nCisKKyAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJudW1iZXItb2YtdGVzdHMiPicg
KyBudW1QYXNzICsgJy8nICsgdG90YWwgKyAnPC9kaXY+JworCisgICAgaHRtbCArPSAnPGRpdiBj
bGFzcz0iaGlzdG9ncmFtIj4nCisgICAgaWYgKG51bUVycm9yKQorICAgICAgICBodG1sICs9ICc8
ZGl2IGNsYXNzPSJlcnJvci1yZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51
bUVycm9yIC8gdG90YWwpICsgJyUiPiZuYnNwOzwvZGl2PicKKyAgICBpZiAobnVtRmFpbCkKKyAg
ICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZmFpbC1yZXN1bHRzLWhpc3QiIHN0eWxlPSJ3aWR0
aDonICsgKDEwMCAqIG51bUZhaWwgLyB0b3RhbCkgICsgJyUiPiZuYnNwOzwvZGl2PicKKyAgICBp
ZiAobnVtUGFydGlhbCkKKyAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0icGFydGlhbC1yZXN1
bHRzLWhpc3QiIHN0eWxlPSJ3aWR0aDonICsgKDEwMCAqIG51bVBhcnRpYWwgLyB0b3RhbCkgKyAn
JSI+Jm5ic3A7PC9kaXY+JworICAgIGlmIChudW1QYXNzKQorICAgICAgICBodG1sICs9ICc8ZGl2
IGNsYXNzPSJwYXNzLXJlc3VsdHMtaGlzdCIgc3R5bGU9IndpZHRoOicgKyAoMTAwICogbnVtUGFz
cyAvIHRvdGFsKSArICclIj4mbmJzcDs8L2Rpdj4nCisgICAgaHRtbCArPSAnPC9kaXY+JworCisg
ICAgcmV0dXJuIGh0bWwgKyAnPC9kaXY+JworfQorCitmdW5jdGlvbiB0ZXN0c3VpdGVNb2R1bGVz
KHJlc3VsdHMpCisgeworICAgIHZhciBtb2R1bGVzID0ge30KKyAgICAvLyBGaXJzdCwgdHJ5IHRv
IG9ubHkgc2hvdyBtb2R1bGUgZnJvbSBVUkwgaGFzaAorICAgIHZhciBoYXNoID0gd2luZG93Lmxv
Y2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpCisgICAgdmFyIGhhc1Rlc3QgPSBmYWxzZQorICAgIGlm
IChoYXNoLmxlbmd0aCkgeworICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzLmNvbmZvcm1hbmNl
X3Jlc3VsdHMpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworICAgICAgICAgICAg
dmFyIHRlc3ROYW1lID0ga2V5CisgICAgICAgICAgICBpZiAodGVzdE5hbWUuaW5kZXhPZihoYXNo
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaGFzVGVzdCA9IHRydWUKKyAgICAgICAgICAgICAg
ICB2YXIgaXRlbXMgPSB0ZXN0TmFtZS5zcGxpdCgiLyIpCisgICAgICAgICAgICAgICAgdmFyIG5h
bWUgPSBpdGVtc1swXQorICAgICAgICAgICAgICAgIGlmIChtb2R1bGVzW25hbWVdKQorICAgICAg
ICAgICAgICAgICAgICBtb2R1bGVzW25hbWVdLnB1c2goa2V5KQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1tuYW1lXSA9IFtrZXldCisgICAgICAgICAg
ICB9CisgICAgICAgIH0pCisgICAgfQorICAgIGlmIChoYXNUZXN0KQorICAgICAgICByZXR1cm4g
bW9kdWxlcworCisgICAgLy8gSWYgbm90aGluZyB0byBzaG93IGZyb20gVVJMIGhhc2gsIHNob3cg
YWxsIG1vZHVsZXMKKyAgICBPYmplY3Qua2V5cyhyZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHMp
LnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgaSkgeworICAgICAgICB2YXIgdGVzdE5hbWUg
PSBrZXkKKyAgICAgICAgdmFyIGl0ZW1zID0gdGVzdE5hbWUuc3BsaXQoIi8iKQorICAgICAgICB2
YXIgbmFtZSA9IGl0ZW1zWzBdCisgICAgICAgIC8vIEluIGNhc2Ugb2YgaHRtbCBtb2R1bGUsIHdl
IHNwbGl0IGRpc3BsYXkgaW4gc3ViLW1vZHVsZXMKKyAgICAgICAgaWYgKG5hbWUgPT0gJ3dlYi1w
bGF0Zm9ybS10ZXN0cycgfHwgbmFtZSA9PSAnY3Nzd2ctdGVzdHMnIHx8IG5hbWUgPT0gJ2h0bWwn
KQorICAgICAgICAgICAgbmFtZSArPSAnLycgKyBpdGVtc1sxXQorICAgICAgICBpZiAobW9kdWxl
c1tuYW1lXSkKKyAgICAgICAgICAgIG1vZHVsZXNbbmFtZV0ucHVzaChrZXkpCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1vZHVsZXNbbmFtZV0gPSBba2V5XQorICAgIH0pCisgICAgcmV0dXJu
IG1vZHVsZXMKKyB9CisKK2Z1bmN0aW9uIHRvZ2dsZVRlc3RzKGRpdikKK3sKKyAgICB2YXIgYm94
ID0gZGl2Lm5leHRFbGVtZW50U2libGluZworICAgIGlmIChib3gpCisgICAgICAgIGJveC5jbGFz
c05hbWUgPSAoYm94LmNsYXNzTmFtZSA9PSAnYm94JykgPyAnaGlkZGVuLWRhdGEnIDogJ2JveCcK
K30KKworZnVuY3Rpb24gaW5jcmVtZW50U3VtbWFyeShyZXN1bHQsIHN1bW1hcnkpCit7CisgICAg
aWYgKHJlc3VsdC5zdGF0dXMgPT0gIlBBU1MiKQorICAgICAgICBzdW1tYXJ5Lm51bVBhc3MrKwor
ICAgIGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT0gIlBBUlRJQUwiKQorICAgICAgICBzdW1tYXJ5
Lm51bVBhcnRpYWwrKworICAgIGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT0gIkZBSUwiKQorICAg
ICAgICBzdW1tYXJ5Lm51bUZhaWwrKworICAgIGVsc2UKKyAgICAgICAgc3VtbWFyeS5udW1FcnJv
cisrCit9CisKK2Z1bmN0aW9uIGNvbXB1dGVHbG9iYWxDb25mb3JtYW5jZShyZXN1bHRzKQorewor
ICAgIHZhciBzdW1tYXJ5ID0ge251bVBhc3M6IDAsIG51bVBhcnRpYWw6IDAsIG51bUZhaWw6IDAs
IG51bUVycm9yOiAwfQorICAgIGZvciAodmFyIHRlc3QgaW4gcmVzdWx0cy5jb25mb3JtYW5jZV9y
ZXN1bHRzKSB7CisgICAgICAgIGlmIChyZXN1bHRzLmNvbmZvcm1hbmNlX3Jlc3VsdHMuaGFzT3du
UHJvcGVydHkodGVzdCkpCisgICAgICAgICAgICBpbmNyZW1lbnRTdW1tYXJ5KHJlc3VsdHMuY29u
Zm9ybWFuY2VfcmVzdWx0c1t0ZXN0XSwgc3VtbWFyeSkKKyAgICB9CisgICAgcmV0dXJuIHN1bW1h
cnkKK30KKworZnVuY3Rpb24gY29tcHV0ZVN0YXRpc3RpY3MocmVzdWx0c1N1bW1hcnksIHJlc3Vs
dCwgcmVzdWx0cykKK3sKKyAgICB2YXIgc3VtbWFyeSA9IHJlc3VsdHNTdW1tYXJ5W3Jlc3VsdHMu
cG9ydF9uYW1lXQorCisgICAgaWYgKCFzdW1tYXJ5KQorICAgICAgICByZXN1bHRzU3VtbWFyeVty
ZXN1bHRzLnBvcnRfbmFtZV0gPSBzdW1tYXJ5ID0ge251bVBhc3M6IDAsIG51bVBhcnRpYWw6IDAs
IG51bUZhaWw6IDAsIG51bUVycm9yOiAwfQorCisgICAgaW5jcmVtZW50U3VtbWFyeShyZXN1bHQs
IHN1bW1hcnkpCit9CisKK2Z1bmN0aW9uIGFkZFRlc3RTdWl0ZUxpc3RPZlJlc3VsdHMobW9kdWxl
TmFtZSwgdGVzdHMsIGxpc3RPZlJlc3VsdHMsIGlzT3BlbikKK3sKKyAgICB2YXIgaW5uZXJIVE1M
ID0gIiIKKyAgICB2YXIgcmVzdWx0c1N1bW1hcnkgPSAge30KKyAgICB0ZXN0cy5mb3JFYWNoKGZ1
bmN0aW9uKGtleSwgaSkgeworICAgICAgICBpbm5lckhUTUwgKz0gIjxkaXYgY2xhc3M9J3Rlc3Qn
PjxkaXYgY2xhc3M9J3Rlc3RuYW1lJz4iICsgdGVzdEZpbGVMaW5rKGtleSwgbGlzdE9mUmVzdWx0
c1swXSkgKyAiPC9kaXY+IgorICAgICAgICBsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24o
cmVzdWx0cykgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMuY29uZm9ybWFuY2Vf
cmVzdWx0c1trZXldCisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICJNaXNzaW5nIgorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJXQVJOSU5H
OiB0ZXN0ICIgKyBrZXkgKyAiIGlzIG1pc3NpbmciKQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW5uZXJIVE1MICs9ICI8ZGl2IGNsYXNzPSd0ZXN0cmVzdWx0ICIgKyByZXN1bHQuc3RhdHVz
LnRvTG93ZXJDYXNlKCkgKyAiJz4iICsgdGVzdFJlc3VsdEZpbGVMaW5rKGtleSwgcmVzdWx0LCBy
ZXN1bHRzKSArICI8L2Rpdj4iCisgICAgICAgICAgICBjb21wdXRlU3RhdGlzdGljcyhyZXN1bHRz
U3VtbWFyeSwgcmVzdWx0LCByZXN1bHRzKQorICAgICAgICB9KQorICAgICAgICBpbm5lckhUTUwg
Kz0gIjwvZGl2PiIKKyAgICB9KQorICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9Im1vZHVsZSI+
PGRpdiBjbGFzcz0ibW9kdWxlLXN1bW1hcnkiIG9uY2xpY2s9InRvZ2dsZVRlc3RzKGV2ZW50LmN1
cnJlbnRUYXJnZXQpIj48ZGl2IGNsYXNzPSJtb2R1bGUtbmFtZSI+JyArIG1vZHVsZU5hbWUgKyAn
PC9kaXY+JworICAgIGxpc3RPZlJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbihyZXN1bHRzKSB7Cisg
ICAgICAgIHZhciBzdW1tYXJ5ID0gcmVzdWx0c1N1bW1hcnlbcmVzdWx0cy5wb3J0X25hbWVdCisg
ICAgICAgIGh0bWwgKz0gdGVzdFN1aXRlU3RhdGVIaXN0b2dyYW0oc3VtbWFyeS5udW1FcnJvciwg
c3VtbWFyeS5udW1GYWlsLCBzdW1tYXJ5Lm51bVBhcnRpYWwsIHN1bW1hcnkubnVtUGFzcykKKyAg
ICB9KQorICAgIGh0bWwgKz0gJzwvZGl2PjxkaXYgY2xhc3M9IicgKyAoaXNPcGVuID8gImJveCIg
OiAiaGlkZGVuLWRhdGEiKSArICciPicKKyAgICBodG1sICs9IGlubmVySFRNTAorICAgIGh0bWwg
Kz0gJzwvZGl2PjwvZGl2PicKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIp
LmlubmVySFRNTCArPSBodG1sCit9CisKK2Z1bmN0aW9uIHdyaXRlU3VtbWFyeSgpCit7CisgICAg
dmFyIGh0bWwgPSAiPGRpdj5XM0MgY29uZm9ybWFuY2UgcmVzdWx0cyBmcm9tIHJ1bi13ZWJraXQt
dGVzdCAoIgorICAgIGxpc3RPZlJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbihyZXN1bHRzKSB7Cisg
ICAgICAgIGh0bWwgKz0gIjxhIGhyZWY9JyIgKyByZXN1bHRzRGlyZWN0b3J5KHJlc3VsdHMpICsg
Iic+IiArIHJlc3VsdHMucG9ydF9uYW1lICsgIjwvYT4gJm5ic3A7IgorICAgIH0pCisgICAgaHRt
bCArPSAiKTwvZGl2PiIKKworICAgIGh0bWwgKz0gIjxkaXY+IEdlbmVyYXRlZCA8YSBocmVmPSdU
ZXN0RXhwZWN0YXRpb25zJz50ZXN0IGV4cGVjdGF0aW9uczwvYT4gYW5kIDxhIGhyZWY9J0ltcG9y
dEV4cGVjdGF0aW9ucyc+aW1wb3J0IGV4cGVjdGF0aW9uczwvYT4uPC9kaXY+IgorCisgICAgLy8g
RklYTUU6IENoZWNrIHRoYXQgYWxsIGNvbmZvcm1hbmNlIHJlc3VsdHMgdXNlIHRoZSBzYW1lIHRl
c3Qgc3VpdGUgcmV2aXNpb25zLgorCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN1bW1h
cnkiKS5pbm5lckhUTUwgPSBodG1sCit9CisKK2Z1bmN0aW9uIGRpc3BsYXlSZXN1bHRzKCkKK3sK
KyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgIHsKKyAgICAgICAgdmFyIGZpcnN0TGluZUhUTUwg
PSAiPGRpdiBjbGFzcz0nZmlyc3RMaW5lJz48ZGl2IGNsYXNzPSdmaXJzdExpbmVDZWxsJz5Nb2R1
bGUvVGVzdCBOYW1lPC9kaXY+IgorICAgICAgICBsaXN0T2ZSZXN1bHRzLmZvckVhY2goZnVuY3Rp
b24ocmVzdWx0cykgeworICAgICAgICAgICAgZmlyc3RMaW5lSFRNTCArPSAiPGRpdiBjbGFzcz0n
cG9ydCc+IiArIHJlc3VsdHMucG9ydF9uYW1lLnRvVXBwZXJDYXNlKCkgKyAiPC9kaXY+IgorICAg
ICAgICB9KQorICAgICAgICBmaXJzdExpbmVIVE1MICs9ICI8L2Rpdj4iCisgICAgICAgIHZhciBz
ZWNvbmRMaW5lSFRNTCA9ICI8ZGl2IGNsYXNzPSdzZWNvbmRMaW5lJz48ZGl2IGNsYXNzPSdzZWNv
bmRMaW5lQ2VsbCc+T3ZlcmFsbCBjb25mb3JtYW5jZTwvZGl2PiIKKyAgICAgICAgbGlzdE9mUmVz
dWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdHMpIHsKKyAgICAgICAgICAgIHN1bW1hcnkgPSBj
b21wdXRlR2xvYmFsQ29uZm9ybWFuY2UocmVzdWx0cykKKyAgICAgICAgICAgIHNlY29uZExpbmVI
VE1MICs9IHRlc3RTdWl0ZVN0YXRlSGlzdG9ncmFtKHN1bW1hcnkubnVtRXJyb3IsIHN1bW1hcnku
bnVtRmFpbCwgc3VtbWFyeS5udW1QYXJ0aWFsLCBzdW1tYXJ5Lm51bVBhc3MpCisgICAgICAgIH0p
CisgICAgICAgIHNlY29uZExpbmVIVE1MICs9ICI8L2Rpdj4iCisKKyAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKS5pbm5lckhUTUwgPSBmaXJzdExpbmVIVE1MICsgc2Vj
b25kTGluZUhUTUwKKyAgICAgICAgdmFyIG1vZHVsZXMgPSAgdGVzdHN1aXRlTW9kdWxlcyhsaXN0
T2ZSZXN1bHRzWzBdKQorICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1vZHVsZXMpCisg
ICAgICAgIGtleXMuc29ydCgpLmZvckVhY2goZnVuY3Rpb24oa2V5LCBpKSB7CisgICAgICAgICAg
ICBhZGRUZXN0U3VpdGVMaXN0T2ZSZXN1bHRzKGtleSwgbW9kdWxlc1trZXldLCBsaXN0T2ZSZXN1
bHRzLCBrZXlzLmxlbmd0aCA9PSAxKQorICAgICAgICB9KQorICAgICAgICB3cml0ZVN1bW1hcnko
bGlzdE9mUmVzdWx0cykKKyAgICB9LCAwKQorfQorCisgCitsaXN0T2ZSZXN1bHRzID0gW10gCitm
dW5jdGlvbiBBRERfQ09ORk9STUFOQ0VfUkVTVUxUUyhyZXN1bHRzKQoreworICAgIHJlc3VsdHMu
cm9vdF9kaXJlY3RvcnkgPSBkaXJzW2NvdW50ZXJdCisgICAgbGlzdE9mUmVzdWx0cy5wdXNoKHJl
c3VsdHMpCisgICAgc2V0VGltZW91dChsb2FkU2NyaXB0cywgMCkgICAgCit9CisKK3ZhciBjb3Vu
dGVyCit2YXIgZGlycworZnVuY3Rpb24gbG9hZFNjcmlwdHMoZGlyZWN0b3JpZXMpCit7CisgICAg
aWYgKGRpcmVjdG9yaWVzKSB7CisgICAgICAgIGRpcnMgPSBkaXJlY3RvcmllcworICAgICAgICBj
b3VudGVyID0gLTEKKyAgICB9CisgICAgaWYgKGNvdW50ZXIgPCBkaXJzLmxlbmd0aCAtIDEpIHsK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnknKS5pbm5lckhUTUwgPSAi
TG9hZGluZyAiICsgZGlyc1srK2NvdW50ZXJdICsgIi4uLiIKKyAgICAgICAgdmFyIGhlYWQ9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0KKyAgICAgICAgdmFyIHNjcmlw
dD0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykKKyAgICAgICAgc2NyaXB0LnR5cGU9
ICd0ZXh0L2phdmFzY3JpcHQnCisgICAgICAgIHNjcmlwdC5zcmM9IGRpcnNbY291bnRlcl0gKyAn
L3czY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24nCisgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQo
c2NyaXB0KQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3N1bW1hcnknKS5pbm5lckhUTUwgPSAiRGlzcGxheWluZyByZXN1bHRzLi4uIgorICAgICAg
ICBzZXRUaW1lb3V0KGRpc3BsYXlSZXN1bHRzLCAwKQorICAgIH0KK30KKworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9InN1bW1hcnkiPgorICAgIExvYWRpbmcuLi4KKzwvZGl2
PgorPGRpdiBjbGFzcz0ibGVnZW5kIj4KKyAgICA8ZGl2IGNsYXNzPSJlcnJvci1yZXN1bHRzLWhp
c3QgbGVnZW5kIj4mbmJzcDs8L2Rpdj4KKyAgICA8ZGl2PkVycm9yLCBUaW1lb3V0IG9yIENyYXNo
PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iZmFpbC1yZXN1bHRzLWhpc3QgbGVnZW5kIj4mbmJzcDs8
L2Rpdj4KKyAgICA8ZGl2PiBBbGwgYXNzZXJ0aW9ucyBmYWlsaW5nPC9kaXY+CisgICAgPGRpdiBj
bGFzcz0icGFydGlhbC1yZXN1bHRzLWhpc3QgbGVnZW5kIj4mbmJzcDs8L2Rpdj4KKyAgICA8ZGl2
PiBTb21lIGFzc2VydGlvbnMgcGFzc2luZzwvZGl2PgorICAgIDxkaXYgY2xhc3M9InBhc3MtcmVz
dWx0cy1oaXN0IGxlZ2VuZCI+Jm5ic3A7PC9kaXY+CisgICAgPGRpdj4gQWxsIGFzc2VydGlvbnMg
cGFzc2luZzwvZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHRzIj4KKzwvZGl2PgorCis8c2Ny
aXB0PgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIEFkZCBhcyBtYW55
IGZvbGRlciBjb250YWluaW5nIHczY19jb25mb3JtYW5jZV9yZXN1bHRzLmpzb24gYXMgbmVlZGVk
IGluIGxvYWRTY3JpcHRzIGFycmF5IHRvIGRpc3BsYXkgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMu
CisgICAgICAgIGxvYWRTY3JpcHRzKFsiLiJdKQorICAgIH0sIDApCis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>