<?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>64300</bug_id>
          
          <creation_ts>2011-07-11 11:05:31 -0700</creation_ts>
          <short_desc>TestFailures page&apos;s new-bug-filing code is a mess!</short_desc>
          <delta_ts>2022-03-01 02:49:37 -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>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Adam Roben (:aroben)">aroben</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>435021</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-11 11:05:31 -0700</bug_when>
    <thetext>TestFailures page&apos;s new-bug-filing code is a mess!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435022</commentid>
    <comment_count>1</comment_count>
      <attachid>100330</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-11 11:06:25 -0700</bug_when>
    <thetext>Created attachment 100330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435252</commentid>
    <comment_count>2</comment_count>
      <attachid>100373</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-11 15:49:53 -0700</bug_when>
    <thetext>Created attachment 100373
This time with unit tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435272</commentid>
    <comment_count>3</comment_count>
      <attachid>100373</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-11 16:10:57 -0700</bug_when>
    <thetext>Comment on attachment 100373
This time with unit tests!

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

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:35
&gt; +        var formData = {
&gt; +            product: &apos;WebKit&apos;,
&gt; +            version: &apos;528+ (Nightly build)&apos;,
&gt; +        };

This seems look odd data to hard-code here.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:62
&gt; +        var form = document.createElement(&apos;form&apos;);
&gt; +        form.method = &apos;POST&apos;;
&gt; +        form.action = this._bugzilla.baseURL + &apos;enter_bug.cgi&apos;;
&gt; +
&gt; +        for (var key in formData) {
&gt; +            var input = document.createElement(&apos;input&apos;);
&gt; +            input.type = &apos;hidden&apos;;
&gt; +            input.name = key;
&gt; +            input.value = formData[key];
&gt; +            form.appendChild(input);
&gt; +        }

This whole function is something you can do in like one line of jQuery, for whatever that&apos;s worth.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:73
&gt; +    set component(x) {
&gt; +        this._component = x;
&gt; +    },
&gt; +
&gt; +    get component() {
&gt; +        return this._component;
&gt; +    },

Woah, is this really needed?  Why not just expose a real property?

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm.js:35
&gt; +    this.component = &apos;Tools / Tests&apos;;

Ojan would tell you to store all these string as constants and reference them with a symbol.  That has two benefits:

1) If you typo the string, you get a louder error.
2) If we change the components in bugzilla, it&apos;s easier to fix all the code.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm.js:48
&gt; +        var form = NewBugForm.prototype.domElement.call(this);

Oh man, you&apos;re doing JavaScript inheritance manually.  Ok.  That gets really ugly really fast.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm_unittests.js:44
&gt; +    var mockTrac = {};
&gt; +    mockTrac.changesetURL = function(revisionNumber) {
&gt; +        return &apos;[CHANGESET URL r&apos; + revisionNumber + &apos;]&apos;;
&gt; +    }
&gt; +    mockTrac.logURL = function(path, startRevision, endRevision) {
&gt; +        return &apos;[LOG URL &apos; + path + &apos;, r&apos; + startRevision + &apos;, r&apos; + endRevision + &apos;]&apos;;
&gt; +    }

You&apos;ll eventually want to put these in a place where more folks can use them, but you can do that in the future when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435273</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-11 16:12:14 -0700</bug_when>
    <thetext>My main impression from reading this code is that it has a lot of detailed dependencies on our current configuration of bugzilla.  If/when those changes, this code is likely to break.  I&apos;m not sure what to do about that, exactly, but factoring those dependencies into some sort of config.js might help somewhat.  (Another option is not to care about that yet, of course.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435586</commentid>
    <comment_count>5</comment_count>
      <attachid>100373</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-12 05:24:48 -0700</bug_when>
    <thetext>Comment on attachment 100373
This time with unit tests!

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

&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:35
&gt;&gt; +        };
&gt; 
&gt; This seems look odd data to hard-code here.

You&apos;re right. I&apos;ll move this down to TestFailureBugForm.

&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:62
&gt;&gt; +        }
&gt; 
&gt; This whole function is something you can do in like one line of jQuery, for whatever that&apos;s worth.

Good to know.

&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:73
&gt;&gt; +    },
&gt; 
&gt; Woah, is this really needed?  Why not just expose a real property?

It&apos;s not really needed. I just wasn&apos;t sure how else to represent this class&apos;s API. Any suggestions?

&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/TestFailureBugForm.js:35
&gt;&gt; +    this.component = &apos;Tools / Tests&apos;;
&gt; 
&gt; Ojan would tell you to store all these string as constants and reference them with a symbol.  That has two benefits:
&gt; 
&gt; 1) If you typo the string, you get a louder error.
&gt; 2) If we change the components in bugzilla, it&apos;s easier to fix all the code.

OK, I&apos;ll add constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435587</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-12 05:25:33 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; My main impression from reading this code is that it has a lot of detailed dependencies on our current configuration of bugzilla.  If/when those changes, this code is likely to break.  I&apos;m not sure what to do about that, exactly, but factoring those dependencies into some sort of config.js might help somewhat.  (Another option is not to care about that yet, of course.)

Hopefully this is something that can be cleaned up as we go along.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435620</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-12 06:53:48 -0700</bug_when>
    <thetext>Committed r90814: &lt;http://trac.webkit.org/changeset/90814&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435709</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-12 10:09:39 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/NewBugForm.js:73
&gt; &gt;&gt; +    },
&gt; &gt; 
&gt; &gt; Woah, is this really needed?  Why not just expose a real property?
&gt; 
&gt; It&apos;s not really needed. I just wasn&apos;t sure how else to represent this class&apos;s API. Any suggestions?

One option is to set the properties to null in the constructor.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100330</attachid>
            <date>2011-07-11 11:06:25 -0700</date>
            <delta_ts>2011-07-11 15:49:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64300-20110711140624.patch</filename>
            <type>text/plain</type>
            <size>21322</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA3NDkKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9O
ZXdCdWdGb3JtLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL05ld0J1Z0Zvcm0uanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmY2NTY2Y2IyNzUyYWYwMGMzZTU0NjRiMzM2MmQwOWYyOGY4YjdiOAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL1Rlc3RGYWlsdXJlcy9OZXdCdWdGb3JtLmpzCkBAIC0wLDAgKzEsMTIyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworZnVuY3Rpb24gTmV3QnVnRm9ybShidWd6aWxsYSkgeworICAgIHRoaXMuX2J1Z3pp
bGxhID0gYnVnemlsbGE7Cit9CisKK05ld0J1Z0Zvcm0ucHJvdG90eXBlID0geworICAgIGRvbUVs
ZW1lbnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZm9ybURhdGEgPSB7CisgICAgICAgICAg
ICBwcm9kdWN0OiAnV2ViS2l0JywKKyAgICAgICAgICAgIHZlcnNpb246ICc1MjgrIChOaWdodGx5
IGJ1aWxkKScsCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50KQorICAg
ICAgICAgICAgZm9ybURhdGEuY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQ7CisgICAgICAgIGlm
ICh0aGlzLmRlc2NyaXB0aW9uKQorICAgICAgICAgICAgZm9ybURhdGEuY29tbWVudCA9IHRoaXMu
ZGVzY3JpcHRpb247CisgICAgICAgIGlmICh0aGlzLmtleXdvcmRzKQorICAgICAgICAgICAgZm9y
bURhdGEua2V5d29yZHMgPSB0aGlzLmtleXdvcmRzOworICAgICAgICBpZiAodGhpcy5vcGVyYXRp
bmdTeXN0ZW0pCisgICAgICAgICAgICBmb3JtRGF0YS5vcF9zeXMgPSB0aGlzLm9wZXJhdGluZ1N5
c3RlbTsKKyAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0pCisgICAgICAgICAgICBmb3JtRGF0YS5y
ZXBfcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtOworICAgICAgICBpZiAodGhpcy50aXRsZSkKKyAg
ICAgICAgICAgIGZvcm1EYXRhLnNob3J0X2Rlc2MgPSB0aGlzLnRpdGxlOworICAgICAgICBpZiAo
dGhpcy51cmwpCisgICAgICAgICAgICBmb3JtRGF0YS5idWdfZmlsZV9sb2MgPSB0aGlzLnVybDsK
KworICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKKyAg
ICAgICAgZm9ybS5tZXRob2QgPSAnUE9TVCc7CisgICAgICAgIGZvcm0uYWN0aW9uID0gdGhpcy5f
YnVnemlsbGEuYmFzZVVSTCArICdlbnRlcl9idWcuY2dpJzsKKworICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gZm9ybURhdGEpIHsKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgICAgICAgICBpbnB1dC50eXBlID0gJ2hpZGRlbic7Cisg
ICAgICAgICAgICBpbnB1dC5uYW1lID0ga2V5OworICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBm
b3JtRGF0YVtrZXldOworICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZm9ybTsKKyAgICB9LAorCisgICAgc2V0IGNvbXBvbmVu
dCh4KSB7CisgICAgICAgIHRoaXMuX2NvbXBvbmVudCA9IHg7CisgICAgfSwKKworICAgIGdldCBj
b21wb25lbnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb21wb25lbnQ7CisgICAgfSwKKwor
ICAgIHNldCBrZXl3b3Jkcyh4KSB7CisgICAgICAgIHRoaXMuX2tleXdvcmRzID0geDsKKyAgICB9
LAorCisgICAgZ2V0IGtleXdvcmRzKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fa2V5d29yZHM7
CisgICAgfSwKKworICAgIHNldCB0aXRsZSh4KSB7CisgICAgICAgIHRoaXMuX3RpdGxlID0geDsK
KyAgICB9LAorCisgICAgZ2V0IHRpdGxlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7
CisgICAgfSwKKworICAgIHNldCBkZXNjcmlwdGlvbih4KSB7CisgICAgICAgIHRoaXMuX2Rlc2Ny
aXB0aW9uID0geDsKKyAgICB9LAorCisgICAgZ2V0IGRlc2NyaXB0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247CisgICAgfSwKKworICAgIHNldCB1cmwoeCkgeworICAg
ICAgICB0aGlzLl91cmwgPSB4OworICAgIH0sCisKKyAgICBnZXQgdXJsKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fdXJsOworICAgIH0sCisKKyAgICBzZXQgcGxhdGZvcm0oeCkgeworICAgICAg
ICB0aGlzLl9wbGF0Zm9ybSA9IHg7CisgICAgfSwKKworICAgIGdldCBwbGF0Zm9ybSgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3BsYXRmb3JtOworICAgIH0sCisKKyAgICBzZXQgb3BlcmF0aW5n
U3lzdGVtKHgpIHsKKyAgICAgICAgdGhpcy5fb3BlcmF0aW5nU3lzdGVtID0geDsKKyAgICB9LAor
CisgICAgZ2V0IG9wZXJhdGluZ1N5c3RlbSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJh
dGluZ1N5c3RlbTsKKyAgICB9LAorfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9UZXN0
RmFpbHVyZUJ1Z0Zvcm0uanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQu
b3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvVGVzdEZhaWx1cmVCdWdGb3JtLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU5NTg0NmJhZTMyYTFmM2FlN2RmOGE0NWFmZjEyZWMwYWI4YjVhYzYKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvVGVzdEZhaWx1cmVCdWdGb3JtLmpzCkBA
IC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworZnVuY3Rpb24gVGVzdEZhaWx1cmVCdWdGb3Jt
KGJ1Z3ppbGxhLCB0cmFjLCB0ZXN0ZXIsIGZhaWxpbmdCdWlsZE5hbWUsIHBhc3NpbmdCdWlsZE5h
bWUsIGZhaWxpbmdUZXN0cykgeworICAgIE5ld0J1Z0Zvcm0uY2FsbCh0aGlzLCBidWd6aWxsYSk7
CisKKyAgICB0aGlzLl90cmFjID0gdHJhYzsKKyAgICB0aGlzLl90ZXN0ZXIgPSB0ZXN0ZXI7Cisg
ICAgdGhpcy5fZmFpbGluZ0J1aWxkTmFtZSA9IGZhaWxpbmdCdWlsZE5hbWU7CisgICAgdGhpcy5f
cGFzc2luZ0J1aWxkTmFtZSA9IHBhc3NpbmdCdWlsZE5hbWU7CisgICAgdGhpcy5fZmFpbGluZ1Rl
c3RzID0gZmFpbGluZ1Rlc3RzOworCisgICAgdGhpcy5jb21wb25lbnQgPSAnVG9vbHMgLyBUZXN0
cyc7CisgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRoaXMuX2NyZWF0ZUJ1Z0Rlc2NyaXB0aW9uKCk7
CisgICAgLy8gRklYTUU6IFdoZW4gYSBuZXdseS1hZGRlZCB0ZXN0IGhhcyBiZWVuIGZhaWxpbmcg
c2luY2UgaXRzIGludHJvZHVjdGlvbiwgaXQgaXNuJ3QgcmVhbGx5IGEKKyAgICAvLyAicmVncmVz
c2lvbiIuIFdlIHNob3VsZCB1c2UgZGlmZmVyZW50IGtleXdvcmRzIGluIHRoYXQgY2FzZS4gPGh0
dHA6Ly93ZWJraXQub3JnL2IvNjE2NDU+CisgICAgdGhpcy5rZXl3b3JkcyA9ICdMYXlvdXRUZXN0
RmFpbHVyZSwgTWFraW5nQm90c1JlZCwgUmVncmVzc2lvbic7CisgICAgdGhpcy5vcGVyYXRpbmdT
eXN0ZW0gPSB0aGlzLl9jb21wdXRlT3BlcmF0aW5nU3lzdGVtKCk7CisgICAgdGhpcy5wbGF0Zm9y
bSA9IHRoaXMuX2NvbXB1dGVQbGF0Zm9ybSgpOworICAgIHRoaXMudGl0bGUgPSB0aGlzLl9jcmVh
dGVCdWdUaXRsZSgpOworICAgIHRoaXMudXJsID0gdGhpcy5fZmFpbGluZ1Jlc3VsdHNIVE1MVVJM
KCk7Cit9CisKK1Rlc3RGYWlsdXJlQnVnRm9ybS5wcm90b3R5cGUgPSB7CisgICAgZG9tRWxlbWVu
dDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmb3JtID0gTmV3QnVnRm9ybS5wcm90b3R5cGUu
ZG9tRWxlbWVudC5jYWxsKHRoaXMpOworICAgICAgICBmb3JtLmNsYXNzTmFtZSA9ICduZXctYnVn
LWZvcm0nOworICAgICAgICBmb3JtLnRhcmdldCA9ICdfYmxhbmsnOworICAgICAgICByZXR1cm4g
Zm9ybTsKKyAgICB9LAorCisgICAgX2NvbXB1dGVPcGVyYXRpbmdTeXN0ZW06IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAoL1dpbmRvd3MgNy8udGVzdCh0aGlzLl90ZXN0ZXIubmFtZSkpCisgICAg
ICAgICAgICByZXR1cm4gJ1dpbmRvd3MgNyc7CisgICAgICAgIGlmICgvV2luZG93cyBYUC8udGVz
dCh0aGlzLl90ZXN0ZXIubmFtZSkpCisgICAgICAgICAgICByZXR1cm4gJ1dpbmRvd3MgWFAnOwor
ICAgICAgICBpZiAoL1Nub3dMZW9wYXJkLy50ZXN0KHRoaXMuX3Rlc3Rlci5uYW1lKSkKKyAgICAg
ICAgICAgIHJldHVybiAnTWFjIE9TIFggMTAuNic7CisgICAgICAgIGlmICgvTGVvcGFyZC8udGVz
dCh0aGlzLl90ZXN0ZXIubmFtZSkpCisgICAgICAgICAgICByZXR1cm4gJ01hYyBPUyBYIDEwLjUn
OworICAgICAgICByZXR1cm4gJyc7CisgICAgfSwKKworICAgIF9jb21wdXRlUGxhdGZvcm06IGZ1
bmN0aW9uKCkgeworICAgICAgICBpZiAoL1dpbmRvd3MvLnRlc3QodGhpcy5fdGVzdGVyLm5hbWUp
KQorICAgICAgICAgICAgcmV0dXJuICdQQyc7CisgICAgICAgIGlmICgvTGVvcGFyZC8udGVzdCh0
aGlzLl90ZXN0ZXIubmFtZSkpCisgICAgICAgICAgICByZXR1cm4gJ01hY2ludG9zaCc7CisgICAg
ICAgIHJldHVybiAnJzsKKyAgICB9LAorCisgICAgX2NyZWF0ZUJ1Z0Rlc2NyaXB0aW9uOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGZpcnN0U3VzcGVjdFJldmlzaW9uID0gdGhpcy5fcGFzc2lu
Z1JldmlzaW9uKCkgPyB0aGlzLl9wYXNzaW5nUmV2aXNpb24oKSArIDEgOiB0aGlzLl9mYWlsaW5n
UmV2aXNpb24oKTsKKyAgICAgICAgdmFyIGxhc3RTdXNwZWN0UmV2aXNpb24gPSB0aGlzLl9mYWls
aW5nUmV2aXNpb24oKTsKKworICAgICAgICB2YXIgZW5kT2ZGaXJzdFNlbnRlbmNlOworICAgICAg
ICBpZiAodGhpcy5fcGFzc2luZ0J1aWxkTmFtZSkgeworICAgICAgICAgICAgZW5kT2ZGaXJzdFNl
bnRlbmNlID0gJ3N0YXJ0ZWQgZmFpbGluZyBvbiAnICsgdGhpcy5fdGVzdGVyLm5hbWU7CisgICAg
ICAgICAgICBpZiAoZmlyc3RTdXNwZWN0UmV2aXNpb24gPT09IGxhc3RTdXNwZWN0UmV2aXNpb24p
CisgICAgICAgICAgICAgICAgZW5kT2ZGaXJzdFNlbnRlbmNlICs9ICcgaW4gcicgKyBmaXJzdFN1
c3BlY3RSZXZpc2lvbiArICcgPCcgKyB0aGlzLl90cmFjLmNoYW5nZXNldFVSTChmaXJzdFN1c3Bl
Y3RSZXZpc2lvbikgKyAnPic7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW5k
T2ZGaXJzdFNlbnRlbmNlICs9ICcgYmV0d2VlbiByJyArIGZpcnN0U3VzcGVjdFJldmlzaW9uICsg
JyBhbmQgcicgKyBsYXN0U3VzcGVjdFJldmlzaW9uICsgJyAoaW5jbHVzaXZlKSc7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZW5kT2ZGaXJzdFNlbnRlbmNlID0gKHRoaXMuX2ZhaWxpbmdU
ZXN0cy5sZW5ndGggPT09IDEgPyAnaGFzJyA6ICdoYXZlJykgKyAnIGJlZW4gZmFpbGluZyBvbiAn
ICsgdGhpcy5fdGVzdGVyLm5hbWUgKyAnIHNpbmNlIGF0IGxlYXN0IHInICsgZmlyc3RTdXNwZWN0
UmV2aXNpb24gKyAnIDwnICsgdGhpcy5fdHJhYy5jaGFuZ2VzZXRVUkwoZmlyc3RTdXNwZWN0UmV2
aXNpb24pICsgJz4nOworICAgICAgICB2YXIgZGVzY3JpcHRpb247CisgICAgICAgIGlmICh0aGlz
Ll9mYWlsaW5nVGVzdHMubGVuZ3RoID09PSAxKQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0
aGlzLl9mYWlsaW5nVGVzdHNbMF0gKyAnICcgKyBlbmRPZkZpcnN0U2VudGVuY2UgKyAnLlxuXG4n
OworICAgICAgICBlbHNlIGlmICh0aGlzLl9mYWlsaW5nVGVzdHMubGVuZ3RoID09PSAyKQorICAg
ICAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLl9mYWlsaW5nVGVzdHMuam9pbignIGFuZCAnKSAr
ICcgJyArIGVuZE9mRmlyc3RTZW50ZW5jZSArICcuXG5cbic7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgZGVzY3JpcHRpb24gPSAnVGhlIGZvbGxvd2luZyB0ZXN0cyAnICsgZW5kT2ZGaXJz
dFNlbnRlbmNlICsgJzpcblxuJworICAgICAgICAgICAgICAgICsgdGhpcy5fZmFpbGluZ1Rlc3Rz
Lm1hcChmdW5jdGlvbih0ZXN0KSB7IHJldHVybiAnICAgICcgKyB0ZXN0IH0pLmpvaW4oJ1xuJykK
KyAgICAgICAgICAgICAgICArICdcblxuJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmlyc3RT
dXNwZWN0UmV2aXNpb24gIT09IGxhc3RTdXNwZWN0UmV2aXNpb24pCisgICAgICAgICAgICBkZXNj
cmlwdGlvbiArPSB0aGlzLl90cmFjLmxvZ1VSTCgndHJ1bmsnLCBmaXJzdFN1c3BlY3RSZXZpc2lv
biwgbGFzdFN1c3BlY3RSZXZpc2lvbikgKyAnXG5cbic7CisgICAgICAgIGlmICh0aGlzLl9wYXNz
aW5nQnVpbGROYW1lKQorICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gZW5jb2RlVVJJKHRoaXMu
X3Rlc3Rlci5yZXN1bHRzUGFnZVVSTCh0aGlzLl9wYXNzaW5nQnVpbGROYW1lKSkgKyAnIHBhc3Nl
ZFxuJzsKKyAgICAgICAgZGVzY3JpcHRpb24gKz0gZW5jb2RlVVJJKHRoaXMuX2ZhaWxpbmdSZXN1
bHRzSFRNTFVSTCgpKSArICcgZmFpbGVkXG4nOworCisgICAgICAgIHJldHVybiBkZXNjcmlwdGlv
bjsKKyAgICB9LAorCisgICAgX2NyZWF0ZUJ1Z1RpdGxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFdoZW4gYSBuZXdseS1hZGRlZCB0ZXN0IGhhcyBiZWVuIGZhaWxpbmcgc2luY2Ug
aXRzIGludHJvZHVjdGlvbiwgaXQgaXNuJ3QgcmVhbGx5IGEKKyAgICAgICAgLy8gInJlZ3Jlc3Np
b24iLiBXZSBzaG91bGQgdXNlIGEgZGlmZmVyZW50IHRpdGxlIGluIHRoYXQgY2FzZS4gPGh0dHA6
Ly93ZWJraXQub3JnL2IvNjE2NDU+CisKKyAgICAgICAgdmFyIHRpdGxlUHJlZml4ID0gJ1JFR1JF
U1NJT04gKCcgKyB0aGlzLl9yZWdyZXNzaW9uUmFuZ2VTdHJpbmcoKSArICcpOiAnOworICAgICAg
ICB2YXIgdGl0bGVTdWZmaXggPSAnIGZhaWxpbmcgb24gJyArIHRoaXMuX3Rlc3Rlci5uYW1lOwor
ICAgICAgICB2YXIgdGl0bGUgPSB0aXRsZVByZWZpeCArIHRoaXMuX2ZhaWxpbmdUZXN0cy5qb2lu
KCcsICcpICsgdGl0bGVTdWZmaXg7CisKKyAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA8PSBCdWd6
aWxsYS5tYXhpbXVtQnVnVGl0bGVMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gdGl0bGU7CisK
KyAgICAgICAgdmFyIHBhdGhQcmVmaXggPSBsb25nZXN0Q29tbW9uUGF0aFByZWZpeCh0aGlzLl9m
YWlsaW5nVGVzdHMpOworICAgICAgICBpZiAocGF0aFByZWZpeCkgeworICAgICAgICAgICAgdGl0
bGUgPSB0aXRsZVByZWZpeCArIHRoaXMuX2ZhaWxpbmdUZXN0cy5sZW5ndGggKyAnICcgKyBwYXRo
UHJlZml4ICsgJyB0ZXN0cycgKyB0aXRsZVN1ZmZpeDsKKyAgICAgICAgICAgIGlmICh0aXRsZS5s
ZW5ndGggPD0gQnVnemlsbGEubWF4aW11bUJ1Z1RpdGxlTGVuZ3RoKQorICAgICAgICAgICAgICAg
IHJldHVybiB0aXRsZTsKKyAgICAgICAgfQorCisgICAgICAgIHRpdGxlID0gdGl0bGVQcmVmaXgg
KyB0aGlzLl9mYWlsaW5nVGVzdHMubGVuZ3RoICsgJyB0ZXN0cycgKyB0aXRsZVN1ZmZpeDsKKwor
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aXRsZS5sZW5ndGggPD0gQnVnemlsbGEubWF4aW11bUJ1
Z1RpdGxlTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRpdGxlOworICAgIH0sCisKKyAgICBfZmFp
bGluZ1Jlc3VsdHNIVE1MVVJMOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Rl
c3Rlci5yZXN1bHRzUGFnZVVSTCh0aGlzLl9mYWlsaW5nQnVpbGROYW1lKTsKKyAgICB9LAorCisg
ICAgX2ZhaWxpbmdSZXZpc2lvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLl90
ZXN0ZXIuYnVpbGRib3QucGFyc2VCdWlsZE5hbWUodGhpcy5fZmFpbGluZ0J1aWxkTmFtZSkucmV2
aXNpb247CisgICAgfSwKKworICAgIF9wYXNzaW5nUmV2aXNpb246IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoIXRoaXMuX3Bhc3NpbmdCdWlsZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Rlc3Rlci5idWlsZGJvdC5wYXJzZUJ1aWxkTmFtZSh0
aGlzLl9wYXNzaW5nQnVpbGROYW1lKS5yZXZpc2lvbjsKKyAgICB9LAorCisgICAgX3JlZ3Jlc3Np
b25SYW5nZVN0cmluZzogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmYWlsaW5nUmV2aXNpb24g
PSB0aGlzLl9mYWlsaW5nUmV2aXNpb24oKTsKKyAgICAgICAgdmFyIHBhc3NpbmdSZXZpc2lvbiA9
IHRoaXMuX3Bhc3NpbmdSZXZpc2lvbigpOworICAgICAgICBpZiAoIXBhc3NpbmdSZXZpc2lvbiB8
fCBmYWlsaW5nUmV2aXNpb24gLSBwYXNzaW5nUmV2aXNpb24gPD0gMSkKKyAgICAgICAgICAgIHJl
dHVybiAncicgKyBmYWlsaW5nUmV2aXNpb247CisgICAgICAgIHJldHVybiAncicgKyBwYXNzaW5n
UmV2aXNpb24gKyAnLXInICsgZmFpbGluZ1JldmlzaW9uOworICAgIH0sCit9OworCitUZXN0RmFp
bHVyZUJ1Z0Zvcm0ucHJvdG90eXBlLl9fcHJvdG9fXyA9IE5ld0J1Z0Zvcm0ucHJvdG90eXBlOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL1ZpZXdDb250cm9sbGVyLmpzIGIvVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZh
aWx1cmVzL1ZpZXdDb250cm9sbGVyLmpzCmluZGV4IDQ3ZmNiYmVlN2ZmYjMwNmYyOGU2YTIxNDA3
YzBhNWMxMjYwZWM4NzUuLjA2OWNhMzJiZjYyYzQzNjU0NDZlOGViYmZiODJiMmI1ZDVmNjAxZmEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9WaWV3Q29udHJvbGxlci5qcworKysgYi9Ub29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9U
ZXN0RmFpbHVyZXMvVmlld0NvbnRyb2xsZXIuanMKQEAgLTM4MywxMDAgKzM4MywxMCBAQCBWaWV3
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjbG9zZWRMaXN0LmFwcGVuZENo
aWxkcmVuKGNsb3NlZEJ1Z3MubWFwKGJ1Z1RvTGlzdEl0ZW0pKTsKICAgICAgICAgfSk7CiAKLSAg
ICAgICAgdmFyIHBhcnNlZEZhaWxpbmdCdWlsZE5hbWUgPSB0aGlzLl9idWlsZGJvdC5wYXJzZUJ1
aWxkTmFtZShmYWlsaW5nQnVpbGROYW1lKTsKLSAgICAgICAgdmFyIHJlZ3Jlc3Npb25SYW5nZVN0
cmluZyA9ICdyJyArIHBhcnNlZEZhaWxpbmdCdWlsZE5hbWUucmV2aXNpb247Ci0gICAgICAgIGlm
IChwYXNzaW5nQnVpbGROYW1lKSB7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkUGFzc2luZ0J1aWxk
TmFtZSA9IHRoaXMuX2J1aWxkYm90LnBhcnNlQnVpbGROYW1lKHBhc3NpbmdCdWlsZE5hbWUpOwot
ICAgICAgICAgICAgaWYgKHBhcnNlZEZhaWxpbmdCdWlsZE5hbWUucmV2aXNpb24gLSBwYXJzZWRQ
YXNzaW5nQnVpbGROYW1lLnJldmlzaW9uID4gMSkKLSAgICAgICAgICAgICAgICByZWdyZXNzaW9u
UmFuZ2VTdHJpbmcgPSAncicgKyBwYXJzZWRQYXNzaW5nQnVpbGROYW1lLnJldmlzaW9uICsgJy0n
ICsgcmVncmVzc2lvblJhbmdlU3RyaW5nOwotICAgICAgICB9CisgICAgICAgIHZhciBidWdGb3Jt
ID0gbmV3IFRlc3RGYWlsdXJlQnVnRm9ybSh0aGlzLl9idWd6aWxsYSwgdGhpcy5fdHJhYywgdGVz
dGVyLCBmYWlsaW5nQnVpbGROYW1lLCBwYXNzaW5nQnVpbGROYW1lLCBmYWlsaW5nVGVzdHMpOwog
Ci0gICAgICAgIC8vIEZJWE1FOiBTb21lIG9mIHRoaXMgY29kZSBzaG91bGQgbW92ZSBpbnRvIGEg
bmV3IG1ldGhvZCBvbiB0aGUgQnVnemlsbGEgY2xhc3MuCi0KLSAgICAgICAgLy8gRklYTUU6IFdo
ZW4gYSBuZXdseS1hZGRlZCB0ZXN0IGhhcyBiZWVuIGZhaWxpbmcgc2luY2UgaXRzIGludHJvZHVj
dGlvbiwgaXQgaXNuJ3QgcmVhbGx5IGEKLSAgICAgICAgLy8gInJlZ3Jlc3Npb24iLiBXZSBzaG91
bGQgdXNlIGEgZGlmZmVyZW50IHRpdGxlIGFuZCBrZXl3b3JkcyBpbiB0aGF0IGNhc2UuCi0gICAg
ICAgIC8vIDxodHRwOi8vd2Via2l0Lm9yZy9iLzYxNjQ1PgotCi0gICAgICAgIHZhciB0aXRsZVBy
ZWZpeCA9ICdSRUdSRVNTSU9OICgnICsgcmVncmVzc2lvblJhbmdlU3RyaW5nICsgJyk6ICc7Ci0g
ICAgICAgIHZhciB0aXRsZVN1ZmZpeCA9ICcgZmFpbGluZyBvbiAnICsgdGVzdGVyLm5hbWU7Ci0g
ICAgICAgIHZhciB0aXRsZSA9IHRpdGxlUHJlZml4ICsgZmFpbGluZ1Rlc3RzLmpvaW4oJywgJykg
KyB0aXRsZVN1ZmZpeDsKLSAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA+IEJ1Z3ppbGxhLm1heGlt
dW1CdWdUaXRsZUxlbmd0aCkgewotICAgICAgICAgICAgdmFyIHBhdGhQcmVmaXggPSBsb25nZXN0
Q29tbW9uUGF0aFByZWZpeChmYWlsaW5nVGVzdHMpOwotICAgICAgICAgICAgaWYgKHBhdGhQcmVm
aXgpCi0gICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZVByZWZpeCArIGZhaWxpbmdUZXN0cy5s
ZW5ndGggKyAnICcgKyBwYXRoUHJlZml4ICsgJyB0ZXN0cycgKyB0aXRsZVN1ZmZpeDsKLSAgICAg
ICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiBCdWd6aWxsYS5tYXhpbXVtQnVnVGl0bGVMZW5ndGgp
Ci0gICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZVByZWZpeCArIGZhaWxpbmdUZXN0cy5sZW5n
dGggKyAnIHRlc3RzJyArIHRpdGxlU3VmZml4OwotICAgICAgICB9Ci0gICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRpdGxlLmxlbmd0aCA8PSBCdWd6aWxsYS5tYXhpbXVtQnVnVGl0bGVMZW5ndGgpOwot
Ci0gICAgICAgIHZhciBmaXJzdFN1c3BlY3RSZXZpc2lvbiA9IHBhcnNlZFBhc3NpbmdCdWlsZE5h
bWUgPyBwYXJzZWRQYXNzaW5nQnVpbGROYW1lLnJldmlzaW9uICsgMSA6IHBhcnNlZEZhaWxpbmdC
dWlsZE5hbWUucmV2aXNpb247Ci0gICAgICAgIHZhciBsYXN0U3VzcGVjdFJldmlzaW9uID0gcGFy
c2VkRmFpbGluZ0J1aWxkTmFtZS5yZXZpc2lvbjsKLQotICAgICAgICB2YXIgZW5kT2ZGaXJzdFNl
bnRlbmNlOwotICAgICAgICBpZiAocGFzc2luZ0J1aWxkTmFtZSkgewotICAgICAgICAgICAgZW5k
T2ZGaXJzdFNlbnRlbmNlID0gJ3N0YXJ0ZWQgZmFpbGluZyBvbiAnICsgdGVzdGVyLm5hbWU7Ci0g
ICAgICAgICAgICBpZiAoZmlyc3RTdXNwZWN0UmV2aXNpb24gPT09IGxhc3RTdXNwZWN0UmV2aXNp
b24pCi0gICAgICAgICAgICAgICAgZW5kT2ZGaXJzdFNlbnRlbmNlICs9ICcgaW4gcicgKyBmaXJz
dFN1c3BlY3RSZXZpc2lvbiArICcgPCcgKyB0aGlzLl90cmFjLmNoYW5nZXNldFVSTChmaXJzdFN1
c3BlY3RSZXZpc2lvbikgKyAnPic7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW5kT2ZGaXJzdFNlbnRlbmNlICs9ICcgYmV0d2VlbiByJyArIGZpcnN0U3VzcGVjdFJldmlzaW9u
ICsgJyBhbmQgcicgKyBsYXN0U3VzcGVjdFJldmlzaW9uICsgJyAoaW5jbHVzaXZlKSc7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgZW5kT2ZGaXJzdFNlbnRlbmNlID0gKGZhaWxpbmdUZXN0
cy5sZW5ndGggPT09IDEgPyAnaGFzJyA6ICdoYXZlJykgKyAnIGJlZW4gZmFpbGluZyBvbiAnICsg
dGVzdGVyLm5hbWUgKyAnIHNpbmNlIGF0IGxlYXN0IHInICsgZmlyc3RTdXNwZWN0UmV2aXNpb24g
KyAnIDwnICsgdGhpcy5fdHJhYy5jaGFuZ2VzZXRVUkwoZmlyc3RTdXNwZWN0UmV2aXNpb24pICsg
Jz4nOwotCi0gICAgICAgIHZhciBkZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKGZhaWxpbmdUZXN0
cy5sZW5ndGggPT09IDEpCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGZhaWxpbmdUZXN0c1sw
XSArICcgJyArIGVuZE9mRmlyc3RTZW50ZW5jZSArICcuXG5cbic7Ci0gICAgICAgIGVsc2UgaWYg
KGZhaWxpbmdUZXN0cy5sZW5ndGggPT09IDIpCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGZh
aWxpbmdUZXN0cy5qb2luKCcgYW5kICcpICsgJyAnICsgZW5kT2ZGaXJzdFNlbnRlbmNlICsgJy5c
blxuJzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICdUaGUgZm9s
bG93aW5nIHRlc3RzICcgKyBlbmRPZkZpcnN0U2VudGVuY2UgKyAnOlxuXG4nCi0gICAgICAgICAg
ICAgICAgKyBmYWlsaW5nVGVzdHMubWFwKGZ1bmN0aW9uKHRlc3QpIHsgcmV0dXJuICcgICAgJyAr
IHRlc3QgfSkuam9pbignXG4nKQotICAgICAgICAgICAgICAgICsgJ1xuXG4nOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChmaXJzdFN1c3BlY3RSZXZpc2lvbiAhPT0gbGFzdFN1c3BlY3RSZXZpc2lv
bikKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uICs9IHRoaXMuX3RyYWMubG9nVVJMKCd0cnVuaycs
IGZpcnN0U3VzcGVjdFJldmlzaW9uLCBsYXN0U3VzcGVjdFJldmlzaW9uKSArICdcblxuJzsKLSAg
ICAgICAgaWYgKHBhc3NpbmdCdWlsZE5hbWUpCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBl
bmNvZGVVUkkodGVzdGVyLnJlc3VsdHNQYWdlVVJMKHBhc3NpbmdCdWlsZE5hbWUpKSArICcgcGFz
c2VkXG4nOwotICAgICAgICB2YXIgZmFpbGluZ1Jlc3VsdHNIVE1MID0gdGVzdGVyLnJlc3VsdHNQ
YWdlVVJMKGZhaWxpbmdCdWlsZE5hbWUpOwotICAgICAgICBkZXNjcmlwdGlvbiArPSBlbmNvZGVV
UkkoZmFpbGluZ1Jlc3VsdHNIVE1MKSArICcgZmFpbGVkXG4nOwotCi0gICAgICAgIHZhciBmb3Jt
RGF0YSA9IHsKLSAgICAgICAgICAgIHByb2R1Y3Q6ICdXZWJLaXQnLAotICAgICAgICAgICAgdmVy
c2lvbjogJzUyOCsgKE5pZ2h0bHkgYnVpbGQpJywKLSAgICAgICAgICAgIGNvbXBvbmVudDogJ1Rv
b2xzIC8gVGVzdHMnLAotICAgICAgICAgICAga2V5d29yZHM6ICdMYXlvdXRUZXN0RmFpbHVyZSwg
TWFraW5nQm90c1JlZCwgUmVncmVzc2lvbicsCi0gICAgICAgICAgICBzaG9ydF9kZXNjOiB0aXRs
ZSwKLSAgICAgICAgICAgIGNvbW1lbnQ6IGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgYnVnX2Zp
bGVfbG9jOiBmYWlsaW5nUmVzdWx0c0hUTUwsCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKC9X
aW5kb3dzLy50ZXN0KHRlc3Rlci5uYW1lKSkgewotICAgICAgICAgICAgZm9ybURhdGEucmVwX3Bs
YXRmb3JtID0gJ1BDJzsKLSAgICAgICAgICAgIGlmICgvV2luZG93cyA3Ly50ZXN0KHRlc3Rlci5u
YW1lKSkKLSAgICAgICAgICAgICAgICBmb3JtRGF0YS5vcF9zeXMgPSAnV2luZG93cyA3JzsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKC9XaW5kb3dzIFhQLy50ZXN0KHRlc3Rlci5uYW1lKSkKLSAgICAg
ICAgICAgICAgICBmb3JtRGF0YS5vcF9zeXMgPSAnV2luZG93cyBYUCc7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoL0xlb3BhcmQvLnRlc3QodGVzdGVyLm5hbWUpKSB7Ci0gICAgICAgICAgICBmb3JtRGF0
YS5yZXBfcGxhdGZvcm0gPSAnTWFjaW50b3NoJzsKLSAgICAgICAgICAgIGlmICgvU25vd0xlb3Bh
cmQvLnRlc3QodGVzdGVyLm5hbWUpKQotICAgICAgICAgICAgICAgIGZvcm1EYXRhLm9wX3N5cyA9
ICdNYWMgT1MgWCAxMC42JzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3Jt
RGF0YS5vcF9zeXMgPSAnTWFjIE9TIFggMTAuNSc7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
Zm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKKyAgICAgICAgdmFyIGZvcm0g
PSBidWdGb3JtLmRvbUVsZW1lbnQoKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZENoaWxkKGZvcm0p
OwotICAgICAgICBmb3JtLmNsYXNzTmFtZSA9ICduZXctYnVnLWZvcm0nOwotICAgICAgICBmb3Jt
Lm1ldGhvZCA9ICdQT1NUJzsKLSAgICAgICAgZm9ybS5hY3Rpb24gPSB0aGlzLl9idWd6aWxsYS5i
YXNlVVJMICsgJ2VudGVyX2J1Zy5jZ2knOwotICAgICAgICBmb3JtLnRhcmdldCA9ICdfYmxhbmsn
OwotCi0gICAgICAgIGZvciAodmFyIGtleSBpbiBmb3JtRGF0YSkgewotICAgICAgICAgICAgdmFy
IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKLSAgICAgICAgICAgIGlu
cHV0LnR5cGUgPSAnaGlkZGVuJzsKLSAgICAgICAgICAgIGlucHV0Lm5hbWUgPSBrZXk7Ci0gICAg
ICAgICAgICBpbnB1dC52YWx1ZSA9IGZvcm1EYXRhW2tleV07Ci0gICAgICAgICAgICBmb3JtLmFw
cGVuZENoaWxkKGlucHV0KTsKLSAgICAgICAgfQogCiAgICAgICAgIHZhciBsaW5rID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGlu
ayk7CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvaW5kZXguaHRtbCBiL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWls
dXJlcy9pbmRleC5odG1sCmluZGV4IDEyNDc4MTIyZDEwNGVkZThjOTNkYWMwMjI4YmQ5NGNkYzJi
NjkxZGEuLjIzMjU4Zjc5NTUzMWQyMDY0YzcxMmYxNTBlY2IyNzYyZmM0ZDNlYTggMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL1Rlc3RGYWlsdXJlcy9pbmRleC5odG1sCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9pbmRl
eC5odG1sCkBAIC0zNCw4ICszNCwxMCBAQCBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgICAgPHNjcmlwdCBzcmM9IkxheW91dFRlc3RIaXN0b3J5QW5hbHl6ZXIuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJMYXlvdXRUZXN0UmVzdWx0c0xvYWRlci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik5SV1RSZXN1bHRzUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iTmV3QnVnRm9ybS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik9S
V1RSZXN1bHRzUGFyc2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUGVyc2lzdGVu
dENhY2hlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVGVzdEZhaWx1cmVCdWdGb3Jt
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVHJhYy5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9IlV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZp
ZXdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4NjAyNzQ0MzcwMGYzM2Q2MDM1YTk1MDRkMzQ5OTA3ZmEy
YmM0OWM1Li43MTNjZmE1M2ZmOTY2OGVlYjJmZmRmZmMwYmQ3Y2QxZGZkOTRlM2E0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTgg
QEAKIDIwMTEtMDctMTEgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCisgICAgICAg
IEV4dHJhY3QgVGVzdEZhaWx1cmVzJ3MgYnVnLWZpbGluZyBjb2RlIGludG8gdHdvIG5ldyBjbGFz
c2VzCisKKyAgICAgICAgRml4ZXMgPGh0dHA6Ly93ZWJraXQub3JnL2IvNjQzMDA+IFRlc3RGYWls
dXJlcyBwYWdlJ3MgbmV3LWJ1Zy1maWxpbmcgY29kZSBpcyBhIG1lc3MhCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvTmV3QnVnRm9y
bS5qczogQWRkZWQuCisgICAgICAgIChOZXdCdWdGb3JtKTogVGhpcyBjbGFzcyBrbm93cyBob3cg
dG8gY29uc3RydWN0IGEgPGZvcm0+IHVzZWQgZm9yIGZpbGluZyBuZXcgYnVncyBpbgorICAgICAg
ICBCdWd6aWxsYSBiYXNlZCBvbiBzb21lIHBhcmFtZXRlcnMuCisgICAgICAgIChOZXdCdWdGb3Jt
LnByb3RvdHlwZS5kb21FbGVtZW50KTogQ3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgPGZvcm0+IGVs
ZW1lbnQuIENvZGUgY2FtZSBmcm9tCisgICAgICAgIFZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5f
ZG9tRm9yTmV3QW5kRXhpc3RpbmdCdWdzLgorCisgICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlw
ZS5zZXQgY29tcG9uZW50KToKKyAgICAgICAgKE5ld0J1Z0Zvcm0ucHJvdG90eXBlLmdldCBjb21w
b25lbnQpOgorICAgICAgICAoTmV3QnVnRm9ybS5wcm90b3R5cGUuc2V0IGtleXdvcmRzKToKKyAg
ICAgICAgKE5ld0J1Z0Zvcm0ucHJvdG90eXBlLmdldCBrZXl3b3Jkcyk6CisgICAgICAgIChOZXdC
dWdGb3JtLnByb3RvdHlwZS5zZXQgdGl0bGUpOgorICAgICAgICAoTmV3QnVnRm9ybS5wcm90b3R5
cGUuZ2V0IHRpdGxlKToKKyAgICAgICAgKE5ld0J1Z0Zvcm0ucHJvdG90eXBlLnNldCBkZXNjcmlw
dGlvbik6CisgICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlwZS5nZXQgZGVzY3JpcHRpb24pOgor
ICAgICAgICAoTmV3QnVnRm9ybS5wcm90b3R5cGUuc2V0IHVybCk6CisgICAgICAgIChOZXdCdWdG
b3JtLnByb3RvdHlwZS5nZXQgdXJsKToKKyAgICAgICAgKE5ld0J1Z0Zvcm0ucHJvdG90eXBlLnNl
dCBwbGF0Zm9ybSk6CisgICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlwZS5nZXQgcGxhdGZvcm0p
OgorICAgICAgICAoTmV3QnVnRm9ybS5wcm90b3R5cGUuc2V0IG9wZXJhdGluZ1N5c3RlbSk6Cisg
ICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlwZS5nZXQgb3BlcmF0aW5nU3lzdGVtKToKKyAgICAg
ICAgU2ltcGxlIGFjY2Vzc29ycy4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9UZXN0RmFpbHVyZUJ1
Z0Zvcm0uanM6IEFkZGVkLgorICAgICAgICAoVGVzdEZhaWx1cmVCdWdGb3JtKTogVGhpcyBjbGFz
cyBrbm93cyBob3cgdG8gY29uc3RydWN0IGEgPGZvcm0+IGVsZW1lbnQgdXNlZCBmb3IgZmlsaW5n
IG5ldworICAgICAgICBidWdzIHNwZWNpZmljYWxseSBhYm91dCB0ZXN0IGZhaWx1cmVzLiBDb2Rl
IGNhbWUgZnJvbQorICAgICAgICBWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2RvbUZvck5ld0Fu
ZEV4aXN0aW5nQnVncy4KKyAgICAgICAgKFRlc3RGYWlsdXJlQnVnRm9ybS5wcm90b3R5cGUuZG9t
RWxlbWVudCk6IFNsaWdodGx5IGN1c3RvbWl6ZXMgdGhlIDxmb3JtPiBlbGVtZW50IHJldHVybmVk
CisgICAgICAgIGJ5IE5ld0J1Z0Zvcm0uCisgICAgICAgIChUZXN0RmFpbHVyZUJ1Z0Zvcm0ucHJv
dG90eXBlLl9jb21wdXRlT3BlcmF0aW5nU3lzdGVtKToKKyAgICAgICAgKFRlc3RGYWlsdXJlQnVn
Rm9ybS5wcm90b3R5cGUuX2NvbXB1dGVQbGF0Zm9ybSk6CisgICAgICAgIChUZXN0RmFpbHVyZUJ1
Z0Zvcm0ucHJvdG90eXBlLl9jcmVhdGVCdWdUaXRsZSk6CisgICAgICAgIChUZXN0RmFpbHVyZUJ1
Z0Zvcm0ucHJvdG90eXBlLl9mYWlsaW5nUmVzdWx0c0hUTUxVUkwpOgorICAgICAgICAoVGVzdEZh
aWx1cmVCdWdGb3JtLnByb3RvdHlwZS5fZmFpbGluZ1JldmlzaW9uKToKKyAgICAgICAgKFRlc3RG
YWlsdXJlQnVnRm9ybS5wcm90b3R5cGUuX3Bhc3NpbmdSZXZpc2lvbik6CisgICAgICAgIChUZXN0
RmFpbHVyZUJ1Z0Zvcm0ucHJvdG90eXBlLl9yZWdyZXNzaW9uUmFuZ2VTdHJpbmcpOgorICAgICAg
ICBDb2RlIGNhbWUgZnJvbSBWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2RvbUZvck5ld0FuZEV4
aXN0aW5nQnVncy4gSSBicm9rZSBpdCBvdXQgaW50bworICAgICAgICBzZXBhcmF0ZSBmdW5jdGlv
bnMgdG8gYnJlYWsgdXAgdGhlIHJhdCdzIG5lc3QgYSBiaXQuCisKKyAgICAgICAgKiBCdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVy
ZXMvVmlld0NvbnRyb2xsZXIuanM6CisgICAgICAgIChWaWV3Q29udHJvbGxlci5wcm90b3R5cGUu
X2RvbUZvck5ld0FuZEV4aXN0aW5nQnVncyk6IE1vdmVkIGNvZGUgZnJvbSBoZXJlIHRvCisgICAg
ICAgIFRlc3RGYWlsdXJlQnVnRm9ybS9OZXdCdWdGb3JtLCBhbmQgY2hhbmdlZCB0aGlzIGNvZGUg
dG8gdXNlIGEgVGVzdEZhaWx1cmVCdWdGb3JtLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL2luZGV4
Lmh0bWw6IFB1bGwgaW4KKyAgICAgICAgTmV3QnVnRm9ybS9UZXN0RmFpbHVyZUJ1Z0Zvcm0uanMu
CisKKzIwMTEtMDctMTEgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgorCiAgICAgICAg
IFRlYWNoIFRlc3RGYWlsdXJlcyB0aGF0IE9SV1QncyByZXN1bHRzLmh0bWwgZmlsZSBtaWdodCBi
ZSBtaXNzaW5nIGR1ZSB0byBhbGwgdGVzdHMgcGFzc2luZwogCiAgICAgICAgIFRoZXJlIGFyZSB0
aHJlZSByZWFzb25zIHdoeSB3ZSBtaWdodCBmYWlsIHRvIGZldGNoIE9SV1QncyByZXN1bHRzLmh0
bWw6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100373</attachid>
            <date>2011-07-11 15:49:53 -0700</date>
            <delta_ts>2022-03-01 02:49:37 -0800</delta_ts>
            <desc>This time with unit tests!</desc>
            <filename>bug-64300-20110711184952.patch</filename>
            <type>text/plain</type>
            <size>43521</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA3NzgKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9C
dWlsZGJvdC5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9CdWlsZGJvdC5qcwppbmRleCBlOTQxNzI2MGU4
YWQ1NzBlZDMzYWZhN2JhZDhmMTFlYWQ0MWE5NTFlLi4zM2JjZTZlMDU3OTgzMDk3ZDI3Yzg3MGUy
OTYwYjU1ZWNiNjJkMjJkIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWls
ZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvQnVpbGRib3QuanMK
KysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvVGVzdEZhaWx1cmVzL0J1aWxkYm90LmpzCkBAIC02OSw3ICs2OSw3IEBAIEJ1aWxk
Ym90LnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgcmVzdWx0c0RpcmVjdG9yeVVSTDogZnVu
Y3Rpb24oYnVpbGRlck5hbWUsIGJ1aWxkTmFtZSkgewotICAgICAgICByZXR1cm4gdGhpcy5iYXNl
VVJMICsgJ3Jlc3VsdHMvJyArIGJ1aWxkZXJOYW1lICsgJy8nICsgYnVpbGROYW1lICsgJy8nOwor
ICAgICAgICByZXR1cm4gdGhpcy5iYXNlVVJMICsgJ3Jlc3VsdHMvJyArIGVuY29kZVVSSUNvbXBv
bmVudChidWlsZGVyTmFtZSkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoYnVpbGROYW1lKSAr
ICcvJzsKICAgICB9LAogCiAgICAgX2J1aWxkZXJzRm9yTmFtZXM6IGZ1bmN0aW9uKG5hbWVzKSB7
CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvQnVpbGRib3RfdW5pdHRlc3RzLmpzIGIvVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
VGVzdEZhaWx1cmVzL0J1aWxkYm90X3VuaXR0ZXN0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjQ4ZmNlY2Jm
ZTYxNzA0ZWFlNjgxOWY2NTQ4YjBhMWEyNjg4NWYxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVz
dEZhaWx1cmVzL0J1aWxkYm90X3VuaXR0ZXN0cy5qcwpAQCAtMCwwICsxLDM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworKGZ1bmN0aW9uKCkgeworCittb2R1bGUoJ0J1aWxkYm90Jyk7CisKK3Rlc3QoJ3Jlc3Vs
dHNEaXJlY3RvcnlVUkwgaXMgVVJJLWVuY29kZWQnLCAxLCBmdW5jdGlvbigpIHsKKyAgICB2YXIg
YnVpbGRib3QgPSBuZXcgQnVpbGRib3QoJ2h0dHA6Ly9idWlsZC5leGFtcGxlLmNvbS8nKTsKKyAg
ICBlcXVhbChidWlsZGJvdC5yZXN1bHRzRGlyZWN0b3J5VVJMKCdXaW5kb3dzIDcgUmVsZWFzZSAo
VGVzdHMpJywgJ3IxMCAoNSknKSwgJ2h0dHA6Ly9idWlsZC5leGFtcGxlLmNvbS9yZXN1bHRzL1dp
bmRvd3MlMjA3JTIwUmVsZWFzZSUyMChUZXN0cykvcjEwJTIwKDUpLycpOworfSk7CisKK30pKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvQnVpbGRlcl91bml0dGVzdHMuanMgYi9Ub29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9U
ZXN0RmFpbHVyZXMvQnVpbGRlcl91bml0dGVzdHMuanMKaW5kZXggOGQ0ZWY5NGVlMWRhNTg1Yzc0
ODk1ODdiZjUwMTEzNjIxOWNmZmJmYi4uZjYxNGJiYTI1ODg3YWY4Njk2N2IxMDBiOGU0ZWI0Njhi
YmFmMWYzMiAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL0J1aWxkZXJfdW5pdHRlc3RzLmpz
CisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9CdWlsZGVyX3VuaXR0ZXN0cy5qcwpAQCAtMSw2ICsxLDMz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworKGZ1bmN0aW9uKCkgeworCiBtb2R1bGUoIkJ1aWxkZXIiKTsKIAot
dGVzdCgiZ2V0TnVtYmVyT2ZGYWlsaW5nVGVzdHMgZnJvbSBMZWFrcyBib3QiLCA0LCBmdW5jdGlv
bigpIHsKK3Rlc3QoImdldE51bWJlck9mRmFpbGluZ1Rlc3RzIHNob3VsZG4ndCBpbmNsdWRlIGxl
YWtzIiwgNCwgZnVuY3Rpb24oKSB7CiAgICAgdmFyIG1vY2tCdWlsZGJvdCA9IHt9OwogICAgIG1v
Y2tCdWlsZGJvdC5iYXNlVVJMID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS8nOwogCkBAIC0zOSwxMiAr
NjYsMTQgQEAgdGVzdCgiZ2V0TnVtYmVyT2ZGYWlsaW5nVGVzdHMgZnJvbSBMZWFrcyBib3QiLCA0
LCBmdW5jdGlvbigpIHsKICAgICB9OwogCiAgICAgYnVpbGRlci5nZXROdW1iZXJPZkZhaWxpbmdU
ZXN0cygxLCBmdW5jdGlvbihmYWlsdXJlQ291bnQsIHRvb01hbnlGYWlsdXJlcykgewotICAgICAg
ICBlcXVhbHMoZmFpbHVyZUNvdW50LCA0KTsKLSAgICAgICAgZXF1YWxzKHRvb01hbnlGYWlsdXJl
cywgZmFsc2UpOworICAgICAgICBlcXVhbChmYWlsdXJlQ291bnQsIDQpOworICAgICAgICBlcXVh
bCh0b29NYW55RmFpbHVyZXMsIGZhbHNlKTsKICAgICB9KTsKIAogICAgIHdpbmRvdy5nZXRSZXNv
dXJjZSA9IHJlYWxHZXRSZXNvdXJjZTsKLSAgICBlcXVhbHMod2luZG93LmdldFJlc291cmNlLCBy
ZWFsR2V0UmVzb3VyY2UpOworICAgIGVxdWFsKHdpbmRvdy5nZXRSZXNvdXJjZSwgcmVhbEdldFJl
c291cmNlKTsKICAgICB3aW5kb3cuUGVyc2lzdGVudENhY2hlID0gcmVhbFBlcnNpc3RlbnRDYWNo
ZTsKLSAgICBlcXVhbHMod2luZG93LlBlcnNpc3RlbnRDYWNoZSwgcmVhbFBlcnNpc3RlbnRDYWNo
ZSk7CisgICAgZXF1YWwod2luZG93LlBlcnNpc3RlbnRDYWNoZSwgcmVhbFBlcnNpc3RlbnRDYWNo
ZSk7CiB9KTsKKworfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9OZXdCdWdGb3Jt
LmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvVGVzdEZhaWx1cmVzL05ld0J1Z0Zvcm0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY2NTY2Y2Iy
NzUyYWYwMGMzZTU0NjRiMzM2MmQwOWYyOGY4YjdiOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rl
c3RGYWlsdXJlcy9OZXdCdWdGb3JtLmpzCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
ZnVuY3Rpb24gTmV3QnVnRm9ybShidWd6aWxsYSkgeworICAgIHRoaXMuX2J1Z3ppbGxhID0gYnVn
emlsbGE7Cit9CisKK05ld0J1Z0Zvcm0ucHJvdG90eXBlID0geworICAgIGRvbUVsZW1lbnQ6IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgZm9ybURhdGEgPSB7CisgICAgICAgICAgICBwcm9kdWN0
OiAnV2ViS2l0JywKKyAgICAgICAgICAgIHZlcnNpb246ICc1MjgrIChOaWdodGx5IGJ1aWxkKScs
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50KQorICAgICAgICAgICAg
Zm9ybURhdGEuY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQ7CisgICAgICAgIGlmICh0aGlzLmRl
c2NyaXB0aW9uKQorICAgICAgICAgICAgZm9ybURhdGEuY29tbWVudCA9IHRoaXMuZGVzY3JpcHRp
b247CisgICAgICAgIGlmICh0aGlzLmtleXdvcmRzKQorICAgICAgICAgICAgZm9ybURhdGEua2V5
d29yZHMgPSB0aGlzLmtleXdvcmRzOworICAgICAgICBpZiAodGhpcy5vcGVyYXRpbmdTeXN0ZW0p
CisgICAgICAgICAgICBmb3JtRGF0YS5vcF9zeXMgPSB0aGlzLm9wZXJhdGluZ1N5c3RlbTsKKyAg
ICAgICAgaWYgKHRoaXMucGxhdGZvcm0pCisgICAgICAgICAgICBmb3JtRGF0YS5yZXBfcGxhdGZv
cm0gPSB0aGlzLnBsYXRmb3JtOworICAgICAgICBpZiAodGhpcy50aXRsZSkKKyAgICAgICAgICAg
IGZvcm1EYXRhLnNob3J0X2Rlc2MgPSB0aGlzLnRpdGxlOworICAgICAgICBpZiAodGhpcy51cmwp
CisgICAgICAgICAgICBmb3JtRGF0YS5idWdfZmlsZV9sb2MgPSB0aGlzLnVybDsKKworICAgICAg
ICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKKyAgICAgICAgZm9y
bS5tZXRob2QgPSAnUE9TVCc7CisgICAgICAgIGZvcm0uYWN0aW9uID0gdGhpcy5fYnVnemlsbGEu
YmFzZVVSTCArICdlbnRlcl9idWcuY2dpJzsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gZm9y
bURhdGEpIHsKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2lucHV0Jyk7CisgICAgICAgICAgICBpbnB1dC50eXBlID0gJ2hpZGRlbic7CisgICAgICAgICAg
ICBpbnB1dC5uYW1lID0ga2V5OworICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBmb3JtRGF0YVtr
ZXldOworICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZm9ybTsKKyAgICB9LAorCisgICAgc2V0IGNvbXBvbmVudCh4KSB7Cisg
ICAgICAgIHRoaXMuX2NvbXBvbmVudCA9IHg7CisgICAgfSwKKworICAgIGdldCBjb21wb25lbnQo
KSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb21wb25lbnQ7CisgICAgfSwKKworICAgIHNldCBr
ZXl3b3Jkcyh4KSB7CisgICAgICAgIHRoaXMuX2tleXdvcmRzID0geDsKKyAgICB9LAorCisgICAg
Z2V0IGtleXdvcmRzKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fa2V5d29yZHM7CisgICAgfSwK
KworICAgIHNldCB0aXRsZSh4KSB7CisgICAgICAgIHRoaXMuX3RpdGxlID0geDsKKyAgICB9LAor
CisgICAgZ2V0IHRpdGxlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7CisgICAgfSwK
KworICAgIHNldCBkZXNjcmlwdGlvbih4KSB7CisgICAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0g
eDsKKyAgICB9LAorCisgICAgZ2V0IGRlc2NyaXB0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fZGVzY3JpcHRpb247CisgICAgfSwKKworICAgIHNldCB1cmwoeCkgeworICAgICAgICB0aGlz
Ll91cmwgPSB4OworICAgIH0sCisKKyAgICBnZXQgdXJsKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5fdXJsOworICAgIH0sCisKKyAgICBzZXQgcGxhdGZvcm0oeCkgeworICAgICAgICB0aGlzLl9w
bGF0Zm9ybSA9IHg7CisgICAgfSwKKworICAgIGdldCBwbGF0Zm9ybSgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3BsYXRmb3JtOworICAgIH0sCisKKyAgICBzZXQgb3BlcmF0aW5nU3lzdGVtKHgp
IHsKKyAgICAgICAgdGhpcy5fb3BlcmF0aW5nU3lzdGVtID0geDsKKyAgICB9LAorCisgICAgZ2V0
IG9wZXJhdGluZ1N5c3RlbSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGluZ1N5c3Rl
bTsKKyAgICB9LAorfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9OZXdCdWdGb3JtX3Vu
aXR0ZXN0cy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9OZXdCdWdGb3JtX3VuaXR0ZXN0cy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMmM1ZWQxMTNlOWQyYTgyZDFkMjQ4ZDY2MjAxZmMzN2M1MzMwMzZjCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL05ld0J1Z0Zvcm1fdW5pdHRlc3RzLmpzCkBAIC0w
LDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisoZnVuY3Rpb24oKSB7CisKK21vZHVsZSgnTmV3QnVn
Rm9ybScpOworCitjb25zdCB0ZXN0Rm9ybURhdGEgPSB7CisgICAgY29tcG9uZW50OiB7IGZvcm1O
YW1lOiAnY29tcG9uZW50JywgdmFsdWU6ICdUb29scyAvIFRlc3RzJyB9LAorICAgIGRlc2NyaXB0
aW9uOiB7IGZvcm1OYW1lOiAnY29tbWVudCcsIHZhbHVlOiAnVGhpcyBpcyBhIGRlc2NyaXB0aW9u
XG5cbndpdGhcbm5ld2xpbmVzJyB9LAorICAgIGtleXdvcmRzOiB7IGZvcm1OYW1lOiAna2V5d29y
ZHMnLCB2YWx1ZTogJ1F0LCBQbGF0Zm9ybU9ubHknIH0sCisgICAgb3BlcmF0aW5nU3lzdGVtOiB7
IGZvcm1OYW1lOiAnb3Bfc3lzJywgdmFsdWU6ICdXaW5kb3dzIDcnIH0sCisgICAgcGxhdGZvcm06
IHsgZm9ybU5hbWU6ICdyZXBfcGxhdGZvcm0nLCB2YWx1ZTogJ1BDJyB9LAorICAgIHRpdGxlOiB7
IGZvcm1OYW1lOiAnc2hvcnRfZGVzYycsIHZhbHVlOiAnVGhpcyBpcyBhIGJ1ZyB0aXRsZScgfSwK
KyAgICB1cmw6IHsgZm9ybU5hbWU6ICdidWdfZmlsZV9sb2MnLCB2YWx1ZTogJ2h0dHA6Ly9leGFt
cGxlLmNvbS9wYXRoP3F1ZXJ5PWZvbyNhbmNob3InIH0sCit9OworCitmdW5jdGlvbiBjcmVhdGVU
ZXN0Rm9ybSgpIHsKKyAgICB2YXIgbW9ja0J1Z3ppbGxhID0ge307CisgICAgbW9ja0J1Z3ppbGxh
LmJhc2VVUkwgPSAnaHR0cDovL2J1Z3MuZXhhbXBsZS5jb20vJzsKKworICAgIHZhciBmb3JtID0g
bmV3IE5ld0J1Z0Zvcm0obW9ja0J1Z3ppbGxhKTsKKyAgICBmb3IgKHZhciBrZXkgaW4gdGVzdEZv
cm1EYXRhKSB7CisgICAgICAgIGZvcm1ba2V5XSA9IHRlc3RGb3JtRGF0YVtrZXldLnZhbHVlOwor
ICAgIH0KKyAgICByZXR1cm4gZm9ybTsKK30KKwordGVzdCgncHJvcGVydGllcyBhcmUgc2V0Jywg
NywgZnVuY3Rpb24oKSB7CisgICAgdmFyIGZvcm0gPSBjcmVhdGVUZXN0Rm9ybSgpOworCisgICAg
Zm9yICh2YXIga2V5IGluIHRlc3RGb3JtRGF0YSkgeworICAgICAgICBlcXVhbChmb3JtW2tleV0s
IHRlc3RGb3JtRGF0YVtrZXldLnZhbHVlKTsKKyAgICB9Cit9KTsKKwordGVzdCgnZG9tRWxlbWVu
dCgpIHBvc3RzIHRvIGVudGVyX2J1Zy5jZ2knLCAzLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgZm9y
bUVsZW1lbnQgPSBjcmVhdGVUZXN0Rm9ybSgpLmRvbUVsZW1lbnQoKTsKKyAgICBlcXVhbChmb3Jt
RWxlbWVudC50YWdOYW1lLCAnRk9STScpOworICAgIGVxdWFsKGZvcm1FbGVtZW50Lm1ldGhvZCwg
J1BPU1QnKTsKKyAgICBlcXVhbChmb3JtRWxlbWVudC5hY3Rpb24sICdodHRwOi8vYnVncy5leGFt
cGxlLmNvbS9lbnRlcl9idWcuY2dpJyk7Cit9KTsKKwordGVzdCgnZG9tRWxlbWVudCgpIGNvbnRh
aW5zIG9ubHkgaGlkZGVuIGlucHV0IGVsZW1lbnRzJywgOSwgZnVuY3Rpb24oKSB7CisgICAgdmFy
IGVsZW1lbnRzID0gY3JlYXRlVGVzdEZvcm0oKS5kb21FbGVtZW50KCkuZWxlbWVudHM7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICBlcXVh
bChlbGVtZW50c1tpXS50eXBlLCAnaGlkZGVuJyk7CisgICAgfQorfSk7CisKK3Rlc3QoJ2RvbUVs
ZW1lbnQoKSBjb250YWlucyBhbGwgZm9ybSB2YWx1ZXMnLCA5LCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgZm9ybUVsZW1lbnQgPSBjcmVhdGVUZXN0Rm9ybSgpLmRvbUVsZW1lbnQoKTsKKworICAgIGVx
dWFsKGZvcm1FbGVtZW50LnByb2R1Y3QudmFsdWUsICdXZWJLaXQnKTsKKyAgICBlcXVhbChmb3Jt
RWxlbWVudC52ZXJzaW9uLnZhbHVlLCAnNTI4KyAoTmlnaHRseSBidWlsZCknKTsKKworICAgIGZv
ciAodmFyIGtleSBpbiB0ZXN0Rm9ybURhdGEpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB0ZXN0Rm9y
bURhdGFba2V5XTsKKyAgICAgICAgZXF1YWwoZm9ybUVsZW1lbnRbZGF0YS5mb3JtTmFtZV0udmFs
dWUsIGRhdGEudmFsdWUsIGtleSk7CisgICAgfQorfSk7CisKK30pKCk7CmRpZmYgLS1naXQgYS9U
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9UZXN0RmFpbHVyZXMvVGVzdEZhaWx1cmVCdWdGb3JtLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL1Rl
c3RGYWlsdXJlQnVnRm9ybS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmQ2MGY5MTVhYTllNTQzMTU3MTM2NDZj
MTBiNmE1OGViZTU1NWYxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL1Rlc3RG
YWlsdXJlQnVnRm9ybS5qcwpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Z1bmN0aW9u
IFRlc3RGYWlsdXJlQnVnRm9ybShidWd6aWxsYSwgdHJhYywgdGVzdGVyLCBmYWlsaW5nQnVpbGRO
YW1lLCBwYXNzaW5nQnVpbGROYW1lLCBmYWlsaW5nVGVzdHMpIHsKKyAgICBOZXdCdWdGb3JtLmNh
bGwodGhpcywgYnVnemlsbGEpOworCisgICAgdGhpcy5fdHJhYyA9IHRyYWM7CisgICAgdGhpcy5f
dGVzdGVyID0gdGVzdGVyOworICAgIHRoaXMuX2ZhaWxpbmdCdWlsZE5hbWUgPSBmYWlsaW5nQnVp
bGROYW1lOworICAgIHRoaXMuX3Bhc3NpbmdCdWlsZE5hbWUgPSBwYXNzaW5nQnVpbGROYW1lOwor
ICAgIHRoaXMuX2ZhaWxpbmdUZXN0cyA9IGZhaWxpbmdUZXN0czsKKworICAgIHRoaXMuY29tcG9u
ZW50ID0gJ1Rvb2xzIC8gVGVzdHMnOworICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLl9jcmVh
dGVCdWdEZXNjcmlwdGlvbigpOworICAgIC8vIEZJWE1FOiBXaGVuIGEgbmV3bHktYWRkZWQgdGVz
dCBoYXMgYmVlbiBmYWlsaW5nIHNpbmNlIGl0cyBpbnRyb2R1Y3Rpb24sIGl0IGlzbid0IHJlYWxs
eSBhCisgICAgLy8gInJlZ3Jlc3Npb24iLiBXZSBzaG91bGQgdXNlIGRpZmZlcmVudCBrZXl3b3Jk
cyBpbiB0aGF0IGNhc2UuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzYxNjQ1PgorICAgIHRoaXMua2V5
d29yZHMgPSAnTGF5b3V0VGVzdEZhaWx1cmUsIE1ha2luZ0JvdHNSZWQsIFJlZ3Jlc3Npb24nOwor
ICAgIHRoaXMub3BlcmF0aW5nU3lzdGVtID0gdGhpcy5fY29tcHV0ZU9wZXJhdGluZ1N5c3RlbSgp
OworICAgIHRoaXMucGxhdGZvcm0gPSB0aGlzLl9jb21wdXRlUGxhdGZvcm0oKTsKKyAgICB0aGlz
LnRpdGxlID0gdGhpcy5fY3JlYXRlQnVnVGl0bGUoKTsKKyAgICB0aGlzLnVybCA9IHRoaXMuX2Zh
aWxpbmdSZXN1bHRzSFRNTFVSTCgpOworfQorCitUZXN0RmFpbHVyZUJ1Z0Zvcm0ucHJvdG90eXBl
ID0geworICAgIGRvbUVsZW1lbnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZm9ybSA9IE5l
d0J1Z0Zvcm0ucHJvdG90eXBlLmRvbUVsZW1lbnQuY2FsbCh0aGlzKTsKKyAgICAgICAgZm9ybS5j
bGFzc05hbWUgPSAnbmV3LWJ1Zy1mb3JtJzsKKyAgICAgICAgZm9ybS50YXJnZXQgPSAnX2JsYW5r
JzsKKyAgICAgICAgcmV0dXJuIGZvcm07CisgICAgfSwKKworICAgIF9jb21wdXRlT3BlcmF0aW5n
U3lzdGVtOiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKC9XaW5kb3dzIDcvLnRlc3QodGhpcy5f
dGVzdGVyLm5hbWUpKQorICAgICAgICAgICAgcmV0dXJuICdXaW5kb3dzIDcnOworICAgICAgICBp
ZiAoL1dpbmRvd3MgWFAvLnRlc3QodGhpcy5fdGVzdGVyLm5hbWUpKQorICAgICAgICAgICAgcmV0
dXJuICdXaW5kb3dzIFhQJzsKKyAgICAgICAgaWYgKC9Tbm93TGVvcGFyZC8udGVzdCh0aGlzLl90
ZXN0ZXIubmFtZSkpCisgICAgICAgICAgICByZXR1cm4gJ01hYyBPUyBYIDEwLjYnOworICAgICAg
ICBpZiAoL0xlb3BhcmQvLnRlc3QodGhpcy5fdGVzdGVyLm5hbWUpKQorICAgICAgICAgICAgcmV0
dXJuICdNYWMgT1MgWCAxMC41JzsKKyAgICAgICAgcmV0dXJuICcnOworICAgIH0sCisKKyAgICBf
Y29tcHV0ZVBsYXRmb3JtOiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKC9XaW5kb3dzLy50ZXN0
KHRoaXMuX3Rlc3Rlci5uYW1lKSkKKyAgICAgICAgICAgIHJldHVybiAnUEMnOworICAgICAgICBp
ZiAoL0xlb3BhcmQvLnRlc3QodGhpcy5fdGVzdGVyLm5hbWUpKQorICAgICAgICAgICAgcmV0dXJu
ICdNYWNpbnRvc2gnOworICAgICAgICByZXR1cm4gJyc7CisgICAgfSwKKworICAgIF9jcmVhdGVC
dWdEZXNjcmlwdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmaXJzdFN1c3BlY3RSZXZp
c2lvbiA9IHRoaXMuX3Bhc3NpbmdSZXZpc2lvbigpID8gdGhpcy5fcGFzc2luZ1JldmlzaW9uKCkg
KyAxIDogdGhpcy5fZmFpbGluZ1JldmlzaW9uKCk7CisgICAgICAgIHZhciBsYXN0U3VzcGVjdFJl
dmlzaW9uID0gdGhpcy5fZmFpbGluZ1JldmlzaW9uKCk7CisKKyAgICAgICAgdmFyIGVuZE9mRmly
c3RTZW50ZW5jZTsKKyAgICAgICAgaWYgKHRoaXMuX3Bhc3NpbmdCdWlsZE5hbWUpIHsKKyAgICAg
ICAgICAgIGVuZE9mRmlyc3RTZW50ZW5jZSA9ICdzdGFydGVkIGZhaWxpbmcgb24gJyArIHRoaXMu
X3Rlc3Rlci5uYW1lOworICAgICAgICAgICAgaWYgKGZpcnN0U3VzcGVjdFJldmlzaW9uID09PSBs
YXN0U3VzcGVjdFJldmlzaW9uKQorICAgICAgICAgICAgICAgIGVuZE9mRmlyc3RTZW50ZW5jZSAr
PSAnIGluIHInICsgZmlyc3RTdXNwZWN0UmV2aXNpb24gKyAnIDwnICsgdGhpcy5fdHJhYy5jaGFu
Z2VzZXRVUkwoZmlyc3RTdXNwZWN0UmV2aXNpb24pICsgJz4nOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGVuZE9mRmlyc3RTZW50ZW5jZSArPSAnIGJldHdlZW4gcicgKyBmaXJz
dFN1c3BlY3RSZXZpc2lvbiArICcgYW5kIHInICsgbGFzdFN1c3BlY3RSZXZpc2lvbiArICcgKGlu
Y2x1c2l2ZSknOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVuZE9mRmlyc3RTZW50ZW5j
ZSA9ICh0aGlzLl9mYWlsaW5nVGVzdHMubGVuZ3RoID09PSAxID8gJ2hhcycgOiAnaGF2ZScpICsg
JyBiZWVuIGZhaWxpbmcgb24gJyArIHRoaXMuX3Rlc3Rlci5uYW1lICsgJyBzaW5jZSBhdCBsZWFz
dCByJyArIGZpcnN0U3VzcGVjdFJldmlzaW9uICsgJyA8JyArIHRoaXMuX3RyYWMuY2hhbmdlc2V0
VVJMKGZpcnN0U3VzcGVjdFJldmlzaW9uKSArICc+JzsKKyAgICAgICAgdmFyIGRlc2NyaXB0aW9u
OworICAgICAgICBpZiAodGhpcy5fZmFpbGluZ1Rlc3RzLmxlbmd0aCA9PT0gMSkKKyAgICAgICAg
ICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fZmFpbGluZ1Rlc3RzWzBdICsgJyAnICsgZW5kT2ZGaXJz
dFNlbnRlbmNlICsgJy5cblxuJzsKKyAgICAgICAgZWxzZSBpZiAodGhpcy5fZmFpbGluZ1Rlc3Rz
Lmxlbmd0aCA9PT0gMikKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fZmFpbGluZ1Rl
c3RzLmpvaW4oJyBhbmQgJykgKyAnICcgKyBlbmRPZkZpcnN0U2VudGVuY2UgKyAnLlxuXG4nOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ1RoZSBmb2xsb3dpbmcg
dGVzdHMgJyArIGVuZE9mRmlyc3RTZW50ZW5jZSArICc6XG5cbicKKyAgICAgICAgICAgICAgICAr
IHRoaXMuX2ZhaWxpbmdUZXN0cy5tYXAoZnVuY3Rpb24odGVzdCkgeyByZXR1cm4gJyAgICAnICsg
dGVzdCB9KS5qb2luKCdcbicpCisgICAgICAgICAgICAgICAgKyAnXG5cbic7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGZpcnN0U3VzcGVjdFJldmlzaW9uICE9PSBsYXN0U3VzcGVjdFJldmlzaW9u
KQorICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gdGhpcy5fdHJhYy5sb2dVUkwoJ3RydW5rJywg
Zmlyc3RTdXNwZWN0UmV2aXNpb24sIGxhc3RTdXNwZWN0UmV2aXNpb24pICsgJ1xuXG4nOworICAg
ICAgICBpZiAodGhpcy5fcGFzc2luZ0J1aWxkTmFtZSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9u
ICs9IHRoaXMuX3Rlc3Rlci5yZXN1bHRzUGFnZVVSTCh0aGlzLl9wYXNzaW5nQnVpbGROYW1lKSAr
ICcgcGFzc2VkXG4nOworICAgICAgICBkZXNjcmlwdGlvbiArPSB0aGlzLl9mYWlsaW5nUmVzdWx0
c0hUTUxVUkwoKSArICcgZmFpbGVkXG4nOworCisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsK
KyAgICB9LAorCisgICAgX2NyZWF0ZUJ1Z1RpdGxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8g
RklYTUU6IFdoZW4gYSBuZXdseS1hZGRlZCB0ZXN0IGhhcyBiZWVuIGZhaWxpbmcgc2luY2UgaXRz
IGludHJvZHVjdGlvbiwgaXQgaXNuJ3QgcmVhbGx5IGEKKyAgICAgICAgLy8gInJlZ3Jlc3Npb24i
LiBXZSBzaG91bGQgdXNlIGEgZGlmZmVyZW50IHRpdGxlIGluIHRoYXQgY2FzZS4gPGh0dHA6Ly93
ZWJraXQub3JnL2IvNjE2NDU+CisKKyAgICAgICAgdmFyIHRpdGxlUHJlZml4ID0gJ1JFR1JFU1NJ
T04gKCcgKyB0aGlzLl9yZWdyZXNzaW9uUmFuZ2VTdHJpbmcoKSArICcpOiAnOworICAgICAgICB2
YXIgdGl0bGVTdWZmaXggPSAnIGZhaWxpbmcgb24gJyArIHRoaXMuX3Rlc3Rlci5uYW1lOworICAg
ICAgICB2YXIgdGl0bGUgPSB0aXRsZVByZWZpeCArIHRoaXMuX2ZhaWxpbmdUZXN0cy5qb2luKCcs
ICcpICsgdGl0bGVTdWZmaXg7CisKKyAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA8PSBCdWd6aWxs
YS5tYXhpbXVtQnVnVGl0bGVMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gdGl0bGU7CisKKyAg
ICAgICAgdmFyIHBhdGhQcmVmaXggPSBsb25nZXN0Q29tbW9uUGF0aFByZWZpeCh0aGlzLl9mYWls
aW5nVGVzdHMpOworICAgICAgICBpZiAocGF0aFByZWZpeCkgeworICAgICAgICAgICAgdGl0bGUg
PSB0aXRsZVByZWZpeCArIHRoaXMuX2ZhaWxpbmdUZXN0cy5sZW5ndGggKyAnICcgKyBwYXRoUHJl
Zml4ICsgJyB0ZXN0cycgKyB0aXRsZVN1ZmZpeDsKKyAgICAgICAgICAgIGlmICh0aXRsZS5sZW5n
dGggPD0gQnVnemlsbGEubWF4aW11bUJ1Z1RpdGxlTGVuZ3RoKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0aXRsZTsKKyAgICAgICAgfQorCisgICAgICAgIHRpdGxlID0gdGl0bGVQcmVmaXggKyB0
aGlzLl9mYWlsaW5nVGVzdHMubGVuZ3RoICsgJyB0ZXN0cycgKyB0aXRsZVN1ZmZpeDsKKworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aXRsZS5sZW5ndGggPD0gQnVnemlsbGEubWF4aW11bUJ1Z1Rp
dGxlTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRpdGxlOworICAgIH0sCisKKyAgICBfZmFpbGlu
Z1Jlc3VsdHNIVE1MVVJMOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Rlc3Rl
ci5yZXN1bHRzUGFnZVVSTCh0aGlzLl9mYWlsaW5nQnVpbGROYW1lKTsKKyAgICB9LAorCisgICAg
X2ZhaWxpbmdSZXZpc2lvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXN0
ZXIuYnVpbGRib3QucGFyc2VCdWlsZE5hbWUodGhpcy5fZmFpbGluZ0J1aWxkTmFtZSkucmV2aXNp
b247CisgICAgfSwKKworICAgIF9wYXNzaW5nUmV2aXNpb246IGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAoIXRoaXMuX3Bhc3NpbmdCdWlsZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3Rlc3Rlci5idWlsZGJvdC5wYXJzZUJ1aWxkTmFtZSh0aGlz
Ll9wYXNzaW5nQnVpbGROYW1lKS5yZXZpc2lvbjsKKyAgICB9LAorCisgICAgX3JlZ3Jlc3Npb25S
YW5nZVN0cmluZzogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmYWlsaW5nUmV2aXNpb24gPSB0
aGlzLl9mYWlsaW5nUmV2aXNpb24oKTsKKyAgICAgICAgdmFyIHBhc3NpbmdSZXZpc2lvbiA9IHRo
aXMuX3Bhc3NpbmdSZXZpc2lvbigpOworICAgICAgICBpZiAoIXBhc3NpbmdSZXZpc2lvbiB8fCBm
YWlsaW5nUmV2aXNpb24gLSBwYXNzaW5nUmV2aXNpb24gPD0gMSkKKyAgICAgICAgICAgIHJldHVy
biAncicgKyBmYWlsaW5nUmV2aXNpb247CisgICAgICAgIHJldHVybiAncicgKyBwYXNzaW5nUmV2
aXNpb24gKyAnLXInICsgZmFpbGluZ1JldmlzaW9uOworICAgIH0sCit9OworCitUZXN0RmFpbHVy
ZUJ1Z0Zvcm0ucHJvdG90eXBlLl9fcHJvdG9fXyA9IE5ld0J1Z0Zvcm0ucHJvdG90eXBlOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL1Rlc3RGYWlsdXJlQnVnRm9ybV91bml0dGVzdHMuanMg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvVGVzdEZhaWx1cmVCdWdGb3JtX3VuaXR0ZXN0cy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45OTRkOTRkMDRkMTFkMjlkY2YwOTU4YWRlNzhlMmNhOTQ4ZWQ4MjgxCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL1Rlc3RGYWlsdXJlQnVnRm9ybV91bml0dGVzdHMuanMK
QEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisoZnVuY3Rpb24oKSB7CisKK21vZHVsZSgn
VGVzdEZhaWx1cmVCdWdGb3JtJyk7CisKK2Z1bmN0aW9uIE1vY2tCdWlsZGVyKG5hbWUpIHsKKyAg
ICB0aGlzLm5hbWUgPSBuYW1lOworfQorCitmdW5jdGlvbiBjcmVhdGVUZXN0Rm9ybSh0ZXN0ZXJO
YW1lLCBmYWlsaW5nQnVpbGROYW1lLCBwYXNzaW5nQnVpbGROYW1lLCBmYWlsaW5nVGVzdHMpIHsK
KyAgICB2YXIgbW9ja0J1Z3ppbGxhID0ge307CisgICAgbW9ja0J1Z3ppbGxhLmJhc2VVUkwgPSAn
W0JVR1pJTExBIEJBU0UgVVJMXSc7CisKKyAgICB2YXIgbW9ja1RyYWMgPSB7fTsKKyAgICBtb2Nr
VHJhYy5jaGFuZ2VzZXRVUkwgPSBmdW5jdGlvbihyZXZpc2lvbk51bWJlcikgeworICAgICAgICBy
ZXR1cm4gJ1tDSEFOR0VTRVQgVVJMIHInICsgcmV2aXNpb25OdW1iZXIgKyAnXSc7CisgICAgfQor
ICAgIG1vY2tUcmFjLmxvZ1VSTCA9IGZ1bmN0aW9uKHBhdGgsIHN0YXJ0UmV2aXNpb24sIGVuZFJl
dmlzaW9uKSB7CisgICAgICAgIHJldHVybiAnW0xPRyBVUkwgJyArIHBhdGggKyAnLCByJyArIHN0
YXJ0UmV2aXNpb24gKyAnLCByJyArIGVuZFJldmlzaW9uICsgJ10nOworICAgIH0KKworICAgIHZh
ciBtb2NrQnVpbGRib3QgPSB7fTsKKyAgICBtb2NrQnVpbGRib3QucGFyc2VCdWlsZE5hbWUgPSBm
dW5jdGlvbihidWlsZE5hbWUpIHsKKyAgICAgICAgdmFyIG1hdGNoID0gLyhcZCspLy5leGVjKGJ1
aWxkTmFtZSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICByZXZpc2lvbjogcGFyc2VJ
bnQobWF0Y2hbMV0sIDEwKSwKKyAgICAgICAgICAgIGJ1aWxkTnVtYmVyOiBwYXJzZUludChtYXRj
aFsyXSwgMTApLAorICAgICAgICB9OworICAgIH07CisKKyAgICB2YXIgbW9ja0J1aWxkZXIgPSB7
fTsKKyAgICBtb2NrQnVpbGRlci5uYW1lID0gdGVzdGVyTmFtZTsKKyAgICBtb2NrQnVpbGRlci5i
dWlsZGJvdCA9IG1vY2tCdWlsZGJvdDsKKyAgICBtb2NrQnVpbGRlci5yZXN1bHRzUGFnZVVSTCA9
IGZ1bmN0aW9uKGJ1aWxkTmFtZSkgeworICAgICAgICByZXR1cm4gJ1tSRVNVTFRTIFBBR0UgVVJM
ICcgKyB0aGlzLm5hbWUgKyAnLCAnICsgYnVpbGROYW1lICsgJ10nOworICAgIH0KKworICAgIHJl
dHVybiBuZXcgVGVzdEZhaWx1cmVCdWdGb3JtKG1vY2tCdWd6aWxsYSwgbW9ja1RyYWMsIG1vY2tC
dWlsZGVyLCBmYWlsaW5nQnVpbGROYW1lLCBwYXNzaW5nQnVpbGROYW1lLCBmYWlsaW5nVGVzdHMp
OworfQorCit0ZXN0KCdjb21wb25lbnQgYW5kIGtleXdvcmRzIGFyZSBzZXQnLCAyLCBmdW5jdGlv
bigpIHsKKyAgICB2YXIgZm9ybSA9IGNyZWF0ZVRlc3RGb3JtKCdXaW5kb3dzIDcgUmVsZWFzZSAo
VGVzdHMpJywgJ3IxMCAoNSknLCAncjggKDIpJywgWydjc3MxL2Jhc2ljL2NsYXNzX2FzX3NlbGVj
dG9yLmh0bWwnXSk7CisKKyAgICBlcXVhbChmb3JtLmNvbXBvbmVudCwgJ1Rvb2xzIC8gVGVzdHMn
KTsKKyAgICBkZWVwRXF1YWwoZm9ybS5rZXl3b3Jkcy5zcGxpdCgnLCAnKSwgWydMYXlvdXRUZXN0
RmFpbHVyZScsICdNYWtpbmdCb3RzUmVkJywgJ1JlZ3Jlc3Npb24nXSk7Cit9KTsKKworY29uc3Qg
dGVzdGVycyA9IHsKKyAgICAnR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlJzogeworICAgICAgICBv
cGVyYXRpbmdTeXN0ZW06ICcnLAorICAgICAgICBwbGF0Zm9ybTogJycsCisgICAgfSwKKyAgICAn
TGVvcGFyZCBJbnRlbCBSZWxlYXNlIChUZXN0cyknOiB7CisgICAgICAgIG9wZXJhdGluZ1N5c3Rl
bTogJ01hYyBPUyBYIDEwLjUnLAorICAgICAgICBwbGF0Zm9ybTogJ01hY2ludG9zaCcsCisgICAg
fSwKKyAgICAnU25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoVGVzdHMpJzogeworICAgICAgICBv
cGVyYXRpbmdTeXN0ZW06ICdNYWMgT1MgWCAxMC42JywKKyAgICAgICAgcGxhdGZvcm06ICdNYWNp
bnRvc2gnLAorICAgIH0sCisgICAgJ1dpbmRvd3MgNyBSZWxlYXNlIChUZXN0cyknOiB7CisgICAg
ICAgIG9wZXJhdGluZ1N5c3RlbTogJ1dpbmRvd3MgNycsCisgICAgICAgIHBsYXRmb3JtOiAnUEMn
LAorICAgIH0sCisgICAgJ1dpbmRvd3MgWFAgRGVidWcgKFRlc3RzKSc6IHsKKyAgICAgICAgb3Bl
cmF0aW5nU3lzdGVtOiAnV2luZG93cyBYUCcsCisgICAgICAgIHBsYXRmb3JtOiAnUEMnLAorICAg
IH0sCit9OworCit0ZXN0KCdvcGVyYXRpbmcgc3lzdGVtIGlzIGRlZHVjZWQnLCA1LCBmdW5jdGlv
bigpIHsKKyAgICBmb3IgKHZhciBuYW1lIGluIHRlc3RlcnMpIHsKKyAgICAgICAgdmFyIGZvcm0g
PSBjcmVhdGVUZXN0Rm9ybShuYW1lLCAncjEwICg1KScsICdyOCAoMiknLCBbJ2NzczEvYmFzaWMv
Y2xhc3NfYXNfc2VsZWN0b3IuaHRtbCddKTsKKyAgICAgICAgZXF1YWwoZm9ybS5vcGVyYXRpbmdT
eXN0ZW0sIHRlc3RlcnNbbmFtZV0ub3BlcmF0aW5nU3lzdGVtKTsKKyAgICB9Cit9KTsKKwordGVz
dCgncGxhdGZvcm0gaXMgZGVkdWNlZCcsIDUsIGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIG5h
bWUgaW4gdGVzdGVycykgeworICAgICAgICB2YXIgZm9ybSA9IGNyZWF0ZVRlc3RGb3JtKG5hbWUs
ICdyMTAgKDUpJywgJ3I4ICgyKScsIFsnY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3Rvci5odG1s
J10pOworICAgICAgICBlcXVhbChmb3JtLnBsYXRmb3JtLCB0ZXN0ZXJzW25hbWVdLnBsYXRmb3Jt
KTsKKyAgICB9Cit9KTsKKworY29uc3QgdGVzdENhc2VzID0gWworICAgIHsKKyAgICAgICAgZmFp
bGluZ0J1aWxkTmFtZTogJ3IxMCAoNSknLAorICAgICAgICBmYWlsaW5nVGVzdHM6IFsKKyAgICAg
ICAgICAgICdjc3MxL2Jhc2ljL2NsYXNzX2FzX3NlbGVjdG9yLmh0bWwnLAorICAgICAgICBdLAor
ICAgICAgICBleHBlY3RlZERlc2NyaXB0aW9uOiAnY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3Rv
ci5odG1sIGhhcyBiZWVuIGZhaWxpbmcgb24gV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKSBzaW5j
ZSBhdCBsZWFzdCByMTAgPFtDSEFOR0VTRVQgVVJMIHIxMF0+LlxuXG5bUkVTVUxUUyBQQUdFIFVS
TCBXaW5kb3dzIDcgUmVsZWFzZSAoVGVzdHMpLCByMTAgKDUpXSBmYWlsZWRcbicsCisgICAgICAg
IGV4cGVjdGVkVGl0bGU6ICdSRUdSRVNTSU9OIChyMTApOiBjc3MxL2Jhc2ljL2NsYXNzX2FzX3Nl
bGVjdG9yLmh0bWwgZmFpbGluZyBvbiBXaW5kb3dzIDcgUmVsZWFzZSAoVGVzdHMpJywKKyAgICB9
LAorICAgIHsKKyAgICAgICAgZmFpbGluZ0J1aWxkTmFtZTogJ3IxMCAoNSknLAorICAgICAgICBw
YXNzaW5nQnVpbGROYW1lOiAncjkgKDMpJywKKyAgICAgICAgZmFpbGluZ1Rlc3RzOiBbCisgICAg
ICAgICAgICAnY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3Rvci5odG1sJywKKyAgICAgICAgXSwK
KyAgICAgICAgZXhwZWN0ZWREZXNjcmlwdGlvbjogJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0
b3IuaHRtbCBzdGFydGVkIGZhaWxpbmcgb24gV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKSBpbiBy
MTAgPFtDSEFOR0VTRVQgVVJMIHIxMF0+LlxuXG5bUkVTVUxUUyBQQUdFIFVSTCBXaW5kb3dzIDcg
UmVsZWFzZSAoVGVzdHMpLCByOSAoMyldIHBhc3NlZFxuW1JFU1VMVFMgUEFHRSBVUkwgV2luZG93
cyA3IFJlbGVhc2UgKFRlc3RzKSwgcjEwICg1KV0gZmFpbGVkXG4nLAorICAgICAgICBleHBlY3Rl
ZFRpdGxlOiAnUkVHUkVTU0lPTiAocjEwKTogY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3Rvci5o
dG1sIGZhaWxpbmcgb24gV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKScsCisgICAgfSwKKyAgICB7
CisgICAgICAgIGZhaWxpbmdCdWlsZE5hbWU6ICdyMTAgKDUpJywKKyAgICAgICAgcGFzc2luZ0J1
aWxkTmFtZTogJ3I4ICgyKScsCisgICAgICAgIGZhaWxpbmdUZXN0czogWworICAgICAgICAgICAg
J2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3IuaHRtbCcsCisgICAgICAgIF0sCisgICAgICAg
IGV4cGVjdGVkRGVzY3JpcHRpb246ICdjc3MxL2Jhc2ljL2NsYXNzX2FzX3NlbGVjdG9yLmh0bWwg
c3RhcnRlZCBmYWlsaW5nIG9uIFdpbmRvd3MgNyBSZWxlYXNlIChUZXN0cykgYmV0d2VlbiByOSBh
bmQgcjEwIChpbmNsdXNpdmUpLlxuXG5bTE9HIFVSTCB0cnVuaywgcjksIHIxMF1cblxuW1JFU1VM
VFMgUEFHRSBVUkwgV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKSwgcjggKDIpXSBwYXNzZWRcbltS
RVNVTFRTIFBBR0UgVVJMIFdpbmRvd3MgNyBSZWxlYXNlIChUZXN0cyksIHIxMCAoNSldIGZhaWxl
ZFxuJywKKyAgICAgICAgZXhwZWN0ZWRUaXRsZTogJ1JFR1JFU1NJT04gKHI4LXIxMCk6IGNzczEv
YmFzaWMvY2xhc3NfYXNfc2VsZWN0b3IuaHRtbCBmYWlsaW5nIG9uIFdpbmRvd3MgNyBSZWxlYXNl
IChUZXN0cyknLAorICAgIH0sCisgICAgeworICAgICAgICBmYWlsaW5nQnVpbGROYW1lOiAncjEw
ICg1KScsCisgICAgICAgIHBhc3NpbmdCdWlsZE5hbWU6ICdyOCAoMiknLAorICAgICAgICBmYWls
aW5nVGVzdHM6IFsKKyAgICAgICAgICAgICdjc3MxL2Jhc2ljL2NsYXNzX2FzX3NlbGVjdG9yLmh0
bWwnLAorICAgICAgICAgICAgJ2Zhc3QvY3NzL2V4LWFmdGVyLWZvbnQtdmFyaWFudC5odG1sJywK
KyAgICAgICAgXSwKKyAgICAgICAgZXhwZWN0ZWREZXNjcmlwdGlvbjogJ2NzczEvYmFzaWMvY2xh
c3NfYXNfc2VsZWN0b3IuaHRtbCBhbmQgZmFzdC9jc3MvZXgtYWZ0ZXItZm9udC12YXJpYW50Lmh0
bWwgc3RhcnRlZCBmYWlsaW5nIG9uIFdpbmRvd3MgNyBSZWxlYXNlIChUZXN0cykgYmV0d2VlbiBy
OSBhbmQgcjEwIChpbmNsdXNpdmUpLlxuXG5bTE9HIFVSTCB0cnVuaywgcjksIHIxMF1cblxuW1JF
U1VMVFMgUEFHRSBVUkwgV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKSwgcjggKDIpXSBwYXNzZWRc
bltSRVNVTFRTIFBBR0UgVVJMIFdpbmRvd3MgNyBSZWxlYXNlIChUZXN0cyksIHIxMCAoNSldIGZh
aWxlZFxuJywKKyAgICAgICAgZXhwZWN0ZWRUaXRsZTogJ1JFR1JFU1NJT04gKHI4LXIxMCk6IGNz
czEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3IuaHRtbCwgZmFzdC9jc3MvZXgtYWZ0ZXItZm9udC12
YXJpYW50Lmh0bWwgZmFpbGluZyBvbiBXaW5kb3dzIDcgUmVsZWFzZSAoVGVzdHMpJywKKyAgICB9
LAorICAgIHsKKyAgICAgICAgZmFpbGluZ0J1aWxkTmFtZTogJ3IxMCAoNSknLAorICAgICAgICBw
YXNzaW5nQnVpbGROYW1lOiAncjggKDIpJywKKyAgICAgICAgZmFpbGluZ1Rlc3RzOiBbCisgICAg
ICAgICAgICAnY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3RvcjEuaHRtbCcsCisgICAgICAgICAg
ICAnY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3RvcjIuaHRtbCcsCisgICAgICAgICAgICAnY3Nz
MS9iYXNpYy9jbGFzc19hc19zZWxlY3RvcjMuaHRtbCcsCisgICAgICAgICAgICAnY3NzMS9iYXNp
Yy9jbGFzc19hc19zZWxlY3RvcjQuaHRtbCcsCisgICAgICAgICAgICAnY3NzMS9iYXNpYy9jbGFz
c19hc19zZWxlY3RvcjUuaHRtbCcsCisgICAgICAgICAgICAnY3NzMS9iYXNpYy9jbGFzc19hc19z
ZWxlY3RvcjYuaHRtbCcsCisgICAgICAgICAgICAnY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3Rv
cjcuaHRtbCcsCisgICAgICAgICAgICAnY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3RvcjguaHRt
bCcsCisgICAgICAgIF0sCisgICAgICAgIGV4cGVjdGVkRGVzY3JpcHRpb246ICdUaGUgZm9sbG93
aW5nIHRlc3RzIHN0YXJ0ZWQgZmFpbGluZyBvbiBXaW5kb3dzIDcgUmVsZWFzZSAoVGVzdHMpIGJl
dHdlZW4gcjkgYW5kIHIxMCAoaW5jbHVzaXZlKTpcblxuICAgIGNzczEvYmFzaWMvY2xhc3NfYXNf
c2VsZWN0b3IxLmh0bWxcbiAgICBjc3MxL2Jhc2ljL2NsYXNzX2FzX3NlbGVjdG9yMi5odG1sXG4g
ICAgY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3RvcjMuaHRtbFxuICAgIGNzczEvYmFzaWMvY2xh
c3NfYXNfc2VsZWN0b3I0Lmh0bWxcbiAgICBjc3MxL2Jhc2ljL2NsYXNzX2FzX3NlbGVjdG9yNS5o
dG1sXG4gICAgY3NzMS9iYXNpYy9jbGFzc19hc19zZWxlY3RvcjYuaHRtbFxuICAgIGNzczEvYmFz
aWMvY2xhc3NfYXNfc2VsZWN0b3I3Lmh0bWxcbiAgICBjc3MxL2Jhc2ljL2NsYXNzX2FzX3NlbGVj
dG9yOC5odG1sXG5cbltMT0cgVVJMIHRydW5rLCByOSwgcjEwXVxuXG5bUkVTVUxUUyBQQUdFIFVS
TCBXaW5kb3dzIDcgUmVsZWFzZSAoVGVzdHMpLCByOCAoMildIHBhc3NlZFxuW1JFU1VMVFMgUEFH
RSBVUkwgV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKSwgcjEwICg1KV0gZmFpbGVkXG4nLAorICAg
ICAgICBleHBlY3RlZFRpdGxlOiAnUkVHUkVTU0lPTiAocjgtcjEwKTogOCBjc3MxL2Jhc2ljIHRl
c3RzIGZhaWxpbmcgb24gV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKScsCisgICAgfSwKKyAgICB7
CisgICAgICAgIGZhaWxpbmdCdWlsZE5hbWU6ICdyMTAgKDUpJywKKyAgICAgICAgcGFzc2luZ0J1
aWxkTmFtZTogJ3I4ICgyKScsCisgICAgICAgIGZhaWxpbmdUZXN0czogWworICAgICAgICAgICAg
J2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3IxLmh0bWwnLAorICAgICAgICAgICAgJ2NzczEv
YmFzaWMvY2xhc3NfYXNfc2VsZWN0b3IyLmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMv
Y2xhc3NfYXNfc2VsZWN0b3IzLmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3Nf
YXNfc2VsZWN0b3I0Lmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2Vs
ZWN0b3I1Lmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3I2
Lmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3I3Lmh0bWwn
LAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3I4Lmh0bWwnLAorICAg
ICAgICAgICAgJ2NzczEvY2xhc3NfYXNfc2VsZWN0b3I5Lmh0bWwnLAorICAgICAgICBdLAorICAg
ICAgICBleHBlY3RlZFRpdGxlOiAnUkVHUkVTU0lPTiAocjgtcjEwKTogOSBjc3MxIHRlc3RzIGZh
aWxpbmcgb24gV2luZG93cyA3IFJlbGVhc2UgKFRlc3RzKScsCisgICAgfSwKKyAgICB7CisgICAg
ICAgIGZhaWxpbmdCdWlsZE5hbWU6ICdyMTAgKDUpJywKKyAgICAgICAgcGFzc2luZ0J1aWxkTmFt
ZTogJ3I4ICgyKScsCisgICAgICAgIGZhaWxpbmdUZXN0czogWworICAgICAgICAgICAgJ2NzczEv
YmFzaWMvY2xhc3NfYXNfc2VsZWN0b3IxLmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMv
Y2xhc3NfYXNfc2VsZWN0b3IyLmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3Nf
YXNfc2VsZWN0b3IzLmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2Vs
ZWN0b3I0Lmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3I1
Lmh0bWwnLAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3I2Lmh0bWwn
LAorICAgICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3I3Lmh0bWwnLAorICAg
ICAgICAgICAgJ2NzczEvYmFzaWMvY2xhc3NfYXNfc2VsZWN0b3I4Lmh0bWwnLAorICAgICAgICAg
ICAgJ2NzczEvY2xhc3NfYXNfc2VsZWN0b3I5Lmh0bWwnLAorICAgICAgICAgICAgJ2Zhc3QvY3Nz
L2V4LWFmdGVyLWZvbnQtdmFyaWFudC5odG1sJywKKyAgICAgICAgXSwKKyAgICAgICAgZXhwZWN0
ZWRUaXRsZTogJ1JFR1JFU1NJT04gKHI4LXIxMCk6IDEwIHRlc3RzIGZhaWxpbmcgb24gV2luZG93
cyA3IFJlbGVhc2UgKFRlc3RzKScsCisgICAgfSwKK107CisKK3Rlc3QoJ3RpdGxlcycsIDcsIGZ1
bmN0aW9uKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdENhc2VzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgIHZhciBmb3JtID0gY3JlYXRlVGVzdEZvcm0oJ1dpbmRvd3MgNyBSZWxlYXNl
IChUZXN0cyknLCB0ZXN0Q2FzZXNbaV0uZmFpbGluZ0J1aWxkTmFtZSwgdGVzdENhc2VzW2ldLnBh
c3NpbmdCdWlsZE5hbWUsIHRlc3RDYXNlc1tpXS5mYWlsaW5nVGVzdHMpOworICAgICAgICBlcXVh
bChmb3JtLnRpdGxlLCB0ZXN0Q2FzZXNbaV0uZXhwZWN0ZWRUaXRsZSk7CisgICAgfQorfSk7CisK
K3Rlc3QoJ2Rlc2NyaXB0aW9ucycsIDUsIGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGVzdENhc2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICghKCdleHBlY3RlZERl
c2NyaXB0aW9uJyBpbiB0ZXN0Q2FzZXNbaV0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIHZhciBmb3JtID0gY3JlYXRlVGVzdEZvcm0oJ1dpbmRvd3MgNyBSZWxlYXNlIChUZXN0cykn
LCB0ZXN0Q2FzZXNbaV0uZmFpbGluZ0J1aWxkTmFtZSwgdGVzdENhc2VzW2ldLnBhc3NpbmdCdWls
ZE5hbWUsIHRlc3RDYXNlc1tpXS5mYWlsaW5nVGVzdHMpOworICAgICAgICBlcXVhbChmb3JtLmRl
c2NyaXB0aW9uLCB0ZXN0Q2FzZXNbaV0uZXhwZWN0ZWREZXNjcmlwdGlvbik7CisgICAgfQorfSk7
CisKK30pKCk7CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJr
aXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvVmlld0NvbnRyb2xsZXIuanMg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvVmlld0NvbnRyb2xsZXIuanMKaW5kZXggNDdmY2JiZWU3ZmZiMzA2
ZjI4ZTZhMjE0MDdjMGE1YzEyNjBlYzg3NS4uMDY5Y2EzMmJmNjJjNDM2NTQ0NmU4ZWJiZmI4MmIy
YjVkNWY2MDFmYSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL1ZpZXdDb250cm9sbGVyLmpz
CisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9WaWV3Q29udHJvbGxlci5qcwpAQCAtMzgzLDEwMCArMzgz
LDEwIEBAIFZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNsb3NlZExp
c3QuYXBwZW5kQ2hpbGRyZW4oY2xvc2VkQnVncy5tYXAoYnVnVG9MaXN0SXRlbSkpOwogICAgICAg
ICB9KTsKIAotICAgICAgICB2YXIgcGFyc2VkRmFpbGluZ0J1aWxkTmFtZSA9IHRoaXMuX2J1aWxk
Ym90LnBhcnNlQnVpbGROYW1lKGZhaWxpbmdCdWlsZE5hbWUpOwotICAgICAgICB2YXIgcmVncmVz
c2lvblJhbmdlU3RyaW5nID0gJ3InICsgcGFyc2VkRmFpbGluZ0J1aWxkTmFtZS5yZXZpc2lvbjsK
LSAgICAgICAgaWYgKHBhc3NpbmdCdWlsZE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBwYXJzZWRQ
YXNzaW5nQnVpbGROYW1lID0gdGhpcy5fYnVpbGRib3QucGFyc2VCdWlsZE5hbWUocGFzc2luZ0J1
aWxkTmFtZSk7Ci0gICAgICAgICAgICBpZiAocGFyc2VkRmFpbGluZ0J1aWxkTmFtZS5yZXZpc2lv
biAtIHBhcnNlZFBhc3NpbmdCdWlsZE5hbWUucmV2aXNpb24gPiAxKQotICAgICAgICAgICAgICAg
IHJlZ3Jlc3Npb25SYW5nZVN0cmluZyA9ICdyJyArIHBhcnNlZFBhc3NpbmdCdWlsZE5hbWUucmV2
aXNpb24gKyAnLScgKyByZWdyZXNzaW9uUmFuZ2VTdHJpbmc7Ci0gICAgICAgIH0KKyAgICAgICAg
dmFyIGJ1Z0Zvcm0gPSBuZXcgVGVzdEZhaWx1cmVCdWdGb3JtKHRoaXMuX2J1Z3ppbGxhLCB0aGlz
Ll90cmFjLCB0ZXN0ZXIsIGZhaWxpbmdCdWlsZE5hbWUsIHBhc3NpbmdCdWlsZE5hbWUsIGZhaWxp
bmdUZXN0cyk7CiAKLSAgICAgICAgLy8gRklYTUU6IFNvbWUgb2YgdGhpcyBjb2RlIHNob3VsZCBt
b3ZlIGludG8gYSBuZXcgbWV0aG9kIG9uIHRoZSBCdWd6aWxsYSBjbGFzcy4KLQotICAgICAgICAv
LyBGSVhNRTogV2hlbiBhIG5ld2x5LWFkZGVkIHRlc3QgaGFzIGJlZW4gZmFpbGluZyBzaW5jZSBp
dHMgaW50cm9kdWN0aW9uLCBpdCBpc24ndCByZWFsbHkgYQotICAgICAgICAvLyAicmVncmVzc2lv
biIuIFdlIHNob3VsZCB1c2UgYSBkaWZmZXJlbnQgdGl0bGUgYW5kIGtleXdvcmRzIGluIHRoYXQg
Y2FzZS4KLSAgICAgICAgLy8gPGh0dHA6Ly93ZWJraXQub3JnL2IvNjE2NDU+Ci0KLSAgICAgICAg
dmFyIHRpdGxlUHJlZml4ID0gJ1JFR1JFU1NJT04gKCcgKyByZWdyZXNzaW9uUmFuZ2VTdHJpbmcg
KyAnKTogJzsKLSAgICAgICAgdmFyIHRpdGxlU3VmZml4ID0gJyBmYWlsaW5nIG9uICcgKyB0ZXN0
ZXIubmFtZTsKLSAgICAgICAgdmFyIHRpdGxlID0gdGl0bGVQcmVmaXggKyBmYWlsaW5nVGVzdHMu
am9pbignLCAnKSArIHRpdGxlU3VmZml4OwotICAgICAgICBpZiAodGl0bGUubGVuZ3RoID4gQnVn
emlsbGEubWF4aW11bUJ1Z1RpdGxlTGVuZ3RoKSB7Ci0gICAgICAgICAgICB2YXIgcGF0aFByZWZp
eCA9IGxvbmdlc3RDb21tb25QYXRoUHJlZml4KGZhaWxpbmdUZXN0cyk7Ci0gICAgICAgICAgICBp
ZiAocGF0aFByZWZpeCkKLSAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlUHJlZml4ICsgZmFp
bGluZ1Rlc3RzLmxlbmd0aCArICcgJyArIHBhdGhQcmVmaXggKyAnIHRlc3RzJyArIHRpdGxlU3Vm
Zml4OwotICAgICAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA+IEJ1Z3ppbGxhLm1heGltdW1CdWdU
aXRsZUxlbmd0aCkKLSAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlUHJlZml4ICsgZmFpbGlu
Z1Rlc3RzLmxlbmd0aCArICcgdGVzdHMnICsgdGl0bGVTdWZmaXg7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29uc29sZS5hc3NlcnQodGl0bGUubGVuZ3RoIDw9IEJ1Z3ppbGxhLm1heGltdW1CdWdUaXRs
ZUxlbmd0aCk7Ci0KLSAgICAgICAgdmFyIGZpcnN0U3VzcGVjdFJldmlzaW9uID0gcGFyc2VkUGFz
c2luZ0J1aWxkTmFtZSA/IHBhcnNlZFBhc3NpbmdCdWlsZE5hbWUucmV2aXNpb24gKyAxIDogcGFy
c2VkRmFpbGluZ0J1aWxkTmFtZS5yZXZpc2lvbjsKLSAgICAgICAgdmFyIGxhc3RTdXNwZWN0UmV2
aXNpb24gPSBwYXJzZWRGYWlsaW5nQnVpbGROYW1lLnJldmlzaW9uOwotCi0gICAgICAgIHZhciBl
bmRPZkZpcnN0U2VudGVuY2U7Ci0gICAgICAgIGlmIChwYXNzaW5nQnVpbGROYW1lKSB7Ci0gICAg
ICAgICAgICBlbmRPZkZpcnN0U2VudGVuY2UgPSAnc3RhcnRlZCBmYWlsaW5nIG9uICcgKyB0ZXN0
ZXIubmFtZTsKLSAgICAgICAgICAgIGlmIChmaXJzdFN1c3BlY3RSZXZpc2lvbiA9PT0gbGFzdFN1
c3BlY3RSZXZpc2lvbikKLSAgICAgICAgICAgICAgICBlbmRPZkZpcnN0U2VudGVuY2UgKz0gJyBp
biByJyArIGZpcnN0U3VzcGVjdFJldmlzaW9uICsgJyA8JyArIHRoaXMuX3RyYWMuY2hhbmdlc2V0
VVJMKGZpcnN0U3VzcGVjdFJldmlzaW9uKSArICc+JzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbmRPZkZpcnN0U2VudGVuY2UgKz0gJyBiZXR3ZWVuIHInICsgZmlyc3RTdXNw
ZWN0UmV2aXNpb24gKyAnIGFuZCByJyArIGxhc3RTdXNwZWN0UmV2aXNpb24gKyAnIChpbmNsdXNp
dmUpJzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbmRPZkZpcnN0U2VudGVuY2UgPSAo
ZmFpbGluZ1Rlc3RzLmxlbmd0aCA9PT0gMSA/ICdoYXMnIDogJ2hhdmUnKSArICcgYmVlbiBmYWls
aW5nIG9uICcgKyB0ZXN0ZXIubmFtZSArICcgc2luY2UgYXQgbGVhc3QgcicgKyBmaXJzdFN1c3Bl
Y3RSZXZpc2lvbiArICcgPCcgKyB0aGlzLl90cmFjLmNoYW5nZXNldFVSTChmaXJzdFN1c3BlY3RS
ZXZpc2lvbikgKyAnPic7Ci0KLSAgICAgICAgdmFyIGRlc2NyaXB0aW9uOwotICAgICAgICBpZiAo
ZmFpbGluZ1Rlc3RzLmxlbmd0aCA9PT0gMSkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZmFp
bGluZ1Rlc3RzWzBdICsgJyAnICsgZW5kT2ZGaXJzdFNlbnRlbmNlICsgJy5cblxuJzsKLSAgICAg
ICAgZWxzZSBpZiAoZmFpbGluZ1Rlc3RzLmxlbmd0aCA9PT0gMikKLSAgICAgICAgICAgIGRlc2Ny
aXB0aW9uID0gZmFpbGluZ1Rlc3RzLmpvaW4oJyBhbmQgJykgKyAnICcgKyBlbmRPZkZpcnN0U2Vu
dGVuY2UgKyAnLlxuXG4nOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRlc2NyaXB0aW9u
ID0gJ1RoZSBmb2xsb3dpbmcgdGVzdHMgJyArIGVuZE9mRmlyc3RTZW50ZW5jZSArICc6XG5cbicK
LSAgICAgICAgICAgICAgICArIGZhaWxpbmdUZXN0cy5tYXAoZnVuY3Rpb24odGVzdCkgeyByZXR1
cm4gJyAgICAnICsgdGVzdCB9KS5qb2luKCdcbicpCi0gICAgICAgICAgICAgICAgKyAnXG5cbic7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZpcnN0U3VzcGVjdFJldmlzaW9uICE9PSBsYXN0U3Vz
cGVjdFJldmlzaW9uKQotICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gdGhpcy5fdHJhYy5sb2dV
UkwoJ3RydW5rJywgZmlyc3RTdXNwZWN0UmV2aXNpb24sIGxhc3RTdXNwZWN0UmV2aXNpb24pICsg
J1xuXG4nOwotICAgICAgICBpZiAocGFzc2luZ0J1aWxkTmFtZSkKLSAgICAgICAgICAgIGRlc2Ny
aXB0aW9uICs9IGVuY29kZVVSSSh0ZXN0ZXIucmVzdWx0c1BhZ2VVUkwocGFzc2luZ0J1aWxkTmFt
ZSkpICsgJyBwYXNzZWRcbic7Ci0gICAgICAgIHZhciBmYWlsaW5nUmVzdWx0c0hUTUwgPSB0ZXN0
ZXIucmVzdWx0c1BhZ2VVUkwoZmFpbGluZ0J1aWxkTmFtZSk7Ci0gICAgICAgIGRlc2NyaXB0aW9u
ICs9IGVuY29kZVVSSShmYWlsaW5nUmVzdWx0c0hUTUwpICsgJyBmYWlsZWRcbic7Ci0KLSAgICAg
ICAgdmFyIGZvcm1EYXRhID0gewotICAgICAgICAgICAgcHJvZHVjdDogJ1dlYktpdCcsCi0gICAg
ICAgICAgICB2ZXJzaW9uOiAnNTI4KyAoTmlnaHRseSBidWlsZCknLAotICAgICAgICAgICAgY29t
cG9uZW50OiAnVG9vbHMgLyBUZXN0cycsCi0gICAgICAgICAgICBrZXl3b3JkczogJ0xheW91dFRl
c3RGYWlsdXJlLCBNYWtpbmdCb3RzUmVkLCBSZWdyZXNzaW9uJywKLSAgICAgICAgICAgIHNob3J0
X2Rlc2M6IHRpdGxlLAotICAgICAgICAgICAgY29tbWVudDogZGVzY3JpcHRpb24sCi0gICAgICAg
ICAgICBidWdfZmlsZV9sb2M6IGZhaWxpbmdSZXN1bHRzSFRNTCwKLSAgICAgICAgfTsKLQotICAg
ICAgICBpZiAoL1dpbmRvd3MvLnRlc3QodGVzdGVyLm5hbWUpKSB7Ci0gICAgICAgICAgICBmb3Jt
RGF0YS5yZXBfcGxhdGZvcm0gPSAnUEMnOwotICAgICAgICAgICAgaWYgKC9XaW5kb3dzIDcvLnRl
c3QodGVzdGVyLm5hbWUpKQotICAgICAgICAgICAgICAgIGZvcm1EYXRhLm9wX3N5cyA9ICdXaW5k
b3dzIDcnOwotICAgICAgICAgICAgZWxzZSBpZiAoL1dpbmRvd3MgWFAvLnRlc3QodGVzdGVyLm5h
bWUpKQotICAgICAgICAgICAgICAgIGZvcm1EYXRhLm9wX3N5cyA9ICdXaW5kb3dzIFhQJzsKLSAg
ICAgICAgfSBlbHNlIGlmICgvTGVvcGFyZC8udGVzdCh0ZXN0ZXIubmFtZSkpIHsKLSAgICAgICAg
ICAgIGZvcm1EYXRhLnJlcF9wbGF0Zm9ybSA9ICdNYWNpbnRvc2gnOwotICAgICAgICAgICAgaWYg
KC9Tbm93TGVvcGFyZC8udGVzdCh0ZXN0ZXIubmFtZSkpCi0gICAgICAgICAgICAgICAgZm9ybURh
dGEub3Bfc3lzID0gJ01hYyBPUyBYIDEwLjYnOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGZvcm1EYXRhLm9wX3N5cyA9ICdNYWMgT1MgWCAxMC41JzsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOworICAgICAg
ICB2YXIgZm9ybSA9IGJ1Z0Zvcm0uZG9tRWxlbWVudCgpOwogICAgICAgICByZXN1bHQuYXBwZW5k
Q2hpbGQoZm9ybSk7Ci0gICAgICAgIGZvcm0uY2xhc3NOYW1lID0gJ25ldy1idWctZm9ybSc7Ci0g
ICAgICAgIGZvcm0ubWV0aG9kID0gJ1BPU1QnOwotICAgICAgICBmb3JtLmFjdGlvbiA9IHRoaXMu
X2J1Z3ppbGxhLmJhc2VVUkwgKyAnZW50ZXJfYnVnLmNnaSc7Ci0gICAgICAgIGZvcm0udGFyZ2V0
ID0gJ19ibGFuayc7Ci0KLSAgICAgICAgZm9yICh2YXIga2V5IGluIGZvcm1EYXRhKSB7Ci0gICAg
ICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwotICAg
ICAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nOwotICAgICAgICAgICAgaW5wdXQubmFtZSA9
IGtleTsKLSAgICAgICAgICAgIGlucHV0LnZhbHVlID0gZm9ybURhdGFba2V5XTsKLSAgICAgICAg
ICAgIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpOwotICAgICAgICB9CiAKICAgICAgICAgdmFyIGxp
bmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgIGNvbnRhaW5lci5hcHBl
bmRDaGlsZChsaW5rKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9pbmRleC5odG1sIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvVGVzdEZhaWx1cmVzL2luZGV4Lmh0bWwKaW5kZXggMTI0NzgxMjJkMTA0ZWRlOGM5M2RhYzAy
MjhiZDk0Y2RjMmI2OTFkYS4uMjMyNThmNzk1NTMxZDIwNjRjNzEyZjE1MGVjYjI3NjJmYzRkM2Vh
OCAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL2luZGV4Lmh0bWwKKysrIGIvVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZh
aWx1cmVzL2luZGV4Lmh0bWwKQEAgLTM0LDggKzM0LDEwIEBAIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHNyYz0iTGF5b3V0VGVzdEhpc3RvcnlBbmFseXplci5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkxheW91dFRlc3RSZXN1bHRzTG9hZGVyLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTlJXVFJlc3VsdHNQYXJzZXIuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJOZXdCdWdGb3JtLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iT1JXVFJlc3VsdHNQYXJzZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJQZXJzaXN0ZW50Q2FjaGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUZXN0RmFp
bHVyZUJ1Z0Zvcm0uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJUcmFjLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iVmlld0NvbnRyb2xsZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVz
dEZhaWx1cmVzL3J1bi11bml0dGVzdHMuaHRtbCBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9ydW4tdW5pdHRl
c3RzLmh0bWwKaW5kZXggMjhjOTM0ZjhjMDA4YmM0MjFiZDE0N2YyMTEzYjU1ZGRkMTUyZmRlYi4u
MWQ0MTI1ZjYzOGRmYjI2MGVhNGYzM2MzNTFmZjMyZTg2MDczOWFiZCAxMDA2NDQKLS0tIGEvVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
VGVzdEZhaWx1cmVzL3J1bi11bml0dGVzdHMuaHRtbAorKysgYi9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvcnVu
LXVuaXR0ZXN0cy5odG1sCkBAIC0xMSw5ICsxMSwxNyBAQAogPGRpdiBpZD0icXVuaXQtdGVzdHJ1
bm5lci10b29sYmFyIj48L2Rpdj4KIDxoMiBpZD0icXVuaXQtdXNlckFnZW50Ij48L2gyPgogPG9s
IGlkPSJxdW5pdC10ZXN0cyI+PC9vbD4KKzwhLS0gRklYTUU6IFdlIHNob3VsZCBoYXZlIHRlc3Rz
IGZvciB0aGVzZSBmaWxlcyEgLS0+Cis8c2NyaXB0IHNyYz0iQnVnemlsbGEuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CiAKKzxzY3JpcHQgc3JjPSJC
dWlsZGJvdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQnVpbGRib3RfdW5pdHRlc3RzLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJCdWlsZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJCdWlsZGVyX3VuaXR0ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTmV3QnVn
Rm9ybS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTmV3QnVnRm9ybV91bml0dGVzdHMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlRlc3RGYWlsdXJlQnVnRm9ybS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iVGVzdEZhaWx1cmVCdWdGb3JtX3VuaXR0ZXN0cy5qcyI+PC9zY3JpcHQ+
CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNTcyODJlZTYwYTRhMTlhNTQyNDI5YTgzMWQ3ODA2YjgzMzdkMWM1OC4u
YjAzYWQ0MTU2OGY2NzkzZDA2MjQ3YzdjNDJiZTBlOGVlMzY3M2E3OCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDgwIEBACiAyMDEx
LTA3LTExICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAorICAgICAgICBFeHRyYWN0
IFRlc3RGYWlsdXJlcydzIGJ1Zy1maWxpbmcgY29kZSBpbnRvIHR3byBuZXcgY2xhc3NlcworCisg
ICAgICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY0MzAwPiBUZXN0RmFpbHVyZXMgcGFn
ZSdzIG5ldy1idWctZmlsaW5nIGNvZGUgaXMgYSBtZXNzIQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL0J1aWxkYm90LmpzOgorICAg
ICAgICAoQnVpbGRib3QucHJvdG90eXBlLnJlc3VsdHNEaXJlY3RvcnlVUkwpOiBDaGFuZ2VkIHRv
IHJldHVybiBhIFVSSS1lbmNvZGVkIFVSTC4gT3RoZXJ3aXNlIHRoZQorICAgICAgICBVUkwgaXNu
J3QgdmFsaWQgKGFuZCBpdCdzIGhhcmRlciB0byBtb2NrIHRoaXMgZnVuY3Rpb24pLgorCisgICAg
ICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvVGVzdEZhaWx1cmVzL0J1aWxkYm90X3VuaXR0ZXN0cy5qczoKKyAgICAgICAgQWRkZWQuIEp1
c3QgdGVzdHMgdGhlIGFib3ZlIGNoYW5nZSAoZm9yIG5vdykuCisKKyAgICAgICAgKiBCdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVy
ZXMvQnVpbGRlcl91bml0dGVzdHMuanM6CisgICAgICAgIEFkZGVkIGEgbGljZW5zZSBoZWFkZXIs
IGVuY2xvc2VkIGV2ZXJ5dGhpbmcgaW4gYSBjbG9zdXJlIHRvIGF2b2lkIHBvbGx1dGluZyB0aGUg
Z2xvYmFsCisgICAgICAgIG5hbWVzcGFjZSwgY2hhbmdlZCB0aGUgdGVzdCBuYW1lIHRvIGFjdHVh
bGx5IGRlc2NyaWJlIHRoZSBwYXNzaW5nIGNvbmRpdGlvbiwgYW5kIHJlcGxhY2VkCisgICAgICAg
IHVzZXMgb2YgZXF1YWxzKCkgd2l0aCBlcXVhbCgpLiAoVGhlIGxhdHRlciBpcyB0aGUgYWN0dWFs
IG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgbWF0Y2hlcworICAgICAgICBkZWVwRXF1YWwsIGV0
Yy4pCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvTmV3QnVnRm9ybS5qczogQWRkZWQuCisgICAgICAg
IChOZXdCdWdGb3JtKTogVGhpcyBjbGFzcyBrbm93cyBob3cgdG8gY29uc3RydWN0IGEgPGZvcm0+
IHVzZWQgZm9yIGZpbGluZyBuZXcgYnVncyBpbgorICAgICAgICBCdWd6aWxsYSBiYXNlZCBvbiBz
b21lIHBhcmFtZXRlcnMuCisgICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlwZS5kb21FbGVtZW50
KTogQ3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgPGZvcm0+IGVsZW1lbnQuIENvZGUgY2FtZSBmcm9t
CisgICAgICAgIFZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fZG9tRm9yTmV3QW5kRXhpc3RpbmdC
dWdzLgorCisgICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlwZS5zZXQgY29tcG9uZW50KToKKyAg
ICAgICAgKE5ld0J1Z0Zvcm0ucHJvdG90eXBlLmdldCBjb21wb25lbnQpOgorICAgICAgICAoTmV3
QnVnRm9ybS5wcm90b3R5cGUuc2V0IGtleXdvcmRzKToKKyAgICAgICAgKE5ld0J1Z0Zvcm0ucHJv
dG90eXBlLmdldCBrZXl3b3Jkcyk6CisgICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlwZS5zZXQg
dGl0bGUpOgorICAgICAgICAoTmV3QnVnRm9ybS5wcm90b3R5cGUuZ2V0IHRpdGxlKToKKyAgICAg
ICAgKE5ld0J1Z0Zvcm0ucHJvdG90eXBlLnNldCBkZXNjcmlwdGlvbik6CisgICAgICAgIChOZXdC
dWdGb3JtLnByb3RvdHlwZS5nZXQgZGVzY3JpcHRpb24pOgorICAgICAgICAoTmV3QnVnRm9ybS5w
cm90b3R5cGUuc2V0IHVybCk6CisgICAgICAgIChOZXdCdWdGb3JtLnByb3RvdHlwZS5nZXQgdXJs
KToKKyAgICAgICAgKE5ld0J1Z0Zvcm0ucHJvdG90eXBlLnNldCBwbGF0Zm9ybSk6CisgICAgICAg
IChOZXdCdWdGb3JtLnByb3RvdHlwZS5nZXQgcGxhdGZvcm0pOgorICAgICAgICAoTmV3QnVnRm9y
bS5wcm90b3R5cGUuc2V0IG9wZXJhdGluZ1N5c3RlbSk6CisgICAgICAgIChOZXdCdWdGb3JtLnBy
b3RvdHlwZS5nZXQgb3BlcmF0aW5nU3lzdGVtKToKKyAgICAgICAgU2ltcGxlIGFjY2Vzc29ycy4K
KworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9OZXdCdWdGb3JtX3VuaXR0ZXN0cy5qczoKKyAgICAgICAg
QWRkZWQuIFRlc3RzIHRoZSBhYm92ZSBjb2RlLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL1Rlc3RG
YWlsdXJlQnVnRm9ybS5qczogQWRkZWQuCisgICAgICAgIChUZXN0RmFpbHVyZUJ1Z0Zvcm0pOiBU
aGlzIGNsYXNzIGtub3dzIGhvdyB0byBjb25zdHJ1Y3QgYSA8Zm9ybT4gZWxlbWVudCB1c2VkIGZv
ciBmaWxpbmcgbmV3CisgICAgICAgIGJ1Z3Mgc3BlY2lmaWNhbGx5IGFib3V0IHRlc3QgZmFpbHVy
ZXMuIENvZGUgY2FtZSBmcm9tCisgICAgICAgIFZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fZG9t
Rm9yTmV3QW5kRXhpc3RpbmdCdWdzLgorICAgICAgICAoVGVzdEZhaWx1cmVCdWdGb3JtLnByb3Rv
dHlwZS5kb21FbGVtZW50KTogU2xpZ2h0bHkgY3VzdG9taXplcyB0aGUgPGZvcm0+IGVsZW1lbnQg
cmV0dXJuZWQKKyAgICAgICAgYnkgTmV3QnVnRm9ybS4KKyAgICAgICAgKFRlc3RGYWlsdXJlQnVn
Rm9ybS5wcm90b3R5cGUuX2NvbXB1dGVPcGVyYXRpbmdTeXN0ZW0pOgorICAgICAgICAoVGVzdEZh
aWx1cmVCdWdGb3JtLnByb3RvdHlwZS5fY29tcHV0ZVBsYXRmb3JtKToKKyAgICAgICAgKFRlc3RG
YWlsdXJlQnVnRm9ybS5wcm90b3R5cGUuX2NyZWF0ZUJ1Z1RpdGxlKToKKyAgICAgICAgKFRlc3RG
YWlsdXJlQnVnRm9ybS5wcm90b3R5cGUuX2ZhaWxpbmdSZXN1bHRzSFRNTFVSTCk6CisgICAgICAg
IChUZXN0RmFpbHVyZUJ1Z0Zvcm0ucHJvdG90eXBlLl9mYWlsaW5nUmV2aXNpb24pOgorICAgICAg
ICAoVGVzdEZhaWx1cmVCdWdGb3JtLnByb3RvdHlwZS5fcGFzc2luZ1JldmlzaW9uKToKKyAgICAg
ICAgKFRlc3RGYWlsdXJlQnVnRm9ybS5wcm90b3R5cGUuX3JlZ3Jlc3Npb25SYW5nZVN0cmluZyk6
CisgICAgICAgIENvZGUgY2FtZSBmcm9tIFZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fZG9tRm9y
TmV3QW5kRXhpc3RpbmdCdWdzLiBJIGJyb2tlIGl0IG91dCBpbnRvCisgICAgICAgIHNlcGFyYXRl
IGZ1bmN0aW9ucyB0byBicmVhayB1cCB0aGUgcmF0J3MgbmVzdCBhIGJpdC4KKworICAgICAgICAq
IEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rl
c3RGYWlsdXJlcy9UZXN0RmFpbHVyZUJ1Z0Zvcm1fdW5pdHRlc3RzLmpzOgorICAgICAgICBBZGRl
ZC4gVGVzdHMgdGhlIGFib3ZlIGNvZGUuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvVmlld0NvbnRy
b2xsZXIuanM6CisgICAgICAgIChWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2RvbUZvck5ld0Fu
ZEV4aXN0aW5nQnVncyk6IE1vdmVkIGNvZGUgZnJvbSBoZXJlIHRvCisgICAgICAgIFRlc3RGYWls
dXJlQnVnRm9ybS9OZXdCdWdGb3JtLCBhbmQgY2hhbmdlZCB0aGlzIGNvZGUgdG8gdXNlIGEgVGVz
dEZhaWx1cmVCdWdGb3JtLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL2luZGV4Lmh0bWw6IFB1bGwg
aW4KKyAgICAgICAgTmV3QnVnRm9ybS9UZXN0RmFpbHVyZUJ1Z0Zvcm0uanMuCisKKyAgICAgICAg
KiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9U
ZXN0RmFpbHVyZXMvcnVuLXVuaXR0ZXN0cy5odG1sOgorICAgICAgICBBZGRlZCBuZXcgdGVzdHMg
YW5kIHJlcXVpcmVkIGZpbGVzLgorCisyMDExLTA3LTExICBBZGFtIFJvYmVuICA8YXJvYmVuQGFw
cGxlLmNvbT4KKwogICAgICAgICBEb24ndCBjb3VudCBsZWFrcyBhcyB0ZXN0IGZhaWx1cmVzIG9u
IFRlc3RGYWlsdXJlcydzIGZyb250IHBhZ2UKIAogICAgICAgICBBcyBhIGJvbnVzLCB0aGlzIHBh
dGNoIGFkZHMgb3VyIGZpcnN0IHVuaXQgdGVzdC4K
</data>
<flag name="review"
          id="95050"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>