<?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>44902</bug_id>
          
          <creation_ts>2010-08-30 15:03:07 -0700</creation_ts>
          <short_desc>new-run-webkit-tests: add more unit tests</short_desc>
          <delta_ts>2010-09-01 21:47:55 -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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>271665</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-30 15:03:07 -0700</bug_when>
    <thetext>new-run-webkit-tests: add more unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271670</commentid>
    <comment_count>1</comment_count>
      <attachid>65966</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-30 15:06:06 -0700</bug_when>
    <thetext>Created attachment 65966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271847</commentid>
    <comment_count>2</comment_count>
      <attachid>65966</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-30 18:38:09 -0700</bug_when>
    <thetext>Comment on attachment 65966
Patch

&gt; :140
&gt; +    hdlr = logging.StreamHandler(meter)
s/hdlr/handler

Here and in many places below and in other files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272407</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-31 14:54:17 -0700</bug_when>
    <thetext>Committed r66542: &lt;http://trac.webkit.org/changeset/66542&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272536</commentid>
    <comment_count>4</comment_count>
      <attachid>66151</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-31 17:47:58 -0700</bug_when>
    <thetext>Created attachment 66151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272544</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-31 18:01:32 -0700</bug_when>
    <thetext>the first patch was rolled out in r66547.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272559</commentid>
    <comment_count>6</comment_count>
      <attachid>66151</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-31 18:28:48 -0700</bug_when>
    <thetext>Comment on attachment 66151
Patch

&gt; +    def cleanup(self):
&gt; +        &quot;&quot;&quot;Restore logging configuration to its initial settings.&quot;&quot;&quot;
&gt; +        _restore_logging(self._old_handler)
&gt; +        self._old_handler = None

Should there be a &apos;if self._old_handler:&apos; here like in the __del__ method below?

Sorry, I have to run.  I can finish the review in a few hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272563</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-08-31 18:43:26 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 66151 [details])
&gt; &gt; +    def cleanup(self):
&gt; &gt; +        &quot;&quot;&quot;Restore logging configuration to its initial settings.&quot;&quot;&quot;
&gt; &gt; +        _restore_logging(self._old_handler)
&gt; &gt; +        self._old_handler = None
&gt; 
&gt; Should there be a &apos;if self._old_handler:&apos; here like in the __del__ method below?
&gt; 

I suppose it&apos;s possible to (improperly) call cleanup() several times in a row, in which case an if: would be a good idea. I can add that. Alternatively, I could get rid of the if: in the __del__ and trust the caller to do the right thing, since this is a fairly private and specialized class. The if in the __del__ is only there in case the user forgot to call cleanup(), but it is precarious functionality to rely on, since we don&apos;t have a lot of control over when the __del__ is invoked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272627</commentid>
    <comment_count>8</comment_count>
      <attachid>66151</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-31 21:45:51 -0700</bug_when>
    <thetext>Comment on attachment 66151
Patch

&gt; +    def cleanup(self):
&gt; +        &quot;&quot;&quot;Restore logging configuration to its initial settings.&quot;&quot;&quot;
&gt; +        _restore_logging(self._old_handler)
&gt; +        self._old_handler = None
&gt; +
&gt; +    def __del__(self):
&gt; +        if self._old_handler:
&gt; +            _restore_logging(self._old_handler)

Maybe __del__ should just call cleanup?  I don&apos;t feel strongly about this.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py

&gt; +    try:
&gt; +        # Configure the printing subsystem for printing output, logging debug
&gt; +        # info, and tracing tests.

As discussed on IRC, in a follow up change, let&apos;s try to break this method into smaller methods so we can reduce the scope of the try/finally block.

&gt; +        if not options.child_processes:
&gt; +            # FIXME: Investigate perf/flakiness impact of using cpu_count + 1.
&gt; +            options.child_processes = port_obj.default_child_processes()

Can we move this to before the try/finally?

&gt; +        printer = printing.Printer(port_obj, options, regular_output=regular_output,
&gt; +            buildbot_output=buildbot_output,
&gt; +            child_processes=int(options.child_processes),
&gt; +            is_fully_parallel=options.experimental_fully_parallel)

Can we move this before the try too?  Then in the finally you don&apos;t have to check if printer is None.

&gt; +        if not options.configuration:
&gt; +            options.configuration = port_obj.default_configuration()
&gt; +
&gt; +        if options.pixel_tests is None:
&gt; +            options.pixel_tests = True
&gt; +
&gt; +        if not options.use_apache:
&gt; +            options.use_apache = sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;)
&gt; +
&gt; +        if options.results_directory.startswith(&quot;/&quot;):
&gt; +            # Assume it&apos;s an absolute path and normalize.
&gt; +            options.results_directory = port_obj.get_absolute_path(
&gt; +                options.results_directory)
&gt; +        else:
&gt; +            # If it&apos;s a relative path, make the output directory relative to
&gt; +            # Debug or Release.
&gt; +            options.results_directory = port_obj.results_directory()

You could move all this options stuff to before the try too.

&gt; +    finally:
&gt; +        port_obj.stop_helper()
&gt; +        if test_runner:
&gt; +            test_runner.cleanup()
&gt; +        _log.debug(&quot;Exit status: %d&quot; % num_unexpected_results)

When this method does a return 0, won&apos;t this output -1?  That seems confusing.


Perhaps I have made enough code restructuring suggestions for run() that you can refactor that in a separate change before this one?  Anyway, your call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273128</commentid>
    <comment_count>9</comment_count>
      <attachid>66305</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-01 17:39:17 -0700</bug_when>
    <thetext>Created attachment 66305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273130</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-01 17:41:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 66151 [details])
&gt; &gt; +    def cleanup(self):
&gt; &gt; +        &quot;&quot;&quot;Restore logging configuration to its initial settings.&quot;&quot;&quot;
&gt; &gt; +        _restore_logging(self._old_handler)
&gt; &gt; +        self._old_handler = None
&gt; &gt; +
&gt; &gt; +    def __del__(self):
&gt; &gt; +        if self._old_handler:
&gt; &gt; +            _restore_logging(self._old_handler)
&gt; 
&gt; Maybe __del__ should just call cleanup?  I don&apos;t feel strongly about this.
&gt; 
&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
&gt; 
&gt; &gt; +    try:
&gt; &gt; +        # Configure the printing subsystem for printing output, logging debug
&gt; &gt; +        # info, and tracing tests.
&gt; 
&gt; As discussed on IRC, in a follow up change, let&apos;s try to break this method into smaller methods so we can reduce the scope of the try/finally block.
&gt; 
&gt; &gt; +        if not options.child_processes:
&gt; &gt; +            # FIXME: Investigate perf/flakiness impact of using cpu_count + 1.
&gt; &gt; +            options.child_processes = port_obj.default_child_processes()
&gt; 
&gt; Can we move this to before the try/finally?
&gt; 
&gt; &gt; +        printer = printing.Printer(port_obj, options, regular_output=regular_output,
&gt; &gt; +            buildbot_output=buildbot_output,
&gt; &gt; +            child_processes=int(options.child_processes),
&gt; &gt; +            is_fully_parallel=options.experimental_fully_parallel)
&gt; 
&gt; Can we move this before the try too?  Then in the finally you don&apos;t have to check if printer is None.
&gt; 
&gt; &gt; +        if not options.configuration:
&gt; &gt; +            options.configuration = port_obj.default_configuration()
&gt; &gt; +
&gt; &gt; +        if options.pixel_tests is None:
&gt; &gt; +            options.pixel_tests = True
&gt; &gt; +
&gt; &gt; +        if not options.use_apache:
&gt; &gt; +            options.use_apache = sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;)
&gt; &gt; +
&gt; &gt; +        if options.results_directory.startswith(&quot;/&quot;):
&gt; &gt; +            # Assume it&apos;s an absolute path and normalize.
&gt; &gt; +            options.results_directory = port_obj.get_absolute_path(
&gt; &gt; +                options.results_directory)
&gt; &gt; +        else:
&gt; &gt; +            # If it&apos;s a relative path, make the output directory relative to
&gt; &gt; +            # Debug or Release.
&gt; &gt; +            options.results_directory = port_obj.results_directory()
&gt; 
&gt; You could move all this options stuff to before the try too.
&gt; 
&gt; &gt; +    finally:
&gt; &gt; +        port_obj.stop_helper()
&gt; &gt; +        if test_runner:
&gt; &gt; +            test_runner.cleanup()
&gt; &gt; +        _log.debug(&quot;Exit status: %d&quot; % num_unexpected_results)
&gt; 
&gt; When this method does a return 0, won&apos;t this output -1?  That seems confusing.
&gt; 

Good catch. Yes, that was a bug.

I ended up doing all of the restructuring and rolling it into this patch (sorry!); I also re-jiggered the logging handler setup/teardown in printing.py to not attempt to be smart about keeping only one handler active; that was very fragile and buggy.

The good news about all of the refactoring, though - it&apos;s all covered by unit tests, so it&apos;s pretty low-risk :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273139</commentid>
    <comment_count>11</comment_count>
      <attachid>66305</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-01 17:59:39 -0700</bug_when>
    <thetext>Comment on attachment 66305
Patch

This looks a lot better! Thanks for refactoring.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
&gt; +        new_args = []
&gt; +        for arg in args:
&gt; +            if arg and arg != &apos;&apos;:
&gt; +                new_args.append(arg)
&gt; +        paths = new_args

Sorry, I know you&apos;re just moving this, but why not just:
paths = [arg for arg in args if arg and arg != &apos;&apos;]

&gt; +        if not paths:
&gt; +            paths = []

Nit: This check doesn&apos;t seem necessary.

&gt; @@ -714,6 +721,43 @@ class TestRunner:
&gt; +    def set_up_run(self):

Nit: Document this function and the return.

&gt; +    # We wrap any parts of the run that are slow or likely to raise exceptions
&gt; +    # in a try/finally to ensure that we clean up the logging configuration.
&gt; +    num_unexpected_results = -1
&gt; +    try:
&gt; +        test_runner = TestRunner(port_obj, options, printer)
&gt; +        test_runner._print_config()
&gt; +
&gt; +        printer.print_update(&quot;Collecting tests ...&quot;)
&gt; +        test_runner.collect_tests(args, last_unexpected_results)
&gt; +
&gt; +        printer.print_update(&quot;Parsing expectations ...&quot;)
&gt; +        if options.lint_test_files:
&gt; +            return test_runner.lint()
&gt; +        test_runner.parse_expectations(port_obj.test_platform_name(),
&gt; +                                    options.configuration == &apos;Debug&apos;)

Nit: Indention looks funny here.


Yay for lots of new tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273200</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-01 21:42:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 66305 [details])
&gt; This looks a lot better! Thanks for refactoring.
&gt; 
&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
&gt; &gt; +        new_args = []
&gt; &gt; +        for arg in args:
&gt; &gt; +            if arg and arg != &apos;&apos;:
&gt; &gt; +                new_args.append(arg)
&gt; &gt; +        paths = new_args
&gt; 
&gt; Sorry, I know you&apos;re just moving this, but why not just:
&gt; paths = [arg for arg in args if arg and arg != &apos;&apos;]
&gt; 
&gt; &gt; +        if not paths:
&gt; &gt; +            paths = []
&gt; 
&gt; Nit: This check doesn&apos;t seem necessary.
&gt; 

Good suggestions. Done.

&gt; &gt; @@ -714,6 +721,43 @@ class TestRunner:
&gt; &gt; +    def set_up_run(self):
&gt; 
&gt; Nit: Document this function and the return.
&gt;

Done.
 
&gt; &gt; +    # We wrap any parts of the run that are slow or likely to raise exceptions
&gt; &gt; +    # in a try/finally to ensure that we clean up the logging configuration.
&gt; &gt; +    num_unexpected_results = -1
&gt; &gt; +    try:
&gt; &gt; +        test_runner = TestRunner(port_obj, options, printer)
&gt; &gt; +        test_runner._print_config()
&gt; &gt; +
&gt; &gt; +        printer.print_update(&quot;Collecting tests ...&quot;)
&gt; &gt; +        test_runner.collect_tests(args, last_unexpected_results)
&gt; &gt; +
&gt; &gt; +        printer.print_update(&quot;Parsing expectations ...&quot;)
&gt; &gt; +        if options.lint_test_files:
&gt; &gt; +            return test_runner.lint()
&gt; &gt; +        test_runner.parse_expectations(port_obj.test_platform_name(),
&gt; &gt; +                                    options.configuration == &apos;Debug&apos;)
&gt; 
&gt; Nit: Indention looks funny here.
&gt;

Fixed.
 
&gt; 
&gt; Yay for lots of new tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273202</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-01 21:47:55 -0700</bug_when>
    <thetext>Committed r66640: &lt;http://trac.webkit.org/changeset/66640&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65966</attachid>
            <date>2010-08-30 15:06:06 -0700</date>
            <delta_ts>2010-08-31 17:47:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44902-20100830150605.patch</filename>
            <type>text/plain</type>
            <size>29111</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2OGFiY2RiZjJlOWU1ZDhmZTNjYjNlMjhmNjk0ZTE3MmQ1ZWYyMjgzLi43ZGJlNzlh
ZTQzMTVmYWRhOTRiMDAxMTk5ODgwYzlmOTA5ZGE1OTQwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTAtMDgtMzAgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQt
dGVzdHM6IGFkZCBtb3JlIHVuaXQgdGVzdHMKKworICAgICAgICBBZGQgbW9yZSB1bml0IHRlc3Rz
IGZvciBuZXctcnVuLXdlYmtpdC10ZXN0czsgd2Ugbm93IGNvdmVyIGFsbCBidXQKKyAgICAgICAg
dGhlIG1vc3Qgb2JzY3VyZSBjb2RlIHBhdGhzIGluIHRoZSBnZW5lcmljIGNvZGUuIFdlIHN0aWxs
IG5lZWQgdG8KKyAgICAgICAgYWRkIGNvdmVyYWdlIGZvciB0aGUgaHR0cCBzZXJ2ZXIgYW5kIHdl
YiBzb2NrZXQgcGF0aHMsIGFuZCBhZGQgYmV0dGVyCisgICAgICAgIGNvdmVyYWdlIG9mIHRoZSBw
bGF0Zm9ybS1zcGVjaWZpYyBsb2dpYy4gTm90ZSB0aGF0IHRoZSByZWJhc2VsaW5pbmcKKyAgICAg
ICAgdG9vbCBpcyBzdGlsbCBub3Qgd2VsbCB0ZXN0ZWQuCisKKyAgICAgICAgQWxzbyBjbGVhbiB1
cCBzb21lIG9mIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGZvciB0aGUgcHJpbnRpbmcKKyAgICAg
ICAgbW9kdWxlIGFuZCB0aGUgd2F5IGl0IGludGVyYWN0cyB3aXRoIHRoZSBQeXRob24gbG9nZ2lu
ZyBtb2R1bGU7IHRoYXQKKyAgICAgICAgaXMgYSBjcnVmdHkgaW50ZXJmYWNlLCB0byBiZSBjZXJ0
YWluLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ0OTAyCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9k
YXRhL2ZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJv
YXJkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2RhdGEvcGFzc2VzL2Vycm9yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9wYXNzZXMvZXJyb3IuaHRtbDogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9wbGF0Zm9ybS90ZXN0
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGlu
Zy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9wcmludGluZ191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKwogMjAxMC0wOC0zMCAg
Um9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9kYXRhL2ZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9mYWlsdXJlcy9leHBl
Y3RlZC9leGNlcHRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGM1NGUzN2I4YjA4NzE2MWU2Y2RmNGU4
ZjU5YmM0YzQ4NjE5ZjkwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9mYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRt
bApAQCAtMCwwICsxIEBACitleGNlcHRpb24KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQu
aHRtbCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvZmFp
bHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjUzOTgzNDc1M2Q1NjY3
YTYxNzU5YmI2NGIxMjYyMjgxYmI2NmVmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9mYWlsdXJlcy9leHBlY3RlZC9rZXli
b2FyZC5odG1sCkBAIC0wLDAgKzEgQEAKK2tleWJvYXJkCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3Bhc3Nlcy9lcnJvci1leHBlY3Rl
ZC50eHQgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3Bh
c3Nlcy9lcnJvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQyNzI2OTlhZTFiMWNjYTA3MTNj
ZGRlYTk2ZWQ5ZDY5MGFlMTAzMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGFzc2VzL2Vycm9yLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxIEBACitlcnJvci10eHQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGFzc2VzL2Vycm9yLmh0bWwgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3Bhc3Nlcy9lcnJvci5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgyNzY3NTM3NDZiMTJiNTg0M2IyNWVjMjJiNWEwNjE3ODdiMGI2NzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9k
YXRhL3Bhc3Nlcy9lcnJvci5odG1sCkBAIC0wLDAgKzEgQEAKK2Vycm9yCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3BsYXRmb3JtL3Rl
c3QvdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvZGF0YS9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRl
eCA2ZTY2Y2FhYjNmYjZkZDA4NmNkMmY0ZGRmMjIzMTQ5YzE3MjA5ZmE1Li4xNjU1NmUzZjhjMTk0
MDcxMTQ0MWJkNDZlMmM4ODlhM2IxNGMyODliIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3BsYXRmb3JtL3Rlc3QvdGVzdF9leHBlY3Rh
dGlvbnMudHh0CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2RhdGEvcGxhdGZvcm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTgsMyArOCw1IEBA
IFdPTlRGSVggOiBmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdlLmh0bWwgPSBNSVNTSU5H
IFBBU1MKIFdPTlRGSVggOiBmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCA9IE1J
U1NJTkcgUEFTUwogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCA9IFRFWFQK
IFdPTlRGSVggOiBmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwgPSBUSU1FT1VUCitXT05U
RklYIFNLSVAgOiBmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sID0gQ1JBU0gKK1dPTlRG
SVggU0tJUCA6IGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sID0gQ1JBU0gKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQucHkKaW5kZXggNjM0MzQwMDFiNTNkZTFjYzQxYWExMGY3YThlMzhiZTZiNjBhYzlhYi4uZWMz
MzA4NmUxN2ZjOGRlNzI2NzY5OGViMzYwMGViNDNmMjYzZTQ5YSAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKQEAg
LTE2OSw2ICsxNjksMTEgQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFk
KToKICAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKIAogICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKKworICAgIGRlZiBfY292ZXJlZF9y
dW4oc2VsZik6CisgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRv
IHdvcmsgYXJvdW5kIGEgYnVnCisgICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0
YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KICAgICAgICAgdGVzdF9pbmZvID0g
c2VsZi5fdGVzdF9pbmZvCiAgICAgICAgIGRyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZl
cihzZWxmLl9pbWFnZV9wYXRoLCBzZWxmLl9zaGVsbF9hcmdzKQogICAgICAgICBkcml2ZXIuc3Rh
cnQoKQpAQCAtMjg3LDYgKzI5MiwxMSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxl
VGhyZWFkKToKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdv
cmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5jYXVnaHQKICAgICAgICAgZXhj
ZXB0aW9ucy4iIiIKKyAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQorCisgICAgZGVmIF9jb3Zl
cmVkX3J1bihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRp
bmUgdG8gd29yayBhcm91bmQgYSBidWcKKyAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6
Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgogICAgICAgICBzZWxmLl90
aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKICAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKQEAgLTMwMyw5ICszMTMs
OSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAg
IHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHNlbGYu
X3N0b3BfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICAjIFJlLXJhaXNlIGl0IGFuZCBk
aWUuCi0gICAgICAgICAgICBfbG9nLmVycm9yKCclcyBkeWluZzogJXMnICUgKHNlbGYuZ2V0TmFt
ZSgpLAorICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgZHlpbmcsIGV4Y2VwdGlvbiByYWlzZWQ6
ICVzJyAlIChzZWxmLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhj
ZXB0aW9uX2luZm8pKQotICAgICAgICAgICAgcmFpc2UKKwogICAgICAgICBzZWxmLl9zdG9wX3Rp
bWUgPSB0aW1lLnRpbWUoKQogCiAgICAgZGVmIHJ1bl9pbl9tYWluX3RocmVhZChzZWxmLCB0ZXN0
X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgpAQCAtMzIxLDE0ICszMzEsOCBAQCBjbGFzcyBUZXN0
U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKIAogICAgICAgICBJZiB0ZXN0X3J1bm5lciBp
cyBub3QgTm9uZSwgdGhlbiB3ZSBjYWxsIHRlc3RfcnVubmVyLlVwZGF0ZVN1bW1hcnkoKQogICAg
ICAgICB3aXRoIHRoZSByZXN1bHRzIG9mIGVhY2ggdGVzdC4iIiIKLSAgICAgICAgYmF0Y2hfc2l6
ZSA9IDAKKyAgICAgICAgYmF0Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQogICAg
ICAgICBiYXRjaF9jb3VudCA9IDAKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXpl
OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGJhdGNoX3NpemUgPSBpbnQoc2Vs
Zi5fb3B0aW9ucy5iYXRjaF9zaXplKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAg
ICAgIF9sb2cuaW5mbygiSWdub3JpbmcgaW52YWxpZCBiYXRjaCBzaXplICclcyciICUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplKQogCiAgICAgICAg
ICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50
eHQgZmlsZS4KICAgICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5w
eTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3ByaW50aW5nLnB5CmluZGV4IGE5ZTAxNWZjZWVjYjNjOWNjYjZmOGU4YzdmOWU1OGIyZDZkMDk4
OGMuLjkzMWEwMzU1MzZmZGU3ZmQzNmNhOWExYzk4OTExNGY2ZmY4NDRkMDMgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3ByaW50aW5nLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CkBAIC0xMjYsOCArMTI2LDggQEAgZGVmIHBy
aW50X29wdGlvbnMoKToKICAgICBdCiAKIAotZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMs
IG1ldGVyKToKLSAgICAiIiJDb25maWd1cmVzIHRoZSBsb2dnaW5nIHN5c3RlbS4iIiIKK2RlZiBf
Y29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgbWV0ZXIpOgorICAgICIiIkNvbmZpZ3VyZXMgdGhl
IGxvZ2dpbmcgc3lzdGVtLiBSZXR1cm4gdGhlIHByZXZpb3VzIGhhbmRsZXIsIGlmIGFueS4iIiIK
ICAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJwogICAgIGxvZ19kYXRlZm10ID0gJyV5JW0lZCAl
SDolTTolUycKICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KQEAgLTEzNiw5ICsxMzYsMjMg
QEAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIG1ldGVyKToKICAgICAgICAgICAgICAg
ICAgICAnJShtZXNzYWdlKXMnKQogICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCiAK
LSAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZlbCwgZm9ybWF0PWxvZ19mbXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PWxvZ19kYXRlZm10LCBzdHJlYW09bWV0
ZXIpCisgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBoZGxyID0gbG9nZ2luZy5T
dHJlYW1IYW5kbGVyKG1ldGVyKQorICAgIGhkbHIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0
dGVyKGxvZ19mbXQsIE5vbmUpKQorICAgIGlmIG5vdCByb290LmhhbmRsZXJzOgorICAgICAgICBv
bGRfaGFuZGxlciA9IE5vbmUKKyAgICAgICAgcm9vdC5hZGRIYW5kbGVyKGhkbHIpCisgICAgZWxz
ZToKKyAgICAgICAgb2xkX2hhbmRsZXIgPSByb290LmhhbmRsZXJzWzBdCisgICAgICAgIHJvb3Qu
aGFuZGxlcnNbMF0gPSBoZGxyCisgICAgcm9vdC5zZXRMZXZlbChsb2dfbGV2ZWwpCisgICAgcmV0
dXJuIG9sZF9oYW5kbGVyCisKIAorZGVmIF9yZXN0b3JlX2xvZ2dpbmcoaGRscik6CisgICAgcm9v
dCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBpZiByb290IGFuZCByb290LmhhbmRsZXJzWzBd
OgorICAgICAgICByb290LmhhbmRsZXJzWzBdID0gaGRscgogCiBkZWYgcGFyc2VfcHJpbnRfb3B0
aW9ucyhwcmludF9vcHRpb25zLCB2ZXJib3NlLCBjaGlsZF9wcm9jZXNzZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpc19mdWxseV9wYXJhbGxlbCk6CkBAIC0yMzcsMTEgKzI1MSwyMCBAQCBj
bGFzcyBQcmludGVyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fbWV0ZXIgPSBtZXRlcmVkX3N0
cmVhbS5NZXRlcmVkU3RyZWFtKG9wdGlvbnMudmVyYm9zZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0KQotICAgICAgICBj
b25maWd1cmVfbG9nZ2luZyhzZWxmLl9vcHRpb25zLCBzZWxmLl9tZXRlcikKKyAgICAgICAgc2Vs
Zi5fb2xkX2hhbmRsZXIgPSBfY29uZmlndXJlX2xvZ2dpbmcoc2VsZi5fb3B0aW9ucywgc2VsZi5f
bWV0ZXIpCiAKICAgICAgICAgc2VsZi5zd2l0Y2hlcyA9IHBhcnNlX3ByaW50X29wdGlvbnMob3B0
aW9ucy5wcmludF9vcHRpb25zLAogICAgICAgICAgICAgb3B0aW9ucy52ZXJib3NlLCBjaGlsZF9w
cm9jZXNzZXMsIGlzX2Z1bGx5X3BhcmFsbGVsKQogCisgICAgZGVmIGNsZWFudXAoc2VsZik6Cisg
ICAgICAgICIiIlJlc3RvcmUgbG9nZ2luZyBjb25maWd1cmF0aW9uIHRvIGl0cyBpbml0aWFsIHNl
dHRpbmdzLiIiIgorICAgICAgICBfcmVzdG9yZV9sb2dnaW5nKHNlbGYuX29sZF9oYW5kbGVyKQor
ICAgICAgICBzZWxmLl9vbGRfaGFuZGxlciA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl9vbGRfaGFuZGxlcjoKKyAgICAgICAgICAgIF9yZXN0b3JlX2xv
Z2dpbmcoc2VsZi5fb2xkX2hhbmRsZXIpCisKICAgICAjIFRoZXNlIHR3byByb3V0aW5lcyBqdXN0
IGhpZGUgdGhlIGltcGxtZW50YXRpb24gb2YgdGhlIHN3aXRjaGVzLgogICAgIGRlZiBkaXNhYmxl
ZChzZWxmLCBvcHRpb24pOgogICAgICAgICByZXR1cm4gbm90IG9wdGlvbiBpbiBzZWxmLnN3aXRj
aGVzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0
LnB5CmluZGV4IDQwYzY5MWY5YTEwZTg0YzljZDk0N2MyZWM5M2E4NjI5MTU5ZmRlMWEuLjgyZjIz
ODcyODA1NjNlZTFkYTA4NzQ0NGViMDViNTBlZWFmYzg5OWYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5n
X3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5CkBAIC0zNyw2ICszNyw3IEBA
IGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3ZWJraXRweS5jb21tb24g
aW1wb3J0IGFycmF5X3N0cmVhbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBs
b2d0ZXN0aW5nCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQKQEAgLTUzLDI1ICs1NCwyNCBAQCBkZWYgZ2V0X29wdGlvbnMoYXJncyk6CiAK
IGNsYXNzIFRlc3RVdGlsaXR5RnVuY3Rpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYg
dGVzdF9jb25maWd1cmVfbG9nZ2luZyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogV2UgbmVlZCB0
byBmaWd1cmUgb3V0IGhvdyB0byByZXNldCB0aGUgYmFzaWMgbG9nZ2VyLgotICAgICAgICAjIEZJ
WE1FOiBJZiBvdGhlciB0ZXN0aW5nIGNsYXNzZXMgY2FsbCBsb2dnaW5nLmJhc2ljQ29uZmlnKCkg
dGhlbgotICAgICAgICAjIEZJWE1FOiB0aGVzZSBjYWxscyBiZWNvbWUgbm8tb3BzIGFuZCB3ZSBj
YW4ndCBjb250cm9sIHRoZQotICAgICAgICAjIEZJWE1FOiBjb25maWd1cmF0aW9uIHRvIHRlc3Qg
dGhpbmdzIHByb3Blcmx5LgogICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoW10p
CiAgICAgICAgIHN0cmVhbSA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCi0gICAgICAgIHBy
aW50aW5nLmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkKKyAgICAgICAgaGRsciA9
IHByaW50aW5nLl9jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zLCBzdHJlYW0pCiAgICAgICAgIGxv
Z2dpbmcuaW5mbygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKLSAgICAgICAgIyBzZWxmLmFzc2Vy
dEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5l
bXB0eSgpKQogCiAgICAgICAgIHN0cmVhbS5yZXNldCgpCiAgICAgICAgIGxvZ2dpbmcuZGVidWco
InRoaXMgc2hvdWxkIG5vdCBiZSBsb2dnZWQiKQotICAgICAgICAjIHNlbGYuYXNzZXJ0VHJ1ZShz
dHJlYW0uZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmVhbS5lbXB0eSgpKQor
CisgICAgICAgIHByaW50aW5nLl9yZXN0b3JlX2xvZ2dpbmcoaGRscikKIAogICAgICAgICBzdHJl
YW0ucmVzZXQoKQogICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoWyctLXZlcmJv
c2UnXSkKLSAgICAgICAgcHJpbnRpbmcuY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgc3RyZWFt
KQorICAgICAgICBoZGxyID0gcHJpbnRpbmcuX2NvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0
cmVhbSkKICAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGhpcyBzaG91bGQgYmUgbG9nZ2VkIikKLSAg
ICAgICAgIyBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQorICAgICAgICBwcmludGluZy5fcmVzdG9yZV9sb2dn
aW5nKGhkbHIpCiAKICAgICBkZWYgdGVzdF9wcmludF9vcHRpb25zKHNlbGYpOgogICAgICAgICBv
cHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoW10pCkBAIC00MjEsMTEgKzQyMSwxMiBAQCBjbGFz
cyAgVGVzdHByaW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKGVyci5lbXB0eSgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCiAK
LSAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICBkZWYgdGVzdF93cml0ZV9ub3RoaW5nKHNl
bGYpOgogICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXBy
aW50JywgJ25vdGhpbmcnXSkKICAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKICAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGVyci5lbXB0eSgpKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfbWlzYyhz
ZWxmKToKICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1w
cmludCcsICdtaXNjJ10pCiAgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCkBAIC00MzMsNiArNDM0LDcgQEAgY2xhc3MgIFRl
c3RwcmludGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcHJpbnRlci53cml0ZSgiZm9v
IiwgImNvbmZpZyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKIAorICAg
IGRlZiB0ZXN0X3dyaXRlX2V2ZXJ5dGhpbmcoc2VsZik6CiAgICAgICAgIHByaW50ZXIsIGVyciwg
b3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQogICAgICAg
ICBwcmludGVyLndyaXRlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQpAQCAtNDQwLDExICs0NDIsMTAgQEAgY2xhc3MgIFRlc3RwcmludGVyKHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNvbmZpZyIpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCiAKLSAgICAgICAgIyBGSVhNRTogdGhpcyBz
aG91bGQgYmUgbG9nZ2VkIHNvbWV3aGVyZSwgYnV0IGl0IGFjdHVhbGx5Ci0gICAgICAgICMgZGlz
YXBwZWFycyBpbnRvIHRoZSBldGhlciBpbiB0aGUgbG9nZ2luZyBzdWJzeXN0ZW0uCisgICAgZGVm
IHRlc3Rfd3JpdGVfdmVyYm9zZShzZWxmKToKICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKFsnLS12ZXJib3NlJ10pCiAgICAgICAgIHByaW50ZXIud3JpdGUoImZv
byIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG5vdCBlcnIuZW1wdHkoKSBhbmQgImZvbyIgaW4gZXJyLmdldCgpWzBdKQogICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCiAKICAgICBkZWYgdGVzdF9wcmludF91
bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZik6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggYWYxYWY5M2QzZDAyNDZh
NWI3OTk5MjA4NjE4YTBjYWYwMmU4ZGEwZC4uMGRkYTc3NDFlYTJlMDMxZGRmMzQwOGRiMTA3OTEz
NzcwZWU0ZTY0MSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAgICAgaWYgbm90IHNlbGYuX3dlYmtpdF9iYXNlX2RpcjoKICAgICAgICAg
ICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCiAgICAgICAgICAgICBzZWxm
Ll93ZWJraXRfYmFzZV9kaXIgPSBhYnNwYXRoWzA6YWJzcGF0aC5maW5kKCdXZWJLaXRUb29scycp
XQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVXNpbmcgV2ViS2l0IHJvb3Q6ICVzIiAlIHNlbGYu
X3dlYmtpdF9iYXNlX2RpcikKIAogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3dl
YmtpdF9iYXNlX2RpciwgKmNvbXBzKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggZDM2YjU0MGM3NWFhOGY3
ZDA0OTYxMmEwNDNlMDI0N2UyOTk4YTA3Zi4uZTMwOTMzNDZiMThlNDFlZDlhZWEzOTQ4ZDEzNGNm
MWZiMGJkMzM5YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtMTUxLDcgKzE1MSwxMCBAQCBjbGFzcyBUZXN0
RHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0
bXMsIGltYWdlX2hhc2gpOgogICAgICAgICBiYXNlbmFtZSA9IHVyaVsodXJpLnJmaW5kKCIvIikg
KyAxKTp1cmkucmZpbmQoIi5odG1sIildCiAKLSAgICAgICAgZXJyb3IgPSAnJworICAgICAgICBp
ZiAnZXJyb3InIGluIGJhc2VuYW1lOgorICAgICAgICAgICAgZXJyb3IgPSBiYXNlbmFtZSArICJf
ZXJyb3JcbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycm9yID0gJycKICAgICAgICAg
Y2hlY2tzdW0gPSBOb25lCiAgICAgICAgICMgVGhlcmUgYXJlIGZvdXIgY3VycmVudGx5IHN1cHBv
cnRlZCB0eXBlcyBvZiB0ZXN0czogdGV4dCwgaW1hZ2UsCiAgICAgICAgICMgaW1hZ2UgaGFzaCAo
Y2hlY2tzdW0pLCBhbmQgc3RkZXJyIG91dHB1dC4gVGhlIGZha2Ugb3V0cHV0CkBAIC0xNzAsMTAg
KzE3MywxMyBAQCBjbGFzcyBUZXN0RHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgIyB3aWxs
IGFsbG93IHVzIHRvIHNlZSBpZiBhbnkgcmVzdWx0cyBnZXQgY3Jvc3NlZCBieSB0aGUgcmVzdCBv
ZiB0aGUKICAgICAgICAgIyBwcm9ncmFtLgogICAgICAgICBpZiAnZmFpbHVyZXMnIGluIHVyaToK
KyAgICAgICAgICAgIGlmICdrZXlib2FyZCcgaW4gYmFzZW5hbWU6CisgICAgICAgICAgICAgICAg
cmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgICAgIGlmICdleGNlcHRpb24nIGluIGJh
c2VuYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2V4Y2VwdGlvbiBmcm9t
ICcgKyBiYXNlbmFtZSkKKwogICAgICAgICAgICAgY3Jhc2ggPSAnY3Jhc2gnIGluIGJhc2VuYW1l
CiAgICAgICAgICAgICB0aW1lb3V0ID0gJ3RpbWVvdXQnIGluIGJhc2VuYW1lCi0gICAgICAgICAg
ICBpZiAnZXJyb3InIGluIGJhc2VuYW1lOgotICAgICAgICAgICAgICAgIGVycm9yID0gYmFzZW5h
bWUgKyAiX2Vycm9yXG4iCiAgICAgICAgICAgICBpZiAndGV4dCcgaW4gYmFzZW5hbWU6CiAgICAg
ICAgICAgICAgICAgb3V0cHV0ID0gYmFzZW5hbWUgKyAnX2ZhaWxlZC10eHRcbicKICAgICAgICAg
ICAgIGVsc2U6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA3MTYzZTFiYzU2OTE1ZDU1
YTBjNDA2OWFkZTlkZGZjYzlkZTJiNjEwLi5iMWUxZjZjODU5NDM1NzI1Nzk1NDllZGY4NTIyNmYx
ODcxMjNlNWNhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTEwNiwxMiArMTA2LDEx
IEBAIGNsYXNzIFRlc3RJbmZvOgogICAgICAgICBzZWxmLl9pbWFnZV9oYXNoID0gTm9uZQogCiAg
ICAgZGVmIF9yZWFkX2ltYWdlX2hhc2goc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IHdpdGggY29kZWNzLm9wZW4oc2VsZi5fZXhwZWN0ZWRfaGFzaF9wYXRoLCAiciIsICJhc2NpaSIp
IGFzIGhhc2hfZmlsZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFzaF9maWxlLnJlYWQoKQot
ICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgIGlmIGVycm5vLkVOT0VOVCAh
PSBlLmVycm5vOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRo
LmV4aXN0cyhzZWxmLl9leHBlY3RlZF9oYXNoX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX2V4cGVjdGVkX2hhc2hfcGF0aCwg
InIiLCAiYXNjaWkiKSBhcyBoYXNoX2ZpbGU6CisgICAgICAgICAgICByZXR1cm4gaGFzaF9maWxl
LnJlYWQoKQogCiAgICAgZGVmIGltYWdlX2hhc2goc2VsZik6CiAgICAgICAgICMgUmVhZCB0aGUg
aW1hZ2VfaGFzaCBsYXppbHkgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4KQEAgLTMzNiw4ICszMzUs
OCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVj
dGVkKCJGb3VuZDogICVkIHRlc3RzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGxlbihzZWxmLl90ZXN0X2ZpbGVzKSkpCiAgICAgICAgIGlmIG5vdCBudW1fYWxsX3Rl
c3RfZmlsZXM6Ci0gICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCJObyB0ZXN0cyB0byBydW4uIikK
LSAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCdObyB0
ZXN0cyB0byBydW4uJykKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgc2tpcHBl
ZCA9IHNldCgpCiAgICAgICAgIGlmIG51bV9hbGxfdGVzdF9maWxlcyA+IDEgYW5kIG5vdCBzZWxm
Ll9vcHRpb25zLmZvcmNlOgpAQCAtNzI2LDggKzcyNSwxMSBAQCBjbGFzcyBUZXN0UnVubmVyOgog
ICAgICAgICBSZXR1cm46CiAgICAgICAgICAgVGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJlc3Vs
dHMgKDAgPT0gc3VjY2VzcykKICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0
X2ZpbGVzOgotICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgIyBnYXRoZXJfdGVzdF9maWxl
cygpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBmaXJzdCB0byBpbml0aWFsaXplIHVzLgorICAgICAg
ICAjIElmIHdlIGRpZG4ndCBmaW5kIGFueSBmaWxlcyB0byB0ZXN0LCB3ZSd2ZSBlcnJvcmVkIG91
dCBhbHJlYWR5IGluCisgICAgICAgICMgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KCku
CisgICAgICAgIGFzc2VydChsZW4oc2VsZi5fdGVzdF9maWxlcykpCisKICAgICAgICAgc3RhcnRf
dGltZSA9IHRpbWUudGltZSgpCiAKICAgICAgICAgaWYgc2VsZi5uZWVkc19odHRwKCk6CkBAIC0x
NDIyLDYgKzE0MjQsOCBAQCBkZWYgcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzLCByZWd1bGFy
X291dHB1dD1zeXMuc3RkZXJyLAogCiAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIlByZXBhcmlu
ZyB0ZXN0cyAuLi4iKQogICAgIHJlc3VsdF9zdW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFyZV9s
aXN0c19hbmRfcHJpbnRfb3V0cHV0KCkKKyAgICBpZiBub3QgcmVzdWx0X3N1bW1hcnk6CisgICAg
ICAgIHJldHVybiAtMQogCiAgICAgcG9ydF9vYmouc2V0dXBfdGVzdF9ydW4oKQogCkBAIC0xNDMz
LDYgKzE0MzcsOCBAQCBkZWYgcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291
dHB1dD1zeXMuc3RkZXJyLAogCiAgICAgcG9ydF9vYmouc3RvcF9oZWxwZXIoKQogCisgICAgcHJp
bnRlci5jbGVhbnVwKCkKKwogICAgIF9sb2cuZGVidWcoIkV4aXQgc3RhdHVzOiAlZCIgJSBudW1f
dW5leHBlY3RlZF9yZXN1bHRzKQogICAgIHJldHVybiBudW1fdW5leHBlY3RlZF9yZXN1bHRzCiAK
QEAgLTE1OTcsNyArMTYwMyw3IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAg
ICMgICBSZXN0YXJ0IER1bXBSZW5kZXJUcmVlIGV2ZXJ5IG4gdGVzdHMgKGRlZmF1bHQ6IDEwMDAp
CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWJhdGNoLXNpemUiLAogICAgICAgICAg
ICAgaGVscD0oIlJ1biBhIHRoZSB0ZXN0cyBpbiBiYXRjaGVzIChuKSwgYWZ0ZXIgZXZlcnkgbiB0
ZXN0cywgIgotICAgICAgICAgICAgICAgICAgIkR1bXBSZW5kZXJUcmVlIGlzIHJlbGF1bmNoZWQu
IikpLAorICAgICAgICAgICAgICAgICAgIkR1bXBSZW5kZXJUcmVlIGlzIHJlbGF1bmNoZWQuIiks
IHR5cGU9ImludCIsIGRlZmF1bHQ9MCksCiAgICAgICAgICMgb2xkLXJ1bi13ZWJraXQtdGVzdHMg
Y2FsbHMgLS1ydW4tc2luZ2x5OiAtMXwtLXNpbmdseQogICAgICAgICAjIElzb2xhdGUgZWFjaCB0
ZXN0IGNhc2UgcnVuIChpbXBsaWVzIC0tbnRobHkgMSAtLXZlcmJvc2UpCiAgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItLXJ1bi1zaW5nbHkiLCBhY3Rpb249InN0b3JlX3RydWUiLApkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggM2EzYjE0ZTVjYmU1
NGQ5M2QyYzdkN2MyMzQzYmYyNmQ2OTQzMzRiMy4uNGNiZmRmY2RmOGI5ZmQ1YTMzOGVmMTQ4OTVi
ODdiNTgxZDVjOTg5OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5CkBAIC00MSw2ICs0MSw3IEBAIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB1bml0dGVzdAog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFtCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzIGltcG9ydCBwb3J0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVu
X3dlYmtpdF90ZXN0cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCkBAIC00OCw3NSArNDksMTM5IEBAIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3JlbmRlcl90
cmVlX3RocmVhZAogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKIAog
Ci1kZWYgcGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFs
c2UsCitkZWYgcGFzc2luZ19ydW4oYXJncz1bXSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3Vs
dHM9RmFsc2UsCiAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9RmFsc2UpOgotICAgIGFy
Z3MuZXh0ZW5kKFsnLS1wcmludCcsICdub3RoaW5nJ10pCisgICAgbmV3X2FyZ3MgPSBbJy0tcHJp
bnQnLCAnbm90aGluZyddCisgICAgaWYgbm90ICctLXBsYXRmb3JtJyBpbiBhcmdzOgorICAgICAg
ICBuZXdfYXJncy5leHRlbmQoWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkKKyAgICBpZiBub3QgcmVj
b3JkX3Jlc3VsdHM6CisgICAgICAgIG5ld19hcmdzLmFwcGVuZCgnLS1uby1yZWNvcmQtcmVzdWx0
cycpCisgICAgbmV3X2FyZ3MuZXh0ZW5kKGFyZ3MpCiAgICAgaWYgbm90IHRlc3RzX2luY2x1ZGVk
OgogICAgICAgICAjIFdlIHVzZSB0aGUgZ2xvYiB0byB0ZXN0IHRoYXQgZ2xvYmJpbmcgd29ya3Mu
Ci0gICAgICAgIGFyZ3MuZXh0ZW5kKFsncGFzc2VzJywgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkK
LSAgICBpZiBub3QgcmVjb3JkX3Jlc3VsdHM6Ci0gICAgICAgIGFyZ3MuYXBwZW5kKCctLW5vLXJl
Y29yZC1yZXN1bHRzJykKLSAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJz
ZV9hcmdzKGFyZ3MpCisgICAgICAgIG5ld19hcmdzLmV4dGVuZChbJ3Bhc3NlcycsICdmYWlsdXJl
cy9leHBlY3RlZC8qJ10pCisgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBydW5fd2Via2l0X3Rl
c3RzLnBhcnNlX2FyZ3MobmV3X2FyZ3MpCiAgICAgaWYgcG9ydF9vYmogaXMgTm9uZToKICAgICAg
ICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQotICAgIHJl
cyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQorICAgIHJl
cyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncykK
ICAgICByZXR1cm4gcmVzID09IDAKIAogCi1kZWYgbG9nZ2luZ19ydW4oYXJncywgdGVzdHNfaW5j
bHVkZWQ9RmFsc2UpOgotICAgIGFyZ3MuZXh0ZW5kKFsnLS1uby1yZWNvcmQtcmVzdWx0cyddKQor
ZGVmIGxvZ2dpbmdfcnVuKGFyZ3M9W10sIHRlc3RzX2luY2x1ZGVkPUZhbHNlKToKKyAgICBuZXdf
YXJncyA9IFsnLS1uby1yZWNvcmQtcmVzdWx0cyddCisgICAgaWYgbm90ICctLXBsYXRmb3JtJyBp
biBhcmdzOgorICAgICAgICBuZXdfYXJncy5leHRlbmQoWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkK
KyAgICBpZiBhcmdzOgorICAgICAgICBuZXdfYXJncy5leHRlbmQoYXJncykKICAgICBpZiBub3Qg
dGVzdHNfaW5jbHVkZWQ6Ci0gICAgICAgIGFyZ3MuZXh0ZW5kKFsncGFzc2VzJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkLyonXSkKLSAgICBvcHRpb25zLCBhcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJz
ZV9hcmdzKGFyZ3MpCisgICAgICAgIG5ld19hcmdzLmV4dGVuZChbJ3Bhc3NlcycsICdmYWlsdXJl
cy9leHBlY3RlZC8qJ10pCisgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBydW5fd2Via2l0X3Rl
c3RzLnBhcnNlX2FyZ3MobmV3X2FyZ3MpCiAgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25z
LnBsYXRmb3JtLCBvcHRpb25zKQogICAgIGJ1aWxkYm90X291dHB1dCA9IGFycmF5X3N0cmVhbS5B
cnJheVN0cmVhbSgpCiAgICAgcmVndWxhcl9vdXRwdXQgPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJl
YW0oKQotICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBh
cmdzLAorICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBw
YXJzZWRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGJvdF9vdXRw
dXQ9YnVpbGRib3Rfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3Vs
YXJfb3V0cHV0PXJlZ3VsYXJfb3V0cHV0KQogICAgIHJldHVybiAocmVzLCBidWlsZGJvdF9vdXRw
dXQsIHJlZ3VsYXJfb3V0cHV0KQogCiAKIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLSAgICBkZWYgdGVzdF9mYXN0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUocGFz
c2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctLXJ1bi1zaW5nbHknXSkpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAndGVzdCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwn
XSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bigpKQogCi0gICAgZGVmIHRlc3RfdW5leHBl
Y3RlZF9mYWlsdXJlcyhzZWxmKToKLSAgICAgICAgIyBSdW4gdGVzdHMgaW5jbHVkaW5nIHRoZSB1
bmV4cGVjdGVkIGZhaWx1cmVzLgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhc3NpbmdfcnVu
KFsnLS1wbGF0Zm9ybScsICd0ZXN0J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSkpCisgICAgZGVmIHRlc3RfYmF0Y2hfc2l6ZShzZWxmKToKKyAgICAgICAg
IyBGSVhNRTogdmVyaWZ5ICMgb2YgdGVzdHMgcnVuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShw
YXNzaW5nX3J1bihbJy0tYmF0Y2gtc2l6ZScsICcyJ10pKQogCi0gICAgZGVmIHRlc3Rfb25lX2No
aWxkX3Byb2Nlc3Moc2VsZik6CisgICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vzc18xKHNlbGYpOgog
ICAgICAgICAocmVzLCBidWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0KSA9IGxvZ2dpbmdf
cnVuKAotICAgICAgICAgICAgIFsnLS1wbGF0Zm9ybScsICd0ZXN0JywgJy0tcHJpbnQnLCAnY29u
ZmlnJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywKLSAgICAgICAgICAgICAgJzEnXSkKKyAgICAgICAg
ICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzEnXSkKICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKCdSdW5uaW5nIG9uZSBEdW1wUmVuZGVyVHJlZVxuJwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gcmVndWxhcl9vdXRwdXQuZ2V0KCkpCiAKLSAgICBkZWYg
dGVzdF90d29fY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nl
c3Nlc18yKHNlbGYpOgogICAgICAgICAocmVzLCBidWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0
cHV0KSA9IGxvZ2dpbmdfcnVuKAotICAgICAgICAgICAgIFsnLS1wbGF0Zm9ybScsICd0ZXN0Jywg
Jy0tcHJpbnQnLCAnY29uZmlnJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywKLSAgICAgICAgICAgICAg
JzInXSkKKyAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywgJy0tY2hpbGQtcHJvY2Vz
c2VzJywgJzInXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdSdW5uaW5nIDIgRHVtcFJlbmRl
clRyZWVzIGluIHBhcmFsbGVsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICBpbiByZWd1bGFy
X291dHB1dC5nZXQoKSkKIAorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9yYWlzZWQoc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAorICAgICAg
ICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCddLCB0ZXN0c19pbmNsdWRl
ZD1UcnVlKQorCisgICAgZGVmIHRlc3RfZnVsbF9yZXN1bHRzX2h0bWwoc2VsZik6CisgICAgICAg
ICMgRklYTUU6IHZlcmlmeSBodG1sPworICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19y
dW4oWyctLWZ1bGwtcmVzdWx0cy1odG1sJ10pKQorCisgICAgZGVmIHRlc3RfaGVscF9wcmludGlu
ZyhzZWxmKToKKyAgICAgICAgcmVzLCBvdXQsIGVyciA9IGxvZ2dpbmdfcnVuKFsnLS1oZWxwLXBy
aW50aW5nJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVt
cHR5KCkpCisKKyAgICBkZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAg
ICMgTm90ZSB0aGF0IHRoaXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJ
UCBpZgorICAgICAgICAjIHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBwYXNzaW5nX3J1biwKKyAgICAgICAgICAg
IFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVl
KQorCiAgICAgZGVmIHRlc3RfbGFzdF9yZXN1bHRzKHNlbGYpOgotICAgICAgICBwYXNzaW5nX3J1
bihbJy0tcGxhdGZvcm0nLCAndGVzdCddLCByZWNvcmRfcmVzdWx0cz1UcnVlKQorICAgICAgICBw
YXNzaW5nX3J1bihbJy0tY2xvYmJlci1vbGQtcmVzdWx0cyddLCByZWNvcmRfcmVzdWx0cz1UcnVl
KQogICAgICAgICAocmVzLCBidWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0KSA9IGxvZ2dp
bmdfcnVuKAotICAgICAgICAgICAgWyctLXBsYXRmb3JtJywgJ3Rlc3QnLCAnLS1wcmludC1sYXN0
LWZhaWx1cmVzJ10pCisgICAgICAgICAgICBbJy0tcHJpbnQtbGFzdC1mYWlsdXJlcyddKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ3VsYXJfb3V0cHV0LmdldCgpLCBbJ1xuXG4nXSkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZGJvdF9vdXRwdXQuZ2V0KCksIFtdKQogCisgICAg
ZGVmIHRlc3RfbGludF90ZXN0X2ZpbGVzKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiAgYWRkIGVy
cm9ycz8KKyAgICAgICAgcmVzLCBvdXQsIGVyciA9IGxvZ2dpbmdfcnVuKFsnLS1saW50LXRlc3Qt
ZmlsZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChy
ZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGFueShbJ2xpbnQgc3VjY2VlZGVkJyBpbiBtc2cgZm9yIG1zZyBpbiBlcnIu
Z2V0KCldKSkKKwogICAgIGRlZiB0ZXN0X25vX3Rlc3RzX2ZvdW5kKHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBsb2dnaW5nX3J1biwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgWyctLXBsYXRmb3JtJywgJ3Rlc3QnLCAncmVzb3VyY2VzJ10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIGxvZ2dpbmdfcnVuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBbJy0tcGxhdGZvcm0nLCAndGVzdCcsICdmb28nXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgcmVzLCBvdXQsIGVyciA9IGxvZ2dp
bmdfcnVuKFsncmVzb3VyY2VzJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05vIHRlc3RzIHRvIHJ1bi5cbicgaW4gZXJyLmdl
dCgpKQorCisgICAgZGVmIHRlc3Rfbm9fdGVzdHNfZm91bmRfMihzZWxmKToKKyAgICAgICAgcmVz
LCBvdXQsIGVyciA9IGxvZ2dpbmdfcnVuKFsnZm9vJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05vIHRlc3RzIHRvIHJ1bi5c
bicgaW4gZXJyLmdldCgpKQorCisgICAgZGVmIHRlc3RfcmFuZG9taXplX29yZGVyKHNlbGYpOgor
ICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgb3JkZXIgd2FzIHNodWZmbGVkCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcmFuZG9taXplLW9yZGVyJ10pKQorCisgICAgZGVm
IHRlc3RfcnVuX2NodW5rKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgIyBvZiB0ZXN0
cyBydW4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1ydW4tY2h1bmsn
LCAnMTo0J10pKQorCisgICAgZGVmIHRlc3RfcnVuX2ZvcmNlKHNlbGYpOgorICAgICAgICAjIFRo
aXMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIHdlIHJ1bgorICAgICAgICAjIGZhaWx1cmVz
L2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sLCB3aGljaCBpcyBub3JtYWxseSBTS0lQcGVkLgorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLWZvcmNl
J10pCisKKyAgICBkZWYgdGVzdF9ydW5fcGFydChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogdmVy
aWZ5ICMgb2YgdGVzdHMgcnVuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihb
Jy0tcnVuLXBhcnQnLCAnMToyJ10pKQorCisgICAgZGVmIHRlc3RfcnVuX3NpbmdseShzZWxmKToK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1ydW4tc2luZ2x5J10pKQor
CisgICAgZGVmIHRlc3Rfc2luZ2xlX2ZpbGUoc2VsZik6CisgICAgICAgICMgRklYTUU6IHZlcmlm
eSAjIG9mIHRlc3RzIHJ1bgorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWydw
YXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpKQorCisgICAgZGVmIHRlc3Rf
dW5leHBlY3RlZF9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgIyBSdW4gdGVzdHMgaW5jbHVkaW5n
IHRoZSB1bmV4cGVjdGVkIGZhaWx1cmVzLgorICAgICAgICByZXMsIG91dCwgZXJyID0gbG9nZ2lu
Z19ydW4odGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMs
IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKIAogZGVmIF9tb2NrZWRfb3BlbihvcmlnaW5hbF9v
cGVuLCBmaWxlX2xpc3QpOgogICAgIGRlZiBfd3JhcHBlcihuYW1lLCBtb2RlLCBlbmNvZGluZyk6
CkBAIC0xNDQsNyArMjA5LDcgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAgICAgIyBpcyBtaXNzaW5nLCB1cGRhdGUgdGhlIGV4cGVjdGVkIGdlbmVy
aWMgbG9jYXRpb24uCiAgICAgICAgICAgICBmaWxlX2xpc3QgPSBbXQogICAgICAgICAgICAgY29k
ZWNzLm9wZW4gPSBfbW9ja2VkX29wZW4ob3JpZ2luYWxfb3BlbiwgZmlsZV9saXN0KQotICAgICAg
ICAgICAgcGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ3Rlc3QnLCAnLS1waXhlbC10ZXN0cycs
CisgICAgICAgICAgICBwYXNzaW5nX3J1bihbJy0tcGl4ZWwtdGVzdHMnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICctLXJlc2V0LXJlc3VsdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICdwYXNzZXMvaW1hZ2UuaHRtbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVz
L2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCddLApAQCAtMTY1LDcgKzIzMCw3IEBAIGNsYXNz
IFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICMgaXMgbXNz
aW5nLCB0aGVuIGNyZWF0ZSBhIG5ldyBleHBlY3RhdGlvbiBpbiB0aGUgcGxhdGZvcm0gZGlyLgog
ICAgICAgICAgICAgZmlsZV9saXN0ID0gW10KICAgICAgICAgICAgIGNvZGVjcy5vcGVuID0gX21v
Y2tlZF9vcGVuKG9yaWdpbmFsX29wZW4sIGZpbGVfbGlzdCkKLSAgICAgICAgICAgIHBhc3Npbmdf
cnVuKFsnLS1wbGF0Zm9ybScsICd0ZXN0JywgJy0tcGl4ZWwtdGVzdHMnLAorICAgICAgICAgICAg
cGFzc2luZ19ydW4oWyctLXBpeGVsLXRlc3RzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAn
LS1uZXctYmFzZWxpbmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvaW1hZ2Uu
aHRtbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3Np
bmdfaW1hZ2UuaHRtbCddLApAQCAtMjA4LDYgKzI3Myw3IEBAIGNsYXNzIERyeXJ1blRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gImRhcndpbiI6CiAg
ICAgICAgICAgICByZXR1cm4KIAorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4o
WyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5n
X3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnZmFzdC9odG1sJ10pKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2lu
Z19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1tYWMnLApAQCAtMjIzLDYgKzI4OSwxMSBAQCBj
bGFzcyBUZXN0VGhyZWFkKGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldhdGNoYWJsZVRocmVhZCk6
CiAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAKICAgICBkZWYg
cnVuKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCisKKyAgICBkZWYgX2NvdmVy
ZWRfcnVuKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91dGlu
ZSB0byB3b3JrIGFyb3VuZCBhIGJ1ZworICAgICAgICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0cDov
L2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkvaXNzdWUvODUuCiAgICAgICAgIHNlbGYuX3Ro
cmVhZF9pZCA9IHRocmVhZC5nZXRfaWRlbnQoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBz
ZWxmLl9zdGFydGVkX3F1ZXVlLnB1dCgnJykKQEAgLTI4NCw4ICszNTUsMTEgQEAgY2xhc3MgV2Fp
dEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxm
LmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCiAKICAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgor
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKICAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFk
KCdUaW1lb3V0JykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKyAgICAg
ICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFk
LCAnRXhjZXB0aW9uJykKQEAgLTI5Myw2ICszNjcsOCBAQCBjbGFzcyBXYWl0Rm9yVGhyZWFkc1Rv
RmluaXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKIGNsYXNzIFN0YW5kYWxvbmVGdW5jdGlv
bnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3RocmVh
ZChzZWxmKToKKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAg
ICAgICBvYy5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIGxvZ2dlciA9IHJ1bl93ZWJraXRfdGVz
dHMuX2xvZwogICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKICAg
ICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCkBAIC0zMTAsNiArMzg2LDcgQEAg
Y2xhc3MgU3RhbmRhbG9uZUZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmVhbS5lbXB0eSgpKQogICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGNoaWxkX3RocmVhZC5pc0FsaXZlKCkpCisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0
KCkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrKHNlbGYpOgogICAgICAgICBpZCwg
c3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66151</attachid>
            <date>2010-08-31 17:47:58 -0700</date>
            <delta_ts>2010-09-01 17:39:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44902-20100831174757.patch</filename>
            <type>text/plain</type>
            <size>42043</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiM2Q4YjdjZDA2NjQ1MDdjZmY5ZWU3ZDlhNTYwMGJhMzgyNjg0OGEwLi5mZDU3OGQ0
YzgyNGQyN2Q4YWYxM2UyZTBkOGE3NTkwZDczYjNkMjA0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMDgtMzEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGFuZCBhIHBhdGNoZWQg
dmVyc2lvbiBvZiByNjY1NDIgLSBjaGFuZ2UgVGVzdFJ1bm5lciB0byBoYXZlIGFuCisgICAgICAg
IHNlcGFyYXRlIGNsZWFudXAgbWV0aG9kIGFuZCBmaXggdGhlIG9yZGVyaW5nIG9mIGNsZWFudXAg
YmV0d2VlbgorICAgICAgICBUZXN0UnVubmVyIGFuZCB0aGUgcHJpbnRpbmcgbW9kdWxlLCBhbmQg
dGhlbiB3cmFwIGV2ZXJ5dGhpbmcgaW4gYQorICAgICAgICB0cnkvZmluYWxseSBibG9jayB0byBl
bnN1cmUgcmVsaWFibGUgY2xlYW51cCB3aXRob3V0IG5lZWRpbmcgdG8KKyAgICAgICAgcmVseSBv
biBzdHVmZiBoYXBwZW5pbmcgaW4gdGhlIGRlc3RydWN0b3Igb2YgdGhlIFRlc3RSdW5uZXIuCisK
KyAgICAgICAgVGhpcyBmaXhlcyB0aGUgY3Jhc2ggYXQgdGhlIGVuZCBvZiB0aGUgbGludXggdGVz
dCBydW4gb2YKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHMgKGFuZCB1bmRvZXMgdGhlIHJv
bGxvdXQgaW4gNjY1NDcpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDkwMgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvZGF0YS9mYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9mYWlsdXJlcy9leHBlY3RlZC9r
ZXlib2FyZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9kYXRhL3Bhc3Nlcy9lcnJvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGFzc2VzL2Vycm9yLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGxhdGZvcm0v
dGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJp
bnRpbmcucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMDgt
MzEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2RhdGEvZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL2ZhaWx1cmVzL2V4
cGVjdGVkL2V4Y2VwdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4YzU0ZTM3YjhiMDg3MTYxZTZjZGY0
ZThmNTliYzRjNDg2MTlmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL2ZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5o
dG1sCkBAIC0wLDAgKzEgQEAKK2V4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9mYWlsdXJlcy9leHBlY3RlZC9rZXlib2Fy
ZC5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9m
YWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNTM5ODM0NzUzZDU2
NjdhNjE3NTliYjY0YjEyNjIyODFiYjY2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL2ZhaWx1cmVzL2V4cGVjdGVkL2tl
eWJvYXJkLmh0bWwKQEAgLTAsMCArMSBAQAora2V5Ym9hcmQKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGFzc2VzL2Vycm9yLWV4cGVj
dGVkLnR4dCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEv
cGFzc2VzL2Vycm9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDI3MjY5OWFlMWIxY2NhMDcx
M2NkZGVhOTZlZDlkNjkwYWUxMDMyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9wYXNzZXMvZXJyb3ItZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEgQEAKK2Vycm9yLXR4dApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9wYXNzZXMvZXJyb3IuaHRtbCBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGFzc2VzL2Vycm9yLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODI3Njc1Mzc0NmIxMmI1ODQzYjI1ZWMyMmI1YTA2MTc4N2IwYjY3MAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2RhdGEvcGFzc2VzL2Vycm9yLmh0bWwKQEAgLTAsMCArMSBAQAorZXJyb3IKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGxhdGZvcm0v
dGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9kYXRhL3BsYXRmb3JtL3Rlc3QvdGVzdF9leHBlY3RhdGlvbnMudHh0Cmlu
ZGV4IDZlNjZjYWFiM2ZiNmRkMDg2Y2QyZjRkZGYyMjMxNDljMTcyMDlmYTUuLjE2NTU2ZTNmOGMx
OTQwNzExNDQxYmQ0NmUyYzg4OWEzYjE0YzI4OWIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGxhdGZvcm0vdGVzdC90ZXN0X2V4cGVj
dGF0aW9ucy50eHQKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvZGF0YS9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtOCwzICs4LDUg
QEAgV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCA9IE1JU1NJ
TkcgUEFTUwogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sID0g
TUlTU0lORyBQQVNTCiBXT05URklYIDogZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sID0gVEVY
VAogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCA9IFRJTUVPVVQKK1dP
TlRGSVggU0tJUCA6IGZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwgPSBDUkFTSAorV09O
VEZJWCBTS0lQIDogZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwgPSBDUkFTSApkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZC5weQppbmRleCA2MzQzNDAwMWI1M2RlMWNjNDFhYTEwZjdhOGUzOGJlNmI2MGFjOWFiLi5l
YzMzMDg2ZTE3ZmM4ZGU3MjY3Njk4ZWIzNjAwZWI0M2YyNjNlNDlhIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1w
X3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQpA
QCAtMTY5LDYgKzE2OSwxMSBAQCBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJl
YWQpOgogICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgogCiAgICAgZGVmIHJ1
bihzZWxmKToKKyAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQorCisgICAgZGVmIF9jb3ZlcmVk
X3J1bihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRpbmUg
dG8gd29yayBhcm91bmQgYSBidWcKKyAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9i
aXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgogICAgICAgICB0ZXN0X2luZm8g
PSBzZWxmLl90ZXN0X2luZm8KICAgICAgICAgZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJp
dmVyKHNlbGYuX2ltYWdlX3BhdGgsIHNlbGYuX3NoZWxsX2FyZ3MpCiAgICAgICAgIGRyaXZlci5z
dGFydCgpCkBAIC0yODcsNiArMjkyLDExIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFi
bGVUaHJlYWQpOgogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICIiIkRlbGVnYXRlIG1haW4g
d29yayB0byBhIGhlbHBlciBtZXRob2QgYW5kIHdhdGNoIGZvciB1bmNhdWdodAogICAgICAgICBl
eGNlcHRpb25zLiIiIgorICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCisKKyAgICBkZWYgX2Nv
dmVyZWRfcnVuKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91
dGluZSB0byB3b3JrIGFyb3VuZCBhIGJ1ZworICAgICAgICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0
cDovL2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkvaXNzdWUvODUuCiAgICAgICAgIHNlbGYu
X3RocmVhZF9pZCA9IHRocmVhZC5nZXRfaWRlbnQoKQogICAgICAgICBzZWxmLl9zdGFydF90aW1l
ID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMApAQCAtMzAzLDkgKzMx
Myw5IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAg
ICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgc2Vs
Zi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgICAgICMgUmUtcmFpc2UgaXQgYW5k
IGRpZS4KLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVzIGR5aW5nOiAlcycgJSAoc2VsZi5nZXRO
YW1lKCksCisgICAgICAgICAgICBfbG9nLmVycm9yKCclcyBkeWluZywgZXhjZXB0aW9uIHJhaXNl
ZDogJXMnICUgKHNlbGYuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9l
eGNlcHRpb25faW5mbykpCi0gICAgICAgICAgICByYWlzZQorCiAgICAgICAgIHNlbGYuX3N0b3Bf
dGltZSA9IHRpbWUudGltZSgpCiAKICAgICBkZWYgcnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHRl
c3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6CkBAIC0zMjEsMTQgKzMzMSw4IEBAIGNsYXNzIFRl
c3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogCiAgICAgICAgIElmIHRlc3RfcnVubmVy
IGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBkYXRlU3VtbWFyeSgpCiAg
ICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgotICAgICAgICBiYXRjaF9z
aXplID0gMAorICAgICAgICBiYXRjaF9zaXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplCiAg
ICAgICAgIGJhdGNoX2NvdW50ID0gMAotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmJhdGNoX3Np
emU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZSA9IGludChz
ZWxmLl9vcHRpb25zLmJhdGNoX3NpemUpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAg
ICAgICAgX2xvZy5pbmZvKCJJZ25vcmluZyBpbnZhbGlkIGJhdGNoIHNpemUgJyVzJyIgJQotICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUpCiAKICAgICAg
ICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVu
LnR4dCBmaWxlLgogICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3Rz
LnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcHJpbnRpbmcucHkKaW5kZXggYTllMDE1ZmNlZWNiM2M5Y2NiNmY4ZThjN2Y5ZTU4YjJkNmQw
OTg4Yy4uOTQyYTM3MjI5ZjAzZjhhYWI1MWQ5NTc5MjUzMWVhNmE1NGFjYWFkMiAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcHJpbnRpbmcucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkKQEAgLTEyNiw4ICsxMjYsOCBAQCBkZWYg
cHJpbnRfb3B0aW9ucygpOgogICAgIF0KIAogCi1kZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9u
cywgbWV0ZXIpOgotICAgICIiIkNvbmZpZ3VyZXMgdGhlIGxvZ2dpbmcgc3lzdGVtLiIiIgorZGVm
IF9jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zLCBtZXRlcik6CisgICAgIiIiQ29uZmlndXJlcyB0
aGUgbG9nZ2luZyBzeXN0ZW0uIFJldHVybiB0aGUgcHJldmlvdXMgaGFuZGxlciwgaWYgYW55LiIi
IgogICAgIGxvZ19mbXQgPSAnJShtZXNzYWdlKXMnCiAgICAgbG9nX2RhdGVmbXQgPSAnJXklbSVk
ICVIOiVNOiVTJwogICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwpAQCAtMTM2LDkgKzEzNiwy
NiBAQCBkZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgbWV0ZXIpOgogICAgICAgICAgICAg
ICAgICAgICclKG1lc3NhZ2UpcycpCiAgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcK
IAotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nX2xldmVsLCBmb3JtYXQ9bG9nX2Zt
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9bG9nX2RhdGVmbXQsIHN0cmVhbT1t
ZXRlcikKKyAgICByb290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGhhbmRsZXIgPSBsb2dn
aW5nLlN0cmVhbUhhbmRsZXIobWV0ZXIpCisgICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2lu
Zy5Gb3JtYXR0ZXIobG9nX2ZtdCwgTm9uZSkpCisgICAgaWYgbm90IHJvb3QuaGFuZGxlcnM6Cisg
ICAgICAgIG9sZF9oYW5kbGVyID0gTm9uZQorICAgICAgICByb290LmFkZEhhbmRsZXIoaGFuZGxl
cikKKyAgICBlbHNlOgorICAgICAgICBvbGRfaGFuZGxlciA9IHJvb3QuaGFuZGxlcnNbMF0KKyAg
ICAgICAgcm9vdC5oYW5kbGVyc1swXSA9IGhhbmRsZXIKKyAgICByb290LnNldExldmVsKGxvZ19s
ZXZlbCkKKyAgICByZXR1cm4gb2xkX2hhbmRsZXIKKwogCitkZWYgX3Jlc3RvcmVfbG9nZ2luZyho
YW5kbGVyKToKKyAgICByb290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGlmIHJvb3QgYW5k
IHJvb3QuaGFuZGxlcnNbMF06CisgICAgICAgIGlmIGhhbmRsZXI6CisgICAgICAgICAgICByb290
LmhhbmRsZXJzWzBdID0gaGFuZGxlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIHJv
b3QuaGFuZGxlcnNbMF0KIAogZGVmIHBhcnNlX3ByaW50X29wdGlvbnMocHJpbnRfb3B0aW9ucywg
dmVyYm9zZSwgY2hpbGRfcHJvY2Vzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgaXNfZnVs
bHlfcGFyYWxsZWwpOgpAQCAtMjM3LDExICsyNTQsMjAgQEAgY2xhc3MgUHJpbnRlcihvYmplY3Qp
OgogCiAgICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXJlZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbShv
cHRpb25zLnZlcmJvc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWd1bGFyX291dHB1dCkKLSAgICAgICAgY29uZmlndXJlX2xvZ2dpbmcoc2Vs
Zi5fb3B0aW9ucywgc2VsZi5fbWV0ZXIpCisgICAgICAgIHNlbGYuX29sZF9oYW5kbGVyID0gX2Nv
bmZpZ3VyZV9sb2dnaW5nKHNlbGYuX29wdGlvbnMsIHNlbGYuX21ldGVyKQogCiAgICAgICAgIHNl
bGYuc3dpdGNoZXMgPSBwYXJzZV9wcmludF9vcHRpb25zKG9wdGlvbnMucHJpbnRfb3B0aW9ucywK
ICAgICAgICAgICAgIG9wdGlvbnMudmVyYm9zZSwgY2hpbGRfcHJvY2Vzc2VzLCBpc19mdWxseV9w
YXJhbGxlbCkKIAorICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiJSZXN0b3JlIGxv
Z2dpbmcgY29uZmlndXJhdGlvbiB0byBpdHMgaW5pdGlhbCBzZXR0aW5ncy4iIiIKKyAgICAgICAg
X3Jlc3RvcmVfbG9nZ2luZyhzZWxmLl9vbGRfaGFuZGxlcikKKyAgICAgICAgc2VsZi5fb2xkX2hh
bmRsZXIgPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5f
b2xkX2hhbmRsZXI6CisgICAgICAgICAgICBfcmVzdG9yZV9sb2dnaW5nKHNlbGYuX29sZF9oYW5k
bGVyKQorCiAgICAgIyBUaGVzZSB0d28gcm91dGluZXMganVzdCBoaWRlIHRoZSBpbXBsbWVudGF0
aW9uIG9mIHRoZSBzd2l0Y2hlcy4KICAgICBkZWYgZGlzYWJsZWQoc2VsZiwgb3B0aW9uKToKICAg
ICAgICAgcmV0dXJuIG5vdCBvcHRpb24gaW4gc2VsZi5zd2l0Y2hlcwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJp
bnRpbmdfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQppbmRleCA0MGM2OTFmOWEx
MGU4NGM5Y2Q5NDdjMmVjOTNhODYyOTE1OWZkZTFhLi4yYmE5ZDdhYmEzMmY4NDkzYmIzNjU4ZmY2
YzRjMDI3MzQxYWIwMjY2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
cmludGluZ191bml0dGVzdC5weQpAQCAtMzcsNiArMzcsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIGlt
cG9ydCBsb2dnaW5nCiAKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0K
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgbG9ndGVzdGluZwogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGluZwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCkBAIC01Mywy
NSArNTQsMjQgQEAgZGVmIGdldF9vcHRpb25zKGFyZ3MpOgogCiBjbGFzcyBUZXN0VXRpbGl0eUZ1
bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfY29uZmlndXJlX2xvZ2dp
bmcoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8g
cmVzZXQgdGhlIGJhc2ljIGxvZ2dlci4KLSAgICAgICAgIyBGSVhNRTogSWYgb3RoZXIgdGVzdGlu
ZyBjbGFzc2VzIGNhbGwgbG9nZ2luZy5iYXNpY0NvbmZpZygpIHRoZW4KLSAgICAgICAgIyBGSVhN
RTogdGhlc2UgY2FsbHMgYmVjb21lIG5vLW9wcyBhbmQgd2UgY2FuJ3QgY29udHJvbCB0aGUKLSAg
ICAgICAgIyBGSVhNRTogY29uZmlndXJhdGlvbiB0byB0ZXN0IHRoaW5ncyBwcm9wZXJseS4KICAg
ICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFtdKQogICAgICAgICBzdHJlYW0gPSBh
cnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQotICAgICAgICBwcmludGluZy5jb25maWd1cmVfbG9n
Z2luZyhvcHRpb25zLCBzdHJlYW0pCisgICAgICAgIGhhbmRsZXIgPSBwcmludGluZy5fY29uZmln
dXJlX2xvZ2dpbmcob3B0aW9ucywgc3RyZWFtKQogICAgICAgICBsb2dnaW5nLmluZm8oInRoaXMg
c2hvdWxkIGJlIGxvZ2dlZCIpCi0gICAgICAgICMgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uZW1w
dHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uZW1wdHkoKSkKIAogICAgICAg
ICBzdHJlYW0ucmVzZXQoKQogICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBub3Qg
YmUgbG9nZ2VkIikKLSAgICAgICAgIyBzZWxmLmFzc2VydFRydWUoc3RyZWFtLmVtcHR5KCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJlYW0uZW1wdHkoKSkKKworICAgICAgICBwcmludGlu
Zy5fcmVzdG9yZV9sb2dnaW5nKGhhbmRsZXIpCiAKICAgICAgICAgc3RyZWFtLnJlc2V0KCkKICAg
ICAgICAgb3B0aW9ucywgYXJncyA9IGdldF9vcHRpb25zKFsnLS12ZXJib3NlJ10pCi0gICAgICAg
IHByaW50aW5nLmNvbmZpZ3VyZV9sb2dnaW5nKG9wdGlvbnMsIHN0cmVhbSkKKyAgICAgICAgaGFu
ZGxlciA9IHByaW50aW5nLl9jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zLCBzdHJlYW0pCiAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoInRoaXMgc2hvdWxkIGJlIGxvZ2dlZCIpCi0gICAgICAgICMgc2Vs
Zi5hc3NlcnRGYWxzZShzdHJlYW0uZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShz
dHJlYW0uZW1wdHkoKSkKKyAgICAgICAgcHJpbnRpbmcuX3Jlc3RvcmVfbG9nZ2luZyhoYW5kbGVy
KQogCiAgICAgZGVmIHRlc3RfcHJpbnRfb3B0aW9ucyhzZWxmKToKICAgICAgICAgb3B0aW9ucywg
YXJncyA9IGdldF9vcHRpb25zKFtdKQpAQCAtNDIxLDExICs0MjEsMTIgQEAgY2xhc3MgIFRlc3Rw
cmludGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIu
ZW1wdHkoKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQogCi0gICAgZGVm
IHRlc3Rfd3JpdGUoc2VsZik6CisgICAgZGVmIHRlc3Rfd3JpdGVfbm90aGluZyhzZWxmKToKICAg
ICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdu
b3RoaW5nJ10pCiAgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKIAorICAgIGRlZiB0ZXN0X3dyaXRlX21pc2Moc2VsZik6CiAg
ICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAn
bWlzYyddKQogICAgICAgICBwcmludGVyLndyaXRlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGVyci5lbXB0eSgpKQpAQCAtNDMzLDYgKzQzNCw3IEBAIGNsYXNzICBUZXN0cHJpbnRl
cih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIsICJjb25m
aWciKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCiAKKyAgICBkZWYgdGVz
dF93cml0ZV9ldmVyeXRoaW5nKHNlbGYpOgogICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X3ByaW50ZXIoWyctLXByaW50JywgJ2V2ZXJ5dGhpbmcnXSkKICAgICAgICAgcHJpbnRl
ci53cml0ZSgiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKQEAg
LTQ0MCwxMSArNDQyLDEwIEBAIGNsYXNzICBUZXN0cHJpbnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIsICJjb25maWciKQogICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGVyci5lbXB0eSgpKQogCi0gICAgICAgICMgRklYTUU6IHRoaXMgc2hvdWxkIGJl
IGxvZ2dlZCBzb21ld2hlcmUsIGJ1dCBpdCBhY3R1YWxseQotICAgICAgICAjIGRpc2FwcGVhcnMg
aW50byB0aGUgZXRoZXIgaW4gdGhlIGxvZ2dpbmcgc3Vic3lzdGVtLgorICAgIGRlZiB0ZXN0X3dy
aXRlX3ZlcmJvc2Uoc2VsZik6CiAgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRf
cHJpbnRlcihbJy0tdmVyYm9zZSddKQogICAgICAgICBwcmludGVyLndyaXRlKCJmb28iKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShub3QgZXJyLmVtcHR5KCkgYW5kICJmb28iIGluIGVyci5nZXQoKVswXSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQogCiAgICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3Rl
ZF9yZXN1bHRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGFmMWFmOTNkM2QwMjQ2YTViNzk5OTIw
ODYxOGEwY2FmMDJlOGRhMGQuLjBkZGE3NzQxZWEyZTAzMWRkZjM0MDhkYjEwNzkxMzc3MGVlNGU2
NDEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTMyNyw3ICszMjcsNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAgICAgICAgIGlmIG5vdCBzZWxmLl93ZWJraXRfYmFzZV9kaXI6CiAgICAgICAgICAgICBhYnNw
YXRoID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQogICAgICAgICAgICAgc2VsZi5fd2Via2l0
X2Jhc2VfZGlyID0gYWJzcGF0aFswOmFic3BhdGguZmluZCgnV2ViS2l0VG9vbHMnKV0KLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoIlVzaW5nIFdlYktpdCByb290OiAlcyIgJSBzZWxmLl93ZWJraXRf
YmFzZV9kaXIpCiAKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl93ZWJraXRfYmFz
ZV9kaXIsICpjb21wcykKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IGQzNmI1NDBjNzVhYThmN2QwNDk2MTJh
MDQzZTAyNDdlMjk5OGEwN2YuLmUzMDkzMzQ2YjE4ZTQxZWQ5YWVhMzk0OGQxMzRjZjFmYjBiZDMz
OWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvdGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTE1MSw3ICsxNTEsMTAgQEAgY2xhc3MgVGVzdERyaXZlcihi
YXNlLkRyaXZlcik6CiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHVyaSwgdGltZW91dG1zLCBpbWFn
ZV9oYXNoKToKICAgICAgICAgYmFzZW5hbWUgPSB1cmlbKHVyaS5yZmluZCgiLyIpICsgMSk6dXJp
LnJmaW5kKCIuaHRtbCIpXQogCi0gICAgICAgIGVycm9yID0gJycKKyAgICAgICAgaWYgJ2Vycm9y
JyBpbiBiYXNlbmFtZToKKyAgICAgICAgICAgIGVycm9yID0gYmFzZW5hbWUgKyAiX2Vycm9yXG4i
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvciA9ICcnCiAgICAgICAgIGNoZWNrc3Vt
ID0gTm9uZQogICAgICAgICAjIFRoZXJlIGFyZSBmb3VyIGN1cnJlbnRseSBzdXBwb3J0ZWQgdHlw
ZXMgb2YgdGVzdHM6IHRleHQsIGltYWdlLAogICAgICAgICAjIGltYWdlIGhhc2ggKGNoZWNrc3Vt
KSwgYW5kIHN0ZGVyciBvdXRwdXQuIFRoZSBmYWtlIG91dHB1dApAQCAtMTcwLDEwICsxNzMsMTMg
QEAgY2xhc3MgVGVzdERyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgICMgd2lsbCBhbGxvdyB1
cyB0byBzZWUgaWYgYW55IHJlc3VsdHMgZ2V0IGNyb3NzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlCiAg
ICAgICAgICMgcHJvZ3JhbS4KICAgICAgICAgaWYgJ2ZhaWx1cmVzJyBpbiB1cmk6CisgICAgICAg
ICAgICBpZiAna2V5Ym9hcmQnIGluIGJhc2VuYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIEtl
eWJvYXJkSW50ZXJydXB0CisgICAgICAgICAgICBpZiAnZXhjZXB0aW9uJyBpbiBiYXNlbmFtZToK
KyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdleGNlcHRpb24gZnJvbSAnICsgYmFz
ZW5hbWUpCisKICAgICAgICAgICAgIGNyYXNoID0gJ2NyYXNoJyBpbiBiYXNlbmFtZQogICAgICAg
ICAgICAgdGltZW91dCA9ICd0aW1lb3V0JyBpbiBiYXNlbmFtZQotICAgICAgICAgICAgaWYgJ2Vy
cm9yJyBpbiBiYXNlbmFtZToKLSAgICAgICAgICAgICAgICBlcnJvciA9IGJhc2VuYW1lICsgIl9l
cnJvclxuIgogICAgICAgICAgICAgaWYgJ3RleHQnIGluIGJhc2VuYW1lOgogICAgICAgICAgICAg
ICAgIG91dHB1dCA9IGJhc2VuYW1lICsgJ19mYWlsZWQtdHh0XG4nCiAgICAgICAgICAgICBlbHNl
OgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggNzE2M2UxYmM1NjkxNWQ1NWEwYzQwNjlh
ZGU5ZGRmY2M5ZGUyYjYxMC4uN2IxZmQzNGFhNGVkZGM4ODc0OTk2ODk4ZmE0NDI5ZmJhNjhlNzE0
YSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0xMDYsMTIgKzEwNiwxMSBAQCBjbGFz
cyBUZXN0SW5mbzoKICAgICAgICAgc2VsZi5faW1hZ2VfaGFzaCA9IE5vbmUKIAogICAgIGRlZiBf
cmVhZF9pbWFnZV9oYXNoKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGNv
ZGVjcy5vcGVuKHNlbGYuX2V4cGVjdGVkX2hhc2hfcGF0aCwgInIiLCAiYXNjaWkiKSBhcyBoYXNo
X2ZpbGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hfZmlsZS5yZWFkKCkKLSAgICAgICAg
ZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICBpZiBlcnJuby5FTk9FTlQgIT0gZS5lcnJu
bzoKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMo
c2VsZi5fZXhwZWN0ZWRfaGFzaF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICAgICAgd2l0aCBjb2RlY3Mub3BlbihzZWxmLl9leHBlY3RlZF9oYXNoX3BhdGgsICJyIiwgImFz
Y2lpIikgYXMgaGFzaF9maWxlOgorICAgICAgICAgICAgcmV0dXJuIGhhc2hfZmlsZS5yZWFkKCkK
IAogICAgIGRlZiBpbWFnZV9oYXNoKHNlbGYpOgogICAgICAgICAjIFJlYWQgdGhlIGltYWdlX2hh
c2ggbGF6aWx5IHRvIHJlZHVjZSBzdGFydHVwIHRpbWUuCkBAIC0yODUsNyArMjg0LDcgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIyBIYWNrIGZvciBkdW1waW5nIHRocmVhZHMgb24gdGhl
IGJvdHMKICAgICAgICAgc2VsZi5fbGFzdF90aHJlYWRfZHVtcCA9IE5vbmUKIAotICAgIGRlZiBf
X2RlbF9fKHNlbGYpOgorICAgIGRlZiBjbGVhbnVwKHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVn
KCJmbHVzaGluZyBzdGRvdXQiKQogICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAg
X2xvZy5kZWJ1ZygiZmx1c2hpbmcgc3RkZXJyIikKQEAgLTMzNiw4ICszMzUsOCBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2V4cGVjdGVkKCJGb3VuZDog
ICVkIHRlc3RzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbihz
ZWxmLl90ZXN0X2ZpbGVzKSkpCiAgICAgICAgIGlmIG5vdCBudW1fYWxsX3Rlc3RfZmlsZXM6Ci0g
ICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCJObyB0ZXN0cyB0byBydW4uIikKLSAgICAgICAgICAg
IHN5cy5leGl0KDEpCisgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCdObyB0ZXN0cyB0byBydW4u
JykKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgc2tpcHBlZCA9IHNldCgpCiAg
ICAgICAgIGlmIG51bV9hbGxfdGVzdF9maWxlcyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmZv
cmNlOgpAQCAtNzI2LDggKzcyNSwxMSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBSZXR1
cm46CiAgICAgICAgICAgVGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJlc3VsdHMgKDAgPT0gc3Vj
Y2VzcykKICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0X2ZpbGVzOgotICAg
ICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgIyBnYXRoZXJfdGVzdF9maWxlcygpIG11c3QgaGF2
ZSBiZWVuIGNhbGxlZCBmaXJzdCB0byBpbml0aWFsaXplIHVzLgorICAgICAgICAjIElmIHdlIGRp
ZG4ndCBmaW5kIGFueSBmaWxlcyB0byB0ZXN0LCB3ZSd2ZSBlcnJvcmVkIG91dCBhbHJlYWR5IGlu
CisgICAgICAgICMgcHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KCkuCisgICAgICAgIGFz
c2VydChsZW4oc2VsZi5fdGVzdF9maWxlcykpCisKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUu
dGltZSgpCiAKICAgICAgICAgaWYgc2VsZi5uZWVkc19odHRwKCk6CkBAIC0xMjgzLDE1NyArMTI4
NSwxNjcgQEAgZGVmIHJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9
c3lzLnN0ZGVyciwKICAgICAgICAgICBlcnJvci4KICAgICAiIiIKIAotICAgICMgQ29uZmlndXJl
IHRoZSBwcmludGluZyBzdWJzeXN0ZW0gZm9yIHByaW50aW5nIG91dHB1dCwgbG9nZ2luZyBkZWJ1
ZwotICAgICMgaW5mbywgYW5kIHRyYWNpbmcgdGVzdHMuCi0KLSAgICBpZiBub3Qgb3B0aW9ucy5j
aGlsZF9wcm9jZXNzZXM6Ci0gICAgICAgICMgRklYTUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2lu
ZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgotICAgICAgICBvcHRpb25zLmNoaWxk
X3Byb2Nlc3NlcyA9IHBvcnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkKLQotICAgIHBy
aW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnRfb2JqLCBvcHRpb25zLCByZWd1bGFyX291dHB1
dD1yZWd1bGFyX291dHB1dCwKLSAgICAgICAgYnVpbGRib3Rfb3V0cHV0PWJ1aWxkYm90X291dHB1
dCwKLSAgICAgICAgY2hpbGRfcHJvY2Vzc2VzPWludChvcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyks
Ci0gICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsPW9wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3Bh
cmFsbGVsKQotICAgIGlmIG9wdGlvbnMuaGVscF9wcmludGluZzoKLSAgICAgICAgcHJpbnRlci5o
ZWxwX3ByaW50aW5nKCkKLSAgICAgICAgcmV0dXJuIDAKLQotICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1
dGl2ZSgpCi0KLSAgICBpZiBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgotICAgICAgICBvcHRp
b25zLmNvbmZpZ3VyYXRpb24gPSBwb3J0X29iai5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQotCi0g
ICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0cyBpcyBOb25lOgotICAgICAgICBvcHRpb25zLnBpeGVs
X3Rlc3RzID0gVHJ1ZQotCi0gICAgaWYgbm90IG9wdGlvbnMudXNlX2FwYWNoZToKLSAgICAgICAg
b3B0aW9ucy51c2VfYXBhY2hlID0gc3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4Micp
Ci0KLSAgICBpZiBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LnN0YXJ0c3dpdGgoIi8iKToKLSAg
ICAgICAgIyBBc3N1bWUgaXQncyBhbiBhYnNvbHV0ZSBwYXRoIGFuZCBub3JtYWxpemUuCi0gICAg
ICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkgPSBwb3J0X29iai5nZXRfYWJzb2x1dGVfcGF0
aCgKLSAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCi0gICAgZWxzZToKLSAg
ICAgICAgIyBJZiBpdCdzIGEgcmVsYXRpdmUgcGF0aCwgbWFrZSB0aGUgb3V0cHV0IGRpcmVjdG9y
eSByZWxhdGl2ZSB0bwotICAgICAgICAjIERlYnVnIG9yIFJlbGVhc2UuCi0gICAgICAgIG9wdGlv
bnMucmVzdWx0c19kaXJlY3RvcnkgPSBwb3J0X29iai5yZXN1bHRzX2RpcmVjdG9yeSgpCi0KLSAg
ICBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cyA9IFtdCi0gICAgaWYgb3B0aW9ucy5wcmludF9sYXN0
X2ZhaWx1cmVzIG9yIG9wdGlvbnMucmV0ZXN0X2xhc3RfZmFpbHVyZXM6Ci0gICAgICAgIHVuZXhw
ZWN0ZWRfcmVzdWx0c19maWxlbmFtZSA9IG9zLnBhdGguam9pbigKLSAgICAgICAgICAgb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSwgInVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uIikKLSAgICAgICAg
d2l0aCBjb2RlY3Mub3Blbih1bmV4cGVjdGVkX3Jlc3VsdHNfZmlsZW5hbWUsICJyIiwgInV0Zi04
IikgYXMgZmlsZToKLSAgICAgICAgICAgIHJlc3VsdHMgPSBzaW1wbGVqc29uLmxvYWQoZmlsZSkK
LSAgICAgICAgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMgPSByZXN1bHRzWyd0ZXN0cyddLmtleXMo
KQotICAgICAgICBpZiBvcHRpb25zLnByaW50X2xhc3RfZmFpbHVyZXM6Ci0gICAgICAgICAgICBw
cmludGVyLndyaXRlKCJcbiIuam9pbihsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cykgKyAiXG4iKQor
ICAgIHByaW50ZXIgPSBOb25lCisgICAgdGVzdF9ydW5uZXIgPSBOb25lCisgICAgbnVtX3VuZXhw
ZWN0ZWRfcmVzdWx0cyA9IC0xCisgICAgdHJ5OgorICAgICAgICAjIENvbmZpZ3VyZSB0aGUgcHJp
bnRpbmcgc3Vic3lzdGVtIGZvciBwcmludGluZyBvdXRwdXQsIGxvZ2dpbmcgZGVidWcKKyAgICAg
ICAgIyBpbmZvLCBhbmQgdHJhY2luZyB0ZXN0cy4KKworICAgICAgICBpZiBub3Qgb3B0aW9ucy5j
aGlsZF9wcm9jZXNzZXM6CisgICAgICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2Zs
YWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50ICsgMS4KKyAgICAgICAgICAgIG9wdGlv
bnMuY2hpbGRfcHJvY2Vzc2VzID0gcG9ydF9vYmouZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKQor
CisgICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnRfb2JqLCBvcHRpb25zLCBy
ZWd1bGFyX291dHB1dD1yZWd1bGFyX291dHB1dCwKKyAgICAgICAgICAgIGJ1aWxkYm90X291dHB1
dD1idWlsZGJvdF9vdXRwdXQsCisgICAgICAgICAgICBjaGlsZF9wcm9jZXNzZXM9aW50KG9wdGlv
bnMuY2hpbGRfcHJvY2Vzc2VzKSwKKyAgICAgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsPW9wdGlv
bnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQorICAgICAgICBpZiBvcHRpb25zLmhlbHBf
cHJpbnRpbmc6CisgICAgICAgICAgICBwcmludGVyLmhlbHBfcHJpbnRpbmcoKQorICAgICAgICAg
ICAgcmV0dXJuIDAKKworICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQorCisgICAgICAg
IGlmIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICBvcHRpb25zLmNvbmZp
Z3VyYXRpb24gPSBwb3J0X29iai5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQorCisgICAgICAgIGlm
IG9wdGlvbnMucGl4ZWxfdGVzdHMgaXMgTm9uZToKKyAgICAgICAgICAgIG9wdGlvbnMucGl4ZWxf
dGVzdHMgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IG9wdGlvbnMudXNlX2FwYWNoZToKKyAgICAg
ICAgICAgIG9wdGlvbnMudXNlX2FwYWNoZSA9IHN5cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICds
aW51eDInKQorCisgICAgICAgIGlmIG9wdGlvbnMucmVzdWx0c19kaXJlY3Rvcnkuc3RhcnRzd2l0
aCgiLyIpOgorICAgICAgICAgICAgIyBBc3N1bWUgaXQncyBhbiBhYnNvbHV0ZSBwYXRoIGFuZCBu
b3JtYWxpemUuCisgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5ID0gcG9ydF9v
YmouZ2V0X2Fic29sdXRlX3BhdGgoCisgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2Rp
cmVjdG9yeSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSWYgaXQncyBhIHJlbGF0aXZl
IHBhdGgsIG1ha2UgdGhlIG91dHB1dCBkaXJlY3RvcnkgcmVsYXRpdmUgdG8KKyAgICAgICAgICAg
ICMgRGVidWcgb3IgUmVsZWFzZS4KKyAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3Rv
cnkgPSBwb3J0X29iai5yZXN1bHRzX2RpcmVjdG9yeSgpCisKKyAgICAgICAgbGFzdF91bmV4cGVj
dGVkX3Jlc3VsdHMgPSBbXQorICAgICAgICBpZiBvcHRpb25zLnByaW50X2xhc3RfZmFpbHVyZXMg
b3Igb3B0aW9ucy5yZXRlc3RfbGFzdF9mYWlsdXJlczoKKyAgICAgICAgICAgIHVuZXhwZWN0ZWRf
cmVzdWx0c19maWxlbmFtZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnksICJ1bmV4cGVjdGVkX3Jlc3VsdHMuanNvbiIpCisgICAgICAgICAgICB3
aXRoIGNvZGVjcy5vcGVuKHVuZXhwZWN0ZWRfcmVzdWx0c19maWxlbmFtZSwgInIiLCAidXRmLTgi
KSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBzaW1wbGVqc29uLmxvYWQoZmls
ZSkKKyAgICAgICAgICAgIGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzID0gcmVzdWx0c1sndGVzdHMn
XS5rZXlzKCkKKyAgICAgICAgICAgIGlmIG9wdGlvbnMucHJpbnRfbGFzdF9mYWlsdXJlczoKKyAg
ICAgICAgICAgICAgICBwcmludGVyLndyaXRlKCJcbiIuam9pbihsYXN0X3VuZXhwZWN0ZWRfcmVz
dWx0cykgKyAiXG4iKQorICAgICAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgb3B0
aW9ucy5jbG9iYmVyX29sZF9yZXN1bHRzOgorICAgICAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhl
IGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVyCisgICAgICAg
ICAgICAjIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBhcmUgZXhwbGljaXRseSB1c2Vk
IGZvciBjcm9zcy1ydW4KKyAgICAgICAgICAgICMgdHJhY2tpbmcuCisgICAgICAgICAgICBwcmlu
dGVyLnByaW50X3VwZGF0ZSgiQ2xvYmJlcmluZyBvbGQgcmVzdWx0cyBpbiAlcyIgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAg
ICAgICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHBvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQor
ICAgICAgICAgICAgcG9zc2libGVfZGlycyA9IG9zLmxpc3RkaXIobGF5b3V0X3Rlc3RzX2RpcikK
KyAgICAgICAgICAgIGZvciBkaXJuYW1lIGluIHBvc3NpYmxlX2RpcnM6CisgICAgICAgICAgICAg
ICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4obGF5b3V0X3Rlc3RzX2RpciwgZGlybmFt
ZSkpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5LCBkaXJuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgICAgIGlmIG5vdCBvcHRpb25zLnRp
bWVfb3V0X21zOgorICAgICAgICAgICAgaWYgb3B0aW9ucy5jb25maWd1cmF0aW9uID09ICJEZWJ1
ZyI6CisgICAgICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cigyICogVGVzdFJ1
bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cihUZXN0UnVubmVyLkRFRkFVTFRfVEVT
VF9USU1FT1VUX01TKQorCisgICAgICAgIG9wdGlvbnMuc2xvd190aW1lX291dF9tcyA9IHN0cig1
ICogaW50KG9wdGlvbnMudGltZV9vdXRfbXMpKQorICAgICAgICBwcmludGVyLnByaW50X2NvbmZp
ZygiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVzIiAlCisgICAgICAg
ICAgICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21zLCBvcHRpb25zLnNsb3dfdGltZV9vdXRf
bXMpKQorCisgICAgICAgIGlmIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0gMToKKyAg
ICAgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29i
ai5kcml2ZXJfbmFtZSgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnRlci5wcmlu
dF9jb25maWcoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlICgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLCBwb3J0X29iai5kcml2ZXJfbmFtZSgp
KSkKKworICAgICAgICAjIEluY2x1ZGUgYWxsIHRlc3RzIGlmIG5vbmUgYXJlIHNwZWNpZmllZC4K
KyAgICAgICAgbmV3X2FyZ3MgPSBbXQorICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAg
ICAgICBpZiBhcmcgYW5kIGFyZyAhPSAnJzoKKyAgICAgICAgICAgICAgICBuZXdfYXJncy5hcHBl
bmQoYXJnKQorCisgICAgICAgIHBhdGhzID0gbmV3X2FyZ3MKKyAgICAgICAgaWYgbm90IHBhdGhz
OgorICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICBwYXRocyArPSBsYXN0X3VuZXhwZWN0
ZWRfcmVzdWx0cworICAgICAgICBpZiBvcHRpb25zLnRlc3RfbGlzdDoKKyAgICAgICAgICAgIHBh
dGhzICs9IHJlYWRfdGVzdF9maWxlcyhvcHRpb25zLnRlc3RfbGlzdCkKKworICAgICAgICAjIENy
ZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisg
ICAgICAgIHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KG9wdGlvbnMucmVzdWx0c19kaXJl
Y3RvcnkpCisgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5nIHRlc3RzIC4u
LiIpCisKKyAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25z
LCBwcmludGVyKQorICAgICAgICB0ZXN0X3J1bm5lci5nYXRoZXJfZmlsZV9wYXRocyhwYXRocykK
KworICAgICAgICBpZiBvcHRpb25zLmxpbnRfdGVzdF9maWxlczoKKyAgICAgICAgICAgICMgQ3Jl
YXRpbmcgdGhlIGV4cGVjYXRpb25zIGZvciBlYWNoIHBsYXRmb3JtL2NvbmZpZ3VyYXRpb24gcGFp
ciBkb2VzCisgICAgICAgICAgICAjIGFsbCB0aGUgdGVzdCBsaXN0IHBhcnNpbmcgYW5kIGVuc3Vy
ZXMgaXQncyBjb3JyZWN0IHN5bnRheCAoZS5nLiBubworICAgICAgICAgICAgIyBkdXBlcykuCisg
ICAgICAgICAgICBmb3IgcGxhdGZvcm1fbmFtZSBpbiBwb3J0X29iai50ZXN0X3BsYXRmb3JtX25h
bWVzKCk6CisgICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBs
YXRmb3JtX25hbWUsIGlzX2RlYnVnX21vZGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICB0ZXN0X3J1
bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZT1GYWxz
ZSkKKyAgICAgICAgICAgIHByaW50ZXIud3JpdGUoIiIpCisgICAgICAgICAgICBfbG9nLmluZm8o
IklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9ucywgIgor
ICAgICAgICAgICAgICAgICAgICAidGhlbiB0aGUgbGludCBzdWNjZWVkZWQuIikKICAgICAgICAg
ICAgIHJldHVybiAwCiAKLSAgICBpZiBvcHRpb25zLmNsb2JiZXJfb2xkX3Jlc3VsdHM6Ci0gICAg
ICAgICMgSnVzdCBjbG9iYmVyIHRoZSBhY3R1YWwgdGVzdCByZXN1bHRzIGRpcmVjdG9yaWVzIHNp
bmNlIHRoZSBvdGhlcgotICAgICAgICAjIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBh
cmUgZXhwbGljaXRseSB1c2VkIGZvciBjcm9zcy1ydW4KLSAgICAgICAgIyB0cmFja2luZy4KLSAg
ICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJlc3VsdHMgaW4gJXMi
ICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9y
eSkKLSAgICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHBvcnRfb2JqLmxheW91dF90ZXN0c19kaXIo
KQotICAgICAgICBwb3NzaWJsZV9kaXJzID0gb3MubGlzdGRpcihsYXlvdXRfdGVzdHNfZGlyKQot
ICAgICAgICBmb3IgZGlybmFtZSBpbiBwb3NzaWJsZV9kaXJzOgotICAgICAgICAgICAgaWYgb3Mu
cGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4obGF5b3V0X3Rlc3RzX2RpciwgZGlybmFtZSkpOgotICAg
ICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnksIGRpcm5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3Jl
X2Vycm9ycz1UcnVlKQotCi0gICAgaWYgbm90IG9wdGlvbnMudGltZV9vdXRfbXM6Ci0gICAgICAg
IGlmIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9PSAiRGVidWciOgotICAgICAgICAgICAgb3B0aW9u
cy50aW1lX291dF9tcyA9IHN0cigyICogVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9N
UykKKyAgICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlVzaW5nIHBvcnQgJyVzJyIgJSBwb3J0
X29iai5uYW1lKCkpCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5nIHRlc3Qg
cmVzdWx0cyBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkpCisgICAgICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5lOgorICAgICAg
ICAgICAgcHJpbnRlci5wcmludF9jb25maWcoIlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X29iai5iYXNlbGluZV9wYXRo
KCkpCisgICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyAlcyBidWlsZCIgJSBvcHRp
b25zLmNvbmZpZ3VyYXRpb24pCisgICAgICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAg
ICAgICAgICBwcmludGVyLnByaW50X2NvbmZpZygiUGl4ZWwgdGVzdHMgZW5hYmxlZCIpCiAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0X21zID0gc3RyKFRlc3RSdW5u
ZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCi0KLSAgICBvcHRpb25zLnNsb3dfdGltZV9vdXRf
bXMgPSBzdHIoNSAqIGludChvcHRpb25zLnRpbWVfb3V0X21zKSkKLSAgICBwcmludGVyLnByaW50
X2NvbmZpZygiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVzIiAlCi0g
ICAgICAgICAgICAgICAgICAgKG9wdGlvbnMudGltZV9vdXRfbXMsIG9wdGlvbnMuc2xvd190aW1l
X291dF9tcykpCi0KLSAgICBpZiBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDE6Ci0g
ICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0X29iai5k
cml2ZXJfbmFtZSgpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJS
dW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMuY2hpbGRfcHJvY2Vzc2VzLCBwb3J0X29iai5kcml2ZXJfbmFtZSgpKSkKLQotICAgICMg
SW5jbHVkZSBhbGwgdGVzdHMgaWYgbm9uZSBhcmUgc3BlY2lmaWVkLgotICAgIG5ld19hcmdzID0g
W10KLSAgICBmb3IgYXJnIGluIGFyZ3M6Ci0gICAgICAgIGlmIGFyZyBhbmQgYXJnICE9ICcnOgot
ICAgICAgICAgICAgbmV3X2FyZ3MuYXBwZW5kKGFyZykKLQotICAgIHBhdGhzID0gbmV3X2FyZ3MK
LSAgICBpZiBub3QgcGF0aHM6Ci0gICAgICAgIHBhdGhzID0gW10KLSAgICBwYXRocyArPSBsYXN0
X3VuZXhwZWN0ZWRfcmVzdWx0cwotICAgIGlmIG9wdGlvbnMudGVzdF9saXN0OgotICAgICAgICBw
YXRocyArPSByZWFkX3Rlc3RfZmlsZXMob3B0aW9ucy50ZXN0X2xpc3QpCi0KLSAgICAjIENyZWF0
ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCi0gICAg
cG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkK
LSAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQotCi0gICAg
dGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25zLCBwcmludGVyKQotICAg
IHRlc3RfcnVubmVyLmdhdGhlcl9maWxlX3BhdGhzKHBhdGhzKQotCi0gICAgaWYgb3B0aW9ucy5s
aW50X3Rlc3RfZmlsZXM6Ci0gICAgICAgICMgQ3JlYXRpbmcgdGhlIGV4cGVjYXRpb25zIGZvciBl
YWNoIHBsYXRmb3JtL2NvbmZpZ3VyYXRpb24gcGFpciBkb2VzCi0gICAgICAgICMgYWxsIHRoZSB0
ZXN0IGxpc3QgcGFyc2luZyBhbmQgZW5zdXJlcyBpdCdzIGNvcnJlY3Qgc3ludGF4IChlLmcuIG5v
Ci0gICAgICAgICMgZHVwZXMpLgotICAgICAgICBmb3IgcGxhdGZvcm1fbmFtZSBpbiBwb3J0X29i
ai50ZXN0X3BsYXRmb3JtX25hbWVzKCk6Ci0gICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9l
eHBlY3RhdGlvbnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZT1UcnVlKQotICAgICAgICAg
ICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBsYXRmb3JtX25hbWUsIGlzX2RlYnVn
X21vZGU9RmFsc2UpCi0gICAgICAgIHByaW50ZXIud3JpdGUoIiIpCi0gICAgICAgIF9sb2cuaW5m
bygiSWYgdGhlcmUgYXJlIG5vIGZhaWwgbWVzc2FnZXMsIGVycm9ycyBvciBleGNlcHRpb25zLCAi
Ci0gICAgICAgICAgICAgICAgICAidGhlbiB0aGUgbGludCBzdWNjZWVkZWQuIikKLSAgICAgICAg
cmV0dXJuIDAKLQotICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyBwb3J0ICclcyciICUg
cG9ydF9vYmoubmFtZSgpKQotICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5nIHRlc3Qg
cmVzdWx0cyBpbiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0
c19kaXJlY3RvcnkpCi0gICAgaWYgb3B0aW9ucy5uZXdfYmFzZWxpbmU6Ci0gICAgICAgIHByaW50
ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9ydF9vYmouYmFzZWxpbmVfcGF0aCgpKQotICAgIHByaW50
ZXIucHJpbnRfY29uZmlnKCJVc2luZyAlcyBidWlsZCIgJSBvcHRpb25zLmNvbmZpZ3VyYXRpb24p
Ci0gICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgcHJpbnRlci5wcmludF9jb25m
aWcoIlBpeGVsIHRlc3RzIGVuYWJsZWQiKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ZXIucHJp
bnRfY29uZmlnKCJQaXhlbCB0ZXN0cyBkaXNhYmxlZCIpCi0gICAgcHJpbnRlci5wcmludF9jb25m
aWcoIiIpCi0KLSAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiUGFyc2luZyBleHBlY3RhdGlvbnMg
Li4uIikKLSAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocG9ydF9vYmoudGVzdF9w
bGF0Zm9ybV9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMuY29uZmlndXJhdGlvbiA9PSAnRGVidWcnKQotCi0gICAgcHJpbnRlci5wcmludF91cGRhdGUo
IkNoZWNraW5nIGJ1aWxkIC4uLiIpCi0gICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2J1aWxkKHRl
c3RfcnVubmVyLm5lZWRzX2h0dHAoKSk6Ci0gICAgICAgIHJldHVybiAtMQotCi0gICAgcHJpbnRl
ci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4iKQotICAgIHBvcnRfb2JqLnN0YXJ0
X2hlbHBlcigpCi0KLSAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRo
ZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCi0gICAgaWYgbm90IG9wdGlvbnMubm9jaGVj
a19zeXNfZGVwczoKLSAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNoZWNraW5nIHN5c3Rl
bSBkZXBlbmRlbmNpZXMgLi4uIikKLSAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX3N5c19k
ZXBzKHRlc3RfcnVubmVyLm5lZWRzX2h0dHAoKSk6CisgICAgICAgICAgICBwcmludGVyLnByaW50
X2NvbmZpZygiUGl4ZWwgdGVzdHMgZGlzYWJsZWQiKQorICAgICAgICBwcmludGVyLnByaW50X2Nv
bmZpZygiIikKKworICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiUGFyc2luZyBleHBlY3Rh
dGlvbnMgLi4uIikKKyAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBvcnRf
b2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID09ICdEZWJ1ZycpCisKKyAgICAgICAgcHJpbnRl
ci5wcmludF91cGRhdGUoIkNoZWNraW5nIGJ1aWxkIC4uLiIpCisgICAgICAgIGlmIG5vdCBwb3J0
X29iai5jaGVja19idWlsZCh0ZXN0X3J1bm5lci5uZWVkc19odHRwKCkpOgogICAgICAgICAgICAg
cmV0dXJuIC0xCiAKLSAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiUHJlcGFyaW5nIHRlc3RzIC4u
LiIpCi0gICAgcmVzdWx0X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5wcmVwYXJlX2xpc3RzX2FuZF9w
cmludF9vdXRwdXQoKQorICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgaGVs
cGVyIC4uLiIpCisgICAgICAgIHBvcnRfb2JqLnN0YXJ0X2hlbHBlcigpCiAKLSAgICBwb3J0X29i
ai5zZXR1cF90ZXN0X3J1bigpCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVu
ZGVuY2llcyAodGhlbWVzLCBmb250cywgLi4uKSBhcmUgY29ycmVjdC4KKyAgICAgICAgaWYgbm90
IG9wdGlvbnMubm9jaGVja19zeXNfZGVwczoKKyAgICAgICAgICAgIHByaW50ZXIucHJpbnRfdXBk
YXRlKCJDaGVja2luZyBzeXN0ZW0gZGVwZW5kZW5jaWVzIC4uLiIpCisgICAgICAgICAgICBpZiBu
b3QgcG9ydF9vYmouY2hlY2tfc3lzX2RlcHModGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgi
UHJlcGFyaW5nIHRlc3RzIC4uLiIpCisgICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gdGVzdF9ydW5u
ZXIucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KCkKKyAgICAgICAgaWYgbm90IHJlc3Vs
dF9zdW1tYXJ5OgorICAgICAgICAgICAgcmV0dXJuIC0xCiAKLSAgICB0ZXN0X3J1bm5lci5hZGRf
dGVzdF90eXBlKHRleHRfZGlmZi5UZXN0VGV4dERpZmYpCi0gICAgaWYgb3B0aW9ucy5waXhlbF90
ZXN0czoKLSAgICAgICAgdGVzdF9ydW5uZXIuYWRkX3Rlc3RfdHlwZShpbWFnZV9kaWZmLkltYWdl
RGlmZikKKyAgICAgICAgcG9ydF9vYmouc2V0dXBfdGVzdF9ydW4oKQogCi0gICAgbnVtX3VuZXhw
ZWN0ZWRfcmVzdWx0cyA9IHRlc3RfcnVubmVyLnJ1bihyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAg
dGVzdF9ydW5uZXIuYWRkX3Rlc3RfdHlwZSh0ZXh0X2RpZmYuVGVzdFRleHREaWZmKQorICAgICAg
ICBpZiBvcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgdGVzdF9ydW5uZXIuYWRkX3Rl
c3RfdHlwZShpbWFnZV9kaWZmLkltYWdlRGlmZikKIAotICAgIHBvcnRfb2JqLnN0b3BfaGVscGVy
KCkKKyAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IHRlc3RfcnVubmVyLnJ1bihyZXN1
bHRfc3VtbWFyeSkKKyAgICBmaW5hbGx5OgorICAgICAgICBwb3J0X29iai5zdG9wX2hlbHBlcigp
CisgICAgICAgIGlmIHRlc3RfcnVubmVyOgorICAgICAgICAgICAgdGVzdF9ydW5uZXIuY2xlYW51
cCgpCisgICAgICAgIF9sb2cuZGVidWcoIkV4aXQgc3RhdHVzOiAlZCIgJSBudW1fdW5leHBlY3Rl
ZF9yZXN1bHRzKQorICAgICAgICBpZiBwcmludGVyOgorICAgICAgICAgICAgcHJpbnRlci5jbGVh
bnVwKCkKIAotICAgIF9sb2cuZGVidWcoIkV4aXQgc3RhdHVzOiAlZCIgJSBudW1fdW5leHBlY3Rl
ZF9yZXN1bHRzKQogICAgIHJldHVybiBudW1fdW5leHBlY3RlZF9yZXN1bHRzCiAKIApAQCAtMTU5
Nyw3ICsxNjA5LDcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgIyAgIFJl
c3RhcnQgRHVtcFJlbmRlclRyZWUgZXZlcnkgbiB0ZXN0cyAoZGVmYXVsdDogMTAwMCkKICAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tYmF0Y2gtc2l6ZSIsCiAgICAgICAgICAgICBoZWxw
PSgiUnVuIGEgdGhlIHRlc3RzIGluIGJhdGNoZXMgKG4pLCBhZnRlciBldmVyeSBuIHRlc3RzLCAi
Ci0gICAgICAgICAgICAgICAgICAiRHVtcFJlbmRlclRyZWUgaXMgcmVsYXVuY2hlZC4iKSksCisg
ICAgICAgICAgICAgICAgICAiRHVtcFJlbmRlclRyZWUgaXMgcmVsYXVuY2hlZC4iKSwgdHlwZT0i
aW50IiwgZGVmYXVsdD0wKSwKICAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBjYWxscyAt
LXJ1bi1zaW5nbHk6IC0xfC0tc2luZ2x5CiAgICAgICAgICMgSXNvbGF0ZSBlYWNoIHRlc3QgY2Fz
ZSBydW4gKGltcGxpZXMgLS1udGhseSAxIC0tdmVyYm9zZSkKICAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi0tcnVuLXNpbmdseSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCAzYTNiMTRlNWNiZTU0ZDkzZDJj
N2Q3YzIzNDNiZjI2ZDY5NDMzNGIzLi40Y2JmZGZjZGY4YjlmZDVhMzM4ZWYxNDg5NWI4N2I1ODFk
NWM5ODk4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAg
LTQxLDYgKzQxLDcgQEAgaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20g
d2Via2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMg
aW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0
X3Rlc3RzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQg
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKQEAgLTQ4LDc1ICs0OSwxMzkgQEAgZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogCiAKLWRlZiBw
YXNzaW5nX3J1bihhcmdzLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwKK2Rl
ZiBwYXNzaW5nX3J1bihhcmdzPVtdLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxz
ZSwKICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1GYWxzZSk6Ci0gICAgYXJncy5leHRl
bmQoWyctLXByaW50JywgJ25vdGhpbmcnXSkKKyAgICBuZXdfYXJncyA9IFsnLS1wcmludCcsICdu
b3RoaW5nJ10KKyAgICBpZiBub3QgJy0tcGxhdGZvcm0nIGluIGFyZ3M6CisgICAgICAgIG5ld19h
cmdzLmV4dGVuZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQorICAgIGlmIG5vdCByZWNvcmRfcmVz
dWx0czoKKyAgICAgICAgbmV3X2FyZ3MuYXBwZW5kKCctLW5vLXJlY29yZC1yZXN1bHRzJykKKyAg
ICBuZXdfYXJncy5leHRlbmQoYXJncykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAg
ICAgICMgV2UgdXNlIHRoZSBnbG9iIHRvIHRlc3QgdGhhdCBnbG9iYmluZyB3b3Jrcy4KLSAgICAg
ICAgYXJncy5leHRlbmQoWydwYXNzZXMnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQotICAgIGlm
IG5vdCByZWNvcmRfcmVzdWx0czoKLSAgICAgICAgYXJncy5hcHBlbmQoJy0tbm8tcmVjb3JkLXJl
c3VsdHMnKQotICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3Mo
YXJncykKKyAgICAgICAgbmV3X2FyZ3MuZXh0ZW5kKFsncGFzc2VzJywgJ2ZhaWx1cmVzL2V4cGVj
dGVkLyonXSkKKyAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFy
c2VfYXJncyhuZXdfYXJncykKICAgICBpZiBwb3J0X29iaiBpcyBOb25lOgogICAgICAgICBwb3J0
X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCi0gICAgcmVzID0gcnVu
X3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MpCisgICAgcmVzID0gcnVu
X3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9hcmdzKQogICAgIHJl
dHVybiByZXMgPT0gMAogCiAKLWRlZiBsb2dnaW5nX3J1bihhcmdzLCB0ZXN0c19pbmNsdWRlZD1G
YWxzZSk6Ci0gICAgYXJncy5leHRlbmQoWyctLW5vLXJlY29yZC1yZXN1bHRzJ10pCitkZWYgbG9n
Z2luZ19ydW4oYXJncz1bXSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UpOgorICAgIG5ld19hcmdzID0g
WyctLW5vLXJlY29yZC1yZXN1bHRzJ10KKyAgICBpZiBub3QgJy0tcGxhdGZvcm0nIGluIGFyZ3M6
CisgICAgICAgIG5ld19hcmdzLmV4dGVuZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQorICAgIGlm
IGFyZ3M6CisgICAgICAgIG5ld19hcmdzLmV4dGVuZChhcmdzKQogICAgIGlmIG5vdCB0ZXN0c19p
bmNsdWRlZDoKLSAgICAgICAgYXJncy5leHRlbmQoWydwYXNzZXMnLCAnZmFpbHVyZXMvZXhwZWN0
ZWQvKiddKQotICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3Mo
YXJncykKKyAgICAgICAgbmV3X2FyZ3MuZXh0ZW5kKFsncGFzc2VzJywgJ2ZhaWx1cmVzL2V4cGVj
dGVkLyonXSkKKyAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFy
c2VfYXJncyhuZXdfYXJncykKICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZv
cm0sIG9wdGlvbnMpCiAgICAgYnVpbGRib3Rfb3V0cHV0ID0gYXJyYXlfc3RyZWFtLkFycmF5U3Ry
ZWFtKCkKICAgICByZWd1bGFyX291dHB1dCA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCi0g
ICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MsCisg
ICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9h
cmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dD1idWls
ZGJvdF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9vdXRw
dXQ9cmVndWxhcl9vdXRwdXQpCiAgICAgcmV0dXJuIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVn
dWxhcl9vdXRwdXQpCiAKIAogY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAg
IGRlZiB0ZXN0X2Zhc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1
bihbJy0tcGxhdGZvcm0nLCAndGVzdCddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Np
bmdfcnVuKFsnLS1wbGF0Zm9ybScsICd0ZXN0JywgJy0tcnVuLXNpbmdseSddKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICd0ZXN0JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0
c19pbmNsdWRlZD1UcnVlKSkKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKCkpCiAKLSAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2Zh
aWx1cmVzKHNlbGYpOgotICAgICAgICAjIFJ1biB0ZXN0cyBpbmNsdWRpbmcgdGhlIHVuZXhwZWN0
ZWQgZmFpbHVyZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFzc2luZ19ydW4oWyctLXBs
YXRmb3JtJywgJ3Rlc3QnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRl
ZD1UcnVlKSkKKyAgICBkZWYgdGVzdF9iYXRjaF9zaXplKHNlbGYpOgorICAgICAgICAjIEZJWE1F
OiB2ZXJpZnkgIyBvZiB0ZXN0cyBydW4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1iYXRjaC1zaXplJywgJzInXSkpCiAKLSAgICBkZWYgdGVzdF9vbmVfY2hpbGRfcHJv
Y2VzcyhzZWxmKToKKyAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNzXzEoc2VsZik6CiAgICAgICAg
IChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQpID0gbG9nZ2luZ19ydW4oCi0g
ICAgICAgICAgICAgWyctLXBsYXRmb3JtJywgJ3Rlc3QnLCAnLS1wcmludCcsICdjb25maWcnLCAn
LS1jaGlsZC1wcm9jZXNzZXMnLAotICAgICAgICAgICAgICAnMSddKQorICAgICAgICAgICAgIFsn
LS1wcmludCcsICdjb25maWcnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMSddKQogICAgICAgICBz
ZWxmLmFzc2VydFRydWUoJ1J1bm5pbmcgb25lIER1bXBSZW5kZXJUcmVlXG4nCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiByZWd1bGFyX291dHB1dC5nZXQoKSkKIAotICAgIGRlZiB0ZXN0X3R3
b19jaGlsZF9wcm9jZXNzZXMoc2VsZik6CisgICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vzc2VzXzIo
c2VsZik6CiAgICAgICAgIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQpID0g
bG9nZ2luZ19ydW4oCi0gICAgICAgICAgICAgWyctLXBsYXRmb3JtJywgJ3Rlc3QnLCAnLS1wcmlu
dCcsICdjb25maWcnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLAotICAgICAgICAgICAgICAnMiddKQor
ICAgICAgICAgICAgIFsnLS1wcmludCcsICdjb25maWcnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAn
MiddKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1J1bm5pbmcgMiBEdW1wUmVuZGVyVHJlZXMg
aW4gcGFyYWxsZWxcbicKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHJlZ3VsYXJfb3V0cHV0
LmdldCgpKQogCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX3JhaXNlZChzZWxmKToKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCisgICAgICAgICAgICBb
J2ZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUp
CisKKyAgICBkZWYgdGVzdF9mdWxsX3Jlc3VsdHNfaHRtbChzZWxmKToKKyAgICAgICAgIyBGSVhN
RTogdmVyaWZ5IGh0bWw/CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0t
ZnVsbC1yZXN1bHRzLWh0bWwnXSkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3ByaW50aW5nKHNlbGYp
OgorICAgICAgICByZXMsIG91dCwgZXJyID0gbG9nZ2luZ19ydW4oWyctLWhlbHAtcHJpbnRpbmcn
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkK
KworICAgIGRlZiB0ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIyBOb3Rl
IHRoYXQgdGhpcyBhbHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0IG1hcmtlZCBhcyBTS0lQIGlmCisg
ICAgICAgICMgeW91IHNwZWNpZnkgaXQgZXhwbGljaXRseS4KKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVuLAorICAgICAgICAgICAgWydmYWls
dXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCisKICAg
ICBkZWYgdGVzdF9sYXN0X3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgIHBhc3NpbmdfcnVuKFsnLS1w
bGF0Zm9ybScsICd0ZXN0J10sIHJlY29yZF9yZXN1bHRzPVRydWUpCisgICAgICAgIHBhc3Npbmdf
cnVuKFsnLS1jbG9iYmVyLW9sZC1yZXN1bHRzJ10sIHJlY29yZF9yZXN1bHRzPVRydWUpCiAgICAg
ICAgIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQpID0gbG9nZ2luZ19ydW4o
Ci0gICAgICAgICAgICBbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctLXByaW50LWxhc3QtZmFpbHVy
ZXMnXSkKKyAgICAgICAgICAgIFsnLS1wcmludC1sYXN0LWZhaWx1cmVzJ10pCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVndWxhcl9vdXRwdXQuZ2V0KCksIFsnXG5cbiddKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGJ1aWxkYm90X291dHB1dC5nZXQoKSwgW10pCiAKKyAgICBkZWYgdGVz
dF9saW50X3Rlc3RfZmlsZXMoc2VsZik6CisgICAgICAgICMgRklYTUU6ICBhZGQgZXJyb3JzPwor
ICAgICAgICByZXMsIG91dCwgZXJyID0gbG9nZ2luZ19ydW4oWyctLWxpbnQtdGVzdC1maWxlcydd
LCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoYW55KFsnbGludCBzdWNjZWVkZWQnIGluIG1zZyBmb3IgbXNnIGluIGVyci5nZXQoKV0p
KQorCiAgICAgZGVmIHRlc3Rfbm9fdGVzdHNfZm91bmQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIGxvZ2dpbmdfcnVuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBbJy0tcGxhdGZvcm0nLCAndGVzdCcsICdyZXNvdXJjZXMnXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoU3lzdGVtRXhpdCwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsn
LS1wbGF0Zm9ybScsICd0ZXN0JywgJ2ZvbyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICByZXMsIG91dCwgZXJyID0gbG9nZ2luZ19ydW4o
WydyZXNvdXJjZXMnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBlcnIuZ2V0KCkpCisK
KyAgICBkZWYgdGVzdF9ub190ZXN0c19mb3VuZF8yKHNlbGYpOgorICAgICAgICByZXMsIG91dCwg
ZXJyID0gbG9nZ2luZ19ydW4oWydmb28nXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChyZXMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVt
cHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBl
cnIuZ2V0KCkpCisKKyAgICBkZWYgdGVzdF9yYW5kb21pemVfb3JkZXIoc2VsZik6CisgICAgICAg
ICMgRklYTUU6IHZlcmlmeSBvcmRlciB3YXMgc2h1ZmZsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHBhc3NpbmdfcnVuKFsnLS1yYW5kb21pemUtb3JkZXInXSkpCisKKyAgICBkZWYgdGVzdF9y
dW5fY2h1bmsoc2VsZik6CisgICAgICAgICMgRklYTUU6IHZlcmlmeSAjIG9mIHRlc3RzIHJ1bgor
ICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXJ1bi1jaHVuaycsICcxOjQn
XSkpCisKKyAgICBkZWYgdGVzdF9ydW5fZm9yY2Uoc2VsZik6CisgICAgICAgICMgVGhpcyByYWlz
ZXMgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugd2UgcnVuCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0
ZWQvZXhjZXB0aW9uLmh0bWwsIHdoaWNoIGlzIG5vcm1hbGx5IFNLSVBwZWQuCisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLCBbJy0tZm9yY2UnXSkKKwor
ICAgIGRlZiB0ZXN0X3J1bl9wYXJ0KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgIyBv
ZiB0ZXN0cyBydW4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1ydW4t
cGFydCcsICcxOjInXSkpCisKKyAgICBkZWYgdGVzdF9ydW5fc2luZ2x5KHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXJ1bi1zaW5nbHknXSkpCisKKyAgICBk
ZWYgdGVzdF9zaW5nbGVfZmlsZShzZWxmKToKKyAgICAgICAgIyBGSVhNRTogdmVyaWZ5ICMgb2Yg
dGVzdHMgcnVuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJ3Bhc3Nlcy90
ZXh0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCisKKyAgICBkZWYgdGVzdF91bmV4cGVj
dGVkX2ZhaWx1cmVzKHNlbGYpOgorICAgICAgICAjIFJ1biB0ZXN0cyBpbmNsdWRpbmcgdGhlIHVu
ZXhwZWN0ZWQgZmFpbHVyZXMuCisgICAgICAgIHJlcywgb3V0LCBlcnIgPSBsb2dnaW5nX3J1bih0
ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShlcnIuZW1wdHkoKSkKKwogCiBkZWYgX21vY2tlZF9vcGVuKG9yaWdpbmFsX29wZW4sIGZp
bGVfbGlzdCk6CiAgICAgZGVmIF93cmFwcGVyKG5hbWUsIG1vZGUsIGVuY29kaW5nKToKQEAgLTE0
NCw3ICsyMDksNyBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgICAgICAjIGlzIG1pc3NpbmcsIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyBsb2Nh
dGlvbi4KICAgICAgICAgICAgIGZpbGVfbGlzdCA9IFtdCiAgICAgICAgICAgICBjb2RlY3Mub3Bl
biA9IF9tb2NrZWRfb3BlbihvcmlnaW5hbF9vcGVuLCBmaWxlX2xpc3QpCi0gICAgICAgICAgICBw
YXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctLXBpeGVsLXRlc3RzJywKKyAgICAg
ICAgICAgIHBhc3NpbmdfcnVuKFsnLS1waXhlbC10ZXN0cycsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgJy0tcmVzZXQtcmVzdWx0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nl
cy9pbWFnZS5odG1sJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0
ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCkBAIC0xNjUsNyArMjMwLDcgQEAgY2xhc3MgUmViYXNl
bGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgIyBpcyBtc3NpbmcsIHRo
ZW4gY3JlYXRlIGEgbmV3IGV4cGVjdGF0aW9uIGluIHRoZSBwbGF0Zm9ybSBkaXIuCiAgICAgICAg
ICAgICBmaWxlX2xpc3QgPSBbXQogICAgICAgICAgICAgY29kZWNzLm9wZW4gPSBfbW9ja2VkX29w
ZW4ob3JpZ2luYWxfb3BlbiwgZmlsZV9saXN0KQotICAgICAgICAgICAgcGFzc2luZ19ydW4oWyct
LXBsYXRmb3JtJywgJ3Rlc3QnLCAnLS1waXhlbC10ZXN0cycsCisgICAgICAgICAgICBwYXNzaW5n
X3J1bihbJy0tcGl4ZWwtdGVzdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICctLW5ldy1i
YXNlbGluZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1sJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFn
ZS5odG1sJ10sCkBAIC0yMDgsNiArMjczLDcgQEAgY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKICAgICAgICAg
ICAgIHJldHVybgogCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxh
dGZvcm0nLCAndGVzdCddKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsn
LS1wbGF0Zm9ybScsICdkcnlydW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdmYXN0L2h0bWwnXSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihb
Jy0tcGxhdGZvcm0nLCAnZHJ5cnVuLW1hYycsCkBAIC0yMjMsNiArMjg5LDExIEBAIGNsYXNzIFRl
c3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkKToKICAgICAg
ICAgc2VsZi5fdGltZW91dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKIAogICAgIGRlZiBydW4oc2Vs
Zik6CisgICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKKworICAgIGRlZiBfY292ZXJlZF9ydW4o
c2VsZik6CisgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdv
cmsgYXJvdW5kIGEgYnVnCisgICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVj
a2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KICAgICAgICAgc2VsZi5fdGhyZWFkX2lk
ID0gdGhyZWFkLmdldF9pZGVudCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3N0
YXJ0ZWRfcXVldWUucHV0KCcnKQpAQCAtMjg0LDggKzM1NSwxMSBAQCBjbGFzcyBXYWl0Rm9yVGhy
ZWFkc1RvRmluaXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShpbnRlcnJ1cHRlZCkKIAogICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAg
IG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9v
dXRwdXQoKQogICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVv
dXQnKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQorICAgICAgICBvYy5y
ZXN0b3JlX291dHB1dCgpCiAKICAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CiAgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29uZV90aHJlYWQsICdFeGNl
cHRpb24nKQpAQCAtMjkzLDYgKzM2Nyw4IEBAIGNsYXNzIFdhaXRGb3JUaHJlYWRzVG9GaW5pc2hU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogY2xhc3MgU3RhbmRhbG9uZUZ1bmN0aW9uc1Rlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNlbGYp
OgorICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9j
LmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgbG9nZ2VyID0gcnVuX3dlYmtpdF90ZXN0cy5fbG9n
CiAgICAgICAgIGFzdHJlYW0gPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQogICAgICAgICBo
YW5kbGVyID0gVGVzdEhhbmRsZXIoYXN0cmVhbSkKQEAgLTMxMCw2ICszODYsNyBAQCBjbGFzcyBT
dGFuZGFsb25lRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShhc3RyZWFtLmVtcHR5KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
Y2hpbGRfdGhyZWFkLmlzQWxpdmUoKSkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAg
ICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2soc2VsZik6CiAgICAgICAgIGlkLCBzdGFjayA9
IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66305</attachid>
            <date>2010-09-01 17:39:17 -0700</date>
            <delta_ts>2010-09-01 17:59:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44902-20100901173916.patch</filename>
            <type>text/plain</type>
            <size>50125</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiM2Q4YjdjZDA2NjQ1MDdjZmY5ZWU3ZDlhNTYwMGJhMzgyNjg0OGEwLi4yNDk1YmFi
MjM2ZTBlMmFlN2VlNTQ3MTNkZDg0OTkyOTdiNThlNmEzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAK
KzIwMTAtMDgtMzEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGFuZCBhIHBhdGNoZWQg
dmVyc2lvbiBvZiByNjY1NDIgLSBjaGFuZ2UgVGVzdFJ1bm5lciB0byBoYXZlIGFuCisgICAgICAg
IHNlcGFyYXRlIGNsZWFudXAgbWV0aG9kIGFuZCBmaXggdGhlIG9yZGVyaW5nIG9mIGNsZWFudXAg
YmV0d2VlbgorICAgICAgICBUZXN0UnVubmVyIGFuZCB0aGUgcHJpbnRpbmcgbW9kdWxlLCBhbmQg
dGhlbiB3cmFwIGV2ZXJ5dGhpbmcgaW4gYQorICAgICAgICB0cnkvZmluYWxseSBibG9jayB0byBl
bnN1cmUgcmVsaWFibGUgY2xlYW51cCB3aXRob3V0IG5lZWRpbmcgdG8KKyAgICAgICAgcmVseSBv
biBzdHVmZiBoYXBwZW5pbmcgaW4gdGhlIGRlc3RydWN0b3Igb2YgdGhlIFRlc3RSdW5uZXIuCisK
KyAgICAgICAgQWxzbyByZWZhY3RvciBydW5fd2Via2l0X3Rlc3RzLnJ1bigpIHRvIGJlIG11Y2gg
c21hbGxlciBhbmQgY2xlYW5lcgorICAgICAgICBieSBjcmVhdGluZyBhIGJ1bmNoIG9mIGhlbHBl
ciBtZXRob2RzIGFuZCBtb3ZpbmcgbW9yZSBzdHVmZiBpbnRvCisgICAgICAgIHRoZSBUZXN0UnVu
bmVyIGNsYXNzLgorCisgICAgICAgIFRoaXMgZml4ZXMgdGhlIGNyYXNoIGF0IHRoZSBlbmQgb2Yg
dGhlIGxpbnV4IHRlc3QgcnVuIG9mCisgICAgICAgIG5ldy1ydW4td2Via2l0LXRlc3RzIChhbmQg
dW5kb2VzIHRoZSByb2xsb3V0IGluIDY2NTQ3KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MDIKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2RhdGEvZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvZmFpbHVy
ZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvZGF0YS9wYXNzZXMvZXJyb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3Bhc3Nlcy9lcnJv
ci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9k
YXRhL3BsYXRmb3JtL3Rlc3QvdGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
OgorCiAyMDEwLTA4LTMxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL2ZhaWx1cmVzL2V4cGVjdGVkL2V4Y2Vw
dGlvbi5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0
YS9mYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGM1NGUzN2I4
YjA4NzE2MWU2Y2RmNGU4ZjU5YmM0YzQ4NjE5ZjkwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9mYWlsdXJlcy9leHBlY3Rl
ZC9leGNlcHRpb24uaHRtbApAQCAtMCwwICsxIEBACitleGNlcHRpb24KZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvZmFpbHVyZXMvZXhw
ZWN0ZWQva2V5Ym9hcmQuaHRtbCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2RhdGEvZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MjUzOTgzNDc1M2Q1NjY3YTYxNzU5YmI2NGIxMjYyMjgxYmI2NmVmCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9mYWlsdXJl
cy9leHBlY3RlZC9rZXlib2FyZC5odG1sCkBAIC0wLDAgKzEgQEAKK2tleWJvYXJkCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3Bhc3Nl
cy9lcnJvci1leHBlY3RlZC50eHQgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9kYXRhL3Bhc3Nlcy9lcnJvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQyNzI2
OTlhZTFiMWNjYTA3MTNjZGRlYTk2ZWQ5ZDY5MGFlMTAzMgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGFzc2VzL2Vycm9y
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitlcnJvci10eHQKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGFzc2VzL2Vycm9yLmh0
bWwgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3Bhc3Nl
cy9lcnJvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyNzY3NTM3NDZiMTJiNTg0M2IyNWVjMjJiNWEwNjE3
ODdiMGI2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9kYXRhL3Bhc3Nlcy9lcnJvci5odG1sCkBAIC0wLDAgKzEgQEAKK2Vycm9y
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9k
YXRhL3BsYXRmb3JtL3Rlc3QvdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGF0YS9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAppbmRleCA2ZTY2Y2FhYjNmYjZkZDA4NmNkMmY0ZGRmMjIzMTQ5YzE3MjA5ZmE1
Li4xNjU1NmUzZjhjMTk0MDcxMTQ0MWJkNDZlMmM4ODlhM2IxNGMyODliIDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kYXRhL3BsYXRmb3JtL3Rl
c3QvdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2RhdGEvcGxhdGZvcm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQK
QEAgLTgsMyArOCw1IEBAIFdPTlRGSVggOiBmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdl
Lmh0bWwgPSBNSVNTSU5HIFBBU1MKIFdPTlRGSVggOiBmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5n
X3RleHQuaHRtbCA9IE1JU1NJTkcgUEFTUwogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL3Rl
eHQuaHRtbCA9IFRFWFQKIFdPTlRGSVggOiBmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwg
PSBUSU1FT1VUCitXT05URklYIFNLSVAgOiBmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1s
ID0gQ1JBU0gKK1dPTlRGSVggU0tJUCA6IGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1s
ID0gQ1JBU0gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQucHkKaW5kZXggNjM0MzQwMDFiNTNkZTFjYzQxYWExMGY3YThlMzhi
ZTZiNjBhYzlhYi4uZWMzMzA4NmUxN2ZjOGRlNzI2NzY5OGViMzYwMGViNDNmMjYzZTQ5YSAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJl
ZV90aHJlYWQucHkKQEAgLTE2OSw2ICsxNjksMTEgQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0
aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIK
IAogICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKKworICAg
IGRlZiBfY292ZXJlZF9ydW4oc2VsZik6CisgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBh
cmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCisgICAgICAgICMgaW4gY292ZXJhZ2U6
IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KICAgICAg
ICAgdGVzdF9pbmZvID0gc2VsZi5fdGVzdF9pbmZvCiAgICAgICAgIGRyaXZlciA9IHNlbGYuX3Bv
cnQuY3JlYXRlX2RyaXZlcihzZWxmLl9pbWFnZV9wYXRoLCBzZWxmLl9zaGVsbF9hcmdzKQogICAg
ICAgICBkcml2ZXIuc3RhcnQoKQpAQCAtMjg3LDYgKzI5MiwxMSBAQCBjbGFzcyBUZXN0U2hlbGxU
aHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAiIiJE
ZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5jYXVn
aHQKICAgICAgICAgZXhjZXB0aW9ucy4iIiIKKyAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQor
CisgICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBh
IHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKKyAgICAgICAgIyBpbiBjb3Zl
cmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1Lgog
ICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKICAgICAgICAgc2Vs
Zi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAK
QEAgLTMwMyw5ICszMTMsOSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFk
KToKICAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKICAg
ICAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICAjIFJl
LXJhaXNlIGl0IGFuZCBkaWUuCi0gICAgICAgICAgICBfbG9nLmVycm9yKCclcyBkeWluZzogJXMn
ICUgKHNlbGYuZ2V0TmFtZSgpLAorICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgZHlpbmcsIGV4
Y2VwdGlvbiByYWlzZWQ6ICVzJyAlIChzZWxmLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8pKQotICAgICAgICAgICAgcmFpc2UKKwogICAgICAg
ICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQogCiAgICAgZGVmIHJ1bl9pbl9tYWluX3Ro
cmVhZChzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgpAQCAtMzIxLDE0ICszMzEs
OCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKIAogICAgICAgICBJ
ZiB0ZXN0X3J1bm5lciBpcyBub3QgTm9uZSwgdGhlbiB3ZSBjYWxsIHRlc3RfcnVubmVyLlVwZGF0
ZVN1bW1hcnkoKQogICAgICAgICB3aXRoIHRoZSByZXN1bHRzIG9mIGVhY2ggdGVzdC4iIiIKLSAg
ICAgICAgYmF0Y2hfc2l6ZSA9IDAKKyAgICAgICAgYmF0Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMu
YmF0Y2hfc2l6ZQogICAgICAgICBiYXRjaF9jb3VudCA9IDAKLSAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5iYXRjaF9zaXplOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGJhdGNo
X3NpemUgPSBpbnQoc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplKQotICAgICAgICAgICAgZXhjZXB0
OgotICAgICAgICAgICAgICAgIF9sb2cuaW5mbygiSWdub3JpbmcgaW52YWxpZCBiYXRjaCBzaXpl
ICclcyciICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5iYXRjaF9z
aXplKQogCiAgICAgICAgICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0
aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4KICAgICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVu
X3dlYmtpdF90ZXN0cy5weTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQuCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9tZXRlcmVkX3N0cmVhbV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtX3VuaXR0ZXN0LnB5
CmluZGV4IGE5YzZkNWI0M2UxOTRjMzY2NzE4M2Y5MmJkMzM3MGViZjlkZjJhYjMuLjk0MjFmZjhm
YWE2ZTZiZWY4MzlhZmZlNzU3NTY1MWYxMzIxZTJkNTEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3Ry
ZWFtX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtX3VuaXR0ZXN0LnB5CkBAIC0zNCw3
ICszNCw2IEBAIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IHBkYgogaW1wb3J0IHN5cwogaW1wb3J0
IHVuaXR0ZXN0Ci1pbXBvcnQgbG9nZ2luZwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5hcnJheV9z
dHJlYW0gaW1wb3J0IEFycmF5U3RyZWFtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KQEAgLTk3LDEzICs5NiwxOSBAQCBjbGFz
cyBUZXN0TWV0ZXJlZFN0cmVhbSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG0ud3JpdGUo
ImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCksIFsnZm9vJ10pCiAKKyAg
ICAgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICAgICAgYiA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAg
bG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5T
dHJlYW1IYW5kbGVyKGIpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCiAgICAg
ICAgIG0udXBkYXRlKCJiYXIiKQotICAgICAgICAjIEZJWE1FOiBmaWd1cmUgb3V0IGhvdyB0byB0
ZXN0IHRoYXQgdGhpcyB3ZW50IHRvIHRoZSBsb2dnZXIuIElzIHRoaXMKLSAgICAgICAgIyBnb29k
IGVub3VnaD8KKyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzLnJlbW92ZShoYW5kbGVyKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhiLmdldCgpLCBbJ2JhclxuJ10pCiAKICAgICAgICAgbS5wcm9ncmVzcygiZHJvcHBl
ZCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCksIFsnZm9vJ10pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGIuZ2V0KCksIFsnYmFyXG4nXSkKIAogCiBpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weQppbmRl
eCBhOWUwMTVmY2VlY2IzYzljY2I2ZjhlOGM3ZjllNThiMmQ2ZDA5ODhjLi5kNDIwNjMxZmM4ZTQ0
ZDAwYjRmMWE2ZWQ5MmUxYzNiNzQ1YTMzZDFiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weQorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wcmludGluZy5weQpAQCAtMTI2LDE5ICsxMjYsNiBAQCBkZWYgcHJpbnRfb3B0aW9ucygpOgog
ICAgIF0KIAogCi1kZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgbWV0ZXIpOgotICAgICIi
IkNvbmZpZ3VyZXMgdGhlIGxvZ2dpbmcgc3lzdGVtLiIiIgotICAgIGxvZ19mbXQgPSAnJShtZXNz
YWdlKXMnCi0gICAgbG9nX2RhdGVmbXQgPSAnJXklbSVkICVIOiVNOiVTJwotICAgIGxvZ19sZXZl
bCA9IGxvZ2dpbmcuSU5GTwotICAgIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICAgICAgbG9nX2Zt
dCA9ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKS00ZCAlKGxldmVsbmFtZSlz
ICcKLSAgICAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMnKQotICAgICAgICBsb2dfbGV2ZWwg
PSBsb2dnaW5nLkRFQlVHCi0KLSAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZl
bCwgZm9ybWF0PWxvZ19mbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PWxvZ19k
YXRlZm10LCBzdHJlYW09bWV0ZXIpCi0KIAogZGVmIHBhcnNlX3ByaW50X29wdGlvbnMocHJpbnRf
b3B0aW9ucywgdmVyYm9zZSwgY2hpbGRfcHJvY2Vzc2VzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfZnVsbHlfcGFyYWxsZWwpOgpAQCAtMTkwLDYgKzE3NywyOCBAQCBkZWYgcGFyc2VfcHJp
bnRfb3B0aW9ucyhwcmludF9vcHRpb25zLCB2ZXJib3NlLCBjaGlsZF9wcm9jZXNzZXMsCiAgICAg
cmV0dXJuIHN3aXRjaGVzCiAKIAorZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzdHJlYW0sIHZlcmJv
c2UpOgorICAgIGxvZ19mbXQgPSAnJShtZXNzYWdlKXMnCisgICAgbG9nX2RhdGVmbXQgPSAnJXkl
bSVkICVIOiVNOiVTJworICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgIGlmIHZlcmJv
c2U6CisgICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVu
byktNGQgJShsZXZlbG5hbWUpcyAnCisgICAgICAgICAgICAgICAgJyUobWVzc2FnZSlzJykKKyAg
ICAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5ERUJVRworCisgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCkKKyAgICBoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN0cmVhbSkKKyAg
ICBoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcihsb2dfZm10LCBOb25lKSkK
KyAgICByb290LmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICByb290LnNldExldmVsKGxvZ19sZXZl
bCkKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBfcmVzdG9yZV9sb2dnaW5nKGhhbmRsZXJf
dG9fcmVtb3ZlKToKKyAgICByb290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIHJvb3QuaGFu
ZGxlcnMucmVtb3ZlKGhhbmRsZXJfdG9fcmVtb3ZlKQorCisKIGNsYXNzIFByaW50ZXIob2JqZWN0
KToKICAgICAiIiJDbGFzcyBoYW5kbGluZyBhbGwgbm9uLWRlYnVnLWxvZ2dpbmcgcHJpbnRpbmcg
ZG9uZSBieSBydW4td2Via2l0LXRlc3RzLgogCkBAIC0yMzcsMTIgKzI0NiwyMiBAQCBjbGFzcyBQ
cmludGVyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fbWV0ZXIgPSBtZXRlcmVkX3N0cmVhbS5N
ZXRlcmVkU3RyZWFtKG9wdGlvbnMudmVyYm9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0KQotICAgICAgICBjb25maWd1
cmVfbG9nZ2luZyhzZWxmLl9vcHRpb25zLCBzZWxmLl9tZXRlcikKKyAgICAgICAgc2VsZi5fbG9n
Z2luZ19oYW5kbGVyID0gX2NvbmZpZ3VyZV9sb2dnaW5nKHNlbGYuX21ldGVyLAorICAgICAgICAg
ICAgb3B0aW9ucy52ZXJib3NlKQogCiAgICAgICAgIHNlbGYuc3dpdGNoZXMgPSBwYXJzZV9wcmlu
dF9vcHRpb25zKG9wdGlvbnMucHJpbnRfb3B0aW9ucywKICAgICAgICAgICAgIG9wdGlvbnMudmVy
Ym9zZSwgY2hpbGRfcHJvY2Vzc2VzLCBpc19mdWxseV9wYXJhbGxlbCkKIAotICAgICMgVGhlc2Ug
dHdvIHJvdXRpbmVzIGp1c3QgaGlkZSB0aGUgaW1wbG1lbnRhdGlvbiBvZiB0aGUgc3dpdGNoZXMu
CisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIlJlc3RvcmUgbG9nZ2luZyBjb25m
aWd1cmF0aW9uIHRvIGl0cyBpbml0aWFsIHNldHRpbmdzLiIiIgorICAgICAgICBpZiBzZWxmLl9s
b2dnaW5nX2hhbmRsZXI6CisgICAgICAgICAgICBfcmVzdG9yZV9sb2dnaW5nKHNlbGYuX2xvZ2dp
bmdfaGFuZGxlcikKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dpbmdfaGFuZGxlciA9IE5vbmUKKwor
ICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNsZWFudXAoKQorCisgICAgIyBU
aGVzZSB0d28gcm91dGluZXMganVzdCBoaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3dp
dGNoZXMuCiAgICAgZGVmIGRpc2FibGVkKHNlbGYsIG9wdGlvbik6CiAgICAgICAgIHJldHVybiBu
b3Qgb3B0aW9uIGluIHNlbGYuc3dpdGNoZXMKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRl
c3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQppbmRleCA0MGM2OTFmOWExMGU4NGM5Y2Q5NDdj
MmVjOTNhODYyOTE1OWZkZTFhLi4yOTEzOWQwMjA3MDFjYzBiZDg1NTE3NTRiZjdhNWQyYzdkN2E4
Y2U4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0
dGVzdC5weQpAQCAtMzcsNiArMzcsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBsb2dnaW5n
CiAKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KK2Zyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgbG9ndGVzdGluZwogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNr
YWdlIGltcG9ydCBwcmludGluZwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCkBAIC01MywyNSArNTQsMjQgQEAg
ZGVmIGdldF9vcHRpb25zKGFyZ3MpOgogCiBjbGFzcyBUZXN0VXRpbGl0eUZ1bmN0aW9ucyh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfY29uZmlndXJlX2xvZ2dpbmcoc2VsZik6Ci0g
ICAgICAgICMgRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gcmVzZXQgdGhlIGJh
c2ljIGxvZ2dlci4KLSAgICAgICAgIyBGSVhNRTogSWYgb3RoZXIgdGVzdGluZyBjbGFzc2VzIGNh
bGwgbG9nZ2luZy5iYXNpY0NvbmZpZygpIHRoZW4KLSAgICAgICAgIyBGSVhNRTogdGhlc2UgY2Fs
bHMgYmVjb21lIG5vLW9wcyBhbmQgd2UgY2FuJ3QgY29udHJvbCB0aGUKLSAgICAgICAgIyBGSVhN
RTogY29uZmlndXJhdGlvbiB0byB0ZXN0IHRoaW5ncyBwcm9wZXJseS4KICAgICAgICAgb3B0aW9u
cywgYXJncyA9IGdldF9vcHRpb25zKFtdKQogICAgICAgICBzdHJlYW0gPSBhcnJheV9zdHJlYW0u
QXJyYXlTdHJlYW0oKQotICAgICAgICBwcmludGluZy5jb25maWd1cmVfbG9nZ2luZyhvcHRpb25z
LCBzdHJlYW0pCisgICAgICAgIGhhbmRsZXIgPSBwcmludGluZy5fY29uZmlndXJlX2xvZ2dpbmco
c3RyZWFtLCBvcHRpb25zLnZlcmJvc2UpCiAgICAgICAgIGxvZ2dpbmcuaW5mbygidGhpcyBzaG91
bGQgYmUgbG9nZ2VkIikKLSAgICAgICAgIyBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgp
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5lbXB0eSgpKQogCiAgICAgICAgIHN0
cmVhbS5yZXNldCgpCiAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoaXMgc2hvdWxkIG5vdCBiZSBs
b2dnZWQiKQotICAgICAgICAjIHNlbGYuYXNzZXJ0VHJ1ZShzdHJlYW0uZW1wdHkoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHN0cmVhbS5lbXB0eSgpKQorCisgICAgICAgIHByaW50aW5nLl9y
ZXN0b3JlX2xvZ2dpbmcoaGFuZGxlcikKIAogICAgICAgICBzdHJlYW0ucmVzZXQoKQogICAgICAg
ICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoWyctLXZlcmJvc2UnXSkKLSAgICAgICAgcHJp
bnRpbmcuY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucywgc3RyZWFtKQorICAgICAgICBoYW5kbGVy
ID0gcHJpbnRpbmcuX2NvbmZpZ3VyZV9sb2dnaW5nKHN0cmVhbSwgb3B0aW9ucy52ZXJib3NlKQog
ICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aGlzIHNob3VsZCBiZSBsb2dnZWQiKQotICAgICAgICAj
IHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2Uoc3RyZWFtLmVtcHR5KCkpCisgICAgICAgIHByaW50aW5nLl9yZXN0b3JlX2xvZ2dpbmcoaGFu
ZGxlcikKIAogICAgIGRlZiB0ZXN0X3ByaW50X29wdGlvbnMoc2VsZik6CiAgICAgICAgIG9wdGlv
bnMsIGFyZ3MgPSBnZXRfb3B0aW9ucyhbXSkKQEAgLTE5MCw2ICsxOTAsMTQgQEAgY2xhc3MgIFRl
c3RwcmludGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZG9faGVscGVyKG1ldGhvZF9u
YW1lLCBzd2l0Y2gsICdoZWxsbycsIGV4cF9lcnIsIGV4cF9ib3QpCiAgICAgICAgIGRvX2hlbHBl
cihtZXRob2RfbmFtZSwgJ2V2ZXJ5dGhpbmcnLCAnaGVsbG8nLCBleHBfZXJyLCBleHBfYm90KQog
CisgICAgZGVmIHRlc3RfY29uZmlndXJlX2FuZF9jbGVhbnVwKHNlbGYpOgorICAgICAgICAjIFRo
aXMgdGVzdCB2ZXJpZmllcyB0aGF0IGNhbGxpbmcgY2xlYW51cCByZXBlYXRlZGx5IGFuZCBkZWxl
dGluZworICAgICAgICAjIHRoZSBvYmplY3QgaXMgc2FmZS4KKyAgICAgICAgcHJpbnRlciwgZXJy
LCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCisgICAg
ICAgIHByaW50ZXIuY2xlYW51cCgpCisgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCisgICAgICAg
IHByaW50ZXIgPSBOb25lCisKICAgICBkZWYgdGVzdF9wcmludF9hY3R1YWwoc2VsZik6CiAgICAg
ICAgICMgQWN0dWFsIHJlc3VsdHMgbmVlZCB0byBiZSBsb2dnZWQgdG8gdGhlIGJ1aWxkYm90J3Mg
c3RyZWFtLgogICAgICAgICBzZWxmLmRvX3N3aXRjaF90ZXN0cygncHJpbnRfYWN0dWFsJywgJ2Fj
dHVhbCcsIHRvX2J1aWxkYm90PVRydWUpCkBAIC00MjEsMTEgKzQyOSwxMiBAQCBjbGFzcyAgVGVz
dHByaW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVy
ci5lbXB0eSgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCiAKLSAgICBk
ZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICBkZWYgdGVzdF93cml0ZV9ub3RoaW5nKHNlbGYpOgog
ICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoWyctLXByaW50Jywg
J25vdGhpbmcnXSkKICAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIikKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGVyci5lbXB0eSgpKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfbWlzYyhzZWxmKToK
ICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcs
ICdtaXNjJ10pCiAgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCkBAIC00MzMsNiArNDQyLDcgQEAgY2xhc3MgIFRlc3Rwcmlu
dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNv
bmZpZyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKIAorICAgIGRlZiB0
ZXN0X3dyaXRlX2V2ZXJ5dGhpbmcoc2VsZik6CiAgICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0g
c2VsZi5nZXRfcHJpbnRlcihbJy0tcHJpbnQnLCAnZXZlcnl0aGluZyddKQogICAgICAgICBwcmlu
dGVyLndyaXRlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQpA
QCAtNDQwLDExICs0NTAsMTAgQEAgY2xhc3MgIFRlc3RwcmludGVyKHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgcHJpbnRlci53cml0ZSgiZm9vIiwgImNvbmZpZyIpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCiAKLSAgICAgICAgIyBGSVhNRTogdGhpcyBzaG91bGQg
YmUgbG9nZ2VkIHNvbWV3aGVyZSwgYnV0IGl0IGFjdHVhbGx5Ci0gICAgICAgICMgZGlzYXBwZWFy
cyBpbnRvIHRoZSBldGhlciBpbiB0aGUgbG9nZ2luZyBzdWJzeXN0ZW0uCisgICAgZGVmIHRlc3Rf
d3JpdGVfdmVyYm9zZShzZWxmKToKICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdl
dF9wcmludGVyKFsnLS12ZXJib3NlJ10pCiAgICAgICAgIHByaW50ZXIud3JpdGUoImZvbyIpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKG5vdCBlcnIuZW1wdHkoKSBhbmQgImZvbyIgaW4gZXJyLmdldCgpWzBdKQogICAgICAgICBz
ZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCiAKICAgICBkZWYgdGVzdF9wcmludF91bmV4cGVj
dGVkX3Jlc3VsdHMoc2VsZik6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVz
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5CmluZGV4IGU0YzZiN2U4NDUwZjM0
M2FmZjQwZTc3YTcyNjYyOTlhYjVmYTg2YWUuLjI2ZWIxOGQ2ZWU5YWY1ZjUwMjUyNDMwNDRkNmMx
MDM2NWUzMDkxZTUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5CkBAIC0xMDAsNyArMTAwLDcgQEAgY2xh
c3MgQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldHVybiAiIiIKIEJVR19URVNU
IDogZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sID0gVEVYVAogQlVHX1RFU1QgV09OVEZJWCBT
S0lQIDogZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCA9IENSQVNICi1CVUdfVEVTVCBSRUJB
U0VMSU5FIDogZmFpbHVyZS9leHBlY3RlZC9taXNzaW5nX2ltYWdlLmh0bWwgPSBNSVNTSU5HCitC
VUdfVEVTVCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1s
ID0gTUlTU0lORwogQlVHX1RFU1QgV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2No
ZWNrc3VtLmh0bWwgPSBJTUFHRQogQlVHX1RFU1QgV09OVEZJWCBXSU4gOiBmYWlsdXJlcy9leHBl
Y3RlZC9pbWFnZS5odG1sID0gSU1BR0UKICIiIgpAQCAtMjUzLDYgKzI1MywxMyBAQCBCVUdfVEVT
VCA6IGZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCA9IElNQUdFIiIiKQogQlVHX1RFU1QgOiBm
YWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwgPSBURVhUCiBCVUdfVEVTVCA6IGZhaWx1cmVzL2V4
cGVjdGVkL3RleHQuaHRtbCA9IElNQUdFIiIiKQogCisgICAgZGVmIHRlc3Rfc2VtYW50aWNfbWlz
c2luZ19maWxlKHNlbGYpOgorICAgICAgICAjIFRoaXMgc2hvdWxkIGxvZyBhIG5vbi1mYXRhbCBl
cnJvci4KKyAgICAgICAgc2VsZi5wYXJzZV9leHAoJ0JVR19URVNUIDogbWlzc2luZ19maWxlLmh0
bWwgPSBURVhUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxlbihz
ZWxmLl9leHAuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF9ub25fZmF0YWxfZXJyb3JzKCkpLCAxKQor
CisKICAgICBkZWYgdGVzdF9vdmVycmlkZXMoc2VsZik6CiAgICAgICAgIHNlbGYucGFyc2VfZXhw
KHNlbGYuZ2V0X2Jhc2ljX2V4cGVjdGF0aW9ucygpLCAiIiIKIEJVR19PVkVSUklERSA6IGZhaWx1
cmVzL2V4cGVjdGVkL3RleHQuaHRtbCA9IElNQUdFIiIiKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGFmMWFm
OTNkM2QwMjQ2YTViNzk5OTIwODYxOGEwY2FmMDJlOGRhMGQuLjBkZGE3NzQxZWEyZTAzMWRkZjM0
MDhkYjEwNzkxMzc3MGVlNGU2NDEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTMyNyw3ICszMjcsNiBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl93ZWJraXRfYmFzZV9kaXI6
CiAgICAgICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQogICAgICAg
ICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGlyID0gYWJzcGF0aFswOmFic3BhdGguZmluZCgnV2Vi
S2l0VG9vbHMnKV0KLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlVzaW5nIFdlYktpdCByb290OiAl
cyIgJSBzZWxmLl93ZWJraXRfYmFzZV9kaXIpCiAKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9p
bihzZWxmLl93ZWJraXRfYmFzZV9kaXIsICpjb21wcykKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IGQzNmI1
NDBjNzVhYThmN2QwNDk2MTJhMDQzZTAyNDdlMjk5OGEwN2YuLmUzMDkzMzQ2YjE4ZTQxZWQ5YWVh
Mzk0OGQxMzRjZjFmYjBiZDMzOWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTE1MSw3ICsxNTEsMTAgQEAg
Y2xhc3MgVGVzdERyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHVy
aSwgdGltZW91dG1zLCBpbWFnZV9oYXNoKToKICAgICAgICAgYmFzZW5hbWUgPSB1cmlbKHVyaS5y
ZmluZCgiLyIpICsgMSk6dXJpLnJmaW5kKCIuaHRtbCIpXQogCi0gICAgICAgIGVycm9yID0gJycK
KyAgICAgICAgaWYgJ2Vycm9yJyBpbiBiYXNlbmFtZToKKyAgICAgICAgICAgIGVycm9yID0gYmFz
ZW5hbWUgKyAiX2Vycm9yXG4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvciA9ICcn
CiAgICAgICAgIGNoZWNrc3VtID0gTm9uZQogICAgICAgICAjIFRoZXJlIGFyZSBmb3VyIGN1cnJl
bnRseSBzdXBwb3J0ZWQgdHlwZXMgb2YgdGVzdHM6IHRleHQsIGltYWdlLAogICAgICAgICAjIGlt
YWdlIGhhc2ggKGNoZWNrc3VtKSwgYW5kIHN0ZGVyciBvdXRwdXQuIFRoZSBmYWtlIG91dHB1dApA
QCAtMTcwLDEwICsxNzMsMTMgQEAgY2xhc3MgVGVzdERyaXZlcihiYXNlLkRyaXZlcik6CiAgICAg
ICAgICMgd2lsbCBhbGxvdyB1cyB0byBzZWUgaWYgYW55IHJlc3VsdHMgZ2V0IGNyb3NzZWQgYnkg
dGhlIHJlc3Qgb2YgdGhlCiAgICAgICAgICMgcHJvZ3JhbS4KICAgICAgICAgaWYgJ2ZhaWx1cmVz
JyBpbiB1cmk6CisgICAgICAgICAgICBpZiAna2V5Ym9hcmQnIGluIGJhc2VuYW1lOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgICAgICBpZiAnZXhjZXB0
aW9uJyBpbiBiYXNlbmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdleGNl
cHRpb24gZnJvbSAnICsgYmFzZW5hbWUpCisKICAgICAgICAgICAgIGNyYXNoID0gJ2NyYXNoJyBp
biBiYXNlbmFtZQogICAgICAgICAgICAgdGltZW91dCA9ICd0aW1lb3V0JyBpbiBiYXNlbmFtZQot
ICAgICAgICAgICAgaWYgJ2Vycm9yJyBpbiBiYXNlbmFtZToKLSAgICAgICAgICAgICAgICBlcnJv
ciA9IGJhc2VuYW1lICsgIl9lcnJvclxuIgogICAgICAgICAgICAgaWYgJ3RleHQnIGluIGJhc2Vu
YW1lOgogICAgICAgICAgICAgICAgIG91dHB1dCA9IGJhc2VuYW1lICsgJ19mYWlsZWQtdHh0XG4n
CiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggNzE2M2Ux
YmM1NjkxNWQ1NWEwYzQwNjlhZGU5ZGRmY2M5ZGUyYjYxMC4uYjY1NWM0Y2QzMzUyODhjOTE0NDA2
MWZmZGE0YmI1ZTRiMzc4OTcxOSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC03NSw3
ICs3NSw2IEBAIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgogZnJvbSB0ZXN0X3R5
cGVzIGltcG9ydCB0ZXh0X2RpZmYKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jh
c2UKIAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0
aXZlCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkgaW1wb3J0IHNpbXBsZWpzb24KIAogaW1wb3J0
IHBvcnQKQEAgLTEwNiwxMiArMTA1LDExIEBAIGNsYXNzIFRlc3RJbmZvOgogICAgICAgICBzZWxm
Ll9pbWFnZV9oYXNoID0gTm9uZQogCiAgICAgZGVmIF9yZWFkX2ltYWdlX2hhc2goc2VsZik6Ci0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2VsZi5fZXhwZWN0ZWRf
aGFzaF9wYXRoLCAiciIsICJhc2NpaSIpIGFzIGhhc2hfZmlsZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaGFzaF9maWxlLnJlYWQoKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAg
ICAgICAgIGlmIGVycm5vLkVOT0VOVCAhPSBlLmVycm5vOgotICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLl9leHBlY3RlZF9oYXNoX3BhdGgp
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNl
bGYuX2V4cGVjdGVkX2hhc2hfcGF0aCwgInIiLCAiYXNjaWkiKSBhcyBoYXNoX2ZpbGU6CisgICAg
ICAgICAgICByZXR1cm4gaGFzaF9maWxlLnJlYWQoKQogCiAgICAgZGVmIGltYWdlX2hhc2goc2Vs
Zik6CiAgICAgICAgICMgUmVhZCB0aGUgaW1hZ2VfaGFzaCBsYXppbHkgdG8gcmVkdWNlIHN0YXJ0
dXAgdGltZS4KQEAgLTI3MywzNSArMjcxLDQ4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
ICMgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90bHM9VHJ1ZSwgcG9ydD05
MzIzKQogCiAgICAgICAgICMgYSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMKLSAgICAgICAgc2Vs
Zi5fdGVzdF90eXBlcyA9IFtdCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSBbdGV4dF9kaWZm
LlRlc3RUZXh0RGlmZl0KKyAgICAgICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0czoKKyAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGltYWdlX2RpZmYuSW1hZ2VEaWZmKQogCiAgICAg
ICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAog
ICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkKICAgICAgICAgc2VsZi5fdGVzdF9maWxl
c19saXN0ID0gTm9uZQogICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgp
Ci0KICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQogCi0gICAgICAgICMgSGFjayBmb3Ig
ZHVtcGluZyB0aHJlYWRzIG9uIHRoZSBib3RzCi0gICAgICAgIHNlbGYuX2xhc3RfdGhyZWFkX2R1
bXAgPSBOb25lCi0KLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgX2xvZy5kZWJ1Zygi
Zmx1c2hpbmcgc3Rkb3V0IikKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIF9s
b2cuZGVidWcoImZsdXNoaW5nIHN0ZGVyciIpCi0gICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQot
ICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyBodHRwIHNlcnZlciIpCi0gICAgICAgIHNlbGYu
X3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCi0gICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIHdl
YnNvY2tldCBzZXJ2ZXIiKQotICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZl
cigpCi0KLSAgICBkZWYgZ2F0aGVyX2ZpbGVfcGF0aHMoc2VsZiwgcGF0aHMpOgorICAgIGRlZiBj
b2xsZWN0X3Rlc3RzKHNlbGYsIGFyZ3MsIGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzKToKICAgICAg
ICAgIiIiRmluZCBhbGwgdGhlIGZpbGVzIHRvIHRlc3QuCiAKICAgICAgICAgQXJnczoKLSAgICAg
ICAgICBwYXRoczogYSBsaXN0IG9mIGdsb2JzIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0
cy4iIiIKKyAgICAgICAgICBhcmdzOiBsaXN0IG9mIHRlc3QgYXJndW1lbnRzIGZyb20gdGhlIGNv
bW1hbmQgbGluZQorICAgICAgICAgIGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzOiBsaXN0IG9mIHVu
ZXhwZWN0ZWQgcmVzdWx0cyB0byByZXRlc3QsIGlmIGFueQorCisgICAgICAgICIiIgorICAgICAg
ICBuZXdfYXJncyA9IFtdCisgICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgICAgIGlm
IGFyZyBhbmQgYXJnICE9ICcnOgorICAgICAgICAgICAgICAgIG5ld19hcmdzLmFwcGVuZChhcmcp
CisgICAgICAgIHBhdGhzID0gbmV3X2FyZ3MKKyAgICAgICAgaWYgbm90IHBhdGhzOgorICAgICAg
ICAgICAgcGF0aHMgPSBbXQorICAgICAgICBwYXRocyArPSBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0
cworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnRlc3RfbGlzdDoKKyAgICAgICAgICAgIHBhdGhz
ICs9IHJlYWRfdGVzdF9maWxlcyhzZWxmLl9vcHRpb25zLnRlc3RfbGlzdCkKICAgICAgICAgc2Vs
Zi5fdGVzdF9maWxlcyA9IHRlc3RfZmlsZXMuZ2F0aGVyX3Rlc3RfZmlsZXMoc2VsZi5fcG9ydCwg
cGF0aHMpCiAKKyAgICBkZWYgbGludChzZWxmKToKKyAgICAgICAgIyBDcmVhdGluZyB0aGUgZXhw
ZWNhdGlvbnMgZm9yIGVhY2ggcGxhdGZvcm0vY29uZmlndXJhdGlvbiBwYWlyIGRvZXMKKyAgICAg
ICAgIyBhbGwgdGhlIHRlc3QgbGlzdCBwYXJzaW5nIGFuZCBlbnN1cmVzIGl0J3MgY29ycmVjdCBz
eW50YXggKGUuZy4gbm8KKyAgICAgICAgIyBkdXBlcykuCisgICAgICAgIGZvciBwbGF0Zm9ybV9u
YW1lIGluIHNlbGYuX3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgorICAgICAgICAgICAgc2Vs
Zi5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZT1UcnVlKQor
ICAgICAgICAgICAgc2VsZi5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1fbmFtZSwgaXNfZGVi
dWdfbW9kZT1GYWxzZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZSgiIikKKyAgICAgICAg
X2xvZy5pbmZvKCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBtZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2Vw
dGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJ0aGVuIHRoZSBsaW50IHN1Y2NlZWRlZC4iKQor
ICAgICAgICByZXR1cm4gMAorCiAgICAgZGVmIHBhcnNlX2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0
X3BsYXRmb3JtX25hbWUsIGlzX2RlYnVnX21vZGUpOgogICAgICAgICAiIiJQYXJzZSB0aGUgZXhw
ZWN0YXRpb25zIGZyb20gdGhlIHRlc3RfbGlzdCBmaWxlcyBhbmQgcmV0dXJuIGEgZGF0YQogICAg
ICAgICBzdHJ1Y3R1cmUgaG9sZGluZyB0aGVtLiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHRlc3Rf
bGlzdCBmaWxlcyBoYXZlCkBAIC0zMzYsOCArMzQ3LDggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9leHBlY3RlZCgiRm91bmQ6ICAlZCB0ZXN0cyIgJQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4oc2VsZi5fdGVzdF9maWxl
cykpKQogICAgICAgICBpZiBub3QgbnVtX2FsbF90ZXN0X2ZpbGVzOgotICAgICAgICAgICAgX2xv
Zy5jcml0aWNhbCgiTm8gdGVzdHMgdG8gcnVuLiIpCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQor
ICAgICAgICAgICAgX2xvZy5jcml0aWNhbCgnTm8gdGVzdHMgdG8gcnVuLicpCisgICAgICAgICAg
ICByZXR1cm4gTm9uZQogCiAgICAgICAgIHNraXBwZWQgPSBzZXQoKQogICAgICAgICBpZiBudW1f
YWxsX3Rlc3RfZmlsZXMgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5mb3JjZToKQEAgLTQ2OCwx
MCArNDc5LDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICByZXR1cm4gcmVzdWx0X3N1
bW1hcnkKIAotICAgIGRlZiBhZGRfdGVzdF90eXBlKHNlbGYsIHRlc3RfdHlwZSk6Ci0gICAgICAg
ICIiIkFkZCBhIFRlc3RUeXBlIHRvIHRoZSBUZXN0UnVubmVyLiIiIgotICAgICAgICBzZWxmLl90
ZXN0X3R5cGVzLmFwcGVuZCh0ZXN0X3R5cGUpCi0KICAgICBkZWYgX2dldF9kaXJfZm9yX3Rlc3Rf
ZmlsZShzZWxmLCB0ZXN0X2ZpbGUpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBoaWdoZXN0LWxl
dmVsIGRpcmVjdG9yeSBieSB3aGljaCB0byBzaGFyZCB0aGUgZ2l2ZW4KICAgICAgICAgdGVzdCBm
aWxlLiIiIgpAQCAtNzE0LDYgKzcyMSw0MyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAi
IiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGFuIEhUVFAgc2VydmVyLiIi
IgogICAgICAgICByZXR1cm4gc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5IVFRQX1NVQkRJUikK
IAorICAgIGRlZiBzZXRfdXBfcnVuKHNlbGYpOgorICAgICAgICAjIFRoaXMgbXVzdCBiZSBzdGFy
dGVkIGJlZm9yZSB3ZSBjaGVjayB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcywKKyAgICAgICAgIyBz
aW5jZSB0aGUgaGVscGVyIG1heSBkbyB0aGluZ3MgdG8gbWFrZSB0aGUgc2V0dXAgY29ycmVjdC4K
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4i
KQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2hlbHBlcigpCisKKyAgICAgICAgIyBDaGVjayB0
aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzICh0aGVtZXMsIGZvbnRzLCAuLi4pIGFyZSBjb3Jy
ZWN0LgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub2NoZWNrX3N5c19kZXBzOgorICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIkNoZWNraW5nIHN5c3RlbSBkZXBl
bmRlbmNpZXMgLi4uIikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0LmNoZWNrX3N5c19k
ZXBzKHNlbGYubmVlZHNfaHR0cCgpKToKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bf
aGVscGVyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMuY2xvYmJlcl9vbGRfcmVzdWx0czoKKyAgICAgICAgICAgIHNlbGYuX2Nsb2JiZXJf
b2xkX3Jlc3VsdHMoKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGlm
IGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KKyAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtl
X2RpcmVjdG9yeShzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgICAgIHNl
bGYuX3BvcnQuc2V0dXBfdGVzdF9ydW4oKQorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKKyAgICAgICAgcmVzdWx0X3N1bW1hcnkgPSBz
ZWxmLnByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dCgpCisgICAgICAgIGlmIG5vdCByZXN1
bHRfc3VtbWFyeToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgc2VsZi5u
ZWVkc19odHRwKCk6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3Rh
cnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0
cF9zZXJ2ZXIoKQorCisgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09D
S0VUX1NVQkRJUik6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3Rh
cnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFy
dF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3Vy
ZV9zZXJ2ZXIuU3RhcnQoKQorCisgICAgICAgIHJldHVybiByZXN1bHRfc3VtbWFyeQorCiAgICAg
ZGVmIHJ1bihzZWxmLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1biBhbGwgb3VyIHRl
c3RzIG9uIGFsbCBvdXIgdGVzdCBmaWxlcy4KIApAQCAtNzI2LDE5ICs3NzAsMTIgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgUmV0dXJuOgogICAgICAgICAgIFRoZSBudW1iZXIgb2YgdW5l
eHBlY3RlZCByZXN1bHRzICgwID09IHN1Y2Nlc3MpCiAgICAgICAgICIiIgotICAgICAgICBpZiBu
b3Qgc2VsZi5fdGVzdF9maWxlczoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIHN0YXJ0
X3RpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAgICAgIGlmIHNlbGYubmVlZHNfaHR0cCgpOgotICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIEhUVFAgc2VydmVy
IC4uLicpCisgICAgICAgICMgZ2F0aGVyX3Rlc3RfZmlsZXMoKSBtdXN0IGhhdmUgYmVlbiBjYWxs
ZWQgZmlyc3QgdG8gaW5pdGlhbGl6ZSB1cy4KKyAgICAgICAgIyBJZiB3ZSBkaWRuJ3QgZmluZCBh
bnkgZmlsZXMgdG8gdGVzdCwgd2UndmUgZXJyb3JlZCBvdXQgYWxyZWFkeSBpbgorICAgICAgICAj
IHByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dCgpLgorICAgICAgICBhc3NlcnQobGVuKHNl
bGYuX3Rlc3RfZmlsZXMpKQogCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2Vy
dmVyKCkKLQotICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9T
VUJESVIpOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5n
IFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vi
c29ja2V0X3NlcnZlcigpCi0gICAgICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2Vy
dmVyLlN0YXJ0KCkKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAKICAgICAgICAg
a2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIFwKICAg
ICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gKApAQCAtODAxLDYgKzgzOCwxOCBA
QCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAjIGJvdCByZWQgZm9yIHRob3NlLgogICAgICAg
ICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXQogCisgICAgZGVm
IGNsZWFuX3VwX3J1bihzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygiZmx1c2hpbmcgc3Rkb3V0
IikKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIF9sb2cuZGVidWcoImZsdXNo
aW5nIHN0ZGVyciIpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBfbG9nLmRl
YnVnKCJzdG9wcGluZyBodHRwIHNlcnZlciIpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRw
X3NlcnZlcigpCisgICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIHdlYnNvY2tldCBzZXJ2ZXIi
KQorICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgIF9s
b2cuZGVidWcoInN0b3BwaW5nIGhlbHBlciIpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxw
ZXIoKQorCiAgICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAg
ICAgICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmludCByZXN1bHRzIHdpdGggYW55IGNv
bXBsZXRlZCB0ZXN0cy4iIiIKICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTgxOSw2ICs4NjgsMjAg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJv
Z3Jlc3MocmVzdWx0X3N1bW1hcnksIHNlbGYuX3JldHJ5aW5nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCiAKKyAgICBkZWYg
X2Nsb2JiZXJfb2xkX3Jlc3VsdHMoc2VsZik6CisgICAgICAgICMgSnVzdCBjbG9iYmVyIHRoZSBh
Y3R1YWwgdGVzdCByZXN1bHRzIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBvdGhlcgorICAgICAgICAj
IGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBhcmUgZXhwbGljaXRseSB1c2VkIGZvciBj
cm9zcy1ydW4KKyAgICAgICAgIyB0cmFja2luZy4KKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF91cGRhdGUoIkNsb2JiZXJpbmcgb2xkIHJlc3VsdHMgaW4gJXMiICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAg
ICAgICAgbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCisg
ICAgICAgIHBvc3NpYmxlX2RpcnMgPSBvcy5saXN0ZGlyKGxheW91dF90ZXN0c19kaXIpCisgICAg
ICAgIGZvciBkaXJuYW1lIGluIHBvc3NpYmxlX2RpcnM6CisgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZGlyKG9zLnBhdGguam9pbihsYXlvdXRfdGVzdHNfZGlyLCBkaXJuYW1lKSk6CisgICAgICAg
ICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9lcnJvcnM9VHJ1
ZSkKKwogICAgIGRlZiBfZ2V0X2ZhaWx1cmVzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBpbmNsdWRl
X2NyYXNoZXMpOgogICAgICAgICAiIiJGaWx0ZXJzIGEgZGljdCBvZiByZXN1bHRzIGFuZCByZXR1
cm5zIG9ubHkgdGhlIGZhaWx1cmVzLgogCkBAIC05MTEsNiArOTc0LDMzIEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAKICAgICAgICAgX2xvZy5pbmZvKCJKU09OIGZpbGVzIHVwbG9hZGVkLiIpCiAKKyAg
ICBkZWYgX3ByaW50X2NvbmZpZyhzZWxmKToKKyAgICAgICAgIiIiUHJpbnRzIHRoZSBjb25maWd1
cmF0aW9uIGZvciB0aGUgdGVzdCBydW4uIiIiCisgICAgICAgIHAgPSBzZWxmLl9wcmludGVyCisg
ICAgICAgIHAucHJpbnRfY29uZmlnKCJVc2luZyBwb3J0ICclcyciICUgc2VsZi5fcG9ydC5uYW1l
KCkpCisgICAgICAgIHAucHJpbnRfY29uZmlnKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIg
JQorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
KQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZToKKyAgICAgICAgICAgIHAu
cHJpbnRfY29uZmlnKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuYmFzZWxpbmVfcGF0aCgpKQorICAgICAgICBwLnBy
aW50X2NvbmZpZygiVXNpbmcgJXMgYnVpbGQiICUgc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9u
KQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcC5w
cmludF9jb25maWcoIlBpeGVsIHRlc3RzIGVuYWJsZWQiKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcC5wcmludF9jb25maWcoIlBpeGVsIHRlc3RzIGRpc2FibGVkIikKKworICAgICAgICBw
LnByaW50X2NvbmZpZygiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVz
IiAlCisgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKSkK
KworICAgICAgICBpZiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDE6Cisg
ICAgICAgICAgICBwLnByaW50X2NvbmZpZygiUnVubmluZyBvbmUgJXMiICUgc2VsZi5fcG9ydC5k
cml2ZXJfbmFtZSgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcC5wcmludF9jb25maWco
IlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpKSkKKyAgICAgICAgcC5wcmludF9jb25maWco
IiIpCisKICAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCByZXN1
bHRfc3VtbWFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRfdHlwZSwgcmVzdWx0X3R5cGVfc3RyKToKICAgICAgICAgIiIiUHJpbnQgdGhlIG51bWJlciBv
ZiB0aGUgdGVzdHMgaW4gYSBnaXZlbiByZXN1bHQgY2xhc3MuCkBAIC0xMjgxLDI0ICsxMzcxLDU5
IEBAIGRlZiBydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5z
dGRlcnIsCiAgICAgUmV0dXJuczoKICAgICAgIHRoZSBudW1iZXIgb2YgdW5leHBlY3RlZCByZXN1
bHRzIHRoYXQgb2NjdXJyZWQsIG9yIC0xIGlmIHRoZXJlIGlzIGFuCiAgICAgICAgICAgZXJyb3Iu
Ci0gICAgIiIiCiAKLSAgICAjIENvbmZpZ3VyZSB0aGUgcHJpbnRpbmcgc3Vic3lzdGVtIGZvciBw
cmludGluZyBvdXRwdXQsIGxvZ2dpbmcgZGVidWcKLSAgICAjIGluZm8sIGFuZCB0cmFjaW5nIHRl
c3RzLgotCi0gICAgaWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgotICAgICAgICAjIEZJ
WE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50
ICsgMS4KLSAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBwb3J0X29iai5kZWZhdWx0
X2NoaWxkX3Byb2Nlc3NlcygpCisgICAgIiIiCisgICAgX3NldF91cF9kZXJpdmVkX29wdGlvbnMo
cG9ydF9vYmosIG9wdGlvbnMpCiAKLSAgICBwcmludGVyID0gcHJpbnRpbmcuUHJpbnRlcihwb3J0
X29iaiwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQ9cmVndWxhcl9vdXRwdXQsCi0gICAgICAgIGJ1
aWxkYm90X291dHB1dD1idWlsZGJvdF9vdXRwdXQsCi0gICAgICAgIGNoaWxkX3Byb2Nlc3Nlcz1p
bnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLAotICAgICAgICBpc19mdWxseV9wYXJhbGxlbD1v
cHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICBwcmludGVyID0gX2NvbmZp
Z3VyZV9wcmludGluZyhwb3J0X29iaiwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRib3Rfb3V0cHV0KQogICAgIGlmIG9wdGlv
bnMuaGVscF9wcmludGluZzoKICAgICAgICAgcHJpbnRlci5oZWxwX3ByaW50aW5nKCkKKyAgICAg
ICAgcHJpbnRlci5jbGVhbnVwKCkKICAgICAgICAgcmV0dXJuIDAKIAotICAgIGV4ZWN1dGl2ZSA9
IEV4ZWN1dGl2ZSgpCisgICAgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMgPSBfZ2F0aGVyX3VuZXhw
ZWN0ZWRfcmVzdWx0cyhvcHRpb25zKQorICAgIGlmIG9wdGlvbnMucHJpbnRfbGFzdF9mYWlsdXJl
czoKKyAgICAgICAgcHJpbnRlci53cml0ZSgiXG4iLmpvaW4obGFzdF91bmV4cGVjdGVkX3Jlc3Vs
dHMpICsgIlxuIikKKyAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKKyAgICAgICAgcmV0dXJuIDAK
KworICAgICMgV2Ugd3JhcCBhbnkgcGFydHMgb2YgdGhlIHJ1biB0aGF0IGFyZSBzbG93IG9yIGxp
a2VseSB0byByYWlzZSBleGNlcHRpb25zCisgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3Vy
ZSB0aGF0IHdlIGNsZWFuIHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCisgICAgbnVtX3Vu
ZXhwZWN0ZWRfcmVzdWx0cyA9IC0xCisgICAgdHJ5OgorICAgICAgICB0ZXN0X3J1bm5lciA9IFRl
c3RSdW5uZXIocG9ydF9vYmosIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIHRlc3RfcnVubmVy
Ll9wcmludF9jb25maWcoKQorCisgICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0
aW5nIHRlc3RzIC4uLiIpCisgICAgICAgIHRlc3RfcnVubmVyLmNvbGxlY3RfdGVzdHMoYXJncywg
bGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUo
IlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCisgICAgICAgIGlmIG9wdGlvbnMubGludF90ZXN0
X2ZpbGVzOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RfcnVubmVyLmxpbnQoKQorICAgICAgICB0
ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocG9ydF9vYmoudGVzdF9wbGF0Zm9ybV9uYW1l
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbmZpZ3Vy
YXRpb24gPT0gJ0RlYnVnJykKKworICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tp
bmcgYnVpbGQgLi4uIikKKyAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2J1aWxkKHRlc3Rf
cnVubmVyLm5lZWRzX2h0dHAoKSk6CisgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBy
ZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnNldF91cF9ydW4oKQorICAgICAgICBpZiByZXN1
bHRfc3VtbWFyeToKKyAgICAgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1
bm5lci5ydW4ocmVzdWx0X3N1bW1hcnkpCisgICAgICAgICAgICB0ZXN0X3J1bm5lci5jbGVhbl91
cF9ydW4oKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQg
c3RhdHVzOiAlZCIgJQorICAgICAgICAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1
bHRzKQorICAgIGZpbmFsbHk6CisgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCisKKyAgICByZXR1
cm4gbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cworCisKK2RlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9u
cyhwb3J0X29iaiwgb3B0aW9ucyk6CisgICAgaWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2Vz
OgorICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2Yg
dXNpbmcgY3B1X2NvdW50ICsgMS4KKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBw
b3J0X29iai5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpCiAKICAgICBpZiBub3Qgb3B0aW9ucy5j
b25maWd1cmF0aW9uOgogICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSBwb3J0X29iai5k
ZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQpAQCAtMTMxOCwzMCArMTQ0Myw2IEBAIGRlZiBydW4ocG9y
dF9vYmosIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgICAg
ICMgRGVidWcgb3IgUmVsZWFzZS4KICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSA9
IHBvcnRfb2JqLnJlc3VsdHNfZGlyZWN0b3J5KCkKIAotICAgIGxhc3RfdW5leHBlY3RlZF9yZXN1
bHRzID0gW10KLSAgICBpZiBvcHRpb25zLnByaW50X2xhc3RfZmFpbHVyZXMgb3Igb3B0aW9ucy5y
ZXRlc3RfbGFzdF9mYWlsdXJlczoKLSAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzX2ZpbGVuYW1l
ID0gb3MucGF0aC5qb2luKAotICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCAi
dW5leHBlY3RlZF9yZXN1bHRzLmpzb24iKQotICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHVuZXhw
ZWN0ZWRfcmVzdWx0c19maWxlbmFtZSwgInIiLCAidXRmLTgiKSBhcyBmaWxlOgotICAgICAgICAg
ICAgcmVzdWx0cyA9IHNpbXBsZWpzb24ubG9hZChmaWxlKQotICAgICAgICBsYXN0X3VuZXhwZWN0
ZWRfcmVzdWx0cyA9IHJlc3VsdHNbJ3Rlc3RzJ10ua2V5cygpCi0gICAgICAgIGlmIG9wdGlvbnMu
cHJpbnRfbGFzdF9mYWlsdXJlczoKLSAgICAgICAgICAgIHByaW50ZXIud3JpdGUoIlxuIi5qb2lu
KGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzKSArICJcbiIpCi0gICAgICAgICAgICByZXR1cm4gMAot
Ci0gICAgaWYgb3B0aW9ucy5jbG9iYmVyX29sZF9yZXN1bHRzOgotICAgICAgICAjIEp1c3QgY2xv
YmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIK
LSAgICAgICAgIyBmaWxlcyBpbiB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgYXJlIGV4cGxpY2l0bHkg
dXNlZCBmb3IgY3Jvc3MtcnVuCi0gICAgICAgICMgdHJhY2tpbmcuCi0gICAgICAgIHByaW50ZXIu
cHJpbnRfdXBkYXRlKCJDbG9iYmVyaW5nIG9sZCByZXN1bHRzIGluICVzIiAlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCi0gICAgICAgIGxh
eW91dF90ZXN0c19kaXIgPSBwb3J0X29iai5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgcG9z
c2libGVfZGlycyA9IG9zLmxpc3RkaXIobGF5b3V0X3Rlc3RzX2RpcikKLSAgICAgICAgZm9yIGRp
cm5hbWUgaW4gcG9zc2libGVfZGlyczoKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3Mu
cGF0aC5qb2luKGxheW91dF90ZXN0c19kaXIsIGRpcm5hbWUpKToKLSAgICAgICAgICAgICAgICBz
aHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCBkaXJu
YW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9lcnJvcnM9VHJ1ZSkK
LQogICAgIGlmIG5vdCBvcHRpb25zLnRpbWVfb3V0X21zOgogICAgICAgICBpZiBvcHRpb25zLmNv
bmZpZ3VyYXRpb24gPT0gIkRlYnVnIjoKICAgICAgICAgICAgIG9wdGlvbnMudGltZV9vdXRfbXMg
PSBzdHIoMiAqIFRlc3RSdW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCkBAIC0xMzQ5LDky
ICsxNDUwLDI0IEBAIGRlZiBydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0
cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0X21zID0gc3RyKFRl
c3RSdW5uZXIuREVGQVVMVF9URVNUX1RJTUVPVVRfTVMpCiAKICAgICBvcHRpb25zLnNsb3dfdGlt
ZV9vdXRfbXMgPSBzdHIoNSAqIGludChvcHRpb25zLnRpbWVfb3V0X21zKSkKLSAgICBwcmludGVy
LnByaW50X2NvbmZpZygiUmVndWxhciB0aW1lb3V0OiAlcywgc2xvdyB0ZXN0IHRpbWVvdXQ6ICVz
IiAlCi0gICAgICAgICAgICAgICAgICAgKG9wdGlvbnMudGltZV9vdXRfbXMsIG9wdGlvbnMuc2xv
d190aW1lX291dF9tcykpCi0KLSAgICBpZiBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09
IDE6Ci0gICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBwb3J0
X29iai5kcml2ZXJfbmFtZSgpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ZXIucHJpbnRfY29u
ZmlnKCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJSAoCi0gICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLCBwb3J0X29iai5kcml2ZXJfbmFtZSgpKSkKLQot
ICAgICMgSW5jbHVkZSBhbGwgdGVzdHMgaWYgbm9uZSBhcmUgc3BlY2lmaWVkLgotICAgIG5ld19h
cmdzID0gW10KLSAgICBmb3IgYXJnIGluIGFyZ3M6Ci0gICAgICAgIGlmIGFyZyBhbmQgYXJnICE9
ICcnOgotICAgICAgICAgICAgbmV3X2FyZ3MuYXBwZW5kKGFyZykKLQotICAgIHBhdGhzID0gbmV3
X2FyZ3MKLSAgICBpZiBub3QgcGF0aHM6Ci0gICAgICAgIHBhdGhzID0gW10KLSAgICBwYXRocyAr
PSBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cwotICAgIGlmIG9wdGlvbnMudGVzdF9saXN0OgotICAg
ICAgICBwYXRocyArPSByZWFkX3Rlc3RfZmlsZXMob3B0aW9ucy50ZXN0X2xpc3QpCi0KLSAgICAj
IENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qu
Ci0gICAgcG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSkKLSAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQot
Ci0gICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25zLCBwcmludGVy
KQotICAgIHRlc3RfcnVubmVyLmdhdGhlcl9maWxlX3BhdGhzKHBhdGhzKQotCi0gICAgaWYgb3B0
aW9ucy5saW50X3Rlc3RfZmlsZXM6Ci0gICAgICAgICMgQ3JlYXRpbmcgdGhlIGV4cGVjYXRpb25z
IGZvciBlYWNoIHBsYXRmb3JtL2NvbmZpZ3VyYXRpb24gcGFpciBkb2VzCi0gICAgICAgICMgYWxs
IHRoZSB0ZXN0IGxpc3QgcGFyc2luZyBhbmQgZW5zdXJlcyBpdCdzIGNvcnJlY3Qgc3ludGF4IChl
LmcuIG5vCi0gICAgICAgICMgZHVwZXMpLgotICAgICAgICBmb3IgcGxhdGZvcm1fbmFtZSBpbiBw
b3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWVzKCk6Ci0gICAgICAgICAgICB0ZXN0X3J1bm5lci5w
YXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZT1UcnVlKQotICAg
ICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBsYXRmb3JtX25hbWUsIGlz
X2RlYnVnX21vZGU9RmFsc2UpCi0gICAgICAgIHByaW50ZXIud3JpdGUoIiIpCi0gICAgICAgIF9s
b2cuaW5mbygiSWYgdGhlcmUgYXJlIG5vIGZhaWwgbWVzc2FnZXMsIGVycm9ycyBvciBleGNlcHRp
b25zLCAiCi0gICAgICAgICAgICAgICAgICAidGhlbiB0aGUgbGludCBzdWNjZWVkZWQuIikKLSAg
ICAgICAgcmV0dXJuIDAKLQotICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyBwb3J0ICcl
cyciICUgcG9ydF9vYmoubmFtZSgpKQotICAgIHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5n
IHRlc3QgcmVzdWx0cyBpbiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpCi0gICAgaWYgb3B0aW9ucy5uZXdfYmFzZWxpbmU6Ci0gICAgICAg
IHByaW50ZXIucHJpbnRfY29uZmlnKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9vYmouYmFzZWxpbmVfcGF0aCgpKQotICAg
IHByaW50ZXIucHJpbnRfY29uZmlnKCJVc2luZyAlcyBidWlsZCIgJSBvcHRpb25zLmNvbmZpZ3Vy
YXRpb24pCi0gICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgcHJpbnRlci5wcmlu
dF9jb25maWcoIlBpeGVsIHRlc3RzIGVuYWJsZWQiKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50
ZXIucHJpbnRfY29uZmlnKCJQaXhlbCB0ZXN0cyBkaXNhYmxlZCIpCi0gICAgcHJpbnRlci5wcmlu
dF9jb25maWcoIiIpCiAKLSAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiUGFyc2luZyBleHBlY3Rh
dGlvbnMgLi4uIikKLSAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocG9ydF9vYmou
dGVzdF9wbGF0Zm9ybV9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMuY29uZmlndXJhdGlvbiA9PSAnRGVidWcnKQogCi0gICAgcHJpbnRlci5wcmludF91
cGRhdGUoIkNoZWNraW5nIGJ1aWxkIC4uLiIpCi0gICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2J1
aWxkKHRlc3RfcnVubmVyLm5lZWRzX2h0dHAoKSk6Ci0gICAgICAgIHJldHVybiAtMQotCi0gICAg
cHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIGhlbHBlciAuLi4iKQotICAgIHBvcnRfb2Jq
LnN0YXJ0X2hlbHBlcigpCi0KLSAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBlbmRlbmNp
ZXMgKHRoZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCi0gICAgaWYgbm90IG9wdGlvbnMu
bm9jaGVja19zeXNfZGVwczoKLSAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNoZWNraW5n
IHN5c3RlbSBkZXBlbmRlbmNpZXMgLi4uIikKLSAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNr
X3N5c19kZXBzKHRlc3RfcnVubmVyLm5lZWRzX2h0dHAoKSk6Ci0gICAgICAgICAgICByZXR1cm4g
LTEKLQotICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKLSAg
ICByZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291
dHB1dCgpCi0KLSAgICBwb3J0X29iai5zZXR1cF90ZXN0X3J1bigpCi0KLSAgICB0ZXN0X3J1bm5l
ci5hZGRfdGVzdF90eXBlKHRleHRfZGlmZi5UZXN0VGV4dERpZmYpCi0gICAgaWYgb3B0aW9ucy5w
aXhlbF90ZXN0czoKLSAgICAgICAgdGVzdF9ydW5uZXIuYWRkX3Rlc3RfdHlwZShpbWFnZV9kaWZm
LkltYWdlRGlmZikKLQotICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1bm5lci5y
dW4ocmVzdWx0X3N1bW1hcnkpCitkZWYgX2NvbmZpZ3VyZV9wcmludGluZyhwb3J0X29iaiwgb3B0
aW9ucywgcmVndWxhcl9vdXRwdXQsIGJ1aWxkYm90X291dHB1dCk6CisgICAgcmV0dXJuIHByaW50
aW5nLlByaW50ZXIocG9ydF9vYmosIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0PXJlZ3VsYXJfb3V0
cHV0LAorICAgICAgICBidWlsZGJvdF9vdXRwdXQ9YnVpbGRib3Rfb3V0cHV0LAorICAgICAgICBj
aGlsZF9wcm9jZXNzZXM9aW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwKKyAgICAgICAgaXNf
ZnVsbHlfcGFyYWxsZWw9b3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCiAKLSAg
ICBwb3J0X29iai5zdG9wX2hlbHBlcigpCiAKLSAgICBfbG9nLmRlYnVnKCJFeGl0IHN0YXR1czog
JWQiICUgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKLSAgICByZXR1cm4gbnVtX3VuZXhwZWN0ZWRf
cmVzdWx0cworZGVmIF9nYXRoZXJfdW5leHBlY3RlZF9yZXN1bHRzKG9wdGlvbnMpOgorICAgIGxh
c3RfdW5leHBlY3RlZF9yZXN1bHRzID0gW10KKyAgICBpZiBvcHRpb25zLnByaW50X2xhc3RfZmFp
bHVyZXMgb3Igb3B0aW9ucy5yZXRlc3RfbGFzdF9mYWlsdXJlczoKKyAgICAgICAgdW5leHBlY3Rl
ZF9yZXN1bHRzX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKAorICAgICAgICBvcHRpb25zLnJlc3Vs
dHNfZGlyZWN0b3J5LCAidW5leHBlY3RlZF9yZXN1bHRzLmpzb24iKQorICAgICAgICB3aXRoIGNv
ZGVjcy5vcGVuKHVuZXhwZWN0ZWRfcmVzdWx0c19maWxlbmFtZSwgInIiLCAidXRmLTgiKSBhcyBm
aWxlOgorICAgICAgICAgICAgcmVzdWx0cyA9IHNpbXBsZWpzb24ubG9hZChmaWxlKQorICAgICAg
ICBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cyA9IHJlc3VsdHNbJ3Rlc3RzJ10ua2V5cygpCisgICAg
cmV0dXJuIGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzCiAKIAogZGVmIF9jb21wYXRfc2hpbV9jYWxs
YmFjayhvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgpAQCAtMTU5Nyw3ICsxNjMwLDcg
QEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgIyAgIFJlc3RhcnQgRHVtcFJl
bmRlclRyZWUgZXZlcnkgbiB0ZXN0cyAoZGVmYXVsdDogMTAwMCkKICAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0tYmF0Y2gtc2l6ZSIsCiAgICAgICAgICAgICBoZWxwPSgiUnVuIGEgdGhl
IHRlc3RzIGluIGJhdGNoZXMgKG4pLCBhZnRlciBldmVyeSBuIHRlc3RzLCAiCi0gICAgICAgICAg
ICAgICAgICAiRHVtcFJlbmRlclRyZWUgaXMgcmVsYXVuY2hlZC4iKSksCisgICAgICAgICAgICAg
ICAgICAiRHVtcFJlbmRlclRyZWUgaXMgcmVsYXVuY2hlZC4iKSwgdHlwZT0iaW50IiwgZGVmYXVs
dD0wKSwKICAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBjYWxscyAtLXJ1bi1zaW5nbHk6
IC0xfC0tc2luZ2x5CiAgICAgICAgICMgSXNvbGF0ZSBlYWNoIHRlc3QgY2FzZSBydW4gKGltcGxp
ZXMgLS1udGhseSAxIC0tdmVyYm9zZSkKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
cnVuLXNpbmdseSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQppbmRleCAzYTNiMTRlNWNiZTU0ZDkzZDJjN2Q3YzIzNDNiZjI2
ZDY5NDMzNGIzLi40Y2JmZGZjZGY4YjlmZDVhMzM4ZWYxNDg5NWI4N2I1ODFkNWM5ODk4IDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQxLDYgKzQxLDcg
QEAgaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29t
bW9uIGltcG9ydCBhcnJheV9zdHJlYW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBv
cnQgb3V0cHV0Y2FwdHVyZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQKQEAgLTQ4LDc1ICs0OSwxMzkgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIHdl
YmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogCiAKLWRlZiBwYXNzaW5nX3J1bihh
cmdzLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwKK2RlZiBwYXNzaW5nX3J1
bihhcmdzPVtdLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwKICAgICAgICAg
ICAgICAgICB0ZXN0c19pbmNsdWRlZD1GYWxzZSk6Ci0gICAgYXJncy5leHRlbmQoWyctLXByaW50
JywgJ25vdGhpbmcnXSkKKyAgICBuZXdfYXJncyA9IFsnLS1wcmludCcsICdub3RoaW5nJ10KKyAg
ICBpZiBub3QgJy0tcGxhdGZvcm0nIGluIGFyZ3M6CisgICAgICAgIG5ld19hcmdzLmV4dGVuZChb
Jy0tcGxhdGZvcm0nLCAndGVzdCddKQorICAgIGlmIG5vdCByZWNvcmRfcmVzdWx0czoKKyAgICAg
ICAgbmV3X2FyZ3MuYXBwZW5kKCctLW5vLXJlY29yZC1yZXN1bHRzJykKKyAgICBuZXdfYXJncy5l
eHRlbmQoYXJncykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAgICAgICMgV2UgdXNl
IHRoZSBnbG9iIHRvIHRlc3QgdGhhdCBnbG9iYmluZyB3b3Jrcy4KLSAgICAgICAgYXJncy5leHRl
bmQoWydwYXNzZXMnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQotICAgIGlmIG5vdCByZWNvcmRf
cmVzdWx0czoKLSAgICAgICAgYXJncy5hcHBlbmQoJy0tbm8tcmVjb3JkLXJlc3VsdHMnKQotICAg
IG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJncykKKyAgICAg
ICAgbmV3X2FyZ3MuZXh0ZW5kKFsncGFzc2VzJywgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKKyAg
ICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhuZXdf
YXJncykKICAgICBpZiBwb3J0X29iaiBpcyBOb25lOgogICAgICAgICBwb3J0X29iaiA9IHBvcnQu
Z2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCi0gICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0
cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MpCisgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0
cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9hcmdzKQogICAgIHJldHVybiByZXMgPT0g
MAogCiAKLWRlZiBsb2dnaW5nX3J1bihhcmdzLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSk6Ci0gICAg
YXJncy5leHRlbmQoWyctLW5vLXJlY29yZC1yZXN1bHRzJ10pCitkZWYgbG9nZ2luZ19ydW4oYXJn
cz1bXSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UpOgorICAgIG5ld19hcmdzID0gWyctLW5vLXJlY29y
ZC1yZXN1bHRzJ10KKyAgICBpZiBub3QgJy0tcGxhdGZvcm0nIGluIGFyZ3M6CisgICAgICAgIG5l
d19hcmdzLmV4dGVuZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQorICAgIGlmIGFyZ3M6CisgICAg
ICAgIG5ld19hcmdzLmV4dGVuZChhcmdzKQogICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKLSAg
ICAgICAgYXJncy5leHRlbmQoWydwYXNzZXMnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQotICAg
IG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJncykKKyAgICAg
ICAgbmV3X2FyZ3MuZXh0ZW5kKFsncGFzc2VzJywgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKKyAg
ICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhuZXdf
YXJncykKICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMp
CiAgICAgYnVpbGRib3Rfb3V0cHV0ID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKICAgICBy
ZWd1bGFyX291dHB1dCA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCi0gICAgcmVzID0gcnVu
X3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MsCisgICAgcmVzID0gcnVu
X3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9hcmdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dD1idWlsZGJvdF9vdXRwdXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9vdXRwdXQ9cmVndWxhcl9v
dXRwdXQpCiAgICAgcmV0dXJuIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQp
CiAKIAogY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2Zh
c3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZv
cm0nLCAndGVzdCddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1w
bGF0Zm9ybScsICd0ZXN0JywgJy0tcnVuLXNpbmdseSddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICd0ZXN0JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1U
cnVlKSkKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHBhc3NpbmdfcnVuKCkpCiAKLSAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2ZhaWx1cmVzKHNlbGYp
OgotICAgICAgICAjIFJ1biB0ZXN0cyBpbmNsdWRpbmcgdGhlIHVuZXhwZWN0ZWQgZmFpbHVyZXMu
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ3Rl
c3QnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlKSkKKyAg
ICBkZWYgdGVzdF9iYXRjaF9zaXplKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgIyBv
ZiB0ZXN0cyBydW4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1iYXRj
aC1zaXplJywgJzInXSkpCiAKLSAgICBkZWYgdGVzdF9vbmVfY2hpbGRfcHJvY2VzcyhzZWxmKToK
KyAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNzXzEoc2VsZik6CiAgICAgICAgIChyZXMsIGJ1aWxk
Ym90X291dHB1dCwgcmVndWxhcl9vdXRwdXQpID0gbG9nZ2luZ19ydW4oCi0gICAgICAgICAgICAg
WyctLXBsYXRmb3JtJywgJ3Rlc3QnLCAnLS1wcmludCcsICdjb25maWcnLCAnLS1jaGlsZC1wcm9j
ZXNzZXMnLAotICAgICAgICAgICAgICAnMSddKQorICAgICAgICAgICAgIFsnLS1wcmludCcsICdj
b25maWcnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMSddKQogICAgICAgICBzZWxmLmFzc2VydFRy
dWUoJ1J1bm5pbmcgb25lIER1bXBSZW5kZXJUcmVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiByZWd1bGFyX291dHB1dC5nZXQoKSkKIAotICAgIGRlZiB0ZXN0X3R3b19jaGlsZF9wcm9j
ZXNzZXMoc2VsZik6CisgICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vzc2VzXzIoc2VsZik6CiAgICAg
ICAgIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQpID0gbG9nZ2luZ19ydW4o
Ci0gICAgICAgICAgICAgWyctLXBsYXRmb3JtJywgJ3Rlc3QnLCAnLS1wcmludCcsICdjb25maWcn
LCAnLS1jaGlsZC1wcm9jZXNzZXMnLAotICAgICAgICAgICAgICAnMiddKQorICAgICAgICAgICAg
IFsnLS1wcmludCcsICdjb25maWcnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMiddKQogICAgICAg
ICBzZWxmLmFzc2VydFRydWUoJ1J1bm5pbmcgMiBEdW1wUmVuZGVyVHJlZXMgaW4gcGFyYWxsZWxc
bicKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHJlZ3VsYXJfb3V0cHV0LmdldCgpKQogCisg
ICAgZGVmIHRlc3RfZXhjZXB0aW9uX3JhaXNlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCisgICAgICAgICAgICBbJ2ZhaWx1cmVzL2V4
cGVjdGVkL2V4Y2VwdGlvbi5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCisKKyAgICBkZWYg
dGVzdF9mdWxsX3Jlc3VsdHNfaHRtbChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogdmVyaWZ5IGh0
bWw/CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tZnVsbC1yZXN1bHRz
LWh0bWwnXSkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3ByaW50aW5nKHNlbGYpOgorICAgICAgICBy
ZXMsIG91dCwgZXJyID0gbG9nZ2luZ19ydW4oWyctLWhlbHAtcHJpbnRpbmcnXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1w
dHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKKworICAgIGRlZiB0
ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBh
bHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0IG1hcmtlZCBhcyBTS0lQIGlmCisgICAgICAgICMgeW91
IHNwZWNpZnkgaXQgZXhwbGljaXRseS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9h
cmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVuLAorICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3Rl
ZC9rZXlib2FyZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCisKICAgICBkZWYgdGVzdF9s
YXN0X3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgIHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICd0
ZXN0J10sIHJlY29yZF9yZXN1bHRzPVRydWUpCisgICAgICAgIHBhc3NpbmdfcnVuKFsnLS1jbG9i
YmVyLW9sZC1yZXN1bHRzJ10sIHJlY29yZF9yZXN1bHRzPVRydWUpCiAgICAgICAgIChyZXMsIGJ1
aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQpID0gbG9nZ2luZ19ydW4oCi0gICAgICAgICAg
ICBbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctLXByaW50LWxhc3QtZmFpbHVyZXMnXSkKKyAgICAg
ICAgICAgIFsnLS1wcmludC1sYXN0LWZhaWx1cmVzJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmVndWxhcl9vdXRwdXQuZ2V0KCksIFsnXG5cbiddKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGJ1aWxkYm90X291dHB1dC5nZXQoKSwgW10pCiAKKyAgICBkZWYgdGVzdF9saW50X3Rlc3Rf
ZmlsZXMoc2VsZik6CisgICAgICAgICMgRklYTUU6ICBhZGQgZXJyb3JzPworICAgICAgICByZXMs
IG91dCwgZXJyID0gbG9nZ2luZ19ydW4oWyctLWxpbnQtdGVzdC1maWxlcyddLCB0ZXN0c19pbmNs
dWRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsn
bGludCBzdWNjZWVkZWQnIGluIG1zZyBmb3IgbXNnIGluIGVyci5nZXQoKV0pKQorCiAgICAgZGVm
IHRlc3Rfbm9fdGVzdHNfZm91bmQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5
c3RlbUV4aXQsIGxvZ2dpbmdfcnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tcGxh
dGZvcm0nLCAndGVzdCcsICdyZXNvdXJjZXMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhp
dCwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1wbGF0Zm9ybScs
ICd0ZXN0JywgJ2ZvbyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRl
ZD1UcnVlKQorICAgICAgICByZXMsIG91dCwgZXJyID0gbG9nZ2luZ19ydW4oWydyZXNvdXJjZXMn
XSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIC0x
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBlcnIuZ2V0KCkpCisKKyAgICBkZWYgdGVz
dF9ub190ZXN0c19mb3VuZF8yKHNlbGYpOgorICAgICAgICByZXMsIG91dCwgZXJyID0gbG9nZ2lu
Z19ydW4oWydmb28nXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBlcnIuZ2V0KCkpCisK
KyAgICBkZWYgdGVzdF9yYW5kb21pemVfb3JkZXIoc2VsZik6CisgICAgICAgICMgRklYTUU6IHZl
cmlmeSBvcmRlciB3YXMgc2h1ZmZsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1yYW5kb21pemUtb3JkZXInXSkpCisKKyAgICBkZWYgdGVzdF9ydW5fY2h1bmsoc2Vs
Zik6CisgICAgICAgICMgRklYTUU6IHZlcmlmeSAjIG9mIHRlc3RzIHJ1bgorICAgICAgICBzZWxm
LmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXJ1bi1jaHVuaycsICcxOjQnXSkpCisKKyAgICBk
ZWYgdGVzdF9ydW5fZm9yY2Uoc2VsZik6CisgICAgICAgICMgVGhpcyByYWlzZXMgYW4gZXhjZXB0
aW9uIGJlY2F1c2Ugd2UgcnVuCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9u
Lmh0bWwsIHdoaWNoIGlzIG5vcm1hbGx5IFNLSVBwZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLCBbJy0tZm9yY2UnXSkKKworICAgIGRlZiB0ZXN0
X3J1bl9wYXJ0KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgIyBvZiB0ZXN0cyBydW4K
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1ydW4tcGFydCcsICcxOjIn
XSkpCisKKyAgICBkZWYgdGVzdF9ydW5fc2luZ2x5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocGFzc2luZ19ydW4oWyctLXJ1bi1zaW5nbHknXSkpCisKKyAgICBkZWYgdGVzdF9zaW5n
bGVfZmlsZShzZWxmKToKKyAgICAgICAgIyBGSVhNRTogdmVyaWZ5ICMgb2YgdGVzdHMgcnVuCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwg
dGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2ZhaWx1cmVz
KHNlbGYpOgorICAgICAgICAjIFJ1biB0ZXN0cyBpbmNsdWRpbmcgdGhlIHVuZXhwZWN0ZWQgZmFp
bHVyZXMuCisgICAgICAgIHJlcywgb3V0LCBlcnIgPSBsb2dnaW5nX3J1bih0ZXN0c19pbmNsdWRl
ZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1w
dHkoKSkKKwogCiBkZWYgX21vY2tlZF9vcGVuKG9yaWdpbmFsX29wZW4sIGZpbGVfbGlzdCk6CiAg
ICAgZGVmIF93cmFwcGVyKG5hbWUsIG1vZGUsIGVuY29kaW5nKToKQEAgLTE0NCw3ICsyMDksNyBA
QCBjbGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAj
IGlzIG1pc3NpbmcsIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyBsb2NhdGlvbi4KICAgICAg
ICAgICAgIGZpbGVfbGlzdCA9IFtdCiAgICAgICAgICAgICBjb2RlY3Mub3BlbiA9IF9tb2NrZWRf
b3BlbihvcmlnaW5hbF9vcGVuLCBmaWxlX2xpc3QpCi0gICAgICAgICAgICBwYXNzaW5nX3J1bihb
Jy0tcGxhdGZvcm0nLCAndGVzdCcsICctLXBpeGVsLXRlc3RzJywKKyAgICAgICAgICAgIHBhc3Np
bmdfcnVuKFsnLS1waXhlbC10ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVz
ZXQtcmVzdWx0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1s
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19p
bWFnZS5odG1sJ10sCkBAIC0xNjUsNyArMjMwLDcgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgIyBpcyBtc3NpbmcsIHRoZW4gY3JlYXRlIGEg
bmV3IGV4cGVjdGF0aW9uIGluIHRoZSBwbGF0Zm9ybSBkaXIuCiAgICAgICAgICAgICBmaWxlX2xp
c3QgPSBbXQogICAgICAgICAgICAgY29kZWNzLm9wZW4gPSBfbW9ja2VkX29wZW4ob3JpZ2luYWxf
b3BlbiwgZmlsZV9saXN0KQotICAgICAgICAgICAgcGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywg
J3Rlc3QnLCAnLS1waXhlbC10ZXN0cycsCisgICAgICAgICAgICBwYXNzaW5nX3J1bihbJy0tcGl4
ZWwtdGVzdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICctLW5ldy1iYXNlbGluZScsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1sJywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCkBA
IC0yMDgsNiArMjczLDcgQEAgY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKICAgICAgICAgICAgIHJldHVybgog
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAndGVz
dCddKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScs
ICdkcnlydW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0
bWwnXSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0n
LCAnZHJ5cnVuLW1hYycsCkBAIC0yMjMsNiArMjg5LDExIEBAIGNsYXNzIFRlc3RUaHJlYWQoZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgc2VsZi5fdGlt
ZW91dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKIAogICAgIGRlZiBydW4oc2VsZik6CisgICAgICAg
IHNlbGYuX2NvdmVyZWRfcnVuKCkKKworICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6CisgICAg
ICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEg
YnVnCisgICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQv
Y292ZXJhZ2VweS9pc3N1ZS84NS4KICAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdl
dF9pZGVudCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUu
cHV0KCcnKQpAQCAtMjg0LDggKzM1NSwxMSBAQCBjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNo
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcnJ1
cHRlZCkKIAogICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIG9jID0gb3V0cHV0
Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQogICAg
ICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQogICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQorICAgICAgICBvYy5yZXN0b3JlX291dHB1
dCgpCiAKICAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29uZV90aHJlYWQsICdFeGNlcHRpb24nKQpAQCAt
MjkzLDYgKzM2Nyw4IEBAIGNsYXNzIFdhaXRGb3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogY2xhc3MgU3RhbmRhbG9uZUZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNlbGYpOgorICAgICAgICBv
YyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0
cHV0KCkKICAgICAgICAgbG9nZ2VyID0gcnVuX3dlYmtpdF90ZXN0cy5fbG9nCiAgICAgICAgIGFz
dHJlYW0gPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQogICAgICAgICBoYW5kbGVyID0gVGVz
dEhhbmRsZXIoYXN0cmVhbSkKQEAgLTMxMCw2ICszODYsNyBAQCBjbGFzcyBTdGFuZGFsb25lRnVu
Y3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShhc3RyZWFtLmVtcHR5KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhyZWFk
LmlzQWxpdmUoKSkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAgICAgZGVmIHRlc3Rf
ZmluZF90aHJlYWRfc3RhY2soc2VsZik6CiAgICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3VycmVu
dF9mcmFtZXMoKS5pdGVtcygpWzBdCg==
</data>
<flag name="review"
          id="55288"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>