<?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>51091</bug_id>
          
          <creation_ts>2010-12-14 20:32:14 -0800</creation_ts>
          <short_desc>[NRWT] Rewrite current test_types/* classes completely.</short_desc>
          <delta_ts>2011-02-28 20:18:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          <dependson>53004</dependson>
    
    <dependson>53063</dependson>
    
    <dependson>53071</dependson>
    
    <dependson>53908</dependson>
    
    <dependson>55123</dependson>
          <blocked>36065</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>koz</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>322473</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-12-14 20:32:14 -0800</bug_when>
    <thetext>As I and Dirk disscussed in chat, it might be better to rewrite current test_types/* classes completely.

The reasons are:

1) All of the test_types/* classes are pretty kludgy at this point.
   They try to do too many things in test_type.compare_output() method, like
    - regenerate baselines.
    - copy the output around, etc..

2) The current class hieralchy does&apos;t give us significant benefits at this point.
   There are only two subclasses, TextDiff and ImageDiff. It is difficult to add new test type because compare_output() method has many side effects and doesn&apos;t have clear responsibility what subclass should implement in this method.

I think more simple approach is better than the current test_type/* approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334164</commentid>
    <comment_count>1</comment_count>
      <attachid>78904</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-14 01:10:06 -0800</bug_when>
    <thetext>Created attachment 78904
patch-in-progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334165</commentid>
    <comment_count>2</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-14 01:10:56 -0800</bug_when>
    <thetext>Hi Dirk and other reviews,

I posted a patch for early reviews.
Although the patch itself is incomplete, I&apos;d like to get early feedbacks to know whether you guys like this approach or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335624</commentid>
    <comment_count>3</comment_count>
      <attachid>78904</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-17 18:32:29 -0800</bug_when>
    <thetext>Comment on attachment 78904
patch-in-progress

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

Generally, I think this patch looks great, and will be a big improvement. Thanks for working on this! I have a few minor comments, but nothing too substantial.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:75
&gt; +def _run_single_test(port, options, test_input, driver, worker_name):

I am tempted to pull this into single_test_runner.py and make the SingleTestRunner object private to that file.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:1
&gt; +# Copyright (C) 2010 Google Inc. All rights reserved.

I&apos;m not wild about the name &quot;single_test_runner&quot;, but I have yet to think of anything better. I&apos;ll keep thinking about it.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:36
&gt; +_log = logging.getLogger(&quot;webkitpy.layout_tests.layout_package.single_test_runner&quot;)

You can actually use _log = logging.getLogger(__name__) here.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:118
&gt; +        driver_output = self._driver.run_test(self._driver_input())

I think you probably will want to pull everything except the actual invocation of run_test() into a separate routine, to make things easier to write unit tests for, e,g, def process_output(self, driver_output) .

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:127
&gt; +        driver_output = self._driver.run_test(self._driver_input())

you&apos;re calling run_test() twice ... this is probably a cut&amp;paste error.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:161
&gt; +        self._write_results_to_result_driectory(failures, driver_output, expected_driver_output)

&quot;_drietct&quot; ... spelling error ;)

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner.py:949
&gt;          self._print_statistics_for_test_timings(

It sure seems like we can get rid of all of this debugging stats tracking. Maybe ping ojan to see if he thinks it is still valuable?

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:810
&gt; +class DriverInput:

moving TestInput, TestOutput here seems like a good thing to do.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:280
&gt; +        # FIXME: Remove &quot;--reset-results&quot; option.

--reset-results and --new-baseline are not the same thing. One writes into the platform directory, and one overwrites the existing baselines, wherever they are (platform or generic). Arguably we need both types of behavior, and I think this patch is breaking --reset-results (the one that overwrites the existing baselines regardless of their location).

It would be nice if these things had better names, though. --reset-results is kind of vague, and --new-baseline doesn&apos;t tell me if the baseline is generic or platform-specific. Maybe we want something like

--overwrite-existing-baseline  (or --update-existing-baselines)
--new-platform-specific-baseline  (awfully long, though)

We should also update the parameter name in save_baseline_data() accordingly.

Note that --old-run-webkit-tests has:
--add-platform-exceptions
--new-test-results
--reset-results

as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337293</commentid>
    <comment_count>4</comment_count>
      <attachid>79587</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-20 05:33:35 -0800</bug_when>
    <thetext>Created attachment 79587
patch-in-progress2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337296</commentid>
    <comment_count>5</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-20 05:50:17 -0800</bug_when>
    <thetext>Hi Dirk,

Thank you for your time reviewing this in-progress patch. I&apos;m glad to hear that this patch looks good for you.

(In reply to comment #3)
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:75
&gt; &gt; +def _run_single_test(port, options, test_input, driver, worker_name):
&gt; 
&gt; I am tempted to pull this into single_test_runner.py and make the SingleTestRunner object private to that file.

Nice point. Done.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:1
&gt; &gt; +# Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; I&apos;m not wild about the name &quot;single_test_runner&quot;, but I have yet to think of anything better. I&apos;ll keep thinking about it.

single_test_runner is not good name. I don&apos;t have a beter name yet :)
test_executer? driver_runner_and_output_comparator? Hmm. I am still thinking.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:36
&gt; &gt; +_log = logging.getLogger(&quot;webkitpy.layout_tests.layout_package.single_test_runner&quot;)
&gt; 
&gt; You can actually use _log = logging.getLogger(__name__) here.

Thank you. Done.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:118
&gt; &gt; +        driver_output = self._driver.run_test(self._driver_input())
&gt; 
&gt; I think you probably will want to pull everything except the actual invocation of run_test() into a separate routine, to make things easier to write unit tests for, e,g, def process_output(self, driver_output) .

Thank you. I&apos;ve refactored run() into separate routines.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:127
&gt; &gt; +        driver_output = self._driver.run_test(self._driver_input())
&gt; 
&gt; you&apos;re calling run_test() twice ... this is probably a cut&amp;paste error.

My bad. Thank you. Done.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:161
&gt; &gt; +        self._write_results_to_result_driectory(failures, driver_output, expected_driver_output)
&gt; 
&gt; &quot;_drietct&quot; ... spelling error ;)

Thank you. Fixed.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner.py:949
&gt; &gt;          self._print_statistics_for_test_timings(
&gt; 
&gt; It sure seems like we can get rid of all of this debugging stats tracking. Maybe ping ojan to see if he thinks it is still valuable?

Although I am not sure whether this debugging tracking for each &apos;TEST_TYPE&apos; is still valuable or not, I&apos;ve removed all tracking code which tracks stats per TEST_TYPE. I&apos;ll ask ojan whether it&apos;s ok or not.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:810
&gt; &gt; +class DriverInput:
&gt; 
&gt; moving TestInput, TestOutput here seems like a good thing to do.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:280
&gt; &gt; +        # FIXME: Remove &quot;--reset-results&quot; option.
&gt; 
&gt; --reset-results and --new-baseline are not the same thing. One writes into the platform directory, and one overwrites the existing baselines, wherever they are (platform or generic). Arguably we need both types of behavior, and I think this patch is breaking --reset-results (the one that overwrites the existing baselines regardless of their location).
&gt; 
&gt; It would be nice if these things had better names, though. --reset-results is kind of vague, and --new-baseline doesn&apos;t tell me if the baseline is generic or platform-specific. Maybe we want something like
&gt; 
&gt; --overwrite-existing-baseline  (or --update-existing-baselines)
&gt; --new-platform-specific-baseline  (awfully long, though)
&gt; 
&gt; We should also update the parameter name in save_baseline_data() accordingly.
&gt; 
&gt; Note that --old-run-webkit-tests has:
&gt; --add-platform-exceptions
&gt; --new-test-results
&gt; --reset-results
&gt; 
&gt; as well.


Thank you. I am sorry that I missed the difference between &apos;--reset-results&apos; and &apos;--new-baseline&apos;.
I reverted all change related with these options. Now the patch should not break &apos;--reset-results&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337575</commentid>
    <comment_count>6</comment_count>
      <attachid>79587</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-20 13:47:14 -0800</bug_when>
    <thetext>Comment on attachment 79587
patch-in-progress2

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

&gt; Tools/ChangeLog:9
&gt; +        kludgy at this point. That class hieralchy doesn&apos;t give us significant

hieralchy?

&gt; Tools/ChangeLog:16
&gt; +        So I just introduced single_test_runner, which simply does all compare tasks,
&gt; +        text and image compares.
&gt; +        I also introduced test_result_writer which takes a responsibility of
&gt; +        writing a test result to the layout test result directory.

I think we need to better explain what this patch is doing.  It&apos;s not yet clear to me what this patch is trying to accomplish.  I agree with you that the existing test_type system is kludgy, but I&apos;d like to better understand your new system.  Better explanation in the ChangeLog will help that. :)

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_results.py:41
&gt; +    def __init__(self, filename, failures=None, test_run_time=None):

Did you fix all callers?

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:68
&gt; +    # FIXME: This is a temporary fix.

This comment isn&apos;t very clear.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:359
&gt; +        # FIXME: Temporary fix for review.
&gt; +        self._filesystem = port._filesystem

Again, not clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337576</commentid>
    <comment_count>7</comment_count>
      <attachid>79587</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-20 13:48:04 -0800</bug_when>
    <thetext>Comment on attachment 79587
patch-in-progress2

Small (&lt;20k) patches are also easier to review than 50k ones. :)

Removing r? since this is marked as &quot;in-progress&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337702</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-20 16:36:51 -0800</bug_when>
    <thetext>This is my take on things; hopefully Ito-san can chime in with whether this is also his take.

1) A lot of the logic that used to be in the test_types/* classes has moved into the port/* classes. What is left is now just confusing and hard to follow or extend.

2) Much of the logic in dump_render_tree_thread is also hard to follow and it mixes the logic of actually running DRT, passing it a set of input, getting a set of output, and comparing the output against the baselines with the logic of managing sets of tests. It would be good to split this logic out. The NRWT multiprocessing code does a lot of this, by creating the &quot;Worker&quot; abstraction, but it would be good to split out the &quot;actually do the test&quot; abstraction as well, which is what I think the &quot;single_test_runner&quot; object does.

I think this is all good stuff. Now, a couple of other thoughts ...

(1) The port/base.py module was already large and is getting larger with this patch. 

(2) We&apos;re starting to get lots of small relatively-fine-grained objects, and I&apos;m a bit worried that it will be hard to keep track of which class has which responsibilitiies.

That said, the actual Driver class is pretty thin. Maybe it makes sense to combine single_test_runner and Driver and move them into a separate file?

Ideally the port/* modules do not depend on the layout_package/* modules (or anything else under webkitpy.layout_tests). I think this patch gets us pretty close to this, but we still have the test_failures class. I wonder if it makes sense to move that into port/* as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337841</commentid>
    <comment_count>9</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-20 20:29:53 -0800</bug_when>
    <thetext>Hi Eric, Dirk,
Thank you for reviews.


&gt; &gt; Tools/ChangeLog:16
&gt; &gt; +        So I just introduced single_test_runner, which simply does all compare tasks,
&gt; &gt; +        text and image compares.
&gt; &gt; +        I also introduced test_result_writer which takes a responsibility of
&gt; &gt; +        writing a test result to the layout test result directory.
&gt; 
&gt; I think we need to better explain what this patch is doing.  It&apos;s not yet clear to me what this patch is trying to accomplish.  I agree with you that the existing test_type system is kludgy, but I&apos;d like to better understand your new system.  Better explanation in the ChangeLog will help that. :)

The one of the motivations in this patch is that we can add reftests support more easily, but this patch is not only for reftests, but also for making new-run-webkit-tests code clean and more understandable.

I agree current *in-progress* ChangeLog entry is not clear for everyone. I&apos;ll update ChangeLog to reflect my intension. 


&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_results.py:41
&gt; &gt; +    def __init__(self, filename, failures=None, test_run_time=None):
&gt; 
&gt; Did you fix all callers?

Yes, I believe so.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:68
&gt; &gt; +    # FIXME: This is a temporary fix.
&gt; 
&gt; This comment isn&apos;t very clear.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium.py:359
&gt; &gt; +        # FIXME: Temporary fix for review.
&gt; &gt; +        self._filesystem = port._filesystem
&gt; 
&gt; Again, not clear.

Sorry for confusing. This &apos;filesystem&apos; fix is needed to run new_run_webkit_tests on chromium-linux as of yesterday after I merged WebKit HEAD. WebKit HEAD seemed to be broken when running new_run_webkit_tests on chromium-linux. I should have mentioned it. I&apos;ll fix it in other patch.

(In reply to comment #8)
&gt; This is my take on things; hopefully Ito-san can chime in with whether this is also his take.
&gt; 
&gt; 1) A lot of the logic that used to be in the test_types/* classes has moved into the port/* classes. What is left is now just confusing and hard to follow or extend.
&gt; 
&gt; 2) Much of the logic in dump_render_tree_thread is also hard to follow and it mixes the logic of actually running DRT, passing it a set of input, getting a set of output, and comparing the output against the baselines with the logic of managing sets of tests. It would be good to split this logic out. The NRWT multiprocessing code does a lot of this, by creating the &quot;Worker&quot; abstraction, but it would be good to split out the &quot;actually do the test&quot; abstraction as well, which is what I think the &quot;single_test_runner&quot; object does.
&gt; 
&gt; I think this is all good stuff. Now, a couple of other thoughts ...
&gt; 
&gt; (1) The port/base.py module was already large and is getting larger with this patch. 
&gt; (2) We&apos;re starting to get lots of small relatively-fine-grained objects, and I&apos;m a bit worried that it will be hard to keep track of which class has which responsibilitiies.
&gt; 
&gt; That said, the actual Driver class is pretty thin. Maybe it makes sense to combine single_test_runner and Driver and move them into a separate file?

At first glace, I am not sure that it is good to merge single_test_runner with Driver.  I think that Driver should be thin and is used only for getting image dump (and text dump). But I&apos;ll keep on thinking on it. At least, separating Driver into a separe file sounds good for me. 

&gt; 
&gt; Ideally the port/* modules do not depend on the layout_package/* modules (or anything else under webkitpy.layout_tests). I think this patch gets us pretty close to this, but we still have the test_failures class. I wonder if it makes sense to move that into port/* as well?

TestFailuers is one of the things which frustrates me. :)   I&apos;d like to use these TestFailures as is in this refactoring process until we have clear ideas. 

Now I believe I got early feedback, I continue to polish this patch. Maybe I&apos;ll separate this patch into several small patches for easy reviews.

Again, thank you for feedbacks, that&apos;s always helpful for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338971</commentid>
    <comment_count>10</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-24 06:17:03 -0800</bug_when>
    <thetext>Hi Eric, Dirk,

I am separating this patch into smaller patches as you suggested.
The one is here: https://bugs.webkit.org/show_bug.cgi?id=53004

Could you review that patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339533</commentid>
    <comment_count>11</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-01-25 00:45:40 -0800</bug_when>
    <thetext>I’ve been separeting this patch into smaller patches. So I&apos;d like to use this bugzilla entry as a master bug.

So far, I&apos;ve made the following patches:

1. https://bugs.webkit.org/show_bug.cgi?id=53004
2. https://bugs.webkit.org/show_bug.cgi?id=53063
3. https://bugs.webkit.org/show_bug.cgi?id=53071

I only set the review flag(r?) if that can be applied to WebKit HEAD. Other patches cannot be applied to WebKit HEAD and depends on the preceeding patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359628</commentid>
    <comment_count>12</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-28 20:18:15 -0800</bug_when>
    <thetext>All dependents bugs were landed. Closing this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78904</attachid>
            <date>2011-01-14 01:10:06 -0800</date>
            <delta_ts>2011-01-20 05:33:29 -0800</delta_ts>
            <desc>patch-in-progress</desc>
            <filename>bug-51091-20110114181004.patch</filename>
            <type>text/plain</type>
            <size>52047</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzOGM5
NWMwMzUyZWZkMTkxMmU5MTk2NzgwZmU5NDYxM2JjMDI5NjZkLi4yY2U1NTMyZjBiYjk1NjY5MTdl
MGVhMGQ4YmE0YjZjYjBhOTQzZjliIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDEtMTIgIEhheWF0byBJdG8g
IDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtOUldUXSBBZGQgc2luZ2xlX3Rlc3RfcnVubmVyIHdoaWNoIGlzIGFs
dGVybmF0aXZlIGZvciBhbGwgdGVzdF90eXBlcy8qCisgICAgICAgIGNsYXNzZXMuCisKKyAgICAg
ICAgSSBhbSBub3QgYSBiaWcgZmFuIG9mIGN1cnJlbnQgdGVzdF90eXBlLyogY2xhc3Nlcy4gVGhl
eSBhcmUgcHJldHR5CisgICAgICAgIGtsdWRneSBhdCB0aGlzIHBvaW50LiBUaGF0IGNsYXNzIGhp
ZXJhbGNoeSBkb2Vzbid0IGdpdmUgdXMgc2lnbmlmaWNhbnQKKyAgICAgICAgYmVuZWZpdHMgYXQg
dGhpcyBwb2ludC4gSXQgaXMgZGlmZnVjdWx0IHRvIGFkZCBuZXcgdGVzdCB0eXBlLCBzdWNoIGFz
CisgICAgICAgIHJlZnRlc3RzLgorCisgICAgICAgIFNvIEkganVzdCBpbnRyb2R1Y2VkIHNpbmds
ZV90ZXN0X3J1bm5lciwgd2hpY2ggc2ltcGx5IGRvZXMgYWxsIGNvbXBhcmUgdGFza3MsCisgICAg
ICAgIHRleHQgYW5kIGltYWdlIGNvbXBhcmVzLgorICAgICAgICBJIGFsc28gaW50cm9kdWNlZCB0
ZXN0X3Jlc3VsdF93cml0ZXIgd2hpY2ggdGFrZXMgYSByZXNwb25zaWJpbGl0eSBvZgorICAgICAg
ICB3cml0aW5nIGEgdGVzdCByZXN1bHQgdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3Rv
cnkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
MDkxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3Rfb3V0cHV0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcmVzdWx0X3dyaXRlci5weTogUmVuYW1l
ZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVz
dF90eXBlX2Jhc2UucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRfXy5weTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYu
cHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVz
dF90eXBlcy90ZXN0X3R5cGVfYmFzZV91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weTogUmVt
b3ZlZC4KKwogMjAxMS0wMS0wNCAgS29hbi1TaW4gVGFuICA8a29hbnNpbi50YW5AZ21haWwuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQppbmRleCBmZGI4ZGE2Y2M4MGI3
M2VlN2RmYjdkNjFkOWRiYmNiYmFiYmNiNDc4Li4wNDc1ODM5MzlkYmQyNjg3YjE2MDBlNGNjYWNl
Y2Y4MzZmMDJjZmMxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRl
cl90cmVlX3RocmVhZC5weQpAQCAtNDksODUgKzQ5LDE0IEBAIGltcG9ydCB0aHJlYWQKIGltcG9y
dCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
dGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
dGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlmZgotCitpbXBvcnQgc2luZ2xlX3Rlc3RfcnVu
bmVyCiBpbXBvcnQgdGVzdF9mYWlsdXJlcwotaW1wb3J0IHRlc3Rfb3V0cHV0CiBpbXBvcnQgdGVz
dF9yZXN1bHRzCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rl
c3RzLmxheW91dF9wYWNrYWdlLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQiKQogCiAKLWRlZiBfZXhwZWN0ZWRfdGVzdF9vdXRwdXQocG9ydCwgZmls
ZW5hbWUpOgotICAgICIiIlJldHVybnMgYW4gZXhwZWN0ZWQgVGVzdE91dHB1dCBvYmplY3QuIiIi
Ci0gICAgcmV0dXJuIHRlc3Rfb3V0cHV0LlRlc3RPdXRwdXQocG9ydC5leHBlY3RlZF90ZXh0KGZp
bGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LmV4cGVjdGVk
X2ltYWdlKGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0
LmV4cGVjdGVkX2NoZWNrc3VtKGZpbGVuYW1lKSkKLQotZGVmIF9wcm9jZXNzX291dHB1dChwb3J0
LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAgICAgICAg
ICAgICAgICAgIHRlc3Rfb3V0cHV0LCB3b3JrZXJfbmFtZSk6Ci0gICAgIiIiUmVjZWl2ZXMgdGhl
IG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYQot
ICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMg
dGhlIHRlc3QgcHJvZHVjZWQuCi0KLSAgICBBcmdzOgotICAgICAgcG9ydDogcG9ydC1zcGVjaWZp
YyBob29rcwotICAgICAgb3B0aW9uczogY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJndW1lbnQgZnJv
bSBvcHRwYXJzZQotICAgICAgcHJvYzogYW4gYWN0aXZlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MK
LSAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lIGFu
ZCB0aW1lb3V0Ci0gICAgICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8gc3ViamVj
dCB0aGUgb3V0cHV0IHRvCi0gICAgICB0ZXN0X2FyZ3M6IGFyZ3VtZW50cyB0byBiZSBwYXNzZWQg
dG8gZWFjaCB0ZXN0Ci0gICAgICB0ZXN0X291dHB1dDogYSBUZXN0T3V0cHV0IG9iamVjdCBjb250
YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3QKLSAgICAgIHdvcmtlcl9uYW1lOiB3b3JrZXIg
bmFtZSBmb3IgbG9nZ2luZwotCi0gICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAotICAg
ICIiIgotICAgIGZhaWx1cmVzID0gW10KLQotICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgotICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKLSAgICBp
ZiB0ZXN0X291dHB1dC50aW1lb3V0OgotICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWls
dXJlcy5GYWlsdXJlVGltZW91dCgpKQotCi0gICAgdGVzdF9uYW1lID0gcG9ydC5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0gICAgaWYgdGVzdF9vdXRwdXQuY3Jh
c2g6Ci0gICAgICAgIF9sb2cuZGVidWcoIiVzIFN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHdv
cmtlcl9uYW1lLCB0ZXN0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LmVycm9yKSkKLSAgICAgICAgZmlsZW5hbWUgPSBv
cy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQotICAgICAg
ICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQi
Ci0gICAgICAgIHBvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFt
ZSlbMF0pCi0gICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIp
IGFzIGZpbGU6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKHRlc3Rfb3V0cHV0LmVycm9yKQotICAg
IGVsaWYgdGVzdF9vdXRwdXQuZXJyb3I6Ci0gICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1
dCBzdGRlcnIgbGluZXM6XG4lcyIgJSAod29ya2VyX25hbWUsIHRlc3RfbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1
dC5lcnJvcikpCi0KLSAgICBleHBlY3RlZF90ZXN0X291dHB1dCA9IF9leHBlY3RlZF90ZXN0X291
dHB1dChwb3J0LCB0ZXN0X2lucHV0LmZpbGVuYW1lKQotCi0gICAgIyBDaGVjayB0aGUgb3V0cHV0
IGFuZCBzYXZlIHRoZSByZXN1bHRzLgotICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAg
IHRpbWVfZm9yX2RpZmZzID0ge30KLSAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6Ci0g
ICAgICAgIHN0YXJ0X2RpZmZfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIG5ld19mYWlsdXJl
cyA9IHRlc3RfdHlwZS5jb21wYXJlX291dHB1dChwb3J0LCB0ZXN0X2lucHV0LmZpbGVuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdz
LCB0ZXN0X291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0KQotICAgICAgICAjIERvbid0IGFkZCBhbnkgbW9y
ZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjcmFzaCwgc28gd2UgZG9uJ3QKLSAgICAg
ICAgIyBkb3VibGUtcmVwb3J0IHRob3NlIHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0
aW1lb3V0cyBzaW5jZQotICAgICAgICAjIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFu
ZCBpbWFnZSBvdXRwdXQuCi0gICAgICAgIGlmIG5vdCB0ZXN0X291dHB1dC5jcmFzaDoKLSAgICAg
ICAgICAgIGZhaWx1cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCi0gICAgICAgIHRpbWVfZm9yX2Rp
ZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1lX19dID0gKAotICAgICAgICAgICAgdGltZS50
aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUpCi0KLSAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMg
PSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQotICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMu
VGVzdFJlc3VsdCh0ZXN0X2lucHV0LmZpbGVuYW1lLCBmYWlsdXJlcywgdGVzdF9vdXRwdXQudGVz
dF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zv
cl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQotCi0KIGRlZiBfcGFkX3RpbWVvdXQodGltZW91
dCk6CiAgICAgIiIiUmV0dXJucyBhIHNhZmUgbXVsdGlwbGUgb2YgdGhlIHBlci10ZXN0IHRpbWVv
dXQgdmFsdWUgdG8gdXNlCiAgICAgdG8gZGV0ZWN0IGh1bmcgdGVzdCB0aHJlYWRzLgpAQCAtMTQz
LDIyICs3MiwxMiBAQCBkZWYgX21pbGxpc2Vjb25kc190b19zZWNvbmRzKG1zZWNzKToKICAgICBy
ZXR1cm4gZmxvYXQobXNlY3MpIC8gMTAwMC4wCiAKIAotZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0
ZWRfY2hlY2tzdW0ob3B0aW9ucyk6Ci0gICAgcmV0dXJuIG9wdGlvbnMucGl4ZWxfdGVzdHMgYW5k
IG5vdCAob3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igb3B0aW9ucy5yZXNldF9yZXN1bHRzKQotCi0K
LWRlZiBfcnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlw
ZXMsIHRlc3RfYXJncywgZHJpdmVyLCB3b3JrZXJfbmFtZSk6CitkZWYgX3J1bl9zaW5nbGVfdGVz
dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCBkcml2ZXIsIHdvcmtlcl9uYW1lKToKICAgICAj
IEZJWE1FOiBQdWxsIHRoaXMgaW50byBUZXN0U2hlbGxUaHJlYWQuX3J1bigpLgogCi0gICAgIyBU
aGUgaW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhl
Ci0gICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2
YWx1ZSBpZiB3ZQotICAgICMgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3
aXNlLCBhbiBpbWFnZSBmcm9tIGEKLSAgICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBp
bnRvIHRoZSBiYXNlbGluZS4iIiIKLSAgICBpZiBfc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNr
c3VtKG9wdGlvbnMpOgotICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2hhc2ggPSBwb3J0LmV4cGVj
dGVkX2NoZWNrc3VtKHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0gICAgdGVzdF9vdXRwdXQgPSBkcml2
ZXIucnVuX3Rlc3QodGVzdF9pbnB1dCkKLSAgICByZXR1cm4gX3Byb2Nlc3Nfb3V0cHV0KHBvcnQs
IG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LCB3b3JrZXJfbmFtZSkKKyAgICBydW5uZXIgPSBz
aW5nbGVfdGVzdF9ydW5uZXIuU2luZ2xlVGVzdFJ1bm5lcigKKyAgICAgICAgb3B0aW9ucywgcG9y
dCwgZHJpdmVyLCB0ZXN0X2lucHV0LCB3b3JrZXJfbmFtZSkKKyAgICByZXR1cm4gcnVubmVyLnJ1
bigpCiAKIAogY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKQEAgLTE5
Nyw4ICsxMTYsNyBAQCBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgog
ICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29y
a2VyX251bWJlcikKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKICAgICAgICAgc2VsZi5f
dGVzdF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0
X2lucHV0LCBzZWxmLl90ZXN0X3R5cGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLCBzZWxmLl9kcml2ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2lucHV0LCBzZWxm
Ll9kcml2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9uYW1lKQogICAgICAgICBzZWxmLl9kcml2ZXIuc3RvcCgpCiAKQEAgLTI3NCwxMiArMTky
LDYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIHNl
bGYuX2h0dHBfbG9ja193YWl0X2JlZ2luID0gMAogICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2Fp
dF9lbmQgPSAwCiAKLSAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtdCi0gICAgICAgIGZvciBj
bHMgaW4gc2VsZi5fZ2V0X3Rlc3RfdHlwZV9jbGFzc2VzKCk6Ci0gICAgICAgICAgICBzZWxmLl90
ZXN0X3R5cGVzLmFwcGVuZChjbHMoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKLSAgICAg
ICAgc2VsZi5fdGVzdF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVyKQot
CiAgICAgICAgICMgQ3VycmVudCBncm91cCBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgogICAgICAg
ICBzZWxmLl9jdXJyZW50X2dyb3VwID0gTm9uZQogICAgICAgICAjIE51bWJlciBvZiB0ZXN0cyBp
biBzZWxmLl9jdXJyZW50X2dyb3VwLgpAQCAtMjg3LDIwICsxOTksNiBAQCBjbGFzcyBUZXN0U2hl
bGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgIyBUaW1lIGF0IHdoaWNoIHdlIHN0
YXJ0ZWQgcnVubmluZyB0ZXN0cyBmcm9tIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCiAgICAgICAgIHNl
bGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IE5vbmUKIAotICAgIGRlZiBfZ2V0X3Rlc3Rf
YXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUg
b2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIiIgotICAgICAg
ICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKLSAgICAgICAgdGVz
dF9hcmdzLm5ld19iYXNlbGluZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCi0gICAgICAg
IHRlc3RfYXJncy5yZXNldF9yZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCi0K
LSAgICAgICAgcmV0dXJuIHRlc3RfYXJncwotCi0gICAgZGVmIF9nZXRfdGVzdF90eXBlX2NsYXNz
ZXMoc2VsZik6Ci0gICAgICAgIGNsYXNzZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KLSAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgICAgIGNsYXNzZXMu
YXBwZW5kKGltYWdlX2RpZmYuSW1hZ2VEaWZmKQotICAgICAgICByZXR1cm4gY2xhc3NlcwotCiAg
ICAgZGVmIGdldF90ZXN0X2dyb3VwX3RpbWluZ19zdGF0cyhzZWxmKToKICAgICAgICAgIiIiUmV0
dXJucyBhIGRpY3Rpb25hcnkgbWFwcGluZyB0ZXN0IGdyb3VwIHRvIGEgdHVwbGUgb2YKICAgICAg
ICAgKG51bWJlciBvZiB0ZXN0cyBpbiB0aGF0IGdyb3VwLCB0aW1lIHRvIHJ1biB0aGUgdGVzdHMp
IiIiCkBAIC01MjEsNyArNDE5LDYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRo
cmVhZCk6CiAgICAgICAgICAgICAgX3BhZF90aW1lb3V0KGludCh0ZXN0X2lucHV0LnRpbWVvdXQp
KSkKICAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyB0aHJlYWRfdGlt
ZW91dAogICAgICAgICB0ZXN0X3Jlc3VsdCA9IF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwg
c2VsZi5fb3B0aW9ucywgdGVzdF9pbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RyaXZlciwgc2VsZi5fbmFtZSkKICAg
ICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzLmFwcGVuZCh0ZXN0X3Jlc3VsdCkKICAgICAgICAgcmV0
dXJuIHRlc3RfcmVzdWx0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5u
ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzcxZTFiZWI5YjMyNWY0OGIyZjZlMDdkYjNmZTFkOGQ4ZjkwN2Mz
MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5lci5weQpAQCAtMCwwICsxLDI0OCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1w
b3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS5zaW5nbGVfdGVzdF9ydW5u
ZXIiKQorCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuYmFzZSBpbXBvcnQgRHJp
dmVySW5wdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuYmFzZSBpbXBvcnQgRHJp
dmVyT3V0cHV0CisKK2ltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIHRlc3RfcmVzdWx0X3dyaXRl
ciBpbXBvcnQgVGVzdFJlc3VsdFdyaXRlcgorZnJvbSB0ZXN0X3Jlc3VsdHMgaW1wb3J0IFRlc3RS
ZXN1bHQKKworCitjbGFzcyBFeHBlY3RlZERyaXZlck91dHB1dDoKKyAgICAiIiJHcm91cHMgaW5m
b3JtYXRpb24gYWJvdXQgYW4gZXhwZWN0ZWQgZHJpdmVyIG91dHB1dC4iIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgdGV4dCwgaW1hZ2UsIGltYWdlX2hhc2gpOgorICAgICAgICBzZWxmLnRleHQg
PSB0ZXh0CisgICAgICAgIHNlbGYuaW1hZ2UgPSBpbWFnZQorICAgICAgICBzZWxmLmltYWdlX2hh
c2ggPSBpbWFnZV9oYXNoCisKKworY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcjoKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvcHRpb25zLCBwb3J0LCBkcml2ZXIsIHRlc3RfaW5wdXQsIHdvcmtlcl9u
YW1lKToKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZHJpdmVyID0gZHJpdmVyCisgICAgICAgIHNlbGYuX2Zp
bGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFtZQorICAgICAgICBzZWxmLl90aW1lb3V0ID0gdGVz
dF9pbnB1dC50aW1lb3V0CisgICAgICAgIHNlbGYuX3dvcmtlcl9uYW1lID0gd29ya2VyX25hbWUK
KyAgICAgICAgc2VsZi5fdGVzdG5hbWUgPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVz
dF9pbnB1dC5maWxlbmFtZSkKKworICAgIGRlZiBfZXhwZWN0ZWRfZHJpdmVyX291dHB1dChzZWxm
KToKKyAgICAgICAgcmV0dXJuIEV4cGVjdGVkRHJpdmVyT3V0cHV0KHNlbGYuX3BvcnQuZXhwZWN0
ZWRfdGV4dChzZWxmLl9maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKHNlbGYuX2ZpbGVuYW1lKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0o
c2VsZi5fZmlsZW5hbWUpKQorCisgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tz
dW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCBu
b3Qgc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUKKworICAgIGRlZiBfZHJpdmVyX2lucHV0KHNl
bGYpOgorICAgICAgICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4g
aW1hZ2UgZHVtcCBpZiB0aGUKKyAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3Vs
ZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQorICAgICAgICAjIGFyZSBnZW5lcmF0aW5n
IGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCisgICAgICAgICMg
cHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGJhc2VsaW5lLiIiIgorICAgICAg
ICBpbWFnZV9oYXNoID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9zaG91bGRfZmV0Y2hfZXhwZWN0
ZWRfY2hlY2tzdW0oKToKKyAgICAgICAgICAgIGltYWdlX2hhc2ggPSBzZWxmLl9wb3J0LmV4cGVj
dGVkX2NoZWNrc3VtKHNlbGYuX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gRHJpdmVySW5wdXQo
c2VsZi5fZmlsZW5hbWUsIHNlbGYuX3RpbWVvdXQsIGltYWdlX2hhc2gpCisKKyAgICBkZWYgX2dl
dF9ub3JtYWxpemVkX291dHB1dF90ZXh0KHNlbGYsIHRleHQpOgorICAgICAgICAjIFNvbWUgdGVz
dHMgcHJvZHVjZSAiXHJcbiIgZXhwbGljaXRseS4gIE91ciBzeXN0ZW0gKFB5dGhvbi9DeWd3aW4p
CisgICAgICAgICMgaGVscGZ1bGx5IGNoYW5nZXMgdGhlICJcbiIgdG8gIlxyXG4iLCByZXN1bHRp
bmcgaW4gIlxyXHJcbiIuCisgICAgICAgIG5vcm0gPSB0ZXh0LnJlcGxhY2UoIlxyXHJcbiIsICJc
clxuIikuc3RyaXAoIlxyXG4iKS5yZXBsYWNlKAorICAgICAgICAgICAgICJcclxuIiwgIlxuIikK
KyAgICAgICAgcmV0dXJuIG5vcm0gKyAiXG4iCisKKyAgICBkZWYgX2NvbXBhcmVfdGV4dChzZWxm
LCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgIGZhaWx1cmVzID0gW10KKyAg
ICAgICAgIyBOb3JtYWxpemUgdGV4dCB0byBkaWZmCisgICAgICAgIGFjdHVhbF90ZXh0ID0gc2Vs
Zi5fZ2V0X25vcm1hbGl6ZWRfb3V0cHV0X3RleHQoYWN0dWFsX3RleHQpCisgICAgICAgICMgQXNz
dW1pbmcgZXhwZWN0ZWRfdGV4dCBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQuCisgICAgICAgIGlmIHNl
bGYuX3BvcnQuY29tcGFyZV90ZXh0KGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0KToKKyAgICAg
ICAgICAgIGlmIGV4cGVjdGVkX3RleHQgPT0gJyc6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1bHQoKSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFp
bHVyZVRleHRNaXNtYXRjaCgpKQorICAgICAgICByZXR1cm4gZmFpbHVyZXMKKworICAgIGRlZiBf
Y29tcGFyZV9pbWFnZShzZWxmLCBvdXRwdXQsIGV4cGVjdGF0aW9ucyk6CisgICAgICAgIGZhaWx1
cmVzID0gW10KKyAgICAgICAgIyBJZiB3ZSBkaWRuJ3QgcHJvZHVjZSBhIGhhc2ggZmlsZSwgdGhp
cyB0ZXN0IG11c3QgYmUgdGV4dC1vbmx5LgorICAgICAgICBpZiBvdXRwdXQuaW1hZ2VfaGFzaCBp
cyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisgICAgICAgIGlmIG5vdCBleHBl
Y3RhdGlvbnMuaW1hZ2U6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJl
cy5GYWlsdXJlTWlzc2luZ0ltYWdlKCkpCisgICAgICAgIGVsaWYgbm90IGV4cGVjdGF0aW9ucy5p
bWFnZV9oYXNoOgorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFp
bHVyZU1pc3NpbmdJbWFnZUhhc2goKSkKKyAgICAgICAgZWxpZiBvdXRwdXQuaW1hZ2VfaGFzaCAh
PSBleHBlY3RhdGlvbnMuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCgpKQorICAgICAgICByZXR1cm4g
ZmFpbHVyZXMKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIk1haW4gZmxvdyIiIgor
ICAgICAgICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZl
cl9pbnB1dCgpKQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lOgorICAg
ICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZXMoZHJpdmVyX291dHB1dCkKKyAgICAgICAgICAg
IGZhaWx1cmVzID0gc2VsZi5faGFuZGxlX2Vycm9yKGRyaXZlcl9vdXRwdXQpCisgICAgICAgICAg
ICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl9maWxlbmFtZSwgZmFpbHVyZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkcml2ZXJfb3V0cHV0LnRlc3RfdGltZSwgMCwge30pCisKKyAg
ICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVy
LnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgpKQorICAgICAgICBkcml2ZXJfb3V0cHV0LnRl
eHQgPSBzZWxmLl9nZXRfbm9ybWFsaXplZF9vdXRwdXRfdGV4dChkcml2ZXJfb3V0cHV0LnRleHQp
CisgICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9oYW5kbGVfZXJyb3IoZHJpdmVyX291dHB1
dCkpCisgICAgICAgIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQgPSBzZWxmLl9leHBlY3RlZF9kcml2
ZXJfb3V0cHV0KCkKKworICAgICAgICBpc19jcmFzaCA9IGRyaXZlcl9vdXRwdXQuY3Jhc2gKKwor
ICAgICAgICB0aW1lX2Zvcl9kaWZmcyA9IHt9CisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRp
bWUoKQorCisgICAgICAgICMgVGV4dCBjb21wYXJlCisgICAgICAgIGlmIG5vdCBpc19jcmFzaDoK
KyAgICAgICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkg
aGF2ZSBhIGNyYXNoLCBzbyB3ZSBkb24ndAorICAgICAgICAgICAgIyBkb3VibGUtcmVwb3J0IHRo
b3NlIHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cyBzaW5jZQorICAgICAg
ICAgICAgIyB3ZSBzdGlsbCB3YW50IHRvIHNlZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0Lgor
ICAgICAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGZh
aWx1cmVzLmV4dGVuZChzZWxmLl9jb21wYXJlX3RleHQoZHJpdmVyX291dHB1dC50ZXh0LCBleHBl
Y3RlZF9kcml2ZXJfb3V0cHV0LnRleHQpKQorICAgICAgICAgICAgdGltZV9mb3JfZGlmZnNbJ1Rl
eHRDb21wYXJlJ10gPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQorCisgICAgICAgICMg
SW1hZ2UgY29tcGFyZQorICAgICAgICBpZiBub3QgaXNfY3Jhc2ggYW5kIHNlbGYuX29wdGlvbnMu
cGl4ZWxfdGVzdHMgYW5kIGRyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIHN0
YXJ0X2RpZmZfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBmYWlsdXJlcy5leHRlbmQo
c2VsZi5fY29tcGFyZV9pbWFnZShkcml2ZXJfb3V0cHV0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0
KSkKKyAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzWydJbWFnZUNvbXBhcmUnXSA9IHRpbWUudGlt
ZSgpIC0gc3RhcnRfZGlmZl90aW1lCisKKyAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
ID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCisKKyAgICAgICAgdGVzdF9yZXN1bHQgPSBUZXN0
UmVzdWx0KHNlbGYuX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFpbHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfb3V0cHV0
LnRlc3RfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVf
Zm9yX2FsbF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9y
X2RpZmZzKQorICAgICAgICAjIEZJWE1FOiB0aW1lIG9mICdkaWZmJyBpcyBub3QgaW5jdWRlZCBp
biB0aGlzIGFwcHJvYWNoLi4uIGlzIGl0IG9rYXk/CisgICAgICAgICMgLT4gQ2hhbmdlTG9nIG9y
IGJ1Z3ppbGxhCisgICAgICAgIHNlbGYuX3dyaXRlX3Jlc3VsdHNfdG9fcmVzdWx0X2RyaWVjdG9y
eShmYWlsdXJlcywgZHJpdmVyX291dHB1dCwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dCkKKyAgICAg
ICAgcmV0dXJuIHRlc3RfcmVzdWx0CisKKyAgICBkZWYgX3NhdmVfYmFzZWxpbmVzKHNlbGYsIGRy
aXZlcl9vdXRwdXQpOgorICAgICAgICAjIEFsdGhvdWdoIGFsbCB0ZXN0X3NoZWxsL0R1bXBSZW5k
ZXJUcmVlIG91dHB1dCBzaG91bGQgYmUgdXRmLTgsCisgICAgICAgICMgd2UgZG8gbm90IGV2ZXIg
ZGVjb2RlIGl0IGluc2lkZSBydW4td2Via2l0LXRlc3RzLiAgRm9yIHNvbWUgdGVzdHMKKyAgICAg
ICAgIyBEdW1wUmVuZGVyVHJlZSBtYXkgbm90IG91dHB1dCB1dGYtOCB0ZXh0IChlLmcuIHdlYmFy
Y2hpdmVzKS4KKyAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQu
dGV4dCwgIi50eHQiLCBlbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPXNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lKQor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZCBkcml2ZXJfb3V0cHV0Lmlt
YWdlX2hhc2g6CisgICAgICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291
dHB1dC5pbWFnZSwgIi5wbmciLCBlbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGluZT1zZWxmLl9vcHRpb25zLm5ld19i
YXNlbGluZSkKKyAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0
cHV0LmltYWdlX2hhc2gsICIuY2hlY2tzdW0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPXNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5l
KQorCisgICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2VsZiwgZGF0YSwgbW9kaWZpZXIsIGVu
Y29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGlu
ZT1UcnVlKToKKyAgICAgICAgIiIiU2F2ZXMgYSBuZXcgYmFzZWxpbmUgZmlsZSBpbnRvIHRoZSBw
b3J0J3MgYmFzZWxpbmUgZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSBmaWxlIHdpbGwgYmUgbmFt
ZWQgc2ltcGx5ICI8dGVzdD4tZXhwZWN0ZWQ8bW9kaWZpZXI+Iiwgc3VpdGFibGUgZm9yCisgICAg
ICAgIHVzZSBhcyB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBpbiBhIGxhdGVyIHJ1bi4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIGRhdGE6IHJlc3VsdCB0byBiZSBzYXZlZCBhcyB0aGUgbmV3IGJh
c2VsaW5lCisgICAgICAgICAgbW9kaWZpZXI6IHR5cGUgb2YgdGhlIHJlc3VsdCBmaWxlLCBlLmcu
ICIudHh0IiBvciAiLnBuZyIKKyAgICAgICAgICBlbmNvZGluZzogZmlsZSBlbmNvZGluZyAobm9u
ZSwgInV0Zi04IiwgZXRjLikKKyAgICAgICAgICBnZW5lcmF0ZV9uZXdfYmFzZWxpbmU6IHdoZXRo
ZXIgdG8gZW5lcmF0ZSBhIG5ldywgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgICAgIGJhc2Vs
aW5lLCBvciB1cGRhdGUgdGhlIGV4aXN0aW5nIG9uZQorICAgICAgICAiIiIKKworICAgICAgICBp
ZiBnZW5lcmF0ZV9uZXdfYmFzZWxpbmU6CisgICAgICAgICAgICByZWxhdGl2ZV9kaXIgPSBvcy5w
YXRoLmRpcm5hbWUoc2VsZi5fdGVzdG5hbWUpCisgICAgICAgICAgICBiYXNlbGluZV9wYXRoID0g
c2VsZi5fcG9ydC5iYXNlbGluZV9wYXRoKCkKKyAgICAgICAgICAgIG91dHB1dF9kaXIgPSBvcy5w
YXRoLmpvaW4oYmFzZWxpbmVfcGF0aCwgcmVsYXRpdmVfZGlyKQorICAgICAgICAgICAgb3V0cHV0
X2ZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguc3BsaXRleHQoc2VsZi5fZmlsZW5hbWUp
WzBdICsKKyAgICAgICAgICAgICAgICAiLWV4cGVjdGVkIiArIG1vZGlmaWVyKQorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQorICAgICAgICAg
ICAgb3V0cHV0X3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2Rpciwgb3V0cHV0X2ZpbGUpCisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCd3cml0aW5nIG5ldyBiYXNlbGluZSByZXN1bHQgIiVzIicg
JSAob3V0cHV0X3BhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X3BhdGgg
PSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYuX2ZpbGVuYW1lLCBtb2RpZmllcikK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoJ3Jlc2V0dGluZyBiYXNlbGluZSByZXN1bHQgIiVzIicg
JSBvdXRwdXRfcGF0aCkKKworICAgICAgICBzZWxmLl9wb3J0LnVwZGF0ZV9iYXNlbGluZShvdXRw
dXRfcGF0aCwgZGF0YSwgZW5jb2RpbmcpCisKKyAgICBkZWYgX2hhbmRsZV9lcnJvcihzZWxmLCBk
cml2ZXJfb3V0cHV0KToKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICBpZiBkcml2ZXJf
b3V0cHV0LnRpbWVvdXQ6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJl
cy5GYWlsdXJlVGltZW91dCgpKQorICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LmNyYXNoOgorICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlIChzZWxm
Ll93b3JrZXJfbmFtZSwgc2VsZi5fdGVzdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfb3V0cHV0LmVycm9yKSkKKyAgICAg
ICAgZWxpZiBkcml2ZXJfb3V0cHV0LmVycm9yOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMg
JXMgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlIChzZWxmLl93b3JrZXJfbmFtZSwgc2VsZi5f
dGVzdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRyaXZlcl9vdXRwdXQuZXJyb3IpKQorICAgICAgICByZXR1cm4gZmFpbHVy
ZXMKKworICAgIGRlZiBfd3JpdGVfcmVzdWx0c190b19yZXN1bHRfZHJpZWN0b3J5KHNlbGYsIGZh
aWx1cmVzLCBkcml2ZXJfb3V0cHV0LCBleHBlY3RhdGlvbnMpOgorICAgICAgICAjIEZJWE1FOiBU
ZXN0RmFpbHVyZSBjbGFzcyBtYXkgaGF2ZSBhIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICB3cml0
ZXIgPSBUZXN0UmVzdWx0V3JpdGVyKHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnksIHNlbGYuX2ZpbGVuYW1lKQorICAgICAgICBmb3IgZmFpbHVyZSBpbiBmYWlsdXJl
czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgKHRlc3RfZmFpbHVyZXMuRmFp
bHVyZU1pc3NpbmdSZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUZXh0TWlzbWF0Y2gpKToKKyAgICAgICAgICAgICAgICB3cml0
ZXIuY29weV90ZXh0KGRyaXZlcl9vdXRwdXQudGV4dCwgZXhwZWN0YXRpb25zLnRleHQpCisgICAg
ICAgICAgICAgICAgd3JpdGVyLmNyZWF0ZV90ZXh0X2RpZmYoZHJpdmVyX291dHB1dC50ZXh0LCBl
eHBlY3RhdGlvbnMudGV4dCkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2UpOgorICAgICAgICAgICAgICAgIHdyaXRl
ci5jb3B5X2ltYWdlKGRyaXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCisg
ICAgICAgICAgICAgICAgd3JpdGVyLmNvcHlfaW1hZ2VfaGFzaChkcml2ZXJfb3V0cHV0LmltYWdl
X2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlv
bnMuaW1hZ2VfaGFzaCkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0
X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2VIYXNoKToKKyAgICAgICAgICAgICAgICB3cml0
ZXIuY29weV9pbWFnZShkcml2ZXJfb3V0cHV0LmltYWdlLCBleHBlY3RhdGlvbnMuaW1hZ2UpCisg
ICAgICAgICAgICAgICAgd3JpdGVyLmNvcHlfaW1hZ2VfaGFzaChkcml2ZXJfb3V0cHV0LmltYWdl
X2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9p
bWFnZV9oYXNoPU5vbmUpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgdGVz
dF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2gpOgorICAgICAgICAgICAgICAgIHdy
aXRlci5jb3B5X2ltYWdlKGRyaXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGF0aW9ucy5pbWFnZSkK
KyAgICAgICAgICAgICAgICB3cml0ZXIuY29weV9pbWFnZV9oYXNoKGRyaXZlcl9vdXRwdXQuaW1h
Z2VfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0
aW9ucy5pbWFnZV9oYXNoKQorICAgICAgICAgICAgICAgIGltYWdlc19hcmVfZGlmZmVyZW50ID0g
d3JpdGVyLmNyZWF0ZV9kaWZmX2ltYWdlKAorICAgICAgICAgICAgICAgICAgICBkcml2ZXJfb3V0
cHV0LmltYWdlLCBleHBlY3RhdGlvbnMuaW1hZ2UpCisgICAgICAgICAgICAgICAgaWYgbm90IGlt
YWdlc19hcmVfZGlmZmVyZW50OgorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBIYW5kbGUg
YSBjYXNlIGZvciB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3Q6CisgICAg
ICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJl
LCB0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCk6CisgICAgICAgICAgICAgICAgd3JpdHRlci53
cml0ZV9jcmFzaF9yZXBvcnQoZHJpdmVyX291dHB1dC5lcnJvcikKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmFpbHVyZSwgKHRlc3RfZmFpbHVy
ZXMuRmFpbHVyZVRpbWVvdXQsKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfb3V0cHV0LnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9vdXRwdXQucHkKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MDliZTYyNWQ1YmU5MzZlNDMwY2U3YzNiNDY3
ZTAwNTVjNDhhODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVz
dF9vdXRwdXQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0jIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotCi1jbGFzcyBUZXN0T3V0cHV0KG9iamVjdCk6Ci0gICAgIiIiR3JvdXBzIGluZm9ybWF0
aW9uIGFib3V0IGEgdGVzdCBvdXRwdXQgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRhLgotCi0gICAg
VGhpcyBpcyB1c2VkIG5vdCBvbmx5IGZvciBhIGFjdHVhbCB0ZXN0IG91dHB1dCwgYnV0IGFsc28g
Zm9yIGdyb3VwaW5nCi0gICAgZXhwZWN0ZWQgdGVzdCBvdXRwdXQuCi0gICAgIiIiCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgdGV4dCwgaW1hZ2UsIGltYWdlX2hhc2gsCi0gICAgICAgICAgICAg
ICAgIGNyYXNoPU5vbmUsIHRlc3RfdGltZT1Ob25lLCB0aW1lb3V0PU5vbmUsIGVycm9yPU5vbmUp
OgotICAgICAgICAiIiJJbml0aWFsaXplcyBhIFRlc3RPdXRwdXQgb2JqZWN0LgotCi0gICAgICAg
IEFyZ3M6Ci0gICAgICAgICAgdGV4dDogYSB0ZXh0IG91dHB1dAotICAgICAgICAgIGltYWdlOiBh
biBpbWFnZSBvdXRwdXQKLSAgICAgICAgICBpbWFnZV9oYXNoOiBhIHN0cmluZyBjb250YWluaW5n
IHRoZSBjaGVja3N1bSBvZiB0aGUgaW1hZ2UKLSAgICAgICAgICBjcmFzaDogYSBib29sZWFuIGlu
ZGljYXRpbmcgd2hldGhlciB0aGUgZHJpdmVyIGNyYXNoZWQgb24gdGhlIHRlc3QKLSAgICAgICAg
ICB0ZXN0X3RpbWU6IGEgdGltZSB3aGljaCB0aGUgdGVzdCBoYXMgdGFrZW4KLSAgICAgICAgICB0
aW1lb3V0OiBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGVodGVyIHRoZSB0ZXN0IHRpbWVkIG91dAot
ICAgICAgICAgIGVycm9yOiBhbnkgdW5leHBlY3RlZCBvciBhZGRpdGlvbmFsIChvciBlcnJvcikg
dGV4dCBvdXRwdXQKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudGV4dCA9IHRleHQKLSAgICAg
ICAgc2VsZi5pbWFnZSA9IGltYWdlCi0gICAgICAgIHNlbGYuaW1hZ2VfaGFzaCA9IGltYWdlX2hh
c2gKLSAgICAgICAgc2VsZi5jcmFzaCA9IGNyYXNoCi0gICAgICAgIHNlbGYudGVzdF90aW1lID0g
dGVzdF90aW1lCi0gICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgc2VsZi5l
cnJvciA9IGVycm9yCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyLnB5CmluZGV4IDI0ZDA0
Y2EwMWQxZjExYmExYWIwMzQxYWUxMTc0OTkzNWM4MmEwN2IuLmMyYzAzZTkzNTk2MTY5MWQzMDFi
MTZkNDQ1ZDE2MzU4OTA0ZWU2YzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyLnB5
CkBAIC05MzUsMTcgKzkzNSwxMyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICB0aW1lc19m
b3JfZHVtcF9yZW5kZXJfdHJlZSA9IFtdCiAgICAgICAgIHRpbWVzX2Zvcl9kaWZmX3Byb2Nlc3Np
bmcgPSBbXQogICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlID0ge30KLSAgICAgICAgZm9yIHRl
c3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgotICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZVt0
ZXN0X3R5cGVdID0gW10KIAogICAgICAgICBmb3IgdGVzdF9zdGF0cyBpbiBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5nczoKICAgICAgICAgICAgIHRpbWVzX2Zvcl9kdW1wX3JlbmRlcl90cmVlLmFwcGVu
ZCh0ZXN0X3N0YXRzLnRlc3RfcnVuX3RpbWUpCiAgICAgICAgICAgICB0aW1lc19mb3JfZGlmZl9w
cm9jZXNzaW5nLmFwcGVuZCgKICAgICAgICAgICAgICAgICB0ZXN0X3N0YXRzLnRvdGFsX3RpbWVf
Zm9yX2FsbF9kaWZmcykKLSAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzID0gdGVzdF9zdGF0cy50
aW1lX2Zvcl9kaWZmcwotICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgot
ICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXS5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZV0pCisgICAgICAgICAg
ICBmb3IgdGVzdF90eXBlLCB0aW1lIGluIHRlc3Rfc3RhdHMudGltZV9mb3JfZGlmZnMuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZS5nZXQodGVzdF90eXBl
LCBbXSkuYXBwZW5kKHRpbWUpCiAKICAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3Jf
dGVzdF90aW1pbmdzKAogICAgICAgICAgICAgIlBFUiBURVNUIFRJTUUgSU4gVEVTVFNIRUxMIChz
ZWNvbmRzKToiLApAQCAtOTUzLDEwICs5NDksOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAg
ICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAi
UEVSIFRFU1QgRElGRiBQUk9DRVNTSU5HIFRJTUVTIChzZWNvbmRzKToiLAogICAgICAgICAgICAg
dGltZXNfZm9yX2RpZmZfcHJvY2Vzc2luZykKLSAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0
X3R5cGVzOgorICAgICAgICBmb3IgdGVzdF90eXBlLCB0aW1lIGluIHRpbWVzX3Blcl90ZXN0X3R5
cGUuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90
ZXN0X3RpbWluZ3MoCi0gICAgICAgICAgICAgICAgIlBFUiBURVNUIFRJTUVTIEJZIFRFU1QgVFlQ
RTogJXMiICUgdGVzdF90eXBlLAotICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVb
dGVzdF90eXBlXSkKKyAgICAgICAgICAgICAgICAiUEVSIFRFU1QgVElNRVMgQlkgVEVTVCBUWVBF
OiAlcyIgJSB0ZXN0X3R5cGUsIHRpbWUpCiAKICAgICBkZWYgX3ByaW50X2luZGl2aWR1YWxfdGVz
dF90aW1lcyhzZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggOTdiNTRjOTdkODFmZmY5Mzk5
OTFlNmFlYjJhMzMzMTYwODg4ODE1Mi4uYzAyZWU1NzNjZTYyYTU5MWU2NzE5YzA1MmE3OWIzMGI5
YWU1NWNmOSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvYmFzZS5weQpAQCAtODA3LDYgKzgwNywzOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCiAKIAorY2xhc3MgRHJp
dmVySW5wdXQ6CisgICAgIiIiSW5wdXQgZm9yIGRyaXZlci4iIiIKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgZmlsZW5hbWUsIHRpbWVvdXQsIGltYWdlX2hhc2gpOgorICAgICAgICBzZWxmLmZpbGVu
YW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBz
ZWxmLmltYWdlX2hhc2ggPSBpbWFnZV9oYXNoCisKKworY2xhc3MgRHJpdmVyT3V0cHV0KG9iamVj
dCk6CisgICAgIiIiR3JvdXBzIGluZm9ybWF0aW9uIGFib3V0IGEgb3V0cHV0IGZyb20gZHJpdmVy
IGZvciBlYXN5IHBhc3Npbmcgb2YgZGF0YS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
ZXh0LCBpbWFnZSwgaW1hZ2VfaGFzaCwKKyAgICAgICAgICAgICAgICAgY3Jhc2g9Tm9uZSwgdGVz
dF90aW1lPU5vbmUsIHRpbWVvdXQ9Tm9uZSwgZXJyb3I9Tm9uZSk6CisgICAgICAgICIiIkluaXRp
YWxpemVzIGEgVGVzdE91dHB1dCBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0
ZXh0OiBhIHRleHQgb3V0cHV0CisgICAgICAgICAgaW1hZ2U6IGFuIGltYWdlIG91dHB1dAorICAg
ICAgICAgIGltYWdlX2hhc2g6IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNoZWNrc3VtIG9mIHRo
ZSBpbWFnZQorICAgICAgICAgIGNyYXNoOiBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRo
ZSBkcml2ZXIgY3Jhc2hlZCBvbiB0aGUgdGVzdAorICAgICAgICAgIHRlc3RfdGltZTogYSB0aW1l
IHdoaWNoIHRoZSB0ZXN0IGhhcyB0YWtlbgorICAgICAgICAgIHRpbWVvdXQ6IGEgYm9vbGVhbiBp
bmRpY2F0aW5nIHdoZWh0ZXIgdGhlIHRlc3QgdGltZWQgb3V0CisgICAgICAgICAgZXJyb3I6IGFu
eSB1bmV4cGVjdGVkIG9yIGFkZGl0aW9uYWwgKG9yIGVycm9yKSB0ZXh0IG91dHB1dAorICAgICAg
ICAiIiIKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorICAgICAgICBzZWxmLmltYWdlID0gaW1h
Z2UKKyAgICAgICAgc2VsZi5pbWFnZV9oYXNoID0gaW1hZ2VfaGFzaAorICAgICAgICBzZWxmLmNy
YXNoID0gY3Jhc2gKKyAgICAgICAgc2VsZi50ZXN0X3RpbWUgPSB0ZXN0X3RpbWUKKyAgICAgICAg
c2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmVycm9yID0gZXJyb3IKKworCiBj
bGFzcyBEcml2ZXI6CiAgICAgIiIiQWJzdHJhY3QgaW50ZXJmYWNlIGZvciB0aGUgRHVtcFJlbmRl
clRyZWUgaW50ZXJmYWNlLiIiIgogCkBAIC04MjEsNyArODU0LDcgQEAgY2xhc3MgRHJpdmVyOgog
ICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRHJpdmVyLl9f
aW5pdF9fJykKIAotICAgIGRlZiBydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICBkZWYg
cnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0KToKICAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRl
c3QgYW5kIHJldHVybiB0aGUgcmVzdWx0cy4KIAogICAgICAgICBOb3RlIHRoYXQgaXQgaXMgb2th
eSBpZiBhIHRlc3QgdGltZXMgb3V0IG9yIGNyYXNoZXMgYW5kIGxlYXZlcwpAQCAtODI5LDkgKzg2
Miw5IEBAIGNsYXNzIERyaXZlcjoKICAgICAgICAgYXJlIHJlc3BvbnNpYmxlIGZvciBjbGVhbmlu
ZyB1cCBhbmQgZW5zdXJpbmcgdGhpbmdzIGFyZSBva2F5LgogCiAgICAgICAgIEFyZ3M6Ci0gICAg
ICAgICAgdGVzdF9pbnB1dDogYSBUZXN0SW5wdXQgb2JqZWN0CisgICAgICAgICAgZHJpdmVyX2lu
cHV0OiBhIERyaXZlcklucHV0IG9iamVjdAogCi0gICAgICAgIFJldHVybnMgYSBUZXN0T3V0cHV0
IG9iamVjdC4KKyAgICAgICAgUmV0dXJucyBhIERyaXZlck91dHB1dCBvYmplY3QuCiAgICAgICAg
ICIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEcml2ZXIucnVuX3Rlc3Qn
KQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bS5weQppbmRleCBiOTA0MjFhZGZlYjA4YjA5NDMwMTE5ZmYyZWZiZGUyODQ4NWMzMjhm
Li40ODk2ZmY3NzJiOTJjNWNjMGFmZWM4OTRlNmIxODQ0NjVmZGUyMTk1IDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKQEAg
LTQ2LDcgKzQ2LDYgQEAgaW1wb3J0IHdlYmJyb3dzZXIKIAogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLnBhdGggaW1wb3J0IGN5Z3BhdGgKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rfb3V0cHV0CiAKIGltcG9ydCBiYXNl
CiBpbXBvcnQgaHR0cF9zZXJ2ZXIKQEAgLTQ2NSw3ICs0NjQsNyBAQCBjbGFzcyBDaHJvbWl1bURy
aXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGUKICAgICAgICAg
cmV0dXJuIHNlbGYuX291dHB1dF9pbWFnZSgpCiAKLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVz
dF9pbnB1dCk6CisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6CiAgICAgICAg
IG91dHB1dCA9IFtdCiAgICAgICAgIGVycm9yID0gW10KICAgICAgICAgY3Jhc2ggPSBGYWxzZQpA
QCAtNDc1LDkgKzQ3NCw5IEBAIGNsYXNzIENocm9taXVtRHJpdmVyKGJhc2UuRHJpdmVyKToKIAog
ICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKIAotICAgICAgICB1cmkgPSBzZWxmLl9w
b3J0LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2lucHV0LmZpbGVuYW1lKQotICAgICAgICBjbWQgPSBz
ZWxmLl90ZXN0X3NoZWxsX2NvbW1hbmQodXJpLCB0ZXN0X2lucHV0LnRpbWVvdXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2hhc2gpCisg
ICAgICAgIHVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKGRyaXZlcl9pbnB1dC5maWxl
bmFtZSkKKyAgICAgICAgY21kID0gc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5kKHVyaSwgZHJpdmVy
X2lucHV0LnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
cml2ZXJfaW5wdXQuaW1hZ2VfaGFzaCkKICAgICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dy
aXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZShpbnB1dD1jbWQpCiAKICAgICAgICAgd2hpbGUgbm90
IGNyYXNoIGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKQEAgLTUxOSw3ICs1MTgsNyBAQCBj
bGFzcyBDaHJvbWl1bURyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgICAgICAobGluZSwgY3Jh
c2gpID0gc2VsZi5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKGlucHV0PU5vbmUpCiAKICAg
ICAgICAgcnVuX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKLSAgICAgICAgcmV0dXJu
IHRlc3Rfb3V0cHV0LlRlc3RPdXRwdXQoCisgICAgICAgIHJldHVybiBiYXNlLkRyaXZlck91dHB1
dCgKICAgICAgICAgICAgICcnLmpvaW4ob3V0cHV0KSwgc2VsZi5fb3V0cHV0X2ltYWdlX3dpdGhf
cmV0cnkoKSwgYWN0dWFsX2NoZWNrc3VtLAogICAgICAgICAgICAgY3Jhc2gsIHJ1bl90aW1lLCB0
aW1lb3V0LCAnJy5qb2luKGVycm9yKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQppbmRleCA0ZWQzNGU2NDg4ZWYyODQ3NTBjNjlm
ZDA1NGQwMzEwMGJlZWQ1YjZmLi5hMDgzNTJkNmMxZWNiNjIyYzc5ZjRmZjU1MzU5YWUyOTFlZmE1
MjM4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2RyeXJ1bi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2RyeXJ1bi5weQpAQCAtNTAsOCArNTAsNiBAQCBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9y
dCB0aW1lCiAKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9y
dCB0ZXN0X291dHB1dAotCiBpbXBvcnQgYmFzZQogaW1wb3J0IGZhY3RvcnkKIApAQCAtMTIyLDgg
KzEyMCw4IEBAIGNsYXNzIERyeXJ1bkRyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICBpbWFnZSA9IE5vbmUKICAgICAgICAgICAgIGhhc2ggPSBOb25lCi0gICAg
ICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KHRleHRfb3V0cHV0LCBpbWFnZSwgaGFz
aCwgRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGlt
ZSgpIC0gc3RhcnRfdGltZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHJldHVybiBiYXNlLkRyaXZl
ck91dHB1dCh0ZXh0X291dHB1dCwgaW1hZ2UsIGhhc2gsIEZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF90aW1lLCBGYWxzZSwgTm9uZSkK
IAogICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDkzNTg4MWMyNzZhMjc2
NDU1NjJlNDNlNTExYjJmNGY2ZTFjY2U5MTEuLjliMzM5NWM2YzJiYzg4MDEzMDE3Nzc2MjhiNTU4
MGU5OWFkMDIyOWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvdGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHkKQEAgLTM2LDggKzM2LDYgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBp
bXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9vdXRwdXQKLQogaW1wb3J0IGJhc2UKIAogCkBAIC0zMzEsMTAgKzMyOSwxMCBA
QCBjbGFzcyBUZXN0RHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ2V4Y2VwdGlvbiBmcm9tICcgKyB0ZXN0X25hbWUpCiAgICAgICAgIGlmIHRlc3QuaGFu
ZzoKICAgICAgICAgICAgIHRpbWUuc2xlZXAoKGZsb2F0KHRlc3RfaW5wdXQudGltZW91dCkgKiA0
KSAvIDEwMDAuMCkKLSAgICAgICAgcmV0dXJuIHRlc3Rfb3V0cHV0LlRlc3RPdXRwdXQodGVzdC5h
Y3R1YWxfdGV4dCwgdGVzdC5hY3R1YWxfaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3QuYWN0dWFsX2NoZWNrc3VtLCB0ZXN0LmNyYXNoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsIHRl
c3QudGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC5l
cnJvcikKKyAgICAgICAgcmV0dXJuIGJhc2UuRHJpdmVyT3V0cHV0KHRlc3QuYWN0dWFsX3RleHQs
IHRlc3QuYWN0dWFsX2ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dC5hY3R1YWxfY2hlY2tzdW0sIHRlc3QuY3Jhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsIHRlc3QudGltZW91dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QuZXJyb3IpCiAKICAgICBkZWYgc3RhcnQoc2Vs
Zik6CiAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC93ZWJraXQucHkKaW5kZXggYWZkZWJlYjJjODQ2ZWQ3Y2NkZmQyZmZlN2RiMDIx
YWQzMTUyMTNiOS4uY2EyZmZhYmQ4NzU1MmVkMjQ0OTljZjRiNTdlNzg3OGY5NzRjYTI4YiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQu
cHkKQEAgLTQ3LDcgKzQ3LDYgQEAgaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgc2h1dGlsCiAKIGlt
cG9ydCB3ZWJraXRweS5jb21tb24uc3lzdGVtLm9zcGF0aCBhcyBvc3BhdGgKLWltcG9ydCB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9vdXRwdXQgYXMgdGVzdF9vdXRw
dXQKIGltcG9ydCB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5iYXNlIGFzIGJhc2UKIGltcG9y
dCB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJfcHJvY2VzcyBhcyBzZXJ2ZXJfcHJv
Y2VzcwogCkBAIC00MTksMTUgKzQxOCwxNSBAQCBjbGFzcyBXZWJLaXREcml2ZXIoYmFzZS5Ecml2
ZXIpOgogICAgICAgICByZXR1cm4KIAogICAgICMgRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgaHVn
ZS4KLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6Ci0gICAgICAgIHVyaSA9IHNl
bGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisgICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6CisgICAgICAgIHVyaSA9IHNlbGYuX3BvcnQuZmls
ZW5hbWVfdG9fdXJpKGRyaXZlcl9pbnB1dC5maWxlbmFtZSkKICAgICAgICAgaWYgdXJpLnN0YXJ0
c3dpdGgoImZpbGU6Ly8vIik6CiAgICAgICAgICAgICBjb21tYW5kID0gdXJpWzc6XQogICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgY29tbWFuZCA9IHVyaQogCi0gICAgICAgIGlmIHRlc3RfaW5w
dXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgdGVzdF9pbnB1dC5p
bWFnZV9oYXNoCisgICAgICAgIGlmIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoOgorICAgICAgICAg
ICAgY29tbWFuZCArPSAiJyIgKyBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaAogICAgICAgICBjb21t
YW5kICs9ICJcbiIKIAogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKQEAgLTQzOCw3
ICs0MzcsNyBAQCBjbGFzcyBXZWJLaXREcml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAgICBvdXRw
dXQgPSBzdHIoKSAgIyBVc2UgYSBieXRlIGFycmF5IGZvciBvdXRwdXQsIGV2ZW4gdGhvdWdoIGl0
IHNob3VsZCBiZSBVVEYtOC4KICAgICAgICAgaW1hZ2UgPSBzdHIoKQogCi0gICAgICAgIHRpbWVv
dXQgPSBpbnQodGVzdF9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAorICAgICAgICB0aW1lb3V0ID0g
aW50KGRyaXZlcl9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAogICAgICAgICBkZWFkbGluZSA9IHRp
bWUudGltZSgpICsgdGltZW91dAogICAgICAgICBsaW5lID0gc2VsZi5fc2VydmVyX3Byb2Nlc3Mu
cmVhZF9saW5lKHRpbWVvdXQpCiAgICAgICAgIHdoaWxlIChub3Qgc2VsZi5fc2VydmVyX3Byb2Nl
c3MudGltZWRfb3V0CkBAIC00ODUsMTEgKzQ4NCwxMSBAQCBjbGFzcyBXZWJLaXREcml2ZXIoYmFz
ZS5Ecml2ZXIpOgogICAgICAgICAjIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2UgdGhlIHdyb25nIHNl
Y3Rpb24gb2YgY29kZSB0byBiZSBkb2luZwogICAgICAgICAjIHRoaXMgcmVzZXQgaW4uCiAgICAg
ICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLmVycm9yID0gIiIKLSAgICAgICAgcmV0dXJuIHRlc3Rf
b3V0cHV0LlRlc3RPdXRwdXQob3V0cHV0LCBpbWFnZSwgYWN0dWFsX2ltYWdlX2hhc2gsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLmNy
YXNoZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgp
IC0gc3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3MudGltZWRfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcikKKyAgICAgICAgcmV0dXJuIGJhc2UuRHJpdmVyT3V0cHV0KG91dHB1
dCwgaW1hZ2UsIGFjdHVhbF9pbWFnZV9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MuY3Jhc2hlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnRpbWVkX291dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAg
ICAgICAgIGlmIHNlbGYuX3NlcnZlcl9wcm9jZXNzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggYzQzMTc2
NWFlMmNmZDljNzA3MTBkODNjOWQ1OTlhOTc4YjUyZTMxNi4uZDQyZTg2MDI2OTc2ZTM3OThjN2E0
NzJhZjZiZDViYjAxNGMwOWZjMiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yNzcsOSArMjc3LDkgQEAg
ZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhl
bHA9IlNhdmUgYWxsIGdlbmVyYXRlZCByZXN1bHRzIGFzIG5ldyBiYXNlbGluZXMgIgogICAgICAg
ICAgICAgICAgICAiaW50byB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5LCBvdmVyd3JpdGluZyB3aGF0
ZXZlcidzICIKICAgICAgICAgICAgICAgICAgImFscmVhZHkgdGhlcmUuIiksCisgICAgICAgICMg
RklYTUU6IFJlbW92ZSAiLS1yZXNldC1yZXN1bHRzIiBvcHRpb24uCiAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCItLXJlc2V0LXJlc3VsdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAg
ICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iUmVzZXQgYW55IGV4aXN0aW5nIGJhc2VsaW5l
cyB0byB0aGUgIgotICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIHJlc3VsdHMiKSwKKyAgICAg
ICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkRlcGxpY2F0ZWQ6IFVzZSAtLW5ldy1iYXNlbGlu
ZSIpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1uby1zaG93LXJlc3VsdHMiLCBh
Y3Rpb249InN0b3JlX2ZhbHNlIiwKICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgZGVzdD0ic2hv
d19yZXN1bHRzIiwKICAgICAgICAgICAgIGhlbHA9IkRvbid0IGxhdW5jaCBhIGJyb3dzZXIgd2l0
aCByZXN1bHRzIGFmdGVyIHRoZSB0ZXN0cyAiCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRfXy5weQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhj
NTM5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9k
aWZmLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9p
bWFnZV9kaWZmLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQ2NmM4YTE3Y2Qx
Y2UyN2VjZmJmOTViMTAyZjhmNTc4ZTM1MThiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvaW1hZ2VfZGlmZi5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0j
IS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJDb21wYXJlcyB0aGUg
aW1hZ2Ugb3V0cHV0IG9mIGEgdGVzdCB0byB0aGUgZXhwZWN0ZWQgaW1hZ2Ugb3V0cHV0LgotCi1D
b21wYXJlcyBoYXNoZXMgZm9yIHRoZSBnZW5lcmF0ZWQgYW5kIGV4cGVjdGVkIGltYWdlcy4gSWYg
dGhlIG91dHB1dCBkb2Vzbid0Ci1tYXRjaCwgcmV0dXJucyBGYWlsdXJlSW1hZ2VIYXNoTWlzbWF0
Y2ggYW5kIG91dHB1dHMgYm90aCBoYXNoZXMgaW50byB0aGUgbGF5b3V0Ci10ZXN0IHJlc3VsdHMg
ZGlyZWN0b3J5LgotIiIiCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQK
LQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IGVycm5vCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9z
Ci1pbXBvcnQgc2h1dGlsCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNr
YWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0
X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQotCi0jIENhY2hlIHdoZXRoZXIgd2UgaGF2ZSB0
aGUgaW1hZ2VfZGlmZiBleGVjdXRhYmxlIGF2YWlsYWJsZS4KLV9jb21wYXJlX2F2YWlsYWJsZSA9
IFRydWUKLV9jb21wYXJlX21zZ19wcmludGVkID0gRmFsc2UKLQotX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcy5pbWFnZV9kaWZmIikKLQot
Ci1jbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKLQotICAgIGRl
ZiBfc2F2ZV9iYXNlbGluZV9maWxlcyhzZWxmLCBmaWxlbmFtZSwgaW1hZ2UsIGltYWdlX2hhc2gs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGluZSk6Ci0g
ICAgICAgICIiIlNhdmVzIG5ldyBiYXNlbGluZXMgZm9yIHRoZSBQTkcgYW5kIGNoZWNrc3VtLgot
Ci0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZmlsZW5hbWU6IHRlc3QgZmlsZW5hbWUKLSAgICAg
ICAgICBpbWFnZTogYSBpbWFnZSBvdXRwdXQKLSAgICAgICAgICBpbWFnZV9oYXNoOiBhIGNoZWNr
c3VtIG9mIHRoZSBpbWFnZQotICAgICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGluZTogd2hldGhl
ciB0byBnZW5lcmF0ZSBhIG5ldywgcGxhdGZvcm0tc3BlY2lmaWMKLSAgICAgICAgICAgIGJhc2Vs
aW5lLCBvciB1cGRhdGUgdGhlIGV4aXN0aW5nIG9uZQotICAgICAgICAiIiIKLSAgICAgICAgc2Vs
Zi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBpbWFnZSwgIi5wbmciLCBlbmNvZGluZz1O
b25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfbmV3X2Jhc2Vs
aW5lPWdlbmVyYXRlX25ld19iYXNlbGluZSkKLSAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9k
YXRhKGZpbGVuYW1lLCBpbWFnZV9oYXNoLCAiLmNoZWNrc3VtIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0ZV9uZXdfYmFzZWxpbmU9Z2VuZXJhdGVfbmV3X2Jhc2VsaW5lKQot
Ci0gICAgZGVmIF9jb3B5X2ltYWdlKHNlbGYsIGZpbGVuYW1lLCBhY3R1YWxfaW1hZ2UsIGV4cGVj
dGVkX2ltYWdlKToKLSAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICcu
cG5nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0PWFjdHVhbF9pbWFn
ZSwgZXhwZWN0ZWQ9ZXhwZWN0ZWRfaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuY29kaW5nPU5vbmUsIHByaW50X3RleHRfZGlmZnM9RmFsc2UpCi0KLSAgICBkZWYgX2Nv
cHlfaW1hZ2VfaGFzaChzZWxmLCBmaWxlbmFtZSwgYWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVk
X2ltYWdlX2hhc2gpOgotICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwg
Jy5jaGVja3N1bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFn
ZV9oYXNoLCBleHBlY3RlZF9pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmNvZGluZz0iYXNjaWkiLCBwcmludF90ZXh0X2RpZmZzPUZhbHNlKQotCi0gICAgZGVm
IF9jcmVhdGVfZGlmZl9pbWFnZShzZWxmLCBwb3J0LCBmaWxlbmFtZSwgYWN0dWFsX2ltYWdlLCBl
eHBlY3RlZF9pbWFnZSk6Ci0gICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRo
ZSBleHBlY3RlZC9hY3R1YWwgUE5Hcy4KLQotICAgICAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGlt
YWdlcyBhcmUgZGlmZmVyZW50LgotICAgICAgICAiIiIKLSAgICAgICAgZGlmZl9maWxlbmFtZSA9
IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5GSUxFTkFNRV9TVUZGSVhfQ09NUEFSRSkKLSAgICAg
ICAgcmV0dXJuIHBvcnQuZGlmZl9pbWFnZShhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlLCBk
aWZmX2ZpbGVuYW1lKQotCi0gICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIHBvcnQsIGZpbGVu
YW1lLCB0ZXN0X2FyZ3MsIGFjdHVhbF90ZXN0X291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQpOgotICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBD
b21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5kCi0gICAgICAgIGNo
ZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExheW91dFRlc3QgZGly
ZWN0b3J5LgotICAgICAgICAiIiIKLSAgICAgICAgZmFpbHVyZXMgPSBbXQotCi0gICAgICAgICMg
SWYgd2UgZGlkbid0IHByb2R1Y2UgYSBoYXNoIGZpbGUsIHRoaXMgdGVzdCBtdXN0IGJlIHRleHQt
b25seS4KLSAgICAgICAgaWYgYWN0dWFsX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2ggaXMgTm9uZToK
LSAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwotCi0gICAgICAgICMgSWYgd2UncmUgZ2VuZXJh
dGluZyBhIG5ldyBiYXNlbGluZSwgd2UgcGFzcy4KLSAgICAgICAgaWYgdGVzdF9hcmdzLm5ld19i
YXNlbGluZSBvciB0ZXN0X2FyZ3MucmVzZXRfcmVzdWx0czoKLSAgICAgICAgICAgIHNlbGYuX3Nh
dmVfYmFzZWxpbmVfZmlsZXMoZmlsZW5hbWUsIGFjdHVhbF90ZXN0X291dHB1dC5pbWFnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX3Rlc3Rfb3V0cHV0Lmlt
YWdlX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYXJn
cy5uZXdfYmFzZWxpbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKLQotICAgICAgICBp
ZiBub3QgZXhwZWN0ZWRfdGVzdF9vdXRwdXQuaW1hZ2U6Ci0gICAgICAgICAgICAjIFJlcG9ydCBh
IG1pc3NpbmcgZXhwZWN0ZWQgUE5HIGZpbGUuCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdl
KGZpbGVuYW1lLCBhY3R1YWxfdGVzdF9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUp
Ci0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUsIGFjdHVhbF90ZXN0
X291dHB1dC5pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdGVkX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2gpCi0gICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFpbHVyZXMKLSAgICAgICAgaWYgbm90IGV4cGVjdGVkX3Rlc3Rfb3V0cHV0LmltYWdlX2hh
c2g6Ci0gICAgICAgICAgICAjIFJlcG9ydCBhIG1pc3NpbmcgZXhwZWN0ZWQgY2hlY2tzdW0gZmls
ZS4KLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2UoZmlsZW5hbWUsIGFjdHVhbF90ZXN0X291
dHB1dC5pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9v
dXRwdXQuaW1hZ2UpCi0gICAgICAgICAgICBzZWxmLl9jb3B5X2ltYWdlX2hhc2goZmlsZW5hbWUs
IGFjdHVhbF90ZXN0X291dHB1dC5pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdGVkX2ltYWdlX2hhc2g9Tm9uZSkKLSAgICAgICAgICAgIGZhaWx1cmVz
LmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2VIYXNoKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFpbHVyZXMKLQotICAgICAgICBpZiBhY3R1YWxfdGVzdF9vdXRwdXQuaW1h
Z2VfaGFzaCA9PSBleHBlY3RlZF90ZXN0X291dHB1dC5pbWFnZV9oYXNoOgotICAgICAgICAgICAg
IyBIYXNoIG1hdGNoZWQgKG5vIGRpZmYgbmVlZGVkLCBva2F5IHRvIHJldHVybikuCi0gICAgICAg
ICAgICByZXR1cm4gZmFpbHVyZXMKLQotICAgICAgICBzZWxmLl9jb3B5X2ltYWdlKGZpbGVuYW1l
LCBhY3R1YWxfdGVzdF9vdXRwdXQuaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfdGVzdF9vdXRwdXQuaW1hZ2UpCi0gICAgICAgIHNlbGYuX2NvcHlfaW1hZ2VfaGFzaChm
aWxlbmFtZSwgYWN0dWFsX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2gsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dC5pbWFnZV9oYXNoKQotCi0gICAgICAg
ICMgRXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgdGhlIHJlc3VsdCBpbiBvbmUgY29kZXBhdGggYmVs
b3cgYnV0IHdlCi0gICAgICAgICMgc3RpbGwgbmVlZCB0byBjYWxsIENyZWF0ZUltYWdlRGlmZiBm
b3Igb3RoZXIgY29kZXBhdGhzLgotICAgICAgICBpbWFnZXNfYXJlX2RpZmZlcmVudCA9IHNlbGYu
X2NyZWF0ZV9kaWZmX2ltYWdlKHBvcnQsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF90ZXN0X291dHB1dC5pbWFn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZF90ZXN0X291dHB1dC5pbWFnZSkKLSAgICAgICAgaWYgbm90IGltYWdlc19hcmVf
ZGlmZmVyZW50OgotICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFp
bHVyZUltYWdlSGFzaEluY29ycmVjdCgpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoKCkpCi0K
LSAgICAgICAgcmV0dXJuIGZhaWx1cmVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVf
YmFzZV91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiZmNiNjhj
MDY4YWUzYzZhY2MwNDI0OTAwZjFiNGY2MmM5MmNmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAg
LTEsNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIiJUZXN0cyBzdHJheSB0ZXN0cyBub3Qg
Y292ZXJlZCBieSByZWd1bGFyIGNvZGUgcGF0aHMuIiIiCi0KLWltcG9ydCB0ZXN0X3R5cGVfYmFz
ZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9y
dCBNb2NrCi0KLQotY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVz
dF9jb21wYXJlX291dHB1dF9ub3RpbXBsZW1lbnRlZChzZWxmKToKLSAgICAgICAgdGVzdF90eXBl
ID0gdGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRlc3RfdHlwZS5jb21wYXJlX291dHB1
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgImZvby50eHQiLCAnJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF90eXBlX2Jhc2UuVGVzdEFyZ3VtZW50cygpLCAnRGVi
dWcnKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL3RleHRfZGlmZi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvdGV4dF9kaWZmLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDI1
MjYyOWQzZWI3YWY2NTBkM2JiMjUxYjdlMjRjMzU3Zjg2YmI5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAs
MCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0j
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQ29tcGFy
ZXMgdGhlIHRleHQgb3V0cHV0IG9mIGEgdGVzdCB0byB0aGUgZXhwZWN0ZWQgdGV4dCBvdXRwdXQu
Ci0KLUlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCwgcmV0dXJucyBGYWlsdXJlVGV4dE1pc21h
dGNoIGFuZCBvdXRwdXRzIHRoZSBkaWZmCi1maWxlcyBpbnRvIHRoZSBsYXlvdXQgdGVzdCByZXN1
bHRzIGRpcmVjdG9yeS4KLSIiIgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVt
ZW50Ci0KLWltcG9ydCBjb2RlY3MKLWltcG9ydCBlcnJubwotaW1wb3J0IGxvZ2dpbmcKLWltcG9y
dCBvcy5wYXRoCi0KLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCB0ZXN0X2ZhaWx1cmVzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVz
IGltcG9ydCB0ZXN0X3R5cGVfYmFzZQotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtp
dHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzLnRleHRfZGlmZiIpCi0KLQotY2xhc3MgVGVzdFRl
eHREaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6Ci0KLSAgICBkZWYgX2dldF9ub3Jt
YWxpemVkX291dHB1dF90ZXh0KHNlbGYsIG91dHB1dCk6Ci0gICAgICAgICIiIlJldHVybnMgdGhl
IG5vcm1hbGl6ZWQgdGV4dCBvdXRwdXQsIGkuZS4gdGhlIG91dHB1dCBpbiB3aGljaAotICAgICAg
ICB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVycyBhcmUgbm9ybWFsaXplZCB0byAiXG4iLiIiIgot
ICAgICAgICAjIFJ1bm5pbmcgdGVzdHMgb24gV2luZG93cyBwcm9kdWNlcyAiXHJcbiIuICBUaGUg
IlxuIiBwYXJ0IGlzIGhlbHBmdWxseQotICAgICAgICAjIGNoYW5nZWQgdG8gIlxyXG4iIGJ5IG91
ciBzeXN0ZW0gKFB5dGhvbi9DeWd3aW4pLCByZXN1bHRpbmcgaW4KLSAgICAgICAgIyAiXHJcclxu
Iiwgd2hlbiwgaW4gZmFjdCwgd2Ugd2FudGVkIHRvIGNvbXBhcmUgdGhlIHRleHQgb3V0cHV0IHdp
dGgKLSAgICAgICAgIyB0aGUgbm9ybWFsaXplZCB0ZXh0IGV4cGVjdGF0aW9uIGZpbGVzLgotICAg
ICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoIlxyXHJcbiIsICJcclxuIikucmVwbGFjZSgiXHJc
biIsICJcbiIpCi0KLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUs
IHRlc3RfYXJncywgYWN0dWFsX3Rlc3Rfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0ZWRfdGVzdF9vdXRwdXQpOgotICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBDb21w
YXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgdGV4dCBhZ2FpbnN0Ci0gICAgICAgIHRo
ZSBleHBlY3RlZCB0ZXh0IGZyb20gdGhlIExheW91dFRlc3QgZGlyZWN0b3J5LiIiIgotICAgICAg
ICBmYWlsdXJlcyA9IFtdCi0KLSAgICAgICAgIyBJZiB3ZSdyZSBnZW5lcmF0aW5nIGEgbmV3IGJh
c2VsaW5lLCB3ZSBwYXNzLgotICAgICAgICBpZiB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lIG9yIHRl
c3RfYXJncy5yZXNldF9yZXN1bHRzOgotICAgICAgICAgICAgIyBBbHRob3VnaCBhbGwgdGVzdF9z
aGVsbC9EdW1wUmVuZGVyVHJlZSBvdXRwdXQgc2hvdWxkIGJlIHV0Zi04LAotICAgICAgICAgICAg
IyB3ZSBkbyBub3QgZXZlciBkZWNvZGUgaXQgaW5zaWRlIHJ1bi13ZWJraXQtdGVzdHMuICBGb3Ig
c29tZSB0ZXN0cwotICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBtYXkgbm90IG91dHB1dCB1
dGYtOCB0ZXh0IChlLmcuIHdlYmFyY2hpdmVzKS4KLSAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFz
ZWxpbmVfZGF0YShmaWxlbmFtZSwgYWN0dWFsX3Rlc3Rfb3V0cHV0LnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIi50eHQiLCBlbmNvZGluZz1Ob25lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGluZT10ZXN0
X2FyZ3MubmV3X2Jhc2VsaW5lKQotICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCi0KLSAgICAg
ICAgIyBOb3JtYWxpemUgdGV4dCB0byBkaWZmCi0gICAgICAgIGFjdHVhbF90ZXh0ID0gc2VsZi5f
Z2V0X25vcm1hbGl6ZWRfb3V0cHV0X3RleHQoYWN0dWFsX3Rlc3Rfb3V0cHV0LnRleHQpCi0gICAg
ICAgICMgQXNzdW1pbmcgZXhwZWN0ZWRfdGV4dCBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQuCi0gICAg
ICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF90ZXN0X291dHB1dC50ZXh0Ci0KLSAgICAgICAg
IyBXcml0ZSBvdXRwdXQgZmlsZXMgZm9yIG5ldyB0ZXN0cywgdG9vLgotICAgICAgICBpZiBwb3J0
LmNvbXBhcmVfdGV4dChhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6Ci0gICAgICAgICAgICAj
IFRleHQgZG9lc24ndCBtYXRjaCwgd3JpdGUgb3V0cHV0IGZpbGVzLgotICAgICAgICAgICAgc2Vs
Zi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICIudHh0IiwgYWN0dWFsX3RleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0LCBlbmNvZGluZz1O
b25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdGV4dF9kaWZm
cz1UcnVlKQotCi0gICAgICAgICAgICBpZiBleHBlY3RlZF90ZXh0ID09ICcnOgotICAgICAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nUmVzdWx0
KCkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUZXh0TWlzbWF0Y2goKSkKLQotICAgICAgICByZXR1cm4gZmFp
bHVyZXMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79587</attachid>
            <date>2011-01-20 05:33:35 -0800</date>
            <delta_ts>2011-01-20 13:48:04 -0800</delta_ts>
            <desc>patch-in-progress2</desc>
            <filename>bug-51091-20110120223333.patch</filename>
            <type>text/plain</type>
            <size>55706</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiMjBk
ZmNiMWMxYTNlZmUyYWU2YjIzMmE1NzRjYmRmZjIxYzdlZGFiLi5jOTRiZDg1YmRjMTAzMGM1NzA2
MmNiNzk2ZTM3NzFkMmU4NGJkNzg3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDEtMTIgIEhheWF0byBJdG8g
IDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtOUldUXSBBZGQgc2luZ2xlX3Rlc3RfcnVubmVyIHdoaWNoIGlzIGFs
dGVybmF0aXZlIGZvciBhbGwgdGVzdF90eXBlcy8qCisgICAgICAgIGNsYXNzZXMuCisKKyAgICAg
ICAgSSBhbSBub3QgYSBiaWcgZmFuIG9mIGN1cnJlbnQgdGVzdF90eXBlLyogY2xhc3Nlcy4gVGhl
eSBhcmUgcHJldHR5CisgICAgICAgIGtsdWRneSBhdCB0aGlzIHBvaW50LiBUaGF0IGNsYXNzIGhp
ZXJhbGNoeSBkb2Vzbid0IGdpdmUgdXMgc2lnbmlmaWNhbnQKKyAgICAgICAgYmVuZWZpdHMgYXQg
dGhpcyBwb2ludC4gSXQgaXMgZGlmZnVjdWx0IHRvIGFkZCBuZXcgdGVzdCB0eXBlLCBzdWNoIGFz
CisgICAgICAgIHJlZnRlc3RzLgorCisgICAgICAgIFNvIEkganVzdCBpbnRyb2R1Y2VkIHNpbmds
ZV90ZXN0X3J1bm5lciwgd2hpY2ggc2ltcGx5IGRvZXMgYWxsIGNvbXBhcmUgdGFza3MsCisgICAg
ICAgIHRleHQgYW5kIGltYWdlIGNvbXBhcmVzLgorICAgICAgICBJIGFsc28gaW50cm9kdWNlZCB0
ZXN0X3Jlc3VsdF93cml0ZXIgd2hpY2ggdGFrZXMgYSByZXNwb25zaWJpbGl0eSBvZgorICAgICAg
ICB3cml0aW5nIGEgdGVzdCByZXN1bHQgdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3Rv
cnkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
MDkxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3Rfb3V0cHV0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcmVzdWx0X3dyaXRlci5weTogUmVuYW1l
ZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVz
dF90eXBlX2Jhc2UucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRfXy5weTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYu
cHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVz
dF90eXBlcy90ZXN0X3R5cGVfYmFzZV91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weTogUmVt
b3ZlZC4KKwogMjAxMS0wMS0xOSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBNaWhhaSBQYXJwYXJpdGEuCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRl
cl90cmVlX3RocmVhZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDRkNmI1ZjZkNWVj
Y2RiMDVjZjBmOThhMDIxMjA3YzI4NTljN2NiMjUuLjkwYWIwMmFhMDE5YzVkZTEyY2ViNWQwYWZm
OTIyNDRkZDVhZDBmYzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC00OSw4MyArNDksMTEgQEAgaW1wb3J0IHRocmVhZAogaW1w
b3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAotCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy50ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCi0KK2ltcG9ydCBzaW5nbGVfdGVzdF9y
dW5uZXIKIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCi1pbXBvcnQgdGVzdF9vdXRwdXQKIGltcG9ydCB0
ZXN0X3Jlc3VsdHMKIAotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1wX3Jl
bmRlcl90cmVlX3RocmVhZCIpCi0KLQotZGVmIF9leHBlY3RlZF90ZXN0X291dHB1dChwb3J0LCBm
aWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJucyBhbiBleHBlY3RlZCBUZXN0T3V0cHV0IG9iamVjdC4i
IiIKLSAgICByZXR1cm4gdGVzdF9vdXRwdXQuVGVzdE91dHB1dChwb3J0LmV4cGVjdGVkX3RleHQo
ZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuZXhwZWN0
ZWRfaW1hZ2UoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cnQuZXhwZWN0ZWRfY2hlY2tzdW0oZmlsZW5hbWUpKQotCi1kZWYgX3Byb2Nlc3Nfb3V0cHV0KHBv
cnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKLSAgICAgICAg
ICAgICAgICAgICAgdGVzdF9vdXRwdXQsIHdvcmtlcl9uYW1lKToKLSAgICAiIiJSZWNlaXZlcyB0
aGUgb3V0cHV0IGZyb20gYSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBpdCB0byBh
Ci0gICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVyZSB0eXBl
cyB0aGUgdGVzdCBwcm9kdWNlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBwb3J0OiBwb3J0LXNwZWNp
ZmljIGhvb2tzCi0gICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1bWVudCBm
cm9tIG9wdHBhcnNlCi0gICAgICBwcm9jOiBhbiBhY3RpdmUgRHVtcFJlbmRlclRyZWUgcHJvY2Vz
cwotICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUg
YW5kIHRpbWVvdXQKLSAgICAgIHRlc3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0byBzdWJq
ZWN0IHRoZSBvdXRwdXQgdG8KLSAgICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJlIHBhc3Nl
ZCB0byBlYWNoIHRlc3QKLSAgICAgIHRlc3Rfb3V0cHV0OiBhIFRlc3RPdXRwdXQgb2JqZWN0IGNv
bnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdAotICAgICAgd29ya2VyX25hbWU6IHdvcmtl
ciBuYW1lIGZvciBsb2dnaW5nCi0KLSAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0Ci0g
ICAgIiIiCi0gICAgZmFpbHVyZXMgPSBbXQotICAgIGZzID0gcG9ydC5fZmlsZXN5c3RlbQotCi0g
ICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVDcmFzaCgpKQotICAgIGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6Ci0gICAg
ICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCi0KLSAg
ICB0ZXN0X25hbWUgPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxl
bmFtZSkKLSAgICBpZiB0ZXN0X291dHB1dC5jcmFzaDoKLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMg
U3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAod29ya2VyX25hbWUsIHRlc3RfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQu
ZXJyb3IpKQotICAgICAgICBmaWxlbmFtZSA9IGZzLmpvaW4ob3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSwgdGVzdF9uYW1lKQotICAgICAgICBmaWxlbmFtZSA9IGZzLnNwbGl0ZXh0KGZpbGVuYW1l
KVswXSArICItc3RhY2sudHh0IgotICAgICAgICBmcy5tYXliZV9tYWtlX2RpcmVjdG9yeShmcy5k
aXJuYW1lKGZpbGVuYW1lKSkKLSAgICAgICAgZnMud3JpdGVfdGV4dF9maWxlKGZpbGVuYW1lLCB0
ZXN0X291dHB1dC5lcnJvcikKLSAgICBlbGlmIHRlc3Rfb3V0cHV0LmVycm9yOgotICAgICAgICBf
bG9nLmRlYnVnKCIlcyAlcyBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUgKHdvcmtlcl9uYW1l
LCB0ZXN0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9vdXRwdXQuZXJyb3IpKQotCi0gICAgZXhwZWN0ZWRfdGVzdF9vdXRw
dXQgPSBfZXhwZWN0ZWRfdGVzdF9vdXRwdXQocG9ydCwgdGVzdF9pbnB1dC5maWxlbmFtZSkKLQot
ICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KLSAgICBzdGFydF90
aW1lID0gdGltZS50aW1lKCkKLSAgICB0aW1lX2Zvcl9kaWZmcyA9IHt9Ci0gICAgZm9yIHRlc3Rf
dHlwZSBpbiB0ZXN0X3R5cGVzOgotICAgICAgICBzdGFydF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUo
KQotICAgICAgICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQocG9ydCwg
dGVzdF9pbnB1dC5maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3RfYXJncywgdGVzdF9vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCkKLSAgICAg
ICAgIyBEb24ndCBhZGQgYW55IG1vcmUgZmFpbHVyZXMgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jh
c2gsIHNvIHdlIGRvbid0Ci0gICAgICAgICMgZG91YmxlLXJlcG9ydCB0aG9zZSB0ZXN0cy4gV2Ug
ZG8gZG91YmxlLXJlcG9ydCBmb3IgdGltZW91dHMgc2luY2UKLSAgICAgICAgIyB3ZSBzdGlsbCB3
YW50IHRvIHNlZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgotICAgICAgICBpZiBub3QgdGVz
dF9vdXRwdXQuY3Jhc2g6Ci0gICAgICAgICAgICBmYWlsdXJlcy5leHRlbmQobmV3X2ZhaWx1cmVz
KQotICAgICAgICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9
ICgKLSAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQotCi0gICAgdG90
YWxfdGltZV9mb3JfYWxsX2RpZmZzID0gdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUKLSAg
ICByZXR1cm4gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFp
bHVyZXMsIHRlc3Rfb3V0cHV0LnRlc3RfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykKK19sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCiBkZWYgX3BhZF90aW1lb3V0KHRpbWVv
dXQpOgpAQCAtMTQzLDI0ICs3MSw2IEBAIGRlZiBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMobXNl
Y3MpOgogICAgIHJldHVybiBmbG9hdChtc2VjcykgLyAxMDAwLjAKIAogCi1kZWYgX3Nob3VsZF9m
ZXRjaF9leHBlY3RlZF9jaGVja3N1bShvcHRpb25zKToKLSAgICByZXR1cm4gb3B0aW9ucy5waXhl
bF90ZXN0cyBhbmQgbm90IChvcHRpb25zLm5ld19iYXNlbGluZSBvciBvcHRpb25zLnJlc2V0X3Jl
c3VsdHMpCi0KLQotZGVmIF9ydW5fc2luZ2xlX3Rlc3QocG9ydCwgb3B0aW9ucywgdGVzdF9pbnB1
dCwgdGVzdF90eXBlcywgdGVzdF9hcmdzLCBkcml2ZXIsIHdvcmtlcl9uYW1lKToKLSAgICAjIEZJ
WE1FOiBQdWxsIHRoaXMgaW50byBUZXN0U2hlbGxUaHJlYWQuX3J1bigpLgotCi0gICAgIyBUaGUg
aW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCi0g
ICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1
ZSBpZiB3ZQotICAgICMgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNl
LCBhbiBpbWFnZSBmcm9tIGEKLSAgICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRv
IHRoZSBiYXNlbGluZS4iIiIKLSAgICBpZiBfc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3Vt
KG9wdGlvbnMpOgotICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2hhc2ggPSBwb3J0LmV4cGVjdGVk
X2NoZWNrc3VtKHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0gICAgdGVzdF9vdXRwdXQgPSBkcml2ZXIu
cnVuX3Rlc3QodGVzdF9pbnB1dCkKLSAgICByZXR1cm4gX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9w
dGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LCB3b3JrZXJfbmFtZSkKLQotCiBjbGFzcyBTaW5nbGVU
ZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICIiIlRocmVhZCB3cmFwcGVyIGZvciBy
dW5uaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4iIiIKIApAQCAtMTk2LDEwICsxMDYsOCBAQCBjbGFz
cyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAjIGluIGNvdmVy
YWdlOiBzZWUgaHR0cDovL2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkvaXNzdWUvODUuCiAg
ICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3Jr
ZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLl90
ZXN0X3Jlc3VsdCA9IF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
aW5wdXQsIHNlbGYuX3Rlc3RfdHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYuX2RyaXZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25hbWUpCisgICAgICAgIHNl
bGYuX3Rlc3RfcmVzdWx0ID0gc2luZ2xlX3Rlc3RfcnVubmVyLnJ1bl9zaW5nbGVfdGVzdCgKKyAg
ICAgICAgICAgIHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHNlbGYuX3Rlc3RfaW5wdXQsIHNl
bGYuX2RyaXZlciwgc2VsZi5fbmFtZSkKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQogCiAg
ICAgZGVmIGdldF90ZXN0X3Jlc3VsdChzZWxmKToKQEAgLTI3NCwxMiArMTgyLDYgQEAgY2xhc3Mg
VGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIHNlbGYuX2h0dHBfbG9j
a193YWl0X2JlZ2luID0gMAogICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSAwCiAK
LSAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtdCi0gICAgICAgIGZvciBjbHMgaW4gc2VsZi5f
Z2V0X3Rlc3RfdHlwZV9jbGFzc2VzKCk6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFw
cGVuZChjbHMoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKLSAgICAgICAgc2VsZi5fdGVz
dF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVyKQotCiAgICAgICAgICMg
Q3VycmVudCBncm91cCBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgogICAgICAgICBzZWxmLl9jdXJy
ZW50X2dyb3VwID0gTm9uZQogICAgICAgICAjIE51bWJlciBvZiB0ZXN0cyBpbiBzZWxmLl9jdXJy
ZW50X2dyb3VwLgpAQCAtMjg3LDIwICsxODksNiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0
Y2hhYmxlVGhyZWFkKToKICAgICAgICAgIyBUaW1lIGF0IHdoaWNoIHdlIHN0YXJ0ZWQgcnVubmlu
ZyB0ZXN0cyBmcm9tIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCiAgICAgICAgIHNlbGYuX2N1cnJlbnRf
Z3JvdXBfc3RhcnRfdGltZSA9IE5vbmUKIAotICAgIGRlZiBfZ2V0X3Rlc3RfYXJncyhzZWxmLCB3
b3JrZXJfbnVtYmVyKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRz
IGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIiIgotICAgICAgICB0ZXN0X2FyZ3Mg
PSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKLSAgICAgICAgdGVzdF9hcmdzLm5ld19i
YXNlbGluZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCi0gICAgICAgIHRlc3RfYXJncy5y
ZXNldF9yZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCi0KLSAgICAgICAgcmV0
dXJuIHRlc3RfYXJncwotCi0gICAgZGVmIF9nZXRfdGVzdF90eXBlX2NsYXNzZXMoc2VsZik6Ci0g
ICAgICAgIGNsYXNzZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KLSAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGltYWdl
X2RpZmYuSW1hZ2VEaWZmKQotICAgICAgICByZXR1cm4gY2xhc3NlcwotCiAgICAgZGVmIGdldF90
ZXN0X2dyb3VwX3RpbWluZ19zdGF0cyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Rp
b25hcnkgbWFwcGluZyB0ZXN0IGdyb3VwIHRvIGEgdHVwbGUgb2YKICAgICAgICAgKG51bWJlciBv
ZiB0ZXN0cyBpbiB0aGF0IGdyb3VwLCB0aW1lIHRvIHJ1biB0aGUgdGVzdHMpIiIiCkBAIC01MTgs
OSArNDA2LDggQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAg
ICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vjb25kc190b19zZWNvbmRzKAogICAgICAgICAg
ICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50aW1lb3V0KSkpCiAgICAgICAgIHNlbGYu
X25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3RpbWVvdXQKLSAgICAgICAgdGVz
dF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHRl
c3RfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90
ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9kcml2ZXIsIHNlbGYuX25hbWUpCisgICAgICAgIHRlc3RfcmVzdWx0
ID0gc2luZ2xlX3Rlc3RfcnVubmVyLnJ1bl9zaW5nbGVfdGVzdCgKKyAgICAgICAgICAgIHNlbGYu
X3BvcnQsIHNlbGYuX29wdGlvbnMsIHRlc3RfaW5wdXQsIHNlbGYuX2RyaXZlciwgc2VsZi5fbmFt
ZSkKICAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzLmFwcGVuZCh0ZXN0X3Jlc3VsdCkKICAgICAg
ICAgcmV0dXJuIHRlc3RfcmVzdWx0CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90ZXN0X3J1bm5lci5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90
ZXN0X3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGY1OTFhZmM1ZWI5ZDMwZGQ5NTcxZGYyYjcxYjI1
MDZkNzU1MzYzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CkBAIC0wLDAgKzEs
MjQ3IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBh
cnNlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK19sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKKworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
LmJhc2UgaW1wb3J0IERyaXZlcklucHV0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
LmJhc2UgaW1wb3J0IERyaXZlck91dHB1dAorCitpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB0
ZXN0X3Jlc3VsdF93cml0ZXIgaW1wb3J0IFRlc3RSZXN1bHRXcml0ZXIKK2Zyb20gdGVzdF9yZXN1
bHRzIGltcG9ydCBUZXN0UmVzdWx0CisKKworZGVmIHJ1bl9zaW5nbGVfdGVzdChwb3J0LCBvcHRp
b25zLCB0ZXN0X2lucHV0LCBkcml2ZXIsIHdvcmtlcl9uYW1lKToKKyAgICAjIEZJWE1FOiBQdWxs
IHRoaXMgaW50byBUZXN0U2hlbGxUaHJlYWQuX3J1bigpLgorICAgIHJ1bm5lciA9IFNpbmdsZVRl
c3RSdW5uZXIob3B0aW9ucywgcG9ydCwgZHJpdmVyLCB0ZXN0X2lucHV0LCB3b3JrZXJfbmFtZSkK
KyAgICByZXR1cm4gcnVubmVyLnJ1bigpCisKKworY2xhc3MgRXhwZWN0ZWREcml2ZXJPdXRwdXQ6
CisgICAgIiIiR3JvdXBzIGluZm9ybWF0aW9uIGFib3V0IGFuIGV4cGVjdGVkIGRyaXZlciBvdXRw
dXQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGltYWdlLCBpbWFnZV9oYXNoKToK
KyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorICAgICAgICBzZWxmLmltYWdlID0gaW1hZ2UKKyAg
ICAgICAgc2VsZi5pbWFnZV9oYXNoID0gaW1hZ2VfaGFzaAorCisKK2NsYXNzIFNpbmdsZVRlc3RS
dW5uZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcG9ydCwgZHJpdmVyLCB0
ZXN0X2lucHV0LCB3b3JrZXJfbmFtZSk6CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25z
CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2RyaXZlciA9IGRyaXZl
cgorICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHRlc3RfaW5wdXQuZmlsZW5hbWUKKyAgICAgICAg
c2VsZi5fdGltZW91dCA9IHRlc3RfaW5wdXQudGltZW91dAorICAgICAgICBzZWxmLl93b3JrZXJf
bmFtZSA9IHdvcmtlcl9uYW1lCisgICAgICAgIHNlbGYuX3Rlc3RuYW1lID0gcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisKKyAgICBkZWYgX2V4cGVjdGVk
X2RyaXZlcl9vdXRwdXQoc2VsZik6CisgICAgICAgIHJldHVybiBFeHBlY3RlZERyaXZlck91dHB1
dChzZWxmLl9wb3J0LmV4cGVjdGVkX3RleHQoc2VsZi5fZmlsZW5hbWUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9pbWFnZShzZWxmLl9m
aWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0
LmV4cGVjdGVkX2NoZWNrc3VtKHNlbGYuX2ZpbGVuYW1lKSkKKworICAgIGRlZiBfc2hvdWxkX2Zl
dGNoX2V4cGVjdGVkX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX29wdGlv
bnMucGl4ZWxfdGVzdHMgYW5kCisgICAgICAgICAgICAgICAgbm90IChzZWxmLl9vcHRpb25zLm5l
d19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMpKQorCisgICAgZGVmIF9k
cml2ZXJfaW5wdXQoc2VsZik6CisgICAgICAgICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0byBh
dm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQorICAgICAgICAjIGNoZWNrc3VtcyBtYXRj
aCwgc28gaXQgc2hvdWxkIGJlIHNldCB0byBhIGJsYW5rIHZhbHVlIGlmIHdlCisgICAgICAgICMg
YXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9t
IGEKKyAgICAgICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxp
bmUuIiIiCisgICAgICAgIGltYWdlX2hhc2ggPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3Nob3Vs
ZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bSgpOgorICAgICAgICAgICAgaW1hZ2VfaGFzaCA9IHNl
bGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZi5fZmlsZW5hbWUpCisgICAgICAgIHJldHVy
biBEcml2ZXJJbnB1dChzZWxmLl9maWxlbmFtZSwgc2VsZi5fdGltZW91dCwgaW1hZ2VfaGFzaCkK
KworICAgIGRlZiBfZ2V0X25vcm1hbGl6ZWRfb3V0cHV0X3RleHQoc2VsZiwgdGV4dCk6CisgICAg
ICAgICIiIlJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdGV4dCBvdXRwdXQsIGkuZS4gdGhlIG91dHB1
dCBpbiB3aGljaAorICAgICAgICB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVycyBhcmUgbm9ybWFs
aXplZCB0byAiXG4iLiIiIgorICAgICAgICAjIFJ1bm5pbmcgdGVzdHMgb24gV2luZG93cyBwcm9k
dWNlcyAiXHJcbiIuICBUaGUgIlxuIiBwYXJ0IGlzIGhlbHBmdWxseQorICAgICAgICAjIGNoYW5n
ZWQgdG8gIlxyXG4iIGJ5IG91ciBzeXN0ZW0gKFB5dGhvbi9DeWd3aW4pLCByZXN1bHRpbmcgaW4K
KyAgICAgICAgIyAiXHJcclxuIiwgd2hlbiwgaW4gZmFjdCwgd2Ugd2FudGVkIHRvIGNvbXBhcmUg
dGhlIHRleHQgb3V0cHV0IHdpdGgKKyAgICAgICAgIyB0aGUgbm9ybWFsaXplZCB0ZXh0IGV4cGVj
dGF0aW9uIGZpbGVzLgorICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKCJcclxyXG4iLCAiXHJc
biIpLnJlcGxhY2UoIlxyXG4iLCAiXG4iKQorCisgICAgZGVmIF9jb21wYXJlX3RleHQoc2VsZiwg
YWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgorICAgICAgICBmYWlsdXJlcyA9IFtdCisgICAg
ICAgIGlmIHNlbGYuX3BvcnQuY29tcGFyZV90ZXh0KGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0
KToKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3RleHQgPT0gJyc6CisgICAgICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1bHQoKSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFp
bHVyZXMuRmFpbHVyZVRleHRNaXNtYXRjaCgpKQorICAgICAgICByZXR1cm4gZmFpbHVyZXMKKwor
ICAgIGRlZiBfY29tcGFyZV9pbWFnZShzZWxmLCBvdXRwdXQsIGV4cGVjdGF0aW9ucyk6CisgICAg
ICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgIyBJZiB3ZSBkaWRuJ3QgcHJvZHVjZSBhIGhhc2gg
ZmlsZSwgdGhpcyB0ZXN0IG11c3QgYmUgdGV4dC1vbmx5LgorICAgICAgICBpZiBvdXRwdXQuaW1h
Z2VfaGFzaCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisgICAgICAgIGlm
IG5vdCBleHBlY3RhdGlvbnMuaW1hZ2U6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVz
dF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKCkpCisgICAgICAgIGVsaWYgbm90IGV4cGVj
dGF0aW9ucy5pbWFnZV9oYXNoOgorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFp
bHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2goKSkKKyAgICAgICAgZWxpZiBvdXRwdXQuaW1h
Z2VfaGFzaCAhPSBleHBlY3RhdGlvbnMuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGZhaWx1cmVz
LmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCgpKQorICAgICAg
ICByZXR1cm4gZmFpbHVyZXMKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0czoKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fcmViYXNlbGluZSgpCisgICAgICAgIHJldHVybiBz
ZWxmLl9ydW5fdGVzdCgpCisKKyAgICBkZWYgX3J1bl9yZWJhc2VsaW5lKHNlbGYpOgorICAgICAg
ICBkcml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1
dCgpKQorICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lcyhkcml2ZXJfb3V0cHV0KQorICAgICAg
ICBmYWlsdXJlcyA9IHNlbGYuX2hhbmRsZV9lcnJvcihkcml2ZXJfb3V0cHV0KQorICAgICAgICBy
ZXR1cm4gVGVzdFJlc3VsdChzZWxmLl9maWxlbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQu
dGVzdF90aW1lKQorCisgICAgZGVmIF9ydW5fdGVzdChzZWxmKToKKyAgICAgICAgZHJpdmVyX291
dHB1dCA9IHNlbGYuX2RyaXZlci5ydW5fdGVzdChzZWxmLl9kcml2ZXJfaW5wdXQoKSkKKyAgICAg
ICAgZHJpdmVyX291dHB1dC50ZXh0ID0gc2VsZi5fZ2V0X25vcm1hbGl6ZWRfb3V0cHV0X3RleHQo
ZHJpdmVyX291dHB1dC50ZXh0KQorICAgICAgICBleHBlY3RlZF9kcml2ZXJfb3V0cHV0ID0gc2Vs
Zi5fZXhwZWN0ZWRfZHJpdmVyX291dHB1dCgpCisKKyAgICAgICAgdGVzdF9yZXN1bHQgPSBzZWxm
Ll9jb21wYXJlX291dHB1dChkcml2ZXJfb3V0cHV0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0KQor
ICAgICAgICBzZWxmLl93cml0ZV9yZXN1bHRzX3RvX3Jlc3VsdF9kaXJlY3RvcnkodGVzdF9yZXN1
bHQuZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpCisgICAg
ICAgIHJldHVybiB0ZXN0X3Jlc3VsdAorCisgICAgZGVmIF9jb21wYXJlX291dHB1dChzZWxmLCBk
cml2ZXJfb3V0cHV0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0KToKKyAgICAgICAgZmFpbHVyZXMg
PSBbXQorICAgICAgICBmYWlsdXJlcy5leHRlbmQoc2VsZi5faGFuZGxlX2Vycm9yKGRyaXZlcl9v
dXRwdXQpKQorICAgICAgICBpc19jcmFzaCA9IGRyaXZlcl9vdXRwdXQuY3Jhc2gKKworICAgICAg
ICAjIFRleHQgY29tcGFyZQorICAgICAgICBpZiBub3QgaXNfY3Jhc2g6CisgICAgICAgICAgICAj
IERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjcmFzaCwg
c28gd2UgZG9uJ3QKKyAgICAgICAgICAgICMgZG91YmxlLXJlcG9ydCB0aG9zZSB0ZXN0cy4gV2Ug
ZG8gZG91YmxlLXJlcG9ydCBmb3IgdGltZW91dHMgc2luY2UKKyAgICAgICAgICAgICMgd2Ugc3Rp
bGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdlIG91dHB1dC4KKyAgICAgICAgICAgIGZh
aWx1cmVzLmV4dGVuZChzZWxmLl9jb21wYXJlX3RleHQoZHJpdmVyX291dHB1dC50ZXh0LCBleHBl
Y3RlZF9kcml2ZXJfb3V0cHV0LnRleHQpKQorCisgICAgICAgICMgSW1hZ2UgY29tcGFyZQorICAg
ICAgICBpZiBub3QgaXNfY3Jhc2ggYW5kIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIGRy
aXZlcl9vdXRwdXQuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxm
Ll9jb21wYXJlX2ltYWdlKGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpKQor
CisgICAgICAgIHRlc3RfcmVzdWx0ID0gVGVzdFJlc3VsdChzZWxmLl9maWxlbmFtZSwgZmFpbHVy
ZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1lKQorICAgICAgICByZXR1cm4gdGVzdF9yZXN1bHQK
KworICAgIGRlZiBfc2F2ZV9iYXNlbGluZXMoc2VsZiwgZHJpdmVyX291dHB1dCk6CisgICAgICAg
ICMgQWx0aG91Z2ggYWxsIHRlc3Rfc2hlbGwvRHVtcFJlbmRlclRyZWUgb3V0cHV0IHNob3VsZCBi
ZSB1dGYtOCwKKyAgICAgICAgIyB3ZSBkbyBub3QgZXZlciBkZWNvZGUgaXQgaW5zaWRlIHJ1bi13
ZWJraXQtdGVzdHMuICBGb3Igc29tZSB0ZXN0cworICAgICAgICAjIER1bXBSZW5kZXJUcmVlIG1h
eSBub3Qgb3V0cHV0IHV0Zi04IHRleHQgKGUuZy4gd2ViYXJjaGl2ZXMpLgorICAgICAgICBzZWxm
Ll9zYXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291dHB1dC50ZXh0LCAiLnR4dCIsIGVuY29kaW5n
PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9uZXdfYmFz
ZWxpbmU9c2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUpCisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMucGl4ZWxfdGVzdHMgYW5kIGRyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAg
IHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0LmltYWdlLCAiLnBuZyIsIGVu
Y29kaW5nPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVfbmV3X2Jhc2VsaW5lPXNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lKQorICAgICAgICAgICAg
c2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwgIi5jaGVj
a3N1bSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImFz
Y2lpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9uZXdf
YmFzZWxpbmU9c2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUpCisKKyAgICBkZWYgX3NhdmVfYmFz
ZWxpbmVfZGF0YShzZWxmLCBkYXRhLCBtb2RpZmllciwgZW5jb2RpbmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdGVfbmV3X2Jhc2VsaW5lPVRydWUpOgorICAgICAgICAiIiJT
YXZlcyBhIG5ldyBiYXNlbGluZSBmaWxlIGludG8gdGhlIHBvcnQncyBiYXNlbGluZSBkaXJlY3Rv
cnkuCisKKyAgICAgICAgVGhlIGZpbGUgd2lsbCBiZSBuYW1lZCBzaW1wbHkgIjx0ZXN0Pi1leHBl
Y3RlZDxtb2RpZmllcj4iLCBzdWl0YWJsZSBmb3IKKyAgICAgICAgdXNlIGFzIHRoZSBleHBlY3Rl
ZCByZXN1bHRzIGluIGEgbGF0ZXIgcnVuLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZGF0
YTogcmVzdWx0IHRvIGJlIHNhdmVkIGFzIHRoZSBuZXcgYmFzZWxpbmUKKyAgICAgICAgICBtb2Rp
ZmllcjogdHlwZSBvZiB0aGUgcmVzdWx0IGZpbGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgorICAg
ICAgICAgIGVuY29kaW5nOiBmaWxlIGVuY29kaW5nIChub25lLCAidXRmLTgiLCBldGMuKQorICAg
ICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGluZTogd2hldGhlciB0byBlbmVyYXRlIGEgbmV3LCBw
bGF0Zm9ybS1zcGVjaWZpYworICAgICAgICAgICAgYmFzZWxpbmUsIG9yIHVwZGF0ZSB0aGUgZXhp
c3Rpbmcgb25lCisgICAgICAgICIiIgorCisgICAgICAgIHBvcnQgPSBzZWxmLl9wb3J0CisgICAg
ICAgIGZzID0gcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBpZiBnZW5lcmF0ZV9uZXdfYmFzZWxp
bmU6CisgICAgICAgICAgICByZWxhdGl2ZV9kaXIgPSBmcy5kaXJuYW1lKHNlbGYuX3Rlc3RuYW1l
KQorICAgICAgICAgICAgYmFzZWxpbmVfcGF0aCA9IHBvcnQuYmFzZWxpbmVfcGF0aCgpCisgICAg
ICAgICAgICBvdXRwdXRfZGlyID0gZnMuam9pbihiYXNlbGluZV9wYXRoLCByZWxhdGl2ZV9kaXIp
CisgICAgICAgICAgICBvdXRwdXRfZmlsZSA9IGZzLmJhc2VuYW1lKGZzLnNwbGl0ZXh0KHNlbGYu
X2ZpbGVuYW1lKVswXSArCisgICAgICAgICAgICAgICAgIi1leHBlY3RlZCIgKyBtb2RpZmllcikK
KyAgICAgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCisgICAgICAg
ICAgICBvdXRwdXRfcGF0aCA9IGZzLmpvaW4ob3V0cHV0X2Rpciwgb3V0cHV0X2ZpbGUpCisgICAg
ICAgICAgICBfbG9nLmRlYnVnKCd3cml0aW5nIG5ldyBiYXNlbGluZSByZXN1bHQgIiVzIicgJSAo
b3V0cHV0X3BhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X3BhdGggPSBw
b3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYuX2ZpbGVuYW1lLCBtb2RpZmllcikKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ3Jlc2V0dGluZyBiYXNlbGluZSByZXN1bHQgIiVzIicgJSBvdXRwdXRf
cGF0aCkKKworICAgICAgICBwb3J0LnVwZGF0ZV9iYXNlbGluZShvdXRwdXRfcGF0aCwgZGF0YSwg
ZW5jb2RpbmcpCisKKyAgICBkZWYgX2hhbmRsZV9lcnJvcihzZWxmLCBkcml2ZXJfb3V0cHV0KToK
KyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LnRpbWVvdXQ6
CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91
dCgpKQorICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LmNyYXNoOgorICAgICAgICAgICAgZmFpbHVy
ZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisgICAgICAgICAgICBfbG9n
LmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlIChzZWxmLl93b3JrZXJfbmFtZSwg
c2VsZi5fdGVzdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkcml2ZXJfb3V0cHV0LmVycm9yKSkKKyAgICAgICAgZWxpZiBkcml2ZXJf
b3V0cHV0LmVycm9yOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgb3V0cHV0IHN0ZGVy
ciBsaW5lczpcbiVzIiAlIChzZWxmLl93b3JrZXJfbmFtZSwgc2VsZi5fdGVzdG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy
aXZlcl9vdXRwdXQuZXJyb3IpKQorICAgICAgICByZXR1cm4gZmFpbHVyZXMKKworICAgIGRlZiBf
d3JpdGVfcmVzdWx0c190b19yZXN1bHRfZGlyZWN0b3J5KHNlbGYsIGZhaWx1cmVzLCBkcml2ZXJf
b3V0cHV0LCBleHBlY3RhdGlvbnMpOgorICAgICAgICAjIEZJWE1FOiBUZXN0RmFpbHVyZSBjbGFz
cyBtYXkgaGF2ZSBhIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICB3cml0ZXIgPSBUZXN0UmVzdWx0
V3JpdGVyKHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHNlbGYu
X2ZpbGVuYW1lKQorICAgICAgICBmb3IgZmFpbHVyZSBpbiBmYWlsdXJlczoKKyAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWx1cmVzLkZh
aWx1cmVUZXh0TWlzbWF0Y2gpKToKKyAgICAgICAgICAgICAgICB3cml0ZXIuY29weV90ZXh0KGRy
aXZlcl9vdXRwdXQudGV4dCwgZXhwZWN0YXRpb25zLnRleHQpCisgICAgICAgICAgICAgICAgd3Jp
dGVyLmNyZWF0ZV90ZXh0X2RpZmYoZHJpdmVyX291dHB1dC50ZXh0LCBleHBlY3RhdGlvbnMudGV4
dCkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZh
aWx1cmVNaXNzaW5nSW1hZ2UpOgorICAgICAgICAgICAgICAgIHdyaXRlci5jb3B5X2ltYWdlKGRy
aXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCisgICAgICAgICAgICAgICAg
d3JpdGVyLmNvcHlfaW1hZ2VfaGFzaChkcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuaW1hZ2VfaGFzaCkK
KyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVzLkZhaWx1
cmVNaXNzaW5nSW1hZ2VIYXNoKToKKyAgICAgICAgICAgICAgICB3cml0ZXIuY29weV9pbWFnZShk
cml2ZXJfb3V0cHV0LmltYWdlLCBleHBlY3RhdGlvbnMuaW1hZ2UpCisgICAgICAgICAgICAgICAg
d3JpdGVyLmNvcHlfaW1hZ2VfaGFzaChkcml2ZXJfb3V0cHV0LmltYWdlX2hhc2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9pbWFnZV9oYXNoPU5vbmUp
CisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZmFpbHVyZSwgdGVzdF9mYWlsdXJlcy5GYWls
dXJlSW1hZ2VIYXNoTWlzbWF0Y2gpOgorICAgICAgICAgICAgICAgIHdyaXRlci5jb3B5X2ltYWdl
KGRyaXZlcl9vdXRwdXQuaW1hZ2UsIGV4cGVjdGF0aW9ucy5pbWFnZSkKKyAgICAgICAgICAgICAg
ICB3cml0ZXIuY29weV9pbWFnZV9oYXNoKGRyaXZlcl9vdXRwdXQuaW1hZ2VfaGFzaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5pbWFnZV9oYXNo
KQorICAgICAgICAgICAgICAgIGltYWdlc19hcmVfZGlmZmVyZW50ID0gd3JpdGVyLmNyZWF0ZV9k
aWZmX2ltYWdlKAorICAgICAgICAgICAgICAgICAgICBkcml2ZXJfb3V0cHV0LmltYWdlLCBleHBl
Y3RhdGlvbnMuaW1hZ2UpCisgICAgICAgICAgICAgICAgaWYgbm90IGltYWdlc19hcmVfZGlmZmVy
ZW50OgorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBIYW5kbGUgYSBjYXNlIGZvciB0ZXN0
X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3Q6CisgICAgICAgICAgICAgICAgICAg
IHBhc3MKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmYWlsdXJlLCB0ZXN0X2ZhaWx1cmVz
LkZhaWx1cmVDcmFzaCk6CisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NyYXNoX3JlcG9y
dChkcml2ZXJfb3V0cHV0LmVycm9yKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBhc3NlcnQgaXNpbnN0YW5jZShmYWlsdXJlLCAodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91
dCwpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvdGVzdF9pbnB1dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfaW5wdXQucHkKaW5kZXggNGIwMjdjMDRkMjIwZjVl
YTk2NGY5OTNmNGEyOGJkM2IwOTQwYzZjMS4uMGFlZDFkZDA5MDRkNzFiNDFjMmFlNjk4MTIzNWUy
YmRlNTZmMzIwZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9pbnB1dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2lucHV0LnB5CkBAIC00MSw3ICs0
MSwzIEBAIGNsYXNzIFRlc3RJbnB1dDoKICAgICAgICAgIyBGSVhNRTogZmlsZW5hbWUgc2hvdWxk
IHJlYWxseSBiZSB0ZXN0X25hbWUgYXMgYSByZWxhdGl2ZSBwYXRoLgogICAgICAgICBzZWxmLmZp
bGVuYW1lID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAotICAgICAg
ICAjIFRoZSBpbWFnZV9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBp
ZiB0aGUKLSAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2guIFRoZSBpbWFnZV9oYXNoIGlzIHNldCBs
YXRlciwgYW5kIG9ubHkgaWYgaXQgaXMgbmVlZGVkCi0gICAgICAgICMgZm9yIHRoZSB0ZXN0Lgot
ICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X291dHB1dC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfb3V0
cHV0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODA5YmU2MjVkNWJlOTM2ZTQz
MGNlN2MzYjQ2N2UwMDU1YzQ4YTg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3Rfb3V0cHV0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotIyBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMg
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLQotY2xhc3MgVGVzdE91dHB1dChvYmplY3QpOgotICAgICIiIkdyb3Vw
cyBpbmZvcm1hdGlvbiBhYm91dCBhIHRlc3Qgb3V0cHV0IGZvciBlYXN5IHBhc3Npbmcgb2YgZGF0
YS4KLQotICAgIFRoaXMgaXMgdXNlZCBub3Qgb25seSBmb3IgYSBhY3R1YWwgdGVzdCBvdXRwdXQs
IGJ1dCBhbHNvIGZvciBncm91cGluZwotICAgIGV4cGVjdGVkIHRlc3Qgb3V0cHV0LgotICAgICIi
IgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGltYWdlLCBpbWFnZV9oYXNoLAotICAg
ICAgICAgICAgICAgICBjcmFzaD1Ob25lLCB0ZXN0X3RpbWU9Tm9uZSwgdGltZW91dD1Ob25lLCBl
cnJvcj1Ob25lKToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBUZXN0T3V0cHV0IG9iamVjdC4K
LQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRleHQ6IGEgdGV4dCBvdXRwdXQKLSAgICAgICAg
ICBpbWFnZTogYW4gaW1hZ2Ugb3V0cHV0Ci0gICAgICAgICAgaW1hZ2VfaGFzaDogYSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgY2hlY2tzdW0gb2YgdGhlIGltYWdlCi0gICAgICAgICAgY3Jhc2g6IGEg
Ym9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciBjcmFzaGVkIG9uIHRoZSB0ZXN0
Ci0gICAgICAgICAgdGVzdF90aW1lOiBhIHRpbWUgd2hpY2ggdGhlIHRlc3QgaGFzIHRha2VuCi0g
ICAgICAgICAgdGltZW91dDogYSBib29sZWFuIGluZGljYXRpbmcgd2hlaHRlciB0aGUgdGVzdCB0
aW1lZCBvdXQKLSAgICAgICAgICBlcnJvcjogYW55IHVuZXhwZWN0ZWQgb3IgYWRkaXRpb25hbCAo
b3IgZXJyb3IpIHRleHQgb3V0cHV0Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLnRleHQgPSB0
ZXh0Ci0gICAgICAgIHNlbGYuaW1hZ2UgPSBpbWFnZQotICAgICAgICBzZWxmLmltYWdlX2hhc2gg
PSBpbWFnZV9oYXNoCi0gICAgICAgIHNlbGYuY3Jhc2ggPSBjcmFzaAotICAgICAgICBzZWxmLnRl
c3RfdGltZSA9IHRlc3RfdGltZQotICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0Ci0gICAg
ICAgIHNlbGYuZXJyb3IgPSBlcnJvcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9yZXN1bHRzLnB5
CmluZGV4IDA1NWY2NWI3MGUxMmM2MGEzNWZkZDQzM2M4OTE2OTg3OWIyN2ZkYjQuLmI4ODM0ZTgx
ZGRiYzNkN2EyOWM0NzgzZjNjZTlhNjUwMjY4MWI3ZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcmVzdWx0cy5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90
ZXN0X3Jlc3VsdHMucHkKQEAgLTM4LDEyICszOCwxMCBAQCBjbGFzcyBUZXN0UmVzdWx0KG9iamVj
dCk6CiAgICAgZGVmIGxvYWRzKHN0cik6CiAgICAgICAgIHJldHVybiBjUGlja2xlLmxvYWRzKHN0
cikKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZmFpbHVyZXM9Tm9uZSwgdGVz
dF9ydW5fdGltZT1Ob25lLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9Tm9uZSwgdGltZV9mb3Jf
ZGlmZnM9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmYWlsdXJlcz1O
b25lLCB0ZXN0X3J1bl90aW1lPU5vbmUpOgogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5h
bWUKICAgICAgICAgc2VsZi5mYWlsdXJlcyA9IGZhaWx1cmVzIG9yIFtdCiAgICAgICAgIHNlbGYu
dGVzdF9ydW5fdGltZSA9IHRlc3RfcnVuX3RpbWUgb3IgMAotICAgICAgICBzZWxmLnRvdGFsX3Rp
bWVfZm9yX2FsbF9kaWZmcyA9IHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyBvciAwCi0gICAgICAg
IHNlbGYudGltZV9mb3JfZGlmZnMgPSB0aW1lX2Zvcl9kaWZmcyBvciB7fSAgIyBGSVhNRTogV2h5
IGlzIHRoaXMgYSBkaWN0aW9uYXJ5PwogCiAgICAgICAgICMgRklYTUU6IFNldHRpbmcgdGhpcyBp
biB0aGUgY29uc3RydWN0b3IgbWFrZXMgdGhpcyBjbGFzcyBoYXJkIHRvIG11dGF0ZS4KICAgICAg
ICAgc2VsZi50eXBlID0gdGVzdF9mYWlsdXJlcy5kZXRlcm1pbmVfcmVzdWx0X3R5cGUoZmFpbHVy
ZXMpCkBAIC01MSw5ICs0OSw3IEBAIGNsYXNzIFRlc3RSZXN1bHQob2JqZWN0KToKICAgICBkZWYg
X19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgcmV0dXJuIChzZWxmLmZpbGVuYW1lID09IG90
aGVyLmZpbGVuYW1lIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMgPT0gb3RoZXIu
ZmFpbHVyZXMgYW5kCi0gICAgICAgICAgICAgICAgc2VsZi50ZXN0X3J1bl90aW1lID09IG90aGVy
LnRlc3RfcnVuX3RpbWUgYW5kCi0gICAgICAgICAgICAgICAgc2VsZi50aW1lX2Zvcl9kaWZmcyA9
PSBvdGhlci50aW1lX2Zvcl9kaWZmcyBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLnRvdGFsX3Rp
bWVfZm9yX2FsbF9kaWZmcyA9PSBvdGhlci50b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMpCisgICAg
ICAgICAgICAgICAgc2VsZi50ZXN0X3J1bl90aW1lID09IG90aGVyLnRlc3RfcnVuX3RpbWUpCiAK
ICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9
PSBvdGhlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKaW5kZXggMmY2M2VjODcy
YTExMThhYTZhNjBmZjQxOTdjNDViNjI5OTMxZDgxMy4uOWNjYmQ2MTU2ZDQwMmI0ZGNmMzQwNjZh
Y2ZkODMzNWM2MGIxNjYyNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIucHkKQEAg
LTkzNiwzNCArOTM2LDkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgQXJnczoKICAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiBUZXN0UmVzdWx0cyBmb3IgYWxs
IHRlc3RzLgogICAgICAgICAiIiIKLSAgICAgICAgdGVzdF90eXBlcyA9IFtdICAjIFVuaXQgdGVz
dHMgZG9uJ3QgYWN0dWFsbHkgcHJvZHVjZSBhbnkgdGltaW5ncy4KLSAgICAgICAgaWYgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3M6Ci0gICAgICAgICAgICB0ZXN0X3R5cGVzID0gaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3NbMF0udGltZV9mb3JfZGlmZnMua2V5cygpCi0gICAgICAgIHRpbWVzX2Zvcl9k
dW1wX3JlbmRlcl90cmVlID0gW10KLSAgICAgICAgdGltZXNfZm9yX2RpZmZfcHJvY2Vzc2luZyA9
IFtdCi0gICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGUgPSB7fQotICAgICAgICBmb3IgdGVzdF90
eXBlIGluIHRlc3RfdHlwZXM6Ci0gICAgICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3Rf
dHlwZV0gPSBbXQotCi0gICAgICAgIGZvciB0ZXN0X3N0YXRzIGluIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzOgotICAgICAgICAgICAgdGltZXNfZm9yX2R1bXBfcmVuZGVyX3RyZWUuYXBwZW5kKHRl
c3Rfc3RhdHMudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgIHRpbWVzX2Zvcl9kaWZmX3Byb2Nl
c3NpbmcuYXBwZW5kKAotICAgICAgICAgICAgICAgIHRlc3Rfc3RhdHMudG90YWxfdGltZV9mb3Jf
YWxsX2RpZmZzKQotICAgICAgICAgICAgdGltZV9mb3JfZGlmZnMgPSB0ZXN0X3N0YXRzLnRpbWVf
Zm9yX2RpZmZzCi0gICAgICAgICAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6Ci0gICAg
ICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZVt0ZXN0X3R5cGVdLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlXSkKLQogICAgICAgICBzZWxm
Ll9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3MoCiAgICAgICAgICAgICAiUEVSIFRF
U1QgVElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMpOiIsCi0gICAgICAgICAgICB0aW1lc19mb3Jf
ZHVtcF9yZW5kZXJfdHJlZSkKLSAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3JfdGVz
dF90aW1pbmdzKAotICAgICAgICAgICAgIlBFUiBURVNUIERJRkYgUFJPQ0VTU0lORyBUSU1FUyAo
c2Vjb25kcyk6IiwKLSAgICAgICAgICAgIHRpbWVzX2Zvcl9kaWZmX3Byb2Nlc3NpbmcpCi0gICAg
ICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50
X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncygKLSAgICAgICAgICAgICAgICAiUEVSIFRFU1Qg
VElNRVMgQlkgVEVTVCBUWVBFOiAlcyIgJSB0ZXN0X3R5cGUsCi0gICAgICAgICAgICAgICAgdGlt
ZXNfcGVyX3Rlc3RfdHlwZVt0ZXN0X3R5cGVdKQorICAgICAgICAgICAgW3Rlc3Rfc3RhdHMudGVz
dF9ydW5fdGltZSBmb3IgdGVzdF9zdGF0cyBpbiBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nc10pCiAK
ICAgICBkZWYgX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhzZWxmLCBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3Vt
bWFyeSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkKaW5kZXggNzRjMTAxODRjOWQ3MjZlZjcxMzg1NmNiZTdhMGZiNTFmMzM1OWEzNC4uNzE2
YmM2NjI0NDQ0OWVhZjNkODZiNTc4MWQ1Njk0YmJmNGEyZGI1NSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtODA3LDYgKzgwNyw0
OCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGxhdGZvcm0pCiAKIAorY2xhc3MgRHJpdmVySW5wdXQob2JqZWN0KToKKyAgICAiIiJI
b2xkcyB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgYSBkcml2ZXIuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgZmlsZW5hbWUsIHRpbWVvdXQsIGltYWdlX2hhc2gpOgorICAgICAgICAiIiJJ
bml0aWFsaXplcyBhIERyaXZlcklucHV0IG9iamVjdC4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIGZpbGVuYW1lOiBGdWxsIHBhdGggdG8gdGhlIHRlc3QuCisgICAgICAgICAgdGltZW91dDog
VGltZW91dCBpbiBtc2VjcyB0aGUgZHJpdmVyIHNob3VsZCB1c2Ugd2hpbGUgcnVubmluZyB0aGUg
dGVzdAorICAgICAgICAgIGltYWdlX2hhc2g6IEEgaW1hZ2UgY2hlY2tzdW0gd2hpY2ggaXMgdXNl
ZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmCisgICAgICAgICAgICAgICAgICAgICB0
aGUgY2hlY2tzdW1zIG1hdGNoLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9
IGZpbGVuYW1lCisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5p
bWFnZV9oYXNoID0gaW1hZ2VfaGFzaAorCisKK2NsYXNzIERyaXZlck91dHB1dChvYmplY3QpOgor
ICAgICIiIkdyb3VwcyBpbmZvcm1hdGlvbiBhYm91dCBhIG91dHB1dCBmcm9tIGRyaXZlciBmb3Ig
ZWFzeSBwYXNzaW5nIG9mIGRhdGEuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwg
aW1hZ2UsIGltYWdlX2hhc2gsCisgICAgICAgICAgICAgICAgIGNyYXNoPU5vbmUsIHRlc3RfdGlt
ZT1Ob25lLCB0aW1lb3V0PU5vbmUsIGVycm9yPU5vbmUpOgorICAgICAgICAiIiJJbml0aWFsaXpl
cyBhIFRlc3RPdXRwdXQgb2JqZWN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGV4dDog
YSB0ZXh0IG91dHB1dAorICAgICAgICAgIGltYWdlOiBhbiBpbWFnZSBvdXRwdXQKKyAgICAgICAg
ICBpbWFnZV9oYXNoOiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjaGVja3N1bSBvZiB0aGUgaW1h
Z2UKKyAgICAgICAgICBjcmFzaDogYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZHJp
dmVyIGNyYXNoZWQgb24gdGhlIHRlc3QKKyAgICAgICAgICB0ZXN0X3RpbWU6IGEgdGltZSB3aGlj
aCB0aGUgdGVzdCBoYXMgdGFrZW4KKyAgICAgICAgICB0aW1lb3V0OiBhIGJvb2xlYW4gaW5kaWNh
dGluZyB3aGVodGVyIHRoZSB0ZXN0IHRpbWVkIG91dAorICAgICAgICAgIGVycm9yOiBhbnkgdW5l
eHBlY3RlZCBvciBhZGRpdGlvbmFsIChvciBlcnJvcikgdGV4dCBvdXRwdXQKKyAgICAgICAgIiIi
CisgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKyAgICAgICAgc2VsZi5pbWFnZSA9IGltYWdlCisg
ICAgICAgIHNlbGYuaW1hZ2VfaGFzaCA9IGltYWdlX2hhc2gKKyAgICAgICAgc2VsZi5jcmFzaCA9
IGNyYXNoCisgICAgICAgIHNlbGYudGVzdF90aW1lID0gdGVzdF90aW1lCisgICAgICAgIHNlbGYu
dGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5lcnJvciA9IGVycm9yCisKKwogY2xhc3Mg
RHJpdmVyOgogICAgICIiIkFic3RyYWN0IGludGVyZmFjZSBmb3IgdGhlIER1bXBSZW5kZXJUcmVl
IGludGVyZmFjZS4iIiIKIApAQCAtODIxLDcgKzg2Myw3IEBAIGNsYXNzIERyaXZlcjoKICAgICAg
ICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0RyaXZlci5fX2luaXRf
XycpCiAKLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgZGVmIHJ1bl90
ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6CiAgICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGFu
ZCByZXR1cm4gdGhlIHJlc3VsdHMuCiAKICAgICAgICAgTm90ZSB0aGF0IGl0IGlzIG9rYXkgaWYg
YSB0ZXN0IHRpbWVzIG91dCBvciBjcmFzaGVzIGFuZCBsZWF2ZXMKQEAgLTgyOSw5ICs4NzEsOSBA
QCBjbGFzcyBEcml2ZXI6CiAgICAgICAgIGFyZSByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAg
YW5kIGVuc3VyaW5nIHRoaW5ncyBhcmUgb2theS4KIAogICAgICAgICBBcmdzOgotICAgICAgICAg
IHRlc3RfaW5wdXQ6IGEgVGVzdElucHV0IG9iamVjdAorICAgICAgICAgIGRyaXZlcl9pbnB1dDog
YSBEcml2ZXJJbnB1dCBvYmplY3QKIAotICAgICAgICBSZXR1cm5zIGEgVGVzdE91dHB1dCBvYmpl
Y3QuCisgICAgICAgIFJldHVybnMgYSBEcml2ZXJPdXRwdXQgb2JqZWN0LgogICAgICAgICAiIiIK
ICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRHJpdmVyLnJ1bl90ZXN0JykKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHkKaW5kZXggZWViZjg1MzBjZTA5ZWJiMDBhNTJhMmZlNjkzMjc3NWQ2MmE3NmU5NS4uYmJm
YjBhZWY2MjU0M2Q1OThjOWRkNGI3Mzg5ZDkzZjI0N2NkZTgyNyAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zOSw5
ICszOSw5IEBAIGltcG9ydCB0aW1lCiBpbXBvcnQgd2ViYnJvd3NlcgogCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGV4ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtIGltcG9ydCBmaWxlc3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBp
bXBvcnQgY3lncGF0aAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9vdXRwdXQKIAogaW1wb3J0IGJhc2UKIGltcG9ydCBodHRw
X3NlcnZlcgpAQCAtNjUsNyArNjUsOSBAQCBkZWYgY2hlY2tfZmlsZV9leGlzdHMocGF0aF90b19m
aWxlLCBmaWxlX2Rlc2NyaXB0aW9uLCBvdmVycmlkZV9zdGVwPU5vbmUsCiAgICAgICAgICAgICB5
b3UncmUgbG9va2luZyBmb3IgKGUuZy4sICJIVFRQIFNlcnZlciIpLiBVc2VkIGZvciBlcnJvciBs
b2dnaW5nLgogICAgICAgICBvdmVycmlkZV9zdGVwOiBBbiBvcHRpb25hbCBzdHJpbmcgdG8gYmUg
bG9nZ2VkIGlmIHRoZSBjaGVjayBmYWlscy4KICAgICAgICAgbG9nZ2luZzogV2hldGhlciBvciBu
b3QgbG9nIHRoZSBlcnJvciBtZXNzYWdlcy4iIiIKLSAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3Rl
bS5leGlzdHMocGF0aF90b19maWxlKToKKyAgICAjIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5
IGZpeC4KKyAgICBmcyA9IGZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpCisgICAgaWYgbm90IGZzLmV4
aXN0cyhwYXRoX3RvX2ZpbGUpOgogICAgICAgICBpZiBsb2dnaW5nOgogICAgICAgICAgICAgX2xv
Zy5lcnJvcignVW5hYmxlIHRvIGZpbmQgJXMnICUgZmlsZV9kZXNjcmlwdGlvbikKICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJyAgICBhdCAlcycgJSBwYXRoX3RvX2ZpbGUpCkBAIC0zNTIsNiArMzU0
LDEwIEBAIGNsYXNzIENocm9taXVtRHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgc2VsZi5f
cG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIK
ICAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IE5vbmUKKworICAgICAgICAjIEZJWE1FOiBUZW1w
b3JhcnkgZml4IGZvciByZXZpZXcuCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Ll9m
aWxlc3lzdGVtCisKICAgICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdwaXhlbF90ZXN0
cycpOgogICAgICAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bigKICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3Jlc3VsdHNfZGlyZWN0
b3J5JyksCkBAIC00NjUsNyArNDcxLDcgQEAgY2xhc3MgQ2hyb21pdW1Ecml2ZXIoYmFzZS5Ecml2
ZXIpOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBlCiAgICAgICAgIHJldHVybiBzZWxmLl9v
dXRwdXRfaW1hZ2UoKQogCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorICAg
IGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgogICAgICAgICBvdXRwdXQgPSBbXQog
ICAgICAgICBlcnJvciA9IFtdCiAgICAgICAgIGNyYXNoID0gRmFsc2UKQEAgLTQ3NSw5ICs0ODEs
OSBAQCBjbGFzcyBDaHJvbWl1bURyaXZlcihiYXNlLkRyaXZlcik6CiAKICAgICAgICAgc3RhcnRf
dGltZSA9IHRpbWUudGltZSgpCiAKLSAgICAgICAgdXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90
b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkKLSAgICAgICAgY21kID0gc2VsZi5fdGVzdF9zaGVs
bF9jb21tYW5kKHVyaSwgdGVzdF9pbnB1dC50aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5pbWFnZV9oYXNoKQorICAgICAgICB1cmkgPSBz
ZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaShkcml2ZXJfaW5wdXQuZmlsZW5hbWUpCisgICAgICAg
IGNtZCA9IHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCh1cmksIGRyaXZlcl9pbnB1dC50aW1lb3V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX2lucHV0Lmlt
YWdlX2hhc2gpCiAgICAgICAgIChsaW5lLCBjcmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5kX2Fu
ZF9yZWFkX2xpbmUoaW5wdXQ9Y21kKQogCiAgICAgICAgIHdoaWxlIG5vdCBjcmFzaCBhbmQgbGlu
ZS5yc3RyaXAoKSAhPSAiI0VPRiI6CkBAIC01MTksNyArNTI1LDcgQEAgY2xhc3MgQ2hyb21pdW1E
cml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAgICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dy
aXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZShpbnB1dD1Ob25lKQogCiAgICAgICAgIHJ1bl90aW1l
ID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCi0gICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5U
ZXN0T3V0cHV0KAorICAgICAgICByZXR1cm4gYmFzZS5Ecml2ZXJPdXRwdXQoCiAgICAgICAgICAg
ICAnJy5qb2luKG91dHB1dCksIHNlbGYuX291dHB1dF9pbWFnZV93aXRoX3JldHJ5KCksIGFjdHVh
bF9jaGVja3N1bSwKICAgICAgICAgICAgIGNyYXNoLCBydW5fdGltZSwgdGltZW91dCwgJycuam9p
bihlcnJvcikpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvZHJ5cnVuLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9kcnlydW4ucHkKaW5kZXggNGVkMzRlNjQ4OGVmMjg0NzUwYzY5ZmQwNTRkMDMxMDBiZWVk
NWI2Zi4uZWY3YWZhMzE2ZTczY2RhYjcxYTExOTBjY2Q3MTI2NzFjNWM1NzhkMiAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKQEAg
LTUwLDggKzUwLDYgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9vdXRwdXQK
LQogaW1wb3J0IGJhc2UKIGltcG9ydCBmYWN0b3J5CiAKQEAgLTExMiwxOCArMTEwLDE4IEBAIGNs
YXNzIERyeXJ1bkRyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgZGVmIHBvbGwoc2VsZik6CiAgICAg
ICAgIHJldHVybiBOb25lCiAKLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6Cisg
ICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6CiAgICAgICAgIHN0YXJ0X3RpbWUg
PSB0aW1lLnRpbWUoKQotICAgICAgICB0ZXh0X291dHB1dCA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRf
dGV4dCh0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICB0ZXh0X291dHB1dCA9IHNlbGYuX3Bv
cnQuZXhwZWN0ZWRfdGV4dChkcml2ZXJfaW5wdXQuZmlsZW5hbWUpCiAKLSAgICAgICAgaWYgdGVz
dF9pbnB1dC5pbWFnZV9oYXNoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaW1hZ2UgPSBzZWxm
Ll9wb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0gICAgICAgICAgICBo
YXNoID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X2lucHV0LmZpbGVuYW1lKQor
ICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaCBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGltYWdlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9pbWFnZShkcml2ZXJfaW5wdXQuZmlsZW5h
bWUpCisgICAgICAgICAgICBoYXNoID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShkcml2
ZXJfaW5wdXQuZmlsZW5hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpbWFnZSA9IE5v
bmUKICAgICAgICAgICAgIGhhc2ggPSBOb25lCi0gICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5U
ZXN0T3V0cHV0KHRleHRfb3V0cHV0LCBpbWFnZSwgaGFzaCwgRmFsc2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSwgRmFsc2Us
IE5vbmUpCisgICAgICAgIHJldHVybiBiYXNlLkRyaXZlck91dHB1dCh0ZXh0X291dHB1dCwgaW1h
Z2UsIGhhc2gsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50
aW1lKCkgLSBzdGFydF90aW1lLCBGYWxzZSwgTm9uZSkKIAogICAgIGRlZiBzdGFydChzZWxmKToK
ICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC90ZXN0LnB5CmluZGV4IDVkZjVjMmQ5ZDYyMTliZjk0Njk0OTZmMjU3NGU2M2MxODExMmFk
ZTQuLjc5NmY1NTUzYjMzYjA5MjY4NThkNzVlNDVhOTRjYmFiZjJjZDBlN2EgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTM0LDgg
KzM0LDYgQEAgaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9y
dCBmaWxlc3lzdGVtX21vY2sKIAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3Rfb3V0cHV0Ci0KIGltcG9ydCBiYXNlCiAKIApAQCAtMzAyLDEwICsz
MDAsMTAgQEAgY2xhc3MgVGVzdERyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdleGNlcHRpb24gZnJvbSAnICsgdGVzdF9uYW1lKQogICAgICAgICBpZiB0
ZXN0Lmhhbmc6CiAgICAgICAgICAgICB0aW1lLnNsZWVwKChmbG9hdCh0ZXN0X2lucHV0LnRpbWVv
dXQpICogNCkgLyAxMDAwLjApCi0gICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0
KHRlc3QuYWN0dWFsX3RleHQsIHRlc3QuYWN0dWFsX2ltYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0LmFjdHVhbF9jaGVja3N1bSwgdGVzdC5jcmFzaCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF90
aW1lLCB0ZXN0LnRpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3QuZXJyb3IpCisgICAgICAgIHJldHVybiBiYXNlLkRyaXZlck91dHB1dCh0ZXN0LmFjdHVh
bF90ZXh0LCB0ZXN0LmFjdHVhbF9pbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3QuYWN0dWFsX2NoZWNrc3VtLCB0ZXN0LmNyYXNoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF90aW1lLCB0ZXN0LnRpbWVvdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LmVycm9yKQogCiAgICAgZGVmIHN0
YXJ0KHNlbGYpOgogICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CmluZGV4IGFmZGViZWIyYzg0NmVkN2NjZGZkMmZm
ZTdkYjAyMWFkMzE1MjEzYjkuLmNhMmZmYWJkODc1NTJlZDI0NDk5Y2Y0YjU3ZTc4NzhmOTc0Y2Ey
OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Via2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Via2l0LnB5CkBAIC00Nyw3ICs0Nyw2IEBAIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHNodXRp
bAogCiBpbXBvcnQgd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vc3BhdGggYXMgb3NwYXRoCi1pbXBv
cnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLnRlc3Rfb3V0cHV0IGFzIHRl
c3Rfb3V0cHV0CiBpbXBvcnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuYmFzZSBhcyBiYXNl
CiBpbXBvcnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuc2VydmVyX3Byb2Nlc3MgYXMgc2Vy
dmVyX3Byb2Nlc3MKIApAQCAtNDE5LDE1ICs0MTgsMTUgQEAgY2xhc3MgV2ViS2l0RHJpdmVyKGJh
c2UuRHJpdmVyKToKICAgICAgICAgcmV0dXJuCiAKICAgICAjIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IGlzIGh1Z2UuCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICB1
cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAg
IGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgorICAgICAgICB1cmkgPSBzZWxmLl9w
b3J0LmZpbGVuYW1lX3RvX3VyaShkcml2ZXJfaW5wdXQuZmlsZW5hbWUpCiAgICAgICAgIGlmIHVy
aS5zdGFydHN3aXRoKCJmaWxlOi8vLyIpOgogICAgICAgICAgICAgY29tbWFuZCA9IHVyaVs3Ol0K
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1hbmQgPSB1cmkKIAotICAgICAgICBpZiB0
ZXN0X2lucHV0LmltYWdlX2hhc2g6Ci0gICAgICAgICAgICBjb21tYW5kICs9ICInIiArIHRlc3Rf
aW5wdXQuaW1hZ2VfaGFzaAorICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKKyAg
ICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKICAgICAg
ICAgY29tbWFuZCArPSAiXG4iCiAKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBA
IC00MzgsNyArNDM3LDcgQEAgY2xhc3MgV2ViS2l0RHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAg
ICAgb3V0cHV0ID0gc3RyKCkgICMgVXNlIGEgYnl0ZSBhcnJheSBmb3Igb3V0cHV0LCBldmVuIHRo
b3VnaCBpdCBzaG91bGQgYmUgVVRGLTguCiAgICAgICAgIGltYWdlID0gc3RyKCkKIAotICAgICAg
ICB0aW1lb3V0ID0gaW50KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKKyAgICAgICAgdGlt
ZW91dCA9IGludChkcml2ZXJfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKICAgICAgICAgZGVhZGxp
bmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKICAgICAgICAgbGluZSA9IHNlbGYuX3NlcnZlcl9w
cm9jZXNzLnJlYWRfbGluZSh0aW1lb3V0KQogICAgICAgICB3aGlsZSAobm90IHNlbGYuX3NlcnZl
cl9wcm9jZXNzLnRpbWVkX291dApAQCAtNDg1LDExICs0ODQsMTEgQEAgY2xhc3MgV2ViS2l0RHJp
dmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgIyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3
cm9uZyBzZWN0aW9uIG9mIGNvZGUgdG8gYmUgZG9pbmcKICAgICAgICAgIyB0aGlzIHJlc2V0IGlu
LgogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5lcnJvciA9ICIiCi0gICAgICAgIHJldHVy
biB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KG91dHB1dCwgaW1hZ2UsIGFjdHVhbF9pbWFnZV9oYXNo
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzcy5jcmFzaGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
LnRpbWUoKSAtIHN0YXJ0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnRpbWVkX291dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3IpCisgICAgICAgIHJldHVybiBiYXNlLkRyaXZlck91dHB1
dChvdXRwdXQsIGltYWdlLCBhY3R1YWxfaW1hZ2VfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLmNyYXNoZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcikKIAogICAgIGRlZiBzdG9wKHNl
bGYpOgogICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvX19pbml0X18ucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL19faW5pdF9fLnB5
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3
NzVhZDhjMmU0OGM1MzkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL2ltYWdlX2RpZmYucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRh
NDY2YzhhMTdjZDFjZTI3ZWNmYmY5NWIxMDJmOGY1NzhlMzUxOGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQ2
ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
IwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkNv
bXBhcmVzIHRoZSBpbWFnZSBvdXRwdXQgb2YgYSB0ZXN0IHRvIHRoZSBleHBlY3RlZCBpbWFnZSBv
dXRwdXQuCi0KLUNvbXBhcmVzIGhhc2hlcyBmb3IgdGhlIGdlbmVyYXRlZCBhbmQgZXhwZWN0ZWQg
aW1hZ2VzLiBJZiB0aGUgb3V0cHV0IGRvZXNuJ3QKLW1hdGNoLCByZXR1cm5zIEZhaWx1cmVJbWFn
ZUhhc2hNaXNtYXRjaCBhbmQgb3V0cHV0cyBib3RoIGhhc2hlcyBpbnRvIHRoZSBsYXlvdXQKLXRl
c3QgcmVzdWx0cyBkaXJlY3RvcnkuCi0iIiIKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRo
X3N0YXRlbWVudAotCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgZXJybm8KLWltcG9ydCBsb2dnaW5n
Ci1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCi0KLSMgQ2FjaGUgd2hldGhl
ciB3ZSBoYXZlIHRoZSBpbWFnZV9kaWZmIGV4ZWN1dGFibGUgYXZhaWxhYmxlLgotX2NvbXBhcmVf
YXZhaWxhYmxlID0gVHJ1ZQotX2NvbXBhcmVfbXNnX3ByaW50ZWQgPSBGYWxzZQotCi1fbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzLmltYWdl
X2RpZmYiKQotCi0KLWNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2Up
OgotCi0gICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2ZpbGVzKHNlbGYsIGZpbGVuYW1lLCBpbWFnZSwg
aW1hZ2VfaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfbmV3X2Jh
c2VsaW5lKToKLSAgICAgICAgIiIiU2F2ZXMgbmV3IGJhc2VsaW5lcyBmb3IgdGhlIFBORyBhbmQg
Y2hlY2tzdW0uCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICBmaWxlbmFtZTogdGVzdCBmaWxl
bmFtZQotICAgICAgICAgIGltYWdlOiBhIGltYWdlIG91dHB1dAotICAgICAgICAgIGltYWdlX2hh
c2g6IGEgY2hlY2tzdW0gb2YgdGhlIGltYWdlCi0gICAgICAgICAgZ2VuZXJhdGVfbmV3X2Jhc2Vs
aW5lOiB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgbmV3LCBwbGF0Zm9ybS1zcGVjaWZpYwotICAgICAg
ICAgICAgYmFzZWxpbmUsIG9yIHVwZGF0ZSB0aGUgZXhpc3Rpbmcgb25lCi0gICAgICAgICIiIgot
ICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIGltYWdlLCAiLnBuZyIs
IGVuY29kaW5nPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZV9uZXdfYmFzZWxpbmU9Z2VuZXJhdGVfbmV3X2Jhc2VsaW5lKQotICAgICAgICBzZWxmLl9zYXZl
X2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIGltYWdlX2hhc2gsICIuY2hlY2tzdW0iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImFzY2lpIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX25ld19iYXNlbGluZT1nZW5lcmF0ZV9uZXdf
YmFzZWxpbmUpCi0KLSAgICBkZWYgX2NvcHlfaW1hZ2Uoc2VsZiwgZmlsZW5hbWUsIGFjdHVhbF9p
bWFnZSwgZXhwZWN0ZWRfaW1hZ2UpOgotICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhm
aWxlbmFtZSwgJy5wbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQ9
YWN0dWFsX2ltYWdlLCBleHBlY3RlZD1leHBlY3RlZF9pbWFnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgcHJpbnRfdGV4dF9kaWZmcz1GYWxzZSkKLQot
ICAgIGRlZiBfY29weV9pbWFnZV9oYXNoKHNlbGYsIGZpbGVuYW1lLCBhY3R1YWxfaW1hZ2VfaGFz
aCwgZXhwZWN0ZWRfaW1hZ2VfaGFzaCk6Ci0gICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVz
KGZpbGVuYW1lLCAnLmNoZWNrc3VtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWN0dWFsX2ltYWdlX2hhc2gsIGV4cGVjdGVkX2ltYWdlX2hhc2gsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIsIHByaW50X3RleHRfZGlmZnM9RmFsc2Up
Ci0KLSAgICBkZWYgX2NyZWF0ZV9kaWZmX2ltYWdlKHNlbGYsIHBvcnQsIGZpbGVuYW1lLCBhY3R1
YWxfaW1hZ2UsIGV4cGVjdGVkX2ltYWdlKToKLSAgICAgICAgIiIiQ3JlYXRlcyB0aGUgdmlzdWFs
IGRpZmYgb2YgdGhlIGV4cGVjdGVkL2FjdHVhbCBQTkdzLgotCi0gICAgICAgIFJldHVybnMgVHJ1
ZSBpZiB0aGUgaW1hZ2VzIGFyZSBkaWZmZXJlbnQuCi0gICAgICAgICIiIgotICAgICAgICBkaWZm
X2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9DT01Q
QVJFKQotICAgICAgICByZXR1cm4gcG9ydC5kaWZmX2ltYWdlKGFjdHVhbF9pbWFnZSwgZXhwZWN0
ZWRfaW1hZ2UsIGRpZmZfZmlsZW5hbWUpCi0KLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwg
cG9ydCwgZmlsZW5hbWUsIHRlc3RfYXJncywgYWN0dWFsX3Rlc3Rfb3V0cHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCk6Ci0gICAgICAgICIiIkltcGxlbWVu
dGF0aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCBpbWFnZSBhbmQK
LSAgICAgICAgY2hlY2tzdW0gYWdhaW5zdCB0aGUgZXhwZWN0ZWQgZmlsZXMgZnJvbSB0aGUgTGF5
b3V0VGVzdCBkaXJlY3RvcnkuCi0gICAgICAgICIiIgotICAgICAgICBmYWlsdXJlcyA9IFtdCi0K
LSAgICAgICAgIyBJZiB3ZSBkaWRuJ3QgcHJvZHVjZSBhIGhhc2ggZmlsZSwgdGhpcyB0ZXN0IG11
c3QgYmUgdGV4dC1vbmx5LgotICAgICAgICBpZiBhY3R1YWxfdGVzdF9vdXRwdXQuaW1hZ2VfaGFz
aCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCi0KLSAgICAgICAgIyBJZiB3
ZSdyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLCB3ZSBwYXNzLgotICAgICAgICBpZiB0ZXN0
X2FyZ3MubmV3X2Jhc2VsaW5lIG9yIHRlc3RfYXJncy5yZXNldF9yZXN1bHRzOgotICAgICAgICAg
ICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9maWxlcyhmaWxlbmFtZSwgYWN0dWFsX3Rlc3Rfb3V0cHV0
LmltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfdGVz
dF9vdXRwdXQuaW1hZ2VfaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9hcmdzLm5ld19iYXNlbGluZSkKLSAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwot
Ci0gICAgICAgIGlmIG5vdCBleHBlY3RlZF90ZXN0X291dHB1dC5pbWFnZToKLSAgICAgICAgICAg
ICMgUmVwb3J0IGEgbWlzc2luZyBleHBlY3RlZCBQTkcgZmlsZS4KLSAgICAgICAgICAgIHNlbGYu
X2NvcHlfaW1hZ2UoZmlsZW5hbWUsIGFjdHVhbF90ZXN0X291dHB1dC5pbWFnZSwgZXhwZWN0ZWRf
aW1hZ2U9Tm9uZSkKLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2VfaGFzaChmaWxlbmFtZSwg
YWN0dWFsX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQuaW1hZ2VfaGFzaCkKLSAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2UoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWlsdXJlcwotICAgICAgICBpZiBub3QgZXhwZWN0ZWRfdGVzdF9vdXRw
dXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgICMgUmVwb3J0IGEgbWlzc2luZyBleHBlY3RlZCBj
aGVja3N1bSBmaWxlLgotICAgICAgICAgICAgc2VsZi5fY29weV9pbWFnZShmaWxlbmFtZSwgYWN0
dWFsX3Rlc3Rfb3V0cHV0LmltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZF90ZXN0X291dHB1dC5pbWFnZSkKLSAgICAgICAgICAgIHNlbGYuX2NvcHlfaW1hZ2VfaGFz
aChmaWxlbmFtZSwgYWN0dWFsX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2gsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaW1hZ2VfaGFzaD1Ob25lKQotICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2go
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwotCi0gICAgICAgIGlmIGFjdHVhbF90ZXN0
X291dHB1dC5pbWFnZV9oYXNoID09IGV4cGVjdGVkX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2g6Ci0g
ICAgICAgICAgICAjIEhhc2ggbWF0Y2hlZCAobm8gZGlmZiBuZWVkZWQsIG9rYXkgdG8gcmV0dXJu
KS4KLSAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwotCi0gICAgICAgIHNlbGYuX2NvcHlfaW1h
Z2UoZmlsZW5hbWUsIGFjdHVhbF90ZXN0X291dHB1dC5pbWFnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dC5pbWFnZSkKLSAgICAgICAgc2VsZi5fY29weV9p
bWFnZV9oYXNoKGZpbGVuYW1lLCBhY3R1YWxfdGVzdF9vdXRwdXQuaW1hZ2VfaGFzaCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0LmltYWdlX2hhc2gp
Ci0KLSAgICAgICAgIyBFdmVuIHRob3VnaCB3ZSBvbmx5IHVzZSB0aGUgcmVzdWx0IGluIG9uZSBj
b2RlcGF0aCBiZWxvdyBidXQgd2UKLSAgICAgICAgIyBzdGlsbCBuZWVkIHRvIGNhbGwgQ3JlYXRl
SW1hZ2VEaWZmIGZvciBvdGhlciBjb2RlcGF0aHMuCi0gICAgICAgIGltYWdlc19hcmVfZGlmZmVy
ZW50ID0gc2VsZi5fY3JlYXRlX2RpZmZfaW1hZ2UocG9ydCwgZmlsZW5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX3Rlc3Rf
b3V0cHV0LmltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0LmltYWdlKQotICAgICAgICBpZiBub3Qg
aW1hZ2VzX2FyZV9kaWZmZXJlbnQ6Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9m
YWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoSW5jb3JyZWN0KCkpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoTWlz
bWF0Y2goKSkKLQotICAgICAgICByZXR1cm4gZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2VfdW5p
dHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L3Rlc3RfdHlwZV9iYXNlX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1ZGJmY2I2OGMwNjhhZTNjNmFjYzA0MjQ5MDBmMWI0ZjYyYzkyY2YzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2VfdW5pdHRlc3QucHkKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiIlRlc3RzIHN0cmF5
IHRlc3RzIG5vdCBjb3ZlcmVkIGJ5IHJlZ3VsYXIgY29kZSBwYXRocy4iIiIKLQotaW1wb3J0IHRl
c3RfdHlwZV9iYXNlCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5
Lm1vY2sgaW1wb3J0IE1vY2sKLQotCi1jbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQot
ICAgIGRlZiB0ZXN0X2NvbXBhcmVfb3V0cHV0X25vdGltcGxlbWVudGVkKHNlbGYpOgotICAgICAg
ICB0ZXN0X3R5cGUgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UoTm9uZSwgTm9uZSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdGVzdF90eXBlLmNv
bXBhcmVfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCAiZm9vLnR4dCIs
ICcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1l
bnRzKCksICdEZWJ1ZycpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0
dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGFkMjUyNjI5ZDNlYjdhZjY1MGQzYmIyNTFiN2UyNGMzNTdmODZiYjkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKKysrIC9kZXYvbnVsbApA
QCAtMSw5MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0iIiJDb21wYXJlcyB0aGUgdGV4dCBvdXRwdXQgb2YgYSB0ZXN0IHRvIHRoZSBleHBlY3RlZCB0
ZXh0IG91dHB1dC4KLQotSWYgdGhlIG91dHB1dCBkb2Vzbid0IG1hdGNoLCByZXR1cm5zIEZhaWx1
cmVUZXh0TWlzbWF0Y2ggYW5kIG91dHB1dHMgdGhlIGRpZmYKLWZpbGVzIGludG8gdGhlIGxheW91
dCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3J5LgotIiIiCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IGVycm5vCi1pbXBvcnQgbG9n
Z2luZwotaW1wb3J0IG9zLnBhdGgKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCi0KLV9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMudGV4dF9kaWZmIikKLQotCi1j
bGFzcyBUZXN0VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKLQotICAgIGRl
ZiBfZ2V0X25vcm1hbGl6ZWRfb3V0cHV0X3RleHQoc2VsZiwgb3V0cHV0KToKLSAgICAgICAgIiIi
UmV0dXJucyB0aGUgbm9ybWFsaXplZCB0ZXh0IG91dHB1dCwgaS5lLiB0aGUgb3V0cHV0IGluIHdo
aWNoCi0gICAgICAgIHRoZSBlbmQtb2YtbGluZSBjaGFyYWN0ZXJzIGFyZSBub3JtYWxpemVkIHRv
ICJcbiIuIiIiCi0gICAgICAgICMgUnVubmluZyB0ZXN0cyBvbiBXaW5kb3dzIHByb2R1Y2VzICJc
clxuIi4gIFRoZSAiXG4iIHBhcnQgaXMgaGVscGZ1bGx5Ci0gICAgICAgICMgY2hhbmdlZCB0byAi
XHJcbiIgYnkgb3VyIHN5c3RlbSAoUHl0aG9uL0N5Z3dpbiksIHJlc3VsdGluZyBpbgotICAgICAg
ICAjICJcclxyXG4iLCB3aGVuLCBpbiBmYWN0LCB3ZSB3YW50ZWQgdG8gY29tcGFyZSB0aGUgdGV4
dCBvdXRwdXQgd2l0aAotICAgICAgICAjIHRoZSBub3JtYWxpemVkIHRleHQgZXhwZWN0YXRpb24g
ZmlsZXMuCi0gICAgICAgIHJldHVybiBvdXRwdXQucmVwbGFjZSgiXHJcclxuIiwgIlxyXG4iKS5y
ZXBsYWNlKCJcclxuIiwgIlxuIikKLQotICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBwb3J0
LCBmaWxlbmFtZSwgdGVzdF9hcmdzLCBhY3R1YWxfdGVzdF9vdXRwdXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCk6Ci0gICAgICAgICIiIkltcGxlbWVudGF0
aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCB0ZXh0IGFnYWluc3QK
LSAgICAgICAgdGhlIGV4cGVjdGVkIHRleHQgZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3Rvcnku
IiIiCi0gICAgICAgIGZhaWx1cmVzID0gW10KLQotICAgICAgICAjIElmIHdlJ3JlIGdlbmVyYXRp
bmcgYSBuZXcgYmFzZWxpbmUsIHdlIHBhc3MuCi0gICAgICAgIGlmIHRlc3RfYXJncy5uZXdfYmFz
ZWxpbmUgb3IgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHM6Ci0gICAgICAgICAgICAjIEFsdGhvdWdo
IGFsbCB0ZXN0X3NoZWxsL0R1bXBSZW5kZXJUcmVlIG91dHB1dCBzaG91bGQgYmUgdXRmLTgsCi0g
ICAgICAgICAgICAjIHdlIGRvIG5vdCBldmVyIGRlY29kZSBpdCBpbnNpZGUgcnVuLXdlYmtpdC10
ZXN0cy4gIEZvciBzb21lIHRlc3RzCi0gICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIG1heSBu
b3Qgb3V0cHV0IHV0Zi04IHRleHQgKGUuZy4gd2ViYXJjaGl2ZXMpLgotICAgICAgICAgICAgc2Vs
Zi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBhY3R1YWxfdGVzdF9vdXRwdXQudGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnR4dCIsIGVuY29kaW5nPU5v
bmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfbmV3X2Jh
c2VsaW5lPXRlc3RfYXJncy5uZXdfYmFzZWxpbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFpbHVy
ZXMKLQotICAgICAgICAjIE5vcm1hbGl6ZSB0ZXh0IHRvIGRpZmYKLSAgICAgICAgYWN0dWFsX3Rl
eHQgPSBzZWxmLl9nZXRfbm9ybWFsaXplZF9vdXRwdXRfdGV4dChhY3R1YWxfdGVzdF9vdXRwdXQu
dGV4dCkKLSAgICAgICAgIyBBc3N1bWluZyBleHBlY3RlZF90ZXh0IGlzIGFscmVhZHkgbm9ybWFs
aXplZC4KLSAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX3Rlc3Rfb3V0cHV0LnRleHQK
LQotICAgICAgICAjIFdyaXRlIG91dHB1dCBmaWxlcyBmb3IgbmV3IHRlc3RzLCB0b28uCi0gICAg
ICAgIGlmIHBvcnQuY29tcGFyZV90ZXh0KGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0KToKLSAg
ICAgICAgICAgICMgVGV4dCBkb2Vzbid0IG1hdGNoLCB3cml0ZSBvdXRwdXQgZmlsZXMuCi0gICAg
ICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgIi50eHQiLCBhY3R1YWxf
dGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQs
IGVuY29kaW5nPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dF90ZXh0X2RpZmZzPVRydWUpCi0KLSAgICAgICAgICAgIGlmIGV4cGVjdGVkX3RleHQgPT0gJyc6
Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1p
c3NpbmdSZXN1bHQoKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZmFpbHVy
ZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRleHRNaXNtYXRjaCgpKQotCi0gICAgICAg
IHJldHVybiBmYWlsdXJlcwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>