<?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>64477</bug_id>
          
          <creation_ts>2011-07-13 12:07:00 -0700</creation_ts>
          <short_desc>bring flakiness_dashboard.html closer to webkit style</short_desc>
          <delta_ts>2011-07-13 16:31:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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="Ojan Vafai">ojan</reporter>
          <assigned_to name="Ojan Vafai">ojan</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>436589</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-13 12:07:00 -0700</bug_when>
    <thetext>bring flakiness_dashboard.html closer to webkit style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436591</commentid>
    <comment_count>1</comment_count>
      <attachid>100702</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-13 12:10:18 -0700</bug_when>
    <thetext>Created attachment 100702
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436625</commentid>
    <comment_count>2</comment_count>
      <attachid>100702</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-13 13:22:06 -0700</bug_when>
    <thetext>Comment on attachment 100702
Patch

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

This looks great.  Below are a bunch of nits that I saw when scrolling through.  I only made it halfway though.  (I&apos;m pretty sure this app is full of XSS, but I&apos;m not sure if you&apos;re going to worry about that at this point.)

&gt; Tools/TestResultServer/static-dashboards/dashboard_base.js:288
&gt; -      console.log(&apos;Invalid query parameter: &apos; + params[i]);
&gt; +      console.log(&apos;Invalid query parameter: &apos; + paramsList[i]);

parameterList ?

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:343
&gt; +var BUILD_TYPES = {&apos;DEBUG&apos;: &apos;DBG&apos;, &apos;RELEASE&apos;: &apos;RELEASE&apos;};
&gt; +var MIN_SECONDS_FOR_SLOW_TEST = 4;
&gt; +var MIN_SECONDS_FOR_SLOW_TEST_DEBUG = 2 * MIN_SECONDS_FOR_SLOW_TEST;
&gt; +var FAIL_RESULTS = [&apos;IMAGE&apos;, &apos;IMAGE+TEXT&apos;, &apos;TEXT&apos;, &apos;SIMPLIFIED&apos;, &apos;MISSING&apos;];
&gt; +var CHUNK_SIZE = 25;
&gt; +var MAX_RESULTS = 1500;

Do we use all-caps or kMaxResults ?  I&apos;m not sure we have a very clearly defined style guide for JavaScript.

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:401
&gt;          validateParameter(currentState, key, value,
&gt;              function() {

I would have merged these lines.

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:473
&gt; +var perBuilderPlatformAndBuildType = {};
&gt; +var perBuilderFailures = {};

Should we prefix globals with g_ ?

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:549
&gt; +/**
&gt; + * Returns the expectation string for the given single character result.
&gt; + * This string should match the expectations that are put into
&gt; + * test_expectations.py.
&gt; + *
&gt; + * For example, if we start explicitly listing IMAGE result failures,
&gt; + * this function should start returning &apos;IMAGE&apos;.
&gt; + */

WebKit favors C++ style comments in C++ code.

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:556
&gt; -      return &apos;TEXT&apos;;
&gt; +        return &apos;TEXT&apos;;

I thought you defined constants for these things so you didn&apos;t need to have string literals?

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:730
&gt;      if (html) {

prefer early return.

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:818
&gt; +                resultsObj.bugs = bugs;

resultsObj =&gt; resultsObject

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:835
&gt; +function addFallbacks(addFn, candidates, validValues)

addFn =&gt; ??

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1007
&gt; +        // TODO: Switch to getTestResultsByBuild

TODO =&gt; FIXME

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1110
&gt; +                // TODO(ojan): Once all the FAIL lines are removed from

TODO =&gt; FIXME

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1111
&gt; +                // test_expectations.txt, delete all the legacyExpectationsSemantics

Has this happened?

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1198
&gt; +var bugUrlPrefix = &apos;&lt;a href=&quot;http://&apos;;
&gt; +var bugUrlPostfix = &apos;/$2&quot;&gt;$2&lt;/a&gt; &apos;;
&gt; +var webkitBugUrlPostfix = &apos;/$2&quot;&gt;WK $2&lt;/a&gt; &apos;;
&gt; +var internalBugReplaceValue = bugUrlPrefix + &apos;b&apos; + bugUrlPostfix;
&gt; +var externalBugReplaceValue = bugUrlPrefix + &apos;crbug.com&apos; + bugUrlPostfix;
&gt; +var webkitBugReplaceValue = bugUrlPrefix + &apos;webkit.org/b&apos; + webkitBugUrlPostfix;

This are constants, right?

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1218
&gt; +function getLinkHTMLToOpenWindow(url, text)
&gt; +{
&gt; +    return &apos;&lt;div class=link onclick=&quot;window.open(\&apos;&apos; + url + &apos;\&apos;)&quot;&gt;&apos; + text + &apos;&lt;/div&gt;&apos;;
&gt; +}

Generally, I try to avoid building HTML by string concatenation, but that&apos;s more than just a stylistic change.  In this case, it&apos;s especially dangerous because you&apos;re concating strings into a JavaScript context!

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1275
&gt; +function getPathToFailureLog(testName)

WebKit avoids get prefixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436752</commentid>
    <comment_count>3</comment_count>
      <attachid>100702</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-13 16:26:22 -0700</bug_when>
    <thetext>Comment on attachment 100702
Patch

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

&gt;&gt; Tools/TestResultServer/static-dashboards/dashboard_base.js:288
&gt;&gt; +      console.log(&apos;Invalid query parameter: &apos; + paramsList[i]);
&gt; 
&gt; parameterList ?

Yeah. wanted to keep this change minimal as possible. Will be trying to fix up other files&apos; style in followup patches.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:343
&gt;&gt; +var MAX_RESULTS = 1500;
&gt; 
&gt; Do we use all-caps or kMaxResults ?  I&apos;m not sure we have a very clearly defined style guide for JavaScript.

I don&apos;t have a preference. In code-review.js and results.js we&apos;ve used allcaps. I see the your new code uses k...

I&apos;ll leave this for now. Happy to change it later if we decide clearly on one or the other.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:473
&gt;&gt; +var perBuilderFailures = {};
&gt; 
&gt; Should we prefix globals with g_ ?

I think so. Done.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:549
&gt;&gt; + */
&gt; 
&gt; WebKit favors C++ style comments in C++ code.

Yeah...was trying not to do too much in a single patch. I&apos;ll fix this before committing.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:556
&gt;&gt; +        return &apos;TEXT&apos;;
&gt; 
&gt; I thought you defined constants for these things so you didn&apos;t need to have string literals?

This code isn&apos;t good about it. It&apos;s this code that convinced me to insist you do it in all the new code. :)

I&apos;ll fix this though. But in a followup patch since I&apos;d be more worried about breaking things.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:818
&gt;&gt; +                resultsObj.bugs = bugs;
&gt; 
&gt; resultsObj =&gt; resultsObject

done

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:835
&gt;&gt; +function addFallbacks(addFn, candidates, validValues)
&gt; 
&gt; addFn =&gt; ??

Made it callback for now. Could still be better, but that can be a future patch.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1110
&gt;&gt; +                // TODO(ojan): Once all the FAIL lines are removed from
&gt; 
&gt; TODO =&gt; FIXME

Fixed here an elsewhere.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1111
&gt;&gt; +                // test_expectations.txt, delete all the legacyExpectationsSemantics
&gt; 
&gt; Has this happened?

No, and in fact, it seems likely that we&apos;ll return to only allowing FAIL and getting rid of the other failure types.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1198
&gt;&gt; +var webkitBugReplaceValue = bugUrlPrefix + &apos;webkit.org/b&apos; + webkitBugUrlPostfix;
&gt; 
&gt; This are constants, right?

Fixed

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1218
&gt;&gt; +}
&gt; 
&gt; Generally, I try to avoid building HTML by string concatenation, but that&apos;s more than just a stylistic change.  In this case, it&apos;s especially dangerous because you&apos;re concating strings into a JavaScript context!

It&apos;s true. There&apos;s a lot of code/design cleanup to do in this file. I was just focusing on style for now.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.html:1275
&gt;&gt; +function getPathToFailureLog(testName)
&gt; 
&gt; WebKit avoids get prefixes.

fixed in all instances except a couple that are a bit harder to cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436758</commentid>
    <comment_count>4</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-13 16:31:11 -0700</bug_when>
    <thetext>Committed r90964: &lt;http://trac.webkit.org/changeset/90964&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100702</attachid>
            <date>2011-07-13 12:10:18 -0700</date>
            <delta_ts>2011-07-13 16:26:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64477-20110713121017.patch</filename>
            <type>text/plain</type>
            <size>161614</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA5MzgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0NGU0M2ZhOTZhMDg1NWQzM2Q4YTNkMGVlNzg4MDUzMmQ4
ZGFmYThkLi43MmRhY2ViZWJiNWE5OWIyYThmODk2ZDliNWQ0ZjA1NTQ1ZDNiY2NiIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMDctMTMgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBicmluZyBmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwgY2xvc2VyIHRvIHdlYmtpdCBzdHlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0NzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanM6CisgICAgICAgIEZp
eCBiYWQgdmFyaWFibGUgbmFtZSB0aGF0IHdvdWxkIGhpdCBvbmx5IHdoZW4gcnVubmluZyB0aGUg
dGVzdHMuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFr
aW5lc3NfZGFzaGJvYXJkLmh0bWw6CisgICAgICAgIE5vIGNvZGUvbG9naWMgY2hhbmdlcy4gQWxs
IG1vdmluZy9yZW1vdmluZyBicmFja2V0cywgaW5kZW50cyBhbmQgbW92aW5nIHRoaW5ncworICAg
ICAgICB0byBvbmUgbGluZS4KKwogMjAxMS0wNy0xMyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXpr
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVsaW1pbmF0ZSBUZXN0RXhwZWN0YXRpb25zRmls
ZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMv
ZGFzaGJvYXJkX2Jhc2UuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2Rhc2hib2FyZF9iYXNlLmpzCmluZGV4IDMwYzAwNGM4NmI2YjM1ZWM4ZDE4ZGUxYjEzMWM3
ZGMyYjE5YTUyNzQuLjhiYzkwNDMyMzg0NWY5OTJmOTk4Nzk4YmU3N2I5ZDFlYjBjNzlhZjIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJv
YXJkX2Jhc2UuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy9kYXNoYm9hcmRfYmFzZS5qcwpAQCAtMjg1LDcgKzI4NSw3IEBAIGZ1bmN0aW9uIHBhcnNlUGFy
YW1ldGVycyhwYXJhbWV0ZXJTdHIpIHsKICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXNMaXN0
Lmxlbmd0aDsgaSsrKSB7CiAgICAgdmFyIHRoaXNQYXJhbSA9IHBhcmFtc0xpc3RbaV0uc3BsaXQo
Jz0nKTsKICAgICBpZiAodGhpc1BhcmFtLmxlbmd0aCAhPSAyKSB7Ci0gICAgICBjb25zb2xlLmxv
ZygnSW52YWxpZCBxdWVyeSBwYXJhbWV0ZXI6ICcgKyBwYXJhbXNbaV0pOworICAgICAgY29uc29s
ZS5sb2coJ0ludmFsaWQgcXVlcnkgcGFyYW1ldGVyOiAnICsgcGFyYW1zTGlzdFtpXSk7CiAgICAg
ICBjb250aW51ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sIGIvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKaW5k
ZXggMzU0MjBkMmNkNWE0ZGRjZWQ0Mzk4ZWE4OGNkMzYyZGU0NTMyY2IyNi4uYzE2MjY5YmViY2U0
NzIwZDEyMmE0M2U2OWQwN2VmNGQxOTBlMzM4MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKKysrIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJv
YXJkLmh0bWwKQEAgLTMwLDMyNCArMzAsMzI1IEBAIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiA8aHRtbD4KIAogPGhl
YWQ+Ci0gIDx0aXRsZT5DaHJvbWl1bS9XZWJLaXQgVGVzdCBIaXN0b3J5PC90aXRsZT4KLSAgPHN0
eWxlPgotICAgIGJvZHkgewotICAgICAgZm9udC1mYW1pbHk6IGFyaWFsOwotICAgICAgZm9udC1z
aXplOiAxM3B4OwotICAgIH0KLSAgICBoMiB7Ci0gICAgICBmb250LXNpemU6IDE2cHg7Ci0gICAg
ICBtYXJnaW4tYm90dG9tOiAuMjVlbTsKLSAgICB9Ci0gICAgaDMgewotICAgICAgZm9udC1zaXpl
OiAxM3B4OwotICAgICAgbWFyZ2luOiAwOwotICAgIH0KLSAgICBpbnB1dCB7Ci0gICAgICBtYXJn
aW4tcmlnaHQ6IDE1cHg7Ci0gICAgfQotICAgIC5mb3JtcyB7Ci0gICAgICBkaXNwbGF5OiAtd2Vi
a2l0LWJveDsKLSAgICB9Ci0gICAgLmZvcm1zID4gKiB7Ci0gICAgICBkaXNwbGF5OiAtd2Via2l0
LWJveDsKLSAgICB9Ci0gICAgLmZvcm1zIHNwYW4gewotICAgICAgcGFkZGluZzogMHB4IDNweDsK
LSAgICB9Ci0gICAgI3Rlc3RzLWZvcm0gewotICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0g
ICAgICAtd2Via2l0LWJveC1mbGV4OiAxOwotICAgIH0KLSAgICAjdGVzdHMtZm9ybSA+ICogewot
ICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0gICAgfQotICAgICN0ZXN0cy1pbnB1dCB7Ci0g
ICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAgIC13ZWJraXQtYm94LWZsZXg6IDE7Ci0g
ICAgfQotICAgICNyZXN1bHQtaW5wdXQgewotICAgICAgd2lkdGg6IDdlbTsKLSAgICB9Ci0gICAg
LnRlc3QtbGluayB7Ci0gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwotICAgIH0KLSAgICAudGVz
dC1saW5rLmJ1aWxkZXItbmFtZSB7Ci0gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIH0K
LSAgICAudGVzdC1saW5rLCAub3B0aW9ucy1jb250YWluZXIgewotICAgICAgcGFkZGluZzogMCAy
cHg7Ci0gICAgfQotICAgIC50ZXN0LXRhYmxlIHsKLSAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7
Ci0gICAgICBib3JkZXItc3BhY2luZzogMXB4OwotICAgIH0KLSAgICAudGVzdC10YWJsZSB7Ci0g
ICAgICB3aWR0aDogMTAwJTsKLSAgICB9Ci0gICAgLnRlc3QtdGFibGUgdHIgewotICAgICAgYm9y
ZGVyOiAxcHggc29saWQgcmVkOwotICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U4RThFODsKLSAg
ICB9Ci0gICAgLnRlc3QtdGFibGUgdGJvZHkgdHI6aG92ZXIgewotICAgICAgb3BhY2l0eTogLjc7
Ci0gICAgfQotICAgIC50ZXN0LXRhYmxlIHRoIHsKLSAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6
IG5vbmU7Ci0gICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwotICAgIH0KLSAgICAubGluaywg
LnNvcnRhYmxlIC5oZWFkZXItdGV4dCB7Ci0gICAgICBjb2xvcjogYmx1ZTsKLSAgICAgIHRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotICAgICAgY3Vyc29yOiBwb2ludGVyOwotICAgIH0KLSAg
ICAudGFibGUtaGVhZGVyLWNvbnRlbnQsCi0gICAgLnRhYmxlLWhlYWRlci1jb250ZW50ICogewot
ICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0gICAgfQotICAgIC50YWJsZS1oZWFkZXItY29u
dGVudCAqIHsKLSAgICAgIC13ZWJraXQtYm94LWZsZXg6IDE7Ci0gICAgICBjdXJzb3I6IHBvaW50
ZXI7Ci0gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwotICAgIH0KLSAgICAucmVzdWx0cyB7Ci0g
ICAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgICBwYWRkaW5nOiAwIDFweDsKLSAgICAgIGZvbnQt
c2l6ZTogMTBweDsKLSAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB9Ci0gICAgI2xlZ2Vu
ZCB7Ci0gICAgICBwb3NpdGlvbjogZml4ZWQ7Ci0gICAgICB0b3A6IDVweDsKLSAgICAgIHJpZ2h0
OiA1cHg7Ci0gICAgICB3aWR0aDogNDAwcHg7Ci0gICAgICBwYWRkaW5nOiAycHg7Ci0gICAgICBi
b3JkZXI6IDJweCBzb2xpZCBncmV5OwotICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0g
ICAgICB6LWluZGV4OiAxOwotICAgIH0KLSAgICAjbGVnZW5kIHVsLCAjbGVnZW5kIG9sIHsKLSAg
ICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7Ci0gICAgfQotICAg
ICNsZWdlbmQtY29udGVudHMgKiB7Ci0gICAgICBtYXJnaW46IDNweCAwOwotICAgICAgcGFkZGlu
ZzogMCAycHg7Ci0gICAgICBmbG9hdDogbGVmdDsKLSAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGdy
ZXk7Ci0gICAgfQotICAgIC50ZXN0LXRhYmxlIC53cm9uZy1leHBlY3RhdGlvbnMsCi0gICAgLndy
b25nLWV4cGVjdGF0aW9ucyB7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjcGluazsKLSAgICB9
Ci0gICAgLlAgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzhmZGY1ZjsKLSAgICB9Ci0gICAg
Lk4gewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKLSAgICB9Ci0gICAgLkMgewotICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzM0MzsKLSAgICB9Ci0gICAgLlQgewotICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogI2ZmZmM2YzsKLSAgICB9Ci0gICAgLkkgewotICAgICAgYmFja2dyb3Vu
ZC1jb2xvcjogIzY5ZjsKLSAgICB9Ci0gICAgLlMgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjog
I2M2YzsKLSAgICB9Ci0gICAgLkYgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U5ODA4MDsK
LSAgICB9Ci0gICAgLk8gewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzhhNzcwMDsKLSAgICB9
Ci0gICAgLlogewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk2ZjsKLSAgICB9Ci0gICAgI2xl
Z2VuZCAubWVyZ2UgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Ci0gICAgICBjb2xv
cjogd2hpdGU7Ci0gICAgfQotICAgIC50ZXN0LXRhYmxlIC5tZXJnZSB7Ci0gICAgICBib3JkZXIt
cmlnaHQ6IHNvbGlkIDJweCAjMDAwOwotICAgICAgcGFkZGluZy1yaWdodDogMDsKLSAgICB9Ci0g
ICAgLnNlcGFyYXRvciB7Ci0gICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7Ci0gICAg
ICBoZWlnaHQ6IDBweDsKLSAgICB9Ci0gICAgLmRpZmZlcmVudC1wbGF0Zm9ybSB7Ci0gICAgICBj
b2xvcjogZ3JheTsKLSAgICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICB9Ci0gICAgI3Bhc3Npbmct
dGVzdHMgewotICAgICAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDM7Ci0gICAgICAtd2Via2l0LWNv
bHVtbi1nYXA6IDI1cHg7Ci0gICAgICAtd2Via2l0LWNvbHVtbi1ydWxlOiAxcHggZGFzaGVkIGJs
YWNrOwotICAgICAgLW1vei1jb2x1bW4tY291bnQ6IDM7Ci0gICAgICAtbW96LWNvbHVtbi1nYXA6
IDI1cHg7Ci0gICAgICAtbW96LWNvbHVtbi1ydWxlOiAxcHggZGFzaGVkIGJsYWNrOwotICAgIH0K
LSAgICAubm90LWZvdW5kIHsKLSAgICAgIGNvbG9yOiByZWQ7Ci0gICAgICBmb250LXNpemU6IGxh
cmdlOwotICAgIH0KLSAgICAjbG9hZGluZy11aSB7Ci0gICAgICBwb3NpdGlvbjogZml4ZWQ7Ci0g
ICAgICB0b3A6IDA7Ci0gICAgICBsZWZ0OiAwOwotICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVs
bG93OwotICAgICAgcGFkZGluZzogNXB4OwotICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAg
ICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgfQotICAgICNwb3B1cCB7Ci0gICAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiB3aGl0ZTsKLSAgICAgIHotaW5kZXg6IDE7Ci0gICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gICAgICBib3JkZXI6IDNweCBzb2xpZCBncmV5OwotICAgICAgcGFkZGluZzogM3B4
OwotICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiA1cHggNXB4IDVweCByZ2JhKDAsIDAsIDAsIDAu
NSk7Ci0gICAgICAtbW96LWJveC1zaGFkb3c6IDVweCA1cHggNXB4IHJnYmEoMCwgMCwgMCwgMC41
KTsKLSAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OwotICAgICAgLW1vei1ib3JkZXIt
cmFkaXVzOiA1cHg7Ci0gICAgfQotICAgICNwb3B1cCA+IHVsIHsKLSAgICAgIG1hcmdpbjogMDsK
LSAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKLSAgICB9Ci0gICAgLmV4cGVjdGF0aW9ucy1jb250
YWluZXIgewotICAgICAgY2xlYXI6IGJvdGg7Ci0gICAgfQotICAgIC5leHBlY3RhdGlvbnMtaXRl
bSB7Ci0gICAgICBmbG9hdDogbGVmdDsKLSAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyZXk7Ci0g
ICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAgIGRpc3BsYXk6IC1tb3otYm94OwotICAg
ICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNh
bDsKLSAgICAgIC1tb3otYm94LW9yaWVudDogdmVydGljYWw7Ci0gICAgfQotICAgIC5leHBlY3Rh
dGlvbnMtaXRlbSAuZXhwZWN0YXRpb24gewotICAgICAgd2lkdGg6IDQwMHB4OwotICAgICAgaGVp
Z2h0OiAzMDBweDsKLSAgICAgIGJvcmRlcjogMDsKLSAgICAgIGJvcmRlci10b3A6IDFweCBzb2xp
ZCBncmV5OwotICAgICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgICBkaXNwbGF5OiAtd2Via2l0LWJv
eDsKLSAgICAgIGRpc3BsYXk6IC1tb3otYm94OwotICAgICAgLXdlYmtpdC1ib3gtZmxleDogMTsK
LSAgICAgIC1tb3otYm94LWZsZXg6IDE7Ci0gICAgfQotICAgIHByZS5leHBlY3RhdGlvbiB7Ci0g
ICAgICBwYWRkaW5nOiA4cHg7Ci0gICAgICBtYXJnaW46IDA7Ci0gICAgICBib3gtc2l6aW5nOiBi
b3JkZXItYm94OwotICAgIH0KLSAgICAuZXhwZWN0YXRpb25zLWl0ZW0gLmxhcmdlIHsKLSAgICAg
IHdpZHRoOiA4MDBweDsKLSAgICAgIGhlaWdodDogNjAwcHg7Ci0gICAgfQotICAgIC5ub24td2Vi
a2l0LXJlc3VsdHMgewotICAgICAgd2lkdGg6IDk5JTsKLSAgICB9Ci0gICAgLnVzZWQtcGxhdGZv
cm0gewotICAgICAgZmxvYXQ6IHJpZ2h0OwotICAgICAgY29sb3I6IGRhcmtibHVlOwotICAgICAg
bWFyZ2luOiAwIDVweDsKLSAgICB9Ci0gICAgLmV4cGVjdGF0aW9ucy10aXRsZSB7Ci0gICAgICAv
KiBIYWNrIHRvIG1ha2UgYSBjb250YWluaW5nIGJsb2NrIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVk
IGVsZW1lbnRzLiAqLwotICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgICAgY2xlYXI6IGJv
dGg7Ci0gICAgfQotICAgIC50aXRsZSB7Ci0gICAgICAvKiBQb3NpdGlvbiBhYnNvbHV0ZWx5IHNv
IHRoZSBjb250YWluZXIgZG9lcyBub3QgZ3JvdyB0byBjb250YWluIHRoaXMuICovCi0gICAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgfQotICAgIC5wbGF0Zm9ybXMgewotICAgICAgcG9zaXRp
b246IGFic29sdXRlOwotICAgICAgcmlnaHQ6IDA7Ci0gICAgICB6LWluZGV4OiAxOwotICAgIH0K
LSAgICAuZmlsZS1idWcgewotICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICBmb250LXNp
emU6IDExcHg7Ci0gICAgfQotICAgIC5wbmdjaGVja3N1bSB7Ci0gICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gICAgICByaWdodDogMDsKLSAgICAgIGJvdHRvbTogMDsKLSAgICAgIGJhY2tncm91
bmQtY29sb3I6ICNmZmZmYzg7Ci0gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47Ci0gICAgfQotICAg
IC5leHBlY3RhdGlvbnMtaXRlbTpob3ZlciAucG5nY2hlY2tzdW0gewotICAgICAgdmlzaWJpbGl0
eTogdmlzaWJsZTsKLSAgICB9Ci0gIDwvc3R5bGU+Ci0KLSAgPHNjcmlwdCBzcmM9ImJ1aWxkZXJz
LmpzIj48L3NjcmlwdD4KLSAgPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3Njcmlw
dD4KLSAgPHNjcmlwdD4KLSAgLyoqCi0gICAqIEBmaWxlb3ZlcnZpZXcgQ3JlYXRlcyBhIGRhc2hi
b2FyZCBmb3IgbXVsdGlwbGUgcnVucyBvZiBhIGdpdmVuIHNldCBvZiB0ZXN0cwotICAgKiBvbiB0
aGUgYnVpbGRib3RzLiBQdWxscyBpbiBKU09OUC1pc2ggZmlsZXMgd2l0aCB0aGUgcmVzdWx0cyBm
b3IgcnVubmluZwotICAgKiB0ZXN0cyBvbiBhIGdpdmVuIGJ1aWxkZXIgKGkuZS4gQUREX1JFU1VM
VFMoanNvbl9oZXJlKSkgYW5kIHRoZSBleHBlY3RhdGlvbnMKLSAgICogZm9yIGFsbCB0ZXN0cyBv
biBhbGwgYnVpbGRlcnMgKGkuZS4gQUREX0VYUEVDVEFUSU9OUyhqc29uX2hlcmUpKS4KLSAgICoK
LSAgICogVGhpcyBzaG93cyBmbGFraW5lc3Mgb2YgdGhlIHRlc3RzIGFzIHdlbGwgYXMgcnVudGlt
ZXMgZm9yIHNsb3cgdGVzdHMuCi0gICAqCi0gICAqIEFsc28sIGVhY2ggY29sdW1uIGluIHRoZSBk
YXNoYm9hcmQgaXMgc29ydGFibGUuCi0gICAqCi0gICAqIEN1cnJlbnRseSwgb25seSB3ZWJraXQg
dGVzdHMgYXJlIHN1cHBvcnRlZCwgYnV0IGFkZGluZyBvdGhlciB0ZXN0IHR5cGVzCi0gICAqIHNo
b3VsZCBqdXN0IHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICogICAtZ2VuZXJhdGUg
cmVzdWx0cy5qc29uIGFuZCBleHBlY3RhdGlvbnMuanNvbiBmb3IgdGhlc2UgdGVzdHMKLSAgICog
ICAtY29weSB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbgotICAgKiAgIC1hZGQgdGhl
IGJ1aWxkZXIgbmFtZSB0byB0aGUgbGlzdCBvZiBidWlsZGVycyBiZWxvdy4KLSAgICovCi0KLSAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gIC8vIENPTlNUQU5UUwotICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLSAgdmFyIEFMTCA9ICdBTEwnOwotICB2YXIgRk9SV0FSRCA9ICdmb3J3YXJkJzsKLSAg
dmFyIEJBQ0tXQVJEID0gJ2JhY2t3YXJkJzsKLSAgdmFyIEdURVNUX0ZMQUtZX01BUktFUiA9ICdc
LkZMQUtZXyc7Ci0gIHZhciBHVEVTVF9GQUlMU19NQVJLRVIgPSAnXC5GQUlMU18nOwotICB2YXIg
VEVTVF9VUkxfQkFTRV9QQVRIX1RSQUMgPSAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2Vy
L3RydW5rL0xheW91dFRlc3RzLyc7Ci0gIHZhciBURVNUX1VSTF9CQVNFX1BBVEggPSAiaHR0cDov
L3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL0xheW91dFRlc3RzLyI7Ci0g
IHZhciBURVNUX1JFU1VMVFNfQkFTRV9QQVRIID0gJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcv
Zi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzLyc7Ci0gIHZhciBQTEFURk9STVMgPSB7Ci0g
ICAgJ01BQyc6ICdNQUMnLAotICAgICdMSU5VWCc6ICdMSU5VWCcsCi0gICAgJ1dJTic6ICdXSU4n
LAotICAgICdXSU4tWFAnOiAnV0lOLVhQJywKLSAgICAnV0lOLVZJU1RBJzogJ1dJTi1WSVNUQScK
LSAgfTsKLSAgdmFyIFBMQVRGT1JNX0ZBTExCQUNLUyA9IHsKLSAgICAnV0lOJzogJ0FMTCcsCi0g
ICAgJ1dJTi1YUCc6ICdXSU4nLAotICAgICdXSU4tVklTVEEnOiAnV0lOJywKLSAgICAnTElOVVgn
OiAnQUxMJywKLSAgICAnTUFDJzogJ0FMTCcKLSAgfTsKLSAgdmFyIEJVSUxEX1RZUEVTID0geydE
RUJVRyc6ICdEQkcnLCAnUkVMRUFTRSc6ICdSRUxFQVNFJ307Ci0gIHZhciBNSU5fU0VDT05EU19G
T1JfU0xPV19URVNUID0gNDsKLSAgdmFyIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcg
PSAyICogTUlOX1NFQ09ORFNfRk9SX1NMT1dfVEVTVDsKLSAgdmFyIEZBSUxfUkVTVUxUUyA9IFsn
SU1BR0UnLCAnSU1BR0UrVEVYVCcsICdURVhUJywgJ1NJTVBMSUZJRUQnLCAnTUlTU0lORyddOwot
ICB2YXIgQ0hVTktfU0laRSA9IDI1OwotICB2YXIgTUFYX1JFU1VMVFMgPSAxNTAwOwotCi0gIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotICAvLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJv
YXJkX2Jhc2UuanMgdG8gb3ZlcnJpZGUuCi0gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICBmdW5j
dGlvbiBnZW5lcmF0ZVBhZ2UoKSB7Cis8dGl0bGU+Q2hyb21pdW0vV2ViS2l0IFRlc3QgSGlzdG9y
eTwvdGl0bGU+Cis8c3R5bGU+Citib2R5IHsKKyAgICBmb250LWZhbWlseTogYXJpYWw7CisgICAg
Zm9udC1zaXplOiAxM3B4OworfQoraDIgeworICAgIGZvbnQtc2l6ZTogMTZweDsKKyAgICBtYXJn
aW4tYm90dG9tOiAuMjVlbTsKK30KK2gzIHsKKyAgICBmb250LXNpemU6IDEzcHg7CisgICAgbWFy
Z2luOiAwOworfQoraW5wdXQgeworICAgIG1hcmdpbi1yaWdodDogMTVweDsKK30KKy5mb3JtcyB7
CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Cit9CisuZm9ybXMgPiAqIHsKKyAgICBkaXNwbGF5
OiAtd2Via2l0LWJveDsKK30KKy5mb3JtcyBzcGFuIHsKKyAgICBwYWRkaW5nOiAwcHggM3B4Owor
fQorI3Rlc3RzLWZvcm0geworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAgIC13ZWJraXQt
Ym94LWZsZXg6IDE7Cit9CisjdGVzdHMtZm9ybSA+ICogeworICAgIGRpc3BsYXk6IC13ZWJraXQt
Ym94OworfQorI3Rlc3RzLWlucHV0IHsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKKyAgICAt
d2Via2l0LWJveC1mbGV4OiAxOworfQorI3Jlc3VsdC1pbnB1dCB7CisgICAgd2lkdGg6IDdlbTsK
K30KKy50ZXN0LWxpbmsgeworICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cit9CisudGVzdC1saW5r
LmJ1aWxkZXItbmFtZSB7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKy50ZXN0LWxpbmss
IC5vcHRpb25zLWNvbnRhaW5lciB7CisgICAgcGFkZGluZzogMCAycHg7Cit9CisudGVzdC10YWJs
ZSB7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICBib3JkZXItc3BhY2luZzogMXB4Owor
fQorLnRlc3QtdGFibGUgeworICAgIHdpZHRoOiAxMDAlOworfQorLnRlc3QtdGFibGUgdHIgewor
ICAgIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRThFOEU4
OworfQorLnRlc3QtdGFibGUgdGJvZHkgdHI6aG92ZXIgeworICAgIG9wYWNpdHk6IC43OworfQor
LnRlc3QtdGFibGUgdGggeworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgLW1v
ei11c2VyLXNlbGVjdDogbm9uZTsKK30KKy5saW5rLCAuc29ydGFibGUgLmhlYWRlci10ZXh0IHsK
KyAgICBjb2xvcjogYmx1ZTsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBj
dXJzb3I6IHBvaW50ZXI7Cit9CisudGFibGUtaGVhZGVyLWNvbnRlbnQsCisudGFibGUtaGVhZGVy
LWNvbnRlbnQgKiB7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Cit9CisudGFibGUtaGVhZGVy
LWNvbnRlbnQgKiB7CisgICAgLXdlYmtpdC1ib3gtZmxleDogMTsKKyAgICBjdXJzb3I6IHBvaW50
ZXI7CisgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKK30KKy5yZXN1bHRzIHsKKyAgICBjdXJzb3I6
IHBvaW50ZXI7CisgICAgcGFkZGluZzogMCAxcHg7CisgICAgZm9udC1zaXplOiAxMHB4OworICAg
IHRleHQtYWxpZ246IGNlbnRlcjsKK30KKyNsZWdlbmQgeworICAgIHBvc2l0aW9uOiBmaXhlZDsK
KyAgICB0b3A6IDVweDsKKyAgICByaWdodDogNXB4OworICAgIHdpZHRoOiA0MDBweDsKKyAgICBw
YWRkaW5nOiAycHg7CisgICAgYm9yZGVyOiAycHggc29saWQgZ3JleTsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiB3aGl0ZTsKKyAgICB6LWluZGV4OiAxOworfQorI2xlZ2VuZCB1bCwgI2xlZ2VuZCBv
bCB7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiA1cHg7Cit9CisjbGVn
ZW5kLWNvbnRlbnRzICogeworICAgIG1hcmdpbjogM3B4IDA7CisgICAgcGFkZGluZzogMCAycHg7
CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgYm9yZGVyOiAxcHggc29saWQgZ3JleTsKK30KKy50ZXN0
LXRhYmxlIC53cm9uZy1leHBlY3RhdGlvbnMsCisud3JvbmctZXhwZWN0YXRpb25zIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiAjcGluazsKK30KKy5QIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAj
OGZkZjVmOworfQorLk4geworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cit9CisuQyB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzM0MzsKK30KKy5UIHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiAjZmZmYzZjOworfQorLkkgeworICAgIGJhY2tncm91bmQtY29sb3I6ICM2OWY7Cit9Cisu
UyB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2M2YzsKK30KKy5GIHsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZTk4MDgwOworfQorLk8geworICAgIGJhY2tncm91bmQtY29sb3I6ICM4YTc3MDA7
Cit9CisuWiB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzk2ZjsKK30KKyNsZWdlbmQgLm1lcmdl
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAgICBjb2xvcjogd2hpdGU7Cit9Cisu
dGVzdC10YWJsZSAubWVyZ2UgeworICAgIGJvcmRlci1yaWdodDogc29saWQgMnB4ICMwMDA7Cisg
ICAgcGFkZGluZy1yaWdodDogMDsKK30KKy5zZXBhcmF0b3IgeworICAgIGJvcmRlcjogMXB4IHNv
bGlkIGxpZ2h0Z3JheTsKKyAgICBoZWlnaHQ6IDBweDsKK30KKy5kaWZmZXJlbnQtcGxhdGZvcm0g
eworICAgIGNvbG9yOiBncmF5OworICAgIGZvbnQtc2l6ZTogMTBweDsKK30KKyNwYXNzaW5nLXRl
c3RzIHsKKyAgICAtd2Via2l0LWNvbHVtbi1jb3VudDogMzsKKyAgICAtd2Via2l0LWNvbHVtbi1n
YXA6IDI1cHg7CisgICAgLXdlYmtpdC1jb2x1bW4tcnVsZTogMXB4IGRhc2hlZCBibGFjazsKKyAg
ICAtbW96LWNvbHVtbi1jb3VudDogMzsKKyAgICAtbW96LWNvbHVtbi1nYXA6IDI1cHg7CisgICAg
LW1vei1jb2x1bW4tcnVsZTogMXB4IGRhc2hlZCBibGFjazsKK30KKy5ub3QtZm91bmQgeworICAg
IGNvbG9yOiByZWQ7CisgICAgZm9udC1zaXplOiBsYXJnZTsKK30KKyNsb2FkaW5nLXVpIHsKKyAg
ICBwb3NpdGlvbjogZml4ZWQ7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogeWVsbG93OworICAgIHBhZGRpbmc6IDVweDsKKyAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisjcG9wdXAgeworICAgIGJhY2tncm91
bmQtY29sb3I6IHdoaXRlOworICAgIHotaW5kZXg6IDE7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIGJvcmRlcjogM3B4IHNvbGlkIGdyZXk7CisgICAgcGFkZGluZzogM3B4OworICAgIC13
ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpOworICAgIC1t
b3otYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpOworICAgIC13ZWJr
aXQtYm9yZGVyLXJhZGl1czogNXB4OworICAgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4OworfQor
I3BvcHVwID4gdWwgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cit9
CisuZXhwZWN0YXRpb25zLWNvbnRhaW5lciB7CisgICAgY2xlYXI6IGJvdGg7Cit9CisuZXhwZWN0
YXRpb25zLWl0ZW0geworICAgIGZsb2F0OiBsZWZ0OworICAgIGJvcmRlcjogMXB4IHNvbGlkIGdy
ZXk7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAgZGlzcGxheTogLW1vei1ib3g7Cisg
ICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7
CisgICAgLW1vei1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKK30KKy5leHBlY3RhdGlvbnMtaXRlbSAu
ZXhwZWN0YXRpb24geworICAgIHdpZHRoOiA0MDBweDsKKyAgICBoZWlnaHQ6IDMwMHB4OworICAg
IGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgZ3JleTsKKyAgICBvdmVyZmxv
dzogYXV0bzsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKKyAgICBkaXNwbGF5OiAtbW96LWJv
eDsKKyAgICAtd2Via2l0LWJveC1mbGV4OiAxOworICAgIC1tb3otYm94LWZsZXg6IDE7Cit9Citw
cmUuZXhwZWN0YXRpb24geworICAgIHBhZGRpbmc6IDhweDsKKyAgICBtYXJnaW46IDA7CisgICAg
Ym94LXNpemluZzogYm9yZGVyLWJveDsKK30KKy5leHBlY3RhdGlvbnMtaXRlbSAubGFyZ2Ugewor
ICAgIHdpZHRoOiA4MDBweDsKKyAgICBoZWlnaHQ6IDYwMHB4OworfQorLm5vbi13ZWJraXQtcmVz
dWx0cyB7CisgICAgd2lkdGg6IDk5JTsKK30KKy51c2VkLXBsYXRmb3JtIHsKKyAgICBmbG9hdDog
cmlnaHQ7CisgICAgY29sb3I6IGRhcmtibHVlOworICAgIG1hcmdpbjogMCA1cHg7Cit9CisuZXhw
ZWN0YXRpb25zLXRpdGxlIHsKKyAgICAvKiBIYWNrIHRvIG1ha2UgYSBjb250YWluaW5nIGJsb2Nr
IGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzLiAqLworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICBjbGVhcjogYm90aDsKK30KKy50aXRsZSB7CisgICAgLyogUG9zaXRpb24gYWJz
b2x1dGVseSBzbyB0aGUgY29udGFpbmVyIGRvZXMgbm90IGdyb3cgdG8gY29udGFpbiB0aGlzLiAq
LworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKy5wbGF0Zm9ybXMgeworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICB6LWluZGV4OiAxOworfQorLmZpbGUtYnVn
IHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBmb250LXNpemU6IDExcHg7Cit9CisucG5n
Y2hlY2tzdW0geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBi
b3R0b206IDA7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZjODsKKyAgICB2aXNpYmlsaXR5
OiBoaWRkZW47Cit9CisuZXhwZWN0YXRpb25zLWl0ZW06aG92ZXIgLnBuZ2NoZWNrc3VtIHsKKyAg
ICB2aXNpYmlsaXR5OiB2aXNpYmxlOworfQorPC9zdHlsZT4KKworPHNjcmlwdCBzcmM9ImJ1aWxk
ZXJzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorLyoqCisqIEBmaWxlb3ZlcnZpZXcgQ3JlYXRlcyBhIGRhc2hib2FyZCBm
b3IgbXVsdGlwbGUgcnVucyBvZiBhIGdpdmVuIHNldCBvZiB0ZXN0cworKiBvbiB0aGUgYnVpbGRi
b3RzLiBQdWxscyBpbiBKU09OUC1pc2ggZmlsZXMgd2l0aCB0aGUgcmVzdWx0cyBmb3IgcnVubmlu
ZworKiB0ZXN0cyBvbiBhIGdpdmVuIGJ1aWxkZXIgKGkuZS4gQUREX1JFU1VMVFMoanNvbl9oZXJl
KSkgYW5kIHRoZSBleHBlY3RhdGlvbnMKKyogZm9yIGFsbCB0ZXN0cyBvbiBhbGwgYnVpbGRlcnMg
KGkuZS4gQUREX0VYUEVDVEFUSU9OUyhqc29uX2hlcmUpKS4KKyoKKyogVGhpcyBzaG93cyBmbGFr
aW5lc3Mgb2YgdGhlIHRlc3RzIGFzIHdlbGwgYXMgcnVudGltZXMgZm9yIHNsb3cgdGVzdHMuCisq
CisqIEFsc28sIGVhY2ggY29sdW1uIGluIHRoZSBkYXNoYm9hcmQgaXMgc29ydGFibGUuCisqCisq
IEN1cnJlbnRseSwgb25seSB3ZWJraXQgdGVzdHMgYXJlIHN1cHBvcnRlZCwgYnV0IGFkZGluZyBv
dGhlciB0ZXN0IHR5cGVzCisqIHNob3VsZCBqdXN0IHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzdGVw
czoKKyogICAtZ2VuZXJhdGUgcmVzdWx0cy5qc29uIGFuZCBleHBlY3RhdGlvbnMuanNvbiBmb3Ig
dGhlc2UgdGVzdHMKKyogICAtY29weSB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbgor
KiAgIC1hZGQgdGhlIGJ1aWxkZXIgbmFtZSB0byB0aGUgbGlzdCBvZiBidWlsZGVycyBiZWxvdy4K
KyovCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ09OU1RBTlRTCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KK3ZhciBBTEwgPSAnQUxMJzsKK3ZhciBGT1JXQVJEID0gJ2ZvcndhcmQnOwordmFy
IEJBQ0tXQVJEID0gJ2JhY2t3YXJkJzsKK3ZhciBHVEVTVF9GTEFLWV9NQVJLRVIgPSAnXC5GTEFL
WV8nOwordmFyIEdURVNUX0ZBSUxTX01BUktFUiA9ICdcLkZBSUxTXyc7Cit2YXIgVEVTVF9VUkxf
QkFTRV9QQVRIX1RSQUMgPSAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL0xh
eW91dFRlc3RzLyc7Cit2YXIgVEVTVF9VUkxfQkFTRV9QQVRIID0gImh0dHA6Ly9zdm4ud2Via2l0
Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9MYXlvdXRUZXN0cy8iOwordmFyIFRFU1RfUkVT
VUxUU19CQVNFX1BBVEggPSAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xh
eW91dF90ZXN0X3Jlc3VsdHMvJzsKK3ZhciBQTEFURk9STVMgPSB7CisnTUFDJzogJ01BQycsCisn
TElOVVgnOiAnTElOVVgnLAorJ1dJTic6ICdXSU4nLAorJ1dJTi1YUCc6ICdXSU4tWFAnLAorJ1dJ
Ti1WSVNUQSc6ICdXSU4tVklTVEEnCit9OwordmFyIFBMQVRGT1JNX0ZBTExCQUNLUyA9IHsKKydX
SU4nOiAnQUxMJywKKydXSU4tWFAnOiAnV0lOJywKKydXSU4tVklTVEEnOiAnV0lOJywKKydMSU5V
WCc6ICdBTEwnLAorJ01BQyc6ICdBTEwnCit9OwordmFyIEJVSUxEX1RZUEVTID0geydERUJVRyc6
ICdEQkcnLCAnUkVMRUFTRSc6ICdSRUxFQVNFJ307Cit2YXIgTUlOX1NFQ09ORFNfRk9SX1NMT1df
VEVTVCA9IDQ7Cit2YXIgTUlOX1NFQ09ORFNfRk9SX1NMT1dfVEVTVF9ERUJVRyA9IDIgKiBNSU5f
U0VDT05EU19GT1JfU0xPV19URVNUOwordmFyIEZBSUxfUkVTVUxUUyA9IFsnSU1BR0UnLCAnSU1B
R0UrVEVYVCcsICdURVhUJywgJ1NJTVBMSUZJRUQnLCAnTUlTU0lORyddOwordmFyIENIVU5LX1NJ
WkUgPSAyNTsKK3ZhciBNQVhfUkVTVUxUUyA9IDE1MDA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9tIGRhc2hib2FyZF9iYXNlLmpzIHRvIG92ZXJy
aWRlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKQorewog
ICAgIGlmIChjdXJyZW50U3RhdGUudXNlVGVzdERhdGEpCi0gICAgICByZXR1cm47CisgICAgICAg
IHJldHVybjsKIAogICAgIHVwZGF0ZURlZmF1bHRCdWlsZGVyU3RhdGUoKTsKICAgICBkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJsb2FkaW5nLXVpIj5MT0FESU5HLi4uPC9kaXY+
JzsKQEAgLTM1NSwxMDUgKzM1Niw5NiBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAgICAgLy8gdGVzdHMgZXhw
YW5kcyB0byBhbGwgdGVzdHMgdGhhdCBtYXRjaCB0aGUgQ1NWIGxpc3QuCiAgICAgLy8gcmVzdWx0
IGV4cGFuZHMgdG8gYWxsIHRlc3RzIHRoYXQgZXZlciBoYXZlIHRoZSBnaXZlbiByZXN1bHQKLSAg
ICBpZiAoY3VycmVudFN0YXRlLnRlc3RzIHx8IGN1cnJlbnRTdGF0ZS5yZXN1bHQpIHsKLSAgICAg
IGdlbmVyYXRlUGFnZUZvckluZGl2aWR1YWxUZXN0cyhnZXRJbmRpdmlkdWFsVGVzdHMoKSk7Ci0g
ICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdGUuZXhwZWN0YXRpb25zVXBkYXRlKSB7Ci0gICAgICBn
ZW5lcmF0ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKTsKLSAgICB9IGVsc2UgewotICAgICAg
Z2VuZXJhdGVQYWdlRm9yQnVpbGRlcihjdXJyZW50U3RhdGUuYnVpbGRlcik7Ci0gICAgfQorICAg
IGlmIChjdXJyZW50U3RhdGUudGVzdHMgfHwgY3VycmVudFN0YXRlLnJlc3VsdCkKKyAgICAgICAg
Z2VuZXJhdGVQYWdlRm9ySW5kaXZpZHVhbFRlc3RzKGdldEluZGl2aWR1YWxUZXN0cygpKTsKKyAg
ICBlbHNlIGlmIChjdXJyZW50U3RhdGUuZXhwZWN0YXRpb25zVXBkYXRlKQorICAgICAgICBnZW5l
cmF0ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVy
YXRlUGFnZUZvckJ1aWxkZXIoY3VycmVudFN0YXRlLmJ1aWxkZXIpOwogCi0gICAgZm9yICh2YXIg
YnVpbGRlciBpbiBidWlsZGVycykgewotICAgICAgcHJvY2Vzc1Rlc3RSZXN1bHRzRm9yQnVpbGRl
ckFzeW5jKGJ1aWxkZXIpOwotICAgIH0KLSAgfQorICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gYnVp
bGRlcnMpCisgICAgICAgIHByb2Nlc3NUZXN0UmVzdWx0c0ZvckJ1aWxkZXJBc3luYyhidWlsZGVy
KTsKK30KIAotICBmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkg
eworZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCit7CiAgICAg
c3dpdGNoKGtleSkgewotICAgICAgY2FzZSAndGVzdHMnOgorICAgIGNhc2UgJ3Rlc3RzJzoKICAg
ICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAogICAgICAg
ICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkTmFtZSh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWROYW1lKHZhbHVlKTsKICAgICAgICAg
ICAgIH0pOwotCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICBjYXNlICdyZXN1bHQnOgor
ICAgIGNhc2UgJ3Jlc3VsdCc6CiAgICAgICAgIHZhbHVlID0gdmFsdWUudG9VcHBlckNhc2UoKTsK
ICAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoY3VycmVudFN0YXRlLCBrZXksIHZhbHVlLAogICAg
ICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBpbiBM
QVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQXykgewotICAgICAgICAgICAgICAgIGlmICh2YWx1
ZSA9PSBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQX1tyZXN1bHRdKQotICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBpbiBMQVlPVVRfVEVTVF9F
WFBFQ1RBVElPTlNfTUFQXykgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTEFZ
T1VUX1RFU1RfRVhQRUNUQVRJT05TX01BUF9bcmVzdWx0XSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9KTsKLQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgY2FzZSAnYnVpbGRlcic6CisgICAgY2FzZSAnYnVpbGRlcic6CiAgICAgICAgIHZhbGlkYXRl
UGFyYW1ldGVyKGN1cnJlbnRTdGF0ZSwga2V5LCB2YWx1ZSwKICAgICAgICAgICAgIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgaW4gYnVpbGRlcnM7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlIGluIGJ1aWxkZXJzOwogICAgICAgICAgICAgfSk7Ci0KICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICAgIGNhc2UgJ3NvcnRDb2x1bW4nOgorICAgIGNhc2UgJ3Nv
cnRDb2x1bW4nOgogICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3RhdGUsIGtleSwg
dmFsdWUsCiAgICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgLy8gR2V0IGFs
bCBwb3NzaWJsZSBoZWFkZXJzIHNpbmNlIHRoZSBhY3R1YWwgdXNlZCBzZXQgb2YgaGVhZGVycwot
ICAgICAgICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgaW4gY3VycmVudFN0YXRlLCB3
aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHNldC4KLSAgICAgICAgICAgICAgdmFyIGhlYWRlcnMg
PSB0YWJsZUhlYWRlcnModHJ1ZSk7Ci0gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aGVhZGVycy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PQotICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0U29ydENvbHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJz
W2ldKSkKLSAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSAndGVzdCcgfHwgdmFsdWUgPT0gJ2J1aWxkZXIn
OworICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgcG9zc2libGUgaGVhZGVycyBzaW5jZSB0aGUg
YWN0dWFsIHVzZWQgc2V0IG9mIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAvLyBkZXBlbmRzIG9u
IHRoZSB2YWx1ZXMgaW4gY3VycmVudFN0YXRlLCB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHNl
dC4KKyAgICAgICAgICAgICAgICB2YXIgaGVhZGVycyA9IHRhYmxlSGVhZGVycyh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IGdldFNvcnRDb2x1bW5Gcm9tVGFibGVI
ZWFkZXIoaGVhZGVyc1tpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09ICd0ZXN0
JyB8fCB2YWx1ZSA9PSAnYnVpbGRlcic7CiAgICAgICAgICAgICB9KTsKLQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgICAgY2FzZSAnc29ydE9yZGVyJzoKKyAgICBjYXNlICdzb3J0T3JkZXIn
OgogICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlcihjdXJyZW50U3RhdGUsIGtleSwgdmFsdWUsCiAg
ICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IEZP
UldBUkQgfHwgdmFsdWUgPT0gQkFDS1dBUkQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
ID09IEZPUldBUkQgfHwgdmFsdWUgPT0gQkFDS1dBUkQ7CiAgICAgICAgICAgICB9KTsKLQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgY2FzZSAncmVzdWx0c0hlaWdodCc6Ci0gICAgICBj
YXNlICd1cGRhdGVJbmRleCc6Ci0gICAgICBjYXNlICdyZXZpc2lvbic6CisgICAgY2FzZSAncmVz
dWx0c0hlaWdodCc6CisgICAgY2FzZSAndXBkYXRlSW5kZXgnOgorICAgIGNhc2UgJ3JldmlzaW9u
JzoKICAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXIoY3VycmVudFN0YXRlLCBrZXksIE51bWJlcih2
YWx1ZSksCiAgICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLm1hdGNoKC9eXGQrJC8pOworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXRjaCgv
XlxkKyQvKTsKICAgICAgICAgICAgIH0pOwotCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
ICBjYXNlICdzaG93Q29ycmVjdEV4cGVjdGF0aW9ucyc6Ci0gICAgICBjYXNlICdzaG93V3JvbmdF
eHBlY3RhdGlvbnMnOgotICAgICAgY2FzZSAnc2hvd0V4cGVjdGF0aW9ucyc6Ci0gICAgICBjYXNl
ICdzaG93Rmxha3knOgotICAgICAgY2FzZSAnc2hvd0xhcmdlRXhwZWN0YXRpb25zJzoKLSAgICAg
IGNhc2UgJ2xlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcyc6Ci0gICAgICBjYXNlICdzaG93U2tp
cHBlZCc6Ci0gICAgICBjYXNlICdzaG93U2xvdyc6Ci0gICAgICBjYXNlICdzaG93V29udEZpeFNr
aXAnOgotICAgICAgY2FzZSAnZXhwZWN0YXRpb25zVXBkYXRlJzoKLSAgICAgIGNhc2UgJ3Nob3dS
dW5zT25CdWlsZGVyUGFnZSc6CisgICAgY2FzZSAnc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnMnOgor
ICAgIGNhc2UgJ3Nob3dXcm9uZ0V4cGVjdGF0aW9ucyc6CisgICAgY2FzZSAnc2hvd0V4cGVjdGF0
aW9ucyc6CisgICAgY2FzZSAnc2hvd0ZsYWt5JzoKKyAgICBjYXNlICdzaG93TGFyZ2VFeHBlY3Rh
dGlvbnMnOgorICAgIGNhc2UgJ2xlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcyc6CisgICAgY2Fz
ZSAnc2hvd1NraXBwZWQnOgorICAgIGNhc2UgJ3Nob3dTbG93JzoKKyAgICBjYXNlICdzaG93V29u
dEZpeFNraXAnOgorICAgIGNhc2UgJ2V4cGVjdGF0aW9uc1VwZGF0ZSc6CisgICAgY2FzZSAnc2hv
d1J1bnNPbkJ1aWxkZXJQYWdlJzoKICAgICAgICAgY3VycmVudFN0YXRlW2tleV0gPSB2YWx1ZSA9
PSAndHJ1ZSc7Ci0KICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgIGRlZmF1bHQ6CisgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgfQorfQogCi0gIGRlZmF1
bHRTdGF0ZVZhbHVlcyA9IHsKK2RlZmF1bHRTdGF0ZVZhbHVlcyA9IHsKICAgICBzb3J0T3JkZXI6
IEJBQ0tXQVJELAogICAgIHNvcnRDb2x1bW46ICdmbGFraW5lc3MnLAogICAgIHNob3dFeHBlY3Rh
dGlvbnM6IGZhbHNlLApAQCAtNDcxLDMxNSArNDYzLDMxNSBAQCBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIGJ1
aWxkZXI6IGRlZmF1bHRCdWlsZGVyTmFtZSwKICAgICByZXN1bHRzSGVpZ2h0OiAzMDAsCiAgICAg
cmV2aXNpb246IG51bGwKLSAgfTsKLQotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgLy8gR0xP
QkFMUwotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICB2YXIgcGVyQnVpbGRlclBsYXRmb3Jt
QW5kQnVpbGRUeXBlID0ge307Ci0gIHZhciBwZXJCdWlsZGVyRmFpbHVyZXMgPSB7fTsKLSAgLy8g
TWFwIG9mIGJ1aWxkZXIgdG8gYXJyYXlzIG9mIHRlc3RzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUg
ZXhwZWN0YXRpb25zIGZpbGUKLSAgLy8gYnV0IGhhdmUgZm9yIHRoYXQgYnVpbGRlci4KLSAgdmFy
IHBlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlcyA9IHt9OwotICAvLyBNYXAg
b2YgYnVpbGRlciB0byBhcnJheXMgb2YgcGF0aHMgdGhhdCBhcmUgc2tpcHBlZC4gVGhpcyBzaG93
cyB0aGUgcmF3Ci0gIC8vIHBhdGggdXNlZCBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgcmF0aGVy
IHRoYW4gdGhlIHRlc3QgcGF0aCBzaW5jZSB3ZQotICAvLyBkb24ndCBhY3R1YWxseSBoYXZlIGFu
eSBkYXRhIGhlcmUgZm9yIHNraXBwZWQgdGVzdHMuCi0gIHZhciBwZXJCdWlsZGVyU2tpcHBlZFBh
dGhzID0ge307Ci0gIC8vIE1hcHMgdGVzdCBwYXRoIHRvIGFuIGFycmF5IG9mIHtidWlsZGVyLCB0
ZXN0UmVzdWx0c30gb2JqZWN0cy4KLSAgdmFyIHRlc3RUb1Jlc3VsdHNNYXAgPSB7fTsKLSAgLy8g
VGVzdHMgdGhhdCB0aGUgdXNlciB3YW50cyB0byB1cGRhdGUgZXhwZWN0YXRpb25zIGZvci4KLSAg
dmFyIGNvbmZpcm1lZFRlc3RzID0ge307Ci0KLSAgZnVuY3Rpb24gY3JlYXRlUmVzdWx0c09iamVj
dEZvclRlc3QodGVzdCwgYnVpbGRlcikgeworfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
LyBHTE9CQUxTCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordmFyIHBlckJ1aWxkZXJQbGF0Zm9y
bUFuZEJ1aWxkVHlwZSA9IHt9OwordmFyIHBlckJ1aWxkZXJGYWlsdXJlcyA9IHt9OworLy8gTWFw
IG9mIGJ1aWxkZXIgdG8gYXJyYXlzIG9mIHRlc3RzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgZXhw
ZWN0YXRpb25zIGZpbGUKKy8vIGJ1dCBoYXZlIGZvciB0aGF0IGJ1aWxkZXIuCit2YXIgcGVyQnVp
bGRlcldpdGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzID0ge307CisvLyBNYXAgb2YgYnVpbGRl
ciB0byBhcnJheXMgb2YgcGF0aHMgdGhhdCBhcmUgc2tpcHBlZC4gVGhpcyBzaG93cyB0aGUgcmF3
CisvLyBwYXRoIHVzZWQgaW4gdGVzdF9leHBlY3RhdGlvbnMudHh0IHJhdGhlciB0aGFuIHRoZSB0
ZXN0IHBhdGggc2luY2Ugd2UKKy8vIGRvbid0IGFjdHVhbGx5IGhhdmUgYW55IGRhdGEgaGVyZSBm
b3Igc2tpcHBlZCB0ZXN0cy4KK3ZhciBwZXJCdWlsZGVyU2tpcHBlZFBhdGhzID0ge307CisvLyBN
YXBzIHRlc3QgcGF0aCB0byBhbiBhcnJheSBvZiB7YnVpbGRlciwgdGVzdFJlc3VsdHN9IG9iamVj
dHMuCit2YXIgdGVzdFRvUmVzdWx0c01hcCA9IHt9OworLy8gVGVzdHMgdGhhdCB0aGUgdXNlciB3
YW50cyB0byB1cGRhdGUgZXhwZWN0YXRpb25zIGZvci4KK3ZhciBjb25maXJtZWRUZXN0cyA9IHt9
OworCitmdW5jdGlvbiBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWlsZGVyKQor
ewogICAgIHJldHVybiB7Ci0gICAgICB0ZXN0OiB0ZXN0LAotICAgICAgYnVpbGRlcjogYnVpbGRl
ciwKLSAgICAgIC8vIEhUTUwgZm9yIGRpc3BsYXkgb2YgdGhlIHJlc3VsdHMgaW4gdGhlIGZsYWtp
bmVzcyBjb2x1bW4KLSAgICAgIGh0bWw6ICcnLAotICAgICAgZmxpcHM6IDAsCi0gICAgICBzbG93
ZXN0VGltZTogMCwKLSAgICAgIHNsb3dlc3ROb25UaW1lb3V0Q3Jhc2hUaW1lOiAwLAotICAgICAg
bWVldHNFeHBlY3RhdGlvbnM6IHRydWUsCi0gICAgICBpc1dvbnRGaXhTa2lwOiBmYWxzZSwKLSAg
ICAgIGlzRmxha3k6IGZhbHNlLAotICAgICAgLy8gU29ydGVkIHN0cmluZyBvZiBtaXNzaW5nIGV4
cGVjdGF0aW9ucwotICAgICAgbWlzc2luZzogJycsCi0gICAgICAvLyBTdHJpbmcgb2YgZXh0cmEg
ZXhwZWN0YXRpb25zIChpLmUuIGV4cGVjdGF0aW9ucyB0aGF0IG5ldmVyIG9jY3VyKS4KLSAgICAg
IGV4dHJhOiAnJywKLSAgICAgIC8vIEhUTUwgZm9yIGJ1ZyBJRHMgZm9yIHRoaXMgdGVzdCBmb3Ig
YWxsIHBsYXRmb3JtcwotICAgICAgYnVnc0hUTUw6ICcnLAotICAgICAgLy8gSFRNTCBmb3IgZXhw
ZWN0YXRpb25zIGZvciB0aGlzIHRlc3QgZm9yIGFsbCBwbGF0Zm9ybXMKLSAgICAgIGV4cGVjdGF0
aW9uc0hUTUw6ICcnLAotICAgICAgLy8gSFRNTCBmb3IgbW9kaWZpZXJzIGZvciB0aGlzIHRlc3Qg
Zm9yIGFsbCBwbGF0Zm9ybXMKLSAgICAgIG1vZGlmaWVyc0hUTUw6ICcnLAotICAgICAgcmF3UmVz
dWx0czogJycsCi0gICAgICBwZXJjZW50RmFpbGVkOiAwLAotICAgICAgLy8gTGlzdCBvZiBhbGwg
dGhlIHJlc3VsdHMgdGhlIHRlc3QgYWN0dWFsbHkgaGFzLgotICAgICAgYWN0dWFsUmVzdWx0czog
W10KKyAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgYnVpbGRlcjogYnVpbGRlciwKKyAgICAg
ICAgLy8gSFRNTCBmb3IgZGlzcGxheSBvZiB0aGUgcmVzdWx0cyBpbiB0aGUgZmxha2luZXNzIGNv
bHVtbgorICAgICAgICBodG1sOiAnJywKKyAgICAgICAgZmxpcHM6IDAsCisgICAgICAgIHNsb3dl
c3RUaW1lOiAwLAorICAgICAgICBzbG93ZXN0Tm9uVGltZW91dENyYXNoVGltZTogMCwKKyAgICAg
ICAgbWVldHNFeHBlY3RhdGlvbnM6IHRydWUsCisgICAgICAgIGlzV29udEZpeFNraXA6IGZhbHNl
LAorICAgICAgICBpc0ZsYWt5OiBmYWxzZSwKKyAgICAgICAgLy8gU29ydGVkIHN0cmluZyBvZiBt
aXNzaW5nIGV4cGVjdGF0aW9ucworICAgICAgICBtaXNzaW5nOiAnJywKKyAgICAgICAgLy8gU3Ry
aW5nIG9mIGV4dHJhIGV4cGVjdGF0aW9ucyAoaS5lLiBleHBlY3RhdGlvbnMgdGhhdCBuZXZlciBv
Y2N1cikuCisgICAgICAgIGV4dHJhOiAnJywKKyAgICAgICAgLy8gSFRNTCBmb3IgYnVnIElEcyBm
b3IgdGhpcyB0ZXN0IGZvciBhbGwgcGxhdGZvcm1zCisgICAgICAgIGJ1Z3NIVE1MOiAnJywKKyAg
ICAgICAgLy8gSFRNTCBmb3IgZXhwZWN0YXRpb25zIGZvciB0aGlzIHRlc3QgZm9yIGFsbCBwbGF0
Zm9ybXMKKyAgICAgICAgZXhwZWN0YXRpb25zSFRNTDogJycsCisgICAgICAgIC8vIEhUTUwgZm9y
IG1vZGlmaWVycyBmb3IgdGhpcyB0ZXN0IGZvciBhbGwgcGxhdGZvcm1zCisgICAgICAgIG1vZGlm
aWVyc0hUTUw6ICcnLAorICAgICAgICByYXdSZXN1bHRzOiAnJywKKyAgICAgICAgcGVyY2VudEZh
aWxlZDogMCwKKyAgICAgICAgLy8gTGlzdCBvZiBhbGwgdGhlIHJlc3VsdHMgdGhlIHRlc3QgYWN0
dWFsbHkgaGFzLgorICAgICAgICBhY3R1YWxSZXN1bHRzOiBbXQogICAgIH07Ci0gIH0KK30KIAot
ICBmdW5jdGlvbiBnZXRNYXRjaGluZ0VsZW1lbnQoc3RyaW5nVG9NYXRjaCwgZWxlbWVudHNNYXAp
IHsKK2Z1bmN0aW9uIGdldE1hdGNoaW5nRWxlbWVudChzdHJpbmdUb01hdGNoLCBlbGVtZW50c01h
cCkKK3sKICAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzTWFwKSB7Ci0gICAgICBpZiAo
c3RyaW5nQ29udGFpbnMoc3RyaW5nVG9NYXRjaCwgZWxlbWVudHNNYXBbZWxlbWVudF0pKQotICAg
ICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgaWYgKHN0cmluZ0NvbnRhaW5zKHN0cmluZ1Rv
TWF0Y2gsIGVsZW1lbnRzTWFwW2VsZW1lbnRdKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OwogICAgIH0KLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldFBsYXRmb3JtQW5kQnVpbGRUeXBlKGJ1
aWxkZXJOYW1lKSB7CitmdW5jdGlvbiBnZXRQbGF0Zm9ybUFuZEJ1aWxkVHlwZShidWlsZGVyTmFt
ZSkKK3sKICAgICBpZiAoIXBlckJ1aWxkZXJQbGF0Zm9ybUFuZEJ1aWxkVHlwZVtidWlsZGVyTmFt
ZV0pIHsKLSAgICAgIC8vIElmIHRoZSBidWlsZCBuYW1lIGRvZXMgbm90IGNvbnRhaW4gYSBwbGF0
Zm9ybQotICAgICAgLy8gb3IgYnVpbGQgdHlwZSwgYXNzdW1lIFdpbmRvd3MgUmVsZWFzZS4KLSAg
ICAgIHZhciBjdXJyZW50QnVpbGRVcHBlcmNhc2UgPSBidWlsZGVyTmFtZS50b1VwcGVyQ2FzZSgp
OwotICAgICAgdmFyIHBsYXRmb3JtID0gZ2V0TWF0Y2hpbmdFbGVtZW50KGN1cnJlbnRCdWlsZFVw
cGVyY2FzZSwgUExBVEZPUk1TKSB8fAotICAgICAgICAgICdXSU4nOwotICAgICAgdmFyIGJ1aWxk
VHlwZSA9IGdldE1hdGNoaW5nRWxlbWVudChjdXJyZW50QnVpbGRVcHBlcmNhc2UsIEJVSUxEX1RZ
UEVTKSB8fAotICAgICAgICAgICdSRUxFQVNFJzsKLSAgICAgIHBlckJ1aWxkZXJQbGF0Zm9ybUFu
ZEJ1aWxkVHlwZVtidWlsZGVyTmFtZV0gPSB7cGxhdGZvcm06IHBsYXRmb3JtLAotICAgICAgICAg
IGJ1aWxkVHlwZTogYnVpbGRUeXBlfTsKKyAgICAgICAgLy8gSWYgdGhlIGJ1aWxkIG5hbWUgZG9l
cyBub3QgY29udGFpbiBhIHBsYXRmb3JtCisgICAgICAgIC8vIG9yIGJ1aWxkIHR5cGUsIGFzc3Vt
ZSBXaW5kb3dzIFJlbGVhc2UuCisgICAgICAgIHZhciBjdXJyZW50QnVpbGRVcHBlcmNhc2UgPSBi
dWlsZGVyTmFtZS50b1VwcGVyQ2FzZSgpOworICAgICAgICB2YXIgcGxhdGZvcm0gPSBnZXRNYXRj
aGluZ0VsZW1lbnQoY3VycmVudEJ1aWxkVXBwZXJjYXNlLCBQTEFURk9STVMpIHx8ICdXSU4nOwor
ICAgICAgICB2YXIgYnVpbGRUeXBlID0gZ2V0TWF0Y2hpbmdFbGVtZW50KGN1cnJlbnRCdWlsZFVw
cGVyY2FzZSwgQlVJTERfVFlQRVMpIHx8ICdSRUxFQVNFJzsKKyAgICAgICAgcGVyQnVpbGRlclBs
YXRmb3JtQW5kQnVpbGRUeXBlW2J1aWxkZXJOYW1lXSA9IHtwbGF0Zm9ybTogcGxhdGZvcm0sIGJ1
aWxkVHlwZTogYnVpbGRUeXBlfTsKICAgICB9CiAgICAgcmV0dXJuIHBlckJ1aWxkZXJQbGF0Zm9y
bUFuZEJ1aWxkVHlwZVtidWlsZGVyTmFtZV07Ci0gIH0KK30KIAotICBmdW5jdGlvbiBpc0RlYnVn
KGJ1aWxkZXJOYW1lKSB7CitmdW5jdGlvbiBpc0RlYnVnKGJ1aWxkZXJOYW1lKQorewogICAgIHJl
dHVybiBnZXRQbGF0Zm9ybUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSkuYnVpbGRUeXBlID09ICdE
RUJVRyc7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZXhwZWN0YXRpb24gc3RyaW5n
IGZvciB0aGUgZ2l2ZW4gc2luZ2xlIGNoYXJhY3RlciByZXN1bHQuCi0gICAqIFRoaXMgc3RyaW5n
IHNob3VsZCBtYXRjaCB0aGUgZXhwZWN0YXRpb25zIHRoYXQgYXJlIHB1dCBpbnRvCi0gICAqIHRl
c3RfZXhwZWN0YXRpb25zLnB5LgotICAgKgotICAgKiBGb3IgZXhhbXBsZSwgaWYgd2Ugc3RhcnQg
ZXhwbGljaXRseSBsaXN0aW5nIElNQUdFIHJlc3VsdCBmYWlsdXJlcywKLSAgICogdGhpcyBmdW5j
dGlvbiBzaG91bGQgc3RhcnQgcmV0dXJuaW5nICdJTUFHRScuCi0gICAqLwotICBmdW5jdGlvbiBn
ZXRFeHBlY3RhdGlvbnNGaWxlU3RyaW5nRm9yUmVzdWx0KHJlc3VsdCkgeworfQorCisvKioKKyAq
IFJldHVybnMgdGhlIGV4cGVjdGF0aW9uIHN0cmluZyBmb3IgdGhlIGdpdmVuIHNpbmdsZSBjaGFy
YWN0ZXIgcmVzdWx0LgorICogVGhpcyBzdHJpbmcgc2hvdWxkIG1hdGNoIHRoZSBleHBlY3RhdGlv
bnMgdGhhdCBhcmUgcHV0IGludG8KKyAqIHRlc3RfZXhwZWN0YXRpb25zLnB5LgorICoKKyAqIEZv
ciBleGFtcGxlLCBpZiB3ZSBzdGFydCBleHBsaWNpdGx5IGxpc3RpbmcgSU1BR0UgcmVzdWx0IGZh
aWx1cmVzLAorICogdGhpcyBmdW5jdGlvbiBzaG91bGQgc3RhcnQgcmV0dXJuaW5nICdJTUFHRScu
CisgKi8KK2Z1bmN0aW9uIGdldEV4cGVjdGF0aW9uc0ZpbGVTdHJpbmdGb3JSZXN1bHQocmVzdWx0
KQorewogICAgIC8vIEZvciB0aGUgcHVycG9zZXMgb2YgY29tcGFyaW5nIGFnYWluc3QgdGhlIGV4
cGVjYXRpb25zIG9mIGEgdGVzdCwKICAgICAvLyBjb25zaWRlciBzaW1wbGlmaWVkIGRpZmYgZmFp
bHVyZXMgYXMganVzdCB0ZXh0IGZhaWx1cmVzIHNpbmNlCiAgICAgLy8gdGhlIHRlc3RfZXhwZWN0
YXRpb25zIGZpbGUgZG9lc24ndCB0cmVhdCB0aGVtIHNwZWNpYWxseS4KICAgICBpZiAocmVzdWx0
ID09ICdTJykKLSAgICAgIHJldHVybiAnVEVYVCc7CisgICAgICAgIHJldHVybiAnVEVYVCc7CiAK
ICAgICBpZiAocmVzdWx0ID09ICdOJykKLSAgICAgIHJldHVybiAnJzsKKyAgICAgICAgcmV0dXJu
ICcnOwogCiAgICAgcmV0dXJuIGdldEV4cGVjdGF0aW9uc01hcCgpW3Jlc3VsdF07Ci0gIH0KLQot
ICAvLyBNYXAgb2YgYWxsIHRlc3RzIHRvIHRydWUgdmFsdWVzLiBUaGlzIGlzIGp1c3Qgc28gd2Ug
Y2FuIGhhdmUgdGhlIGxpc3Qgb2YKLSAgLy8gYWxsIHRlc3RzIGFjcm9zcyBhbGwgdGhlIGJ1aWxk
ZXJzLgotICB2YXIgYWxsVGVzdHM7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBtYXAgb2YgYWxs
IHRlc3RzIHRvIHRydWUgdmFsdWVzLiBUaGlzIGlzIGp1c3Qgc28gd2UgY2FuIGhhdmUgdGhlCi0g
ICAqIGxpc3Qgb2YgYWxsIHRlc3RzIGFjcm9zcyBhbGwgdGhlIGJ1aWxkZXJzLgotICAgKi8KLSAg
ZnVuY3Rpb24gZ2V0QWxsVGVzdHMoKSB7Cit9CisKKy8vIE1hcCBvZiBhbGwgdGVzdHMgdG8gdHJ1
ZSB2YWx1ZXMuIFRoaXMgaXMganVzdCBzbyB3ZSBjYW4gaGF2ZSB0aGUgbGlzdCBvZgorLy8gYWxs
IHRlc3RzIGFjcm9zcyBhbGwgdGhlIGJ1aWxkZXJzLgordmFyIGFsbFRlc3RzOworCisvKioKKyAq
IFJldHVybnMgYSBtYXAgb2YgYWxsIHRlc3RzIHRvIHRydWUgdmFsdWVzLiBUaGlzIGlzIGp1c3Qg
c28gd2UgY2FuIGhhdmUgdGhlCisgKiBsaXN0IG9mIGFsbCB0ZXN0cyBhY3Jvc3MgYWxsIHRoZSBi
dWlsZGVycy4KKyAqLworZnVuY3Rpb24gZ2V0QWxsVGVzdHMoKQorewogICAgIGlmICghYWxsVGVz
dHMpIHsKLSAgICAgIGFsbFRlc3RzID0ge307Ci0gICAgICBmb3IgKHZhciBidWlsZGVyIGluIGJ1
aWxkZXJzKSB7Ci0gICAgICAgIGFkZFRlc3RzRm9yQnVpbGRlcihidWlsZGVyLCBhbGxUZXN0cyk7
Ci0gICAgICB9CisgICAgICAgIGFsbFRlc3RzID0ge307CisgICAgICAgIGZvciAodmFyIGJ1aWxk
ZXIgaW4gYnVpbGRlcnMpCisgICAgICAgICAgICBhZGRUZXN0c0ZvckJ1aWxkZXIoYnVpbGRlciwg
YWxsVGVzdHMpOwogICAgIH0KICAgICByZXR1cm4gYWxsVGVzdHM7Ci0gIH0KLQotICAvKioKLSAg
ICogUmV0dXJucyBhbiBhcnJheSBvZiB0ZXN0cyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGluZGl2
aWR1YWwgdGVzdHMgdmlldy4KLSAgICogTm90ZSB0aGF0IGEgZGlyZWN0b3J5IGNhbiBiZSBsaXN0
ZWQgYXMgYSB0ZXN0LCBzbyB3ZSBleHBhbmQgdGhhdCBpbnRvIGFsbAotICAgKiB0ZXN0cyBpbiB0
aGUgZGlyZWN0b3J5LgotICAgKi8KLSAgZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFRlc3RzKCkgewor
fQorCisvKioKKyAqIFJldHVybnMgYW4gYXJyYXkgb2YgdGVzdHMgdG8gYmUgZGlzcGxheWVkIGlu
IHRoZSBpbmRpdmlkdWFsIHRlc3RzIHZpZXcuCisgKiBOb3RlIHRoYXQgYSBkaXJlY3RvcnkgY2Fu
IGJlIGxpc3RlZCBhcyBhIHRlc3QsIHNvIHdlIGV4cGFuZCB0aGF0IGludG8gYWxsCisgKiB0ZXN0
cyBpbiB0aGUgZGlyZWN0b3J5LgorICovCitmdW5jdGlvbiBnZXRJbmRpdmlkdWFsVGVzdHMoKQor
ewogICAgIGlmIChjdXJyZW50U3RhdGUucmVzdWx0KQotICAgICAgcmV0dXJuIGdldEFsbFRlc3Rz
V2l0aFJlc3VsdChjdXJyZW50U3RhdGUucmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGdldEFsbFRl
c3RzV2l0aFJlc3VsdChjdXJyZW50U3RhdGUucmVzdWx0KTsKIAogICAgIGlmICghY3VycmVudFN0
YXRlLnRlc3RzKQotICAgICAgcmV0dXJuIFtdOworICAgICAgICByZXR1cm4gW107CiAKICAgICBy
ZXR1cm4gZ2V0SW5kaXZpZHVhbFRlc3RzRm9yU3Vic3RyaW5nTGlzdCgpOwotICB9Cit9CiAKLSAg
ZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFRlc3RzRm9yU3Vic3RyaW5nTGlzdCgpIHsKK2Z1bmN0aW9u
IGdldEluZGl2aWR1YWxUZXN0c0ZvclN1YnN0cmluZ0xpc3QoKQorewogICAgIC8vIENvbnZlcnQg
d2luZG93cyBzbGFzaGVzIHRvIHVuaXggc2xhc2hlcy4KICAgICB2YXIgdGVzdHMgPSBjdXJyZW50
U3RhdGUudGVzdHMucmVwbGFjZSgvXFwvZywgJy8nKTsKICAgICB2YXIgc2VwYXJhdG9yID0gc3Ry
aW5nQ29udGFpbnModGVzdHMsICcgJykgPyAnICcgOiAnLCc7CiAgICAgdmFyIHRlc3RMaXN0ID0g
dGVzdHMuc3BsaXQoc2VwYXJhdG9yKTsKIAogICAgIGlmICghaXNMYXlvdXRUZXN0UmVzdWx0cygp
KSB7Ci0gICAgICB0ZXN0TGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAg
Ly8gTWFrZSBzdXJlIHRvIHNlYXJjaCBmb3IgdGhlIGZsYWt5L2ZhaWxzIGFuZCBub24tZmxha3kv
bm9uLWZhaWxzCi0gICAgICAgIC8vIG5hbWVzIGZvciBhIHRlc3QuCi0gICAgICAgIC8vIGUuZy4g
Zm9yIHRlc3QgRm9vLkJhciwgYWxzbyBzZWFyY2ggZm9yIEZvby5GTEFLWV9CYXIuCi0gICAgICAg
IGlmIChzdHJpbmdDb250YWlucyhlbGVtZW50LCBHVEVTVF9GTEFLWV9NQVJLRVIpKSB7Ci0gICAg
ICAgICAgdGVzdExpc3QucHVzaChlbGVtZW50LnJlcGxhY2UoR1RFU1RfRkxBS1lfTUFSS0VSLCAn
LicpKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJpbmdDb250YWlucyhlbGVtZW50LCBHVEVTVF9G
QUlMU19NQVJLRVIpKSB7Ci0gICAgICAgICAgdGVzdExpc3QucHVzaChlbGVtZW50LnJlcGxhY2Uo
R1RFU1RfRkFJTFNfTUFSS0VSLCAnLicpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0
ZXN0TGlzdC5wdXNoKGVsZW1lbnQucmVwbGFjZSgnLicsIEdURVNUX0ZMQUtZX01BUktFUikpOwot
ICAgICAgICAgIHRlc3RMaXN0LnB1c2goZWxlbWVudC5yZXBsYWNlKCcuJywgR1RFU1RfRkFJTFNf
TUFSS0VSKSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOworICAgICAgICB0ZXN0TGlzdC5mb3JFYWNo
KGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBzZWFyY2gg
Zm9yIHRoZSBmbGFreS9mYWlscyBhbmQgbm9uLWZsYWt5L25vbi1mYWlscworICAgICAgICAgICAg
Ly8gbmFtZXMgZm9yIGEgdGVzdC4KKyAgICAgICAgICAgIC8vIGUuZy4gZm9yIHRlc3QgRm9vLkJh
ciwgYWxzbyBzZWFyY2ggZm9yIEZvby5GTEFLWV9CYXIuCisgICAgICAgICAgICBpZiAoc3RyaW5n
Q29udGFpbnMoZWxlbWVudCwgR1RFU1RfRkxBS1lfTUFSS0VSKSkKKyAgICAgICAgICAgICAgICB0
ZXN0TGlzdC5wdXNoKGVsZW1lbnQucmVwbGFjZShHVEVTVF9GTEFLWV9NQVJLRVIsICcuJykpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nQ29udGFpbnMoZWxlbWVudCwgR1RFU1RfRkFJTFNf
TUFSS0VSKSkKKyAgICAgICAgICAgICAgICB0ZXN0TGlzdC5wdXNoKGVsZW1lbnQucmVwbGFjZShH
VEVTVF9GQUlMU19NQVJLRVIsICcuJykpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdGVzdExpc3QucHVzaChlbGVtZW50LnJlcGxhY2UoJy4nLCBHVEVTVF9GTEFLWV9NQVJL
RVIpKTsKKyAgICAgICAgICAgICAgICB0ZXN0TGlzdC5wdXNoKGVsZW1lbnQucmVwbGFjZSgnLics
IEdURVNUX0ZBSUxTX01BUktFUikpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9
CiAKICAgICAvLyBQdXQgdGhlIHRlc3RzIGludG8gYW4gb2JqZWN0IGZpcnN0IGFuZCB0aGVuIG1v
dmUgdGhlbSBpbnRvIGFuIGFycmF5CiAgICAgLy8gYXMgYSB3YXkgb2YgZGVkdXBpbmcuCiAgICAg
dmFyIHRlc3RzTWFwID0ge307CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0TGlzdC5sZW5n
dGg7IGkrKykgewotICAgICAgdmFyIHBhdGggPSB0ZXN0TGlzdFtpXTsKLQotICAgICAgLy8gSWdu
b3JlIHdoaXRlc3BhY2UgZW50cmllcyBhcyB0aGV5J2QgbWF0Y2ggZXZlcnkgdGVzdC4KLSAgICAg
IGlmIChwYXRoLm1hdGNoKC9eXHMqJC8pKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgdmFy
IGFsbFRlc3RzID0gZ2V0QWxsVGVzdHMoKTsKLSAgICAgIHZhciBoYXNBbnlNYXRjaGVzID0gZmFs
c2U7Ci0gICAgICBmb3IgKHZhciB0ZXN0IGluIGFsbFRlc3RzKSB7Ci0gICAgICAgIGlmIChjYXNl
SW5zZW5zaXRpdmVDb250YWlucyh0ZXN0LCBwYXRoKSkgewotICAgICAgICAgIHRlc3RzTWFwW3Rl
c3RdID0gMTsKLSAgICAgICAgICBoYXNBbnlNYXRjaGVzID0gdHJ1ZTsKKyAgICAgICAgdmFyIHBh
dGggPSB0ZXN0TGlzdFtpXTsKKworICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZSBlbnRyaWVz
IGFzIHRoZXknZCBtYXRjaCBldmVyeSB0ZXN0LgorICAgICAgICBpZiAocGF0aC5tYXRjaCgvXlxz
KiQvKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhbGxUZXN0cyA9IGdl
dEFsbFRlc3RzKCk7CisgICAgICAgIHZhciBoYXNBbnlNYXRjaGVzID0gZmFsc2U7CisgICAgICAg
IGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHMpIHsKKyAgICAgICAgICAgIGlmIChjYXNlSW5zZW5z
aXRpdmVDb250YWlucyh0ZXN0LCBwYXRoKSkgeworICAgICAgICAgICAgICAgIHRlc3RzTWFwW3Rl
c3RdID0gMTsKKyAgICAgICAgICAgICAgICBoYXNBbnlNYXRjaGVzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgfQogCi0gICAgICAvLyBJZiBhIHBhdGggZG9lc24ndCBt
YXRjaCBhbnkgdGVzdHMsIHRoZW4gYXNzdW1lIGl0J3MgYSBmdWxsIHBhdGgKLSAgICAgIC8vIHRv
IGEgdGVzdCB0aGF0IHBhc3NlcyBvbiBhbGwgYnVpbGRlcnMuCi0gICAgICBpZiAoIWhhc0FueU1h
dGNoZXMpIHsKLSAgICAgICAgdGVzdHNNYXBbcGF0aF0gPSAxOwotICAgICAgfQorICAgICAgICAv
LyBJZiBhIHBhdGggZG9lc24ndCBtYXRjaCBhbnkgdGVzdHMsIHRoZW4gYXNzdW1lIGl0J3MgYSBm
dWxsIHBhdGgKKyAgICAgICAgLy8gdG8gYSB0ZXN0IHRoYXQgcGFzc2VzIG9uIGFsbCBidWlsZGVy
cy4KKyAgICAgICAgaWYgKCFoYXNBbnlNYXRjaGVzKQorICAgICAgICAgICAgdGVzdHNNYXBbcGF0
aF0gPSAxOwogICAgIH0KIAogICAgIHZhciB0ZXN0c0FycmF5ID0gW107Ci0gICAgZm9yICh2YXIg
dGVzdCBpbiB0ZXN0c01hcCkgewotICAgICAgdGVzdHNBcnJheS5wdXNoKHRlc3QpOwotICAgIH0K
KyAgICBmb3IgKHZhciB0ZXN0IGluIHRlc3RzTWFwKQorICAgICAgICB0ZXN0c0FycmF5LnB1c2go
dGVzdCk7CiAgICAgcmV0dXJuIHRlc3RzQXJyYXk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJu
cyB3aGV0aGVyIHRoaXMgdGVzdCdzIHNsb3dlc3QgdGltZSBpcyBhYm92ZSB0aGUgY3V0b2ZmIGZv
cgotICAgKiBiZWluZyBhIHNsb3cgdGVzdC4KLSAgICovCi0gIGZ1bmN0aW9uIGlzU2xvd1Rlc3Qo
cmVzdWx0c0ZvclRlc3QpIHsKLSAgICB2YXIgbWF4VGltZSA9IGlzRGVidWcocmVzdWx0c0ZvclRl
c3QuYnVpbGRlcikgPwotICAgICAgICBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUX0RFQlVHIDoK
LSAgICAgICAgTUlOX1NFQ09ORFNfRk9SX1NMT1dfVEVTVDsKK30KKworLyoqCisgKiBSZXR1cm5z
IHdoZXRoZXIgdGhpcyB0ZXN0J3Mgc2xvd2VzdCB0aW1lIGlzIGFib3ZlIHRoZSBjdXRvZmYgZm9y
CisgKiBiZWluZyBhIHNsb3cgdGVzdC4KKyAqLworZnVuY3Rpb24gaXNTbG93VGVzdChyZXN1bHRz
Rm9yVGVzdCkKK3sKKyAgICB2YXIgbWF4VGltZSA9IGlzRGVidWcocmVzdWx0c0ZvclRlc3QuYnVp
bGRlcikgPyBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUX0RFQlVHIDogTUlOX1NFQ09ORFNfRk9S
X1NMT1dfVEVTVDsKICAgICByZXR1cm4gcmVzdWx0c0ZvclRlc3Quc2xvd2VzdE5vblRpbWVvdXRD
cmFzaFRpbWUgPiBtYXhUaW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0
aGlzIHRlc3QncyBzbG93ZXN0IHRpbWUgaXMgKndlbGwqIGJlbG93IHRoZSBjdXRvZmYgZm9yCi0g
ICAqIGJlaW5nIGEgc2xvdyB0ZXN0LgotICAgKi8KLSAgZnVuY3Rpb24gaXNGYXN0VGVzdChyZXN1
bHRzRm9yVGVzdCkgewotICAgIHZhciBtYXhUaW1lID0gaXNEZWJ1ZyhyZXN1bHRzRm9yVGVzdC5i
dWlsZGVyKSA/Ci0gICAgICAgIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcgOgotICAg
ICAgICBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUOworfQorCisvKioKKyAqIFJldHVybnMgd2hl
dGhlciB0aGlzIHRlc3QncyBzbG93ZXN0IHRpbWUgaXMgKndlbGwqIGJlbG93IHRoZSBjdXRvZmYg
Zm9yCisgKiBiZWluZyBhIHNsb3cgdGVzdC4KKyAqLworZnVuY3Rpb24gaXNGYXN0VGVzdChyZXN1
bHRzRm9yVGVzdCkKK3sKKyAgICB2YXIgbWF4VGltZSA9IGlzRGVidWcocmVzdWx0c0ZvclRlc3Qu
YnVpbGRlcikgPyBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUX0RFQlVHIDogTUlOX1NFQ09ORFNf
Rk9SX1NMT1dfVEVTVDsKICAgICByZXR1cm4gcmVzdWx0c0ZvclRlc3Quc2xvd2VzdE5vblRpbWVv
dXRDcmFzaFRpbWUgPCBtYXhUaW1lIC8gMjsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldEFsbFRl
c3RzV2l0aFJlc3VsdChyZXN1bHQpIHsKK2Z1bmN0aW9uIGdldEFsbFRlc3RzV2l0aFJlc3VsdChy
ZXN1bHQpCit7CiAgICAgcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKTsKICAgICB2YXIg
dGVzdHMgPSBnZXRBbGxUZXN0cygpOwogICAgIHZhciByZXRWYWwgPSBbXTsKICAgICBmb3IgKHZh
ciB0ZXN0IGluIHRlc3RzKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RUb1Jlc3Vs
dHNNYXBbdGVzdF0ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKHRlc3RUb1Jlc3VsdHNNYXBb
dGVzdF1baV0uYWN0dWFsUmVzdWx0cy5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsKLSAgICAgICAg
ICByZXRWYWwucHVzaCh0ZXN0KTsKLSAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBpZiAodGVzdFRvUmVzdWx0c01hcFt0ZXN0XVtpXS5hY3R1YWxSZXN1bHRzLmluZGV4T2Yo
cmVzdWx0KSAhPSAtMSkgeworICAgICAgICAgICAgICAgIHJldFZhbC5wdXNoKHRlc3QpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9CiAg
ICAgfQogICAgIHJldHVybiByZXRWYWw7Ci0gIH0KK30KIAogCi0gIC8qKgotICAgKiBBZGRzIGFs
bCB0aGUgdGVzdHMgZm9yIHRoZSBnaXZlbiBidWlsZGVyIHRvIHRoZSB0ZXN0TWFwVG9Qb3B1bGF0
ZS4KLSAgICovCi0gIGZ1bmN0aW9uIGFkZFRlc3RzRm9yQnVpbGRlcihidWlsZGVyLCB0ZXN0TWFw
VG9Qb3B1bGF0ZSkgeworLyoqCisgKiBBZGRzIGFsbCB0aGUgdGVzdHMgZm9yIHRoZSBnaXZlbiBi
dWlsZGVyIHRvIHRoZSB0ZXN0TWFwVG9Qb3B1bGF0ZS4KKyAqLworZnVuY3Rpb24gYWRkVGVzdHNG
b3JCdWlsZGVyKGJ1aWxkZXIsIHRlc3RNYXBUb1BvcHVsYXRlKQorewogICAgIHZhciB0ZXN0cyA9
IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0udGVzdHM7CiAgICAgZm9yICh2YXIgdGVzdCBpbiB0
ZXN0cykgewotICAgICAgdGVzdE1hcFRvUG9wdWxhdGVbdGVzdF0gPSB0cnVlOworICAgICAgICB0
ZXN0TWFwVG9Qb3B1bGF0ZVt0ZXN0XSA9IHRydWU7CiAgICAgfQotICB9Cit9CiAKLSAgLy8gTWFw
IG9mIGFsbCB0ZXN0cyB0byB0cnVlIHZhbHVlcyBieSBwbGF0Zm9ybSBhbmQgYnVpbGQgdHlwZS4K
LSAgLy8gZS5nLiBhbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbJ1dJTiddWydERUJVRydd
IHdpbGwgaGF2ZSB0aGUgdW5pb24KLSAgLy8gb2YgYWxsIHRlc3RzIHJ1biBvbiB0aGUgd2luLWRl
YnVnIGJ1aWxkZXJzLgotICB2YXIgYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlID0ge307
Ci0gIGZvciAodmFyIHBsYXRmb3JtIGluIFBMQVRGT1JNUykgeworLy8gTWFwIG9mIGFsbCB0ZXN0
cyB0byB0cnVlIHZhbHVlcyBieSBwbGF0Zm9ybSBhbmQgYnVpbGQgdHlwZS4KKy8vIGUuZy4gYWxs
VGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlWydXSU4nXVsnREVCVUcnXSB3aWxsIGhhdmUgdGhl
IHVuaW9uCisvLyBvZiBhbGwgdGVzdHMgcnVuIG9uIHRoZSB3aW4tZGVidWcgYnVpbGRlcnMuCit2
YXIgYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlID0ge307Citmb3IgKHZhciBwbGF0Zm9y
bSBpbiBQTEFURk9STVMpCiAgICAgYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW3BsYXRm
b3JtXSA9IHt9OwotICB9CiAKLSAgLyoqCi0gICAqIE1hcCBvZiBhbGwgdGVzdHMgdG8gdHJ1ZSB2
YWx1ZXMgYnkgcGxhdGZvcm0gYW5kIGJ1aWxkIHR5cGUuCi0gICAqIGUuZy4gYWxsVGVzdHNCeVBs
YXRmb3JtQW5kQnVpbGRUeXBlWydXSU4nXVsnREVCVUcnXSB3aWxsIGhhdmUgdGhlIHVuaW9uCi0g
ICAqIG9mIGFsbCB0ZXN0cyBydW4gb24gdGhlIHdpbi1kZWJ1ZyBidWlsZGVycy4KLSAgICovCi0g
IGZ1bmN0aW9uIGdldEFsbFRlc3RzV2l0aFNhbWVQbGF0Zm9ybUFuZEJ1aWxkVHlwZShwbGF0Zm9y
bSwgYnVpbGRUeXBlKSB7CisvKioKKyAqIE1hcCBvZiBhbGwgdGVzdHMgdG8gdHJ1ZSB2YWx1ZXMg
YnkgcGxhdGZvcm0gYW5kIGJ1aWxkIHR5cGUuCisgKiBlLmcuIGFsbFRlc3RzQnlQbGF0Zm9ybUFu
ZEJ1aWxkVHlwZVsnV0lOJ11bJ0RFQlVHJ10gd2lsbCBoYXZlIHRoZSB1bmlvbgorICogb2YgYWxs
IHRlc3RzIHJ1biBvbiB0aGUgd2luLWRlYnVnIGJ1aWxkZXJzLgorICovCitmdW5jdGlvbiBnZXRB
bGxUZXN0c1dpdGhTYW1lUGxhdGZvcm1BbmRCdWlsZFR5cGUocGxhdGZvcm0sIGJ1aWxkVHlwZSkK
K3sKICAgICBpZiAoIWFsbFRlc3RzQnlQbGF0Zm9ybUFuZEJ1aWxkVHlwZVtwbGF0Zm9ybV1bYnVp
bGRUeXBlXSkgewotICAgICAgdmFyIHRlc3RzID0ge307Ci0gICAgICBmb3IgKHZhciB0aGlzQnVp
bGRlciBpbiBidWlsZGVycykgewotICAgICAgICB2YXIgdGhpc0J1aWxkZXJCdWlsZEluZm8gPSBn
ZXRQbGF0Zm9ybUFuZEJ1aWxkVHlwZSh0aGlzQnVpbGRlcik7Ci0gICAgICAgIGlmICh0aGlzQnVp
bGRlckJ1aWxkSW5mby5idWlsZFR5cGUgPT0gYnVpbGRUeXBlICYmCi0gICAgICAgICAgICB0aGlz
QnVpbGRlckJ1aWxkSW5mby5wbGF0Zm9ybSA9PSBwbGF0Zm9ybSkgewotICAgICAgICAgIGFkZFRl
c3RzRm9yQnVpbGRlcih0aGlzQnVpbGRlciwgdGVzdHMpOworICAgICAgICB2YXIgdGVzdHMgPSB7
fTsKKyAgICAgICAgZm9yICh2YXIgdGhpc0J1aWxkZXIgaW4gYnVpbGRlcnMpIHsKKyAgICAgICAg
ICAgIHZhciB0aGlzQnVpbGRlckJ1aWxkSW5mbyA9IGdldFBsYXRmb3JtQW5kQnVpbGRUeXBlKHRo
aXNCdWlsZGVyKTsKKyAgICAgICAgICAgIGlmICh0aGlzQnVpbGRlckJ1aWxkSW5mby5idWlsZFR5
cGUgPT0gYnVpbGRUeXBlICYmIHRoaXNCdWlsZGVyQnVpbGRJbmZvLnBsYXRmb3JtID09IHBsYXRm
b3JtKSB7CisgICAgICAgICAgICAgICAgYWRkVGVzdHNGb3JCdWlsZGVyKHRoaXNCdWlsZGVyLCB0
ZXN0cyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGFsbFRlc3Rz
QnlQbGF0Zm9ybUFuZEJ1aWxkVHlwZVtwbGF0Zm9ybV1bYnVpbGRUeXBlXSA9IHRlc3RzOworICAg
ICAgICBhbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1dW2J1aWxkVHlwZV0g
PSB0ZXN0czsKICAgICB9CiAKICAgICByZXR1cm4gYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRU
eXBlW3BsYXRmb3JtXVtidWlsZFR5cGVdOwotICB9Cit9CiAKLSAgZnVuY3Rpb24gYWRkSFRNTFRv
SW5kaXZpZHVhbE9wdGlvbnNBcnJheShhcnJheSwgaHRtbCwgaXNDdXJyZW50UGxhdGZvcm0pIHsK
K2Z1bmN0aW9uIGFkZEhUTUxUb0luZGl2aWR1YWxPcHRpb25zQXJyYXkoYXJyYXksIGh0bWwsIGlz
Q3VycmVudFBsYXRmb3JtKQorewogICAgIGlmIChodG1sKSB7Ci0gICAgICBhcnJheS5wdXNoKCc8
ZGl2IGNsYXNzPSJvcHRpb24nICsKLSAgICAgICAgICAoaXNDdXJyZW50UGxhdGZvcm0gPyAnJyA6
ICcgZGlmZmVyZW50LXBsYXRmb3JtJykgKyAnIj4nICsgaHRtbCArCi0gICAgICAgICAgJzwvZGl2
PicpOworICAgICAgICBhcnJheS5wdXNoKCc8ZGl2IGNsYXNzPSJvcHRpb24nICsKKyAgICAgICAg
ICAgIChpc0N1cnJlbnRQbGF0Zm9ybSA/ICcnIDogJyBkaWZmZXJlbnQtcGxhdGZvcm0nKSArICci
PicgKyBodG1sICsKKyAgICAgICAgICAgICc8L2Rpdj4nKTsKICAgICB9Ci0gIH0KK30KIAotICBm
dW5jdGlvbiBhZGRIdG1sVG9PcHRpb25zQXJyYXlzKGh0bWxBcnJheXMsIGV4cGVjdGF0aW9ucywg
bW9kaWZpZXJzLCBidWdzLAotICAgICAgaXNDdXJyZW50UGxhdGZvcm0pIHsKLSAgICBhZGRIVE1M
VG9JbmRpdmlkdWFsT3B0aW9uc0FycmF5KGh0bWxBcnJheXMuZXhwZWN0YXRpb25zLCBleHBlY3Rh
dGlvbnMsCi0gICAgICAgIGlzQ3VycmVudFBsYXRmb3JtKTsKLSAgICBhZGRIVE1MVG9JbmRpdmlk
dWFsT3B0aW9uc0FycmF5KGh0bWxBcnJheXMubW9kaWZpZXJzLCBtb2RpZmllcnMsCi0gICAgICAg
IGlzQ3VycmVudFBsYXRmb3JtKTsKLSAgICBhZGRIVE1MVG9JbmRpdmlkdWFsT3B0aW9uc0FycmF5
KGh0bWxBcnJheXMuYnVncywgZ2V0SHRtbEZvckJ1Z3MoYnVncyksCi0gICAgICAgIGlzQ3VycmVu
dFBsYXRmb3JtKTsKLSAgfQorZnVuY3Rpb24gYWRkSHRtbFRvT3B0aW9uc0FycmF5cyhodG1sQXJy
YXlzLCBleHBlY3RhdGlvbnMsIG1vZGlmaWVycywgYnVncywgaXNDdXJyZW50UGxhdGZvcm0pCit7
CisgICAgYWRkSFRNTFRvSW5kaXZpZHVhbE9wdGlvbnNBcnJheShodG1sQXJyYXlzLmV4cGVjdGF0
aW9ucywgZXhwZWN0YXRpb25zLCBpc0N1cnJlbnRQbGF0Zm9ybSk7CisgICAgYWRkSFRNTFRvSW5k
aXZpZHVhbE9wdGlvbnNBcnJheShodG1sQXJyYXlzLm1vZGlmaWVycywgbW9kaWZpZXJzLCBpc0N1
cnJlbnRQbGF0Zm9ybSk7CisgICAgYWRkSFRNTFRvSW5kaXZpZHVhbE9wdGlvbnNBcnJheShodG1s
QXJyYXlzLmJ1Z3MsIGdldEh0bWxGb3JCdWdzKGJ1Z3MpLCBpc0N1cnJlbnRQbGF0Zm9ybSk7Cit9
CiAKLSAgZnVuY3Rpb24gZ2V0RXhwZWN0YXRpb25zKHRlc3QsIHBsYXRmb3JtLCBidWlsZFR5cGUp
IHsKK2Z1bmN0aW9uIGdldEV4cGVjdGF0aW9ucyh0ZXN0LCBwbGF0Zm9ybSwgYnVpbGRUeXBlKQor
ewogICAgIHZhciB0ZXN0T2JqZWN0ID0gYWxsRXhwZWN0YXRpb25zW3Rlc3RdOwogICAgIGlmICgh
dGVzdE9iamVjdCkKLSAgICAgIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gbnVsbDsKIAog
ICAgIHZhciBwbGF0Zm9ybU9iamVjdDsKLSAgICB3aGlsZSAocGxhdGZvcm0gJiYgIShwbGF0Zm9y
bU9iamVjdCA9IHRlc3RPYmplY3RbcGxhdGZvcm1dKSkgeworICAgIHdoaWxlIChwbGF0Zm9ybSAm
JiAhKHBsYXRmb3JtT2JqZWN0ID0gdGVzdE9iamVjdFtwbGF0Zm9ybV0pKQogICAgICAgcGxhdGZv
cm0gPSBQTEFURk9STV9GQUxMQkFDS1NbcGxhdGZvcm1dOwotICAgIH0KIAogICAgIGlmIChwbGF0
Zm9ybU9iamVjdCkgewotICAgICAgaWYgKHBsYXRmb3JtT2JqZWN0W2J1aWxkVHlwZV0pCi0gICAg
ICAgIHJldHVybiBwbGF0Zm9ybU9iamVjdFtidWlsZFR5cGVdCisgICAgICAgIGlmIChwbGF0Zm9y
bU9iamVjdFtidWlsZFR5cGVdKQorICAgICAgICAgICAgcmV0dXJuIHBsYXRmb3JtT2JqZWN0W2J1
aWxkVHlwZV07CiAKLSAgICAgIGlmIChwbGF0Zm9ybU9iamVjdFtBTExdKQotICAgICAgICByZXR1
cm4gcGxhdGZvcm1PYmplY3RbQUxMXTsKKyAgICAgICAgaWYgKHBsYXRmb3JtT2JqZWN0W0FMTF0p
CisgICAgICAgICAgICByZXR1cm4gcGxhdGZvcm1PYmplY3RbQUxMXTsKIAotICAgICAgaWYgKHRl
c3RPYmplY3RbQUxMXSkgewotICAgICAgICB2YXIgYWxsUGxhdGZvcm1PYmplY3QgPSB0ZXN0T2Jq
ZWN0W0FMTF07Ci0gICAgICAgIGlmIChhbGxQbGF0Zm9ybU9iamVjdFtidWlsZFR5cGVdKQotICAg
ICAgICAgIHJldHVybiBhbGxQbGF0Zm9ybU9iamVjdFtidWlsZFR5cGVdCisgICAgICAgIGlmICh0
ZXN0T2JqZWN0W0FMTF0pIHsKKyAgICAgICAgICAgIHZhciBhbGxQbGF0Zm9ybU9iamVjdCA9IHRl
c3RPYmplY3RbQUxMXTsKKyAgICAgICAgICAgIGlmIChhbGxQbGF0Zm9ybU9iamVjdFtidWlsZFR5
cGVdKQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxQbGF0Zm9ybU9iamVjdFtidWlsZFR5cGVd
OwogCi0gICAgICAgIGlmIChhbGxQbGF0Zm9ybU9iamVjdFtBTExdKQotICAgICAgICAgIHJldHVy
biBhbGxQbGF0Zm9ybU9iamVjdFtBTExdCi0gICAgICB9CisgICAgICAgICAgICBpZiAoYWxsUGxh
dGZvcm1PYmplY3RbQUxMXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWxsUGxhdGZvcm1PYmpl
Y3RbQUxMXTsKKyAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG51bGw7Ci0gIH0KK30KIAot
ICBmdW5jdGlvbiBwb3B1bGF0ZUV4cGVjdGF0aW9uc0RhdGEocmVzdWx0c09iaikgeworZnVuY3Rp
b24gcG9wdWxhdGVFeHBlY3RhdGlvbnNEYXRhKHJlc3VsdHNPYmopCit7CiAgICAgdmFyIHRlc3Qg
PSByZXN1bHRzT2JqLnRlc3Q7CiAKICAgICB2YXIgYnVpbGRJbmZvID0gZ2V0UGxhdGZvcm1BbmRC
dWlsZFR5cGUocmVzdWx0c09iai5idWlsZGVyKTsKQEAgLTc5OSwxMjUgKzc5MSwxMTcgQEAgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAgICB2YXIgdXNlZEV4cGVjdGF0aW9ucyA9IHt9OwogCiAgICAgZm9yICh2YXIg
cGxhdGZvcm0gaW4gYWxsRXhwZWN0YXRpb25zW3Rlc3RdKSB7Ci0gICAgICB2YXIgcGxhdGZvcm1P
YmplY3QgPSB0ZXN0T2JqZWN0W3BsYXRmb3JtXTsKLSAgICAgIGZvciAodmFyIGJ1aWxkVHlwZSBp
biBwbGF0Zm9ybU9iamVjdCkgewotICAgICAgICB2YXIgdGhpc0V4cGVjdGF0aW9ucyA9IHBsYXRm
b3JtT2JqZWN0W2J1aWxkVHlwZV07Ci0gICAgICAgIHZhciBtb2RpZmllcnMgPSB0aGlzRXhwZWN0
YXRpb25zLm1vZGlmaWVyczsKLQotICAgICAgICAvLyBBIHNldCBvZiBtb2RpZmllcnMvZXhwZWN0
YXRpb25zIGNhbiBhcHBseSB0byBtdWx0aXBsZSBwbGF0Zm9ybXMuCi0gICAgICAgIC8vIE9ubHkg
YWRkIEhUTUwgZm9yIGVhY2ggZW50cnkgb25jZS4KLSAgICAgICAgaWYgKHVzZWRFeHBlY3RhdGlv
bnNbbW9kaWZpZXJzXSkKLSAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB1c2VkRXhwZWN0
YXRpb25zW21vZGlmaWVyc10gPSB0cnVlOwotCi0gICAgICAgIHZhciBidWdzID0gbW9kaWZpZXJz
Lm1hdGNoKC9CVUcoV0t8Q1IpP1xkKy9nKTsKLSAgICAgICAgaWYgKGJ1Z3MpIHsKLSAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1Z3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgIG1v
ZGlmaWVycyA9IG1vZGlmaWVycy5yZXBsYWNlKGJ1Z3Nbal0sICcnKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgbW9kaWZpZXJzID0gdHJpbVN0cmluZyhtb2RpZmllcnMpOwotICAgICAgICAgIGJ1
Z3MgPSBidWdzLmpvaW4oJyAnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBidWdzID0g
Jyc7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZXhwZWN0YXRpb25zID0gdGhpc0V4cGVjdGF0
aW9ucy5leHBlY3RhdGlvbnM7Ci0gICAgICAgIGlmICh0aGlzRXhwZWN0YXRpb25zID09IHRoaXNQ
bGF0Zm9ybUV4cGVjdGF0aW9ucykgewotICAgICAgICAgIHJlc3VsdHNPYmouYnVncyA9IGJ1Z3M7
Ci0gICAgICAgICAgcmVzdWx0c09iai5leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnM7Ci0gICAg
ICAgICAgcmVzdWx0c09iai5tb2RpZmllcnMgPSBtb2RpZmllcnM7Ci0gICAgICAgICAgcmVzdWx0
c09iai5pc1dvbnRGaXhTa2lwID0gc3RyaW5nQ29udGFpbnMobW9kaWZpZXJzLCAnV09OVEZJWCcp
IHx8Ci0gICAgICAgICAgICAgIHN0cmluZ0NvbnRhaW5zKG1vZGlmaWVycywgJ1NLSVAnKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhZGRIdG1sVG9PcHRpb25zQXJyYXlzKGh0bWxBcnJh
eXMsIGV4cGVjdGF0aW9ucywgbW9kaWZpZXJzLCBidWdzLAotICAgICAgICAgICAgICBmYWxzZSk7
CisgICAgICAgIHZhciBwbGF0Zm9ybU9iamVjdCA9IHRlc3RPYmplY3RbcGxhdGZvcm1dOworICAg
ICAgICBmb3IgKHZhciBidWlsZFR5cGUgaW4gcGxhdGZvcm1PYmplY3QpIHsKKyAgICAgICAgICAg
IHZhciB0aGlzRXhwZWN0YXRpb25zID0gcGxhdGZvcm1PYmplY3RbYnVpbGRUeXBlXTsKKyAgICAg
ICAgICAgIHZhciBtb2RpZmllcnMgPSB0aGlzRXhwZWN0YXRpb25zLm1vZGlmaWVyczsKKworICAg
ICAgICAgICAgLy8gQSBzZXQgb2YgbW9kaWZpZXJzL2V4cGVjdGF0aW9ucyBjYW4gYXBwbHkgdG8g
bXVsdGlwbGUgcGxhdGZvcm1zLgorICAgICAgICAgICAgLy8gT25seSBhZGQgSFRNTCBmb3IgZWFj
aCBlbnRyeSBvbmNlLgorICAgICAgICAgICAgaWYgKHVzZWRFeHBlY3RhdGlvbnNbbW9kaWZpZXJz
XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdXNlZEV4cGVjdGF0
aW9uc1ttb2RpZmllcnNdID0gdHJ1ZTsKKworICAgICAgICAgICAgdmFyIGJ1Z3MgPSBtb2RpZmll
cnMubWF0Y2goL0JVRyhXS3xDUik/XGQrL2cpOworICAgICAgICAgICAgaWYgKGJ1Z3MpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1Z3MubGVuZ3RoOyBqKyspCisgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVycyA9IG1vZGlmaWVycy5yZXBsYWNlKGJ1Z3Nbal0sICcn
KTsKKworICAgICAgICAgICAgICAgIG1vZGlmaWVycyA9IHRyaW1TdHJpbmcobW9kaWZpZXJzKTsK
KyAgICAgICAgICAgICAgICBidWdzID0gYnVncy5qb2luKCcgJyk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgYnVncyA9ICcnOworCisgICAgICAgICAgICB2YXIgZXhwZWN0YXRp
b25zID0gdGhpc0V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbnM7CisgICAgICAgICAgICBpZiAodGhp
c0V4cGVjdGF0aW9ucyA9PSB0aGlzUGxhdGZvcm1FeHBlY3RhdGlvbnMpIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHRzT2JqLmJ1Z3MgPSBidWdzOworICAgICAgICAgICAgICAgIHJlc3VsdHNPYmou
ZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zOworICAgICAgICAgICAgICAgIHJlc3VsdHNPYmou
bW9kaWZpZXJzID0gbW9kaWZpZXJzOworICAgICAgICAgICAgICAgIHJlc3VsdHNPYmouaXNXb250
Rml4U2tpcCA9IHN0cmluZ0NvbnRhaW5zKG1vZGlmaWVycywgJ1dPTlRGSVgnKSB8fCBzdHJpbmdD
b250YWlucyhtb2RpZmllcnMsICdTS0lQJyk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBhZGRIdG1sVG9PcHRpb25zQXJyYXlzKGh0bWxBcnJheXMsIGV4cGVjdGF0aW9ucywg
bW9kaWZpZXJzLCBidWdzLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAocmVzdWx0c09iai5leHBlY3RhdGlvbnMpIHsKLSAgICAgIGFkZEh0bWxUb09wdGlvbnNB
cnJheXMoaHRtbEFycmF5cywgcmVzdWx0c09iai5leHBlY3RhdGlvbnMsCi0gICAgICAgICAgcmVz
dWx0c09iai5tb2RpZmllcnMsIHJlc3VsdHNPYmouYnVncywgdHJ1ZSk7Ci0gICAgfQorICAgIGlm
IChyZXN1bHRzT2JqLmV4cGVjdGF0aW9ucykKKyAgICAgIGFkZEh0bWxUb09wdGlvbnNBcnJheXMo
aHRtbEFycmF5cywgcmVzdWx0c09iai5leHBlY3RhdGlvbnMsIHJlc3VsdHNPYmoubW9kaWZpZXJz
LCByZXN1bHRzT2JqLmJ1Z3MsIHRydWUpOwogCiAgICAgcmVzdWx0c09iai5idWdzSFRNTCArPSBo
dG1sQXJyYXlzLmJ1Z3Muam9pbignPGRpdiBjbGFzcz1zZXBhcmF0b3I+PC9kaXY+Jyk7Ci0gICAg
cmVzdWx0c09iai5leHBlY3RhdGlvbnNIVE1MICs9Ci0gICAgICAgIGh0bWxBcnJheXMuZXhwZWN0
YXRpb25zLmpvaW4oJzxkaXYgY2xhc3M9c2VwYXJhdG9yPjwvZGl2PicpOwotICAgIHJlc3VsdHNP
YmoubW9kaWZpZXJzSFRNTCArPQotICAgICAgICBodG1sQXJyYXlzLm1vZGlmaWVycy5qb2luKCc8
ZGl2IGNsYXNzPXNlcGFyYXRvcj48L2Rpdj4nKTsKLSAgfQorICAgIHJlc3VsdHNPYmouZXhwZWN0
YXRpb25zSFRNTCArPSBodG1sQXJyYXlzLmV4cGVjdGF0aW9ucy5qb2luKCc8ZGl2IGNsYXNzPXNl
cGFyYXRvcj48L2Rpdj4nKTsKKyAgICByZXN1bHRzT2JqLm1vZGlmaWVyc0hUTUwgKz0gaHRtbEFy
cmF5cy5tb2RpZmllcnMuam9pbignPGRpdiBjbGFzcz1zZXBhcmF0b3I+PC9kaXY+Jyk7Cit9CiAK
LSAgZnVuY3Rpb24gYWRkRmFsbGJhY2tzKGFkZEZuLCBjYW5kaWRhdGVzLCB2YWxpZFZhbHVlcykg
eworZnVuY3Rpb24gYWRkRmFsbGJhY2tzKGFkZEZuLCBjYW5kaWRhdGVzLCB2YWxpZFZhbHVlcykK
K3sKICAgICB2YXIgaGFzQW55VmFsaWRWYWx1ZXMgPSBmYWxzZTsKICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNhbmRpZGF0ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChjYW5kaWRhdGVzW2ld
IGluIHZhbGlkVmFsdWVzKSB7Ci0gICAgICAgIGhhc0FueVZhbGlkVmFsdWVzID0gdHJ1ZTsKLSAg
ICAgICAgYWRkRm4oY2FuZGlkYXRlc1tpXSk7Ci0gICAgICB9CisgICAgICAgIGlmIChjYW5kaWRh
dGVzW2ldIGluIHZhbGlkVmFsdWVzKSB7CisgICAgICAgICAgICBoYXNBbnlWYWxpZFZhbHVlcyA9
IHRydWU7CisgICAgICAgICAgICBhZGRGbihjYW5kaWRhdGVzW2ldKTsKKyAgICAgICAgfQogICAg
IH0KICAgICBpZiAoIWhhc0FueVZhbGlkVmFsdWVzKQotICAgICAgYWRkRm4oQUxMKTsKLSAgfQor
ICAgICAgICBhZGRGbihBTEwpOworfQogCi0gIGZ1bmN0aW9uIGFkZFRlc3RUb0FsbEV4cGVjdGF0
aW9ucyh0ZXN0LCBleHBlY3RhdGlvbnMpIHsKK2Z1bmN0aW9uIGFkZFRlc3RUb0FsbEV4cGVjdGF0
aW9ucyh0ZXN0LCBleHBlY3RhdGlvbnMpCit7CiAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBleHBl
Y3RhdGlvbnMubGVuZ3RoOyBqKyspIHsKLSAgICAgIHZhciBtb2RpZmllcnMgPSBleHBlY3RhdGlv
bnNbal0ubW9kaWZpZXJzLnNwbGl0KCcgJyk7Ci0gICAgICBhZGRGYWxsYmFja3MoZnVuY3Rpb24o
cGxhdGZvcm1LZXkpIHsKLSAgICAgICAgYWRkRmFsbGJhY2tzKGZ1bmN0aW9uKGJ1aWxkVHlwZUtl
eSkgewotICAgICAgICAgIC8vIFNldHRpbmcgdGhlIEFMTCBrZXkgb3ZlcnJpZGVzIGFueSBwcmV2
aW91c2x5IHNlZW4gZXhwZWN0YXRpb25zLgotICAgICAgICAgIGlmIChwbGF0Zm9ybUtleSA9PSBB
TEwpIHsKLSAgICAgICAgICAgIC8vIFRPRE8ob2phbik6IFRoaXMgaXMgYnJva2VuLiBQTEFURk9S
TVMgaXMgYW4gb2JqZWN0LCBub3QgYW4gYXJyYXkuCi0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0
IGlmIHdlIHNob3VsZCBqdXN0IGJlIGRlbGV0aW5nIHRoaXMgb3IgZml4aW5nIGl0LgotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBQTEFURk9STVMubGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgaWYgKFBMQVRGT1JNU1tpXSBpbiBhbGxFeHBlY3RhdGlvbnNbdGVzdF0pIHsKLSAg
ICAgICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBBTEwga2V5IG92ZXJyaWRlcyBhbnkgcHJldmlv
dXNseSBzZWVuCi0gICAgICAgICAgICAgICAgLy8gZXhwZWN0YXRpb25zLgotICAgICAgICAgICAg
ICAgIGlmIChidWlsZFR5cGVLZXkgPT0gQUxMKQotICAgICAgICAgICAgICAgICAgYWxsRXhwZWN0
YXRpb25zW3Rlc3RdW1BMQVRGT1JNU1tpXV0gPSB7fTsKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgIH0gZWxzZSBpZiAoYnVpbGRUeXBlS2V5ID09IEFMTCAmJiBhbGxF
eHBlY3RhdGlvbnNbdGVzdF0pIHsKLSAgICAgICAgICAgIGFsbEV4cGVjdGF0aW9uc1t0ZXN0XVtw
bGF0Zm9ybUtleV0gPSB7fQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghYWxsRXhwZWN0
YXRpb25zW3Rlc3RdKQotICAgICAgICAgICAgYWxsRXhwZWN0YXRpb25zW3Rlc3RdID0ge307Ci0K
LSAgICAgICAgICB2YXIgdGVzdEhvbGRlciA9IGFsbEV4cGVjdGF0aW9uc1t0ZXN0XTsKLSAgICAg
ICAgICBpZiAoIXRlc3RIb2xkZXJbcGxhdGZvcm1LZXldKQotICAgICAgICAgICAgdGVzdEhvbGRl
cltwbGF0Zm9ybUtleV0gPSB7fQotCi0gICAgICAgICAgdGVzdEhvbGRlcltwbGF0Zm9ybUtleV1b
YnVpbGRUeXBlS2V5XSA9IGV4cGVjdGF0aW9uc1tqXTsKLSAgICAgICAgfSwgbW9kaWZpZXJzLCBC
VUlMRF9UWVBFUyk7Ci0gICAgICB9LCBtb2RpZmllcnMsIFBMQVRGT1JNUyk7Ci0gICAgfQotICB9
Ci0KLSAgLyoqCi0gICAqIERhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHByb2Nlc3NlZCBleHBl
Y3RhdGlvbnMuCi0gICAqIGFsbEV4cGVjdGF0aW9uc1t0ZXN0UGF0aF1bcGxhdGZvcm1dW2J1aWxk
VHlwZV0gZ2V0cyB0aGUgb2JqZWN0IHRoYXQgaGFzCi0gICAqIGV4cGVjdGF0aW9ucyBhbmQgbW9k
aWZpZXJzIHByb3BlcnRpZXMgZm9yIHRoaXMgcGxhdGZvcm0vYnVpbGRUeXBlLgotICAgKgotICAg
KiBwbGF0Zm9ybSBhbmQgYnVpbGRUeXBlIGJvdGggZ28gdGhyb3VnaCBmYWxsYmFjayBzZXRzIG9m
IGtleXMgZnJvbSBtb3N0Ci0gICAqIHNwZWNpZmljIGtleSB0byBsZWFzdCBzcGVjaWZpYy4gRm9y
IGV4YW1wbGUsIG9uIFdpbmRvd3MgVmlzdGEsIHdlIGZpcnN0Ci0gICAqIGNoZWNrIHRoZSBwbGF0
Zm9ybSBXSU4tVklTVEEsIGlmIHRoZXJlJ3Mgbm8gc3VjaCBvYmplY3QsIHdlIGNoZWNrIFdJTiwK
LSAgICogdGhlbiBmaW5hbGx5IHdlIGNoZWNrIEFMTC4gRm9yIGJ1aWxkIHR5cGVzLCB3ZSBjaGVj
ayB0aGUgY3VycmVudAotICAgKiBidWlsZFR5cGUsIHRoZW4gQUxMLgotICAgKi8KLSAgdmFyIGFs
bEV4cGVjdGF0aW9uczsKLQotICBmdW5jdGlvbiBwcm9jZXNzRXhwZWN0YXRpb25zKCkgeworICAg
ICAgICB2YXIgbW9kaWZpZXJzID0gZXhwZWN0YXRpb25zW2pdLm1vZGlmaWVycy5zcGxpdCgnICcp
OworICAgICAgICBhZGRGYWxsYmFja3MoZnVuY3Rpb24ocGxhdGZvcm1LZXkpIHsKKyAgICAgICAg
ICAgIGFkZEZhbGxiYWNrcyhmdW5jdGlvbihidWlsZFR5cGVLZXkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBTZXR0aW5nIHRoZSBBTEwga2V5IG92ZXJyaWRlcyBhbnkgcHJldmlvdXNseSBzZWVuIGV4
cGVjdGF0aW9ucy4KKyAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm1LZXkgPT0gQUxMKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRPRE8ob2phbik6IFRoaXMgaXMgYnJva2VuLiBQTEFURk9S
TVMgaXMgYW4gb2JqZWN0LCBub3QgYW4gYXJyYXkuCisgICAgICAgICAgICAgICAgICAgIC8vIEZp
Z3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGp1c3QgYmUgZGVsZXRpbmcgdGhpcyBvciBmaXhpbmcgaXQu
CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUExBVEZPUk1TLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKFBMQVRGT1JNU1tpXSBpbiBhbGxF
eHBlY3RhdGlvbnNbdGVzdF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcg
dGhlIEFMTCBrZXkgb3ZlcnJpZGVzIGFueSBwcmV2aW91c2x5IHNlZW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
dWlsZFR5cGVLZXkgPT0gQUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxFeHBlY3Rh
dGlvbnNbdGVzdF1bUExBVEZPUk1TW2ldXSA9IHt9OworICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVpbGRU
eXBlS2V5ID09IEFMTCAmJiBhbGxFeHBlY3RhdGlvbnNbdGVzdF0pCisgICAgICAgICAgICAgICAg
ICAgIGFsbEV4cGVjdGF0aW9uc1t0ZXN0XVtwbGF0Zm9ybUtleV0gPSB7fQorCisgICAgICAgICAg
ICAgICAgaWYgKCFhbGxFeHBlY3RhdGlvbnNbdGVzdF0pCisgICAgICAgICAgICAgICAgICAgIGFs
bEV4cGVjdGF0aW9uc1t0ZXN0XSA9IHt9OworCisgICAgICAgICAgICAgICAgdmFyIHRlc3RIb2xk
ZXIgPSBhbGxFeHBlY3RhdGlvbnNbdGVzdF07CisgICAgICAgICAgICAgICAgaWYgKCF0ZXN0SG9s
ZGVyW3BsYXRmb3JtS2V5XSkKKyAgICAgICAgICAgICAgICAgICAgdGVzdEhvbGRlcltwbGF0Zm9y
bUtleV0gPSB7fQorCisgICAgICAgICAgICAgICAgdGVzdEhvbGRlcltwbGF0Zm9ybUtleV1bYnVp
bGRUeXBlS2V5XSA9IGV4cGVjdGF0aW9uc1tqXTsKKyAgICAgICAgICAgIH0sIG1vZGlmaWVycywg
QlVJTERfVFlQRVMpOworICAgICAgICB9LCBtb2RpZmllcnMsIFBMQVRGT1JNUyk7CisgICAgfQor
fQorCisvKioKKyAqIERhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHByb2Nlc3NlZCBleHBlY3Rh
dGlvbnMuCisgKiBhbGxFeHBlY3RhdGlvbnNbdGVzdFBhdGhdW3BsYXRmb3JtXVtidWlsZFR5cGVd
IGdldHMgdGhlIG9iamVjdCB0aGF0IGhhcworICogZXhwZWN0YXRpb25zIGFuZCBtb2RpZmllcnMg
cHJvcGVydGllcyBmb3IgdGhpcyBwbGF0Zm9ybS9idWlsZFR5cGUuCisgKgorICogcGxhdGZvcm0g
YW5kIGJ1aWxkVHlwZSBib3RoIGdvIHRocm91Z2ggZmFsbGJhY2sgc2V0cyBvZiBrZXlzIGZyb20g
bW9zdAorICogc3BlY2lmaWMga2V5IHRvIGxlYXN0IHNwZWNpZmljLiBGb3IgZXhhbXBsZSwgb24g
V2luZG93cyBWaXN0YSwgd2UgZmlyc3QKKyAqIGNoZWNrIHRoZSBwbGF0Zm9ybSBXSU4tVklTVEEs
IGlmIHRoZXJlJ3Mgbm8gc3VjaCBvYmplY3QsIHdlIGNoZWNrIFdJTiwKKyAqIHRoZW4gZmluYWxs
eSB3ZSBjaGVjayBBTEwuIEZvciBidWlsZCB0eXBlcywgd2UgY2hlY2sgdGhlIGN1cnJlbnQKKyAq
IGJ1aWxkVHlwZSwgdGhlbiBBTEwuCisgKi8KK3ZhciBhbGxFeHBlY3RhdGlvbnM7CisKK2Z1bmN0
aW9uIHByb2Nlc3NFeHBlY3RhdGlvbnMoKQorewogICAgIGlmIChhbGxFeHBlY3RhdGlvbnMpCi0g
ICAgICByZXR1cm4gYWxsRXhwZWN0YXRpb25zOworICAgICAgICByZXR1cm4gYWxsRXhwZWN0YXRp
b25zOwogCiAgICAgYWxsRXhwZWN0YXRpb25zID0ge307CiAKICAgICB2YXIgZXhwZWN0YXRpb25z
QXJyYXkgPSBbXTsKLSAgICBmb3IgKHZhciBwYXRoIGluIGV4cGVjdGF0aW9uc0J5VGVzdCkgewot
ICAgICAgZXhwZWN0YXRpb25zQXJyYXkucHVzaCgKLSAgICAgICAgICB7cGF0aDogcGF0aCwgZXhw
ZWN0YXRpb25zOiBleHBlY3RhdGlvbnNCeVRlc3RbcGF0aF19KTsKLSAgICB9CisgICAgZm9yICh2
YXIgcGF0aCBpbiBleHBlY3RhdGlvbnNCeVRlc3QpCisgICAgICAgIGV4cGVjdGF0aW9uc0FycmF5
LnB1c2goe3BhdGg6IHBhdGgsIGV4cGVjdGF0aW9uczogZXhwZWN0YXRpb25zQnlUZXN0W3BhdGhd
fSk7CiAKICAgICAvLyBTb3J0IHRoZSBhcnJheSB0byBoaXQgbW9yZSBzcGVjaWZpYyBwYXRocyBs
YXN0LiBNb3JlIHNwZWNpZmljCiAgICAgLy8gcGF0aHMgKGUuZy4gZm9vL2Jhci9iYXouaHRtbCkg
b3ZlcnJpZGUgZW50cmllcyBmb3IgbGVzcy1zcGVjaWZpYyBvbmVzCkBAIC05MjYsODQgKzkxMCw4
MSBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiAgICAgdmFyIGFsbFRlc3RzID0gZ2V0QWxsVGVzdHMoKTsKICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGF0aW9uc0FycmF5Lmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICB2YXIgcGF0aCA9IGV4cGVjdGF0aW9uc0FycmF5W2ldLnBhdGg7Ci0gICAgICB2YXIgZXhw
ZWN0YXRpb25zID0gZXhwZWN0YXRpb25zQXJyYXlbaV0uZXhwZWN0YXRpb25zOwotCi0gICAgICB2
YXIgcGF0aE1hdGNoZXNBbnlUZXN0ID0gZmFsc2U7Ci0gICAgICBpZiAoYWxsVGVzdHNbcGF0aF0p
IHsKLSAgICAgICAgcGF0aE1hdGNoZXNBbnlUZXN0ID0gdHJ1ZTsKLSAgICAgICAgYWRkVGVzdFRv
QWxsRXhwZWN0YXRpb25zKHBhdGgsIGV4cGVjdGF0aW9ucyk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBmb3IgKHZhciB0ZXN0IGluIGFsbFRlc3RzKSB7Ci0gICAgICAgICAgaWYgKHN0YXJ0c1dp
dGgodGVzdCwgcGF0aCkpIHsKKyAgICAgICAgdmFyIHBhdGggPSBleHBlY3RhdGlvbnNBcnJheVtp
XS5wYXRoOworICAgICAgICB2YXIgZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zQXJyYXlbaV0u
ZXhwZWN0YXRpb25zOworCisgICAgICAgIHZhciBwYXRoTWF0Y2hlc0FueVRlc3QgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGFsbFRlc3RzW3BhdGhdKSB7CiAgICAgICAgICAgICBwYXRoTWF0Y2hlc0Fu
eVRlc3QgPSB0cnVlOwotICAgICAgICAgICAgYWRkVGVzdFRvQWxsRXhwZWN0YXRpb25zKHRlc3Qs
IGV4cGVjdGF0aW9ucyk7Ci0gICAgICAgICAgfQorICAgICAgICAgICAgYWRkVGVzdFRvQWxsRXhw
ZWN0YXRpb25zKHBhdGgsIGV4cGVjdGF0aW9ucyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmb3IgKHZhciB0ZXN0IGluIGFsbFRlc3RzKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0c1dpdGgodGVzdCwgcGF0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0aE1hdGNoZXNB
bnlUZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVGVzdFRvQWxsRXhwZWN0YXRp
b25zKHRlc3QsIGV4cGVjdGF0aW9ucyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICB9CiAKLSAgICAgIGlmICghcGF0aE1hdGNoZXNBbnlUZXN0KQot
ICAgICAgICBhZGRUZXN0VG9BbGxFeHBlY3RhdGlvbnMocGF0aCwgZXhwZWN0YXRpb25zKTsKKyAg
ICAgICAgaWYgKCFwYXRoTWF0Y2hlc0FueVRlc3QpCisgICAgICAgICAgICBhZGRUZXN0VG9BbGxF
eHBlY3RhdGlvbnMocGF0aCwgZXhwZWN0YXRpb25zKTsKICAgICB9Ci0gIH0KK30KIAotICBmdW5j
dGlvbiBwcm9jZXNzTWlzc2luZ1Rlc3RzV2l0aEV4cGVjdGF0aW9ucyhidWlsZGVyLCBwbGF0Zm9y
bSwgYnVpbGRUeXBlKSB7CitmdW5jdGlvbiBwcm9jZXNzTWlzc2luZ1Rlc3RzV2l0aEV4cGVjdGF0
aW9ucyhidWlsZGVyLCBwbGF0Zm9ybSwgYnVpbGRUeXBlKQorewogICAgIHZhciBub0ZhaWx1cmVz
ID0gW107CiAgICAgdmFyIHNraXBwZWQgPSBbXTsKIAotICAgIHZhciBhbGxUZXN0c0ZvclBsYXRm
b3JtQW5kQnVpbGRUeXBlID0KLSAgICAgICAgZ2V0QWxsVGVzdHNXaXRoU2FtZVBsYXRmb3JtQW5k
QnVpbGRUeXBlKHBsYXRmb3JtLCBidWlsZFR5cGUpOworICAgIHZhciBhbGxUZXN0c0ZvclBsYXRm
b3JtQW5kQnVpbGRUeXBlID0gZ2V0QWxsVGVzdHNXaXRoU2FtZVBsYXRmb3JtQW5kQnVpbGRUeXBl
KHBsYXRmb3JtLCBidWlsZFR5cGUpOwogICAgIGZvciAodmFyIHRlc3QgaW4gYWxsRXhwZWN0YXRp
b25zKSB7Ci0gICAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKHRlc3QsIHBs
YXRmb3JtLCBidWlsZFR5cGUpOwotCi0gICAgICBpZiAoIWV4cGVjdGF0aW9ucykKLSAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgIC8vIFRlc3QgaGFzIGV4cGVjdGF0aW9ucywgYnV0IG5vIHJlc3Vs
dCBpbiB0aGUgYnVpbGRlcnMgcmVzdWx0cy4KLSAgICAgIC8vIFRoaXMgbWVhbnMgaXQncyBlaXRo
ZXIgU0tJUCBvciBwYXNzZXMgb24gYWxsIGJ1aWxkcy4KLSAgICAgIGlmICghYWxsVGVzdHNGb3JQ
bGF0Zm9ybUFuZEJ1aWxkVHlwZVt0ZXN0XSAmJgotICAgICAgICAgICFzdHJpbmdDb250YWlucyhl
eHBlY3RhdGlvbnMubW9kaWZpZXJzLCAnV09OVEZJWCcpKSB7Ci0gICAgICAgIGlmIChzdHJpbmdD
b250YWlucyhleHBlY3RhdGlvbnMubW9kaWZpZXJzLCAnU0tJUCcpKSB7Ci0gICAgICAgICAgc2tp
cHBlZC5wdXNoKHRlc3QpOwotICAgICAgICB9IGVsc2UgaWYgKCFleHBlY3RhdGlvbnMuZXhwZWN0
YXRpb25zLm1hdGNoKC9eXHMqUEFTU1xzKiQvKSkgewotICAgICAgICAgIC8vIERvbid0IHNob3cg
dGVzdHMgZXhwZWN0ZWQgdG8gYWx3YXlzIHBhc3MuIFRoaXMgaXMgdXNlZCBpbiB3YXlzIGxpa2UK
LSAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nOgotICAgICAgICAgIC8vIGZvby9iYXIgPSBGQUlM
Ci0gICAgICAgICAgLy8gZm9vL2Jhci9iYXouaHRtbCA9IFBBU1MKLSAgICAgICAgICBub0ZhaWx1
cmVzLnB1c2goe3Rlc3Q6IHRlc3QsIGV4cGVjdGF0aW9uczogZXhwZWN0YXRpb25zLmV4cGVjdGF0
aW9ucywKLSAgICAgICAgICAgICAgbW9kaWZpZXJzOiBleHBlY3RhdGlvbnMubW9kaWZpZXJzfSk7
CisgICAgICAgIHZhciBleHBlY3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnModGVzdCwgcGxhdGZv
cm0sIGJ1aWxkVHlwZSk7CisKKyAgICAgICAgaWYgKCFleHBlY3RhdGlvbnMpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAvLyBUZXN0IGhhcyBleHBlY3RhdGlvbnMsIGJ1dCBubyBy
ZXN1bHQgaW4gdGhlIGJ1aWxkZXJzIHJlc3VsdHMuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgaXQn
cyBlaXRoZXIgU0tJUCBvciBwYXNzZXMgb24gYWxsIGJ1aWxkcy4KKyAgICAgICAgaWYgKCFhbGxU
ZXN0c0ZvclBsYXRmb3JtQW5kQnVpbGRUeXBlW3Rlc3RdICYmICFzdHJpbmdDb250YWlucyhleHBl
Y3RhdGlvbnMubW9kaWZpZXJzLCAnV09OVEZJWCcpKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5n
Q29udGFpbnMoZXhwZWN0YXRpb25zLm1vZGlmaWVycywgJ1NLSVAnKSkKKyAgICAgICAgICAgICAg
ICBza2lwcGVkLnB1c2godGVzdCk7CisgICAgICAgICAgICBlbHNlIGlmICghZXhwZWN0YXRpb25z
LmV4cGVjdGF0aW9ucy5tYXRjaCgvXlxzKlBBU1NccyokLykpIHsKKyAgICAgICAgICAgICAgICAv
LyBEb24ndCBzaG93IHRlc3RzIGV4cGVjdGVkIHRvIGFsd2F5cyBwYXNzLiBUaGlzIGlzIHVzZWQg
aW4gd2F5cyBsaWtlCisgICAgICAgICAgICAgICAgLy8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAg
ICAgICAgICAvLyBmb28vYmFyID0gRkFJTAorICAgICAgICAgICAgICAgIC8vIGZvby9iYXIvYmF6
Lmh0bWwgPSBQQVNTCisgICAgICAgICAgICAgICAgbm9GYWlsdXJlcy5wdXNoKHt0ZXN0OiB0ZXN0
LCBleHBlY3RhdGlvbnM6IGV4cGVjdGF0aW9ucy5leHBlY3RhdGlvbnMsIG1vZGlmaWVyczogZXhw
ZWN0YXRpb25zLm1vZGlmaWVyc30pOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9
CiAgICAgfQogCiAgICAgcGVyQnVpbGRlclNraXBwZWRQYXRoc1tidWlsZGVyXSA9IHNraXBwZWQu
c29ydCgpOwogICAgIHBlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlc1tidWls
ZGVyXSA9IG5vRmFpbHVyZXMuc29ydCgpOwotICB9Cit9CiAKLSAgZnVuY3Rpb24gcHJvY2Vzc1Rl
c3RSZXN1bHRzRm9yQnVpbGRlckFzeW5jKGJ1aWxkZXIpIHsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewotICAgICAgICBwcm9jZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXIpOwotICAg
ICAgfSwgMCk7Ci0gIH0KK2Z1bmN0aW9uIHByb2Nlc3NUZXN0UmVzdWx0c0ZvckJ1aWxkZXJBc3lu
YyhidWlsZGVyKQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHByb2Nlc3NUZXN0UnVu
c0ZvckJ1aWxkZXIoYnVpbGRlcik7IH0sIDApOworfQogCi0gIGZ1bmN0aW9uIHByb2Nlc3NUZXN0
UnVuc0ZvckFsbEJ1aWxkZXJzKCkgeworZnVuY3Rpb24gcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVp
bGRlcnMoKQorewogICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpCi0gICAgICBwcm9j
ZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXIpOwotICB9CisgICAgICAgIHByb2Nlc3NUZXN0
UnVuc0ZvckJ1aWxkZXIoYnVpbGRlcik7Cit9CiAKLSAgZnVuY3Rpb24gcHJvY2Vzc1Rlc3RSdW5z
Rm9yQnVpbGRlcihidWlsZGVyTmFtZSkgewotICAgIGlmIChwZXJCdWlsZGVyRmFpbHVyZXNbYnVp
bGRlck5hbWVdKSB7CitmdW5jdGlvbiBwcm9jZXNzVGVzdFJ1bnNGb3JCdWlsZGVyKGJ1aWxkZXJO
YW1lKQoreworICAgIGlmIChwZXJCdWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdKQogICAgICAg
cmV0dXJuOwotICAgIH0KIAogICAgIGlmICghcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0p
IHsKLSAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRlc3RzIGZvdW5kIGZvciAnICsgYnVpbGRlck5h
bWUpOwotICAgICAgcGVyQnVpbGRlckZhaWx1cmVzW2J1aWxkZXJOYW1lXSA9IFtdOwotICAgICAg
cmV0dXJuOworICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0ZXN0cyBmb3VuZCBmb3IgJyArIGJ1
aWxkZXJOYW1lKTsKKyAgICAgICAgcGVyQnVpbGRlckZhaWx1cmVzW2J1aWxkZXJOYW1lXSA9IFtd
OworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTsK
LQogICAgIHByb2Nlc3NFeHBlY3RhdGlvbnMoKTsKIAogICAgIHZhciBidWlsZEluZm8gPSBnZXRQ
bGF0Zm9ybUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSk7CkBAIC0xMDE1LDU3ICs5OTYsNTQgQEAg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAgICB2YXIgYWxsVGVzdHNGb3JUaGlzQnVpbGRlciA9IHJlc3VsdHNCeUJ1
aWxkZXJbYnVpbGRlck5hbWVdLnRlc3RzOwogCiAgICAgZm9yICh2YXIgdGVzdCBpbiBhbGxUZXN0
c0ZvclRoaXNCdWlsZGVyKSB7Ci0gICAgICB2YXIgcmVzdWx0c0ZvclRlc3QgPSBjcmVhdGVSZXN1
bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWlsZGVyTmFtZSk7Ci0gICAgICBwb3B1bGF0ZUV4cGVj
dGF0aW9uc0RhdGEocmVzdWx0c0ZvclRlc3QpOwotCi0gICAgICB2YXIgcmF3VGVzdCA9IHJlc3Vs
dHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdLnRlc3RzW3Rlc3RdOwotICAgICAgcmVzdWx0c0ZvclRl
c3QucmF3VGltZXMgPSByYXdUZXN0LnRpbWVzOwotICAgICAgdmFyIHJhd1Jlc3VsdHMgPSByYXdU
ZXN0LnJlc3VsdHM7Ci0gICAgICByZXN1bHRzRm9yVGVzdC5yYXdSZXN1bHRzID0gcmF3UmVzdWx0
czsKLQotICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIGdldFRlc3RSZXN1bHRzQnlCdWlsZAotICAg
ICAgdmFyIHRpbWVzID0gcmVzdWx0c0ZvclRlc3QucmF3VGltZXM7Ci0gICAgICB2YXIgbnVtVGlt
ZXNTZWVuID0gMDsKLSAgICAgIHZhciBudW1SZXN1bHRzU2VlbiA9IDA7Ci0gICAgICB2YXIgcmVz
dWx0c0luZGV4ID0gMDsKLSAgICAgIHZhciBjdXJyZW50UmVzdWx0OwotICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aW1lcy5sZW5ndGg7IGkrKykgewotICAgICAgICBudW1UaW1lc1NlZW4gKz0g
dGltZXNbaV1bUkxFLkxFTkdUSF07Ci0KLSAgICAgICAgd2hpbGUgKHJhd1Jlc3VsdHNbcmVzdWx0
c0luZGV4XSAmJiBudW1UaW1lc1NlZW4gPiAobnVtUmVzdWx0c1NlZW4gKwotICAgICAgICAgICAg
cmF3UmVzdWx0c1tyZXN1bHRzSW5kZXhdW1JMRS5MRU5HVEhdKSkgewotICAgICAgICAgIG51bVJl
c3VsdHNTZWVuICs9IHJhd1Jlc3VsdHNbcmVzdWx0c0luZGV4XVtSTEUuTEVOR1RIXTsKLSAgICAg
ICAgICByZXN1bHRzSW5kZXgrKzsKLSAgICAgICAgfQorICAgICAgICB2YXIgcmVzdWx0c0ZvclRl
c3QgPSBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWlsZGVyTmFtZSk7CisgICAg
ICAgIHBvcHVsYXRlRXhwZWN0YXRpb25zRGF0YShyZXN1bHRzRm9yVGVzdCk7CisKKyAgICAgICAg
dmFyIHJhd1Rlc3QgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXS50ZXN0c1t0ZXN0XTsK
KyAgICAgICAgcmVzdWx0c0ZvclRlc3QucmF3VGltZXMgPSByYXdUZXN0LnRpbWVzOworICAgICAg
ICB2YXIgcmF3UmVzdWx0cyA9IHJhd1Rlc3QucmVzdWx0czsKKyAgICAgICAgcmVzdWx0c0ZvclRl
c3QucmF3UmVzdWx0cyA9IHJhd1Jlc3VsdHM7CisKKyAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRv
IGdldFRlc3RSZXN1bHRzQnlCdWlsZAorICAgICAgICB2YXIgdGltZXMgPSByZXN1bHRzRm9yVGVz
dC5yYXdUaW1lczsKKyAgICAgICAgdmFyIG51bVRpbWVzU2VlbiA9IDA7CisgICAgICAgIHZhciBu
dW1SZXN1bHRzU2VlbiA9IDA7CisgICAgICAgIHZhciByZXN1bHRzSW5kZXggPSAwOworICAgICAg
ICB2YXIgY3VycmVudFJlc3VsdDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aW1lcy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbnVtVGltZXNTZWVuICs9IHRpbWVzW2ldW1JMRS5M
RU5HVEhdOworCisgICAgICAgICAgICB3aGlsZSAocmF3UmVzdWx0c1tyZXN1bHRzSW5kZXhdICYm
IG51bVRpbWVzU2VlbiA+IChudW1SZXN1bHRzU2VlbiArIHJhd1Jlc3VsdHNbcmVzdWx0c0luZGV4
XVtSTEUuTEVOR1RIXSkpIHsKKyAgICAgICAgICAgICAgICBudW1SZXN1bHRzU2VlbiArPSByYXdS
ZXN1bHRzW3Jlc3VsdHNJbmRleF1bUkxFLkxFTkdUSF07CisgICAgICAgICAgICAgICAgcmVzdWx0
c0luZGV4Kys7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJhd1Jlc3VsdHMgJiYgcmF3
UmVzdWx0c1tyZXN1bHRzSW5kZXhdKQotICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSByYXdSZXN1
bHRzW3Jlc3VsdHNJbmRleF1bUkxFLlZBTFVFXTsKKyAgICAgICAgICAgIGlmIChyYXdSZXN1bHRz
ICYmIHJhd1Jlc3VsdHNbcmVzdWx0c0luZGV4XSkKKyAgICAgICAgICAgICAgICBjdXJyZW50UmVz
dWx0ID0gcmF3UmVzdWx0c1tyZXN1bHRzSW5kZXhdW1JMRS5WQUxVRV07CiAKLSAgICAgICAgdmFy
IHRpbWUgPSB0aW1lc1tpXVtSTEUuVkFMVUVdCisgICAgICAgICAgICB2YXIgdGltZSA9IHRpbWVz
W2ldW1JMRS5WQUxVRV0KIAotICAgICAgICAvLyBJZ25vcmUgdGltZXMgZm9yIGNyYXNoaW5nL3Rp
bWVvdXQgcnVucyBmb3IgdGhlIHNha2Ugb2Ygc2VlaW5nIGlmCi0gICAgICAgIC8vIGEgdGVzdCBz
aG91bGQgYmUgbWFya2VkIHNsb3cuCi0gICAgICAgIGlmIChjdXJyZW50UmVzdWx0ICE9ICdDJyAm
JiBjdXJyZW50UmVzdWx0ICE9ICdUJykgewotICAgICAgICAgIHJlc3VsdHNGb3JUZXN0LnNsb3dl
c3ROb25UaW1lb3V0Q3Jhc2hUaW1lID0KLSAgICAgICAgICAgICAgTWF0aC5tYXgocmVzdWx0c0Zv
clRlc3Quc2xvd2VzdE5vblRpbWVvdXRDcmFzaFRpbWUsIHRpbWUpOworICAgICAgICAgICAgLy8g
SWdub3JlIHRpbWVzIGZvciBjcmFzaGluZy90aW1lb3V0IHJ1bnMgZm9yIHRoZSBzYWtlIG9mIHNl
ZWluZyBpZgorICAgICAgICAgICAgLy8gYSB0ZXN0IHNob3VsZCBiZSBtYXJrZWQgc2xvdy4KKyAg
ICAgICAgICAgIGlmIChjdXJyZW50UmVzdWx0ICE9ICdDJyAmJiBjdXJyZW50UmVzdWx0ICE9ICdU
JykKKyAgICAgICAgICAgICAgICByZXN1bHRzRm9yVGVzdC5zbG93ZXN0Tm9uVGltZW91dENyYXNo
VGltZSA9IE1hdGgubWF4KHJlc3VsdHNGb3JUZXN0LnNsb3dlc3ROb25UaW1lb3V0Q3Jhc2hUaW1l
LCB0aW1lKTsKKyAgICAgICAgICAgIHJlc3VsdHNGb3JUZXN0LnNsb3dlc3RUaW1lID0gTWF0aC5t
YXgocmVzdWx0c0ZvclRlc3Quc2xvd2VzdFRpbWUsIHRpbWUpOwogICAgICAgICB9Ci0gICAgICAg
IHJlc3VsdHNGb3JUZXN0LnNsb3dlc3RUaW1lID0gTWF0aC5tYXgocmVzdWx0c0ZvclRlc3Quc2xv
d2VzdFRpbWUsIHRpbWUpOwotICAgICAgfQotCi0gICAgICBwcm9jZXNzTWlzc2luZ0FuZEV4dHJh
RXhwZWN0YXRpb25zKHJlc3VsdHNGb3JUZXN0KTsKIAotICAgICAgZmFpbHVyZXMucHVzaChyZXN1
bHRzRm9yVGVzdCk7CisgICAgICAgIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMo
cmVzdWx0c0ZvclRlc3QpOworICAgICAgICBmYWlsdXJlcy5wdXNoKHJlc3VsdHNGb3JUZXN0KTsK
IAotICAgICAgaWYgKCF0ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdKQotICAgICAgICB0ZXN0VG9SZXN1
bHRzTWFwW3Rlc3RdID0gW107Ci0gICAgICB0ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdLnB1c2gocmVz
dWx0c0ZvclRlc3QpOworICAgICAgICBpZiAoIXRlc3RUb1Jlc3VsdHNNYXBbdGVzdF0pCisgICAg
ICAgICAgICB0ZXN0VG9SZXN1bHRzTWFwW3Rlc3RdID0gW107CisgICAgICAgIHRlc3RUb1Jlc3Vs
dHNNYXBbdGVzdF0ucHVzaChyZXN1bHRzRm9yVGVzdCk7CiAgICAgfQogCiAgICAgcGVyQnVpbGRl
ckZhaWx1cmVzW2J1aWxkZXJOYW1lXSA9IGZhaWx1cmVzOwogICAgIGxvZ1RpbWUoJ3Byb2Nlc3NU
ZXN0UnVuc0ZvckJ1aWxkZXI6ICcgKyBidWlsZGVyTmFtZSwgc3RhcnQpOwotICB9Cit9CiAKLSAg
ZnVuY3Rpb24gcHJvY2Vzc01pc3NpbmdBbmRFeHRyYUV4cGVjdGF0aW9ucyhyZXN1bHRzRm9yVGVz
dCkgeworZnVuY3Rpb24gcHJvY2Vzc01pc3NpbmdBbmRFeHRyYUV4cGVjdGF0aW9ucyhyZXN1bHRz
Rm9yVGVzdCkKK3sKICAgICAvLyBIZXVyaXN0aWMgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgZXhw
ZWN0YXRpb25zIGFwcGx5IHRvIGEgZ2l2ZW4gdGVzdDoKICAgICAvLyAtSWYgYSB0ZXN0IHJlc3Vs
dCBoYXBwZW5zIDwgTUlOX1JVTlNfRk9SX0ZMQUtFLCB0aGVuIGNvbnNpZGVyIGl0IGEgZmxha3kK
ICAgICAvLyByZXN1bHQgYW5kIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Qgb2YgZXhwZWN0ZWQgcmVz
dWx0cy4KQEAgLTEwODAsNyArMTA1OCw3IEBAIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgLy8gYmVpbmcgcnVu
IG9uIGEgZGlmZmVyZW50IGJ1aWxkZXIgKGUuZy4gbW92ZWQgZnJvbSBvbmUgc2hhcmQgdG8gYW5v
dGhlcikuCiAgICAgLy8gSWdub3JlIHRoZXNlIHJlc3VsdHMgc2luY2Ugd2UgaGF2ZSBubyByZWFs
IGRhdGEgYWJvdXQgd2hhdCdzIGdvaW5nIG9uLgogICAgIGlmIChyYXdSZXN1bHRzWzBdW1JMRS5W
QUxVRV0gPT0gJ04nKQotICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAKICAgICAvLyBP
bmx5IGNvbnNpZGVyIGZsYWtlIGlmIGl0IGRvZXNuJ3QgaGFwcGVuIHR3aWNlIGluIGEgcm93Lgog
ICAgIHZhciBNSU5fUlVOU19GT1JfRkxBS0UgPSAyOwpAQCAtMTA5MiwyNDAgKzEwNzAsMjIxIEBA
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAKICAgICB2YXIgc2VlblJlc3VsdHMgPSB7fTsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJhd1Jlc3VsdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBudW1SZXN1bHRz
ID0gcmF3UmVzdWx0c1tpXVtSTEUuTEVOR1RIXTsKLSAgICAgIG51bVJlc3VsdHNTZWVuICs9IG51
bVJlc3VsdHM7Ci0KLSAgICAgIHZhciByZXN1bHQgPSByYXdSZXN1bHRzW2ldW1JMRS5WQUxVRV07
Ci0gICAgICBpZiAoaXNGYWlsaW5nUmVzdWx0KHJlc3VsdCkpIHsKLSAgICAgICAgZmFpbGVkQ291
bnQgKz0gbnVtUmVzdWx0czsKLSAgICAgIH0KLQotICAgICAgdmFyIGhhc01pblJ1bnMgPSBudW1S
ZXN1bHRzID49IE1JTl9SVU5TX0ZPUl9GTEFLRTsKLSAgICAgIGlmIChoYXZlU2Vlbk5vbkZsYWtl
UmVzdWx0ICYmIGhhc01pblJ1bnMpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9IGVsc2Ug
aWYgKGhhc01pblJ1bnMpIHsKLSAgICAgICAgaGF2ZVNlZW5Ob25GbGFrZVJlc3VsdCA9IHRydWU7
Ci0gICAgICB9IGVsc2UgaWYgKCFzZWVuUmVzdWx0c1tyZXN1bHRdKSB7Ci0gICAgICAgIC8vIE9u
bHkgY29uc2lkZXIgYSBzaG9ydC1saXZlZCByZXN1bHQgaWYgd2UndmUgc2VlbiBpdCBtb3JlIHRo
YW4gb25jZS4KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBpbmNsdWRlIGxvdHMgb2YgZmFsc2Ut
cG9zaXRpdmVzIGR1ZSB0byB0ZXN0cyB0aGF0IGZhaWwKLSAgICAgICAgLy8gZm9yIGEgY291cGxl
IHJ1bnMgYW5kIHRoZW4gc3RhcnQgcGFzc2luZy4KLSAgICAgICAgc2VlblJlc3VsdHNbcmVzdWx0
XSA9IHRydWU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICB2YXIgZXhwZWN0
YXRpb24gPSBnZXRFeHBlY3RhdGlvbnNGaWxlU3RyaW5nRm9yUmVzdWx0KHJlc3VsdCk7Ci0gICAg
ICByZXN1bHRzTWFwW2V4cGVjdGF0aW9uXSA9IHRydWU7Ci0gICAgICBudW1SZWFsUmVzdWx0cysr
OworICAgICAgICB2YXIgbnVtUmVzdWx0cyA9IHJhd1Jlc3VsdHNbaV1bUkxFLkxFTkdUSF07Cisg
ICAgICAgIG51bVJlc3VsdHNTZWVuICs9IG51bVJlc3VsdHM7CisKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IHJhd1Jlc3VsdHNbaV1bUkxFLlZBTFVFXTsKKyAgICAgICAgaWYgKGlzRmFpbGluZ1Jlc3Vs
dChyZXN1bHQpKQorICAgICAgICAgICAgZmFpbGVkQ291bnQgKz0gbnVtUmVzdWx0czsKKworICAg
ICAgICB2YXIgaGFzTWluUnVucyA9IG51bVJlc3VsdHMgPj0gTUlOX1JVTlNfRk9SX0ZMQUtFOwor
ICAgICAgICBpZiAoaGF2ZVNlZW5Ob25GbGFrZVJlc3VsdCAmJiBoYXNNaW5SdW5zKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGVsc2UgaWYgKGhhc01pblJ1bnMpCisgICAgICAgICAg
ICBoYXZlU2Vlbk5vbkZsYWtlUmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXNlZW5S
ZXN1bHRzW3Jlc3VsdF0pIHsKKyAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgYSBzaG9ydC1s
aXZlZCByZXN1bHQgaWYgd2UndmUgc2VlbiBpdCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgICAg
IC8vIE90aGVyd2lzZSwgd2UgaW5jbHVkZSBsb3RzIG9mIGZhbHNlLXBvc2l0aXZlcyBkdWUgdG8g
dGVzdHMgdGhhdCBmYWlsCisgICAgICAgICAgICAvLyBmb3IgYSBjb3VwbGUgcnVucyBhbmQgdGhl
biBzdGFydCBwYXNzaW5nLgorICAgICAgICAgICAgc2VlblJlc3VsdHNbcmVzdWx0XSA9IHRydWU7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBleHBlY3Rh
dGlvbiA9IGdldEV4cGVjdGF0aW9uc0ZpbGVTdHJpbmdGb3JSZXN1bHQocmVzdWx0KTsKKyAgICAg
ICAgcmVzdWx0c01hcFtleHBlY3RhdGlvbl0gPSB0cnVlOworICAgICAgICBudW1SZWFsUmVzdWx0
cysrOwogICAgIH0KIAogICAgIHJlc3VsdHNGb3JUZXN0LmZsaXBzID0gaSAtIDE7CiAgICAgcmVz
dWx0c0ZvclRlc3QuaXNGbGFreSA9IG51bVJlYWxSZXN1bHRzID4gMTsKICAgICAvLyBDYWxjdWxh
dGUgdGhlICUgb2YgdGltZXMgdGhlIHRlc3QgZmFpbGVkIC0gaG93IGZsYWt5IGlzIGl0PwotICAg
IHJlc3VsdHNGb3JUZXN0LnBlcmNlbnRGYWlsZWQgPQotICAgICAgICBNYXRoLnJvdW5kKGZhaWxl
ZENvdW50IC8gbnVtUmVzdWx0c1NlZW4gKiAxMDApOworICAgIHJlc3VsdHNGb3JUZXN0LnBlcmNl
bnRGYWlsZWQgPSBNYXRoLnJvdW5kKGZhaWxlZENvdW50IC8gbnVtUmVzdWx0c1NlZW4gKiAxMDAp
OwogCiAgICAgdmFyIG1pc3NpbmdFeHBlY3RhdGlvbnMgPSBbXTsKICAgICB2YXIgZXh0cmFFeHBl
Y3RhdGlvbnMgPSBbXTsKIAogICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKLSAgICAg
IHZhciBleHBlY3RhdGlvbnNBcnJheSA9IHJlc3VsdHNGb3JUZXN0LmV4cGVjdGF0aW9ucyA/Ci0g
ICAgICAgICAgcmVzdWx0c0ZvclRlc3QuZXhwZWN0YXRpb25zLnNwbGl0KCcgJykgOiBbXTsKLSAg
ICAgIGV4dHJhRXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zQXJyYXkuZmlsdGVyKAotICAgICAg
ICAgIGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAgICAgIC8vIFRPRE8ob2phbik6IE9uY2Ug
YWxsIHRoZSBGQUlMIGxpbmVzIGFyZSByZW1vdmVkIGZyb20KLSAgICAgICAgICAgIC8vIHRlc3Rf
ZXhwZWN0YXRpb25zLnR4dCwgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50
aWNzCi0gICAgICAgICAgICAvLyBjb2RlLgotICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5s
ZWdhY3lFeHBlY3RhdGlvbnNTZW1hbnRpY3MpIHsKLSAgICAgICAgICAgICAgaWYgKGVsZW1lbnQg
PT0gJ0ZBSUwnKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBGQUlMX1JF
U1VMVFMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzTWFwW0ZB
SUxfUkVTVUxUU1tpXV0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgdmFyIGV4cGVjdGF0aW9uc0FycmF5ID0gcmVzdWx0c0ZvclRlc3QuZXhwZWN0YXRpb25zID8g
cmVzdWx0c0ZvclRlc3QuZXhwZWN0YXRpb25zLnNwbGl0KCcgJykgOiBbXTsKKyAgICAgICAgZXh0
cmFFeHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnNBcnJheS5maWx0ZXIoCisgICAgICAgICAgICBm
dW5jdGlvbihlbGVtZW50KSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETyhvamFuKTogT25jZSBh
bGwgdGhlIEZBSUwgbGluZXMgYXJlIHJlbW92ZWQgZnJvbQorICAgICAgICAgICAgICAgIC8vIHRl
c3RfZXhwZWN0YXRpb25zLnR4dCwgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2Vt
YW50aWNzCisgICAgICAgICAgICAgICAgLy8gY29kZS4KKyAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudFN0YXRlLmxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudCA9PSAnRkFJTCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHNNYXBbRkFJTF9SRVNVTFRTW2ldXSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQgJiYgIXJlc3VsdHNNYXBbZWxlbWVudF0gJiYKLSAgICAgICAgICAgICAgICAh
c3RyaW5nQ29udGFpbnMoZWxlbWVudCwgJ0JVRycpOwotICAgICAgICAgIH0pOwotCi0gICAgICBm
b3IgKHZhciByZXN1bHQgaW4gcmVzdWx0c01hcCkgewotICAgICAgICByZXN1bHRzRm9yVGVzdC5h
Y3R1YWxSZXN1bHRzLnB1c2gocmVzdWx0KTsKLSAgICAgICAgdmFyIGhhc0V4cGVjdGF0aW9uID0g
ZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0YXRpb25zQXJyYXkubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgZXhwZWN0YXRpb24gPSBleHBlY3RhdGlvbnNBcnJh
eVtpXTsKLSAgICAgICAgICAvLyBUT0RPKG9qYW4pOiBPbmNlIGFsbCB0aGUgRkFJTCBsaW5lcyBh
cmUgcmVtb3ZlZCBmcm9tCi0gICAgICAgICAgLy8gdGVzdF9leHBlY3RhdGlvbnMudHh0LCBkZWxl
dGUgYWxsIHRoZSBsZWdhY3lFeHBlY3RhdGlvbnNTZW1hbnRpY3MKLSAgICAgICAgICAvLyBjb2Rl
LgotICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUubGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNz
KSB7Ci0gICAgICAgICAgICBpZiAoZXhwZWN0YXRpb24gPT0gJ0ZBSUwnKSB7Ci0gICAgICAgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaisrKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBGQUlMX1JFU1VMVFNbal0pIHsKLSAgICAgICAgICAg
ICAgICAgIGhhc0V4cGVjdGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmICFyZXN1bHRzTWFwW2VsZW1lbnRdICYm
ICFzdHJpbmdDb250YWlucyhlbGVtZW50LCAnQlVHJyk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICBmb3IgKHZhciByZXN1bHQgaW4gcmVzdWx0c01hcCkgeworICAgICAgICAgICAgcmVzdWx0
c0ZvclRlc3QuYWN0dWFsUmVzdWx0cy5wdXNoKHJlc3VsdCk7CisgICAgICAgICAgICB2YXIgaGFz
RXhwZWN0YXRpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhw
ZWN0YXRpb25zQXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZXhwZWN0
YXRpb24gPSBleHBlY3RhdGlvbnNBcnJheVtpXTsKKyAgICAgICAgICAgICAgICAvLyBUT0RPKG9q
YW4pOiBPbmNlIGFsbCB0aGUgRkFJTCBsaW5lcyBhcmUgcmVtb3ZlZCBmcm9tCisgICAgICAgICAg
ICAgICAgLy8gdGVzdF9leHBlY3RhdGlvbnMudHh0LCBkZWxldGUgYWxsIHRoZSBsZWdhY3lFeHBl
Y3RhdGlvbnNTZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAvLyBjb2RlLgorICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50U3RhdGUubGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChleHBlY3RhdGlvbiA9PSAnRkFJTCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaisr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBGQUlMX1JFU1VM
VFNbal0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXhwZWN0YXRpb24g
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9CiAKLSAgICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGF0
aW9uKSB7Ci0gICAgICAgICAgICBoYXNFeHBlY3RhdGlvbiA9IHRydWU7Ci0gICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gZXhwZWN0YXRpb24pCisgICAgICAgICAgICAg
ICAgICAgIGhhc0V4cGVjdGF0aW9uID0gdHJ1ZTsKIAotICAgICAgICAgIGlmIChoYXNFeHBlY3Rh
dGlvbikKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChoYXNFeHBlY3Rh
dGlvbikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlIG5vIGV4cGVjdGF0aW9ucyBmb3IgYSB0ZXN0IGFuZCBpdCBvbmx5
IHBhc3NlcywgdGhlbiBkb24ndAorICAgICAgICAgICAgLy8gbGlzdCBQQVNTIGFzIGEgbWlzc2lu
ZyBleHBlY3RhdGlvbi4gV2Ugb25seSB3YW50IHRvIGxpc3QgUEFTUyBpZiBpdAorICAgICAgICAg
ICAgLy8gZmxha3kgcGFzc2VzLCBzbyB0aGVyZSB3b3VsZCBiZSBvdGhlciBleHBlY3RhdGlvbnMu
CisgICAgICAgICAgICBpZiAoIWhhc0V4cGVjdGF0aW9uICYmICEoIWV4cGVjdGF0aW9uc0FycmF5
Lmxlbmd0aCAmJiByZXN1bHQgPT0gJ1BBU1MnICYmIG51bVJlYWxSZXN1bHRzID09IDEpKQorICAg
ICAgICAgICAgICAgIG1pc3NpbmdFeHBlY3RhdGlvbnMucHVzaChyZXN1bHQpOwogICAgICAgICB9
Ci0gICAgICAgIC8vIElmIHdlIGhhdmUgbm8gZXhwZWN0YXRpb25zIGZvciBhIHRlc3QgYW5kIGl0
IG9ubHkgcGFzc2VzLCB0aGVuIGRvbid0Ci0gICAgICAgIC8vIGxpc3QgUEFTUyBhcyBhIG1pc3Np
bmcgZXhwZWN0YXRpb24uIFdlIG9ubHkgd2FudCB0byBsaXN0IFBBU1MgaWYgaXQKLSAgICAgICAg
Ly8gZmxha3kgcGFzc2VzLCBzbyB0aGVyZSB3b3VsZCBiZSBvdGhlciBleHBlY3RhdGlvbnMuCi0g
ICAgICAgIGlmICghaGFzRXhwZWN0YXRpb24gJiYKLSAgICAgICAgICAgICEoIWV4cGVjdGF0aW9u
c0FycmF5Lmxlbmd0aCAmJiByZXN1bHQgPT0gJ1BBU1MnICYmCi0gICAgICAgICAgICAgIG51bVJl
YWxSZXN1bHRzID09IDEpKQotICAgICAgICAgIG1pc3NpbmdFeHBlY3RhdGlvbnMucHVzaChyZXN1
bHQpOwotICAgICAgfQotCi0gICAgICAvLyBPbmx5IGhpZ2hsaWdodCB0ZXN0cyB0aGF0IHRha2Ug
PiAyIHNlY29uZHMgYXMgbmVlZGluZyB0byBiZSBtYXJrZWQgYXMKLSAgICAgIC8vIHNsb3cuIFRo
ZXJlIGFyZSB0b28gbWFueSB0ZXN0cyB0aGF0IHRha2UgfjIgc2Vjb25kcyBldmVyeSBjb3VwbGUK
LSAgICAgIC8vIGh1bmRyZWQgcnVucy4gSXQncyBub3Qgd29ydGggdGhlIG1hbnVhbCBtYWludGVu
YW5jZSBlZmZvcnQuCi0gICAgICAvLyBBbHNvLCBpZiBhIHRlc3QgdGltZXMgb3V0LCB0aGVuIGl0
IHNob3VsZCBub3QgYmUgbWFya2VkIGFzIHNsb3cuCi0gICAgICB2YXIgbWluVGltZUZvck5lZWRz
U2xvdyA9IGlzRGVidWcocmVzdWx0c0ZvclRlc3QuYnVpbGRlcikgPyAyIDogMTsKLSAgICAgIGlm
IChpc1Nsb3dUZXN0KHJlc3VsdHNGb3JUZXN0KSAmJiAhcmVzdWx0c01hcFsnVElNRU9VVCddICYm
Ci0gICAgICAgICAgKCFyZXN1bHRzRm9yVGVzdC5tb2RpZmllcnMgfHwKLSAgICAgICAgICAgIXN0
cmluZ0NvbnRhaW5zKHJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycywgJ1NMT1cnKSkpIHsKLSAgICAg
ICAgbWlzc2luZ0V4cGVjdGF0aW9ucy5wdXNoKCdTTE9XJyk7Ci0gICAgICB9IGVsc2UgaWYgKGlz
RmFzdFRlc3QocmVzdWx0c0ZvclRlc3QpICYmCi0gICAgICAgICAgICAgICAgIHJlc3VsdHNGb3JU
ZXN0Lm1vZGlmaWVycyAmJgotICAgICAgICAgICAgICAgICBzdHJpbmdDb250YWlucyhyZXN1bHRz
Rm9yVGVzdC5tb2RpZmllcnMsICdTTE9XJykpIHsKLSAgICAgICAgZXh0cmFFeHBlY3RhdGlvbnMu
cHVzaCgnU0xPVycpOwotICAgICAgfQotCi0gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbWlzc2lu
ZyByZXN1bHRzIG9yIG1vZGlmaWVycyBiZXNpZGVzIGJ1aWxkCi0gICAgICAvLyB0eXBlLCBwbGF0
Zm9ybSwgb3IgYnVnIGFuZCB0aGUgZXhwZWN0YXRpb25zIGFyZSBhbGwgZXh0cmEKLSAgICAgIC8v
IHRoYXQgaXMsIGV4dHJhRXhwZWN0YXRpb25zIC0gZXhwZWN0YXRpb25zID0gUEFTUywKLSAgICAg
IC8vIGluY2x1ZGUgUEFTUyBhcyBleHRyYSwgc2luY2UgdGhhdCBtZWFucyB0aGlzIGxpbmUgaW4K
LSAgICAgIC8vIHRlc3RfZXhwZWN0YXRpb25zIGNhbiBiZSBkZWxldGVkLi4KLSAgICAgIGlmICgh
bWlzc2luZ0V4cGVjdGF0aW9ucy5sZW5ndGggJiYKLSAgICAgICAgICAhKHJlc3VsdHNGb3JUZXN0
Lm1vZGlmaWVycyAmJgotICAgICAgICAgICAgZ2V0UmVhbE1vZGlmaWVycyhyZXN1bHRzRm9yVGVz
dC5tb2RpZmllcnMpKSkgewotICAgICAgICB2YXIgZXh0cmFQbHVzUGFzcyA9IGV4dHJhRXhwZWN0
YXRpb25zLmNvbmNhdChbJ1BBU1MnXSk7Ci0gICAgICAgIGlmIChleHRyYVBsdXNQYXNzLnNvcnQo
KS50b1N0cmluZygpID09Ci0gICAgICAgICAgICBleHBlY3RhdGlvbnNBcnJheS5zbGljZSgwKS5z
b3J0KCkudG9TdHJpbmcoKSkgewotICAgICAgICAgIGV4dHJhRXhwZWN0YXRpb25zLnB1c2goJ1BB
U1MnKTsKKworICAgICAgICAvLyBPbmx5IGhpZ2hsaWdodCB0ZXN0cyB0aGF0IHRha2UgPiAyIHNl
Y29uZHMgYXMgbmVlZGluZyB0byBiZSBtYXJrZWQgYXMKKyAgICAgICAgLy8gc2xvdy4gVGhlcmUg
YXJlIHRvbyBtYW55IHRlc3RzIHRoYXQgdGFrZSB+MiBzZWNvbmRzIGV2ZXJ5IGNvdXBsZQorICAg
ICAgICAvLyBodW5kcmVkIHJ1bnMuIEl0J3Mgbm90IHdvcnRoIHRoZSBtYW51YWwgbWFpbnRlbmFu
Y2UgZWZmb3J0LgorICAgICAgICAvLyBBbHNvLCBpZiBhIHRlc3QgdGltZXMgb3V0LCB0aGVuIGl0
IHNob3VsZCBub3QgYmUgbWFya2VkIGFzIHNsb3cuCisgICAgICAgIHZhciBtaW5UaW1lRm9yTmVl
ZHNTbG93ID0gaXNEZWJ1ZyhyZXN1bHRzRm9yVGVzdC5idWlsZGVyKSA/IDIgOiAxOworICAgICAg
ICBpZiAoaXNTbG93VGVzdChyZXN1bHRzRm9yVGVzdCkgJiYgIXJlc3VsdHNNYXBbJ1RJTUVPVVQn
XSAmJiAoIXJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycyB8fCAhc3RyaW5nQ29udGFpbnMocmVzdWx0
c0ZvclRlc3QubW9kaWZpZXJzLCAnU0xPVycpKSkKKyAgICAgICAgICAgIG1pc3NpbmdFeHBlY3Rh
dGlvbnMucHVzaCgnU0xPVycpOworICAgICAgICBlbHNlIGlmIChpc0Zhc3RUZXN0KHJlc3VsdHNG
b3JUZXN0KSAmJiByZXN1bHRzRm9yVGVzdC5tb2RpZmllcnMgJiYgc3RyaW5nQ29udGFpbnMocmVz
dWx0c0ZvclRlc3QubW9kaWZpZXJzLCAnU0xPVycpKQorICAgICAgICAgICAgZXh0cmFFeHBlY3Rh
dGlvbnMucHVzaCgnU0xPVycpOworCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBtaXNzaW5n
IHJlc3VsdHMgb3IgbW9kaWZpZXJzIGJlc2lkZXMgYnVpbGQKKyAgICAgICAgLy8gdHlwZSwgcGxh
dGZvcm0sIG9yIGJ1ZyBhbmQgdGhlIGV4cGVjdGF0aW9ucyBhcmUgYWxsIGV4dHJhCisgICAgICAg
IC8vIHRoYXQgaXMsIGV4dHJhRXhwZWN0YXRpb25zIC0gZXhwZWN0YXRpb25zID0gUEFTUywKKyAg
ICAgICAgLy8gaW5jbHVkZSBQQVNTIGFzIGV4dHJhLCBzaW5jZSB0aGF0IG1lYW5zIHRoaXMgbGlu
ZSBpbgorICAgICAgICAvLyB0ZXN0X2V4cGVjdGF0aW9ucyBjYW4gYmUgZGVsZXRlZC4uCisgICAg
ICAgIGlmICghbWlzc2luZ0V4cGVjdGF0aW9ucy5sZW5ndGggJiYgIShyZXN1bHRzRm9yVGVzdC5t
b2RpZmllcnMgJiYgZ2V0UmVhbE1vZGlmaWVycyhyZXN1bHRzRm9yVGVzdC5tb2RpZmllcnMpKSkg
eworICAgICAgICAgICAgdmFyIGV4dHJhUGx1c1Bhc3MgPSBleHRyYUV4cGVjdGF0aW9ucy5jb25j
YXQoWydQQVNTJ10pOworICAgICAgICAgICAgaWYgKGV4dHJhUGx1c1Bhc3Muc29ydCgpLnRvU3Ry
aW5nKCkgPT0gZXhwZWN0YXRpb25zQXJyYXkuc2xpY2UoMCkuc29ydCgpLnRvU3RyaW5nKCkpCisg
ICAgICAgICAgICAgICAgZXh0cmFFeHBlY3RhdGlvbnMucHVzaCgnUEFTUycpOwogICAgICAgICB9
Ci0gICAgICB9CiAKICAgICB9IGVsc2UgewotICAgICAgdmFyIGlzTWFya2VkRmxha3kgPSBzdHJp
bmdDb250YWlucyhyZXN1bHRzRm9yVGVzdC50ZXN0LAotICAgICAgICAgIEdURVNUX0ZMQUtZX01B
UktFUik7Ci0gICAgICBpZiAocmVzdWx0c0ZvclRlc3QuaXNGbGFreSAmJiAhaXNNYXJrZWRGbGFr
eSkgewotICAgICAgICBtaXNzaW5nRXhwZWN0YXRpb25zLnB1c2goJ0ZMQUtZJyk7Ci0gICAgICB9
IGVsc2UgaWYgKCFyZXN1bHRzRm9yVGVzdC5pc0ZsYWt5ICYmIGlzTWFya2VkRmxha3kpIHsKLSAg
ICAgICAgZXh0cmFFeHBlY3RhdGlvbnMucHVzaCgnRkxBS1knKTsKLSAgICAgIH0KKyAgICAgICAg
dmFyIGlzTWFya2VkRmxha3kgPSBzdHJpbmdDb250YWlucyhyZXN1bHRzRm9yVGVzdC50ZXN0LCBH
VEVTVF9GTEFLWV9NQVJLRVIpOworICAgICAgICBpZiAocmVzdWx0c0ZvclRlc3QuaXNGbGFreSAm
JiAhaXNNYXJrZWRGbGFreSkKKyAgICAgICAgICAgIG1pc3NpbmdFeHBlY3RhdGlvbnMucHVzaCgn
RkxBS1knKTsKKyAgICAgICAgZWxzZSBpZiAoIXJlc3VsdHNGb3JUZXN0LmlzRmxha3kgJiYgaXNN
YXJrZWRGbGFreSkKKyAgICAgICAgICAgIGV4dHJhRXhwZWN0YXRpb25zLnB1c2goJ0ZMQUtZJyk7
CiAgICAgfQogCi0gICAgcmVzdWx0c0ZvclRlc3QubWVldHNFeHBlY3RhdGlvbnMgPQotICAgICAg
ICAhbWlzc2luZ0V4cGVjdGF0aW9ucy5sZW5ndGggJiYgIWV4dHJhRXhwZWN0YXRpb25zLmxlbmd0
aDsKKyAgICByZXN1bHRzRm9yVGVzdC5tZWV0c0V4cGVjdGF0aW9ucyA9ICFtaXNzaW5nRXhwZWN0
YXRpb25zLmxlbmd0aCAmJiAhZXh0cmFFeHBlY3RhdGlvbnMubGVuZ3RoOwogICAgIHJlc3VsdHNG
b3JUZXN0Lm1pc3NpbmcgPSBtaXNzaW5nRXhwZWN0YXRpb25zLnNvcnQoKS5qb2luKCcgJyk7CiAg
ICAgcmVzdWx0c0ZvclRlc3QuZXh0cmEgPSBleHRyYUV4cGVjdGF0aW9ucy5zb3J0KCkuam9pbign
ICcpOwotICB9Ci0KLQotICB2YXIgYnVnVXJsUHJlZml4ID0gJzxhIGhyZWY9Imh0dHA6Ly8nOwot
ICB2YXIgYnVnVXJsUG9zdGZpeCA9ICcvJDIiPiQyPC9hPiAnOwotICB2YXIgd2Via2l0QnVnVXJs
UG9zdGZpeCA9ICcvJDIiPldLICQyPC9hPiAnOwotICB2YXIgaW50ZXJuYWxCdWdSZXBsYWNlVmFs
dWUgPSBidWdVcmxQcmVmaXggKyAnYicgKyBidWdVcmxQb3N0Zml4OwotICB2YXIgZXh0ZXJuYWxC
dWdSZXBsYWNlVmFsdWUgPSBidWdVcmxQcmVmaXggKyAnY3JidWcuY29tJyArIGJ1Z1VybFBvc3Rm
aXg7Ci0gIHZhciB3ZWJraXRCdWdSZXBsYWNlVmFsdWUgPSBidWdVcmxQcmVmaXggKyAnd2Via2l0
Lm9yZy9iJyArCi0gICAgICB3ZWJraXRCdWdVcmxQb3N0Zml4OwotCi0gIC8qKgotICAgKiBSZXR1
cm5zIHRoZSBCVUcgbW9kaWZpZXJzIGxpbmtpbmcgdG8gdGhlIGJ1Zy4KLSAgICogQnVncyB3aXRo
IDQgb3IgNSBkaWdpdHMgYXJlIGNyYnVnLmNvbSBidWdzLiBCdWdzIHdpdGggNiBvciA3IGRpZ2l0
cwotICAgKiBhcmUgaW50ZXJuYWwgZ29vZ2xlIGJ1Z3MuCi0gICAqLwotICBmdW5jdGlvbiBnZXRI
dG1sRm9yQnVncyhidWdzKSB7Cit9CisKKwordmFyIGJ1Z1VybFByZWZpeCA9ICc8YSBocmVmPSJo
dHRwOi8vJzsKK3ZhciBidWdVcmxQb3N0Zml4ID0gJy8kMiI+JDI8L2E+ICc7Cit2YXIgd2Via2l0
QnVnVXJsUG9zdGZpeCA9ICcvJDIiPldLICQyPC9hPiAnOwordmFyIGludGVybmFsQnVnUmVwbGFj
ZVZhbHVlID0gYnVnVXJsUHJlZml4ICsgJ2InICsgYnVnVXJsUG9zdGZpeDsKK3ZhciBleHRlcm5h
bEJ1Z1JlcGxhY2VWYWx1ZSA9IGJ1Z1VybFByZWZpeCArICdjcmJ1Zy5jb20nICsgYnVnVXJsUG9z
dGZpeDsKK3ZhciB3ZWJraXRCdWdSZXBsYWNlVmFsdWUgPSBidWdVcmxQcmVmaXggKyAnd2Via2l0
Lm9yZy9iJyArIHdlYmtpdEJ1Z1VybFBvc3RmaXg7CisKKy8qKgorICogUmV0dXJucyB0aGUgQlVH
IG1vZGlmaWVycyBsaW5raW5nIHRvIHRoZSBidWcuCisgKiBCdWdzIHdpdGggNCBvciA1IGRpZ2l0
cyBhcmUgY3JidWcuY29tIGJ1Z3MuIEJ1Z3Mgd2l0aCA2IG9yIDcgZGlnaXRzCisgKiBhcmUgaW50
ZXJuYWwgZ29vZ2xlIGJ1Z3MuCisgKi8KK2Z1bmN0aW9uIGdldEh0bWxGb3JCdWdzKGJ1Z3MpCit7
CiAgICAgYnVncyA9IGJ1Z3MucmVwbGFjZSgvQlVHKENSKT8oXGR7NH0pKFwgfCQpL2csIGV4dGVy
bmFsQnVnUmVwbGFjZVZhbHVlKTsKICAgICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoQ1IpPyhc
ZHs1fSkoXCB8JCkvZywgZXh0ZXJuYWxCdWdSZXBsYWNlVmFsdWUpOwogICAgIGJ1Z3MgPSBidWdz
LnJlcGxhY2UoL0JVRyhDUik/KFxkezZ9KShcIHwkKS9nLCBpbnRlcm5hbEJ1Z1JlcGxhY2VWYWx1
ZSk7CiAgICAgYnVncyA9IGJ1Z3MucmVwbGFjZSgvQlVHKENSKT8oXGR7N30pKFwgfCQpL2csIGlu
dGVybmFsQnVnUmVwbGFjZVZhbHVlKTsKICAgICBidWdzID0gYnVncy5yZXBsYWNlKC9CVUcoV0sp
KFxkezV9XGQqPykoXCB8JCkvZywgd2Via2l0QnVnUmVwbGFjZVZhbHVlKTsKICAgICByZXR1cm4g
YnVnczsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldExpbmtIVE1MVG9PcGVuV2luZG93KHVybCwg
dGV4dCkgewotICAgIHJldHVybiAnPGRpdiBjbGFzcz1saW5rIG9uY2xpY2s9IndpbmRvdy5vcGVu
KFwnJyArIHVybCArICdcJykiPicgKyB0ZXh0ICsKLSAgICAgICAgJzwvZGl2Pic7Ci0gIH0KK2Z1
bmN0aW9uIGdldExpbmtIVE1MVG9PcGVuV2luZG93KHVybCwgdGV4dCkKK3sKKyAgICByZXR1cm4g
JzxkaXYgY2xhc3M9bGluayBvbmNsaWNrPSJ3aW5kb3cub3BlbihcJycgKyB1cmwgKyAnXCcpIj4n
ICsgdGV4dCArICc8L2Rpdj4nOworfQogCi0gIC8vIFRPRE86IHJlcGxhY2VkIHdpdGggZ2V0Q2hy
b21pdW1SZXZpc2lvbkxpbmsvZ2V0V2ViS2l0UmV2aXNpb25MaW5rCi0gIGZ1bmN0aW9uIGNyZWF0
ZUJsYW1lTGlzdEhUTUwocmV2aXNpb25zLCBpbmRleCwgdXJsQmFzZSwgc2VwYXJhdG9yLCByZXBv
KSB7CisvLyBUT0RPOiByZXBsYWNlZCB3aXRoIGdldENocm9taXVtUmV2aXNpb25MaW5rL2dldFdl
YktpdFJldmlzaW9uTGluaworZnVuY3Rpb24gY3JlYXRlQmxhbWVMaXN0SFRNTChyZXZpc2lvbnMs
IGluZGV4LCB1cmxCYXNlLCBzZXBhcmF0b3IsIHJlcG8pCit7CiAgICAgdmFyIHRoaXNSZXZpc2lv
biA9IHJldmlzaW9uc1tpbmRleF07CiAgICAgaWYgKCF0aGlzUmV2aXNpb24pCi0gICAgICByZXR1
cm4gJyc7CisgICAgICAgIHJldHVybiAnJzsKIAogICAgIHZhciBwcmV2aW91c1JldmlzaW9uID0g
cmV2aXNpb25zW2luZGV4ICsgMV07CiAgICAgaWYgKHByZXZpb3VzUmV2aXNpb24gJiYgcHJldmlv
dXNSZXZpc2lvbiAhPSB0aGlzUmV2aXNpb24pIHsKLSAgICAgIHByZXZpb3VzUmV2aXNpb24rKzsK
LSAgICAgIHJldHVybiBnZXRMaW5rSFRNTFRvT3BlbldpbmRvdygKLSAgICAgICAgICB1cmxCYXNl
ICsgdGhpc1JldmlzaW9uICsgc2VwYXJhdG9yICsgcHJldmlvdXNSZXZpc2lvbiwKLSAgICAgICAg
ICByZXBvICsgJyBibGFtZWxpc3QgcicgKyBwcmV2aW91c1JldmlzaW9uICsgJzpyJyArIHRoaXNS
ZXZpc2lvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAnQXQgJyArIHJlcG8gKyAnIHJl
dmlzaW9uOiAnICsgdGhpc1JldmlzaW9uOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1
cm5zIHdoZXRoZXIgdGhlIHJlc3VsdCBmb3IgaW5kZXgndGggcmVzdWx0IGZvciB0ZXN0TmFtZSBv
biBidWlsZGVyIHdhcwotICAgKiBhIGZhaWx1cmUuCi0gICAqLwotICBmdW5jdGlvbiBpc0ZhaWx1
cmUoYnVpbGRlciwgdGVzdE5hbWUsIGluZGV4KSB7CisgICAgICAgIHByZXZpb3VzUmV2aXNpb24r
KzsKKyAgICAgICAgcmV0dXJuIGdldExpbmtIVE1MVG9PcGVuV2luZG93KHVybEJhc2UgKyB0aGlz
UmV2aXNpb24gKyBzZXBhcmF0b3IgKyBwcmV2aW91c1JldmlzaW9uLAorICAgICAgICAgICAgcmVw
byArICcgYmxhbWVsaXN0IHInICsgcHJldmlvdXNSZXZpc2lvbiArICc6cicgKyB0aGlzUmV2aXNp
b24pOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gJ0F0ICcgKyByZXBvICsgJyByZXZpc2lv
bjogJyArIHRoaXNSZXZpc2lvbjsKK30KKworLyoqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHJl
c3VsdCBmb3IgaW5kZXgndGggcmVzdWx0IGZvciB0ZXN0TmFtZSBvbiBidWlsZGVyIHdhcworICog
YSBmYWlsdXJlLgorICovCitmdW5jdGlvbiBpc0ZhaWx1cmUoYnVpbGRlciwgdGVzdE5hbWUsIGlu
ZGV4KQorewogICAgIHZhciBjdXJyZW50SW5kZXggPSAwOwogICAgIHZhciByYXdSZXN1bHRzID0g
cmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS50ZXN0c1t0ZXN0TmFtZV0ucmVzdWx0czsKICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJhd1Jlc3VsdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGN1cnJl
bnRJbmRleCArPSByYXdSZXN1bHRzW2ldW1JMRS5MRU5HVEhdOwotICAgICAgaWYgKGN1cnJlbnRJ
bmRleCA+IGluZGV4KQotICAgICAgICByZXR1cm4gaXNGYWlsaW5nUmVzdWx0KHJhd1Jlc3VsdHNb
aV1bUkxFLlZBTFVFXSk7CisgICAgICAgIGN1cnJlbnRJbmRleCArPSByYXdSZXN1bHRzW2ldW1JM
RS5MRU5HVEhdOworICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gaW5kZXgpCisgICAgICAgICAg
ICByZXR1cm4gaXNGYWlsaW5nUmVzdWx0KHJhd1Jlc3VsdHNbaV1bUkxFLlZBTFVFXSk7CiAgICAg
fQogICAgIGNvbnNvbGUuZXJyb3IoJ0luZGV4IGV4Y2VlZHMgbnVtYmVyIG9mIHJlc3VsdHM6ICcg
KyBpbmRleCk7Ci0gIH0KK30KIAotICAvKioKLSAgICogUmV0dXJucyBhbiBhcnJheSBvZiBidWls
ZE51bWJlcnMgZm9yIGFsbCBidWlsZHMgd2hlcmUgdGhpcyB0ZXN0IGZhaWxlZC4KLSAgICovCi0g
IGZ1bmN0aW9uIGdldEJ1aWxkTnVtYmVyc0ZvckZhaWx1cmVzKGJ1aWxkZXIsIHRlc3ROYW1lKSB7
CisvKioKKyAqIFJldHVybnMgYW4gYXJyYXkgb2YgYnVpbGROdW1iZXJzIGZvciBhbGwgYnVpbGRz
IHdoZXJlIHRoaXMgdGVzdCBmYWlsZWQuCisgKi8KK2Z1bmN0aW9uIGdldEJ1aWxkTnVtYmVyc0Zv
ckZhaWx1cmVzKGJ1aWxkZXIsIHRlc3ROYW1lKQorewogICAgIHZhciByYXdSZXN1bHRzID0gcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXS50ZXN0c1t0ZXN0TmFtZV0ucmVzdWx0czsKICAgICB2YXIg
YnVpbGROdW1iZXJzID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnM7CiAg
ICAgdmFyIGluZGV4ID0gMDsKICAgICB2YXIgZmFpbHVyZXMgPSBbXTsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJhd1Jlc3VsdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBudW1SZXN1bHRz
ID0gcmF3UmVzdWx0c1tpXVtSTEUuTEVOR1RIXTsKLSAgICAgIGlmIChpc0ZhaWxpbmdSZXN1bHQo
cmF3UmVzdWx0c1tpXVtSTEUuVkFMVUVdKSkgewotICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IG51bVJlc3VsdHM7IGorKykgewotICAgICAgICAgIGZhaWx1cmVzLnB1c2goYnVpbGROdW1iZXJz
W2luZGV4ICsgal0pOworICAgICAgICB2YXIgbnVtUmVzdWx0cyA9IHJhd1Jlc3VsdHNbaV1bUkxF
LkxFTkdUSF07CisgICAgICAgIGlmIChpc0ZhaWxpbmdSZXN1bHQocmF3UmVzdWx0c1tpXVtSTEUu
VkFMVUVdKSkgeworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1SZXN1bHRzOyBq
KyspCisgICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaChidWlsZE51bWJlcnNbaW5kZXggKyBq
XSk7CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGluZGV4ICs9IG51bVJlc3VsdHM7CisgICAg
ICAgIGluZGV4ICs9IG51bVJlc3VsdHM7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhaWx1cmVzOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIGZhaWx1cmUgbG9nIGZv
ciB0aGlzIG5vbi13ZWJraXQgdGVzdC4KLSAgICovCi0gIGZ1bmN0aW9uIGdldFBhdGhUb0ZhaWx1
cmVMb2codGVzdE5hbWUpIHsKLSAgICByZXR1cm4gJy9zdGVwcy8nICsgY3VycmVudFN0YXRlLnRl
c3RUeXBlICsgJy9sb2dzLycgKwotICAgICAgICB0ZXN0TmFtZS5zcGxpdCgnLicpWzFdCi0gIH0K
LQotICBmdW5jdGlvbiBzaG93UG9wdXBGb3JCdWlsZChlLCBidWlsZGVyLCBpbmRleCwgb3B0X3Rl
c3ROYW1lKSB7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgZmFpbHVyZSBs
b2cgZm9yIHRoaXMgbm9uLXdlYmtpdCB0ZXN0LgorICovCitmdW5jdGlvbiBnZXRQYXRoVG9GYWls
dXJlTG9nKHRlc3ROYW1lKQoreworICAgIHJldHVybiAnL3N0ZXBzLycgKyBjdXJyZW50U3RhdGUu
dGVzdFR5cGUgKyAnL2xvZ3MvJyArIHRlc3ROYW1lLnNwbGl0KCcuJylbMV0KK30KKworZnVuY3Rp
b24gc2hvd1BvcHVwRm9yQnVpbGQoZSwgYnVpbGRlciwgaW5kZXgsIG9wdF90ZXN0TmFtZSkKK3sK
ICAgICB2YXIgaHRtbCA9ICcnOwogCiAgICAgdmFyIHRpbWUgPSByZXN1bHRzQnlCdWlsZGVyW2J1
aWxkZXJdLnNlY29uZHNTaW5jZUVwb2NoW2luZGV4XTsKICAgICBpZiAodGltZSkgewotICAgICAg
dmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lICogMTAwMCk7Ci0gICAgICBodG1sICs9IGRhdGUudG9M
b2NhbGVEYXRlU3RyaW5nKCkgKyAnICcgKyBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygpOworICAg
ICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHRpbWUgKiAxMDAwKTsKKyAgICAgICAgaHRtbCArPSBk
YXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpICsgJyAnICsgZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmco
KTsKICAgICB9CiAKICAgICB2YXIgYnVpbGROdW1iZXIgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJdLmJ1aWxkTnVtYmVyc1tpbmRleF07CkBAIC0xMzQwLDQ1ICsxMjk5LDQwIEBAIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgICAgICAgICc8L2xpPic7CiAKICAgICBpZiAoYnVpbGRlck1hc3RlciA9PSBXRUJLSVRf
QlVJTERFUl9NQVNURVIpIHsKLSAgICAgIHZhciByZXZpc2lvbiA9IHJlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0ud2Via2l0UmV2aXNpb25baW5kZXhdOwotICAgICAgaHRtbCArPSAnPGxpPjxzcGFu
IGNsYXNzPWxpbmsgb25jbGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXZpc2lvblwnLCcgKwot
ICAgICAgICAgIHJldmlzaW9uICsgJykiPlNob3cgcmVzdWx0cyBmb3IgV2ViS2l0IHInICsgcmV2
aXNpb24gKwotICAgICAgICAgICc8L3NwYW4+PC9saT4nOworICAgICAgICB2YXIgcmV2aXNpb24g
PSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uW2luZGV4XTsKKyAgICAg
ICAgaHRtbCArPSAnPGxpPjxzcGFuIGNsYXNzPWxpbmsgb25jbGljaz0ic2V0UXVlcnlQYXJhbWV0
ZXIoXCdyZXZpc2lvblwnLCcgKworICAgICAgICAgICAgcmV2aXNpb24gKyAnKSI+U2hvdyByZXN1
bHRzIGZvciBXZWJLaXQgcicgKyByZXZpc2lvbiArCisgICAgICAgICAgICAnPC9zcGFuPjwvbGk+
JzsKICAgICB9IGVsc2UgewotICAgICAgaHRtbCArPSAnPGxpPicgKwotICAgICAgICAgIGNyZWF0
ZUJsYW1lTGlzdEhUTUwocmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5jaHJvbWVSZXZpc2lvbiwg
aW5kZXgsCi0gICAgICAgICAgICAgICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21p
dW0vcGVyZi9kYXNoYm9hcmQvdWkvJyArCi0gICAgICAgICAgICAgICdjaGFuZ2Vsb2cuaHRtbD91
cmw9L3RydW5rL3NyYyZtb2RlPWh0bWwmcmFuZ2U9JywgJzonLAotICAgICAgICAgICAgICAnQ2hy
b21lJykgKwotICAgICAgICAgICc8L2xpPic7Ci0KLSAgICAgIHZhciBjaHJvbWVSZXZpc2lvbiA9
IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uY2hyb21lUmV2aXNpb25baW5kZXhdOwotICAgICAg
aWYgKGNocm9tZVJldmlzaW9uICYmIGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgewotICAgICAgICBo
dG1sICs9ICc8bGk+PGEgaHJlZj0iJyArIFRFU1RfUkVTVUxUU19CQVNFX1BBVEggKyBidWlsZGVy
c1tidWlsZGVyXSArCi0gICAgICAgICAgICAnLycgKyBjaHJvbWVSZXZpc2lvbiArICcvbGF5b3V0
LXRlc3QtcmVzdWx0cy56aXAnICsKLSAgICAgICAgICAgICciPmxheW91dC10ZXN0LXJlc3VsdHMu
emlwPC9hPjwvbGk+JzsKLSAgICAgIH0KKyAgICAgICAgaHRtbCArPSAnPGxpPicgKworICAgICAg
ICAgICAgY3JlYXRlQmxhbWVMaXN0SFRNTChyZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmNocm9t
ZVJldmlzaW9uLCBpbmRleCwKKyAgICAgICAgICAgICAgICAnaHR0cDovL2J1aWxkLmNocm9taXVt
Lm9yZy9mL2Nocm9taXVtL3BlcmYvZGFzaGJvYXJkL3VpL2NoYW5nZWxvZy5odG1sP3VybD0vdHJ1
bmsvc3JjJm1vZGU9aHRtbCZyYW5nZT0nLCAnOicsICdDaHJvbWUnKSArCisgICAgICAgICAgICAn
PC9saT4nOworCisgICAgICAgIHZhciBjaHJvbWVSZXZpc2lvbiA9IHJlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0uY2hyb21lUmV2aXNpb25baW5kZXhdOworICAgICAgICBpZiAoY2hyb21lUmV2aXNp
b24gJiYgaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgICAgICAgICBodG1sICs9ICc8bGk+
PGEgaHJlZj0iJyArIFRFU1RfUkVTVUxUU19CQVNFX1BBVEggKyBidWlsZGVyc1tidWlsZGVyXSAr
CisgICAgICAgICAgICAgICAgJy8nICsgY2hyb21lUmV2aXNpb24gKyAnL2xheW91dC10ZXN0LXJl
c3VsdHMuemlwIj5sYXlvdXQtdGVzdC1yZXN1bHRzLnppcDwvYT48L2xpPic7CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoIWlzTGF5b3V0VGVzdFJlc3VsdHMoKSAmJiBvcHRfdGVzdE5hbWUg
JiYKLSAgICAgICAgaXNGYWlsdXJlKGJ1aWxkZXIsIG9wdF90ZXN0TmFtZSwgaW5kZXgpKSB7Ci0g
ICAgICBodG1sICs9ICc8bGk+JyArIGdldExpbmtIVE1MVG9PcGVuV2luZG93KAotICAgICAgICAg
IGJ1aWxkQmFzZVBhdGggKyBnZXRQYXRoVG9GYWlsdXJlTG9nKG9wdF90ZXN0TmFtZSksCi0gICAg
ICAgICAgJ0ZhaWx1cmUgbG9nJykgKyAnPC9saT4nOwotICAgIH0KKyAgICBpZiAoIWlzTGF5b3V0
VGVzdFJlc3VsdHMoKSAmJiBvcHRfdGVzdE5hbWUgJiYgaXNGYWlsdXJlKGJ1aWxkZXIsIG9wdF90
ZXN0TmFtZSwgaW5kZXgpKQorICAgICAgICBodG1sICs9ICc8bGk+JyArIGdldExpbmtIVE1MVG9P
cGVuV2luZG93KGJ1aWxkQmFzZVBhdGggKyBnZXRQYXRoVG9GYWlsdXJlTG9nKG9wdF90ZXN0TmFt
ZSksICdGYWlsdXJlIGxvZycpICsgJzwvbGk+JzsKIAogICAgIGh0bWwgKz0gJzwvdWw+JzsKICAg
ICBzaG93UG9wdXAoZSwgaHRtbCk7Ci0gIH0KK30KIAotICBmdW5jdGlvbiBzaG93UG9wdXBGb3JU
ZXN0KGUsIHRlc3QpIHsKK2Z1bmN0aW9uIHNob3dQb3B1cEZvclRlc3QoZSwgdGVzdCkKK3sKICAg
ICBzaG93UG9wdXAoZSwgZ2V0SFRNTEZvckluZGl2aWR1bFRlc3RPbkFsbEJ1aWxkZXJzKHRlc3Qp
KTsKICAgICBhcHBlbmRFeHBlY3RhdGlvbnMoKTsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldEh0
bWxGb3JUZXN0UmVzdWx0cyh0ZXN0KSB7CitmdW5jdGlvbiBnZXRIdG1sRm9yVGVzdFJlc3VsdHMo
dGVzdCkKK3sKICAgICBpZiAoIWN1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UgJiYg
IWlzQ3Jvc3NCdWlsZGVyVmlldygpKQotICAgICAgcmV0dXJuICc8dGQ+JyArIHRlc3QuZmxpcHM7
CisgICAgICAgIHJldHVybiAnPHRkPicgKyB0ZXN0LmZsaXBzOwogCiAgICAgdmFyIGh0bWwgPSAn
JzsKICAgICB2YXIgcmVzdWx0cyA9IHRlc3QucmF3UmVzdWx0cy5jb25jYXQoKTsKQEAgLTEzODks
MTE5ICsxMzQzLDEwOCBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAgICAgdmFyIGluZGV4VG9SZXBsYWNlQ3Vy
cmVudFJlc3VsdCA9IC0xOwogICAgIHZhciBpbmRleFRvUmVwbGFjZUN1cnJlbnRUaW1lID0gLTE7
Ci0gICAgdmFyIGN1cnJlbnRSZXN1bHRBcnJheSwgY3VycmVudFRpbWVBcnJheSwgY3VycmVudFJl
c3VsdCwgaW5uZXJIVE1MLAotICAgICAgICByZXN1bHRTdHJpbmc7CisgICAgdmFyIGN1cnJlbnRS
ZXN1bHRBcnJheSwgY3VycmVudFRpbWVBcnJheSwgY3VycmVudFJlc3VsdCwgaW5uZXJIVE1MLCBy
ZXN1bHRTdHJpbmc7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWlsZE51bWJlcnMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgIGlmIChpID4gaW5kZXhUb1JlcGxhY2VDdXJyZW50UmVzdWx0KSB7Ci0g
ICAgICAgIGN1cnJlbnRSZXN1bHRBcnJheSA9IHJlc3VsdHMuc2hpZnQoKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRSZXN1bHRBcnJheSkgewotICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXJyZW50
UmVzdWx0QXJyYXlbUkxFLlZBTFVFXTsKLSAgICAgICAgICAvLyBUcmVhdCBzaW1wbGlmaWVkIGRp
ZmYgZmFpbHVyZXMgYXMganVzdCB0ZXh0IGZhaWx1cmVzLgotICAgICAgICAgIGlmIChjdXJyZW50
UmVzdWx0ID09ICdTJykKLSAgICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAnRic7Ci0gICAgICAg
ICAgaW5kZXhUb1JlcGxhY2VDdXJyZW50UmVzdWx0ICs9IGN1cnJlbnRSZXN1bHRBcnJheVtSTEUu
TEVOR1RIXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gJ04n
OwotICAgICAgICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCArPSBidWlsZE51bWJlcnMu
bGVuZ3RoOworICAgICAgICBpZiAoaSA+IGluZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCkgewor
ICAgICAgICAgICAgY3VycmVudFJlc3VsdEFycmF5ID0gcmVzdWx0cy5zaGlmdCgpOworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRSZXN1bHRBcnJheSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRS
ZXN1bHQgPSBjdXJyZW50UmVzdWx0QXJyYXlbUkxFLlZBTFVFXTsKKyAgICAgICAgICAgICAgICAv
LyBUcmVhdCBzaW1wbGlmaWVkIGRpZmYgZmFpbHVyZXMgYXMganVzdCB0ZXh0IGZhaWx1cmVzLgor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVzdWx0ID09ICdTJykKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFJlc3VsdCA9ICdGJzsKKyAgICAgICAgICAgICAgICBpbmRleFRvUmVwbGFj
ZUN1cnJlbnRSZXN1bHQgKz0gY3VycmVudFJlc3VsdEFycmF5W1JMRS5MRU5HVEhdOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gJ04nOworICAg
ICAgICAgICAgICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCArPSBidWlsZE51bWJlcnMu
bGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gZ2V0RXhw
ZWN0YXRpb25zRmlsZVN0cmluZ0ZvclJlc3VsdChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IGdldEV4cGVjdGF0aW9uc0ZpbGVTdHJpbmdGb3JSZXN1
bHQoY3VycmVudFJlc3VsdCk7Ci0gICAgICB9CisgICAgICAgIGlmIChpID4gaW5kZXhUb1JlcGxh
Y2VDdXJyZW50VGltZSkgeworICAgICAgICAgICAgY3VycmVudFRpbWVBcnJheSA9IHRpbWVzLnNo
aWZ0KCk7CisgICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSAwOworICAgICAgICAgICAgaWYg
KGN1cnJlbnRSZXN1bHRBcnJheSkgeworICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGN1cnJl
bnRUaW1lQXJyYXlbUkxFLlZBTFVFXTsKKyAgICAgICAgICAgICAgaW5kZXhUb1JlcGxhY2VDdXJy
ZW50VGltZSArPSBjdXJyZW50VGltZUFycmF5W1JMRS5MRU5HVEhdOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFRpbWUgKz0gYnVpbGROdW1i
ZXJzLmxlbmd0aDsKIAotICAgICAgaWYgKGkgPiBpbmRleFRvUmVwbGFjZUN1cnJlbnRUaW1lKSB7
Ci0gICAgICAgIGN1cnJlbnRUaW1lQXJyYXkgPSB0aW1lcy5zaGlmdCgpOwotICAgICAgICB2YXIg
Y3VycmVudFRpbWUgPSAwOwotICAgICAgICBpZiAoY3VycmVudFJlc3VsdEFycmF5KSB7Ci0gICAg
ICAgICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZUFycmF5W1JMRS5WQUxVRV07Ci0gICAgICAg
ICAgaW5kZXhUb1JlcGxhY2VDdXJyZW50VGltZSArPSBjdXJyZW50VGltZUFycmF5W1JMRS5MRU5H
VEhdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFRp
bWUgKz0gYnVpbGROdW1iZXJzLmxlbmd0aDsKKyAgICAgICAgICAgIGlubmVySFRNTCA9IGN1cnJl
bnRUaW1lIHx8ICcmbmJzcDsnOwogICAgICAgICB9Ci0gICAgICAgIGlubmVySFRNTCA9IGN1cnJl
bnRUaW1lIHx8ICcmbmJzcDsnOwotICAgICAgfQotCi0gICAgICB2YXIgZXh0cmFDbGFzc05hbWVz
ID0gJyc7Ci0gICAgICB2YXIgd2Via2l0UmV2aXNpb24gPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJdLndlYmtpdFJldmlzaW9uOwotICAgICAgdmFyIGlzV2Via2l0TWVyZ2UgPSB3ZWJraXRSZXZp
c2lvbltpICsgMV0gJiYKLSAgICAgICAgICB3ZWJraXRSZXZpc2lvbltpXSAhPSB3ZWJraXRSZXZp
c2lvbltpICsgMV07Ci0gICAgICBpZiAoaXNXZWJraXRNZXJnZSAmJiBidWlsZGVyTWFzdGVyICE9
IFdFQktJVF9CVUlMREVSX01BU1RFUikgewotICAgICAgICBleHRyYUNsYXNzTmFtZXMgKz0gJyBt
ZXJnZSc7Ci0gICAgICB9Ci0KLSAgICAgIGh0bWwgKz0gJzx0ZCB0aXRsZT0iJyArIChyZXN1bHRT
dHJpbmcgfHwgJ05PIERBVEEnKSArCi0gICAgICAgICAgJy4gQ2xpY2sgZm9yIG1vcmUgaW5mby4i
IGNsYXNzPSJyZXN1bHRzICcgKyBjdXJyZW50UmVzdWx0ICsKLSAgICAgICAgICBleHRyYUNsYXNz
TmFtZXMgKyAnIiBvbmNsaWNrPVwnc2hvd1BvcHVwRm9yQnVpbGQoZXZlbnQsICInICsKLSAgICAg
ICAgICBidWlsZGVyICsgJyIsJyArIGkgKyAnLCInICsgdGVzdC50ZXN0ICsgJyIpXCc+JyArIGlu
bmVySFRNTDsKKworICAgICAgICB2YXIgZXh0cmFDbGFzc05hbWVzID0gJyc7CisgICAgICAgIHZh
ciB3ZWJraXRSZXZpc2lvbiA9IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNp
b247CisgICAgICAgIHZhciBpc1dlYmtpdE1lcmdlID0gd2Via2l0UmV2aXNpb25baSArIDFdICYm
IHdlYmtpdFJldmlzaW9uW2ldICE9IHdlYmtpdFJldmlzaW9uW2kgKyAxXTsKKyAgICAgICAgaWYg
KGlzV2Via2l0TWVyZ2UgJiYgYnVpbGRlck1hc3RlciAhPSBXRUJLSVRfQlVJTERFUl9NQVNURVIp
CisgICAgICAgICAgICBleHRyYUNsYXNzTmFtZXMgKz0gJyBtZXJnZSc7CisKKyAgICAgICAgaHRt
bCArPSAnPHRkIHRpdGxlPSInICsgKHJlc3VsdFN0cmluZyB8fCAnTk8gREFUQScpICsgJy4gQ2xp
Y2sgZm9yIG1vcmUgaW5mby4iIGNsYXNzPSJyZXN1bHRzICcgKyBjdXJyZW50UmVzdWx0ICsKKyAg
ICAgICAgICBleHRyYUNsYXNzTmFtZXMgKyAnIiBvbmNsaWNrPVwnc2hvd1BvcHVwRm9yQnVpbGQo
ZXZlbnQsICInICsgYnVpbGRlciArICciLCcgKyBpICsgJywiJyArIHRlc3QudGVzdCArICciKVwn
PicgKyBpbm5lckhUTUw7CiAgICAgfQogICAgIHJldHVybiBodG1sOwotICB9Cit9CiAKLSAgZnVu
Y3Rpb24gZ2V0SFRNTEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRl
cikgeworZnVuY3Rpb24gZ2V0SFRNTEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVy
ZXMoYnVpbGRlcikKK3sKICAgICB2YXIgdGVzdHMgPSBwZXJCdWlsZGVyV2l0aEV4cGVjdGF0aW9u
c0J1dE5vRmFpbHVyZXNbYnVpbGRlcl07CiAgICAgdmFyIHNraXBwZWRQYXRocyA9IHBlckJ1aWxk
ZXJTa2lwcGVkUGF0aHNbYnVpbGRlcl07CiAKICAgICB2YXIgaHRtbCA9ICcnOwogICAgIGlmICh0
ZXN0cy5sZW5ndGggfHwgc2tpcHBlZFBhdGhzLmxlbmd0aCkgewotICAgICAgdmFyIGJ1aWxkSW5m
byA9IGdldFBsYXRmb3JtQW5kQnVpbGRUeXBlKGJ1aWxkZXIpOwotICAgICAgaHRtbCArPSAnPGgy
PkV4cGVjdGF0aW9ucyBmb3IgJyArIGJ1aWxkSW5mby5wbGF0Zm9ybSArICctJyArCi0gICAgICAg
ICAgYnVpbGRJbmZvLmJ1aWxkVHlwZSArICc6PC9oMj4nOworICAgICAgICB2YXIgYnVpbGRJbmZv
ID0gZ2V0UGxhdGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRlcik7CisgICAgICAgIGh0bWwgKz0gJzxo
Mj5FeHBlY3RhdGlvbnMgZm9yICcgKyBidWlsZEluZm8ucGxhdGZvcm0gKyAnLScgKyBidWlsZElu
Zm8uYnVpbGRUeXBlICsgJzo8L2gyPic7CiAgICAgfQogCiAgICAgdmFyIG9wZW4gPSAnPGRpdiBv
bmNsaWNrPSJzZWxlY3RDb250ZW50cyh0aGlzKSI+JzsKIAogICAgIGlmICh0ZXN0cy5sZW5ndGgp
IHsKLSAgICAgIGh0bWwgKz0gICc8aDM+SGF2ZSBub3QgZmFpbGVkIGluIGxhc3QgJyArCi0gICAg
ICAgICAgcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnMubGVuZ3RoICsKLSAg
ICAgICAgICAnIHJ1bnMuPC9oMz48ZGl2IGlkPSJwYXNzaW5nLXRlc3RzIj4nOworICAgICAgICBo
dG1sICs9ICAnPGgzPkhhdmUgbm90IGZhaWxlZCBpbiBsYXN0ICcgKyByZXN1bHRzQnlCdWlsZGVy
W2J1aWxkZXJdLmJ1aWxkTnVtYmVycy5sZW5ndGggKyAnIHJ1bnMuPC9oMz48ZGl2IGlkPSJwYXNz
aW5nLXRlc3RzIj4nOwogCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIGh0bWwgKz0gb3BlbiArIHRlc3RzW2ldLnRlc3QgKyAnPC9kaXY+JzsK
LSAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgIGh0bWwgKz0gb3BlbiArIHRlc3RzW2ldLnRlc3QgKyAnPC9kaXY+JzsKIAot
ICAgICAgaHRtbCArPSAnPC9kaXY+JzsKKyAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICB9
CiAKICAgICBpZiAoc2tpcHBlZFBhdGhzLmxlbmd0aCkgewotICAgICAgaHRtbCArPSAnPGgzPicg
KwotICAgICAgICAgIGdldExpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd1NraXBwZWQnLAotICAg
ICAgICAgICAgICAnU2tpcHBlZCB0ZXN0cyBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50eHQnKSArCi0g
ICAgICAgICAgJzwvaDM+JzsKLQotICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5zaG93U2tpcHBlZCkg
ewotICAgICAgICBodG1sICs9ICc8ZGl2IGlkPSJwYXNzaW5nLXRlc3RzIj4nICsgb3BlbiArCi0g
ICAgICAgICAgc2tpcHBlZFBhdGhzLmpvaW4oJzwvZGl2PicgKyBvcGVuKSArICc8L2Rpdj48L2Rp
dj4nOwotICAgICAgfQorICAgICAgICBodG1sICs9ICc8aDM+JyArIGdldExpbmtIVE1MVG9Ub2dn
bGVTdGF0ZSgnc2hvd1NraXBwZWQnLCAnU2tpcHBlZCB0ZXN0cyBpbiB0ZXN0X2V4cGVjdGF0aW9u
cy50eHQnKSArICc8L2gzPic7CisKKyAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5zaG93U2tpcHBl
ZCkKKyAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9InBhc3NpbmctdGVzdHMiPicgKyBvcGVu
ICsgc2tpcHBlZFBhdGhzLmpvaW4oJzwvZGl2PicgKyBvcGVuKSArICc8L2Rpdj48L2Rpdj4nOwog
ICAgIH0KICAgICByZXR1cm4gaHRtbDsKLSAgfQorfQogCi0gIC8qKgotICAgKiBSZXR1cm5zIHdo
ZXRoZXIgd2Ugc2hvdWxkIGV4Y2x1ZGUgdGVzdCByZXN1bHRzIGZyb20gdGhlIHRlc3QgdGFibGUu
Ci0gICAqLwotICBmdW5jdGlvbiBzaG91bGRIaWRlVGVzdCh0ZXN0UmVzdWx0KSB7CisvKioKKyAq
IFJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgZXhjbHVkZSB0ZXN0IHJlc3VsdHMgZnJvbSB0aGUg
dGVzdCB0YWJsZS4KKyAqLworZnVuY3Rpb24gc2hvdWxkSGlkZVRlc3QodGVzdFJlc3VsdCkKK3sK
ICAgICBpZiAodGVzdFJlc3VsdC5pc1dvbnRGaXhTa2lwKQotICAgICAgcmV0dXJuICFjdXJyZW50
U3RhdGUuc2hvd1dvbnRGaXhTa2lwOworICAgICAgICByZXR1cm4gIWN1cnJlbnRTdGF0ZS5zaG93
V29udEZpeFNraXA7CiAKICAgICBpZiAodGVzdFJlc3VsdC5pc0ZsYWt5KQotICAgICAgcmV0dXJu
ICFjdXJyZW50U3RhdGUuc2hvd0ZsYWt5OworICAgICAgICByZXR1cm4gIWN1cnJlbnRTdGF0ZS5z
aG93Rmxha3k7CiAKICAgICBpZiAoaXNTbG93VGVzdCh0ZXN0UmVzdWx0KSkKLSAgICAgIHJldHVy
biAhY3VycmVudFN0YXRlLnNob3dTbG93OworICAgICAgICByZXR1cm4gIWN1cnJlbnRTdGF0ZS5z
aG93U2xvdzsKIAogICAgIGlmICh0ZXN0UmVzdWx0Lm1lZXRzRXhwZWN0YXRpb25zKQotICAgICAg
cmV0dXJuICFjdXJyZW50U3RhdGUuc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnM7CisgICAgICAgIHJl
dHVybiAhY3VycmVudFN0YXRlLnNob3dDb3JyZWN0RXhwZWN0YXRpb25zOwogCiAgICAgcmV0dXJu
ICFjdXJyZW50U3RhdGUuc2hvd1dyb25nRXhwZWN0YXRpb25zOwotICB9Cit9CiAKLSAgLyoqCi0g
ICAqIFNldHMgdGhlIGJyb3dzZXIncyBzZWxlY3Rpb24gdG8gdGhlIGVsZW1lbnQncyBjb250ZW50
cy4KLSAgICovCi0gIGZ1bmN0aW9uIHNlbGVjdENvbnRlbnRzKGVsZW1lbnQpIHsKKy8qKgorICog
U2V0cyB0aGUgYnJvd3NlcidzIHNlbGVjdGlvbiB0byB0aGUgZWxlbWVudCdzIGNvbnRlbnRzLgor
ICovCitmdW5jdGlvbiBzZWxlY3RDb250ZW50cyhlbGVtZW50KQorewogICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50KTsKLSAgfQorfQogCi0gIGZ1bmN0
aW9uIGdldENyZWF0ZUJ1Z0hUTUwodGVzdCkgeworZnVuY3Rpb24gZ2V0Q3JlYXRlQnVnSFRNTCh0
ZXN0KQorewogICAgIHZhciBzeW1wdG9tID0gdGVzdC5pc0ZsYWt5ID8gJ2ZsYWt5JyA6ICdmYWls
aW5nJzsKICAgICB2YXIgdGl0bGUgPSAnTGF5b3V0IFRlc3QgJyArIHRlc3QudGVzdCArICcgaXMg
JyArIHN5bXB0b207CiAgICAgdmFyIGRlc2NyaXB0aW9uID0gJ1RoZSBmb2xsb3dpbmcgbGF5b3V0
IHRlc3QgaXMgJyArIHN5bXB0b20gKyAnIG9uICcgKwpAQCAtMTUxMSwyOCArMTQ1NCwzMCBAQCBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICAgICAgICAndGVtcGxhdGU9TGF5b3V0JTIwVGVzdCUyMEZhaWx1cmUmc3Vt
bWFyeT0nICsKICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHRpdGxlKSArICcmY29tbWVudD0n
ICsKICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGRlc2NyaXB0aW9uKSArICciIGNsYXNzPSJm
aWxlLWJ1ZyI+RklMRSBCVUc8L2E+JzsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGlzQ3Jvc3NCdWls
ZGVyVmlldygpIHsKK2Z1bmN0aW9uIGlzQ3Jvc3NCdWlsZGVyVmlldygpCit7CiAgICAgcmV0dXJu
IGN1cnJlbnRTdGF0ZS50ZXN0cyB8fCBjdXJyZW50U3RhdGUucmVzdWx0IHx8IGN1cnJlbnRTdGF0
ZS5leHBlY3RhdGlvbnNVcGRhdGU7Ci0gIH0KK30KIAotICBmdW5jdGlvbiB0YWJsZUhlYWRlcnMo
b3B0X2dldEFsbCkgeworZnVuY3Rpb24gdGFibGVIZWFkZXJzKG9wdF9nZXRBbGwpCit7CiAgICAg
dmFyIGhlYWRlcnMgPSBbXTsKICAgICBpZiAoaXNDcm9zc0J1aWxkZXJWaWV3KCkgfHwgb3B0X2dl
dEFsbCkKLSAgICAgIGhlYWRlcnMucHVzaCgnYnVpbGRlcicpOworICAgICAgICBoZWFkZXJzLnB1
c2goJ2J1aWxkZXInKTsKIAogICAgIGlmICghaXNDcm9zc0J1aWxkZXJWaWV3KCkgfHwgb3B0X2dl
dEFsbCkKLSAgICAgIGhlYWRlcnMucHVzaCgndGVzdCcpOworICAgICAgICBoZWFkZXJzLnB1c2go
J3Rlc3QnKTsKIAogICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkgfHwgb3B0X2dldEFsbCkg
ewotICAgICAgaGVhZGVycy5wdXNoKCdidWdzJyk7Ci0gICAgICBpZiAoaXNDcm9zc0J1aWxkZXJW
aWV3KCkgfHwgY3VycmVudFN0YXRlLnNob3dSdW5zT25CdWlsZGVyUGFnZSB8fCBvcHRfZ2V0QWxs
KQotICAgICAgICBoZWFkZXJzLnB1c2goJ21vZGlmaWVycycsICdleHBlY3RhdGlvbnMnKTsKKyAg
ICAgICAgaGVhZGVycy5wdXNoKCdidWdzJyk7CisgICAgICAgIGlmIChpc0Nyb3NzQnVpbGRlclZp
ZXcoKSB8fCBjdXJyZW50U3RhdGUuc2hvd1J1bnNPbkJ1aWxkZXJQYWdlIHx8IG9wdF9nZXRBbGwp
CisgICAgICAgICAgICBoZWFkZXJzLnB1c2goJ21vZGlmaWVycycsICdleHBlY3RhdGlvbnMnKTsK
ICAgICB9CiAKICAgICBpZiAoY3VycmVudFN0YXRlLnNob3dSdW5zT25CdWlsZGVyUGFnZSB8fCBv
cHRfZ2V0QWxsIHx8IGlzQ3Jvc3NCdWlsZGVyVmlldygpKQotICAgICAgaGVhZGVycy5wdXNoKCdt
aXNzaW5nJywgJ2V4dHJhJyk7CisgICAgICAgIGhlYWRlcnMucHVzaCgnbWlzc2luZycsICdleHRy
YScpOwogCiAgICAgaGVhZGVycy5wdXNoKCdzbG93ZXN0IHJ1bicsICclIGZhaWwnKTsKIApAQCAt
MTU0MCw5NSArMTQ4NSw5MSBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIHZhciBGTElQU19IRUFERVIgPSAn
Zmxha2luZXNzIChudW1iZXIgb2YgZmxpcHMpJzsKIAogICAgIGlmIChjdXJyZW50U3RhdGUuc2hv
d1J1bnNPbkJ1aWxkZXJQYWdlIHx8IG9wdF9nZXRBbGwpCi0gICAgICBoZWFkZXJzLnB1c2goRkxB
S0lORVNTX0hFQURFUik7CisgICAgICAgIGhlYWRlcnMucHVzaChGTEFLSU5FU1NfSEVBREVSKTsK
IAogICAgIGlmICghY3VycmVudFN0YXRlLnNob3dSdW5zT25CdWlsZGVyUGFnZSB8fCBvcHRfZ2V0
QWxsKQotICAgICAgaGVhZGVycy5wdXNoKEZMSVBTX0hFQURFUik7CisgICAgICAgIGhlYWRlcnMu
cHVzaChGTElQU19IRUFERVIpOwogCiAgICAgcmV0dXJuIGhlYWRlcnM7Ci0gIH0KK30KIAotICBm
dW5jdGlvbiBnZXRIVE1MRm9yU2luZ2xlVGVzdFJvdyh0ZXN0KSB7CitmdW5jdGlvbiBnZXRIVE1M
Rm9yU2luZ2xlVGVzdFJvdyh0ZXN0KQorewogICAgIGlmICghaXNDcm9zc0J1aWxkZXJWaWV3KCkg
JiYgc2hvdWxkSGlkZVRlc3QodGVzdCkpIHsKLSAgICAgIC8vIFRoZSBpbm5lckhUTUwgY2FsbCBp
cyBjb25zaWRlcmFibHkgZmFzdGVyIGlmIHdlIGV4Y2x1ZGUgdGhlIHJvd3MgZm9yCi0gICAgICAv
LyBpdGVtcyB3ZSdyZSBub3Qgc2hvd2luZyB0aGFuIGlmIHdlIGhpZGUgdGhlbSB1c2luZyBkaXNw
bGF5Om5vbmUuCi0gICAgICAvLyBGb3IgdGhlIGNyb3NzQnVpbGRlclZpZXcsIHdlIHdhbnQgdG8g
c2hvdyBhbGwgcm93cyB0aGUgdXNlciBpcwotICAgICAgLy8gZXhwbGljaXRseSBsaXN0aW5nIHRl
c3RzIHRvIHZpZXcuCi0gICAgICByZXR1cm4gJyc7CisgICAgICAgIC8vIFRoZSBpbm5lckhUTUwg
Y2FsbCBpcyBjb25zaWRlcmFibHkgZmFzdGVyIGlmIHdlIGV4Y2x1ZGUgdGhlIHJvd3MgZm9yCisg
ICAgICAgIC8vIGl0ZW1zIHdlJ3JlIG5vdCBzaG93aW5nIHRoYW4gaWYgd2UgaGlkZSB0aGVtIHVz
aW5nIGRpc3BsYXk6bm9uZS4KKyAgICAgICAgLy8gRm9yIHRoZSBjcm9zc0J1aWxkZXJWaWV3LCB3
ZSB3YW50IHRvIHNob3cgYWxsIHJvd3MgdGhlIHVzZXIgaXMKKyAgICAgICAgLy8gZXhwbGljaXRs
eSBsaXN0aW5nIHRlc3RzIHRvIHZpZXcuCisgICAgICAgIHJldHVybiAnJzsKICAgICB9CiAKICAg
ICB2YXIgaGVhZGVycyA9IHRhYmxlSGVhZGVycygpOwogICAgIHZhciBodG1sID0gJyc7CiAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgaGVh
ZGVyID0gaGVhZGVyc1tpXTsKLSAgICAgIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ3Rlc3QnKSB8
fCBzdGFydHNXaXRoKGhlYWRlciwgJ2J1aWxkZXInKSkgewotICAgICAgICAvLyBJZiBpc0Nyb3Nz
QnVpbGRlclZpZXcoKSBpcyB0cnVlLCB3ZSdyZSBqdXN0IHZpZXdpbmcgYSBzaW5nbGUgdGVzdAot
ICAgICAgICAvLyB3aXRoIHJlc3VsdHMgZm9yIG1hbnkgYnVpbGRlcnMsIHNvIHRoZSBmaXJzdCBj
b2x1bW4gaXMgYnVpbGRlciBuYW1lcwotICAgICAgICAvLyBpbnN0ZWFkIG9mIHRlc3QgcGF0aHMu
Ci0gICAgICAgIHZhciB0ZXN0Q2VsbENsYXNzTmFtZSA9ICd0ZXN0LWxpbmsnICsgKGlzQ3Jvc3NC
dWlsZGVyVmlldygpID8gJyBidWlsZGVyLW5hbWUnIDogJycpOwotICAgICAgICB2YXIgdGVzdENl
bGxIVE1MID0gaXNDcm9zc0J1aWxkZXJWaWV3KCkgPyB0ZXN0LmJ1aWxkZXIgOgotICAgICAgICAg
ICc8c3BhbiBjbGFzcz0ibGluayIgb25jbGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCd0ZXN0c1wn
LFwnJyArIHRlc3QudGVzdCArJ1wnKTsiPicgKyB0ZXN0LnRlc3QgKyAnPC9zcGFuPic7Ci0KLSAg
ICAgICAgaHRtbCArPSAnPHRyIGNsYXNzPSInICsKLSAgICAgICAgICAodGVzdC5tZWV0c0V4cGVj
dGF0aW9ucyA/ICcnIDogJ3dyb25nLWV4cGVjdGF0aW9ucycpICsKLSAgICAgICAgICAnIj48dGQg
Y2xhc3M9IicgKyB0ZXN0Q2VsbENsYXNzTmFtZSArICciPicgKyB0ZXN0Q2VsbEhUTUw7Ci0gICAg
ICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoaGVhZGVyLCAnYnVncycpKSB7Ci0gICAgICAgIGh0bWwg
Kz0gJzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5lcj4nICsgKHRlc3QuYnVnc0hUTUwgPyB0ZXN0
LmJ1Z3NIVE1MIDogZ2V0Q3JlYXRlQnVnSFRNTCh0ZXN0KSk7Ci0gICAgICB9IGVsc2UgaWYgKHN0
YXJ0c1dpdGgoaGVhZGVyLCAnbW9kaWZpZXJzJykpIHsKLSAgICAgICAgaHRtbCArPSAnPHRkIGNs
YXNzPW9wdGlvbnMtY29udGFpbmVyPicgKyB0ZXN0Lm1vZGlmaWVyc0hUTUw7Ci0gICAgICB9IGVs
c2UgaWYgKHN0YXJ0c1dpdGgoaGVhZGVyLCAnZXhwZWN0YXRpb25zJykpIHsKLSAgICAgICAgaHRt
bCArPSAnPHRkIGNsYXNzPW9wdGlvbnMtY29udGFpbmVyPicgKyB0ZXN0LmV4cGVjdGF0aW9uc0hU
TUw7Ci0gICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoaGVhZGVyLCAnbWlzc2luZycpKSB7Ci0g
ICAgICAgIGh0bWwgKz0gJzx0ZD4nICsgdGVzdC5taXNzaW5nOwotICAgICAgfSBlbHNlIGlmIChz
dGFydHNXaXRoKGhlYWRlciwgJ2V4dHJhJykpIHsKLSAgICAgICAgaHRtbCArPSAnPHRkPicgKyB0
ZXN0LmV4dHJhOwotICAgICAgfSBlbHNlIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ3Nsb3dlc3Qn
KSkgewotICAgICAgICBodG1sICs9ICc8dGQ+JyArICh0ZXN0LnNsb3dlc3RUaW1lID8gdGVzdC5z
bG93ZXN0VGltZSArICdzJyA6ICcnKTsKLSAgICAgIH0gZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFk
ZXIsICclIGZhaWwnKSkgewotICAgICAgICBodG1sICs9ICc8dGQ+JyArIHRlc3QucGVyY2VudEZh
aWxlZDsKLSAgICAgIH0gZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICdmbGFraW5lc3MnKSkg
ewotICAgICAgICBodG1sICs9IGdldEh0bWxGb3JUZXN0UmVzdWx0cyh0ZXN0LCBpc0Nyb3NzQnVp
bGRlclZpZXcoKSk7Ci0gICAgICB9CisgICAgICAgIHZhciBoZWFkZXIgPSBoZWFkZXJzW2ldOwor
ICAgICAgICBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICd0ZXN0JykgfHwgc3RhcnRzV2l0aChoZWFk
ZXIsICdidWlsZGVyJykpIHsKKyAgICAgICAgICAgIC8vIElmIGlzQ3Jvc3NCdWlsZGVyVmlldygp
IGlzIHRydWUsIHdlJ3JlIGp1c3Qgdmlld2luZyBhIHNpbmdsZSB0ZXN0CisgICAgICAgICAgICAv
LyB3aXRoIHJlc3VsdHMgZm9yIG1hbnkgYnVpbGRlcnMsIHNvIHRoZSBmaXJzdCBjb2x1bW4gaXMg
YnVpbGRlciBuYW1lcworICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiB0ZXN0IHBhdGhzLgorICAg
ICAgICAgICAgdmFyIHRlc3RDZWxsQ2xhc3NOYW1lID0gJ3Rlc3QtbGluaycgKyAoaXNDcm9zc0J1
aWxkZXJWaWV3KCkgPyAnIGJ1aWxkZXItbmFtZScgOiAnJyk7CisgICAgICAgICAgICB2YXIgdGVz
dENlbGxIVE1MID0gaXNDcm9zc0J1aWxkZXJWaWV3KCkgPyB0ZXN0LmJ1aWxkZXIgOiAnPHNwYW4g
Y2xhc3M9ImxpbmsiIG9uY2xpY2s9InNldFF1ZXJ5UGFyYW1ldGVyKFwndGVzdHNcJyxcJycgKyB0
ZXN0LnRlc3QgKydcJyk7Ij4nICsgdGVzdC50ZXN0ICsgJzwvc3Bhbj4nOworCisgICAgICAgICAg
ICBodG1sICs9ICc8dHIgY2xhc3M9IicgKyAodGVzdC5tZWV0c0V4cGVjdGF0aW9ucyA/ICcnIDog
J3dyb25nLWV4cGVjdGF0aW9ucycpICsgJyI+PHRkIGNsYXNzPSInICsgdGVzdENlbGxDbGFzc05h
bWUgKyAnIj4nICsgdGVzdENlbGxIVE1MOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgo
aGVhZGVyLCAnYnVncycpKQorICAgICAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPW9wdGlvbnMt
Y29udGFpbmVyPicgKyAodGVzdC5idWdzSFRNTCA/IHRlc3QuYnVnc0hUTUwgOiBnZXRDcmVhdGVC
dWdIVE1MKHRlc3QpKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICdtb2Rp
ZmllcnMnKSkKKyAgICAgICAgICAgIGh0bWwgKz0gJzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5l
cj4nICsgdGVzdC5tb2RpZmllcnNIVE1MOworICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKGhl
YWRlciwgJ2V4cGVjdGF0aW9ucycpKQorICAgICAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPW9w
dGlvbnMtY29udGFpbmVyPicgKyB0ZXN0LmV4cGVjdGF0aW9uc0hUTUw7CisgICAgICAgIGVsc2Ug
aWYgKHN0YXJ0c1dpdGgoaGVhZGVyLCAnbWlzc2luZycpKQorICAgICAgICAgICAgaHRtbCArPSAn
PHRkPicgKyB0ZXN0Lm1pc3Npbmc7CisgICAgICAgIGVsc2UgaWYgKHN0YXJ0c1dpdGgoaGVhZGVy
LCAnZXh0cmEnKSkKKyAgICAgICAgICAgIGh0bWwgKz0gJzx0ZD4nICsgdGVzdC5leHRyYTsKKyAg
ICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICdzbG93ZXN0JykpCisgICAgICAgICAg
ICBodG1sICs9ICc8dGQ+JyArICh0ZXN0LnNsb3dlc3RUaW1lID8gdGVzdC5zbG93ZXN0VGltZSAr
ICdzJyA6ICcnKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChoZWFkZXIsICclIGZhaWwn
KSkKKyAgICAgICAgICAgIGh0bWwgKz0gJzx0ZD4nICsgdGVzdC5wZXJjZW50RmFpbGVkOworICAg
ICAgICBlbHNlIGlmIChzdGFydHNXaXRoKGhlYWRlciwgJ2ZsYWtpbmVzcycpKQorICAgICAgICAg
ICAgaHRtbCArPSBnZXRIdG1sRm9yVGVzdFJlc3VsdHModGVzdCwgaXNDcm9zc0J1aWxkZXJWaWV3
KCkpOwogICAgIH0KICAgICByZXR1cm4gaHRtbDsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldFNv
cnRDb2x1bW5Gcm9tVGFibGVIZWFkZXIoaGVhZGVyVGV4dCkgeworZnVuY3Rpb24gZ2V0U29ydENv
bHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJUZXh0KQorewogICAgIHJldHVybiBoZWFkZXJUZXh0
LnNwbGl0KCcgJywgMSlbMF07Ci0gIH0KK30KIAotICBmdW5jdGlvbiBodG1sRm9yVGFibGVDb2x1
bW5IZWFkZXIoaGVhZGVyTmFtZSwgb3B0X2ZpbGxDb2xTcGFuKSB7CitmdW5jdGlvbiBodG1sRm9y
VGFibGVDb2x1bW5IZWFkZXIoaGVhZGVyTmFtZSwgb3B0X2ZpbGxDb2xTcGFuKQorewogICAgIC8v
IFVzZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgaGVhZGVyIHRpdGxlIGFzIHRoZSBzb3J0a2V5CiAg
ICAgdmFyIHRoaXNTb3J0VmFsdWUgPSBnZXRTb3J0Q29sdW1uRnJvbVRhYmxlSGVhZGVyKGhlYWRl
ck5hbWUpOwogICAgIHZhciBhcnJvd0hUTUwgPSB0aGlzU29ydFZhbHVlID09IGN1cnJlbnRTdGF0
ZS5zb3J0Q29sdW1uID8KLSAgICAgICAgJzxzcGFuIGNsYXNzPScgKyBjdXJyZW50U3RhdGUuc29y
dE9yZGVyICsgJz4nICsKLSAgICAgICAgKGN1cnJlbnRTdGF0ZS5zb3J0T3JkZXIgPT0gRk9SV0FS
RCA/ICcmdWFycjsnIDogJyZkYXJyOycgKSArCi0gICAgICAgICc8L3NwYW4+JyA6Ci0gICAgICAg
ICcnOworICAgICAgICAnPHNwYW4gY2xhc3M9JyArIGN1cnJlbnRTdGF0ZS5zb3J0T3JkZXIgKyAn
PicgKyAoY3VycmVudFN0YXRlLnNvcnRPcmRlciA9PSBGT1JXQVJEID8gJyZ1YXJyOycgOiAnJmRh
cnI7JyApICsgJzwvc3Bhbj4nIDogJyc7CiAgICAgcmV0dXJuICc8dGggc29ydFZhbHVlPScgKyB0
aGlzU29ydFZhbHVlICsKICAgICAgICAgLy8gRXh0ZW5kIGxhc3QgdGggdGhyb3VnaCBhbGwgdGhl
IHJlc3Qgb2YgdGhlIGNvbHVtbnMuCiAgICAgICAgIChvcHRfZmlsbENvbFNwYW4gPyAnIGNvbHNw
YW49MTAwMDAnIDogJycpICsKICAgICAgICAgLy8gRXh0cmEgc3BhbiBoZXJlIGlzIHNvIGZsZXgg
Ym94aW5nIGFjdHVhbGx5IGNlbnRlcnMuCiAgICAgICAgIC8vIFRoZXJlJ3MgcHJvYmFibHkgYSBi
ZXR0ZXIgd2F5IHRvIGRvIHRoaXMgd2l0aCBDU1Mgb25seSB0aG91Z2guCiAgICAgICAgICc+PGRp
diBjbGFzcz10YWJsZS1oZWFkZXItY29udGVudD48c3Bhbj48L3NwYW4+JyArIGFycm93SFRNTCAr
Ci0gICAgICAgICc8c3BhbiBjbGFzcz1oZWFkZXItdGV4dD4nICsgaGVhZGVyTmFtZSArICc8L3Nw
YW4+JyArCi0gICAgICAgIGFycm93SFRNTCArICc8L2Rpdj48L3RoPic7Ci0gIH0KKyAgICAgICAg
JzxzcGFuIGNsYXNzPWhlYWRlci10ZXh0PicgKyBoZWFkZXJOYW1lICsgJzwvc3Bhbj4nICsgYXJy
b3dIVE1MICsgJzwvZGl2PjwvdGg+JzsKK30KIAotICBmdW5jdGlvbiBnZXRIVE1MRm9yVGVzdFRh
YmxlKHJvd3NIVE1MLCBvcHRfZXhjbHVkZUhlYWRlcnMpIHsKK2Z1bmN0aW9uIGdldEhUTUxGb3JU
ZXN0VGFibGUocm93c0hUTUwsIG9wdF9leGNsdWRlSGVhZGVycykKK3sKICAgICB2YXIgaHRtbCA9
ICc8dGFibGUgY2xhc3M9dGVzdC10YWJsZT4nOwogICAgIGlmICghb3B0X2V4Y2x1ZGVIZWFkZXJz
KSB7Ci0gICAgICBodG1sICs9ICc8dGhlYWQ+PHRyPic7Ci0gICAgICB2YXIgaGVhZGVycyA9IHRh
YmxlSGVhZGVycygpOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIGh0bWwgKz0gaHRtbEZvclRhYmxlQ29sdW1uSGVhZGVyKGhlYWRlcnNb
aV0sIGkgPT0gaGVhZGVycy5sZW5ndGggLSAxKTsKLSAgICAgIH0KLSAgICAgIGh0bWwgKz0gJzwv
dHI+PC90aGVhZD4nOworICAgICAgICBodG1sICs9ICc8dGhlYWQ+PHRyPic7CisgICAgICAgIHZh
ciBoZWFkZXJzID0gdGFibGVIZWFkZXJzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aGVhZGVycy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGh0bWwgKz0gaHRtbEZvclRhYmxlQ29s
dW1uSGVhZGVyKGhlYWRlcnNbaV0sIGkgPT0gaGVhZGVycy5sZW5ndGggLSAxKTsKKyAgICAgICAg
aHRtbCArPSAnPC90cj48L3RoZWFkPic7CiAgICAgfQogICAgIHJldHVybiBodG1sICsgJzx0Ym9k
eT4nICsgcm93c0hUTUwgKyAnPC90Ym9keT48L3RhYmxlPic7Ci0gIH0KK30KIAotICBmdW5jdGlv
biBhcHBlbmRIVE1MKGh0bWwpIHsKK2Z1bmN0aW9uIGFwcGVuZEhUTUwoaHRtbCkKK3sKICAgICB2
YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAvLyBJbm5lckhUTUwgdG8gYSBkaXYgdGhh
dCdzIG5vdCBpbiB0aGUgZG9jdW1lbnQuIFRoaXMgaXMKICAgICAvLyB+MzAwbXMgZmFzdGVyIGlu
IFNhZmFyaSA0IGFuZCBDaHJvbWUgNCBvbiBtYWMuCkBAIC0xNjM2LDE5MiArMTU3NywxOTIgQEAg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGRpdik7CiAgICAgbG9nVGltZSgnVGltZSB0byBpbm5lckhUTUwnLCBzdGFy
dFRpbWUpOwotICB9Cit9CiAKLSAgZnVuY3Rpb24gZ2V0QWxwaGFudW1lcmljQ29tcGFyZShjb2x1
bW4sIHJldmVyc2UpIHsKK2Z1bmN0aW9uIGdldEFscGhhbnVtZXJpY0NvbXBhcmUoY29sdW1uLCBy
ZXZlcnNlKQorewogICAgIHJldHVybiBnZXRSZXZlcnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGZ1bmN0
aW9uKGEsIGIpIHsKLSAgICAgIC8vIFB1dCBudWxsIGVudHJpZXMgYXQgdGhlIGJvdHRvbQotICAg
ICAgdmFyIGEgPSBhW2NvbHVtbl0gPyBTdHJpbmcoYVtjb2x1bW5dKSA6ICd6JzsKLSAgICAgIHZh
ciBiID0gYltjb2x1bW5dID8gU3RyaW5nKGJbY29sdW1uXSkgOiAneic7Ci0KLQotICAgICAgLy8g
Rm9yIGd0ZXN0IHRlc3RzLCB3ZSBtYWtlIHRoZW0gYXMgZmxha3kvZmFpbGluZyBieSBwcmVmaXhp
bmcgdGhlCi0gICAgICAvLyB0ZXN0IG5hbWUgd2l0aCBGTEFLWV8gb3IgRkFJTFNfLCByZXN1bHRp
bmcgaW4gdGhyZWUgcG9zc2libGUgZW50cmllcwotICAgICAgLy8gZm9yIHRoZSB0ZXN0LgotICAg
ICAgLy8gUGxhY2UgZmxha3kvZmFpbHMgdGVzdHMgbmV4dCB0byB0aGVpciBub24tZmxha3kgY291
bnRlcnBhcnRzLgotICAgICAgLy8gVE9ETyhvamFuKTogTWVyZ2UgdGhlIG5vbi1mbGFreS9ub24t
ZmFpbHMgdGVzdCB3aXRoIHRoZSBmbGFreS9mYWlscwotICAgICAgLy8gb25lIHNvIHRoZXJlJ3Mg
b25seSBhIHNpbmdsZSBlbnRyeSBwZXIgdGVzdC4KLSAgICAgIGlmICghaXNMYXlvdXRUZXN0UmVz
dWx0cygpKSB7Ci0gICAgICAgIGEgPSBhLnJlcGxhY2UoR1RFU1RfRkxBS1lfTUFSS0VSLCAnLicp
OwotICAgICAgICBiID0gYi5yZXBsYWNlKEdURVNUX0ZMQUtZX01BUktFUiwgJy4nKTsKLSAgICAg
ICAgYSA9IGEucmVwbGFjZShHVEVTVF9GQUlMU19NQVJLRVIsICcuJyk7Ci0gICAgICAgIGIgPSBi
LnJlcGxhY2UoR1RFU1RfRkFJTFNfTUFSS0VSLCAnLicpOwotICAgICAgfQotCi0gICAgICBpZiAo
YSA8IGIpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIGVsc2UgaWYgKGEgPT0gYikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiAxOworICAgICAgICAvLyBQ
dXQgbnVsbCBlbnRyaWVzIGF0IHRoZSBib3R0b20KKyAgICAgICAgdmFyIGEgPSBhW2NvbHVtbl0g
PyBTdHJpbmcoYVtjb2x1bW5dKSA6ICd6JzsKKyAgICAgICAgdmFyIGIgPSBiW2NvbHVtbl0gPyBT
dHJpbmcoYltjb2x1bW5dKSA6ICd6JzsKKworICAgICAgICAvLyBGb3IgZ3Rlc3QgdGVzdHMsIHdl
IG1ha2UgdGhlbSBhcyBmbGFreS9mYWlsaW5nIGJ5IHByZWZpeGluZyB0aGUKKyAgICAgICAgLy8g
dGVzdCBuYW1lIHdpdGggRkxBS1lfIG9yIEZBSUxTXywgcmVzdWx0aW5nIGluIHRocmVlIHBvc3Np
YmxlIGVudHJpZXMKKyAgICAgICAgLy8gZm9yIHRoZSB0ZXN0LgorICAgICAgICAvLyBQbGFjZSBm
bGFreS9mYWlscyB0ZXN0cyBuZXh0IHRvIHRoZWlyIG5vbi1mbGFreSBjb3VudGVycGFydHMuCisg
ICAgICAgIC8vIFRPRE8ob2phbik6IE1lcmdlIHRoZSBub24tZmxha3kvbm9uLWZhaWxzIHRlc3Qg
d2l0aCB0aGUgZmxha3kvZmFpbHMKKyAgICAgICAgLy8gb25lIHNvIHRoZXJlJ3Mgb25seSBhIHNp
bmdsZSBlbnRyeSBwZXIgdGVzdC4KKyAgICAgICAgaWYgKCFpc0xheW91dFRlc3RSZXN1bHRzKCkp
IHsKKyAgICAgICAgICAgIGEgPSBhLnJlcGxhY2UoR1RFU1RfRkxBS1lfTUFSS0VSLCAnLicpOwor
ICAgICAgICAgICAgYiA9IGIucmVwbGFjZShHVEVTVF9GTEFLWV9NQVJLRVIsICcuJyk7CisgICAg
ICAgICAgICBhID0gYS5yZXBsYWNlKEdURVNUX0ZBSUxTX01BUktFUiwgJy4nKTsKKyAgICAgICAg
ICAgIGIgPSBiLnJlcGxhY2UoR1RFU1RfRkFJTFNfTUFSS0VSLCAnLicpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGEgPCBiKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBlbHNl
IGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmV0dXJuIDE7CiAgICAgfSwgcmV2ZXJzZSk7Ci0gIH0KK30KIAotICBmdW5jdGlvbiBn
ZXROdW1lcmljU29ydChjb2x1bW4sIHJldmVyc2UpIHsKK2Z1bmN0aW9uIGdldE51bWVyaWNTb3J0
KGNvbHVtbiwgcmV2ZXJzZSkKK3sKICAgICByZXR1cm4gZ2V0UmV2ZXJzaWJsZUNvbXBhcmVGdW5j
dGlvbihmdW5jdGlvbihhLCBiKSB7Ci0gICAgICBhID0gcGFyc2VGbG9hdChhW2NvbHVtbl0pOwot
ICAgICAgYiA9IHBhcnNlRmxvYXQoYltjb2x1bW5dKTsKLSAgICAgIHJldHVybiBhIC0gYjsKKyAg
ICAgICAgYSA9IHBhcnNlRmxvYXQoYVtjb2x1bW5dKTsKKyAgICAgICAgYiA9IHBhcnNlRmxvYXQo
Yltjb2x1bW5dKTsKKyAgICAgICAgcmV0dXJuIGEgLSBiOwogICAgIH0sIHJldmVyc2UpOwotICB9
Cit9CiAKLSAgZnVuY3Rpb24gZ2V0UmV2ZXJzaWJsZUNvbXBhcmVGdW5jdGlvbihjb21wYXJlLCBy
ZXZlcnNlKSB7CitmdW5jdGlvbiBnZXRSZXZlcnNpYmxlQ29tcGFyZUZ1bmN0aW9uKGNvbXBhcmUs
IHJldmVyc2UpCit7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgIHJldHVybiBj
b21wYXJlKHJldmVyc2UgPyBiIDogYSwgcmV2ZXJzZSA/IGEgOiBiKTsKLSAgICB9Ci0gIH0KKyAg
ICAgICAgcmV0dXJuIGNvbXBhcmUocmV2ZXJzZSA/IGIgOiBhLCByZXZlcnNlID8gYSA6IGIpOwor
ICAgIH07Cit9CiAKLSAgZnVuY3Rpb24gY2hhbmdlU29ydChlKSB7CitmdW5jdGlvbiBjaGFuZ2VT
b3J0KGUpCit7CiAgICAgdmFyIHRhcmdldCA9IGUuY3VycmVudFRhcmdldDsKICAgICBlLnByZXZl
bnREZWZhdWx0KCk7CiAKICAgICB2YXIgc29ydFZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgn
c29ydFZhbHVlJyk7Ci0gICAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZSAhPSAnVEFC
TEUnKSB7Ci0gICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTsKLSAgICB9CisgICAgd2hp
bGUgKHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZSAhPSAnVEFCTEUnKQorICAgICAgICB0YXJnZXQg
PSB0YXJnZXQucGFyZW50Tm9kZTsKIAogICAgIHZhciBzb3J0ID0gJ3NvcnRDb2x1bW4nOwogICAg
IHZhciBvcmRlcktleSA9ICdzb3J0T3JkZXInOwogICAgIGlmIChzb3J0VmFsdWUgPT0gY3VycmVu
dFN0YXRlW3NvcnRdICYmIGN1cnJlbnRTdGF0ZVtvcmRlcktleV0gPT0gRk9SV0FSRCkKLSAgICAg
IG9yZGVyID0gQkFDS1dBUkQ7CisgICAgICAgIG9yZGVyID0gQkFDS1dBUkQ7CiAgICAgZWxzZQot
ICAgICAgb3JkZXIgPSBGT1JXQVJEOworICAgICAgICBvcmRlciA9IEZPUldBUkQ7CiAKICAgICBz
ZXRRdWVyeVBhcmFtZXRlcihzb3J0LCBzb3J0VmFsdWUsIG9yZGVyS2V5LCBvcmRlcik7Ci0gIH0K
K30KIAotICBmdW5jdGlvbiBzb3J0VGVzdHModGVzdHMsIGNvbHVtbiwgb3JkZXIpIHsKK2Z1bmN0
aW9uIHNvcnRUZXN0cyh0ZXN0cywgY29sdW1uLCBvcmRlcikKK3sKICAgICB2YXIgcmVzdWx0c1By
b3BlcnR5LCBzb3J0RnVuY3Rpb25HZXR0ZXI7CiAgICAgaWYgKGNvbHVtbiA9PSAnZmxha2luZXNz
JykgewotICAgICAgc29ydEZ1bmN0aW9uR2V0dGVyID0gZ2V0TnVtZXJpY1NvcnQ7Ci0gICAgICBy
ZXN1bHRzUHJvcGVydHkgPSAnZmxpcHMnOworICAgICAgICBzb3J0RnVuY3Rpb25HZXR0ZXIgPSBn
ZXROdW1lcmljU29ydDsKKyAgICAgICAgcmVzdWx0c1Byb3BlcnR5ID0gJ2ZsaXBzJzsKICAgICB9
IGVsc2UgaWYgKGNvbHVtbiA9PSAnc2xvd2VzdCcpIHsKLSAgICAgIHNvcnRGdW5jdGlvbkdldHRl
ciA9IGdldE51bWVyaWNTb3J0OwotICAgICAgcmVzdWx0c1Byb3BlcnR5ID0gJ3Nsb3dlc3RUaW1l
JzsKKyAgICAgICAgc29ydEZ1bmN0aW9uR2V0dGVyID0gZ2V0TnVtZXJpY1NvcnQ7CisgICAgICAg
IHJlc3VsdHNQcm9wZXJ0eSA9ICdzbG93ZXN0VGltZSc7CiAgICAgfSBlbHNlIGlmIChjb2x1bW4g
PT0gJyUnKSB7Ci0gICAgICBzb3J0RnVuY3Rpb25HZXR0ZXIgPSBnZXROdW1lcmljU29ydDsKLSAg
ICAgIHJlc3VsdHNQcm9wZXJ0eSA9ICdwZXJjZW50RmFpbGVkJzsKKyAgICAgICAgc29ydEZ1bmN0
aW9uR2V0dGVyID0gZ2V0TnVtZXJpY1NvcnQ7CisgICAgICAgIHJlc3VsdHNQcm9wZXJ0eSA9ICdw
ZXJjZW50RmFpbGVkJzsKICAgICB9IGVsc2UgewotICAgICAgc29ydEZ1bmN0aW9uR2V0dGVyID0g
Z2V0QWxwaGFudW1lcmljQ29tcGFyZTsKLSAgICAgIHJlc3VsdHNQcm9wZXJ0eSA9IGNvbHVtbjsK
KyAgICAgICAgc29ydEZ1bmN0aW9uR2V0dGVyID0gZ2V0QWxwaGFudW1lcmljQ29tcGFyZTsKKyAg
ICAgICAgcmVzdWx0c1Byb3BlcnR5ID0gY29sdW1uOwogICAgIH0KIAogICAgIHRlc3RzLnNvcnQo
c29ydEZ1bmN0aW9uR2V0dGVyKHJlc3VsdHNQcm9wZXJ0eSwgb3JkZXIgPT0gQkFDS1dBUkQpKTsK
LSAgfQotCi0gIC8qKgotICAgKiBTb3J0cyBhIHNwYWNlIHNlcGFyYXRlZCBleHBlY3RhdGlvbnMg
c3RyaW5nIGluIGFscGhhbnVtZXJpYyBvcmRlci4KLSAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciBU
aGUgZXhwZWN0YXRpb25zIHN0cmluZy4KLSAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc29ydGVk
IHN0cmluZy4KLSAgICovCi0gIGZ1bmN0aW9uIHNvcnRFeHBlY3RhdGlvbnNTdHJpbmcoc3RyKSB7
Cit9CisKKy8qKgorICogU29ydHMgYSBzcGFjZSBzZXBhcmF0ZWQgZXhwZWN0YXRpb25zIHN0cmlu
ZyBpbiBhbHBoYW51bWVyaWMgb3JkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBleHBl
Y3RhdGlvbnMgc3RyaW5nLgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgc29ydGVkIHN0cmluZy4K
KyAqLworZnVuY3Rpb24gc29ydEV4cGVjdGF0aW9uc1N0cmluZyhzdHIpCit7CiAgICAgcmV0dXJu
IHN0ci5zcGxpdCgnICcpLnNvcnQoKS5qb2luKCcgJyk7Ci0gIH0KK30KIAotICBmdW5jdGlvbiBh
ZGRVcGRhdGUodGVzdHNOZWVkaW5nVXBkYXRlLCB0ZXN0LCBidWlsZGVyTmFtZSwgbWlzc2luZywg
ZXh0cmEpIHsKK2Z1bmN0aW9uIGFkZFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIHRlc3QsIGJ1
aWxkZXJOYW1lLCBtaXNzaW5nLCBleHRyYSkKK3sKICAgICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0
ZVt0ZXN0XSkKLSAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XSA9IHt9OworICAgICAgICB0
ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF0gPSB7fTsKIAogICAgIHZhciBidWlsZEluZm8gPSBnZXRQ
bGF0Zm9ybUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSk7CiAgICAgdmFyIGJ1aWxkZXIgPSBidWls
ZEluZm8ucGxhdGZvcm0gKyAnICcgKyBidWlsZEluZm8uYnVpbGRUeXBlOwogICAgIGlmICghdGVz
dHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJdKQotICAgICAgdGVzdHNOZWVkaW5nVXBkYXRl
W3Rlc3RdW2J1aWxkZXJdID0ge307CisgICAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVti
dWlsZGVyXSA9IHt9OwogCiAgICAgaWYgKG1pc3NpbmcpCi0gICAgICB0ZXN0c05lZWRpbmdVcGRh
dGVbdGVzdF1bYnVpbGRlcl0ubWlzc2luZyA9Ci0gICAgICAgICAgc29ydEV4cGVjdGF0aW9uc1N0
cmluZyhtaXNzaW5nKTsKKyAgICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJd
Lm1pc3NpbmcgPSBzb3J0RXhwZWN0YXRpb25zU3RyaW5nKG1pc3NpbmcpOwogCiAgICAgaWYgKGV4
dHJhKQotICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxkZXJdLmV4dHJhID0gc29y
dEV4cGVjdGF0aW9uc1N0cmluZyhleHRyYSk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBGcm9tIGEg
c3RyaW5nIG9mIG1vZGlmaWVycywgcmV0dXJucyBhIHN0cmluZyBvZiBtb2RpZmllcnMgdGhhdAot
ICAgKiBhcmUgZm9yIHJlYWwgcmVzdWx0IGNoYW5nZXMsIGxpa2UgU0xPVywgYW5kIGV4Y2x1ZGVz
IG1vZGlmaWVycwotICAgKiB0aGF0IHNwZWNpZmljeSB0aGluZ3MgbGlrZSBwbGF0Zm9ybSwgYnVp
bGRfdHlwZSwgYnVnLgotICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kaWZpZXJTdHJpbmcgU3RyaW5n
IGNvbnRhaW5pbmcgYWxsIG1vZGlmaWVycy4KLSAgICogQHJldHVybiB7c3RyaW5nfSBTdHJpbmcg
Y29udGFpbmluZyBvbmx5IG1vZGlmaWVycyB0aGF0IGVmZmVjdAotICAgKiAgICAgdGhlIHJlc3Vs
dHMuCi0gICAqLwotICBmdW5jdGlvbiBnZXRSZWFsTW9kaWZpZXJzKG1vZGlmaWVyU3RyaW5nKSB7
CisgICAgICAgIHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXS5leHRyYSA9IHNvcnRF
eHBlY3RhdGlvbnNTdHJpbmcoZXh0cmEpOworfQorCisKKy8qKgorICogRnJvbSBhIHN0cmluZyBv
ZiBtb2RpZmllcnMsIHJldHVybnMgYSBzdHJpbmcgb2YgbW9kaWZpZXJzIHRoYXQKKyAqIGFyZSBm
b3IgcmVhbCByZXN1bHQgY2hhbmdlcywgbGlrZSBTTE9XLCBhbmQgZXhjbHVkZXMgbW9kaWZpZXJz
CisgKiB0aGF0IHNwZWNpZmljeSB0aGluZ3MgbGlrZSBwbGF0Zm9ybSwgYnVpbGRfdHlwZSwgYnVn
LgorICogQHBhcmFtIHtzdHJpbmd9IG1vZGlmaWVyU3RyaW5nIFN0cmluZyBjb250YWluaW5nIGFs
bCBtb2RpZmllcnMuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5nIG9ubHkg
bW9kaWZpZXJzIHRoYXQgZWZmZWN0CisgKiAgICAgdGhlIHJlc3VsdHMuCisgKi8KK2Z1bmN0aW9u
IGdldFJlYWxNb2RpZmllcnMobW9kaWZpZXJTdHJpbmcpCit7CiAgICAgdmFyIHJlYWxNb2RpZmll
cnMgPSBbXTsKICAgICB2YXIgbW9kaWZpZXJzID0gbW9kaWZpZXJTdHJpbmcuc3BsaXQoJyAnKTs7
CiAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtb2RpZmllcnMubGVuZ3RoOyBqKyspIHsKLSAgICAg
IHZhciBtb2RpZmllciA9IG1vZGlmaWVyc1tqXTsKLSAgICAgIGlmICghKG1vZGlmaWVyIGluIEJV
SUxEX1RZUEVTKSAmJgotICAgICAgICAgICEobW9kaWZpZXIgaW4gUExBVEZPUk1TKSAmJgotICAg
ICAgICAgICFzdGFydHNXaXRoKG1vZGlmaWVyLCAnQlVHJykpIHsKLSAgICAgICAgcmVhbE1vZGlm
aWVycy5wdXNoKG1vZGlmaWVyKTsKLSAgICAgIH0KKyAgICAgICAgdmFyIG1vZGlmaWVyID0gbW9k
aWZpZXJzW2pdOworICAgICAgICBpZiAoIShtb2RpZmllciBpbiBCVUlMRF9UWVBFUykgJiYgISht
b2RpZmllciBpbiBQTEFURk9STVMpICYmICFzdGFydHNXaXRoKG1vZGlmaWVyLCAnQlVHJykpCisg
ICAgICAgICAgICByZWFsTW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpOwogICAgIH0KICAgICByZXR1
cm4gcmVhbE1vZGlmaWVycy5qb2luKCcgJyk7Ci0gIH0KK30KIAotICBmdW5jdGlvbiBnZW5lcmF0
ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKSB7CitmdW5jdGlvbiBnZW5lcmF0ZVBhZ2VGb3JF
eHBlY3RhdGlvbnNVcGRhdGUoKQorewogICAgIC8vIEFsd2F5cyBzaG93IGFsbCBydW5zIHdoZW4g
YXV0by11cGRhdGluZyBleHBlY3RhdGlvbnMuCiAgICAgaWYgKCFjdXJyZW50U3RhdGUuc2hvd0Fs
bFJ1bnMpCi0gICAgICBzZXRRdWVyeVBhcmFtZXRlcignc2hvd0FsbFJ1bnMnLCB0cnVlKTsKKyAg
ICAgICAgc2V0UXVlcnlQYXJhbWV0ZXIoJ3Nob3dBbGxSdW5zJywgdHJ1ZSk7CiAKICAgICBwcm9j
ZXNzVGVzdFJ1bnNGb3JBbGxCdWlsZGVycygpOwogICAgIHZhciB0ZXN0c05lZWRpbmdVcGRhdGUg
PSB7fTsKICAgICBmb3IgKHZhciB0ZXN0IGluIHRlc3RUb1Jlc3VsdHNNYXApIHsKLSAgICAgIHZh
ciByZXN1bHRzID0gdGVzdFRvUmVzdWx0c01hcFt0ZXN0XTsKLSAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgdGhpc1Jlc3VsdCA9IHJl
c3VsdHNbaV07Ci0gICAgICAgIGlmICghdGhpc1Jlc3VsdC5taXNzaW5nICYmICF0aGlzUmVzdWx0
LmV4dHJhKQotICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2YXIgcmVzdWx0cyA9IHRlc3RU
b1Jlc3VsdHNNYXBbdGVzdF07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHRoaXNSZXN1bHQgPSByZXN1bHRzW2ldOwor
ICAgICAgICAgICAgaWYgKCF0aGlzUmVzdWx0Lm1pc3NpbmcgJiYgIXRoaXNSZXN1bHQuZXh0cmEp
CisgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgdmFyIGFsbFBhc3Nlc09yTm9E
YXRhcyA9IHRoaXNSZXN1bHQucmF3UmVzdWx0cy5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKLSAgICAg
ICAgICByZXR1cm4geFsxXSAhPSAiUCIgJiYgeFsxXSAhPSAiTiI7Ci0gICAgICAgIH0pLmxlbmd0
aCA9PSAwOworICAgICAgICAgICAgdmFyIGFsbFBhc3Nlc09yTm9EYXRhcyA9IHRoaXNSZXN1bHQu
cmF3UmVzdWx0cy5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHhbMV0gIT0gIlAiICYmIHhb
MV0gIT0gIk4iOyB9KS5sZW5ndGggPT0gMDsKIAogICAgICAgICBpZiAoYWxsUGFzc2VzT3JOb0Rh
dGFzKQotICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgYWRkVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwgdGVzdCwgdGhpc1Jlc3VsdC5idWlsZGVy
LAotICAgICAgICAgICAgdGhpc1Jlc3VsdC5taXNzaW5nLCB0aGlzUmVzdWx0LmV4dHJhKTsKLSAg
ICAgIH0KKyAgICAgICAgYWRkVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwgdGVzdCwgdGhpc1Jl
c3VsdC5idWlsZGVyLCB0aGlzUmVzdWx0Lm1pc3NpbmcsIHRoaXNSZXN1bHQuZXh0cmEpOwogICAg
IH0KK30KIAotICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpIHsKLSAgICAgIHZhciB0
ZXN0cyA9IHBlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlc1tidWlsZGVyXQot
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAv
LyBBbnl0aGluZyBleHRyYSBpbiB0aGlzIGNhc2UgaXMgd2hhdCBpcyBsaXN0ZWQgaW4gZXhwZWN0
YXRpb25zCi0gICAgICAgIC8vIHBsdXMgbW9kaWZpZXJzIG90aGVyIHRoYW4gYnVnLCBwbGF0Zm9y
bSwgYnVpbGQgdHlwZS4KLSAgICAgICAgdmFyIHJlYWxNb2RpZmllcnMgPSBnZXRSZWFsTW9kaWZp
ZXJzKHRlc3RzW2ldLm1vZGlmaWVycyk7Ci0gICAgICAgIHZhciBleHRyYXMgPSB0ZXN0c1tpXS5l
eHBlY3RhdGlvbnM7Ci0gICAgICAgIGV4dHJhcyArPSByZWFsTW9kaWZpZXJzID8gJyAnICsgcmVh
bE1vZGlmaWVycyA6ICcnOwotCi0gICAgICAgIGFkZFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUs
IHRlc3RzW2ldLnRlc3QsIGJ1aWxkZXIsCi0gICAgICAgICAgICBudWxsLCBleHRyYXMpOwotICAg
ICAgfQotICAgIH0KK2ZvciAodmFyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpIHsKKyAgdmFyIHRlc3Rz
ID0gcGVyQnVpbGRlcldpdGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzW2J1aWxkZXJdCisgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIC8vIEFueXRoaW5n
IGV4dHJhIGluIHRoaXMgY2FzZSBpcyB3aGF0IGlzIGxpc3RlZCBpbiBleHBlY3RhdGlvbnMKKyAg
ICAgIC8vIHBsdXMgbW9kaWZpZXJzIG90aGVyIHRoYW4gYnVnLCBwbGF0Zm9ybSwgYnVpbGQgdHlw
ZS4KKyAgICAgIHZhciByZWFsTW9kaWZpZXJzID0gZ2V0UmVhbE1vZGlmaWVycyh0ZXN0c1tpXS5t
b2RpZmllcnMpOworICAgICAgdmFyIGV4dHJhcyA9IHRlc3RzW2ldLmV4cGVjdGF0aW9uczsKKyAg
ICAgIGV4dHJhcyArPSByZWFsTW9kaWZpZXJzID8gJyAnICsgcmVhbE1vZGlmaWVycyA6ICcnOwog
Ci0gICAgLy8gR2V0IHRoZSBrZXlzIGluIGFscGhhYmV0aWNhbCBvcmRlciwgc28gaXQgaXMgZWFz
eSB0byBwcm9jZXNzIGdyb3VwcwotICAgIC8vIG9mIHRlc3RzLgotICAgIHZhciBrZXlzID0gZ2V0
S2V5cyh0ZXN0c05lZWRpbmdVcGRhdGUpLnNvcnQoKTsKLSAgICBzaG93VXBkYXRlSW5mb0ZvclRl
c3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsKKyAgICAgIGFkZFVwZGF0ZSh0ZXN0c05lZWRp
bmdVcGRhdGUsIHRlc3RzW2ldLnRlc3QsIGJ1aWxkZXIsIG51bGwsIGV4dHJhcyk7CiAgIH0KK30K
IAotICAvKioKLSAgICogU2hvdyB0aGUgdGVzdCByZXN1bHRzIGFuZCB0aGUganNvbiBmb3IgZGlm
ZmVyaW5nIGV4cGVjdGF0aW9ucywgYW5kCi0gICAqIGFsbG93IHRoZSB1c2VyIHRvIGluY2x1ZGUg
b3IgZXhjbHVkZSB0aGlzIHVwZGF0ZS4KLSAgICoKLSAgICogQHBhcmFtIHtPYmplY3R9IHRlc3Rz
TmVlZGluZ1VwZGF0ZSBUZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCi0gICAqIEBwYXJhbSB7QXJy
YXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3Qu
Ci0gICAqLwotICBmdW5jdGlvbiBzaG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBk
YXRlLCBrZXlzKSB7CisvLyBHZXQgdGhlIGtleXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBzbyBp
dCBpcyBlYXN5IHRvIHByb2Nlc3MgZ3JvdXBzCisvLyBvZiB0ZXN0cy4KK3ZhciBrZXlzID0gZ2V0
S2V5cyh0ZXN0c05lZWRpbmdVcGRhdGUpLnNvcnQoKTsKKyAgICBzaG93VXBkYXRlSW5mb0ZvclRl
c3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKTsKK30KKworLyoqCisgKiBTaG93IHRoZSB0ZXN0
IHJlc3VsdHMgYW5kIHRoZSBqc29uIGZvciBkaWZmZXJpbmcgZXhwZWN0YXRpb25zLCBhbmQKKyAq
IGFsbG93IHRoZSB1c2VyIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB0aGlzIHVwZGF0ZS4KKyAqCisg
KiBAcGFyYW0ge09iamVjdH0gdGVzdHNOZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRh
dGluZy4KKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0
TmVlZGluZ1VwZGF0ZSBvYmplY3QuCisgKi8KK2Z1bmN0aW9uIHNob3dVcGRhdGVJbmZvRm9yVGVz
dCh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCit7CiAgICAgdmFyIHRlc3QgPSBrZXlzW2N1cnJl
bnRTdGF0ZS51cGRhdGVJbmRleF07CiAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPGI+
JyArIHRlc3QgKyAnPC9iPicgKwogICAgICAgICAnPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQiPicg
KyAoY3VycmVudFN0YXRlLnVwZGF0ZUluZGV4ICsgMSkgKyAnIG9mICcgKwpAQCAtMTgzMSw5ICsx
NzcyLDcgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAgICB2YXIgaW5jbHVkZUJ0biA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgaW5jbHVkZUJ0bi50eXBlID0gJ2J1dHRvbic7CiAgICAg
aW5jbHVkZUJ0bi52YWx1ZSA9ICdpbmNsdWRlIHNlbGVjdGVkJzsKLSAgICBpbmNsdWRlQnRuLmFk
ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywKLSAgICAgICAgcGFydGlhbChoYW5kbGVVcGRhdGUsIHRl
c3RzTmVlZGluZ1VwZGF0ZSwga2V5cyksCi0gICAgICAgIGZhbHNlKTsKKyAgICBpbmNsdWRlQnRu
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcGFydGlhbChoYW5kbGVVcGRhdGUsIHRlc3RzTmVl
ZGluZ1VwZGF0ZSwga2V5cyksIGZhbHNlKTsKICAgICBidXR0b25SZWdpb24uYXBwZW5kQ2hpbGQo
aW5jbHVkZUJ0bik7CiAKICAgICB2YXIgcHJldmlvdXNCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpbnB1dCcpOwpAQCAtMTg0MSw4ICsxNzgwLDcgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICBwcmV2
aW91c0J0bi52YWx1ZSA9ICdwcmV2aW91cyc7CiAgICAgcHJldmlvdXNCdG4uYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLAogICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICBzZXRVcGRhdGVJ
bmRleChjdXJyZW50U3RhdGUudXBkYXRlSW5kZXggLSAxLAotICAgICAgICAgICAgICB0ZXN0c05l
ZWRpbmdVcGRhdGUsIGtleXMpOworICAgICAgICAgIHNldFVwZGF0ZUluZGV4KGN1cnJlbnRTdGF0
ZS51cGRhdGVJbmRleCAtIDEsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyk7CiAgICAgICAgIH0s
CiAgICAgICAgIGZhbHNlKTsKICAgICBidXR0b25SZWdpb24uYXBwZW5kQ2hpbGQocHJldmlvdXNC
dG4pOwpAQCAtMTg1MCw5ICsxNzg4LDcgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICB2YXIgbmV4dEJ0biA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgbmV4dEJ0bi50eXBlID0gJ2J1
dHRvbic7CiAgICAgbmV4dEJ0bi52YWx1ZSA9ICduZXh0JzsKLSAgICBuZXh0QnRuLmFkZEV2ZW50
TGlzdGVuZXIoJ2NsaWNrJywKLSAgICAgICAgcGFydGlhbChuZXh0VXBkYXRlLCB0ZXN0c05lZWRp
bmdVcGRhdGUsIGtleXMpLAotICAgICAgICBmYWxzZSk7CisgICAgbmV4dEJ0bi5hZGRFdmVudExp
c3RlbmVyKCdjbGljaycsIHBhcnRpYWwobmV4dFVwZGF0ZSwgdGVzdHNOZWVkaW5nVXBkYXRlLCBr
ZXlzKSwgZmFsc2UpOwogICAgIGJ1dHRvblJlZ2lvbi5hcHBlbmRDaGlsZChuZXh0QnRuKTsKIAog
ICAgIHZhciBkb25lQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKQEAgLTE4
NjYsMTYgKzE4MDIsMTUgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICB2YXIgdXBkYXRlcyA9IHRlc3RzTmVl
ZGluZ1VwZGF0ZVt0ZXN0XTsKICAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOwogICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gdXBkYXRlcykgewotICAgICAg
Ly8gQ3JlYXRlIGEgY2hlY2tib3ggZm9yIGVhY2ggYnVpbGRlci4KLSAgICAgIHZhciBjaGVja2Jv
eFJlZ2lvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgdmFyIGNoZWNr
Ym94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKLSAgICAgIGNoZWNrYm94LnR5
cGUgPSAnY2hlY2tib3gnOwotICAgICAgY2hlY2tib3guaWQgPSBidWlsZGVyOwotICAgICAgY2hl
Y2tib3guY2hlY2tlZCA9IHRydWU7Ci0gICAgICBjaGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChj
aGVja2JveCk7Ci0gICAgICBjaGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShidWlsZGVyICsgJyA6ICcgKwotICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVw
ZGF0ZXNbYnVpbGRlcl0pKSk7Ci0gICAgICBjaGVja2JveGVzLmFwcGVuZENoaWxkKGNoZWNrYm94
UmVnaW9uKTsKKyAgICAgICAgLy8gQ3JlYXRlIGEgY2hlY2tib3ggZm9yIGVhY2ggYnVpbGRlci4K
KyAgICAgICAgdmFyIGNoZWNrYm94UmVnaW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisgICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0
Jyk7CisgICAgICAgIGNoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gnOworICAgICAgICBjaGVja2Jv
eC5pZCA9IGJ1aWxkZXI7CisgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0cnVlOworICAgICAg
ICBjaGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChjaGVja2JveCk7CisgICAgICAgIGNoZWNrYm94
UmVnaW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGJ1aWxkZXIgKyAnIDog
JyArIEpTT04uc3RyaW5naWZ5KHVwZGF0ZXNbYnVpbGRlcl0pKSk7CisgICAgICAgIGNoZWNrYm94
ZXMuYXBwZW5kQ2hpbGQoY2hlY2tib3hSZWdpb24pOwogICAgIH0KICAgICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGNoZWNrYm94ZXMpOwogCkBAIC0xODgzLDE0ICsxODE4LDE1IEBAIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgICAgZGl2LmlubmVySFRNTCA9IGdldEhUTUxGb3JJbmRpdmlkdWxUZXN0T25BbGxC
dWlsZGVycyh0ZXN0KTsKICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CiAgICAg
YXBwZW5kRXhwZWN0YXRpb25zKCk7Ci0gIH0KK30KIAogCi0gIC8qKgotICAgKiBXaGVuIHRoZSB1
c2VyIGhhcyBmaW5pc2hlZCBzZWxlY3RpbmcgZXhwZWN0YXRpb25zIHRvIHVwZGF0ZSwgcHJvdmlk
ZSB0aGVtCi0gICAqIHdpdGgganNvbiB0byBjb3B5IG92ZXIuCi0gICAqLwotICBmdW5jdGlvbiBm
aW5pc2hVcGRhdGUoKSB7CisvKioKKyAqIFdoZW4gdGhlIHVzZXIgaGFzIGZpbmlzaGVkIHNlbGVj
dGluZyBleHBlY3RhdGlvbnMgdG8gdXBkYXRlLCBwcm92aWRlIHRoZW0KKyAqIHdpdGgganNvbiB0
byBjb3B5IG92ZXIuCisgKi8KK2Z1bmN0aW9uIGZpbmlzaFVwZGF0ZSgpCit7CiAgICAgZG9jdW1l
bnQuYm9keS5pbm5lckhUTUwgPSAnVGhlIG5leHQgc3RlcCBpcyB0byBjb3B5IHRoZSBvdXRwdXQg
YmVsb3cgJyArCiAgICAgICAgICdpbnRvIGEgbG9jYWwgZmlsZSBhbmQgc2F2ZSBpdC4gIFRoZW4s
IHJ1bjxicj48Y29kZT5weXRob24gJyArCiAgICAgICAgICdzcmMvd2Via2l0L3Rvb2xzL2xheW91
dF90ZXN0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0JyArCkBAIC0xOTAw
LDExMyArMTgzNiwxMDkgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29u
ZmlybWVkVGVzdHMpICsgJzwvdGV4dGFyZWE+JzsKICAgICByZXN1bHRzLmZvY3VzKCk7CiAgICAg
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ1NlbGVjdEFsbCcpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhh
bmRsZSB1c2VyIGNsaWNrIG9uICJpbmNsdWRlIHNlbGVjdGVkIiBidXR0b24uCi0gICAqIEluY2x1
ZGVzIHRoZSB0ZXN0cyB0aGF0IGFyZSBzZWxlY3RlZCBhbmQgZXhjbHVkZSB0aGUgcmVzdC4KLSAg
ICogQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0ZSBUZXN0cyB0aGF0IG5lZWQgdXBk
YXRpbmcuCi0gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0
ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3QuCi0gICAqCi0gICAqLwotICBmdW5jdGlvbiBoYW5kbGVV
cGRhdGUodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKSB7Cit9CisKKy8qKgorICogSGFuZGxlIHVz
ZXIgY2xpY2sgb24gImluY2x1ZGUgc2VsZWN0ZWQiIGJ1dHRvbi4KKyAqIEluY2x1ZGVzIHRoZSB0
ZXN0cyB0aGF0IGFyZSBzZWxlY3RlZCBhbmQgZXhjbHVkZSB0aGUgcmVzdC4KKyAqIEBwYXJhbSB7
T2JqZWN0fSB0ZXN0c05lZWRpbmdVcGRhdGUgVGVzdHMgdGhhdCBuZWVkIHVwZGF0aW5nLgorICog
QHBhcmFtIHtBcnJheS48c3RyaW5nPn0ga2V5cyBLZXlzIGludG8gdGhlIHRlc3ROZWVkaW5nVXBk
YXRlIG9iamVjdC4KKyAqCisgKi8KK2Z1bmN0aW9uIGhhbmRsZVVwZGF0ZSh0ZXN0c05lZWRpbmdV
cGRhdGUsIGtleXMpCit7CiAgICAgdmFyIHRlc3QgPSBrZXlzW2N1cnJlbnRTdGF0ZS51cGRhdGVJ
bmRleF07CiAgICAgdmFyIHVwZGF0ZXMgPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF07CiAgICAg
Zm9yICh2YXIgYnVpbGRlciBpbiB1cGRhdGVzKSB7Ci0gICAgICAvLyBBZGQgaW5jbHVkZWQgdGVz
dHMsIGFuZCBkZWxldGUgZXhjbHVkZWQgdGVzdHMgaWYKLSAgICAgIC8vIHRoZXkgd2VyZSBwcmV2
aW91c2x5IGluY2x1ZGVkLgotICAgICAgaWYgKCQoYnVpbGRlcikuY2hlY2tlZCkgewotICAgICAg
ICBpZiAoIWNvbmZpcm1lZFRlc3RzW3Rlc3RdKSB7Ci0gICAgICAgICAgY29uZmlybWVkVGVzdHNb
dGVzdF0gPSB7fTsKLSAgICAgICAgfQotICAgICAgICBjb25maXJtZWRUZXN0c1t0ZXN0XVtidWls
ZGVyXSA9IHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXTsKLSAgICAgIH0gZWxzZSBp
ZiAoY29uZmlybWVkVGVzdHNbdGVzdF0gJiYgY29uZmlybWVkVGVzdHNbdGVzdF1bYnVpbGRlcl0p
IHsKLSAgICAgICAgZGVsZXRlIGNvbmZpcm1lZFRlc3RzW3Rlc3RdW2J1aWxkZXJdOwotICAgICAg
ICBpZiAoIWdldEtleXMoY29uZmlybWVkVGVzdHNbdGVzdF0pLmxlbmd0aCkgewotICAgICAgICAg
IGRlbGV0ZSBjb25maXJtZWRUZXN0c1t0ZXN0XTsKKyAgICAgICAgLy8gQWRkIGluY2x1ZGVkIHRl
c3RzLCBhbmQgZGVsZXRlIGV4Y2x1ZGVkIHRlc3RzIGlmCisgICAgICAgIC8vIHRoZXkgd2VyZSBw
cmV2aW91c2x5IGluY2x1ZGVkLgorICAgICAgICBpZiAoJChidWlsZGVyKS5jaGVja2VkKSB7Cisg
ICAgICAgICAgICBpZiAoIWNvbmZpcm1lZFRlc3RzW3Rlc3RdKQorICAgICAgICAgICAgICAgIGNv
bmZpcm1lZFRlc3RzW3Rlc3RdID0ge307CisgICAgICAgICAgICBjb25maXJtZWRUZXN0c1t0ZXN0
XVtidWlsZGVyXSA9IHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXTsKKyAgICAgICAg
fSBlbHNlIGlmIChjb25maXJtZWRUZXN0c1t0ZXN0XSAmJiBjb25maXJtZWRUZXN0c1t0ZXN0XVti
dWlsZGVyXSkgeworICAgICAgICAgICAgZGVsZXRlIGNvbmZpcm1lZFRlc3RzW3Rlc3RdW2J1aWxk
ZXJdOworICAgICAgICAgICAgaWYgKCFnZXRLZXlzKGNvbmZpcm1lZFRlc3RzW3Rlc3RdKS5sZW5n
dGgpCisgICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpcm1lZFRlc3RzW3Rlc3RdOwogICAgICAg
ICB9Ci0gICAgICB9CiAgICAgfQogICAgIG5leHRVcGRhdGUodGVzdHNOZWVkaW5nVXBkYXRlLCBr
ZXlzKTsKLSAgfQorfQogCiAKLSAgLyoqCi0gICAqIE1vdmUgdG8gdGhlIG5leHQgaXRlbSB0byB1
cGRhdGUuCi0gICAqIEBwYXJhbSB7T2JqZWN0fSB0ZXN0c05lZWRpbmdVcGRhdGUgVGVzdHMgdGhh
dCBuZWVkIHVwZGF0aW5nLgotICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBrZXlzIEtleXMg
aW50byB0aGUgdGVzdE5lZWRpbmdVcGRhdGUgb2JqZWN0LgotICAgKi8KLSAgZnVuY3Rpb24gbmV4
dFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpIHsKKy8qKgorICogTW92ZSB0byB0aGUg
bmV4dCBpdGVtIHRvIHVwZGF0ZS4KKyAqIEBwYXJhbSB7T2JqZWN0fSB0ZXN0c05lZWRpbmdVcGRh
dGUgVGVzdHMgdGhhdCBuZWVkIHVwZGF0aW5nLgorICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0g
a2V5cyBLZXlzIGludG8gdGhlIHRlc3ROZWVkaW5nVXBkYXRlIG9iamVjdC4KKyAqLworZnVuY3Rp
b24gbmV4dFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCit7CiAgICAgc2V0VXBkYXRl
SW5kZXgoY3VycmVudFN0YXRlLnVwZGF0ZUluZGV4ICsgMSwgdGVzdHNOZWVkaW5nVXBkYXRlLCBr
ZXlzKTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEFkdmFuY2UgdGhlIGluZGV4IHdlIGFyZSB1cGRh
dGluZyBhdC4gIElmIHdlIHdhbGsgb3ZlciB0aGUgZW5kCi0gICAqIG9yIGJlZ2lubmluZywganVz
dCBsb29wLgotICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3SW5kZXggVGhlIGluZGV4IGludG8gdGhl
IGtleXMgdG8gbW92ZSB0by4KLSAgICogQHBhcmFtIHtPYmplY3R9IHRlc3RzTmVlZGluZ1VwZGF0
ZSBUZXN0cyB0aGF0IG5lZWQgdXBkYXRpbmcuCi0gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59
IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3QuCi0gICAqLwotICBm
dW5jdGlvbiBzZXRVcGRhdGVJbmRleChuZXdJbmRleCwgdGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlz
KSB7Ci0gICAgaWYgKG5ld0luZGV4ID09IC0xKSB7Ci0gICAgICBuZXdJbmRleCA9IGtleXMubGVu
Z3RoIC0gMTsKLSAgICB9IGVsc2UgaWYgKG5ld0luZGV4ID09IGtleXMubGVuZ3RoKSB7Ci0gICAg
ICBuZXdJbmRleCA9IDA7Ci0gICAgfQorfQorCisKKy8qKgorICogQWR2YW5jZSB0aGUgaW5kZXgg
d2UgYXJlIHVwZGF0aW5nIGF0LiAgSWYgd2Ugd2FsayBvdmVyIHRoZSBlbmQKKyAqIG9yIGJlZ2lu
bmluZywganVzdCBsb29wLgorICogQHBhcmFtIHtzdHJpbmd9IG5ld0luZGV4IFRoZSBpbmRleCBp
bnRvIHRoZSBrZXlzIHRvIG1vdmUgdG8uCisgKiBAcGFyYW0ge09iamVjdH0gdGVzdHNOZWVkaW5n
VXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4KKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmlu
Zz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3QuCisgKi8KK2Z1
bmN0aW9uIHNldFVwZGF0ZUluZGV4KG5ld0luZGV4LCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMp
Cit7CisgICAgaWYgKG5ld0luZGV4ID09IC0xKQorICAgICAgICBuZXdJbmRleCA9IGtleXMubGVu
Z3RoIC0gMTsKKyAgICBlbHNlIGlmIChuZXdJbmRleCA9PSBrZXlzLmxlbmd0aCkKKyAgICAgICAg
bmV3SW5kZXggPSAwOwogICAgIHNldFF1ZXJ5UGFyYW1ldGVyKCJ1cGRhdGVJbmRleCIsIG5ld0lu
ZGV4KTsKICAgICBzaG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlz
KTsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldEhUTUxGb3JJbmRpdmlkdWxUZXN0T25BbGxCdWls
ZGVycyh0ZXN0KSB7CitmdW5jdGlvbiBnZXRIVE1MRm9ySW5kaXZpZHVsVGVzdE9uQWxsQnVpbGRl
cnModGVzdCkKK3sKICAgICBwcm9jZXNzVGVzdFJ1bnNGb3JBbGxCdWlsZGVycygpOwogCiAgICAg
dmFyIHRlc3RSZXN1bHRzID0gdGVzdFRvUmVzdWx0c01hcFt0ZXN0XTsKICAgICB2YXIgYnVpbGRl
ck1hc3RlcjsKICAgICB2YXIgaHRtbCA9ICcnOwogICAgIGlmICh0ZXN0UmVzdWx0cyAmJiB0ZXN0
UmVzdWx0cy5sZW5ndGgpIHsKLSAgICAgIGJ1aWxkZXJNYXN0ZXIgPSBnZXRCdWlsZGVyTWFzdGVy
KHRlc3RSZXN1bHRzWzBdLmJ1aWxkZXIpOwotICAgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMo
KSkgewotICAgICAgICB2YXIgdHJhY1VSTCA9IFRFU1RfVVJMX0JBU0VfUEFUSF9UUkFDICsgdGVz
dAotICAgICAgICBodG1sICs9IGdldExpbmtIVE1MVG9PcGVuV2luZG93KHRyYWNVUkwsIHRyYWNV
UkwpOwotICAgICAgfQotCi0gICAgICBodG1sICs9JzxkaXY+PGI+SWYgYSBidWlsZGVyIGlzIG5v
dCBsaXN0ZWQsIHRoYXQgbWVhbnMgdGhlIGJ1aWxkZXIgJyArCi0gICAgICAgICAgJ2RvZXMgbm90
IHJ1biB0aGF0IHRlc3QgKGUuZy4gaXQgaXMgc2tpcHBlZCkgb3IgYWxsIHJ1bnMgb2YgdGhlICcg
KwotICAgICAgICAgICd0ZXN0IHBhc3NlZC48L2I+PC9kaXY+JzsKLQotICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCB0ZXN0UmVzdWx0cy5sZW5ndGg7IGorKykgewotICAgICAgICBodG1sICs9IGdl
dEhUTUxGb3JTaW5nbGVUZXN0Um93KHRlc3RSZXN1bHRzW2pdKTsKLSAgICAgIH0KLSAgICAgIGh0
bWwgPSBnZXRIVE1MRm9yVGVzdFRhYmxlKGh0bWwpOworICAgICAgICBidWlsZGVyTWFzdGVyID0g
Z2V0QnVpbGRlck1hc3Rlcih0ZXN0UmVzdWx0c1swXS5idWlsZGVyKTsKKyAgICAgICAgaWYgKGlz
TGF5b3V0VGVzdFJlc3VsdHMoKSkgeworICAgICAgICAgICAgdmFyIHRyYWNVUkwgPSBURVNUX1VS
TF9CQVNFX1BBVEhfVFJBQyArIHRlc3QKKyAgICAgICAgICAgIGh0bWwgKz0gZ2V0TGlua0hUTUxU
b09wZW5XaW5kb3codHJhY1VSTCwgdHJhY1VSTCk7CisgICAgICAgIH0KKworICAgICAgICBodG1s
ICs9JzxkaXY+PGI+SWYgYSBidWlsZGVyIGlzIG5vdCBsaXN0ZWQsIHRoYXQgbWVhbnMgdGhlIGJ1
aWxkZXIgJyArCisgICAgICAgICAgICAnZG9lcyBub3QgcnVuIHRoYXQgdGVzdCAoZS5nLiBpdCBp
cyBza2lwcGVkKSBvciBhbGwgcnVucyBvZiB0aGUgJyArCisgICAgICAgICAgICAndGVzdCBwYXNz
ZWQuPC9iPjwvZGl2Pic7CisKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0ZXN0UmVzdWx0
cy5sZW5ndGg7IGorKykKKyAgICAgICAgICAgIGh0bWwgKz0gZ2V0SFRNTEZvclNpbmdsZVRlc3RS
b3codGVzdFJlc3VsdHNbal0pOworICAgICAgICBodG1sID0gZ2V0SFRNTEZvclRlc3RUYWJsZSho
dG1sKTsKICAgICB9IGVsc2UgewotICAgICAgaWYgKGV4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0XSkg
ewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0XS5s
ZW5ndGg7IGkrKykgewotICAgICAgICAgIGh0bWwgKz0gJzxkaXY+JyArIGV4cGVjdGF0aW9uc0J5
VGVzdFt0ZXN0XVtpXS5tb2RpZmllcnMgKyAnIHwgJyArCi0gICAgICAgICAgICAgIGV4cGVjdGF0
aW9uc0J5VGVzdFt0ZXN0XVtpXS5leHBlY3RhdGlvbnMgKyAnPC9kaXY+JzsKKyAgICAgICAgaWYg
KGV4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0XSkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBleHBlY3RhdGlvbnNCeVRlc3RbdGVzdF0ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgaHRtbCArPSAnPGRpdj4nICsgZXhwZWN0YXRpb25zQnlUZXN0W3Rlc3RdW2ldLm1vZGlmaWVy
cyArICcgfCAnICsKKyAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc0J5VGVzdFt0ZXN0XVtp
XS5leHBlY3RhdGlvbnMgKyAnPC9kaXY+JzsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgfQotICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ibm90LWZvdW5kIj5UZXN0IG5vdCBmb3Vu
ZC4gRWl0aGVyIGl0IGRvZXMgJyArCi0gICAgICAgICAgJ25vdCBleGlzdCwgaXMgc2tpcHBlZCBv
ciBwYXNzZXMgb24gYWxsIHBsYXRmb3Jtcy48L2Rpdj4nOworICAgICAgICBodG1sICs9ICc8ZGl2
IGNsYXNzPSJub3QtZm91bmQiPlRlc3Qgbm90IGZvdW5kLiBFaXRoZXIgaXQgZG9lcyAnICsKKyAg
ICAgICAgICAgICdub3QgZXhpc3QsIGlzIHNraXBwZWQgb3IgcGFzc2VzIG9uIGFsbCBwbGF0Zm9y
bXMuPC9kaXY+JzsKICAgICB9CiAKICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPWV4cGVjdGF0aW9u
cyB0ZXN0PScgKyB0ZXN0ICsgJz48ZGl2PicgKwogICAgICAgICBnZXRMaW5rSFRNTFRvVG9nZ2xl
U3RhdGUoJ3Nob3dFeHBlY3RhdGlvbnMnLCAncmVzdWx0cycpCiAKICAgICBpZiAoaXNMYXlvdXRU
ZXN0UmVzdWx0cygpKSB7Ci0gICAgICBodG1sICs9ICcgfCAnICsgZ2V0TGlua0hUTUxUb1RvZ2ds
ZVN0YXRlKCdzaG93TGFyZ2VFeHBlY3RhdGlvbnMnLAotICAgICAgICAgICAgICAnbGFyZ2UgdGh1
bWJuYWlscycpOwotICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIgPT0gV0VCS0lUX0JVSUxERVJfTUFT
VEVSKSB7Ci0gICAgICAgIHZhciByZXZpc2lvbiA9IGN1cnJlbnRTdGF0ZS5yZXZpc2lvbiB8fCAn
JzsKLSAgICAgICAgaHRtbCArPSAnPGZvcm0gJyArCi0gICAgICAgICAgICAnb25zdWJtaXQ9InNl
dFF1ZXJ5UGFyYW1ldGVyKFwncmV2aXNpb25cJywgcmV2aXNpb24udmFsdWUpOycgKwotICAgICAg
ICAgICAgJ3JldHVybiBmYWxzZTsiPlNob3cgcmVzdWx0cyBmb3IgV2ViS2l0IHJldmlzaW9uOiAn
ICsKLSAgICAgICAgICAgICc8aW5wdXQgbmFtZT1yZXZpc2lvbiBwbGFjZWhvbGRlcj0iZS5nLiA2
NTU0MCIgdmFsdWU9IicgKyByZXZpc2lvbiArCi0gICAgICAgICAgICAnIiBpZD1yZXZpc2lvbi1p
bnB1dD48L2Zvcm0+JzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGh0bWwgKz0gJyB8IDxiPk9u
bHkgc2hvd3MgYWN0dWFsIHJlc3VsdHMvZGlmZnMgZnJvbSB0aGUgbW9zdCByZWNlbnQnICsKLSAg
ICAgICAgICAnICpmYWlsdXJlKiBvbiBlYWNoIGJvdC48L2I+JzsKLSAgICAgIH0KKyAgICAgICAg
aHRtbCArPSAnIHwgJyArIGdldExpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd0xhcmdlRXhwZWN0
YXRpb25zJywgJ2xhcmdlIHRodW1ibmFpbHMnKTsKKyAgICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIg
PT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKSB7CisgICAgICAgICAgICB2YXIgcmV2aXNpb24gPSBj
dXJyZW50U3RhdGUucmV2aXNpb24gfHwgJyc7CisgICAgICAgICAgICBodG1sICs9ICc8Zm9ybSBv
bnN1Ym1pdD0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXZpc2lvblwnLCByZXZpc2lvbi52YWx1ZSk7
JyArCisgICAgICAgICAgICAgICAgJ3JldHVybiBmYWxzZTsiPlNob3cgcmVzdWx0cyBmb3IgV2Vi
S2l0IHJldmlzaW9uOiAnICsKKyAgICAgICAgICAgICAgICAnPGlucHV0IG5hbWU9cmV2aXNpb24g
cGxhY2Vob2xkZXI9ImUuZy4gNjU1NDAiIHZhbHVlPSInICsgcmV2aXNpb24gKworICAgICAgICAg
ICAgICAgICciIGlkPXJldmlzaW9uLWlucHV0PjwvZm9ybT4nOworICAgICAgfSBlbHNlCisgICAg
ICAgIGh0bWwgKz0gJyB8IDxiPk9ubHkgc2hvd3MgYWN0dWFsIHJlc3VsdHMvZGlmZnMgZnJvbSB0
aGUgbW9zdCByZWNlbnQgKmZhaWx1cmUqIG9uIGVhY2ggYm90LjwvYj4nOwogICAgIH0gZWxzZSB7
CiAgICAgICBodG1sICs9ICcgfCA8c3Bhbj5SZXN1bHRzIGhlaWdodDo8aW5wdXQgJyArCiAgICAg
ICAgICAgJ29uY2hhbmdlPSJzZXRRdWVyeVBhcmFtZXRlcihcJ3Jlc3VsdHNIZWlnaHRcJyx0aGlz
LnZhbHVlKSIgdmFsdWU9IicgKwpAQCAtMjAxNCw4MyArMTk0Niw4MyBAQCBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICAgIH0KICAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nOwogICAgIHJldHVybiBodG1sOwotICB9
Cit9CiAKLSAgZnVuY3Rpb24gZ2V0RXhwZWN0YXRpb25zQ29udGFpbmVyKGV4cGVjdGF0aW9uc0Nv
bnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwKLSAgICAgIGV4cGVjdGF0aW9uc1R5cGUpIHsKK2Z1
bmN0aW9uIGdldEV4cGVjdGF0aW9uc0NvbnRhaW5lcihleHBlY3RhdGlvbnNDb250YWluZXJzLCBw
YXJlbnRDb250YWluZXIsIGV4cGVjdGF0aW9uc1R5cGUpCit7CiAgICAgaWYgKCFleHBlY3RhdGlv
bnNDb250YWluZXJzW2V4cGVjdGF0aW9uc1R5cGVdKSB7Ci0gICAgICB2YXIgY29udGFpbmVyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICBjb250YWluZXIuY2xhc3NOYW1l
ID0gJ2V4cGVjdGF0aW9ucy1jb250YWluZXInOwotICAgICAgcGFyZW50Q29udGFpbmVyLmFwcGVu
ZENoaWxkKGNvbnRhaW5lcik7Ci0gICAgICBleHBlY3RhdGlvbnNDb250YWluZXJzW2V4cGVjdGF0
aW9uc1R5cGVdID0gY29udGFpbmVyOworICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnZXhw
ZWN0YXRpb25zLWNvbnRhaW5lcic7CisgICAgICAgIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGls
ZChjb250YWluZXIpOworICAgICAgICBleHBlY3RhdGlvbnNDb250YWluZXJzW2V4cGVjdGF0aW9u
c1R5cGVdID0gY29udGFpbmVyOwogICAgIH0KICAgICByZXR1cm4gZXhwZWN0YXRpb25zQ29udGFp
bmVyc1tleHBlY3RhdGlvbnNUeXBlXTsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldEV4dGVuc2lv
bihwYXRoKSB7CitmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aCkKK3sKICAgICB2YXIgcGFydHMg
PSBwYXRoLnNwbGl0KCcuJykKICAgICB2YXIgZXh0ZW5zaW9uID0gcGFydHNbcGFydHMubGVuZ3Ro
IC0gMV07CiAgICAgcmV0dXJuIGV4dGVuc2lvbiA9PSAnaHRtbCcgPyAndHh0JyA6IGV4dGVuc2lv
bjsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGVuc3VyZVRyYWlsaW5nU2xhc2gocGF0aCkgeworZnVu
Y3Rpb24gZW5zdXJlVHJhaWxpbmdTbGFzaChwYXRoKQorewogICAgIGlmIChwYXRoLm1hdGNoKC9c
LyQvKSkKLSAgICAgIHJldHVybiBwYXRoOworICAgICAgICByZXR1cm4gcGF0aDsKICAgICByZXR1
cm4gcGF0aCArICcvJzsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIG1heWJlQWRkUG5nQ2hlY2tzdW0o
ZXhwZWN0YXRpb25EaXYsIHBuZ1VybCkgeworZnVuY3Rpb24gbWF5YmVBZGRQbmdDaGVja3N1bShl
eHBlY3RhdGlvbkRpdiwgcG5nVXJsKQorewogICAgIC8vIHBuZ1VybCBnZXRzIHNlcnZlZCBmcm9t
IHRoZSBicm93c2VyIGNhY2hlIHNpbmNlIHdlIGp1c3QgbG9hZGVkIGl0IGluIGFuCiAgICAgLy8g
PGltZz4gdGFnLgogICAgIHJlcXVlc3QocG5nVXJsLAotICAgICAgZnVuY3Rpb24oeGhyKSB7Ci0g
ICAgICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IDJrIG9mIHRoZSByZXNwb25zZSB0byBhIGJ5dGUg
c3RyaW5nLgotICAgICAgICB2YXIgYnl0ZXMgPSB4aHIucmVzcG9uc2VUZXh0LnN1YnN0cmluZygw
LCAyMDQ4KTsKLSAgICAgICAgZm9yICh2YXIgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGJ5dGVz
Lmxlbmd0aDsgKytwb3NpdGlvbikKLSAgICAgICAgICBieXRlc1twb3NpdGlvbl0gPSBieXRlc1tw
b3NpdGlvbl0gJiAweGZmOwotCi0gICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tZW50LgotICAg
ICAgICB2YXIgY29tbWVudEtleSA9ICd0RVh0Y2hlY2tzdW1ceDAwJzsKLSAgICAgICAgdmFyIGNo
ZWNrc3VtUG9zaXRpb24gPSBieXRlcy5pbmRleE9mKGNvbW1lbnRLZXkpOwotICAgICAgICBpZiAo
Y2hlY2tzdW1Qb3NpdGlvbiA9PSAtMSkKLSAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IGNoZWNrc3VtID0gYnl0ZXMuc3Vic3RyaW5nKAotICAgICAgICAgICAgY2hlY2tzdW1Qb3NpdGlv
biArIGNvbW1lbnRLZXkubGVuZ3RoLAotICAgICAgICAgICAgY2hlY2tzdW1Qb3NpdGlvbiArIGNv
bW1lbnRLZXkubGVuZ3RoICsgMzIpOwotICAgICAgICB2YXIgY2hlY2tzdW1Db250YWluZXIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7Ci0gICAgICAgIGNoZWNrc3VtQ29udGFpbmVy
LmlubmVyVGV4dCA9ICdFbWJlZGRlZCBjaGVja3N1bTogJyArIGNoZWNrc3VtOwotICAgICAgICBj
aGVja3N1bUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3BuZ2NoZWNrc3VtJyk7Ci0g
ICAgICAgIGV4cGVjdGF0aW9uRGl2LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hlY2tzdW1Db250
YWluZXIpOwotICAgICAgfSwKLSAgICAgIGZ1bmN0aW9uKHhocikge30sCi0gICAgICB0cnVlKTsK
LSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgc3BlY2lmaWMgZXhwZWN0YXRpb24uIElmIGl0J3Mg
YW4gaW1hZ2UsIGl0J3Mgb25seSBhZGRlZCBvbiB0aGUKLSAgICogaW1hZ2UncyBvbmxvYWQgaGFu
ZGxlci4gSWYgaXQncyBhIHRleHQgZmlsZSwgdGhlbiBhIHNjcmlwdCB0YWcgaXMgYXBwZW5kZWQK
LSAgICogYXMgYSBoYWNrIHRvIHNlZSBpZiB0aGUgZmlsZSA0MDRzIChuZWNlc3Nhcnkgc2luY2Ug
aXQncyBjcm9zcy1kb21haW4pLgotICAgKiBPbmNlIGFsbCB0aGUgZXhwZWN0YXRpb25zIGZvciBh
IHNwZWNpZmljIHR5cGUgaGF2ZSBsb2FkZWQgb3IgZXJyb3JlZAotICAgKiAoZS5nLiBhbGwgdGhl
IHRleHQgcmVzdWx0cyksIHRoZW4gd2UgZ28gdGhyb3VnaCBhbmQgaWRlbnRpZnkgd2hpY2ggcGxh
dGZvcm0KLSAgICogdXNlcyB3aGljaCBleHBlY3RhdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHtP
YmplY3R9IGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMgTWFwIGZyb20gZXhwZWN0YXRpb25zIHR5cGUg
dG8KLSAgICogICAgIGNvbnRhaW5lciBESVYuCi0gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50
Q29udGFpbmVyIENvbnRhaW5lciBlbGVtZW50IGZvcgotICAgKiAgICAgZXhwZWN0YXRpb25zQ29u
dGFpbmVyIGRpdnMuCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybSBQbGF0Zm9ybSBzdHJp
bmcuIEVtcHR5IHN0cmluZyBmb3Igbm9uLXBsYXRmb3JtCi0gICAqICAgICBzcGVjaWZpYyBleHBl
Y3RhdGlvbnMuCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFJlbGF0aXZlIHBhdGggdG8gdGhl
IGV4cGVjdGF0aW9uLgotICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSBCYXNlIHBhdGggZm9yIHRo
ZSBleHBlY3RhdGlvbiBVUkwuCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfYnVpbGRlciBCdWls
ZGVyIHdob3NlIGFjdHVhbCByZXN1bHRzIHRoaXMgZXhwZWN0YXRpb24KLSAgICogICAgIHBvaW50
cyB0by4KLSAgICovCi0gIGZ1bmN0aW9uIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnND
b250YWluZXJzLCBwYXJlbnRDb250YWluZXIsIHBsYXRmb3JtLAotICAgICAgcGF0aCwgYmFzZSwg
b3B0X2J1aWxkZXIpIHsKKyAgICAgICAgZnVuY3Rpb24oeGhyKSB7CisgICAgICAgICAgICAvLyBD
b252ZXJ0IHRoZSBmaXJzdCAyayBvZiB0aGUgcmVzcG9uc2UgdG8gYSBieXRlIHN0cmluZy4KKyAg
ICAgICAgICAgIHZhciBieXRlcyA9IHhoci5yZXNwb25zZVRleHQuc3Vic3RyaW5nKDAsIDIwNDgp
OworICAgICAgICAgICAgZm9yICh2YXIgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IGJ5dGVzLmxl
bmd0aDsgKytwb3NpdGlvbikKKyAgICAgICAgICAgICAgICBieXRlc1twb3NpdGlvbl0gPSBieXRl
c1twb3NpdGlvbl0gJiAweGZmOworCisgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgY29tbWVu
dC4KKyAgICAgICAgICAgIHZhciBjb21tZW50S2V5ID0gJ3RFWHRjaGVja3N1bVx4MDAnOworICAg
ICAgICAgICAgdmFyIGNoZWNrc3VtUG9zaXRpb24gPSBieXRlcy5pbmRleE9mKGNvbW1lbnRLZXkp
OworICAgICAgICAgICAgaWYgKGNoZWNrc3VtUG9zaXRpb24gPT0gLTEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICB2YXIgY2hlY2tzdW0gPSBieXRlcy5zdWJzdHJpbmco
Y2hlY2tzdW1Qb3NpdGlvbiArIGNvbW1lbnRLZXkubGVuZ3RoLCBjaGVja3N1bVBvc2l0aW9uICsg
Y29tbWVudEtleS5sZW5ndGggKyAzMik7CisgICAgICAgICAgICB2YXIgY2hlY2tzdW1Db250YWlu
ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgICAgICBjaGVja3N1
bUNvbnRhaW5lci5pbm5lclRleHQgPSAnRW1iZWRkZWQgY2hlY2tzdW06ICcgKyBjaGVja3N1bTsK
KyAgICAgICAgICAgIGNoZWNrc3VtQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncG5n
Y2hlY2tzdW0nKTsKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uRGl2LnBhcmVudE5vZGUuYXBwZW5k
Q2hpbGQoY2hlY2tzdW1Db250YWluZXIpOworICAgICAgICB9LAorICAgICAgICBmdW5jdGlvbih4
aHIpIHt9LAorICAgICAgICB0cnVlKTsKK30KKworLyoqCisgKiBBZGRzIGEgc3BlY2lmaWMgZXhw
ZWN0YXRpb24uIElmIGl0J3MgYW4gaW1hZ2UsIGl0J3Mgb25seSBhZGRlZCBvbiB0aGUKKyAqIGlt
YWdlJ3Mgb25sb2FkIGhhbmRsZXIuIElmIGl0J3MgYSB0ZXh0IGZpbGUsIHRoZW4gYSBzY3JpcHQg
dGFnIGlzIGFwcGVuZGVkCisgKiBhcyBhIGhhY2sgdG8gc2VlIGlmIHRoZSBmaWxlIDQwNHMgKG5l
Y2Vzc2FyeSBzaW5jZSBpdCdzIGNyb3NzLWRvbWFpbikuCisgKiBPbmNlIGFsbCB0aGUgZXhwZWN0
YXRpb25zIGZvciBhIHNwZWNpZmljIHR5cGUgaGF2ZSBsb2FkZWQgb3IgZXJyb3JlZAorICogKGUu
Zy4gYWxsIHRoZSB0ZXh0IHJlc3VsdHMpLCB0aGVuIHdlIGdvIHRocm91Z2ggYW5kIGlkZW50aWZ5
IHdoaWNoIHBsYXRmb3JtCisgKiB1c2VzIHdoaWNoIGV4cGVjdGF0aW9uLgorICoKKyAqIEBwYXJh
bSB7T2JqZWN0fSBleHBlY3RhdGlvbnNDb250YWluZXJzIE1hcCBmcm9tIGV4cGVjdGF0aW9ucyB0
eXBlIHRvCisgKiAgICAgY29udGFpbmVyIERJVi4KKyAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50
Q29udGFpbmVyIENvbnRhaW5lciBlbGVtZW50IGZvcgorICogICAgIGV4cGVjdGF0aW9uc0NvbnRh
aW5lciBkaXZzLgorICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtIFBsYXRmb3JtIHN0cmluZy4g
RW1wdHkgc3RyaW5nIGZvciBub24tcGxhdGZvcm0KKyAqICAgICBzcGVjaWZpYyBleHBlY3RhdGlv
bnMuCisgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBleHBlY3Rh
dGlvbi4KKyAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIEJhc2UgcGF0aCBmb3IgdGhlIGV4cGVjdGF0
aW9uIFVSTC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfYnVpbGRlciBCdWlsZGVyIHdob3NlIGFj
dHVhbCByZXN1bHRzIHRoaXMgZXhwZWN0YXRpb24KKyAqICAgICBwb2ludHMgdG8uCisgKi8KK2Z1
bmN0aW9uIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBwYXJlbnRD
b250YWluZXIsIHBsYXRmb3JtLCBwYXRoLCBiYXNlLCBvcHRfYnVpbGRlcikKK3sKICAgICB2YXIg
ZmlsZUV4dGVuc2lvbiA9IGdldEV4dGVuc2lvbihwYXRoKTsKLSAgICB2YXIgY29udGFpbmVyID0g
Z2V0RXhwZWN0YXRpb25zQ29udGFpbmVyKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsCi0gICAgICAg
ICAgcGFyZW50Q29udGFpbmVyLCBmaWxlRXh0ZW5zaW9uKTsKKyAgICB2YXIgY29udGFpbmVyID0g
Z2V0RXhwZWN0YXRpb25zQ29udGFpbmVyKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIHBhcmVudENv
bnRhaW5lciwgZmlsZUV4dGVuc2lvbik7CiAgICAgdmFyIGlzSW1hZ2UgPSBwYXRoLm1hdGNoKC9c
LnBuZyQvKTsKIAogICAgIC8vIFRPRE8ob2phbik6IFN0b3AgdXNpbmcgc2NyaXB0IHRhZ3Mgb25j
ZSBhbGwgdGhlIHBsYWNlcyB3ZSBwdWxsIGZyb20gc3VwcG9ydCBDT1JTLgpAQCAtMjEwMCwyNTEg
KzIwMzIsMjQ4IEBAIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgY2hpbGRDb250YWluZXIuY2xhc3NOYW1lID0g
J3VubG9hZGVkJzsKIAogICAgIHZhciBhcHBlbmRFeHBlY3RhdGlvbnNJdGVtID0gZnVuY3Rpb24o
aXRlbSkgewotICAgICAgY2hpbGRDb250YWluZXIuYXBwZW5kQ2hpbGQoZ2V0RXhwZWN0YXRpb25z
VGl0bGUocGxhdGZvcm0sIHBhdGgsIG9wdF9idWlsZGVyIHx8ICcnKSk7Ci0gICAgICBjaGlsZENv
bnRhaW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWl0ZW0nOwotICAgICAgaXRlbS5jbGFz
c05hbWUgPSAnZXhwZWN0YXRpb24gJyArIGZpbGVFeHRlbnNpb247Ci0gICAgICBpZiAoY3VycmVu
dFN0YXRlLnNob3dMYXJnZUV4cGVjdGF0aW9ucykKLSAgICAgICAgaXRlbS5jbGFzc05hbWUgKz0g
JyBsYXJnZSc7Ci0gICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKTsKLSAgICAg
IGhhbmRsZUZpbmlzaGVkTG9hZGluZ0V4cGVjdGF0aW9ucyhjb250YWluZXIpOworICAgICAgICBj
aGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChnZXRFeHBlY3RhdGlvbnNUaXRsZShwbGF0Zm9ybSwg
cGF0aCwgb3B0X2J1aWxkZXIgfHwgJycpKTsKKyAgICAgICAgY2hpbGRDb250YWluZXIuY2xhc3NO
YW1lID0gJ2V4cGVjdGF0aW9ucy1pdGVtJzsKKyAgICAgICAgaXRlbS5jbGFzc05hbWUgPSAnZXhw
ZWN0YXRpb24gJyArIGZpbGVFeHRlbnNpb247CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUuc2hv
d0xhcmdlRXhwZWN0YXRpb25zKQorICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUgKz0gJyBsYXJn
ZSc7CisgICAgICAgIGNoaWxkQ29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW0pOworICAgICAgICBo
YW5kbGVGaW5pc2hlZExvYWRpbmdFeHBlY3RhdGlvbnMoY29udGFpbmVyKTsKICAgICB9OwogCiAg
ICAgdmFyIHVybCA9IGJhc2UgKyBwbGF0Zm9ybVBhcnQgKyBwYXRoOwogICAgIGlmIChpc0ltYWdl
IHx8ICFzdGFydHNXaXRoKGJhc2UsICdodHRwOi8vc3ZuLndlYmtpdC5vcmcnKSkgewotICAgICAg
dmFyIGR1bW15Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXNJbWFnZSA/ICdpbWcnIDog
J3NjcmlwdCcpOwotICAgICAgZHVtbXlOb2RlLnNyYyA9IHVybDsKLSAgICAgIGR1bW15Tm9kZS5v
bmxvYWQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGl0ZW07Ci0gICAgICAgIGlmIChpc0lt
YWdlKSB7Ci0gICAgICAgICAgaXRlbSA9IGR1bW15Tm9kZTsKLSAgICAgICAgICBpZiAoc3RhcnRz
V2l0aChiYXNlLCAnaHR0cDovL3N2bi53ZWJraXQub3JnJykpCi0gICAgICAgICAgICBtYXliZUFk
ZFBuZ0NoZWNrc3VtKGl0ZW0sIHVybCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaXRl
bSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwotICAgICAgICAgIGl0ZW0uc3Jj
ID0gdXJsOworICAgICAgICB2YXIgZHVtbXlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChp
c0ltYWdlID8gJ2ltZycgOiAnc2NyaXB0Jyk7CisgICAgICAgIGR1bW15Tm9kZS5zcmMgPSB1cmw7
CisgICAgICAgIGR1bW15Tm9kZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZh
ciBpdGVtOworICAgICAgICAgICAgaWYgKGlzSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBpdGVt
ID0gZHVtbXlOb2RlOworICAgICAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKGJhc2UsICdodHRw
Oi8vc3ZuLndlYmtpdC5vcmcnKSkKKyAgICAgICAgICAgICAgICAgICAgbWF5YmVBZGRQbmdDaGVj
a3N1bShpdGVtLCB1cmwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
dGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgICAgICAg
aXRlbS5zcmMgPSB1cmw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmRFeHBlY3Rh
dGlvbnNJdGVtKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIGR1bW15Tm9kZS5vbmVycm9yID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjaGlsZENvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKGNoaWxkQ29udGFpbmVyKTsKKyAgICAgICAgICAgIGhhbmRsZUZpbmlzaGVkTG9hZGlu
Z0V4cGVjdGF0aW9ucyhjb250YWluZXIpOwogICAgICAgICB9Ci0gICAgICAgIGFwcGVuZEV4cGVj
dGF0aW9uc0l0ZW0oaXRlbSk7Ci0gICAgICB9Ci0gICAgICBkdW1teU5vZGUub25lcnJvciA9IGZ1
bmN0aW9uKCkgewotICAgICAgICBjaGlsZENvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KGNoaWxkQ29udGFpbmVyKTsKLSAgICAgICAgaGFuZGxlRmluaXNoZWRMb2FkaW5nRXhwZWN0YXRp
b25zKGNvbnRhaW5lcik7Ci0gICAgICB9CiAKLSAgICAgIC8vIEFwcGVuZCBzY3JpcHQgZWxlbWVu
dHMgbm93IHNvIHRoYXQgdGhleSBsb2FkLiBJbWFnZXMgbG9hZCB3aXRob3V0IGJlaW5nCi0gICAg
ICAvLyBhcHBlbmRlZCB0byB0aGUgRE9NLgotICAgICAgaWYgKCFpc0ltYWdlKQotICAgICAgICBj
aGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChkdW1teU5vZGUpOworICAgICAgICAvLyBBcHBlbmQg
c2NyaXB0IGVsZW1lbnRzIG5vdyBzbyB0aGF0IHRoZXkgbG9hZC4gSW1hZ2VzIGxvYWQgd2l0aG91
dCBiZWluZworICAgICAgICAvLyBhcHBlbmRlZCB0byB0aGUgRE9NLgorICAgICAgICBpZiAoIWlz
SW1hZ2UpCisgICAgICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChkdW1teU5vZGUp
OwogICAgIH0gZWxzZSB7Ci0gICAgICByZXF1ZXN0KHVybCwKLSAgICAgICAgZnVuY3Rpb24oeGhy
KSB7Ci0gICAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTsK
LSAgICAgICAgICBpdGVtLmlubmVyVGV4dCA9IHhoci5yZXNwb25zZVRleHQ7Ci0gICAgICAgICAg
YXBwZW5kRXhwZWN0YXRpb25zSXRlbShpdGVtKTsKLSAgICAgICAgfSwKLSAgICAgICAgZnVuY3Rp
b24oeGhyKSB7LyogRG8gbm90aGluZyBvbiBlcnJvcnMgc2luY2UgdGhleSdyZSBleHBlY3RlZCAq
L30pOworICAgICAgICByZXF1ZXN0KHVybCwKKyAgICAgICAgICAgIGZ1bmN0aW9uKHhocikgewor
ICAgICAgICAgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7
CisgICAgICAgICAgICAgICAgaXRlbS5pbm5lclRleHQgPSB4aHIucmVzcG9uc2VUZXh0OworICAg
ICAgICAgICAgICAgIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0oaXRlbSk7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgZnVuY3Rpb24oeGhyKSB7LyogRG8gbm90aGluZyBvbiBlcnJvcnMgc2lu
Y2UgdGhleSdyZSBleHBlY3RlZCAqL30pOwogICAgIH0KIAogICAgIGNvbnRhaW5lci5hcHBlbmRD
aGlsZChjaGlsZENvbnRhaW5lcik7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBJZGVudGlmaWVzIHdo
aWNoIGV4cGVjdGF0aW9ucyBhcmUgdXNlZCBvbiB3aGljaCBwbGF0Zm9ybSBvbmNlIGFsbCB0aGUK
LSAgICogZXhwZWN0YXRpb25zIG9mIGEgZ2l2ZW4gdHlwZSBoYXZlIGxvYWRlZCAoZS5nLiB0aGUg
Y29udGFpbmVyIGZvciBwbmcKLSAgICogZXhwZWN0YXRpb25zIGZvciB0aGlzIHRlc3QgaGFkIG5v
IGNoaWxkIGVsZW1lbnRzIHdpdGggdGhlIGNsYXNzCi0gICAqICJ1bmxvYWRlZCIpLgotICAgKgot
ICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGFpbmVyIEVsZW1lbnQgY29udGFpbmluZyB0aGUgZXhw
ZWN0YXRpb25zIGZvciBhIGdpdmVuCi0gICAqICAgICB0ZXN0IGFuZCBhIGdpdmVuIHR5cGUgKGUu
Zy4gcG5nKS4KLSAgICovCi0gIGZ1bmN0aW9uIGhhbmRsZUZpbmlzaGVkTG9hZGluZ0V4cGVjdGF0
aW9ucyhjb250YWluZXIpIHsKK30KKworCisvKioKKyAqIElkZW50aWZpZXMgd2hpY2ggZXhwZWN0
YXRpb25zIGFyZSB1c2VkIG9uIHdoaWNoIHBsYXRmb3JtIG9uY2UgYWxsIHRoZQorICogZXhwZWN0
YXRpb25zIG9mIGEgZ2l2ZW4gdHlwZSBoYXZlIGxvYWRlZCAoZS5nLiB0aGUgY29udGFpbmVyIGZv
ciBwbmcKKyAqIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyB0ZXN0IGhhZCBubyBjaGlsZCBlbGVtZW50
cyB3aXRoIHRoZSBjbGFzcworICogInVubG9hZGVkIikuCisgKgorICogQHBhcmFtIHtzdHJpbmd9
IGNvbnRhaW5lciBFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGV4cGVjdGF0aW9ucyBmb3IgYSBnaXZl
bgorICogICAgIHRlc3QgYW5kIGEgZ2l2ZW4gdHlwZSAoZS5nLiBwbmcpLgorICovCitmdW5jdGlv
biBoYW5kbGVGaW5pc2hlZExvYWRpbmdFeHBlY3RhdGlvbnMoY29udGFpbmVyKQorewogICAgIGlm
IChjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndW5sb2FkZWQnKS5sZW5ndGgpCi0g
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKIAogICAgIHZhciB0aXRsZXMgPSBjb250YWlu
ZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZXhwZWN0YXRpb25zLXRpdGxlJyk7CiAgICAgZm9y
ICh2YXIgcGxhdGZvcm0gaW4gZmFsbGJhY2tzTWFwKSB7Ci0gICAgICB2YXIgZmFsbGJhY2tzID0g
ZmFsbGJhY2tzTWFwW3BsYXRmb3JtXTsKLSAgICAgIHZhciB3aW5uZXIgPSBudWxsOwotICAgICAg
dmFyIHdpbm5pbmdJbmRleCA9IC0xOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aXRsZXMu
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHRpdGxlID0gdGl0bGVzW2ldOwotCi0gICAgICAg
IGlmICghd2lubmVyICYmIHRpdGxlLnBsYXRmb3JtID09ICIiKSB7Ci0gICAgICAgICAgd2lubmVy
ID0gdGl0bGU7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGZh
bGxiYWNrcyA9IGZhbGxiYWNrc01hcFtwbGF0Zm9ybV07CisgICAgICAgIHZhciB3aW5uZXIgPSBu
dWxsOworICAgICAgICB2YXIgd2lubmluZ0luZGV4ID0gLTE7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGl0bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGl0bGUgPSB0
aXRsZXNbaV07CisKKyAgICAgICAgICAgIGlmICghd2lubmVyICYmIHRpdGxlLnBsYXRmb3JtID09
ICIiKSB7CisgICAgICAgICAgICAgICAgd2lubmVyID0gdGl0bGU7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdmFyIHJhd1BsYXRmb3JtID0gdGl0
bGUucGxhdGZvcm0gJiYKLSAgICAgICAgICAgIHRpdGxlLnBsYXRmb3JtLnJlcGxhY2UoJ3BsYXRm
b3JtLycsICcnKTsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmYWxsYmFja3MubGVuZ3Ro
OyBqKyspIHsKLSAgICAgICAgICBpZiAoKHdpbm5pbmdJbmRleCA9PSAtMSB8fCB3aW5uaW5nSW5k
ZXggPiBqKSAmJgotICAgICAgICAgICAgICAgcmF3UGxhdGZvcm0gPT0gZmFsbGJhY2tzW2pdKSB7
Ci0gICAgICAgICAgICB3aW5uaW5nSW5kZXggPSBqOwotICAgICAgICAgICAgd2lubmVyID0gdGl0
bGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmF3
UGxhdGZvcm0gPSB0aXRsZS5wbGF0Zm9ybSAmJiB0aXRsZS5wbGF0Zm9ybS5yZXBsYWNlKCdwbGF0
Zm9ybS8nLCAnJyk7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZhbGxiYWNrcy5s
ZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlmICgod2lubmluZ0luZGV4ID09IC0xIHx8
IHdpbm5pbmdJbmRleCA+IGopICYmIHJhd1BsYXRmb3JtID09IGZhbGxiYWNrc1tqXSkgeworICAg
ICAgICAgICAgICAgICAgICB3aW5uaW5nSW5kZXggPSBqOworICAgICAgICAgICAgICAgICAgICB3
aW5uZXIgPSB0aXRsZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh3aW5uZXIpCisgICAg
ICAgICAgICB3aW5uZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncGxhdGZvcm1zJylbMF0uaW5u
ZXJIVE1MICs9ICc8ZGl2IGNsYXNzPXVzZWQtcGxhdGZvcm0+JyArIHBsYXRmb3JtICsgJzwvZGl2
Pic7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGV4cGVjdGF0
aW9ucyBpZGVudGlmaWVkIGZvciB0aGlzIHRlc3QuIFRoaXMgbWVhbnMgJyArCisgICAgICAgICAg
ICAgICAgJ3RoZXJlIGlzIGEgbG9naWMgYnVnIGluIHRoZSBkYXNoYm9hcmQgZm9yIHdoaWNoIGV4
cGVjdGF0aW9ucyBhICcgKworICAgICAgICAgICAgICAgICdwbGF0Zm9ybSB1c2VzIG9yIHRyYWMu
d2Via2l0Lm9yZy9zcmMuY2hyb21pdW0ub3JnIGlzIGdpdmluZyA1WFhzLicpOwogICAgICAgICB9
Ci0gICAgICB9Ci0gICAgICBpZiAod2lubmVyKSB7Ci0gICAgICAgIHdpbm5lci5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCdwbGF0Zm9ybXMnKVswXS5pbm5lckhUTUwgKz0KLSAgICAgICAgICAgICc8
ZGl2IGNsYXNzPXVzZWQtcGxhdGZvcm0+JyArIHBsYXRmb3JtICsgJzwvZGl2Pic7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBjb25zb2xlLmxvZygnTm8gZXhwZWN0YXRpb25zIGlkZW50aWZpZWQg
Zm9yIHRoaXMgdGVzdC4gVGhpcyBtZWFucyAnICsKLSAgICAgICAgICAgICd0aGVyZSBpcyBhIGxv
Z2ljIGJ1ZyBpbiB0aGUgZGFzaGJvYXJkIGZvciB3aGljaCBleHBlY3RhdGlvbnMgYSAnICsKLSAg
ICAgICAgICAgICdwbGF0Zm9ybSB1c2VzIG9yIHRyYWMud2Via2l0Lm9yZy9zcmMuY2hyb21pdW0u
b3JnIGlzIGdpdmluZyAnICsKLSAgICAgICAgICAgICcgNVhYcy4nKTsKLSAgICAgIH0KICAgICB9
CiAKICAgICBjb25zb2xpZGF0ZVVzZWRQbGF0Zm9ybXMoY29udGFpbmVyKTsKLSAgfQotCi0gIC8q
KgotICAgKiBDb25zb2xpZGF0ZSBwbGF0Zm9ybXMgd2hlbiBhbGwgc3ViLXBsYXRmb3JtcyBmb3Ig
YSBnaXZlbiBwbGF0Zm9ybSBhcmUgcmVwcmVzZW50ZWQuCi0gICAqIGUuZy4sIGlmIGFsbCBvZiB0
aGUgV0lOLSBwbGF0Zm9ybXMgYXJlIHRoZXJlLCByZXBsYWNlIHRoZW0gd2l0aCBqdXN0IFdJTi4K
LSAgICogVE9ETyhvamFuKTogU2hvdWxkIHdlIGFsc28gY29uc29saWRhdGUgIk1BQy1TTk9XTEVP
UEFSRCBNQUMtU05PV0xFT1BBUkQtR1BVIiB0byBNQUMtU05PV0xFT1BBUkQKLSAgICogb3IgaXMg
dGhhdCBtb3JlIGNvbmZ1c2luZz8KLSAgICovCi0gIGZ1bmN0aW9uIGNvbnNvbGlkYXRlVXNlZFBs
YXRmb3Jtcyhjb250YWluZXIpIHsKK30KKworLyoqCisgKiBDb25zb2xpZGF0ZSBwbGF0Zm9ybXMg
d2hlbiBhbGwgc3ViLXBsYXRmb3JtcyBmb3IgYSBnaXZlbiBwbGF0Zm9ybSBhcmUgcmVwcmVzZW50
ZWQuCisgKiBlLmcuLCBpZiBhbGwgb2YgdGhlIFdJTi0gcGxhdGZvcm1zIGFyZSB0aGVyZSwgcmVw
bGFjZSB0aGVtIHdpdGgganVzdCBXSU4uCisgKiBUT0RPKG9qYW4pOiBTaG91bGQgd2UgYWxzbyBj
b25zb2xpZGF0ZSAiTUFDLVNOT1dMRU9QQVJEIE1BQy1TTk9XTEVPUEFSRC1HUFUiIHRvIE1BQy1T
Tk9XTEVPUEFSRAorICogb3IgaXMgdGhhdCBtb3JlIGNvbmZ1c2luZz8KKyAqLworZnVuY3Rpb24g
Y29uc29saWRhdGVVc2VkUGxhdGZvcm1zKGNvbnRhaW5lcikKK3sKICAgICB2YXIgYWxsUGxhdGZv
cm1zID0gT2JqZWN0LmtleXMoZmFsbGJhY2tzTWFwKTsKIAogICAgIHZhciBwbGF0Zm9ybUVsZW1l
bnRzID0gY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BsYXRmb3JtcycpOwogICAg
IGZvciAodmFyIGkgPSAwLCBwbGF0Zm9ybXNMZW5ndGggPSBwbGF0Zm9ybUVsZW1lbnRzLmxlbmd0
aDsgaSA8IHBsYXRmb3Jtc0xlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdXNlZFBsYXRmb3JtcyA9
IHBsYXRmb3JtRWxlbWVudHNbaV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndXNlZC1wbGF0Zm9y
bScpOwotICAgICAgaWYgKCF1c2VkUGxhdGZvcm1zLmxlbmd0aCkKLSAgICAgICAgY29udGludWU7
Ci0KLSAgICAgIHZhciBwbGF0Zm9ybXMgPSB7fTsKLSAgICAgIHBsYXRmb3Jtc1snTUFDJ10gPSB7
fTsKLSAgICAgIHBsYXRmb3Jtc1snV0lOJ10gPSB7fTsKLSAgICAgIHBsYXRmb3Jtc1snTElOVVgn
XSA9IHt9OwotICAgICAgYWxsUGxhdGZvcm1zLmZvckVhY2goZnVuY3Rpb24ocGxhdGZvcm0pIHsK
LSAgICAgICAgaWYgKHN0YXJ0c1dpdGgocGxhdGZvcm0sICdNQUMnKSkKLSAgICAgICAgICBwbGF0
Zm9ybXNbJ01BQyddW3BsYXRmb3JtXSA9IDE7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXJ0c1dpdGgo
cGxhdGZvcm0sICdXSU4nKSkKLSAgICAgICAgICBwbGF0Zm9ybXNbJ1dJTiddW3BsYXRmb3JtXSA9
IDE7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXJ0c1dpdGgocGxhdGZvcm0sICdMSU5VWCcpKQotICAg
ICAgICAgIHBsYXRmb3Jtc1snTElOVVgnXVtwbGF0Zm9ybV0gPSAxOwotICAgICAgfSk7Ci0KLSAg
ICAgIGZvciAodmFyIGogPSAwLCB1c2VkUGxhdGZvcm1zTGVuZ3RoID0gdXNlZFBsYXRmb3Jtcy5s
ZW5ndGg7IGogPCB1c2VkUGxhdGZvcm1zTGVuZ3RoOyBqKyspIHsKLSAgICAgICAgZm9yICh2YXIg
cGxhdGZvcm0gaW4gcGxhdGZvcm1zKSB7Ci0gICAgICAgICAgZGVsZXRlIHBsYXRmb3Jtc1twbGF0
Zm9ybV1bdXNlZFBsYXRmb3Jtc1tqXS50ZXh0Q29udGVudF07CisgICAgICAgIHZhciB1c2VkUGxh
dGZvcm1zID0gcGxhdGZvcm1FbGVtZW50c1tpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1c2Vk
LXBsYXRmb3JtJyk7CisgICAgICAgIGlmICghdXNlZFBsYXRmb3Jtcy5sZW5ndGgpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICB2YXIgcGxhdGZvcm1zID0ge307CisgICAgICAgIHBs
YXRmb3Jtc1snTUFDJ10gPSB7fTsKKyAgICAgICAgcGxhdGZvcm1zWydXSU4nXSA9IHt9OworICAg
ICAgICBwbGF0Zm9ybXNbJ0xJTlVYJ10gPSB7fTsKKyAgICAgICAgYWxsUGxhdGZvcm1zLmZvckVh
Y2goZnVuY3Rpb24ocGxhdGZvcm0pIHsKKyAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKHBsYXRm
b3JtLCAnTUFDJykpCisgICAgICAgICAgICAgICAgcGxhdGZvcm1zWydNQUMnXVtwbGF0Zm9ybV0g
PSAxOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChwbGF0Zm9ybSwgJ1dJTicpKQor
ICAgICAgICAgICAgICAgIHBsYXRmb3Jtc1snV0lOJ11bcGxhdGZvcm1dID0gMTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHN0YXJ0c1dpdGgocGxhdGZvcm0sICdMSU5VWCcpKQorICAgICAgICAgICAg
ICAgIHBsYXRmb3Jtc1snTElOVVgnXVtwbGF0Zm9ybV0gPSAxOworICAgICAgICB9KTsKKworICAg
ICAgICBmb3IgKHZhciBqID0gMCwgdXNlZFBsYXRmb3Jtc0xlbmd0aCA9IHVzZWRQbGF0Zm9ybXMu
bGVuZ3RoOyBqIDwgdXNlZFBsYXRmb3Jtc0xlbmd0aDsgaisrKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXMpCisgICAgICAgICAgICAgICAgZGVsZXRlIHBsYXRm
b3Jtc1twbGF0Zm9ybV1bdXNlZFBsYXRmb3Jtc1tqXS50ZXh0Q29udGVudF07CiAgICAgICAgIH0K
LSAgICAgIH0KLQotICAgICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gcGxhdGZvcm1zKSB7Ci0gICAg
ICAgIGlmICghT2JqZWN0LmtleXMocGxhdGZvcm1zW3BsYXRmb3JtXSkubGVuZ3RoKSB7Ci0gICAg
ICAgICAgdmFyIG5vZGVzVG9SZW1vdmUgPSBbXTsKLSAgICAgICAgICBmb3IgKHZhciBqID0gMCwg
dXNlZFBsYXRmb3Jtc0xlbmd0aCA9IHVzZWRQbGF0Zm9ybXMubGVuZ3RoOyBqIDwgdXNlZFBsYXRm
b3Jtc0xlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICB2YXIgdXNlZFBsYXRmb3JtID0gdXNlZFBs
YXRmb3Jtc1tqXTsKLSAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKHVzZWRQbGF0Zm9ybS50ZXh0
Q29udGVudCwgcGxhdGZvcm0pKQotICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLnB1c2godXNl
ZFBsYXRmb3JtKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmZvckVh
Y2goZnVuY3Rpb24oZWxlbWVudCkgeyBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxl
bWVudCk7IH0pOwotICAgICAgICAgIHBsYXRmb3JtRWxlbWVudHNbaV0uaW5zZXJ0QWRqYWNlbnRI
VE1MKCdhZnRlckJlZ2luJywgJzxkaXYgY2xhc3M9dXNlZC1wbGF0Zm9ybT4nICsgcGxhdGZvcm0g
KyAnPC9kaXY+Jyk7CisKKyAgICAgICAgZm9yICh2YXIgcGxhdGZvcm0gaW4gcGxhdGZvcm1zKSB7
CisgICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKHBsYXRmb3Jtc1twbGF0Zm9ybV0pLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgIHZhciBub2Rlc1RvUmVtb3ZlID0gW107CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaiA9IDAsIHVzZWRQbGF0Zm9ybXNMZW5ndGggPSB1c2VkUGxhdGZvcm1z
Lmxlbmd0aDsgaiA8IHVzZWRQbGF0Zm9ybXNMZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgdXNlZFBsYXRmb3JtID0gdXNlZFBsYXRmb3Jtc1tqXTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YXJ0c1dpdGgodXNlZFBsYXRmb3JtLnRleHRDb250ZW50LCBwbGF0Zm9ybSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLnB1c2godXNlZFBsYXRmb3Jt
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmZv
ckVhY2goZnVuY3Rpb24oZWxlbWVudCkgeyBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
ZWxlbWVudCk7IH0pOworICAgICAgICAgICAgICAgIHBsYXRmb3JtRWxlbWVudHNbaV0uaW5zZXJ0
QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywgJzxkaXYgY2xhc3M9dXNlZC1wbGF0Zm9ybT4nICsg
cGxhdGZvcm0gKyAnPC9kaXY+Jyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0K
ICAgICB9Ci0gIH0KK30KIAotICBmdW5jdGlvbiBhZGRFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25z
Q29udGFpbmVycywgY29udGFpbmVyLCBiYXNlLAotICAgICAgICBwbGF0Zm9ybSwgdGV4dCwgcG5n
LCByZWZ0ZXN0X2h0bWxfZmlsZSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUpIHsKK2Z1bmN0
aW9uIGFkZEV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIGJh
c2UsCisgICAgcGxhdGZvcm0sIHRleHQsIHBuZywgcmVmdGVzdF9odG1sX2ZpbGUsIHJlZnRlc3Rf
bWlzbWF0Y2hfaHRtbF9maWxlKQorewogICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlv
bnNDb250YWluZXJzLCBjb250YWluZXIsIHBsYXRmb3JtLCB0ZXh0LCBiYXNlKTsKICAgICBhZGRF
eHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgY29udGFpbmVyLCBwbGF0Zm9y
bSwgcG5nLCBiYXNlKTsKICAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFp
bmVycywgY29udGFpbmVyLCBwbGF0Zm9ybSwgcmVmdGVzdF9odG1sX2ZpbGUsIGJhc2UpOwogICAg
IGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIHBs
YXRmb3JtLCByZWZ0ZXN0X21pc21hdGNoX2h0bWxfZmlsZSwgYmFzZSk7Ci0gIH0KK30KIAotICBm
dW5jdGlvbiBnZXRFeHBlY3RhdGlvbnNUaXRsZShwbGF0Zm9ybSwgcGF0aCwgYnVpbGRlcikgewor
ZnVuY3Rpb24gZ2V0RXhwZWN0YXRpb25zVGl0bGUocGxhdGZvcm0sIHBhdGgsIGJ1aWxkZXIpCit7
CiAgICAgdmFyIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gzJyk7CiAgICAgaGVh
ZGVyLmNsYXNzTmFtZSA9ICdleHBlY3RhdGlvbnMtdGl0bGUnOwogCiAgICAgdmFyIGlubmVySFRN
TDsKICAgICBpZiAoYnVpbGRlcikgewotICAgICAgdmFyIHJlc3VsdHNUeXBlOwotICAgICAgaWYg
KGVuZHNXaXRoKHBhdGgsICctY3Jhc2gtbG9nLnR4dCcpKSB7Ci0gICAgICAgIHJlc3VsdHNUeXBl
ID0gJ1NUQUNLVFJBQ0UnOwotICAgICAgfSBlbHNlIGlmIChlbmRzV2l0aChwYXRoLCAnLWFjdHVh
bC50eHQnKSB8fAotICAgICAgICAgICAgICAgICBlbmRzV2l0aChwYXRoLCAnLWFjdHVhbC5wbmcn
KSkgewotICAgICAgICByZXN1bHRzVHlwZSA9ICdBQ1RVQUwgUkVTVUxUUyc7Ci0gICAgICB9IGVs
c2UgaWYgKGVuZHNXaXRoKHBhdGgsICctd2RpZmYuaHRtbCcpKSB7Ci0gICAgICAgIHJlc3VsdHNU
eXBlID0gJ1dESUZGJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdHNUeXBlID0gJ0RJ
RkYnOwotICAgICAgfQotICAgICAgaW5uZXJIVE1MID0gcmVzdWx0c1R5cGUgKyAnOiAnICsgYnVp
bGRlcjsKKyAgICAgICAgdmFyIHJlc3VsdHNUeXBlOworICAgICAgICBpZiAoZW5kc1dpdGgocGF0
aCwgJy1jcmFzaC1sb2cudHh0JykpCisgICAgICAgICAgICByZXN1bHRzVHlwZSA9ICdTVEFDS1RS
QUNFJzsKKyAgICAgICAgZWxzZSBpZiAoZW5kc1dpdGgocGF0aCwgJy1hY3R1YWwudHh0JykgfHwg
ZW5kc1dpdGgocGF0aCwgJy1hY3R1YWwucG5nJykpCisgICAgICAgICAgICByZXN1bHRzVHlwZSA9
ICdBQ1RVQUwgUkVTVUxUUyc7CisgICAgICAgIGVsc2UgaWYgKGVuZHNXaXRoKHBhdGgsICctd2Rp
ZmYuaHRtbCcpKQorICAgICAgICAgICAgcmVzdWx0c1R5cGUgPSAnV0RJRkYnOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXN1bHRzVHlwZSA9ICdESUZGJzsKKworICAgICAgICBpbm5lckhU
TUwgPSByZXN1bHRzVHlwZSArICc6ICcgKyBidWlsZGVyOwogICAgIH0gZWxzZSBpZiAocGxhdGZv
cm0gPT09ICIiKSB7Ci0gICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7Ci0gICAgICBp
bm5lckhUTUwgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKLSAgICB9IGVsc2UgewotICAgICAg
aW5uZXJIVE1MID0gcGxhdGZvcm0gfHwgcGF0aDsKLSAgICB9CisgICAgICAgIHZhciBwYXJ0cyA9
IHBhdGguc3BsaXQoJy8nKTsKKyAgICAgICAgaW5uZXJIVE1MID0gcGFydHNbcGFydHMubGVuZ3Ro
IC0gMV07CisgICAgfSBlbHNlCisgICAgICAgIGlubmVySFRNTCA9IHBsYXRmb3JtIHx8IHBhdGg7
CiAKICAgICBoZWFkZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9dGl0bGU+JyArIGlubmVySFRN
TCArCiAgICAgICAgICc8L2Rpdj48ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij4mbmJzcDs8L2Rpdj4n
ICsKICAgICAgICAgJzxkaXYgY2xhc3M9cGxhdGZvcm1zIHN0eWxlPSJmbG9hdDpyaWdodCI+PC9k
aXY+JzsKICAgICBoZWFkZXIucGxhdGZvcm0gPSBwbGF0Zm9ybTsKICAgICByZXR1cm4gaGVhZGVy
OwotICB9Ci0KLSAgZnVuY3Rpb24gbG9hZEV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWlu
ZXIpIHsKLSAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7Ci0gICAgICBsb2FkRXhwZWN0
YXRpb25zTGF5b3V0VGVzdHMoZXhwZWN0YXRpb25zQ29udGFpbmVyKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgdmFyIHRlc3QgPSBleHBlY3RhdGlvbnNDb250YWluZXIuZ2V0QXR0cmlidXRlKCd0ZXN0
Jyk7Ci0gICAgICB2YXIgcmVzdWx0cyA9IHRlc3RUb1Jlc3VsdHNNYXBbdGVzdF07Ci0gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbG9hZE5v
bldlYktpdFJlc3VsdHNGb3JCdWlsZGVyKHJlc3VsdHNbaV0uYnVpbGRlciwgdGVzdCwKLSAgICAg
ICAgICAgIGV4cGVjdGF0aW9uc0NvbnRhaW5lcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
ZnVuY3Rpb24gbG9hZE5vbldlYktpdFJlc3VsdHNGb3JCdWlsZGVyKGJ1aWxkZXIsIHRlc3QsCi0g
ICAgICBleHBlY3RhdGlvbnNDb250YWluZXIpIHsKK30KKworZnVuY3Rpb24gbG9hZEV4cGVjdGF0
aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXIpCit7CisgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3Vs
dHMoKSkKKyAgICAgICAgbG9hZEV4cGVjdGF0aW9uc0xheW91dFRlc3RzKGV4cGVjdGF0aW9uc0Nv
bnRhaW5lcik7CisgICAgZWxzZSB7CisgICAgICAgIHZhciB0ZXN0ID0gZXhwZWN0YXRpb25zQ29u
dGFpbmVyLmdldEF0dHJpYnV0ZSgndGVzdCcpOworICAgICAgICB2YXIgcmVzdWx0cyA9IHRlc3RU
b1Jlc3VsdHNNYXBbdGVzdF07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5s
ZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGxvYWROb25XZWJLaXRSZXN1bHRzRm9yQnVpbGRlcihy
ZXN1bHRzW2ldLmJ1aWxkZXIsIHRlc3QsIGV4cGVjdGF0aW9uc0NvbnRhaW5lcik7CisgICAgfQor
fQorCitmdW5jdGlvbiBsb2FkTm9uV2ViS2l0UmVzdWx0c0ZvckJ1aWxkZXIoYnVpbGRlciwgdGVz
dCwgZXhwZWN0YXRpb25zQ29udGFpbmVyKQorewogICAgIHZhciBmYWlsdXJlcyA9IGdldEJ1aWxk
TnVtYmVyc0ZvckZhaWx1cmVzKGJ1aWxkZXIsIHRlc3QpOwogICAgIHZhciBjb250YWluZXIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICBjb250YWluZXIuaW5uZXJIVE1MID0g
JzxkaXY+PGI+JyArIGJ1aWxkZXIgKyAnPC9iPjwvZGl2Pic7CiAgICAgZXhwZWN0YXRpb25zQ29u
dGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBm
YWlsdXJlcy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHBhdGhUb0xvZyA9IGdldEJ1aWxkZXJN
YXN0ZXIoYnVpbGRlcikuZ2V0TG9nUGF0aChidWlsZGVyLCBmYWlsdXJlc1tpXSkgKwotICAgICAg
ICAgIGdldFBhdGhUb0ZhaWx1cmVMb2codGVzdCk7Ci0gICAgICBhcHBlbmROb25XZWJLaXRSZXN1
bHRzKGNvbnRhaW5lciwgcGF0aFRvTG9nKTsKKyAgICAgICAgdmFyIHBhdGhUb0xvZyA9IGdldEJ1
aWxkZXJNYXN0ZXIoYnVpbGRlcikuZ2V0TG9nUGF0aChidWlsZGVyLCBmYWlsdXJlc1tpXSkgKyBn
ZXRQYXRoVG9GYWlsdXJlTG9nKHRlc3QpOworICAgICAgICBhcHBlbmROb25XZWJLaXRSZXN1bHRz
KGNvbnRhaW5lciwgcGF0aFRvTG9nKTsKICAgICB9Ci0gIH0KK30KIAotICBmdW5jdGlvbiBhcHBl
bmROb25XZWJLaXRSZXN1bHRzKGNvbnRhaW5lciwgdXJsKSB7CitmdW5jdGlvbiBhcHBlbmROb25X
ZWJLaXRSZXN1bHRzKGNvbnRhaW5lciwgdXJsKQorewogICAgIC8vIFVzZSBhIHNjcmlwdCB0YWcg
dG8gZGV0ZWN0IHdoZXRoZXIgdGhlIFVSTCA0MDRzLgogICAgIC8vIE5lZWQgdG8gdXNlIGEgc2Ny
aXB0IHRhZyBzaW5jZSB0aGUgVVJMIGlzIGNyb3NzLWRvbWFpbi4KICAgICB2YXIgZHVtbXlOb2Rl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgZHVtbXlOb2RlLnNyYyA9
IHVybDsKIAogICAgIGR1bW15Tm9kZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBp
dGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7Ci0gICAgICBpdGVtLnNyYyA9
IGR1bW15Tm9kZS5zcmM7Ci0gICAgICBpdGVtLmNsYXNzTmFtZSA9ICdub24td2Via2l0LXJlc3Vs
dHMnOwotICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBjdXJyZW50U3RhdGUucmVzdWx0c0hlaWdo
dCArICdweCc7Ci0gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaXRlbSk7CisgICAgICAgIHZh
ciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgIGl0ZW0u
c3JjID0gZHVtbXlOb2RlLnNyYzsKKyAgICAgICAgaXRlbS5jbGFzc05hbWUgPSAnbm9uLXdlYmtp
dC1yZXN1bHRzJzsKKyAgICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBjdXJyZW50U3RhdGUucmVz
dWx0c0hlaWdodCArICdweCc7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKTsK
ICAgICB9CiAgICAgZHVtbXlOb2RlLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnRh
aW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkQ29udGFpbmVyKTsKKyAgICAgICAgY29u
dGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGRDb250YWluZXIpOwogICAgIH0KIAog
ICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkdW1teU5vZGUpOwotICB9Cit9CiAKLSAgZnVuY3Rp
b24gYnVpbGRJbmZvRm9yUmV2aXNpb24oYnVpbGRlciwgcmV2aXNpb24pIHsKK2Z1bmN0aW9uIGJ1
aWxkSW5mb0ZvclJldmlzaW9uKGJ1aWxkZXIsIHJldmlzaW9uKQorewogICAgIHZhciByZXZpc2lv
bnMgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uOwogICAgIHZhciBy
ZXZpc2lvblN0YXJ0ID0gMCwgcmV2aXNpb25FbmQgPSAwLCBidWlsZE51bWJlciA9IDA7CiAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCByZXZpc2lvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChy
ZXZpc2lvbiA+IHJldmlzaW9uc1tpXSkgewotICAgICAgICByZXZpc2lvblN0YXJ0ID0gcmV2aXNp
b25zW2kgLSAxXTsKLSAgICAgICAgcmV2aXNpb25FbmQgPSByZXZpc2lvbnNbaV07Ci0gICAgICAg
IGJ1aWxkTnVtYmVyID0gcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaSAt
IDFdOwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICAgICAgaWYgKHJldmlzaW9uID4gcmV2
aXNpb25zW2ldKSB7CisgICAgICAgICAgICByZXZpc2lvblN0YXJ0ID0gcmV2aXNpb25zW2kgLSAx
XTsKKyAgICAgICAgICAgIHJldmlzaW9uRW5kID0gcmV2aXNpb25zW2ldOworICAgICAgICAgICAg
YnVpbGROdW1iZXIgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVyc1tpIC0g
MV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChyZXZp
c2lvbkVuZCkKQEAgLTIzNTIsMTEgKzIyODEsMTEgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICBlbHNlCiAg
ICAgICByZXZpc2lvbkVuZCA9ICcnOwogCi0gICAgcmV0dXJuIHtyZXZpc2lvblN0YXJ0OiByZXZp
c2lvblN0YXJ0LCByZXZpc2lvbkVuZDogcmV2aXNpb25FbmQsCi0gICAgICAgIGJ1aWxkTnVtYmVy
OiBidWlsZE51bWJlcn07Ci0gIH0KKyAgICByZXR1cm4ge3JldmlzaW9uU3RhcnQ6IHJldmlzaW9u
U3RhcnQsIHJldmlzaW9uRW5kOiByZXZpc2lvbkVuZCwgYnVpbGROdW1iZXI6IGJ1aWxkTnVtYmVy
fTsKK30KIAotICBmdW5jdGlvbiBsb2FkRXhwZWN0YXRpb25zTGF5b3V0VGVzdHMoZXhwZWN0YXRp
b25zQ29udGFpbmVyKSB7CitmdW5jdGlvbiBsb2FkRXhwZWN0YXRpb25zTGF5b3V0VGVzdHMoZXhw
ZWN0YXRpb25zQ29udGFpbmVyKQorewogICAgIC8vIE1hcCBmcm9tIGZpbGUgZXh0ZW5zaW9uIHRv
IGNvbnRhaW5lciBkaXYgZm9yIGV4cGVjdGF0aW9ucyBvZiB0aGF0IHR5cGUuCiAgICAgdmFyIGV4
cGVjdGF0aW9uc0NvbnRhaW5lcnMgPSB7fTsKICAgICB2YXIgdGVzdCA9IGV4cGVjdGF0aW9uc0Nv
bnRhaW5lci5nZXRBdHRyaWJ1dGUoJ3Rlc3QnKTsKQEAgLTIzNjUsMjEgKzIyOTQsMTggQEAgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAgICByZXZpc2lvbkNvbnRhaW5lci50ZXh0Q29udGVudCA9ICJTaG93aW5nIHJl
c3VsdHMgZm9yOiAiCiAgICAgZXhwZWN0YXRpb25zQ29udGFpbmVyLmFwcGVuZENoaWxkKHJldmlz
aW9uQ29udGFpbmVyKTsKICAgICBmb3IgKHZhciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7Ci0gICAg
ICBpZiAoZ2V0QnVpbGRlck1hc3RlcihidWlsZGVyKSA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIp
IHsKLSAgICAgICAgdmFyIGxhdGVzdFJldmlzaW9uID0gY3VycmVudFN0YXRlLnJldmlzaW9uIHx8
Ci0gICAgICAgICAgICByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uWzBd
OwotICAgICAgICB2YXIgYnVpbGRJbmZvID0gYnVpbGRJbmZvRm9yUmV2aXNpb24oYnVpbGRlciwg
bGF0ZXN0UmV2aXNpb24pOwotICAgICAgICB2YXIgcmV2aXNpb25JbmZvID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgIHJldmlzaW9uSW5mby5zdHlsZS5jc3NUZXh0ID0g
J2JhY2tncm91bmQ6bGlnaHRncmF5O21hcmdpbjowIDNweDsnICsKLSAgICAgICAgICAgICdwYWRk
aW5nOjAgMnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrOyc7Ci0gICAgICAgIHJldmlzaW9uSW5mby5p
bm5lckhUTUwgPSBidWlsZGVyICsgJyByJyArIGJ1aWxkSW5mby5yZXZpc2lvbkVuZCArCi0gICAg
ICAgICAgICAnOnInICsgYnVpbGRJbmZvLnJldmlzaW9uU3RhcnQgKyAnLCBidWlsZCAnICsgYnVp
bGRJbmZvLmJ1aWxkTnVtYmVyOwotICAgICAgICByZXZpc2lvbkNvbnRhaW5lci5hcHBlbmRDaGls
ZChyZXZpc2lvbkluZm8pOwotICAgICAgfQorICAgICAgICBpZiAoZ2V0QnVpbGRlck1hc3Rlcihi
dWlsZGVyKSA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKKyAgICAgICAgICAgIHZhciBsYXRl
c3RSZXZpc2lvbiA9IGN1cnJlbnRTdGF0ZS5yZXZpc2lvbiB8fCByZXN1bHRzQnlCdWlsZGVyW2J1
aWxkZXJdLndlYmtpdFJldmlzaW9uWzBdOworICAgICAgICAgICAgdmFyIGJ1aWxkSW5mbyA9IGJ1
aWxkSW5mb0ZvclJldmlzaW9uKGJ1aWxkZXIsIGxhdGVzdFJldmlzaW9uKTsKKyAgICAgICAgICAg
IHZhciByZXZpc2lvbkluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAg
ICAgICAgIHJldmlzaW9uSW5mby5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6bGlnaHRncmF5
O21hcmdpbjowIDNweDtwYWRkaW5nOjAgMnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrOyc7CisgICAg
ICAgICAgICByZXZpc2lvbkluZm8uaW5uZXJIVE1MID0gYnVpbGRlciArICcgcicgKyBidWlsZElu
Zm8ucmV2aXNpb25FbmQgKworICAgICAgICAgICAgICAgICc6cicgKyBidWlsZEluZm8ucmV2aXNp
b25TdGFydCArICcsIGJ1aWxkICcgKyBidWlsZEluZm8uYnVpbGROdW1iZXI7CisgICAgICAgICAg
ICByZXZpc2lvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChyZXZpc2lvbkluZm8pOworICAgICAgICB9
CiAgICAgfQogCi0gICAgYWRkRXhwZWN0YXRpb25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMs
IGV4cGVjdGF0aW9uc0NvbnRhaW5lciwgbnVsbCwKLSAgICAgICAgdGVzdCwgVEVTVF9VUkxfQkFT
RV9QQVRIKTsKKyAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywg
ZXhwZWN0YXRpb25zQ29udGFpbmVyLCBudWxsLCB0ZXN0LCBURVNUX1VSTF9CQVNFX1BBVEgpOwog
CiAgICAgdmFyIHRlc3RXaXRob3V0U3VmZml4ID0gdGVzdC5zdWJzdHJpbmcoMCwgdGVzdC5sYXN0
SW5kZXhPZignLicpKTsKICAgICB2YXIgdGV4dCA9IHRlc3RXaXRob3V0U3VmZml4ICsgIi1leHBl
Y3RlZC50eHQiOwpAQCAtMjM4OCwzNyArMjMxNCwzMSBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIHZhciBy
ZWZ0ZXN0X21pc21hdGNoX2h0bWxfZmlsZSA9IHRlc3RXaXRob3V0U3VmZml4ICsgIi1leHBlY3Rl
ZC1taXNtYXRjaC5odG1sIjsKIAogICAgIGFkZEV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnNDb250
YWluZXJzLCBleHBlY3RhdGlvbnNDb250YWluZXIsCi0gICAgICAgIFRFU1RfVVJMX0JBU0VfUEFU
SCwgJycsIHRleHQsIHBuZywgcmVmdGVzdF9odG1sX2ZpbGUsCi0gICAgICAgIHJlZnRlc3RfbWlz
bWF0Y2hfaHRtbF9maWxlKTsKKyAgICAgICAgVEVTVF9VUkxfQkFTRV9QQVRILCAnJywgdGV4dCwg
cG5nLCByZWZ0ZXN0X2h0bWxfZmlsZSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUpOwogCiAg
ICAgdmFyIGZhbGxiYWNrcyA9IGdldEFsbEZhbGxiYWNrcygpOwogICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZmFsbGJhY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgICB2YXIgZmFsbGJhY2sgPSAncGxh
dGZvcm0vJyArIGZhbGxiYWNrc1tpXTsKLSAgICAgIGFkZEV4cGVjdGF0aW9ucyhleHBlY3RhdGlv
bnNDb250YWluZXJzLCBleHBlY3RhdGlvbnNDb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgVEVTVF9VUkxfQkFTRV9QQVRILCBmYWxsYmFjaywgdGV4dCwgcG5nLAotICAgICAgICAgICAg
ICAgICAgICAgIHJlZnRlc3RfaHRtbF9maWxlLCByZWZ0ZXN0X21pc21hdGNoX2h0bWxfZmlsZSk7
CisgICAgICBhZGRFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRp
b25zQ29udGFpbmVyLCBURVNUX1VSTF9CQVNFX1BBVEgsIGZhbGxiYWNrLCB0ZXh0LCBwbmcsCisg
ICAgICAgICAgcmVmdGVzdF9odG1sX2ZpbGUsIHJlZnRlc3RfbWlzbWF0Y2hfaHRtbF9maWxlKTsK
ICAgICB9CiAKLSAgICB2YXIgYWN0dWFsUmVzdWx0U3VmZml4ZXMgPSBbJy1hY3R1YWwudHh0Jywg
Jy1hY3R1YWwucG5nJywgJy1jcmFzaC1sb2cudHh0JywKLSAgICAgICAgJy1kaWZmLnR4dCcsICct
d2RpZmYuaHRtbCcsICctZGlmZi5wbmcnXTsKKyAgICB2YXIgYWN0dWFsUmVzdWx0U3VmZml4ZXMg
PSBbJy1hY3R1YWwudHh0JywgJy1hY3R1YWwucG5nJywgJy1jcmFzaC1sb2cudHh0JywgJy1kaWZm
LnR4dCcsICctd2RpZmYuaHRtbCcsICctZGlmZi5wbmcnXTsKIAogICAgIGZvciAodmFyIGJ1aWxk
ZXIgaW4gYnVpbGRlcnMpIHsKLSAgICAgIHZhciBhY3R1YWxSZXN1bHRzQmFzZTsKLSAgICAgIGlm
IChnZXRCdWlsZGVyTWFzdGVyKGJ1aWxkZXIpID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgewot
ICAgICAgICB2YXIgbGF0ZXN0UmV2aXNpb24gPSBjdXJyZW50U3RhdGUucmV2aXNpb24gfHwKLSAg
ICAgICAgICAgIHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb25bMF07Ci0g
ICAgICAgIHZhciBidWlsZEluZm8gPSBidWlsZEluZm9Gb3JSZXZpc2lvbihidWlsZGVyLCBsYXRl
c3RSZXZpc2lvbik7Ci0gICAgICAgIGFjdHVhbFJlc3VsdHNCYXNlID0gJ2h0dHA6Ly9idWlsZC53
ZWJraXQub3JnL3Jlc3VsdHMvJyArIGJ1aWxkZXIgKwotICAgICAgICAgICAgJy9yJyArIGJ1aWxk
SW5mby5yZXZpc2lvblN0YXJ0ICsgJyAoJyArIGJ1aWxkSW5mby5idWlsZE51bWJlciArICcpLyc7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhY3R1YWxSZXN1bHRzQmFzZSA9IFRFU1RfUkVTVUxU
U19CQVNFX1BBVEggKwotICAgICAgICAgICAgYnVpbGRlcnNbYnVpbGRlcl0gKyAnL3Jlc3VsdHMv
bGF5b3V0LXRlc3QtcmVzdWx0cy8nOwotICAgICAgfQotICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhY3R1YWxSZXN1bHRTdWZmaXhlcy5sZW5ndGg7IGkrKykgewotICAgICAgICBhZGRFeHBlY3Rh
dGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVyLCBu
dWxsLAotICAgICAgICAgICAgdGVzdFdpdGhvdXRTdWZmaXggKyBhY3R1YWxSZXN1bHRTdWZmaXhl
c1tpXSwgYWN0dWFsUmVzdWx0c0Jhc2UsCi0gICAgICAgICAgICBidWlsZGVyKTsKLSAgICAgIH0K
KyAgICAgICAgdmFyIGFjdHVhbFJlc3VsdHNCYXNlOworICAgICAgICBpZiAoZ2V0QnVpbGRlck1h
c3RlcihidWlsZGVyKSA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKKyAgICAgICAgICAgIHZh
ciBsYXRlc3RSZXZpc2lvbiA9IGN1cnJlbnRTdGF0ZS5yZXZpc2lvbiB8fCByZXN1bHRzQnlCdWls
ZGVyW2J1aWxkZXJdLndlYmtpdFJldmlzaW9uWzBdOworICAgICAgICAgICAgdmFyIGJ1aWxkSW5m
byA9IGJ1aWxkSW5mb0ZvclJldmlzaW9uKGJ1aWxkZXIsIGxhdGVzdFJldmlzaW9uKTsKKyAgICAg
ICAgICAgIGFjdHVhbFJlc3VsdHNCYXNlID0gJ2h0dHA6Ly9idWlsZC53ZWJraXQub3JnL3Jlc3Vs
dHMvJyArIGJ1aWxkZXIgKworICAgICAgICAgICAgICAgICcvcicgKyBidWlsZEluZm8ucmV2aXNp
b25TdGFydCArICcgKCcgKyBidWlsZEluZm8uYnVpbGROdW1iZXIgKyAnKS8nOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGFjdHVhbFJlc3VsdHNCYXNlID0gVEVTVF9SRVNVTFRTX0JBU0Vf
UEFUSCArIGJ1aWxkZXJzW2J1aWxkZXJdICsgJy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMv
JzsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbFJlc3VsdFN1ZmZpeGVzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25z
Q29udGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVyLCBudWxsLAorICAgICAgICAgICAgICAg
IHRlc3RXaXRob3V0U3VmZml4ICsgYWN0dWFsUmVzdWx0U3VmZml4ZXNbaV0sIGFjdHVhbFJlc3Vs
dHNCYXNlLCBidWlsZGVyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEFkZCBhIGNsZWFy
aW5nIGVsZW1lbnQgc28gZmxvYXRlZCBlbGVtZW50cyBkb24ndCBibGVlZCBvdXQgb2YgdGhlaXIK
QEAgLTI0MjYsMTAyICsyMzQ2LDkzIEBAIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgdmFyIGJyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYnInKTsKICAgICBici5zdHlsZS5jbGVhciA9ICdib3RoJzsKICAg
ICBleHBlY3RhdGlvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoYnIpOwotICB9Cit9CiAKLSAgdmFy
IGFsbEZhbGxiYWNrczsKK3ZhciBhbGxGYWxsYmFja3M7CiAKLSAgLyoqCi0gICAqIFJldHVybnMg
dGhlIHJldmVyc2Ugc29ydGVkLCBkZWR1cGVkIGxpc3Qgb2YgYWxsIHBsYXRmb3JtIGZhbGxiYWNr
Ci0gICAqIGRpcmVjdG9yaWVzLgotICAgKi8KLSAgZnVuY3Rpb24gZ2V0QWxsRmFsbGJhY2tzKCkg
eworLyoqCisgKiBSZXR1cm5zIHRoZSByZXZlcnNlIHNvcnRlZCwgZGVkdXBlZCBsaXN0IG9mIGFs
bCBwbGF0Zm9ybSBmYWxsYmFjaworICogZGlyZWN0b3JpZXMuCisgKi8KK2Z1bmN0aW9uIGdldEFs
bEZhbGxiYWNrcygpCit7CiAgICAgaWYgKCFhbGxGYWxsYmFja3MpIHsKLSAgICAgIHZhciBob2xk
ZXIgPSB7fTsKLSAgICAgIGZvciAodmFyIHBsYXRmb3JtIGluIGZhbGxiYWNrc01hcCkgewotICAg
ICAgICB2YXIgZmFsbGJhY2tzID0gZmFsbGJhY2tzTWFwW3BsYXRmb3JtXTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBmYWxsYmFja3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBob2xk
ZXJbZmFsbGJhY2tzW2ldXSA9IDE7CisgICAgICAgIHZhciBob2xkZXIgPSB7fTsKKyAgICAgICAg
Zm9yICh2YXIgcGxhdGZvcm0gaW4gZmFsbGJhY2tzTWFwKSB7CisgICAgICAgICAgICB2YXIgZmFs
bGJhY2tzID0gZmFsbGJhY2tzTWFwW3BsYXRmb3JtXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZmFsbGJhY2tzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGhvbGRlcltm
YWxsYmFja3NbaV1dID0gMTsKICAgICAgICAgfQotICAgICAgfQotCi0gICAgICBhbGxGYWxsYmFj
a3MgPSBbXTsKLSAgICAgIGZvciAodmFyIGZhbGxiYWNrIGluIGhvbGRlcikgewotICAgICAgICBh
bGxGYWxsYmFja3MucHVzaChmYWxsYmFjayk7Ci0gICAgICB9Ci0gICAgICBhbGxGYWxsYmFja3Mu
c29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiBhIDwgYjsKLSAgICAgIH0pOworCisgICAgICAgIGFsbEZh
bGxiYWNrcyA9IFtdOworICAgICAgICBmb3IgKHZhciBmYWxsYmFjayBpbiBob2xkZXIpCisgICAg
ICAgICAgICBhbGxGYWxsYmFja3MucHVzaChmYWxsYmFjayk7CisKKyAgICAgICAgYWxsRmFsbGJh
Y2tzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgaWYgKGEgPT0gYikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBhIDwgYjsKKyAgICAgICAg
fSk7CiAgICAgfQogICAgIHJldHVybiBhbGxGYWxsYmFja3M7Ci0gIH0KK30KIAotICAvKioKLSAg
ICogQXBwZW5kcyB0aGUgZXhwZWN0YXRpb25zIGZvciBlYWNoIHRlc3QgbGlzdGVkLgotICAgKi8K
LSAgZnVuY3Rpb24gYXBwZW5kRXhwZWN0YXRpb25zKCkgewotICAgIHZhciBleHBlY3RhdGlvbnMg
PSBjdXJyZW50U3RhdGUuc2hvd0V4cGVjdGF0aW9ucyA/Ci0gICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoJ2V4cGVjdGF0aW9ucycpIDogW107CitmdW5jdGlvbiBhcHBlbmRF
eHBlY3RhdGlvbnMoKQoreworICAgIHZhciBleHBlY3RhdGlvbnMgPSBjdXJyZW50U3RhdGUuc2hv
d0V4cGVjdGF0aW9ucyA/IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2V4cGVjdGF0
aW9ucycpIDogW107CiAgICAgLy8gTG9hZGluZyBleHBlY3RhdGlvbnMgaXMgKnZlcnkqIHNsb3cu
IFVzZSBhIGxhcmdlIHRpbWVvdXQgdG8gYXZvaWQKICAgICAvLyB0b3RhbGx5IGhhbmdpbmcgdGhl
IHJlbmRlcmVyLgogICAgIHBlcmZvcm1DaHVua2VkQWN0aW9uKGV4cGVjdGF0aW9ucywgZnVuY3Rp
b24oY2h1bmspIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkg
PCBsZW47IGkrKykgewotICAgICAgICBsb2FkRXhwZWN0YXRpb25zKGNodW5rW2ldKTsKLSAgICAg
IH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNodW5rLmxlbmd0aDsgaSA8IGxlbjsg
aSsrKQorICAgICAgICAgICAgbG9hZEV4cGVjdGF0aW9ucyhjaHVua1tpXSk7CiAgICAgfSwgaGlk
ZUxvYWRpbmdVSSwgMTAwMDApOwotICB9Cit9CiAKLSAgZnVuY3Rpb24gaGlkZUxvYWRpbmdVSSgp
IHsKK2Z1bmN0aW9uIGhpZGVMb2FkaW5nVUkoKQorewogICAgIHZhciBsb2FkaW5nRGl2ID0gJCgn
bG9hZGluZy11aScpOwotICAgIGlmIChsb2FkaW5nRGl2KSB7Ci0gICAgICBsb2FkaW5nRGl2LnN0
eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgfQotICB9CisgICAgaWYgKGxvYWRpbmdEaXYpCisg
ICAgICAgIGxvYWRpbmdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKK30KIAotICBmdW5jdGlv
biBnZW5lcmF0ZVBhZ2VGb3JJbmRpdmlkdWFsVGVzdHModGVzdHMpIHsKK2Z1bmN0aW9uIGdlbmVy
YXRlUGFnZUZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cykKK3sKICAgICBjb25zb2xlLmxvZygnTnVt
YmVyIG9mIHRlc3RzOiAnICsgdGVzdHMubGVuZ3RoKTsKICAgICBhcHBlbmRIVE1MKGdldEhUTUxG
b3JOYXZCYXIoKSk7CiAgICAgcGVyZm9ybUNodW5rZWRBY3Rpb24odGVzdHMsIGZ1bmN0aW9uKGNo
dW5rKSB7Ci0gICAgICBhcHBlbmRIVE1MKGdldEhUTUxGb3JJbmRpdmlkdWFsVGVzdHMoY2h1bmsp
KTsKKyAgICAgICAgYXBwZW5kSFRNTChnZXRIVE1MRm9ySW5kaXZpZHVhbFRlc3RzKGNodW5rKSk7
CiAgICAgfSwgYXBwZW5kRXhwZWN0YXRpb25zLCA1MDApOwogICAgICQoJ3Rlc3RzLWlucHV0Jyku
dmFsdWUgPSBjdXJyZW50U3RhdGUudGVzdHM7Ci0gIH0KK30KIAotICBmdW5jdGlvbiBwZXJmb3Jt
Q2h1bmtlZEFjdGlvbih0ZXN0cywgaGFuZGxlQ2h1bmssIG9uQ29tcGxldGUsIHRpbWVvdXQsCi0g
ICAgICBvcHRfaW5kZXgpIHsKK2Z1bmN0aW9uIHBlcmZvcm1DaHVua2VkQWN0aW9uKHRlc3RzLCBo
YW5kbGVDaHVuaywgb25Db21wbGV0ZSwgdGltZW91dCwgb3B0X2luZGV4KSB7CiAgICAgdmFyIGlu
ZGV4ID0gb3B0X2luZGV4IHx8IDA7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAg
IHZhciBjaHVuayA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRlc3RzLCBpbmRleCAqIENI
VU5LX1NJWkUsCi0gICAgICAgICAgKGluZGV4ICsgMSkgKiBDSFVOS19TSVpFKTsKLSAgICAgIGlm
IChjaHVuay5sZW5ndGgpIHsKLSAgICAgICAgaGFuZGxlQ2h1bmsoY2h1bmspOwotICAgICAgICBw
ZXJmb3JtQ2h1bmtlZEFjdGlvbih0ZXN0cywgaGFuZGxlQ2h1bmssIG9uQ29tcGxldGUsIHRpbWVv
dXQsICsraW5kZXgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb25Db21wbGV0ZSgpOwotICAg
ICAgfQorICAgICAgICB2YXIgY2h1bmsgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0ZXN0
cywgaW5kZXggKiBDSFVOS19TSVpFLCAoaW5kZXggKyAxKSAqIENIVU5LX1NJWkUpOworICAgICAg
ICBpZiAoY2h1bmsubGVuZ3RoKSB7CisgICAgICAgICAgICBoYW5kbGVDaHVuayhjaHVuayk7Cisg
ICAgICAgICAgICBwZXJmb3JtQ2h1bmtlZEFjdGlvbih0ZXN0cywgaGFuZGxlQ2h1bmssIG9uQ29t
cGxldGUsIHRpbWVvdXQsICsraW5kZXgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9u
Q29tcGxldGUoKTsKICAgICAvLyBObyBuZWVkIGZvciBhIHRpbWVvdXQgb24gdGhlIGZpcnN0IGNo
dW5rZWQgYWN0aW9uLgogICAgIH0sIGluZGV4ID8gdGltZW91dCA6IDApOwotICB9Cit9CiAKLSAg
ZnVuY3Rpb24gZ2V0SFRNTEZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cykgeworZnVuY3Rpb24gZ2V0
SFRNTEZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cykKK3sKICAgICB2YXIgdGVzdHNIVE1MID0gW107
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgewotICAgICAgdGVz
dHNIVE1MLnB1c2goJzxoMiBvbmNsaWNrPSJzZWxlY3RDb250ZW50cyh0aGlzKSI+JyArIHRlc3Rz
W2ldICsKLSAgICAgICAgICAnPC9oMj4nICsgZ2V0SFRNTEZvckluZGl2aWR1bFRlc3RPbkFsbEJ1
aWxkZXJzKHRlc3RzW2ldKSk7Ci0gICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMu
bGVuZ3RoOyBpKyspCisgICAgICAgIHRlc3RzSFRNTC5wdXNoKCc8aDIgb25jbGljaz0ic2VsZWN0
Q29udGVudHModGhpcykiPicgKyB0ZXN0c1tpXSArICc8L2gyPicgKyBnZXRIVE1MRm9ySW5kaXZp
ZHVsVGVzdE9uQWxsQnVpbGRlcnModGVzdHNbaV0pKTsKICAgICByZXR1cm4gdGVzdHNIVE1MLmpv
aW4oJzxocj4nKTsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldEhUTUxGb3JOYXZCYXIoKSB7Citm
dW5jdGlvbiBnZXRIVE1MRm9yTmF2QmFyKCkKK3sKICAgICB2YXIgZXh0cmFIVE1MID0gJyc7Ci0g
ICAgaWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSkgewotICAgICAgZXh0cmFIVE1MICs9IGNoZWNr
Ym94SFRNTCgnc2hvd1J1bnNPbkJ1aWxkZXJQYWdlJywgJ1Nob3cgZmxha2luZXNzIGRldGFpbHMn
LAotICAgICAgICAgIGN1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UpOwotICAgIH0K
KyAgICBpZiAoIWlzQ3Jvc3NCdWlsZGVyVmlldygpKQorICAgICAgICBleHRyYUhUTUwgKz0gY2hl
Y2tib3hIVE1MKCdzaG93UnVuc09uQnVpbGRlclBhZ2UnLCAnU2hvdyBmbGFraW5lc3MgZGV0YWls
cycsIGN1cnJlbnRTdGF0ZS5zaG93UnVuc09uQnVpbGRlclBhZ2UpOwogCiAgICAgdmFyIGh0bWwg
PSBnZXRIVE1MRm9yVGVzdFR5cGVTd2l0Y2hlcihmYWxzZSwgZXh0cmFIVE1MLCBpc0Nyb3NzQnVp
bGRlclZpZXcoKSk7Ci0KICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPWZvcm1zPjxmb3JtIGlkPXJl
c3VsdC1mb3JtICcgKwogICAgICAgICAnb25zdWJtaXQ9InNldFF1ZXJ5UGFyYW1ldGVyKFwncmVz
dWx0XCcsIHJlc3VsdC52YWx1ZSk7JyArCiAgICAgICAgICdyZXR1cm4gZmFsc2U7Ij5TaG93IGFs
bCB0ZXN0cyB3aXRoIHJlc3VsdDogJyArCkBAIC0yNTM1LDE2ICsyNDQ2LDE3IEBAIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgICAgICAgICdmb28vYmFyLmh0bWwsZm9vL2Jheixkb21zdG9yYWdlIiBpZD10ZXN0cy1p
bnB1dD48L2Zvcm0+JyArCiAgICAgICAgICc8c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9InNob3dM
ZWdlbmQoKSI+U2hvdyBsZWdlbmQgW3R5cGUgP108L3NwYW4+PC9kaXY+JzsKICAgICByZXR1cm4g
aHRtbDsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldExpbmtIVE1MVG9Ub2dnbGVTdGF0ZShrZXks
IGxpbmtUZXh0KSB7CitmdW5jdGlvbiBnZXRMaW5rSFRNTFRvVG9nZ2xlU3RhdGUoa2V5LCBsaW5r
VGV4dCkKK3sKICAgICB2YXIgaXNUcnVlID0gY3VycmVudFN0YXRlW2tleV07CiAgICAgcmV0dXJu
ICc8c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9InNldFF1ZXJ5UGFyYW1ldGVyKFwnJyArIGtleSAr
ICdcJywgJyArCi0gICAgICAgICFpc1RydWUgKyAnKSI+JyArIChpc1RydWUgPyAnSGlkZScgOiAn
U2hvdycpICsgJyAnICsgbGlua1RleHQgKwotICAgICAgICAnPC9zcGFuPic7Ci0gIH0KKyAgICAg
ICAgIWlzVHJ1ZSArICcpIj4nICsgKGlzVHJ1ZSA/ICdIaWRlJyA6ICdTaG93JykgKyAnICcgKyBs
aW5rVGV4dCArICc8L3NwYW4+JzsKK30KIAotICBmdW5jdGlvbiBnZW5lcmF0ZVBhZ2VGb3JCdWls
ZGVyKGJ1aWxkZXJOYW1lKSB7CitmdW5jdGlvbiBnZW5lcmF0ZVBhZ2VGb3JCdWlsZGVyKGJ1aWxk
ZXJOYW1lKQorewogICAgIHByb2Nlc3NUZXN0UnVuc0ZvckJ1aWxkZXIoYnVpbGRlck5hbWUpOwog
CiAgICAgdmFyIHJlc3VsdHMgPSBwZXJCdWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdOwpAQCAt
MjU1Miw1MSArMjQ2NCw0MyBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAgICAgdmFyIHRlc3RzSFRNTCA9ICcn
OwogICAgIGlmIChyZXN1bHRzLmxlbmd0aCkgewotICAgICAgdmFyIHRhYmxlUm93c0hUTUwgPSAn
JzsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewotICAg
ICAgICB0YWJsZVJvd3NIVE1MICs9IGdldEhUTUxGb3JTaW5nbGVUZXN0Um93KHJlc3VsdHNbaV0p
Ci0gICAgICB9Ci0gICAgICB0ZXN0c0hUTUwgPSBnZXRIVE1MRm9yVGVzdFRhYmxlKHRhYmxlUm93
c0hUTUwpOworICAgICAgICB2YXIgdGFibGVSb3dzSFRNTCA9ICcnOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0YWJsZVJvd3NI
VE1MICs9IGdldEhUTUxGb3JTaW5nbGVUZXN0Um93KHJlc3VsdHNbaV0pCisgICAgICAgIHRlc3Rz
SFRNTCA9IGdldEhUTUxGb3JUZXN0VGFibGUodGFibGVSb3dzSFRNTCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgIHRlc3RzSFRNTCA9ICc8ZGl2Pk5vIHRlc3RzIGZvdW5kLiAnOwotICAgICAgaWYgKGlz
TGF5b3V0VGVzdFJlc3VsdHMoKSkgewotICAgICAgICB0ZXN0c0hUTUwgKz0gJ1RyeSBzaG93aW5n
IHRlc3RzIHdpdGggY29ycmVjdCBleHBlY3RhdGlvbnMuPC9kaXY+JzsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRlc3RzSFRNTCArPSAnVGhpcyBtZWFucyBubyB0ZXN0cyBoYXZlIGZhaWxlZCE8
L2Rpdj4nOwotICAgICAgfQorICAgICAgICB0ZXN0c0hUTUwgPSAnPGRpdj5ObyB0ZXN0cyBmb3Vu
ZC4gJzsKKyAgICAgICAgaWYgKGlzTGF5b3V0VGVzdFJlc3VsdHMoKSkKKyAgICAgICAgICAgIHRl
c3RzSFRNTCArPSAnVHJ5IHNob3dpbmcgdGVzdHMgd2l0aCBjb3JyZWN0IGV4cGVjdGF0aW9ucy48
L2Rpdj4nOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0c0hUTUwgKz0gJ1RoaXMgbWVh
bnMgbm8gdGVzdHMgaGF2ZSBmYWlsZWQhPC9kaXY+JzsKICAgICB9CiAKICAgICB2YXIgaHRtbCA9
IGdldEhUTUxGb3JOYXZCYXIoKTsKIAogICAgIGlmIChpc0xheW91dFRlc3RSZXN1bHRzKCkpIHsK
LSAgICAgIGh0bWwgKz0gZ2V0SFRNTEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVy
ZXMoYnVpbGRlck5hbWUpICsKLSAgICAgICAgICAnPGgyPkZhaWxpbmcgdGVzdHM8L2gyPicgKwot
ICAgICAgICAgIGdldExpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd1dvbnRGaXhTa2lwJywgJ1dP
TlRGSVgvU0tJUCcpICsKLSAgICAgICAgICAnIHwgJyArCi0gICAgICAgICAgZ2V0TGlua0hUTUxU
b1RvZ2dsZVN0YXRlKCdzaG93Q29ycmVjdEV4cGVjdGF0aW9ucycsCi0gICAgICAgICAgICAgICd0
ZXN0cyB3aXRoIGNvcnJlY3QgZXhwZWN0YXRpb25zJykgKyAnIHwgJyArCi0gICAgICAgICAgZ2V0
TGlua0hUTUxUb1RvZ2dsZVN0YXRlKCdzaG93V3JvbmdFeHBlY3RhdGlvbnMnLAotICAgICAgICAg
ICAgICAndGVzdHMgd2l0aCB3cm9uZyBleHBlY3RhdGlvbnMnKSArICcgfCAnICsKLSAgICAgICAg
ICBnZXRMaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dGbGFreScsICdmbGFreScpICsgJyB8ICcg
KwotICAgICAgICAgIGdldExpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd1Nsb3cnLCAnc2xvdycp
OworICAgICAgICBodG1sICs9IGdldEhUTUxGb3JUZXN0c1dpdGhFeHBlY3RhdGlvbnNCdXROb0Zh
aWx1cmVzKGJ1aWxkZXJOYW1lKSArCisgICAgICAgICAgICAnPGgyPkZhaWxpbmcgdGVzdHM8L2gy
PicgKworICAgICAgICAgICAgZ2V0TGlua0hUTUxUb1RvZ2dsZVN0YXRlKCdzaG93V29udEZpeFNr
aXAnLCAnV09OVEZJWC9TS0lQJykgKyAnIHwgJyArCisgICAgICAgICAgICBnZXRMaW5rSFRNTFRv
VG9nZ2xlU3RhdGUoJ3Nob3dDb3JyZWN0RXhwZWN0YXRpb25zJywgJ3Rlc3RzIHdpdGggY29ycmVj
dCBleHBlY3RhdGlvbnMnKSArICcgfCAnICsKKyAgICAgICAgICAgIGdldExpbmtIVE1MVG9Ub2dn
bGVTdGF0ZSgnc2hvd1dyb25nRXhwZWN0YXRpb25zJywgJ3Rlc3RzIHdpdGggd3JvbmcgZXhwZWN0
YXRpb25zJykgKyAnIHwgJyArCisgICAgICAgICAgICBnZXRMaW5rSFRNTFRvVG9nZ2xlU3RhdGUo
J3Nob3dGbGFreScsICdmbGFreScpICsgJyB8ICcgKworICAgICAgICAgICAgZ2V0TGlua0hUTUxU
b1RvZ2dsZVN0YXRlKCdzaG93U2xvdycsICdzbG93Jyk7CiAgICAgfQogCi0gICAgaHRtbCArPSAn
IHwgQWxsIGNvbHVtbnMgYXJlIHNvcnRhYmxlLiB8ICcgKwotICAgICAgICAnRmxha2luZXNzIHJl
YWRlciBvcmRlciBpcyBuZXdlciAtLT4gb2xkZXIgcnVucy48YnI+JyArCi0gICAgICAgIHRlc3Rz
SFRNTDsKLQorICAgIGh0bWwgKz0gJyB8IEFsbCBjb2x1bW5zIGFyZSBzb3J0YWJsZS4gfCBGbGFr
aW5lc3MgcmVhZGVyIG9yZGVyIGlzIG5ld2VyIC0tPiBvbGRlciBydW5zLjxicj4nICsgdGVzdHNI
VE1MOwogICAgIGFwcGVuZEhUTUwoaHRtbCk7CiAKICAgICB2YXIgdGhzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ3RoJyk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aHMubGVu
Z3RoOyBpKyspIHsKLSAgICAgIHRoc1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNoYW5n
ZVNvcnQsIGZhbHNlKTsKLSAgICAgIHRoc1tpXS5jbGFzc05hbWUgPSAic29ydGFibGUiOworICAg
ICAgICB0aHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjaGFuZ2VTb3J0LCBmYWxzZSk7
CisgICAgICAgIHRoc1tpXS5jbGFzc05hbWUgPSAic29ydGFibGUiOwogICAgIH0KIAogICAgIGhp
ZGVMb2FkaW5nVUkoKTsKLSAgfQorfQogCi0gIHZhciBWQUxJRF9LRVlTX0ZPUl9DUk9TU19CVUlM
REVSX1ZJRVcgPSB7Cit2YXIgVkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXID0gewog
ICAgIHRlc3RzOiAxLAogICAgIHJlc3VsdDogMSwKICAgICBzaG93RXhwZWN0YXRpb25zOiAxLApA
QCAtMjYwNCw4MSArMjUwOCw4MyBAQCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIGxlZ2FjeUV4cGVjdGF0aW9u
c1NlbWFudGljczogMSwKICAgICByZXN1bHRzSGVpZ2h0OiAxLAogICAgIHJldmlzaW9uOiAxCi0g
IH07Cit9OwogCi0gIGZ1bmN0aW9uIGlzSW52YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXcoa2V5
KSB7Ci0gICAgcmV0dXJuICEoa2V5IGluIFZBTElEX0tFWVNfRk9SX0NST1NTX0JVSUxERVJfVklF
VykgJiYKLSAgICAgICAgIShrZXkgaW4gZGVmYXVsdENyb3NzRGFzaGJvYXJkU3RhdGVWYWx1ZXMp
OwotICB9CitmdW5jdGlvbiBpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtleSkKK3sK
KyAgICByZXR1cm4gIShrZXkgaW4gVkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXKSAm
JiAhKGtleSBpbiBkZWZhdWx0Q3Jvc3NEYXNoYm9hcmRTdGF0ZVZhbHVlcyk7Cit9CiAKLSAgZnVu
Y3Rpb24gdXBkYXRlRGVmYXVsdEJ1aWxkZXJTdGF0ZSgpIHsKK2Z1bmN0aW9uIHVwZGF0ZURlZmF1
bHRCdWlsZGVyU3RhdGUoKQorewogICAgIGlmIChpc0Nyb3NzQnVpbGRlclZpZXcoKSkKLSAgICAg
IGRlbGV0ZSBkZWZhdWx0U3RhdGVWYWx1ZXMuYnVpbGRlcjsKKyAgICAgICAgZGVsZXRlIGRlZmF1
bHRTdGF0ZVZhbHVlcy5idWlsZGVyOwogICAgIGVsc2UKLSAgICAgIGRlZmF1bHRTdGF0ZVZhbHVl
cy5idWlsZGVyID0gZGVmYXVsdEJ1aWxkZXJOYW1lOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMg
dGhlIHBhZ2Ugc3RhdGUgdG8gcmVnZW5lcmF0ZSB0aGUgcGFnZS4KLSAgICogQHBhcmFtIHtPYmpl
Y3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1ldGVycyBhcyBrZXk6IHZhbHVl
LgotICAgKi8KLSAgZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKSB7
CisgICAgICAgIGRlZmF1bHRTdGF0ZVZhbHVlcy5idWlsZGVyID0gZGVmYXVsdEJ1aWxkZXJOYW1l
OworfQorCisvKioKKyAqIFNldHMgdGhlIHBhZ2Ugc3RhdGUgdG8gcmVnZW5lcmF0ZSB0aGUgcGFn
ZS4KKyAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgTmV3IG9yIG1vZGlmaWVkIHF1ZXJ5IHBhcmFt
ZXRlcnMgYXMga2V5OiB2YWx1ZS4KKyAqLworZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJD
aGFuZ2UocGFyYW1zKQorewogICAgIGZvciAoa2V5IGluIHBhcmFtcykgewotICAgICAgaWYgKGtl
eSA9PSAndGVzdHMnKSB7Ci0gICAgICAgIC8vIEVudGVyaW5nIGNyb3NzLWJ1aWxkZXIgdmlldywg
b25seSBrZWVwIHZhbGlkIGtleXMgZm9yIHRoYXQgdmlldy4KLSAgICAgICAgZm9yICh2YXIgY3Vy
cmVudEtleSBpbiBjdXJyZW50U3RhdGUpIHsKLSAgICAgICAgICBpZiAoaXNJbnZhbGlkS2V5Rm9y
Q3Jvc3NCdWlsZGVyVmlldyhjdXJyZW50S2V5KSkgewotICAgICAgICAgICAgZGVsZXRlIGN1cnJl
bnRTdGF0ZVtjdXJyZW50S2V5XTsKLSAgICAgICAgICB9CisgICAgICAgIGlmIChrZXkgPT0gJ3Rl
c3RzJykgeworICAgICAgICAgICAgLy8gRW50ZXJpbmcgY3Jvc3MtYnVpbGRlciB2aWV3LCBvbmx5
IGtlZXAgdmFsaWQga2V5cyBmb3IgdGhhdCB2aWV3LgorICAgICAgICAgICAgZm9yICh2YXIgY3Vy
cmVudEtleSBpbiBjdXJyZW50U3RhdGUpIHsKKyAgICAgICAgICAgICAgaWYgKGlzSW52YWxpZEtl
eUZvckNyb3NzQnVpbGRlclZpZXcoY3VycmVudEtleSkpIHsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgY3VycmVudFN0YXRlW2N1cnJlbnRLZXldOworICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhr
ZXkpKSB7CisgICAgICAgICAgICBkZWxldGUgY3VycmVudFN0YXRlLnRlc3RzOworICAgICAgICAg
ICAgZGVsZXRlIGN1cnJlbnRTdGF0ZS5yZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBp
ZiAoaXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhrZXkpKSB7Ci0gICAgICAgIGRlbGV0
ZSBjdXJyZW50U3RhdGUudGVzdHM7Ci0gICAgICAgIGRlbGV0ZSBjdXJyZW50U3RhdGUucmVzdWx0
OwotICAgICAgfQogICAgIH0KIAogICAgIHVwZGF0ZURlZmF1bHRCdWlsZGVyU3RhdGUoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGhpZGVMZWdlbmQoKSB7CitmdW5j
dGlvbiBoaWRlTGVnZW5kKCkKK3sKICAgICB2YXIgbGVnZW5kID0gJCgnbGVnZW5kJyk7CiAgICAg
aWYgKGxlZ2VuZCkKLSAgICAgIGxlZ2VuZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxlZ2VuZCk7
Ci0gIH0KLQotICB2YXIgZmFsbGJhY2tzTWFwID0ge307Ci0gIGZhbGxiYWNrc01hcFsnV0lOLVhQ
J10gPSBbJ2Nocm9taXVtLXdpbi14cCcsICdjaHJvbWl1bS13aW4tdmlzdGEnLCAnY2hyb21pdW0t
d2luJywgJ2Nocm9taXVtJywgJ3dpbicsICdtYWMnXTsKLSAgZmFsbGJhY2tzTWFwWydXSU4tVklT
VEEnXSA9IFsnY2hyb21pdW0td2luLXZpc3RhJywgJ2Nocm9taXVtLXdpbicsICdjaHJvbWl1bScs
ICd3aW4nLCAnbWFjJ107Ci0gIGZhbGxiYWNrc01hcFsnV0lOLTcnXSA9IFsnY2hyb21pdW0td2lu
JywgJ2Nocm9taXVtJywgJ3dpbicsICdtYWMnXTsKLSAgZmFsbGJhY2tzTWFwWydXSU4tNy1HUFUn
XSA9IFsnY2hyb21pdW0tZ3B1LXdpbiddLmNvbmNhdChmYWxsYmFja3NNYXBbJ1dJTi03J10pOwot
ICBmYWxsYmFja3NNYXBbJ01BQy1MRU9QQVJEJ10gPSBbJ2Nocm9taXVtLW1hYy1sZW9wYXJkJywg
J2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZCcsICdjaHJvbWl1bS1tYWMnLCAnY2hyb21pdW0nLCAn
bWFjLWxlb3BhcmQnLCAnbWFjLXNub3dsZW9wYXJkJywgJ21hYyddOwotICBmYWxsYmFja3NNYXBb
J01BQy1TTk9XTEVPUEFSRCddID0gWydjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQnLCAnY2hyb21p
dW0tbWFjJywgJ2Nocm9taXVtJywgJ21hYy1zbm93bGVvcGFyZCcsICdtYWMnXTsKLSAgZmFsbGJh
Y2tzTWFwWydNQUMtU05PV0xFT1BBUkQtR1BVJ10gPSBbJ2Nocm9taXVtLWdwdS1tYWMnXS5jb25j
YXQoZmFsbGJhY2tzTWFwWydNQUMtU05PV0xFT1BBUkQnXSk7Ci0gIGZhbGxiYWNrc01hcFsnTElO
VVgtMzInXSA9IFsnY2hyb21pdW0tbGludXgteDg2JywgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9t
aXVtLXdpbicsICdjaHJvbWl1bScsICd3aW4nLCAnbWFjJ107Ci0gIGZhbGxiYWNrc01hcFsnTElO
VVgtNjQnXSA9IFsnY2hyb21pdW0tbGludXgnLCAnY2hyb21pdW0td2luJywgJ2Nocm9taXVtJywg
J3dpbicsICdtYWMnXTsKLSAgZmFsbGJhY2tzTWFwWydMSU5VWC0zMi1HUFUnXSA9IFsnY2hyb21p
dW0tZ3B1LWxpbnV4J10uY29uY2F0KGZhbGxiYWNrc01hcFsnTElOVVgtMzInXSk7Ci0KLSAgZnVu
Y3Rpb24gaHRtbEZvckZhbGxiYWNrSGVscChmYWxsYmFja3MpIHsKLSAgICByZXR1cm4gJzxvbCBj
bGFzcz1mYWxsYmFjay1saXN0PjxsaT4nICsgZmFsbGJhY2tzLmpvaW4oJzwvbGk+PGxpPicpICsK
LSAgICAgICAgJzwvbGk+PC9vbD4nOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvd0xlZ2VuZCgpIHsK
KyAgICAgICAgbGVnZW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGVnZW5kKTsKK30KKwordmFy
IGZhbGxiYWNrc01hcCA9IHt9OworZmFsbGJhY2tzTWFwWydXSU4tWFAnXSA9IFsnY2hyb21pdW0t
d2luLXhwJywgJ2Nocm9taXVtLXdpbi12aXN0YScsICdjaHJvbWl1bS13aW4nLCAnY2hyb21pdW0n
LCAnd2luJywgJ21hYyddOworZmFsbGJhY2tzTWFwWydXSU4tVklTVEEnXSA9IFsnY2hyb21pdW0t
d2luLXZpc3RhJywgJ2Nocm9taXVtLXdpbicsICdjaHJvbWl1bScsICd3aW4nLCAnbWFjJ107Citm
YWxsYmFja3NNYXBbJ1dJTi03J10gPSBbJ2Nocm9taXVtLXdpbicsICdjaHJvbWl1bScsICd3aW4n
LCAnbWFjJ107CitmYWxsYmFja3NNYXBbJ1dJTi03LUdQVSddID0gWydjaHJvbWl1bS1ncHUtd2lu
J10uY29uY2F0KGZhbGxiYWNrc01hcFsnV0lOLTcnXSk7CitmYWxsYmFja3NNYXBbJ01BQy1MRU9Q
QVJEJ10gPSBbJ2Nocm9taXVtLW1hYy1sZW9wYXJkJywgJ2Nocm9taXVtLW1hYy1zbm93bGVvcGFy
ZCcsICdjaHJvbWl1bS1tYWMnLCAnY2hyb21pdW0nLCAnbWFjLWxlb3BhcmQnLCAnbWFjLXNub3ds
ZW9wYXJkJywgJ21hYyddOworZmFsbGJhY2tzTWFwWydNQUMtU05PV0xFT1BBUkQnXSA9IFsnY2hy
b21pdW0tbWFjLXNub3dsZW9wYXJkJywgJ2Nocm9taXVtLW1hYycsICdjaHJvbWl1bScsICdtYWMt
c25vd2xlb3BhcmQnLCAnbWFjJ107CitmYWxsYmFja3NNYXBbJ01BQy1TTk9XTEVPUEFSRC1HUFUn
XSA9IFsnY2hyb21pdW0tZ3B1LW1hYyddLmNvbmNhdChmYWxsYmFja3NNYXBbJ01BQy1TTk9XTEVP
UEFSRCddKTsKK2ZhbGxiYWNrc01hcFsnTElOVVgtMzInXSA9IFsnY2hyb21pdW0tbGludXgteDg2
JywgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdjaHJvbWl1bScsICd3aW4nLCAn
bWFjJ107CitmYWxsYmFja3NNYXBbJ0xJTlVYLTY0J10gPSBbJ2Nocm9taXVtLWxpbnV4JywgJ2No
cm9taXVtLXdpbicsICdjaHJvbWl1bScsICd3aW4nLCAnbWFjJ107CitmYWxsYmFja3NNYXBbJ0xJ
TlVYLTMyLUdQVSddID0gWydjaHJvbWl1bS1ncHUtbGludXgnXS5jb25jYXQoZmFsbGJhY2tzTWFw
WydMSU5VWC0zMiddKTsKKworZnVuY3Rpb24gaHRtbEZvckZhbGxiYWNrSGVscChmYWxsYmFja3Mp
Cit7CisgICAgcmV0dXJuICc8b2wgY2xhc3M9ZmFsbGJhY2stbGlzdD48bGk+JyArIGZhbGxiYWNr
cy5qb2luKCc8L2xpPjxsaT4nKSArICc8L2xpPjwvb2w+JzsKK30KKworZnVuY3Rpb24gc2hvd0xl
Z2VuZCgpCit7CiAgICAgdmFyIGxlZ2VuZCA9ICQoJ2xlZ2VuZCcpOwogICAgIGlmICghbGVnZW5k
KSB7Ci0gICAgICBsZWdlbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAg
IGxlZ2VuZC5pZCA9ICdsZWdlbmQnOwotICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChs
ZWdlbmQpOworICAgICAgICBsZWdlbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICAgICAgbGVnZW5kLmlkID0gJ2xlZ2VuZCc7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQobGVnZW5kKTsKICAgICB9CiAKICAgICB2YXIgaHRtbCA9ICc8ZGl2IGlkPWxlZ2Vu
ZC10b2dnbGUgb25jbGljaz0iaGlkZUxlZ2VuZCgpIj5IaWRlICcgKwogICAgICAgICAnbGVnZW5k
IFt0eXBlIGVzY108L2Rpdj48ZGl2Pk51bWJlciBvZiBmbGFreSB0ZXN0cyBsaXN0ZWQgbmV4dCB0
byAnICsKICAgICAgICAgJ2VhY2ggYnVpbGRlcjwvZGl2PjxkaXYgaWQ9bGVnZW5kLWNvbnRlbnRz
Pic7Ci0gICAgZm9yICh2YXIgZXhwZWN0YXRpb24gaW4gZ2V0RXhwZWN0YXRpb25zTWFwKCkpIHsK
LSAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9JyArIGV4cGVjdGF0aW9uICsgJz4nICsKLSAgICAg
ICAgICBnZXRFeHBlY3RhdGlvbnNNYXAoKVtleHBlY3RhdGlvbl0gKyAnPC9kaXY+JzsKLSAgICB9
CisgICAgZm9yICh2YXIgZXhwZWN0YXRpb24gaW4gZ2V0RXhwZWN0YXRpb25zTWFwKCkpCisgICAg
ICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9JyArIGV4cGVjdGF0aW9uICsgJz4nICsgZ2V0RXhwZWN0
YXRpb25zTWFwKClbZXhwZWN0YXRpb25dICsgJzwvZGl2Pic7CiAKICAgICBodG1sICs9ICc8ZGl2
IGNsYXNzPW1lcmdlPldFQktJVCBNRVJHRTwvZGl2Pic7CiAgICAgaWYgKGlzTGF5b3V0VGVzdFJl
c3VsdHMoKSkgewpAQCAtMjY4NiwxMCArMjU5Miw5IEBAIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgICAgICAg
JzwvZGl2PjxiciBzdHlsZT0iY2xlYXI6Ym90aCI+JyArCiAgICAgICAgICAgJzwvZGl2PjxoMz5U
ZXN0IGV4cGVjdGF0b25zIGZhbGxiYWNrIG9yZGVyLjwvaDM+JzsKIAotICAgICAgZm9yICh2YXIg
cGxhdGZvcm0gaW4gZmFsbGJhY2tzTWFwKSB7Ci0gICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9
ZmFsbGJhY2staGVhZGVyPicgKyBwbGF0Zm9ybSArICc8L2Rpdj4nICsKLSAgICAgICAgICBodG1s
Rm9yRmFsbGJhY2tIZWxwKGZhbGxiYWNrc01hcFtwbGF0Zm9ybV0pOwotICAgICAgfQorICAgICAg
Zm9yICh2YXIgcGxhdGZvcm0gaW4gZmFsbGJhY2tzTWFwKQorICAgICAgICAgIGh0bWwgKz0gJzxk
aXYgY2xhc3M9ZmFsbGJhY2staGVhZGVyPicgKyBwbGF0Zm9ybSArICc8L2Rpdj4nICsgaHRtbEZv
ckZhbGxiYWNrSGVscChmYWxsYmFja3NNYXBbcGxhdGZvcm1dKTsKKwogICAgICAgaHRtbCArPSAn
PGRpdj5USU1FUzo8L2Rpdj4nICsKICAgICAgICAgICBnZXRIdG1sRm9yU2xvd1RpbWVzKE1JTl9T
RUNPTkRTX0ZPUl9TTE9XX1RFU1QpICsKICAgICAgICAgICAnPGRpdj5ERUJVRyBUSU1FUzo8L2Rp
dj4nICsKQEAgLTI2OTcsMjkgKzI2MDIsMjcgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICB9CiAKICAgICBs
ZWdlbmQuaW5uZXJIVE1MID0gaHRtbDsKLSAgfQorfQogCi0gIGZ1bmN0aW9uIGdldEh0bWxGb3JT
bG93VGltZXMobWluVGltZSkgeworZnVuY3Rpb24gZ2V0SHRtbEZvclNsb3dUaW1lcyhtaW5UaW1l
KQorewogICAgIHJldHVybiAnPHVsPjxsaT4mbHQ7MSBzZWNvbmQgPT0gIVNMT1c8L2xpPjxsaT4m
Z3Q7MSBzZWNvbmQgJiYgJmx0OycgKwogICAgICAgICBtaW5UaW1lICsgJyBzZWNvbmRzID09IFNM
T1cgfHwgIVNMT1cgaXMgZmluZTwvbGk+PGxpPiZndDsnICsKICAgICAgICAgbWluVGltZSArICcg
c2Vjb25kcyA9PSBTTE9XPC9saT48L3VsPic7Ci0gIH0KK30KIAotICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgeworZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICBpZiAoZS5rZXlJZGVudGlmaWVyID09
ICdVKzAwM0YnIHx8IGUua2V5SWRlbnRpZmllciA9PSAnVSswMEJGJykgewotICAgICAgLy8gV2Vi
S2l0IE1BQyByZXR1cnNuIDNGLiBXZWJLaXQgV0lOIHJldHVybnMgQkYuIFRoaXMgaXMgYSBidWch
Ci0gICAgICAvLyA/IGtleQotICAgICAgc2hvd0xlZ2VuZCgpOworICAgICAgICAvLyBXZWJLaXQg
TUFDIHJldHVyc24gM0YuIFdlYktpdCBXSU4gcmV0dXJucyBCRi4gVGhpcyBpcyBhIGJ1ZyEKKyAg
ICAgICAgLy8gPyBrZXkKKyAgICAgICAgc2hvd0xlZ2VuZCgpOwogICAgIH0gZWxzZSBpZiAoZS5r
ZXlJZGVudGlmaWVyID09ICdVKzAwMUInKSB7Ci0gICAgICAvLyBlc2NhcGUga2V5Ci0gICAgICBo
aWRlTGVnZW5kKCk7Ci0gICAgICBoaWRlUG9wdXAoKTsKKyAgICAgICAgLy8gZXNjYXBlIGtleQor
ICAgICAgICBoaWRlTGVnZW5kKCk7CisgICAgICAgIGhpZGVQb3B1cCgpOwogICAgIH0KLSAgfSwg
ZmFsc2UpOwotCi0KLQotICA8L3NjcmlwdD4KK30sIGZhbHNlKTsKKzwvc2NyaXB0PgogPC9oZWFk
PgogCiA8Ym9keT48L2JvZHk+Cg==
</data>
<flag name="review"
          id="95415"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>