<?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>31498</bug_id>
          
          <creation_ts>2009-11-13 16:07:52 -0800</creation_ts>
          <short_desc>Chromium&apos;s run_webkit_tests should move into svn.webkit.org as run-chromium-webkit-tests</short_desc>
          <delta_ts>2010-01-31 15:56:41 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>bweinstein</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dpranke</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>163573</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 16:07:52 -0800</bug_when>
    <thetext>Chromium&apos;s run_webkit_tests should move into svn.webkit.org as run-chromium-webkit-tests

Or some similar name.

http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/layout_tests/run_webkit_tests.py?view=markup

There is actually a whole suite of python modules which support that file as well.

It&apos;s silly for this to live in src.chromium.org now that we can build a WebKit.dll out of svn.webkit.org.

Eventually I would like to unify run-webkit-tests and run_webkit_tests.py into a single script, but that will have to happen after moving the latter into svn.webkit.org

The chromium bug: http://code.google.com/p/chromium/issues/detail?id=23099

I&apos;ll send a note to webkit-dev announcing my intention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165125</commentid>
    <comment_count>1</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2009-11-19 15:33:41 -0800</bug_when>
    <thetext>per discussion w/ eseidel, I&apos;ll start on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183474</commentid>
    <comment_count>2</comment_count>
      <attachid>47175</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-21 21:23:35 -0800</bug_when>
    <thetext>Created attachment 47175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183482</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-21 22:02:43 -0800</bug_when>
    <thetext>Just some items that I noticed in passing (drive by comments):
1. WebKitTools/simplejson/README.webkit refers to LICENSE.txt and there is none.
2. None of the files appear to have their license in them. (For example, the files in Scripts/webkitpy/layout_tests refer to LICENSE but there is no such file -- even if there was, there is no such .)
3. Several files have TODO(name) vs FIXME (which is done in WebKit land).
4. The python method/function names don&apos;t seem to follow PEP8 (lowercase with underscores).
5. There seem to be a lot of chrome specific reference in here that aren&apos;t in WebKit at all (For example there is a reference to &quot;chrome\test\data\ssl\certs\root_ca_cert.crt&quot; and test_output_formatter.bat uses chromiumpaths, etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183488</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-21 22:25:09 -0800</bug_when>
    <thetext>The patch is not correctly based.  Consider using webkit-patch upload.

Also, the patch is huge.  I&apos;m not sure how to meaningfully review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183499</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-21 23:00:49 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Just some items that I noticed in passing (drive by comments):
&gt; 1. WebKitTools/simplejson/README.webkit refers to LICENSE.txt and there is
&gt; none.

Hmm. The downstream version didn&apos;t have a LICENSE as far as I know. I&apos;ll hunt one down after the patch lands, if that&apos;s okay.

&gt; 2. None of the files appear to have their license in them. (For example, the
&gt; files in Scripts/webkitpy/layout_tests refer to LICENSE but there is no such
&gt; file -- even if there was, there is no such .)

Odd. I&apos;ll take a look at that.

&gt; 3. Several files have TODO(name) vs FIXME (which is done in WebKit land).

I&apos;ll clean that up after the patch lands, if that&apos;s okay ...

&gt; 4. The python method/function names don&apos;t seem to follow PEP8 (lowercase with
&gt; underscores).

The code was cleaned up to PEP-8 compliance as enforced by pep8.py ; I think we&apos;ll gradually rename the functions over time to get the rest of the cleanup.


&gt; 5. There seem to be a lot of chrome specific reference in here that aren&apos;t in
&gt; WebKit at all (For example there is a reference to
&gt; &quot;chrome\test\data\ssl\certs\root_ca_cert.crt&quot; and test_output_formatter.bat
&gt; uses chromiumpaths, etc.)

Yeah, the code doesn&apos;t run independently of chromium yet, and there&apos;s still a bunch of cleanup to do. I submitted this as-is per discussion with eseidel and some other people on #webkit who were keen to see it land so they could help contribute to the upstreaming and cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183500</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-21 23:04:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; The patch is not correctly based.  Consider using webkit-patch upload.

I don&apos;t understand what this means. I used webkit-patch post (I think). Is that different?

&gt; 
&gt; Also, the patch is huge.  I&apos;m not sure how to meaningfully review it.
&gt;

I&apos;m expecting eseidel to review it :) Since the only intended purpose at the moment is to be able to run the chromium tests, you could compare it against the downstream version as a sanity check. 

Even if I were to attempt to upload it in somewhat separable chunks, most of them would still be huge :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183509</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-21 23:27:22 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; 4. The python method/function names don&apos;t seem to follow PEP8 (lowercase with
&gt; &gt; underscores).
&gt; 
&gt; The code was cleaned up to PEP-8 compliance as enforced by pep8.py ; I think
&gt; we&apos;ll gradually rename the functions over time to get the rest of the cleanup.

The concern with this idea (and related responses) because once it lands, there is much less motivation to clean up things. (I&apos;ve done it too unfortunately at times where I have less time to clean up something that has landed vs something that hasn&apos;t.) The &quot;I think&quot; and &quot;gradually&quot; above reinforce this perception.

Alternatively this could be cleaned up downstream and then landed in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183510</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-21 23:29:58 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; The patch is not correctly based.  Consider using webkit-patch upload.
&gt; 
&gt; I don&apos;t understand what this means. I used webkit-patch post (I think). Is that
&gt; different?

Oh, you&apos;re right.  It is correctly based (created from the proper directory).  PrettyPatch tricked me.  Not sure why it didn&apos;t apply to TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183587</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-22 03:51:03 -0800</bug_when>
    <thetext>I don&apos;t think this patch want&apos;s a &quot;code-review&quot;.  We know the code works, we know it will need further cleanuyp/style-adjusting, testing, reorg, etc. over time.

The one thing we do need to review, is licenses.  WebKit style is to have a license at the top of every file.  I also think we need to specify who the &quot;chromium authors&quot; Are since we dont have any of the chromium license files in our tree.

Other than that, I&apos;m ready to rs=me this change.

So: we need to add a BSD license header to teh top of every file, with a list of copyright holders (I don&apos;t think the chromium authors counts here, or?)

At least thats my understanding of webkit&apos;s contribution requirements.  Please someone correct me if i&apos;ve misunderstood.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183656</commentid>
    <comment_count>10</comment_count>
      <attachid>47206</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-22 08:12:37 -0800</bug_when>
    <thetext>Created attachment 47206
Start of described python program

(In reply to comment #9)
&gt; I don&apos;t think this patch want&apos;s a &quot;code-review&quot;.  We know the code works, we
&gt; know it will need further cleanuyp/style-adjusting, testing, reorg, etc. over
&gt; time.

I&apos;m *very* concerned about landing this code as is.

Landing it removes any urgency to fix its bad style. If the past is a guide, this will languish, and the file will be in the wrong style for a long time to come and serve as a bad example of style that is checked in. Then folks will use it as an example of style that WebKit except when code reviews are done -- also based on recent experience :(.

*Instead* one could take a little time to write a relatively simple python program to fix the function names and do this upstream. This may be a useful program if anything else needs to come from chromium (due to chromium&apos;s unfortunate python style):

Here&apos;s an outline of that program:

for each file in python patch
  for each line
     if line matches r&quot;def\s+([A-Za-z_][A-Za-z_0-9])*\s*\(&quot;:
         get lower case function name
         put orig function name in dict with lower case name

for each file in python patch
  for each line
    for each item in dict
      if line matches r&quot;\s+&quot;+item_from_dict:
        replace item_from_dict with lowercase version
  write file

Now this may make some mistakes, but a code review should be able to verify it as well as running the program as a double check.

I attached a python program that I started a while ago (when I had some spare moments) which is headed in this direction but still needs work to finish it off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183717</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-22 11:24:48 -0800</bug_when>
    <thetext>&gt; So: we need to add a BSD license header to teh top of every file, with a list
&gt; of copyright holders (I don&apos;t think the chromium authors counts here, or?)

In principle, you need to list all the Chromium Authors as they are the copyright holders.  In practice, you should look at the SVN log and see who actually touched the file.  Everyone employed by Google can be listed as Google, Inc because the code was produces as a work-for-hire.

I am not a lawyer but I play one on the Interwebs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183768</commentid>
    <comment_count>12</comment_count>
      <attachid>47175</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-22 13:23:06 -0800</bug_when>
    <thetext>Comment on attachment 47175
Patch

As I understand it, there will be another revision of the patch. r- for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184515</commentid>
    <comment_count>13</comment_count>
      <attachid>47389</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-26 00:15:44 -0800</bug_when>
    <thetext>Created attachment 47389
file that changes any MixedCase function names to lower_case_with_underscores

I&apos;ve attached the script I&apos;m using to do the bulk-rename of any function and method names. There are a couple of big gotchas with the script:

1) If there are namespace collisions, they will not be caught. In other words, if you want to rename foo.Run() and not bar.Run(), you&apos;re out of luck.

2) It won&apos;t rename any occurrences of the names that appear inside strings or multi-line comments

And, obviously, it can&apos;t rename occurrences that you don&apos;t tell it about, so if other files are calling these functions, they&apos;ll break.

As far as I can tell, for the task at hand, none of these gotchas matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185599</commentid>
    <comment_count>14</comment_count>
      <attachid>47645</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-28 13:55:45 -0800</bug_when>
    <thetext>Created attachment 47645
revised patch with pep-8 compliant function names and an initial pass at the licenses. Only for review - do not commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185606</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-28 14:23:18 -0800</bug_when>
    <thetext>We could do this commit in various pieces.  For one, it would be simple to add simplejson in one commit.

I&apos;m not sure what review comments are really expected for a .5MB patch.  It&apos;s basically unreviewable at this size.

I&apos;m also not sure it needs much review beyond &quot;the licenses look right&quot;.  This is a huge hunk of code which will need to be worked over in th webkit repository, and would be impossible to work over via the review process on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185613</commentid>
    <comment_count>16</comment_count>
      <attachid>47651</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-28 14:44:27 -0800</bug_when>
    <thetext>Created attachment 47651
ready for review + commit (license text updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185735</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-28 22:04:39 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I&apos;m not sure what review comments are really expected for a .5MB patch.  It&apos;s
&gt; basically unreviewable at this size.
&gt; 
&gt; I&apos;m also not sure it needs much review beyond &quot;the licenses look right&quot;.  This
&gt; is a huge hunk of code which will need to be worked over in th webkit
&gt; repository, and would be impossible to work over via the review process on this
&gt; bug.

This sounds a lot like comments for the patches attached to Bug 16401.  Why can&apos;t this script be made to run first before landing?  How will landing it in the repository help to get it fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185919</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 11:27:15 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; I&apos;m not sure what review comments are really expected for a .5MB patch.  It&apos;s
&gt; &gt; basically unreviewable at this size.
&gt; &gt; 
&gt; &gt; I&apos;m also not sure it needs much review beyond &quot;the licenses look right&quot;.  This
&gt; &gt; is a huge hunk of code which will need to be worked over in th webkit
&gt; &gt; repository, and would be impossible to work over via the review process on this
&gt; &gt; bug.
&gt; 
&gt; This sounds a lot like comments for the patches attached to Bug 16401.  Why
&gt; can&apos;t this script be made to run first before landing?  How will landing it in
&gt; the repository help to get it fixed?

Hi David,

I think perhaps you misunderstand. The &quot;file that changes any MixedCase function&quot; script has already been run and we&apos;re not planning to land it; it&apos;s just attached for reference. Rather, we&apos;re talking about the last attachment ( https://bugs.webkit.org/attachment.cgi?id=47651 ), which are the actual files that we&apos;re upstreaming from chromium.org now that they&apos;ve been reformatted using the script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185936</commentid>
    <comment_count>19</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-29 12:42:41 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; I&apos;m not sure what review comments are really expected for a .5MB patch.  It&apos;s
&gt; &gt; &gt; basically unreviewable at this size.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m also not sure it needs much review beyond &quot;the licenses look right&quot;.  This
&gt; &gt; &gt; is a huge hunk of code which will need to be worked over in th webkit
&gt; &gt; &gt; repository, and would be impossible to work over via the review process on this
&gt; &gt; &gt; bug.
&gt; &gt; 
&gt; &gt; This sounds a lot like comments for the patches attached to Bug 16401.  Why
&gt; &gt; can&apos;t this script be made to run first before landing?  How will landing it in
&gt; &gt; the repository help to get it fixed?
&gt; 
&gt; I think perhaps you misunderstand. The &quot;file that changes any MixedCase
&gt; function&quot; script has already been run and we&apos;re not planning to land it; it&apos;s
&gt; just attached for reference. Rather, we&apos;re talking about the last attachment (
&gt; https://bugs.webkit.org/attachment.cgi?id=47651 ), which are the actual files
&gt; that we&apos;re upstreaming from chromium.org now that they&apos;ve been reformatted
&gt; using the script.

No, I was referring to the run_webkit_tests script itself.  Why does checking it into the WebKit repository make it easier to work on (e.g., is the script really so big that one person can&apos;t fix it up before checking it in)?  What are the barriers to making it actually work (or do something useful) before being committed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185992</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 15:54:03 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; No, I was referring to the run_webkit_tests script itself.  Why does checking
&gt; it into the WebKit repository make it easier to work on (e.g., is the script
&gt; really so big that one person can&apos;t fix it up before checking it in)?  What are
&gt; the barriers to making it actually work (or do something useful) before being
&gt; committed?

Oh, sorry, I misunderstood. The script as it is runs fine for running the chromium version of the test suite. The intent of checking this in at all was (a) to move this stuff upstream alongside the rest of the chromium port and (b) make this implementation available for other ports to use, since it has some advantages over the perl versions.

Eric and I are working on getting it to work for the base webkit ports, but there was demand (from Eric and some others) to check this in so that they could help with the porting, rather than waiting until I had every i dotted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186007</commentid>
    <comment_count>21</comment_count>
      <attachid>47745</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 16:53:45 -0800</bug_when>
    <thetext>Created attachment 47745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186008</commentid>
    <comment_count>22</comment_count>
      <attachid>47746</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 17:05:05 -0800</bug_when>
    <thetext>Created attachment 47746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186009</commentid>
    <comment_count>23</comment_count>
      <attachid>47746</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-29 17:06:14 -0800</bug_when>
    <thetext>Comment on attachment 47746
Patch

Looks great!  Obviously we still have a lot of work here. Thank you for your persistence!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186010</commentid>
    <comment_count>24</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 17:07:07 -0800</bug_when>
    <thetext>Committed r54091: &lt;http://trac.webkit.org/changeset/54091&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186011</commentid>
    <comment_count>25</comment_count>
      <attachid>47747</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 17:13:16 -0800</bug_when>
    <thetext>Created attachment 47747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186012</commentid>
    <comment_count>26</comment_count>
      <attachid>47747</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-29 17:16:03 -0800</bug_when>
    <thetext>Comment on attachment 47747
Patch

Looks good to me.  Classes are *soo* much cleaner than what we have in the perl code.  This change is nice and small and seems pretty straightforward to me.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186014</commentid>
    <comment_count>27</comment_count>
      <attachid>47747</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-29 17:18:14 -0800</bug_when>
    <thetext>Comment on attachment 47747
Patch

Was committed as &lt;http://trac.webkit.org/changeset/54093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186016</commentid>
    <comment_count>28</comment_count>
      <attachid>47749</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 17:21:56 -0800</bug_when>
    <thetext>Created attachment 47749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186018</commentid>
    <comment_count>29</comment_count>
      <attachid>47749</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-29 17:24:03 -0800</bug_when>
    <thetext>Comment on attachment 47749
Patch

Looks non-harmful.  So glad to finally have this runable from webkit.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186019</commentid>
    <comment_count>30</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 17:25:30 -0800</bug_when>
    <thetext>Committed r54094: &lt;http://trac.webkit.org/changeset/54094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186022</commentid>
    <comment_count>31</comment_count>
      <attachid>47750</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-29 17:29:46 -0800</bug_when>
    <thetext>Created attachment 47750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186024</commentid>
    <comment_count>32</comment_count>
      <attachid>47750</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-29 17:33:02 -0800</bug_when>
    <thetext>Comment on attachment 47750
Patch

After talking in person, let&apos;s wait on this part of the patch, to see if anyone is actually still using this code.

Looks like we&apos;re otherwise done here!  And can close this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186177</commentid>
    <comment_count>33</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-01-31 00:43:50 -0800</bug_when>
    <thetext>Would r54903 or r54904 have caused any changes in Windows expected results? Right around r54093-r54095 the number of failures on Windows went from 4 to 18. 

I sent a comment to the author of r54095, and just wanted to put one here to ask if this could have changed Windows expected results (especially in media/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186254</commentid>
    <comment_count>34</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-01-31 15:55:42 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; Would r54903 or r54904 have caused any changes in Windows expected results?
&gt; Right around r54093-r54095 the number of failures on Windows went from 4 to 18. 
&gt; 
&gt; I sent a comment to the author of r54095, and just wanted to put one here to
&gt; ask if this could have changed Windows expected results (especially in media/).

Not likely. This code should be completely unused at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186255</commentid>
    <comment_count>35</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-01-31 15:56:41 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; Would r54903 or r54904 have caused any changes in Windows expected results?
&gt; &gt; Right around r54093-r54095 the number of failures on Windows went from 4 to 18. 
&gt; &gt; 
&gt; &gt; I sent a comment to the author of r54095, and just wanted to put one here to
&gt; &gt; ask if this could have changed Windows expected results (especially in media/).
&gt; 
&gt; Not likely. This code should be completely unused at the moment.

Agreed, it looks like it was r54095. Sorry for the spam.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47175</attachid>
            <date>2010-01-21 21:23:35 -0800</date>
            <delta_ts>2010-01-28 13:55:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31498-20100121212334.patch</filename>
            <type>text/plain</type>
            <size>470670</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyYzQyZGY2Li41NTcyMzc3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTAtMDEt
MjEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBzdHJlYW0gdGhlIHB5dGhvbi1iYXNl
ZCBydW4td2Via2l0LXRlc3RzIGZyb20gY2hyb21pdW0ub3JnIGFzCisgICAgICAgIHJ1bi1jaHJv
bWl1bS13ZWJraXQtdGVzdHMgLiBUaGlzIGFkZHMgYSBsYXlvdXRfdGVzdHMgZGlyIHVuZGVyCisg
ICAgICAgIFNjcmlwdHMvd2Via2l0cHkgYW5kIGFkZHMgYSBjb3B5IG9mIHNpbXBsZWpzb24gdG8g
V2ViS2l0VG9vbHMKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzE0OTgKKworICAgICAgICAqIFNjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJr
aXQtdGVzdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtpdC10
ZXN0czogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGVk
dXAtdGVzdHMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9hcGFjaGVfaHR0cF9zZXJ2ZXIu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2ZhaWx1cmUucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1cmVfZmluZGVyLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWls
dXJlX2ZpbmRlcl90ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odG1sX2dlbmVyYXRvci5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9z
ZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW06IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNf
Z2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mOiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvcGF0aF91dGlscy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHMucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Bs
YXRmb3JtX3V0aWxzX2xpbnV4LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3BsYXRmb3JtX3V0aWxzX3dpbi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZmFpbHVyZXMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHk6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxf
dGhyZWFkLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS93ZWJzb2NrZXRfc2VydmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1fd2Via2l0X3Rl
c3RzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X291dHB1dF9mb3JtYXR0ZXIuYmF0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy90ZXN0X291dHB1dF9mb3JtYXR0ZXIucHk6IEFkZGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0cHV0X2Zvcm1hdHRlci5z
aDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF9v
dXRwdXRfeG1sX3RvX2pzb24ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy9pbWFnZV9kaWZmLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weTog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4
cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZF91
bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogc2ltcGxlanNvbi9SRUFETUUud2Via2l0OiBB
ZGRlZC4KKyAgICAgICAgKiBzaW1wbGVqc29uL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBzaW1wbGVqc29uL19zcGVlZHVwcy5jOiBBZGRlZC4KKyAgICAgICAgKiBzaW1wbGVqc29uL2Rl
Y29kZXIucHk6IEFkZGVkLgorICAgICAgICAqIHNpbXBsZWpzb24vZW5jb2Rlci5weTogQWRkZWQu
CisgICAgICAgICogc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBz
aW1wbGVqc29uL3NjYW5uZXIucHk6IEFkZGVkLgorCiAyMDEwLTAxLTIwICBFcmljIFNlaWRlbCAg
PGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI1MzUz
Ny4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13
ZWJraXQtdGVzdHMgYi9XZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Vi
a2l0LXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2ZDBkMDIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0t
d2Via2l0LXRlc3RzCkBAIC0wLDAgKzEsMTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisj
IENvcHlyaWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIiIi
V3JhcHBlciBhcm91bmQgd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmUucHkiIiIKK2lt
cG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBh
dGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIndlYmtpdHB5IiwgImxheW91dF90ZXN0cyIpKQoraW1wb3J0IHJlYmFz
ZWxpbmUKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICByZWJhc2VsaW5lLm1haW4o
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRl
c3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxZjNhM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMKQEAgLTAsMCAr
MSwxNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisiIiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuLWNocm9taXVtLXdlYmtpdC10ZXN0cy5weSIiIgoraW1wb3J0IG9z
CitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJu
YW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAid2Via2l0cHkiLCAibGF5b3V0X3Rlc3RzIikpCitpbXBvcnQgcnVuX2Nocm9taXVt
X3dlYmtpdF90ZXN0cworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG9wdGlvbnMs
IGFyZ3MgPSBydW5fY2hyb21pdW1fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoKQorICAgIHJ1bl9j
aHJvbWl1bV93ZWJraXRfdGVzdHMubWFpbihvcHRpb25zLCBhcmdzKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGVkdXAtdGVzdHMucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kZWR1cC10ZXN0cy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMTY1ZTQwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZGVkdXAtdGVz
dHMucHkKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0IChj
KSAyMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyIiImRlZHVwLXRlc3Rz
IC0tIHByaW50IHRlc3QgcmVzdWx0cyBkdXBsaWNhdGVkIGJldHdlZW4gd2luIGFuZCBsaW51eC4K
KworQmVjYXVzZSB0aGUgb3V0cHV0cyBhcmUgdmVyeSBzaW1pbGFyLCB3ZSBmYWxsIGJhY2sgb24g
V2luZG93cyBvdXRwdXRzCitpZiB0aGVyZSBpc24ndCBhbiBleHBlY3RlZCBvdXRwdXQgZm9yIExp
bnV4IGxheW91dCB0ZXN0cy4gIFRoaXMgbWVhbnMKK3RoYXQgYW55IGZpbGUgdGhhdCBpcyBkdXBs
aWNhdGVkIGJldHdlZW4gdGhlIExpbnV4IGFuZCBXaW5kb3dzIGRpcmVjdG9yaWVzCitpcyByZWR1
bmRhbnQuCisKK1RoaXMgY29tbWFuZCBkdW1wcyBvdXQgYWxsIHN1Y2ggZmlsZXMuICBZb3UgY2Fu
IHVzZSBpdCBsaWtlOgorICBkZWR1cC10ZXN0cy5weSAgICMgcHJpbnQgb3V0IHRoZSBiYWQgZmls
ZXMKKyAgZGVkdXAtdGVzdHMucHkgfCB4YXJncyBnaXQgcm0gICAjIGRlbGV0ZSB0aGUgYmFkIGZp
bGVzCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN1
YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworIyBBIG1hcCBvZiBmaWxlIGhhc2ggPT4gc2V0IG9mIGFs
bCBmaWxlcyB3aXRoIHRoYXQgaGFzaC4KK2hhc2hlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0
KHNldCkKKworIyBGaWxsIGluIHRoZSBtYXAuCitjbWQgPSBbJ2dpdCcsICdscy10cmVlJywgJy1y
JywgJ0hFQUQnLCAnd2Via2l0L2RhdGEvbGF5b3V0X3Rlc3RzLyddCit0cnk6CisgICAgZ2l0ID0g
c3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCitleGNlcHQgT1NF
cnJvciwgZToKKyAgICBpZiBlLmVycm5vID09IDI6ICAjIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rv
cnkuCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJFcnJvcjogJ05vIHN1Y2ggZmlsZScg
d2hlbiBydW5uaW5nIGdpdC4iCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJUaGlzIHNj
cmlwdCByZXF1aXJlcyBnaXQuIgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHJhaXNlIGUKKwor
Zm9yIGxpbmUgaW4gZ2l0LnN0ZG91dDoKKyAgICBhdHRycywgZmlsZSA9IGxpbmUuc3RyaXAoKS5z
cGxpdCgnXHQnKQorICAgIF8sIF8sIGhhc2ggPSBhdHRycy5zcGxpdCgnICcpCisgICAgaGFzaGVz
W2hhc2hdLmFkZChmaWxlKQorCisjIER1bXAgb3V0IGR1cGxpY2F0ZWQgZmlsZXMuCitmb3IgY2x1
c3RlciBpbiBoYXNoZXMudmFsdWVzKCk6CisgICAgaWYgbGVuKGNsdXN0ZXIpIDwgMjoKKyAgICAg
ICAgY29udGludWUKKyAgICBmb3IgZmlsZSBpbiBjbHVzdGVyOgorICAgICAgICBpZiAnL2Nocm9t
aXVtLWxpbnV4LycgaW4gZmlsZToKKyAgICAgICAgICAgIGlmIGZpbGUucmVwbGFjZSgnL2Nocm9t
aXVtLWxpbnV4LycsICcvY2hyb21pdW0td2luLycpIGluIGNsdXN0ZXI6CisgICAgICAgICAgICAg
ICAgcHJpbnQgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9fX2luaXRfXy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9hcGFj
aGVfaHR0cF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDExOTA2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9o
dHRwX3NlcnZlci5weQpAQCAtMCwwICsxLDIwMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
KyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworIiIiQSBjbGFzcyB0byBzdGFydC9zdG9w
IHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQg
c3VicHJvY2VzcworaW1wb3J0IHN5cworCitpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQoraW1wb3J0
IHBhdGhfdXRpbHMKK2ltcG9ydCBwbGF0Zm9ybV91dGlscworCisKK2NsYXNzIExheW91dFRlc3RB
cGFjaGVIdHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICBv
dXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRp
cmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9k
aXIKKyAgICAgICAgc2VsZi5faHR0cGRfcHJvYyA9IE5vbmUKKyAgICAgICAgcGF0aF91dGlscy5N
YXliZU1ha2VEaXJlY3Rvcnkob3V0cHV0X2RpcikKKworICAgICAgICBzZWxmLm1hcHBpbmdzID0g
W3sncG9ydCc6IDgwMDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODF9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdzc2xjZXJ0JzogVHJ1ZX1dCisKKyAgICAgICAg
IyBUaGUgdXBzdHJlYW0gLmNvbmYgZmlsZSBhc3N1bWVkIHRoZSBleGlzdGVuY2Ugb2YgL3RtcC9X
ZWJLaXQgZm9yCisgICAgICAgICMgcGxhY2luZyBhcGFjaGUgZmlsZXMgbGlrZSB0aGUgbG9jayBm
aWxlIHRoZXJlLgorICAgICAgICBzZWxmLl9ydW50aW1lX3BhdGggPSBvcy5wYXRoLmpvaW4oIi90
bXAiLCAiV2ViS2l0IikKKyAgICAgICAgcGF0aF91dGlscy5NYXliZU1ha2VEaXJlY3Rvcnkoc2Vs
Zi5fcnVudGltZV9wYXRoKQorCisgICAgICAgICMgVGhlIFBJRCByZXR1cm5lZCB3aGVuIEFwYWNo
ZSBpcyBzdGFydGVkIGdvZXMgYXdheSAoZHVlIHRvIGRyb3BwaW5nCisgICAgICAgICMgcHJpdmls
ZWdlcz8pLiBUaGUgcHJvcGVyIGNvbnRyb2xsaW5nIFBJRCBpcyB3cml0dGVuIHRvIGEgZmlsZSBp
biB0aGUKKyAgICAgICAgIyBhcGFjaGUgcnVudGltZSBkaXJlY3RvcnkuCisgICAgICAgIHNlbGYu
X3BpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJ2h0dHBkLnBpZCcp
CisKKyAgICAgICAgdGVzdF9kaXIgPSBwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZSgndGhpcmRfcGFy
dHknLCAnV2ViS2l0JywKKyAgICAgICAgICAgICdMYXlvdXRUZXN0cycpCisgICAgICAgIGpzX3Rl
c3RfcmVzb3VyY2VzX2RpciA9IHNlbGYuX0N5Z3dpblNhZmVKb2luKHRlc3RfZGlyLCAiZmFzdCIs
ICJqcyIsCisgICAgICAgICAgICAicmVzb3VyY2VzIikKKyAgICAgICAgbWltZV90eXBlc19wYXRo
ID0gc2VsZi5fQ3lnd2luU2FmZUpvaW4odGVzdF9kaXIsICJodHRwIiwgImNvbmYiLAorICAgICAg
ICAgICAgIm1pbWUudHlwZXMiKQorICAgICAgICBjZXJ0X2ZpbGUgPSBzZWxmLl9DeWd3aW5TYWZl
Sm9pbih0ZXN0X2RpciwgImh0dHAiLCAiY29uZiIsCisgICAgICAgICAgICAid2Via2l0LWh0dHBk
LnBlbSIpCisgICAgICAgIGFjY2Vzc19sb2cgPSBzZWxmLl9DeWd3aW5TYWZlSm9pbihvdXRwdXRf
ZGlyLCAiYWNjZXNzX2xvZy50eHQiKQorICAgICAgICBlcnJvcl9sb2cgPSBzZWxmLl9DeWd3aW5T
YWZlSm9pbihvdXRwdXRfZGlyLCAiZXJyb3JfbG9nLnR4dCIpCisgICAgICAgIGRvY3VtZW50X3Jv
b3QgPSBzZWxmLl9DeWd3aW5TYWZlSm9pbih0ZXN0X2RpciwgImh0dHAiLCAidGVzdHMiKQorCisg
ICAgICAgIGV4ZWN1dGFibGUgPSBwbGF0Zm9ybV91dGlscy5BcGFjaGVFeGVjdXRhYmxlUGF0aCgp
CisgICAgICAgIGlmIHNlbGYuX0lzQ3lnd2luKCk6CisgICAgICAgICAgICBleGVjdXRhYmxlID0g
c2VsZi5fR2V0Q3lnd2luUGF0aChleGVjdXRhYmxlKQorCisgICAgICAgIGNtZCA9IFtleGVjdXRh
YmxlLAorICAgICAgICAgICAgJy1mJywgc2VsZi5fR2V0QXBhY2hlQ29uZmlnRmlsZVBhdGgodGVz
dF9kaXIsIG91dHB1dF9kaXIpLAorICAgICAgICAgICAgJy1DJywgIlwnRG9jdW1lbnRSb290ICVz
XCciICUgZG9jdW1lbnRfcm9vdCwKKyAgICAgICAgICAgICctYycsICJcJ0FsaWFzIC9qcy10ZXN0
LXJlc291cmNlcyAlc1wnIiAlIGpzX3Rlc3RfcmVzb3VyY2VzX2RpciwKKyAgICAgICAgICAgICct
QycsICJcJ0xpc3RlbiAlc1wnIiAlICIxMjcuMC4wLjE6ODAwMCIsCisgICAgICAgICAgICAnLUMn
LCAiXCdMaXN0ZW4gJXNcJyIgJSAiMTI3LjAuMC4xOjgwODEiLAorICAgICAgICAgICAgJy1jJywg
IlwnVHlwZXNDb25maWcgXCIlc1wiXCciICUgbWltZV90eXBlc19wYXRoLAorICAgICAgICAgICAg
Jy1jJywgIlwnQ3VzdG9tTG9nIFwiJXNcIiBjb21tb25cJyIgJSBhY2Nlc3NfbG9nLAorICAgICAg
ICAgICAgJy1jJywgIlwnRXJyb3JMb2cgXCIlc1wiXCciICUgZXJyb3JfbG9nLAorICAgICAgICAg
ICAgJy1DJywgIlwnVXNlciBcIiVzXCJcJyIgJSBvcy5lbnZpcm9uLmdldCgiVVNFUk5BTUUiLAor
ICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KCJVU0VSIiwgIiIpKV0KKworICAgICAgICBp
ZiBzZWxmLl9Jc0N5Z3dpbigpOgorICAgICAgICAgICAgY3lnYmluID0gcGF0aF91dGlscy5QYXRo
RnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKQorICAgICAgICAgICAgIyBO
b3QgZW50aXJlbHkgc3VyZSB3aHksIGJ1dCBmcm9tIGN5Z3dpbiB3ZSBuZWVkIHRvIHJ1biB0aGUK
KyAgICAgICAgICAgICMgaHR0cGQgY29tbWFuZCB0aHJvdWdoIGJhc2guCisgICAgICAgICAgICBz
ZWxmLl9zdGFydF9jbWQgPSBbCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGN5Z2Jpbiwg
J2Jhc2guZXhlJyksCisgICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAgICAnUEFU
SD0lcyAlcycgJSAoc2VsZi5fR2V0Q3lnd2luUGF0aChjeWdiaW4pLCAiICIuam9pbihjbWQpKSwK
KyAgICAgICAgICAgICAgXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUT0RPKG9qYW4p
OiBXaGVuIHdlIGdldCBjeWd3aW4gdXNpbmcgQXBhY2hlIDIsIHVzZSBzZXQgdGhlCisgICAgICAg
ICAgICAjIGNlcnQgZmlsZSBmb3IgY3lnd2luIGFzIHdlbGwuCisgICAgICAgICAgICBjbWQuZXh0
ZW5kKFsnLWMnLCAiXCdTU0xDZXJ0aWZpY2F0ZUZpbGUgJXNcJyIgJSBjZXJ0X2ZpbGVdKQorICAg
ICAgICAgICAgIyBKb2luIHRoZSBzdHJpbmcgaGVyZSBzbyB0aGF0IEN5Z3dpbi9XaW5kb3dzIGFu
ZCBNYWMvTGludXgKKyAgICAgICAgICAgICMgY2FuIHVzZSB0aGUgc2FtZSBjb2RlLiBPdGhlcndp
c2UsIHdlIGNvdWxkIHJlbW92ZSB0aGUgc2luZ2xlCisgICAgICAgICAgICAjIHF1b3RlcyBhYm92
ZSBhbmQga2VlcCBjbWQgYXMgYSBzZXF1ZW5jZS4KKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2Nt
ZCA9ICIgIi5qb2luKGNtZCkKKworICAgIGRlZiBfSXNDeWd3aW4oc2VsZik6CisgICAgICAgIHJl
dHVybiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKQorCisgICAgZGVmIF9DeWd3
aW5TYWZlSm9pbihzZWxmLCAqcGFydHMpOgorICAgICAgICAiIiJSZXR1cm5zIGEgcGxhdGZvcm0g
YXBwcm9wcmlhdGUgcGF0aC4iIiIKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigqcGFydHMp
CisgICAgICAgIGlmIHNlbGYuX0lzQ3lnd2luKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5f
R2V0Q3lnd2luUGF0aChwYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9HZXRD
eWd3aW5QYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJDb252ZXJ0IGEgV2luZG93cyBwYXRo
IHRvIGEgY3lnd2luIHBhdGguCisKKyAgICAgICAgVGhlIGN5Z3BhdGggdXRpbGl0eSBpbnNpc3Rz
IG9uIGNvbnZlcnRpbmcgcGF0aHMgdGhhdCBpdCB0aGlua3MgYXJlCisgICAgICAgIEN5Z3dpbiBy
b290IHBhdGhzIHRvIHdoYXQgaXQgdGhpbmtzIHRoZSBjb3JyZWN0IHJvb3RzIGFyZS4gIFNvIHBh
dGhzCisgICAgICAgIHN1Y2ggYXMgIkM6XGJcc2xhdmVcd2Via2l0LXJlbGVhc2VcYnVpbGRcdGhp
cmRfcGFydHlcY3lnd2luXGJpbiIKKyAgICAgICAgYXJlIGNvbnZlcnRlZCB0byBwbGFpbiAiL3Vz
ci9iaW4iLiAgVG8gYXZvaWQgdGhpcywgd2UKKyAgICAgICAgZG8gdGhlIGNvbnZlcnNpb24gbWFu
dWFsbHkuCisKKyAgICAgICAgVGhlIHBhdGggaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYWJzb2x1dGUg
cGF0aCwgb24gYW55IGRyaXZlLgorICAgICAgICAiIiIKKyAgICAgICAgZHJpdmVfcmVnZXhwID0g
cmUuY29tcGlsZShyJyhbYS16XSk6Wy9cXF0nLCByZS5JR05PUkVDQVNFKQorCisgICAgICAgIGRl
ZiBMb3dlckRyaXZlKG1hdGNob2JqKToKKyAgICAgICAgICAgIHJldHVybiAnL2N5Z2RyaXZlLyVz
LycgJSBtYXRjaG9iai5ncm91cCgxKS5sb3dlcigpCisgICAgICAgIHBhdGggPSBkcml2ZV9yZWdl
eHAuc3ViKExvd2VyRHJpdmUsIHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xc
JywgJy8nKQorCisgICAgZGVmIF9HZXRBcGFjaGVDb25maWdGaWxlUGF0aChzZWxmLCB0ZXN0X2Rp
ciwgb3V0cHV0X2Rpcik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gdGhlIGFwYWNo
ZSBjb25maWcgZmlsZSB0byB1c2UuCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9kaXI6
IGFic29sdXRlIHBhdGggdG8gdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeS4KKyAgICAgICAgICBv
dXRwdXRfZGlyOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHRzIGRpcmVj
dG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIGh0dHBkX2NvbmZpZyA9IHBsYXRmb3JtX3V0aWxz
LkFwYWNoZUNvbmZpZ0ZpbGVQYXRoKCkKKyAgICAgICAgaHR0cGRfY29uZmlnX2NvcHkgPSBvcy5w
YXRoLmpvaW4ob3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQorICAgICAgICBodHRwZF9jb25mID0g
b3BlbihodHRwZF9jb25maWcpLnJlYWQoKQorICAgICAgICBpZiBzZWxmLl9Jc0N5Z3dpbigpOgor
ICAgICAgICAgICAgIyBUaGlzIGlzIGEgZ3Jvc3MgaGFjaywgYnV0IGl0IGxldHMgdXMgdXNlIHRo
ZSB1cHN0cmVhbSAuY29uZiBmaWxlCisgICAgICAgICAgICAjIGFuZCBvdXIgY2hlY2tlZCBpbiBj
eWd3aW4uIFRoaXMgdGVsbHMgdGhlIHNlcnZlciB0aGUgcm9vdAorICAgICAgICAgICAgIyBkaXJl
Y3RvcnkgdG8gbG9vayBpbiBmb3IgLnNvIG1vZHVsZXMuIEl0IHdpbGwgdXNlIHRoaXMgcGF0aAor
ICAgICAgICAgICAgIyBwbHVzIHRoZSByZWxhdGl2ZSBwYXRocyB0byB0aGUgLnNvIGZpbGVzIGxp
c3RlZCBpbiB0aGUgLmNvbmYKKyAgICAgICAgICAgICMgZmlsZS4gV2UgaGF2ZSBhcGFjaGUvY3ln
d2luIGNoZWNrZWQgaW50byBvdXIgdHJlZSBzbworICAgICAgICAgICAgIyBwZW9wbGUgZG9uJ3Qg
aGF2ZSB0byBpbnN0YWxsIGl0IGludG8gdGhlaXIgY3lnd2luLgorICAgICAgICAgICAgY3lndXNy
ID0gcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICd1c3In
KQorICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYucmVwbGFjZSgnU2VydmVyUm9v
dCAiL3VzciInLAorICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290ICIlcyInICUgc2VsZi5fR2V0
Q3lnd2luUGF0aChjeWd1c3IpKQorCisgICAgICAgICMgVE9ETyhvamFuKTogSW5zdGVhZCBvZiB3
cml0aW5nIGFuIGV4dHJhIGZpbGUsIGNoZWNraW4gYSBjb25mIGZpbGUKKyAgICAgICAgIyB1cHN0
cmVhbS4gT3IsIGV2ZW4gYmV0dGVyLCB1cHN0cmVhbS9kZWxldGUgYWxsIG91ciBjaHJvbWUgaHR0
cAorICAgICAgICAjIHRlc3RzIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBzcGVjaWFsLWNhc2VkIERv
Y3VtZW50Um9vdCBhbmQgdGhlbgorICAgICAgICAjIGp1c3QgdXNlIHRoZSB1cHN0cmVhbQorICAg
ICAgICAjIGNvbmYgZmlsZS4KKyAgICAgICAgY2hyb21lX2RvY3VtZW50X3Jvb3QgPSBwYXRoX3V0
aWxzLlBhdGhGcm9tQmFzZSgnd2Via2l0JywgJ2RhdGEnLAorICAgICAgICAgICAgJ2xheW91dF90
ZXN0cycpCisgICAgICAgIGlmIHNlbGYuX0lzQ3lnd2luKCk6CisgICAgICAgICAgICBjaHJvbWVf
ZG9jdW1lbnRfcm9vdCA9IHNlbGYuX0dldEN5Z3dpblBhdGgoY2hyb21lX2RvY3VtZW50X3Jvb3Qp
CisgICAgICAgIGh0dHBkX2NvbmYgPSAoaHR0cGRfY29uZiArCisgICAgICAgICAgICBzZWxmLl9H
ZXRWaXJ0dWFsSG9zdENvbmZpZyhjaHJvbWVfZG9jdW1lbnRfcm9vdCwgODA4MSkpCisKKyAgICAg
ICAgZiA9IG9wZW4oaHR0cGRfY29uZmlnX2NvcHksICd3YicpCisgICAgICAgIGYud3JpdGUoaHR0
cGRfY29uZikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgaWYgc2VsZi5fSXNDeWd3aW4o
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9HZXRDeWd3aW5QYXRoKGh0dHBkX2NvbmZpZ19j
b3B5KQorICAgICAgICByZXR1cm4gaHR0cGRfY29uZmlnX2NvcHkKKworICAgIGRlZiBfR2V0Vmly
dHVhbEhvc3RDb25maWcoc2VsZiwgZG9jdW1lbnRfcm9vdCwgcG9ydCwgc3NsPUZhbHNlKToKKyAg
ICAgICAgIiIiUmV0dXJucyBhIDxWaXJ0dWFsSG9zdD4gZGlyZWN0aXZlIGJsb2NrIGZvciBhbiBo
dHRwZC5jb25mIGZpbGUuCisgICAgICAgIEl0IHdpbGwgbGlzdGVuIHRvIDEyNy4wLjAuMSBvbiBl
YWNoIG9mIHRoZSBnaXZlbiBwb3J0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICdcbicu
am9pbigoJzxWaXJ0dWFsSG9zdCAxMjcuMC4wLjE6JXM+JyAlIHBvcnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICdEb2N1bWVudFJvb3QgJXMnICUgZG9jdW1lbnRfcm9vdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3NsIGFuZCAnU1NMRW5naW5lIE9uJyBvciAnJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzwvVmlydHVhbEhvc3Q+JywgJycpKQorCisgICAgZGVmIF9TdGFy
dEh0dHBkUHJvY2VzcyhzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHRoZSBodHRwZCBwcm9jZXNz
IGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2VyZSBlcnJvcnMuIiIiCisgICAgICAgICMgVXNl
IHNoZWxsPVRydWUgYmVjYXVzZSB3ZSBqb2luIHRoZSBhcmd1bWVudHMgaW50byBhIHN0cmluZyBm
b3IKKyAgICAgICAgIyB0aGUgc2FrZSBvZiBXaW5kb3cvQ3lnd2luIGFuZCBpdCBuZWVkcyBxdW90
aW5nIHRoYXQgYnJlYWtzCisgICAgICAgICMgc2hlbGw9RmFsc2UuCisgICAgICAgIHNlbGYuX2h0
dHBkX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwK
KyAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgIGVyciA9IHNlbGYuX2h0dHBkX3Byb2Mu
c3RkZXJyLnJlYWQoKQorICAgICAgICBpZiBsZW4oZXJyKToKKyAgICAgICAgICAgIGxvZ2dpbmcu
ZGVidWcoZXJyKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVl
CisKKyAgICBkZWYgU3RhcnQoc2VsZik6CisgICAgICAgICIiIlN0YXJ0cyB0aGUgYXBhY2hlIGh0
dHAgc2VydmVyLiIiIgorICAgICAgICAjIFN0b3AgYW55IGN1cnJlbnRseSBydW5uaW5nIHNlcnZl
cnMuCisgICAgICAgIHNlbGYuU3RvcCgpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRp
bmcgYXBhY2hlIGh0dHAgc2VydmVyIikKKyAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLldh
aXRGb3JBY3Rpb24oc2VsZi5fU3RhcnRIdHRwZFByb2Nlc3MpCisgICAgICAgIGlmIHNlcnZlcl9z
dGFydGVkOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiQXBhY2hlIHN0YXJ0ZWQuIFRlc3Rp
bmcgcG9ydHMiKQorICAgICAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLldhaXRGb3JBY3Rp
b24oc2VsZi5Jc1NlcnZlclJ1bm5pbmdPbkFsbFBvcnRzKQorCisgICAgICAgIGlmIHNlcnZlcl9z
dGFydGVkOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBz
dGFydGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFp
bGVkIHRvIHN0YXJ0IGh0dHAgc2VydmVyJykKKworICAgIGRlZiBTdG9wKHNlbGYpOgorICAgICAg
ICAiIiJTdG9wcyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgorICAgICAgICBsb2dnaW5nLmRl
YnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5uaW5nIGh0dHAgc2VydmVycyIpCisgICAgICAgIGh0
dHBkX3BpZCA9IE5vbmUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUp
OgorICAgICAgICAgICAgaHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRs
aW5lKCkpCisgICAgICAgIHBhdGhfdXRpbHMuU2h1dERvd25IVFRQU2VydmVyKGh0dHBkX3BpZCkK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2ZhaWx1cmUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUwZWY3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlLnB5CkBA
IC0wLDAgKzEsMjAwIEBACisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKK0NIUk9NSVVNX1dJTiA9ICJjaHJvbWl1bS13aW4iCitDSFJP
TUlVTV9NQUMgPSAiY2hyb21pdW0tbWFjIgorQ0hST01JVU1fTElOVVggPSAiY2hyb21pdW0tbGlu
dXgiCitXRUJLSVRfV0lOX1RJVExFID0gIldlYktpdCBXaW4iCitXRUJLSVRfTUFDX1RJVExFID0g
IldlYktpdCBNYWMiCitXRUJLSVRfVElUTEUgPSAiV2ViS2l0IgorVU5LTk9XTiA9ICJVbmtub3du
IgorCitFWFBFQ1RFRF9JTUFHRV9GSUxFX0VORElORyA9ICItZXhwZWN0ZWQucG5nIgorQUNUVUFM
X0lNQUdFX0ZJTEVfRU5ESU5HID0gIi1hY3R1YWwucG5nIgorVVBTVFJFQU1fSU1BR0VfRklMRV9F
TkRJTkcgPSAiLWV4cGVjdGVkLXVwc3RyZWFtLnBuZyIKK0VYUEVDVEVEX1RFWFRfRklMRV9FTkRJ
TkcgPSAiLWV4cGVjdGVkLnR4dCIKK0FDVFVBTF9URVhUX0ZJTEVfRU5ESU5HID0gIi1hY3R1YWwu
dHh0IgorRElGRl9JTUFHRV9GSUxFX0VORElORyA9ICItZGlmZi5wbmciCitESUZGX1RFWFRfRklM
RV9FTkRJTkcgPSAiLWRpZmYudHh0IgorCitDSFJPTUlVTV9TUkNfSE9NRSA9ICJodHRwOi8vc3Jj
LmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3NyYy93ZWJraXQvIgorQ0hST01JVU1f
VFJBQ19IT01FID0gQ0hST01JVU1fU1JDX0hPTUUgKyAiZGF0YS9sYXlvdXRfdGVzdHMvIgorV0VC
S0lUX1RSQUNfSE9NRSA9ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvTGF5
b3V0VGVzdHMvIgorV0VCS0lUX1NWTl9IT1NUTkFNRSA9ICJzdm4ud2Via2l0Lm9yZyIKK1RISVJE
X1BBUlRZID0gInRoaXJkX3BhcnR5IgorCitXRUJLSVRfUExBVEZPUk1fVVJMX0JBU0UgPSBXRUJL
SVRfVFJBQ19IT01FICsgInBsYXRmb3JtIgorV0VCS0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMID0g
Imh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay8iCitXRUJLSVRf
SU1BR0VfQkFTRUxJTkVfQkFTRV9VUkxfV0lOID0gKFdFQktJVF9MQVlPVVRfVEVTVF9CQVNFX1VS
TCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vIikKK1dFQktJVF9JTUFHRV9CQVNFTElORV9CQVNFX1VSTF9NQUMgPSAoV0VC
S0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkxheW91dFRlc3RzL3BsYXRmb3JtL21hYy8iKQorV0VCS0lUX1RSQUNfSU1BR0Vf
QkFTRUxJTkVfQkFTRV9VUkxfTUFDID0gV0VCS0lUX1BMQVRGT1JNX1VSTF9CQVNFICsgIi9tYWMv
IgorV0VCS0lUX1RSQUNfSU1BR0VfQkFTRUxJTkVfQkFTRV9VUkxfV0lOID0gV0VCS0lUX1BMQVRG
T1JNX1VSTF9CQVNFICsgIi93aW4vIgorCitMQVlPVVRfVEVTVF9SRVNVTFRTX0RJUiA9ICJsYXlv
dXQtdGVzdC1yZXN1bHRzIgorCitGQUlMID0gIkZBSUwiCitUSU1FT1VUID0gIlRJTUVPVVQiCitD
UkFTSCA9ICJDUkFTSCIKK1BBU1MgPSAiUEFTUyIKK1dPTlRGSVggPSAiV09OVEZJWCIKKworCitj
bGFzcyBGYWlsdXJlKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyByZXByZXNlbnRz
IGEgZmFpbHVyZSBpbiB0aGUgdGVzdCBvdXRwdXQsIGFuZCBpcworICAgIGludGVuZGVkIGFzIGEg
ZGF0YSBtb2RlbCBvYmplY3QuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisg
ICAgICAgIHNlbGYucGxhdGZvcm0gPSAiIgorICAgICAgICBzZWxmLnRlc3RfcGF0aCA9ICIiCisg
ICAgICAgIHNlbGYudGV4dF9kaWZmX21pc21hdGNoID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbWFn
ZV9taXNtYXRjaCA9IEZhbHNlCisgICAgICAgIHNlbGYudGltZW91dCA9IEZhbHNlCisgICAgICAg
IHNlbGYuY3Jhc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYudGV4dF9iYXNlbGluZV91cmwgPSAi
IgorICAgICAgICBzZWxmLmltYWdlX2Jhc2VsaW5lX3VybCA9ICIiCisgICAgICAgIHNlbGYudGV4
dF9iYXNlbGluZV9hZ2UgPSAiIgorICAgICAgICBzZWxmLmltYWdlX2Jhc2VsaW5lX2FnZSA9ICIi
CisgICAgICAgIHNlbGYudGVzdF9hZ2UgPSAiIgorICAgICAgICBzZWxmLnRleHRfYmFzZWxpbmVf
bG9jYWwgPSAiIgorICAgICAgICBzZWxmLmltYWdlX2Jhc2VsaW5lX2xvY2FsID0gIiIKKyAgICAg
ICAgc2VsZi50ZXh0X2FjdHVhbF9sb2NhbCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYWN0dWFs
X2xvY2FsID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9iYXNlbGluZV91cHN0cmVhbV91cmwgPSAi
IgorICAgICAgICBzZWxmLmltYWdlX2Jhc2VsaW5lX3Vwc3RyZWFtX2xvY2FsID0gIiIKKyAgICAg
ICAgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19saW5lID0gIiIKKyAgICAgICAgc2VsZi5mbGFraW5l
c3MgPSAwCisKKyAgICBkZWYgR2V0RXhwZWN0ZWRJbWFnZUZpbGVuYW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fUmVuYW1lRW5kT2ZUZXN0UGF0aChFWFBFQ1RFRF9JTUFHRV9GSUxFX0VO
RElORykKKworICAgIGRlZiBHZXRBY3R1YWxJbWFnZUZpbGVuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fUmVuYW1lRW5kT2ZUZXN0UGF0aChBQ1RVQUxfSU1BR0VfRklMRV9FTkRJTkcp
CisKKyAgICBkZWYgR2V0RXhwZWN0ZWRUZXh0RmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9SZW5hbWVFbmRPZlRlc3RQYXRoKEVYUEVDVEVEX1RFWFRfRklMRV9FTkRJTkcpCisK
KyAgICBkZWYgR2V0QWN0dWFsVGV4dEZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fUmVuYW1lRW5kT2ZUZXN0UGF0aChBQ1RVQUxfVEVYVF9GSUxFX0VORElORykKKworICAgIGRl
ZiBHZXRJbWFnZURpZmZGaWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX1JlbmFt
ZUVuZE9mVGVzdFBhdGgoRElGRl9JTUFHRV9GSUxFX0VORElORykKKworICAgIGRlZiBHZXRUZXh0
RGlmZkZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fUmVuYW1lRW5kT2ZUZXN0
UGF0aChESUZGX1RFWFRfRklMRV9FTkRJTkcpCisKKyAgICBkZWYgR2V0SW1hZ2VVcHN0cmVhbUZp
bGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fUmVuYW1lRW5kT2ZUZXN0UGF0aChV
UFNUUkVBTV9JTUFHRV9GSUxFX0VORElORykKKworICAgIGRlZiBfUmVuYW1lRW5kT2ZUZXN0UGF0
aChzZWxmLCBzdWZmaXgpOgorICAgICAgICBsYXN0X2luZGV4ID0gc2VsZi50ZXN0X3BhdGgucmZp
bmQoIi4iKQorICAgICAgICBpZiBsYXN0X2luZGV4ID09IC0xOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYudGVzdF9wYXRoCisgICAgICAgIHJldHVybiBzZWxmLnRlc3RfcGF0aFswOmxhc3RfaW5k
ZXhdICsgc3VmZml4CisKKyAgICBkZWYgR2V0VGVzdEhvbWUoc2VsZik6CisgICAgICAgIGlmIHNl
bGYudGVzdF9wYXRoLnN0YXJ0c3dpdGgoImNocm9tZSIpOgorICAgICAgICAgICAgcmV0dXJuIENI
Uk9NSVVNX1RSQUNfSE9NRSArIHNlbGYudGVzdF9wYXRoCisgICAgICAgIHJldHVybiBXRUJLSVRf
VFJBQ19IT01FICsgc2VsZi50ZXN0X3BhdGgKKworICAgIGRlZiBHZXRJbWFnZUJhc2VsaW5lVHJh
Y0hvbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuSXNJbWFnZUJhc2VsaW5lSW5XZWJraXQoKToK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9HZXRUcmFjSG9tZShzZWxmLmltYWdlX2Jhc2VsaW5l
X3VybCkKKyAgICAgICAgcmV0dXJuIHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXJsCisKKyAgICBkZWYg
R2V0VGV4dEJhc2VsaW5lVHJhY0hvbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGV4dF9iYXNl
bGluZV91cmwgYW5kIHNlbGYuSXNUZXh0QmFzZWxpbmVJbldlYmtpdCgpOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX0dldFRyYWNIb21lKHNlbGYudGV4dF9iYXNlbGluZV91cmwpCisgICAgICAg
IHJldHVybiBzZWxmLnRleHRfYmFzZWxpbmVfdXJsCisKKyAgICBkZWYgX0dldFRyYWNIb21lKHNl
bGYsIGZpbGUpOgorICAgICAgICByZXR1cm4gV0VCS0lUX1RSQUNfSE9NRSArIGZpbGVbZmlsZS5m
aW5kKCJMYXlvdXRUZXN0cyIpOl0KKworICAgIGRlZiBHZXRUZXh0QmFzZWxpbmVMb2NhdGlvbihz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX0dldEZpbGVMb2NhdGlvbihzZWxmLnRleHRfYmFz
ZWxpbmVfdXJsKQorCisgICAgZGVmIEdldEltYWdlQmFzZWxpbmVMb2NhdGlvbihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX0dldEZpbGVMb2NhdGlvbihzZWxmLmltYWdlX2Jhc2VsaW5lX3Vy
bCkKKworICAgICMgVE9ETyhnd2lsc29uKTogUmVmYWN0b3IgdGhpcyBsb2dpYyBzbyBpdCBjYW4g
YmUgdXNlZCBieSBtdWx0aXBsZSBzY3JpcHRzLgorICAgICMgVE9ETyhnd2lsc29uKTogQ2hhbmdl
IHRoaXMgc28gdGhhdCBpdCByZXNwZWN0cyB0aGUgZmFsbGJhY2sgb3JkZXIgb2YKKyAgICAjIGRp
ZmZlcmVudCBwbGF0Zm9ybXMuIChJZiBwbGF0Zm9ybSBpcyBtYWMsIHRoZSBmYWxsYmFjayBzaG91
bGQgYmUKKyAgICAjIGRpZmZlcmVudC4pCisKKyAgICBkZWYgX0dldEZpbGVMb2NhdGlvbihzZWxm
LCBmaWxlKToKKyAgICAgICAgaWYgbm90IGZpbGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor
ICAgICAgICBpZiBmaWxlLmZpbmQoQ0hST01JVU1fV0lOKSA+IC0xOgorICAgICAgICAgICAgcmV0
dXJuIENIUk9NSVVNX1dJTgorICAgICAgICBpZiBmaWxlLmZpbmQoQ0hST01JVU1fTUFDKSA+IC0x
OgorICAgICAgICAgICAgcmV0dXJuIENIUk9NSVVNX01BQworICAgICAgICBpZiBmaWxlLmZpbmQo
Q0hST01JVU1fTElOVVgpID4gLTE6CisgICAgICAgICAgICByZXR1cm4gQ0hST01JVU1fTElOVVgK
KyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKFdFQktJVF9JTUFHRV9CQVNFTElORV9CQVNFX1VS
TF9XSU4pOgorICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9XSU5fVElUTEUKKyAgICAgICAgaWYg
ZmlsZS5zdGFydHN3aXRoKFdFQktJVF9JTUFHRV9CQVNFTElORV9CQVNFX1VSTF9NQUMpOgorICAg
ICAgICAgICAgcmV0dXJuIFdFQktJVF9NQUNfVElUTEUKKyAgICAgICAgIyBUT0RPKGd3aWxzb24p
OiBBZGQgbWFjLXNub3dsZW9wYXJkLCBtYWMtbGVvcGFyZCwgbWFjLXRpZ2VyIGhlcmUuCisgICAg
ICAgIGlmIGZpbGUuc3RhcnRzd2l0aChXRUJLSVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwpOgorICAg
ICAgICAgICAgcmV0dXJuIFdFQktJVF9USVRMRQorICAgICAgICByZXR1cm4gVU5LTk9XTgorCisg
ICAgZGVmIF9Jc0ZpbGVJbldlYktpdChzZWxmLCBmaWxlKToKKyAgICAgICAgcmV0dXJuIGZpbGUg
IT0gTm9uZSBhbmQgKGZpbGUuZmluZChXRUJLSVRfU1ZOX0hPU1ROQU1FKSA+IC0xIG9yCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmZpbmQoVEhJUkRfUEFSVFkpID4gLTEp
CisKKyAgICBkZWYgSXNJbWFnZUJhc2VsaW5lSW5DaHJvbWl1bShzZWxmKToKKyAgICAgICAgcmV0
dXJuIG5vdCBzZWxmLklzSW1hZ2VCYXNlbGluZUluV2Via2l0KCkKKworICAgIGRlZiBJc0ltYWdl
QmFzZWxpbmVJbldlYmtpdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX0lzRmlsZUluV2Vi
S2l0KHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXJsKQorCisgICAgZGVmIElzVGV4dEJhc2VsaW5lSW5D
aHJvbWl1bShzZWxmKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLklzVGV4dEJhc2VsaW5lSW5X
ZWJraXQoKQorCisgICAgZGVmIElzVGV4dEJhc2VsaW5lSW5XZWJraXQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9Jc0ZpbGVJbldlYktpdChzZWxmLnRleHRfYmFzZWxpbmVfdXJsKQorCisg
ICAgZGVmIEdldFRleHRSZXN1bHRMb2NhdGlvbkluWmlwRmlsZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX0dldEZpbGVMb2NhdGlvbkluWmlwRmlsZShzZWxmLkdldEFjdHVhbFRleHRGaWxl
bmFtZSgpKQorCisgICAgZGVmIEdldEltYWdlUmVzdWx0TG9jYXRpb25JblppcEZpbGUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9HZXRGaWxlTG9jYXRpb25JblppcEZpbGUoc2VsZi5HZXRB
Y3R1YWxJbWFnZUZpbGVuYW1lKCkpCisKKyAgICBkZWYgX0dldEZpbGVMb2NhdGlvbkluWmlwRmls
ZShzZWxmLCBmaWxlKToKKyAgICAgICAgcmV0dXJuICIlcy8lcyIgJSAoTEFZT1VUX1RFU1RfUkVT
VUxUU19ESVIsIGZpbGUpCisKKyAgICAjIFRPRE8oZ3dpbHNvbik6IGltcGxlbWVudCB0aGlzIG1l
dGhvZC4KKyAgICBkZWYgR2V0QWxsQmFzZWxpbmVMb2NhdGlvbnMoc2VsZik6CisgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICAjIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hldGhlciB0aGUgdGVz
dCBpcyBhY3R1YWxseSBleHBlY3RlZCB0byBmYWlsLAorICAgICMgaW4gb3JkZXIgdG8ga25vdyB3
aGV0aGVyIHRvIHJldHJpZXZlIGV4cGVjdGVkIHRlc3QgcmVzdWx0cyBmb3IgaXQuCisgICAgIyAo
dGVzdCByZXN1bHRzIGRvbnQgZXhpc3QgZm9yIHRlc3RzIGV4cGVjdGVkIHRvIGZhaWwvY3Jhc2gu
KQorCisgICAgZGVmIElzRXhwZWN0ZWRUb0ZhaWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9GaW5kS2V5d29yZEluRXhwZWN0YXRpb25zKEZBSUwpCisKKyAgICBkZWYgSXNFeHBlY3RlZFRv
VGltZW91dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX0ZpbmRLZXl3b3JkSW5FeHBlY3Rh
dGlvbnMoVElNRU9VVCkKKworICAgIGRlZiBJc0V4cGVjdGVkVG9DcmFzaChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX0ZpbmRLZXl3b3JkSW5FeHBlY3RhdGlvbnMoQ1JBU0gpCisKKyAgICBk
ZWYgSXNFeHBlY3RlZFRvUGFzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX0ZpbmRLZXl3
b3JkSW5FeHBlY3RhdGlvbnMoUEFTUykKKworICAgIGRlZiBJc1dvbnRGaXgoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9GaW5kS2V5d29yZEluRXhwZWN0YXRpb25zKFdPTlRGSVgpCisKKyAg
ICBkZWYgX0ZpbmRLZXl3b3JkSW5FeHBlY3RhdGlvbnMoc2VsZiwga2V5d29yZCk6CisgICAgICAg
IGlmIChub3Qgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19saW5lIG9yCisgICAgICAgICAgICBsZW4o
c2VsZi50ZXN0X2V4cGVjdGF0aW9uc19saW5lKSA9PSAwKToKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICBpZiBzZWxmLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUuZmluZChrZXl3b3Jk
KSA+IC0xOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1cmVfZmluZGVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YWEzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9m
YWlsdXJlX2ZpbmRlci5weQpAQCAtMCwwICsxLDg5MiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDYt
MjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjIFRPRE8oZ3dpbHNvbik6
IDEuICBDaGFuZ2UgdGV4dCBkaWZmZXJzIHRvIHVzZSBleHRlcm5hbCB1dGlscy4KKyMgICAgICAg
ICAgICAgICAgMi4gIENoYW5nZSB0ZXh0X2V4cGVjdGF0aW9ucyBwYXJzaW5nIHRvIGV4aXN0aW5n
CisjICAgICAgICAgICAgICAgICAgICBsb2dpYyBpbiBsYXlvdXRfcGFnY2thZ2UudGVzdF9leHBl
Y3RhdGlvbnMuCisKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1w
b3J0IHBhdGhfdXRpbHMKK2ltcG9ydCBwbGF0Zm9ybV91dGlscworaW1wb3J0IHJlCitpbXBvcnQg
c2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHVybGxpYjIKK2lt
cG9ydCB6aXBmaWxlCisKK2Zyb20gZmFpbHVyZSBpbXBvcnQgRmFpbHVyZQorCitXRUJLSVRfVFJB
Q19IT1NUTkFNRSA9ICJ0cmFjLndlYmtpdC5vcmciCitXRUJLSVRfTEFZT1VUX1RFU1RfQkFTRV9V
UkwgPSAoImh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5LyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAid2Via2l0L3RydW5rL0xheW91dFRlc3RzLyIpCitXRUJLSVRfUExB
VEZPUk1fQkFTRUxJTkVfVVJMID0gKFdFQktJVF9MQVlPVVRfVEVTVF9CQVNFX1VSTCArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGF0Zm9ybS8lcy8iKQorCitCVUlMREJPVF9C
QVNFID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvIgorV0VCS0lUX0JVSUxE
RVJfQkFTRSA9IEJVSUxEQk9UX0JBU0UgKyAid2F0ZXJmYWxsL2J1aWxkZXJzLyVzIgorRllJX0JV
SUxERVJfQkFTRSA9IEJVSUxEQk9UX0JBU0UgKyAid2F0ZXJmYWxsLmZ5aS9idWlsZGVycy8lcyIK
K1JFU1VMVFNfVVJMX0JBU0UgPSAiL2J1aWxkcy8lcy9zdGVwcy93ZWJraXRfdGVzdHMvbG9ncy9z
dGRpbyIKK0FSQ0hJVkVfVVJMX0JBU0UgPSAiL2J1aWxkcy8lcy9zdGVwcy9hcmNoaXZlX3dlYmtp
dF90ZXN0c19yZXN1bHRzL2xvZ3Mvc3RkaW8iCitaSVBfRklMRV9VUkxfQkFTRSA9IChCVUlMREJP
VF9CQVNFICsKKyAgICAgICAgICAgICAgICAgICAgICJsYXlvdXRfdGVzdF9yZXN1bHRzLyVzLyVz
L2xheW91dC10ZXN0LXJlc3VsdHMuemlwIikKK0NIUk9NSVVNX1NSQ19IT01FID0gImh0dHA6Ly9z
cmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvdHJ1bmsvc3JjL3dlYmtpdC8iCitMQVlPVVRf
VEVTVF9SRVBPX0JBU0VfVVJMID0gQ0hST01JVU1fU1JDX0hPTUUgKyAiZGF0YS9sYXlvdXRfdGVz
dHMvIgorCisjIFRPRE8oZ3dpbHNvbik6IFB1dCBmbGFreSB0ZXN0IGRhc2hib2FyZCBVUkwgaGVy
ZSB3aGVuIHJlYWR5LgorRkxBS1lfVEVTVF9VUkwgPSAiIgorRkxBS1lfVEVTVF9SRUdFWCA9ICIl
czwvYT48L3RkPjx0ZCBhbGlnbj1yaWdodD4oXGQrKTwvdGQ+IgorCitURVNUX0VYUEVDVEFUSU9O
U19VUkwgPSAoQ0hST01JVU1fU1JDX0hPTUUgKworICAgICAgICAgICAgICAgICAgICAgICAgICJ0
b29scy9sYXlvdXRfdGVzdHMvdGVzdF9leHBlY3RhdGlvbnMudHh0IikKKworIyBGYWlsdXJlIHR5
cGVzIGFzIGZvdW5kIGluIGJ1aWxkZXIgc3RkaW8uCitURVhUX0RJRkZfTUlTTUFUQ0ggPSAiVGV4
dCBkaWZmIG1pc21hdGNoIgorSU1BR0VfTUlTTUFUQ0ggPSAiSW1hZ2UgbWlzbWF0Y2giCitURVNU
X1RJTUVEX09VVCA9ICJUZXN0IHRpbWVkIG91dCIKK1RFU1RfU0hFTExfQ1JBU0hFRCA9ICJUZXN0
IHNoZWxsIGNyYXNoZWQiCisKK0NIUk9NSVVNX1dJTiA9ICJjaHJvbWl1bS13aW4iCitDSFJPTUlV
TV9XSU5fWFAgPSAiY2hyb21pdW0td2luLXhwIgorQ0hST01JVU1fV0lOX1ZJU1RBID0gImNocm9t
aXVtLXdpbi12aXN0YSIKK0NIUk9NSVVNX1dJTl83ID0gImNocm9taXVtLXdpbi03IgorQ0hST01J
VU1fTUFDID0gImNocm9taXVtLW1hYyIKK0NIUk9NSVVNX0xJTlVYID0gImNocm9taXVtLWxpbnV4
IgorUExBVEZPUk0gPSAicGxhdGZvcm0iCitMQVlPVVRURVNUUyA9ICJMYXlvdXRUZXN0cyIKKwor
IyBUaGVzZSBwbGF0Zm9ybSBkaXJzIG11c3QgYmUgaW4gb3JkZXIgb2YgdGhlaXIgcHJlY2VkZW5j
ZS4KKyMgVE9ETyhnd2lsc29uKTogVGhpcyBpcyBub3QgdGhlIHNhbWUgZmFsbGJhY2sgb3JkZXIg
YXMgdGVzdF9zaGVsbC4gIFRoaXMgbGlzdAorIyBzaG91bGQgYmUgcmV2ZXJzZWQsIGFuZCB3ZSBu
ZWVkIHRvIGFkZCBkZXRlY3Rpb24gZm9yIHRoZSB0eXBlIG9mIE9TIHRoYXQKKyMgdGhlIGdpdmVu
IGJ1aWxkZXIgaXMgcnVubmluZy4KK1dFQktJVF9NQUNfUExBVEZPUk1fRElSUyA9IFsibWFjLWxl
b3BhcmQiLCAibWFjLXNub3dsZW9wYXJkIiwgIm1hYyJdCitXRUJLSVRfV0lOX1BMQVRGT1JNX0RJ
UlMgPSBbIndpbiIsICJtYWMiXQorQ0hST01JVU1fTUFDX1BMQVRGT1JNX0RJUlMgPSBbQ0hST01J
VU1fTUFDXQorQ0hST01JVU1fV0lOX1BMQVRGT1JNX0RJUlMgPSBbQ0hST01JVU1fV0lOX1hQLCBD
SFJPTUlVTV9XSU5fVklTVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSFJPTUlV
TV9XSU5fNywgQ0hST01JVU1fV0lOXQorQ0hST01JVU1fTElOVVhfUExBVEZPUk1fRElSUyA9IFtD
SFJPTUlVTV9MSU5VWCwgQ0hST01JVU1fV0lOXQorCitBUkNISVZFX1VSTF9SRUdFWCA9ICJsYXN0
LipjaGFuZ2U6IChcZCspIgorQlVJTERfTkFNRV9SRUdFWCA9ICJidWlsZCBuYW1lOiAoW15cc10q
KSIKK0NIUk9NSVVNX0ZJTEVfQUdFX1JFR0VYID0gJzxiciAvPlxzKk1vZGlmaWVkXHMqPGVtPi4q
PC9lbT4gXCgoLiopXCkgYnknCitURVNUX1BBVEhfUkVHRVggPSAiW15cc10rPyIKK0ZBSUxFRF9S
RUdFWCA9ICgiREVCVUcgKCIgKyBURVNUX1BBVEhfUkVHRVggKyAiKSBmYWlsZWQ6XHMqIgorICAg
ICAgICAgICAgICAgICIoIiArIFRFWFRfRElGRl9NSVNNQVRDSCArICIpP1xzKiIKKyAgICAgICAg
ICAgICAgICAiKCIgKyBJTUFHRV9NSVNNQVRDSCArICIpP1xzKiIKKyAgICAgICAgICAgICAgICAi
KCIgKyBURVNUX1RJTUVEX09VVCArICIpP1xzKiIKKyAgICAgICAgICAgICAgICAiKCIgKyBURVNU
X1NIRUxMX0NSQVNIRUQgKyAiKT8iKQorRkFJTEVEX1VORVhQRUNURURfUkVHRVggPSAiICBbXlxz
XSsoPzogPSAuKj8pP1xuIgorTEFTVF9CVUlMRF9SRUdFWCA9ICgiPGgyPlJlY2VudCBCdWlsZHM6
PC9oMj4iCisgICAgICAgICAgICAgICAgICAgICJbXHNcU10qPzxhIGhyZWY9XCIuLi9idWlsZGVy
cy8uKj8vYnVpbGRzLyhcZCspXCI+IikKKyMgU29tZXRpbWVzIHRoZSBsaW5lcyBvZiBoeXBoZW5z
IGdldHMgaW50ZXJydXB0ZWQgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMKKyMgb3V0cHV0dGluZyB0
byBzdGRpbywgc28gZG9uJ3QgcmVseSBvbiB0aGVtIGJlaW5nIGNvbnRpZ3VvdXMuCitTVU1NQVJZ
X1JFR0VYID0gKCJcZCsgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAiCisgICAgICAgICAgICAgICAg
ICJcZCsgZGlkbid0OiguKj8pLXs3OH0iKSAgIyAtezc4fSAtLT4gNzggZGFzaGVzIGluIGEgcm93
LgorU1VNTUFSWV9SRUdSRVNTSU9OUyA9ICJSZWdyZXNzaW9uczouKj9cbigoPzogIFteXHNdKyg/
OiA9IC4qPyk/XG4pKykiCitURVNUX0VYUEVDVEFUSU9OU19QTEFURk9STV9SRUdFWCA9ICIoKFdP
TlRGSVggfEJVRy4qICkrLiogJXMuKiA6ICVzID0gW15cbl0qKSIKK1RFU1RfRVhQRUNUQVRJT05T
X05PX1BMQVRGT1JNX1JFR0VYID0gKCIoKFdPTlRGSVggfEJVRy4qICkrLioiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKD8hV0lOKSg/IUxJTlVYKSg/IU1BQykuKiA6
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAlcyA9IFteXG5dKiki
KQorCitXRUJLSVRfRklMRV9BR0VfUkVHRVggPSAoJzxhIGNsYXNzPSJmaWxlIiB0aXRsZT0iVmll
dyBGaWxlIiBocmVmPSIlcyI+Lio/PC9hPi4nCisgICAnKj88dGQgY2xhc3M9ImFnZSIgLio/Plxz
KicKKyAgICc8YSBjbGFzcz0idGltZWxpbmUiIGhyZWY9Ii4qPyIgdGl0bGU9Ii4qPyI+KC4qPyk8
L2E+JykKKworTE9DQUxfQkFTRUxJTkVfUkVHRVhFUyA9IFsKKyAgIi4qL3RoaXJkX3BhcnR5L1dl
YmtpdC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS8uKj8oLy4qKSIsCisgICIuKi90aGlyZF9wYXJ0eS9X
ZWJraXQvTGF5b3V0VGVzdHMoLy4qKSIsCisgICIuKi93ZWJraXQvZGF0YS9sYXlvdXRfdGVzdHMv
cGxhdGZvcm0vLio/L0xheW91dFRlc3RzKC8uKikiLAorICAiLiovd2Via2l0L2RhdGEvbGF5b3V0
X3Rlc3RzL3BsYXRmb3JtLy4qPygvLiopIiwKKyAgIi4qL3dlYmtpdC9kYXRhL2xheW91dF90ZXN0
cygvLiopIiwKKyAgIigvLiopIl0KKworVVBTVFJFQU1fSU1BR0VfRklMRV9FTkRJTkcgPSAiLXVw
c3RyZWFtLnBuZyIKKworVEVTVF9FWFBFQ1RBVElPTlNfV09OVEZJWCA9ICJXT05URklYIgorCitU
RU1QX1pJUF9ESVIgPSAidGVtcC16aXAtZGlyIgorCitUQVJHRVRTID0gWyJSZWxlYXNlIiwgIkRl
YnVnIl0KKworCitkZWYgR2V0VVJMQmFzZSh1c2VfZnlpKToKKyAgICBpZiB1c2VfZnlpOgorICAg
ICAgICByZXR1cm4gRllJX0JVSUxERVJfQkFTRQorICAgIHJldHVybiBXRUJLSVRfQlVJTERFUl9C
QVNFCisKKworZGVmIEdldFJlc3VsdHNVUkwoYnVpbGQsIHBsYXRmb3JtLCB1c2VfZnlpPUZhbHNl
KToKKyAgICByZXR1cm4gKEdldFVSTEJhc2UodXNlX2Z5aSkgKyBSRVNVTFRTX1VSTF9CQVNFKSAl
IChwbGF0Zm9ybSwgYnVpbGQpCisKKworZGVmIEdldEFyY2hpdmVVUkwoYnVpbGQsIHBsYXRmb3Jt
LCB1c2VfZnlpPUZhbHNlKToKKyAgICByZXR1cm4gKEdldFVSTEJhc2UodXNlX2Z5aSkgKyBBUkNI
SVZFX1VSTF9CQVNFKSAlIChwbGF0Zm9ybSwgYnVpbGQpCisKKworZGVmIEdldFppcEZpbGVVUkwo
YnVpbGQsIHBsYXRmb3JtKToKKyAgICByZXR1cm4gWklQX0ZJTEVfVVJMX0JBU0UgJSAocGxhdGZv
cm0sIGJ1aWxkKQorCisKK2RlZiBHZXRCdWlsZGVyVVJMKHBsYXRmb3JtLCB1c2VfZnlpPUZhbHNl
KToKKyAgICByZXR1cm4gR2V0VVJMQmFzZSh1c2VfZnlpKSAlIHBsYXRmb3JtCisKKworIyBUT0RP
KGd3aWxzb24pOiBPbmNlIHRoZSBuZXcgZmxha2luZXNzIGRhc2hib2FyZCBpcyBkb25lLCBjb25u
ZWN0IGl0IGhlcmUuCitkZWYgR2V0Rmxha3lUZXN0VVJMKHBsYXRmb3JtKToKKyAgICByZXR1cm4g
IiIKKworCisjIFRPRE8oZ3dpbHNvbik6IGNhbiB3ZSByZWZhY3RvciB0aGVzZSBpbnRvIHRoZSBy
ZXNvdXJjZWdhdGhlcmVyPworZGVmIElzTGludXhQbGF0Zm9ybShwbGF0Zm9ybSk6CisgICAgcmV0
dXJuIChwbGF0Zm9ybSBhbmQgcGxhdGZvcm0uZmluZCgiTGludXgiKSA+IC0xKQorCisKK2RlZiBJ
c01hY1BsYXRmb3JtKHBsYXRmb3JtKToKKyAgICByZXR1cm4gKHBsYXRmb3JtIGFuZCBwbGF0Zm9y
bS5maW5kKCJNYWMiKSA+IC0xKQorCisKK2RlZiBDcmVhdGVEaXJlY3RvcnkoZGlyKToKKyAgICAi
IiIKKyAgICBNZXRob2QgdGhhdCBjcmVhdGVzIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGdpdmVu
LgorICAgIFRoaXMgd2lsbCBjcmVhdGUgZGlyZWN0b3JpZXMgcmVjdXJzaXZlbHkgdW50aWwgdGhl
IGdpdmVuIGRpciBleGlzdHMuCisgICAgIiIiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRp
cik6CisgICAgICAgIG9zLm1ha2VkaXJzKGRpciwgMDc3NykKKworCitkZWYgRXh0cmFjdEZpcnN0
VmFsdWUoc3RyaW5nLCByZWdleCk6CisgICAgbSA9IHJlLnNlYXJjaChyZWdleCwgc3RyaW5nKQor
ICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSk6CisgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAg
cmV0dXJuIE5vbmUKKworCitkZWYgRXh0cmFjdFNpbmdsZVJlZ2V4QXRVUkwodXJsLCByZWdleCk6
CisgICAgY29udGVudCA9IFNjcmFwZVVSTCh1cmwpCisgICAgbSA9IHJlLnNlYXJjaChyZWdleCwg
Y29udGVudCwgcmUuRE9UQUxMKQorICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSk6CisgICAgICAgIHJl
dHVybiBtLmdyb3VwKDEpCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgU2NyYXBlVVJMKHVybCk6
CisgICAgcmV0dXJuIHVybGxpYjIudXJsb3Blbih1cmxsaWIyLlJlcXVlc3QodXJsKSkucmVhZCgp
CisKKworZGVmIEdldEltYWdlRGlmZkV4ZWN1dGFibGUoKToKKyAgICBmb3IgdGFyZ2V0IGluIFRB
UkdFVFM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLkltYWdl
RGlmZlBhdGgodGFyZ2V0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgICMgVGhpcyBidWlsZCB0YXJnZXQgZGlkIG5vdCBleGlz
dCwgdHJ5IHRoZSBuZXh0IG9uZS4KKyAgICByYWlzZSBFeGNlcHRpb24oIk5vIGltYWdlIGRpZmYg
ZXhlY3V0YWJsZSBjb3VsZCBiZSBmb3VuZC4gIFlvdSBtYXkgbmVlZCAiCisgICAgICAgICAgICAg
ICAgICAgICJ0byBidWlsZCB0aGUgaW1hZ2UgZGlmZiBwcm9qZWN0IHVuZGVyIGF0IGxlYXN0IG9u
ZSBidWlsZCAiCisgICAgICAgICAgICAgICAgICAgICJ0YXJnZXQgdG8gY3JlYXRlIGltYWdlIGRp
ZmZzLiIpCisKKworZGVmIEdlbmVyYXRlUE5HRGlmZihmaWxlMSwgZmlsZTIsIG91dHB1dF9maWxl
KToKKyAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBGYWxzZQorICAgIHRyeToKKyAgICAgICAgZXhl
Y3V0YWJsZSA9IEdldEltYWdlRGlmZkV4ZWN1dGFibGUoKQorICAgICAgICBjbWQgPSBbZXhlY3V0
YWJsZSwgJy0tZGlmZicsIGZpbGUxLCBmaWxlMiwgb3V0cHV0X2ZpbGVdCisgICAgICAgIF9jb21w
YXJlX2F2YWlsYWJsZSA9IFRydWUKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBw
cmludCAiTm8gY29tbWFuZCBsaW5lIHRvIGNvbXBhcmUgJXMgYW5kICVzIDogJXMiICUgKGZpbGUx
LCBmaWxlMiwgZSkKKworICAgIHJlc3VsdCA9IDEKKyAgICBpZiBfY29tcGFyZV9hdmFpbGFibGU6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChjbWQp
CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBl
cnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAgICAg
X2NvbXBhcmVfYXZhaWxhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwcmludCAiTm8gcG9z
c2libGUgY29tcGFyaXNvbiBiZXR3ZWVuICVzIGFuZCAlcy4iICUgKAorICAgICAgICAgICAgICAg
ICAgICBmaWxlMSwgZmlsZTIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJh
aXNlIGUKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBwcmludCAiVGhlIGdpdmVuIFBORyBp
bWFnZXMgd2VyZSB0aGUgc2FtZSEiCisgICAgcmV0dXJuIF9jb21wYXJlX2F2YWlsYWJsZQorCisK
KyMgVE9ETyhnd2lsc29uKTogQ2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBwcmV0dHkgcHJpbnQgZGlm
ZmVycy4KK2RlZiBHZW5lcmF0ZVRleHREaWZmKGZpbGUxLCBmaWxlMiwgb3V0cHV0X2ZpbGUpOgor
ICAgICMgT3BlbiB1cCBleHBlY3RlZCBhbmQgYWN0dWFsIHRleHQgZmlsZXMgYW5kIHVzZSBkaWZm
bGliIHRvIGNvbXBhcmUgdGhlbS4KKyAgICBkYXRhQSA9IG9wZW4oZmlsZTEsICdyJykucmVhZCgp
CisgICAgZGF0YUIgPSBvcGVuKGZpbGUyLCAncicpLnJlYWQoKQorICAgIGQgPSBkaWZmbGliLkRp
ZmZlcigpCisgICAgZGlmZnMgPSBsaXN0KGQuY29tcGFyZShkYXRhQS5zcGxpdCgiXG4iKSwgZGF0
YUIuc3BsaXQoIlxuIikpKQorICAgIG91dHB1dCA9IG9wZW4ob3V0cHV0X2ZpbGUsICd3JykKKyAg
ICBvdXRwdXQud3JpdGUoIlxuIi5qb2luKGRpZmZzKSkKKyAgICBvdXRwdXQuY2xvc2UoKQorCisK
K2NsYXNzIEJhc2VsaW5lQ2FuZGlkYXRlKG9iamVjdCk6CisgICAgIiIiU2ltcGxlIGRhdGEgb2Jq
ZWN0IGZvciBob2xkaW5nIHRoZSBVUkwgYW5kIGxvY2FsIGZpbGUgcGF0aCBvZiBhCisgICAgcG9z
c2libGUgYmFzZWxpbmUuICBUaGUgbG9jYWwgZmlsZSBwYXRoIGlzIG1lYW50IHRvIHJlZmVyIHRv
IHRoZSBsb2NhbGx5LQorICAgIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGF0IHRoZSBVUkwu
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jYWwsIHVybCk6CisgICAgICAgIHNlbGYu
bG9jYWxfZmlsZSA9IGxvY2FsCisgICAgICAgIHNlbGYuYmFzZWxpbmVfdXJsID0gdXJsCisKKyAg
ICBkZWYgSXNWYWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9jYWxfZmlsZSAhPSBO
b25lIGFuZCBzZWxmLmJhc2VsaW5lX3VybCAhPSBOb25lCisKKworY2xhc3MgRmFpbHVyZUZpbmRl
cihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIGJ1
aWxkLAorICAgICAgICAgICAgICAgICBidWlsZGVyX25hbWUsCisgICAgICAgICAgICAgICAgIGV4
Y2x1ZGVfa25vd25fZmFpbHVyZXMsCisgICAgICAgICAgICAgICAgIHRlc3RfcmVnZXgsCisgICAg
ICAgICAgICAgICAgIG91dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgIG1heF9mYWlsdXJlcywK
KyAgICAgICAgICAgICAgICAgdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgYnVpbGRlcl9vdXRw
dXRfbG9nX2ZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYXJjaGl2ZV9zdGVwX2xvZ19maWxl
PU5vbmUsCisgICAgICAgICAgICAgICAgIHppcF9maWxlPU5vbmUsCisgICAgICAgICAgICAgICAg
IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYuYnVpbGQgPSBidWls
ZAorICAgICAgICAjIFRPRE8oZ3dpbHNvbik6IGFkZCBmdWxsIHVybC1lbmNvZGluZyBmb3IgdGhl
IHBsYXRmb3JtLgorICAgICAgICBzZWxmLlNldFBsYXRmb3JtKGJ1aWxkZXJfbmFtZSkKKyAgICAg
ICAgc2VsZi5leGNsdWRlX2tub3duX2ZhaWx1cmVzID0gZXhjbHVkZV9rbm93bl9mYWlsdXJlcwor
ICAgICAgICBzZWxmLmV4Y2x1ZGVfd29udGZpeCA9IFRydWUKKyAgICAgICAgc2VsZi50ZXN0X3Jl
Z2V4ID0gdGVzdF9yZWdleAorICAgICAgICBzZWxmLm91dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisg
ICAgICAgIHNlbGYubWF4X2ZhaWx1cmVzID0gbWF4X2ZhaWx1cmVzCisgICAgICAgIHNlbGYudmVy
Ym9zZSA9IHZlcmJvc2UKKyAgICAgICAgc2VsZi5meWlfYnVpbGRlciA9IEZhbHNlCisgICAgICAg
IHNlbGYuX2ZsYWt5X3Rlc3RfY2FjaGUgPSB7fQorICAgICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0
aW9uc19jYWNoZSA9IE5vbmUKKyAgICAgICAgIyBJZiB0cnVlLCBzY3JhcGluZyB3aWxsIHN0aWxs
IGhhcHBlbiBidXQgbm8gZmlsZXMgd2lsbCBiZSBkb3dubG9hZGVkLgorICAgICAgICBzZWxmLmRv
bnRfZG93bmxvYWQgPSBGYWxzZQorICAgICAgICAjIExvY2FsIGNhY2hlcyBvZiBsb2cgZmlsZXMu
ICBJZiBzZXQsIHRoZSBmaW5kZXIgd2lsbCB1c2UgdGhlc2UgZmlsZXMKKyAgICAgICAgIyByYXRo
ZXIgdGhhbiBzY3JhcGluZyB0aGVtIGZyb20gdGhlIGJ1aWxkYm90LgorICAgICAgICBzZWxmLmJ1
aWxkZXJfb3V0cHV0X2xvZ19maWxlID0gYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGUKKyAgICAgICAg
c2VsZi5hcmNoaXZlX3N0ZXBfbG9nX2ZpbGUgPSBhcmNoaXZlX3N0ZXBfbG9nX2ZpbGUKKyAgICAg
ICAgc2VsZi56aXBfZmlsZSA9IHppcF9maWxlCisgICAgICAgIHNlbGYudGVzdF9leHBlY3RhdGlv
bnNfZmlsZSA9IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGUKKyAgICAgICAgc2VsZi5kZWxldGVfemlw
X2ZpbGUgPSBUcnVlCisgICAgICAgICMgRGV0ZXJtaW5lcyBpZiB0aGUgc2NyaXB0IHNob3VsZCBz
Y3JhcGUgdGhlIGJhc2VsaW5lcyBmcm9tIHdlYmtpdC5vcmcKKyAgICAgICAgIyBhbmQgY2hyb21p
dW0ub3JnLCBvciBpZiBpdCBzaG91bGQgdXNlIGxvY2FsIGJhc2VsaW5lcyBpbiB0aGUgY3VycmVu
dAorICAgICAgICAjIGNoZWNrb3V0LgorICAgICAgICBzZWxmLnVzZV9sb2NhbF9iYXNlbGluZXMg
PSBGYWxzZQorCisgICAgZGVmIFNldFBsYXRmb3JtKHNlbGYsIHBsYXRmb3JtKToKKyAgICAgICAg
c2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoIiAiLCAiJTIwIikKKworICAgICMgVE9E
Tyhnd2lsc29uKTogQ2hhbmdlIHRoaXMgdG8gZ2V0IHRoZSBsYXN0IGJ1aWxkIHRoYXQgZmluaXNo
ZWQKKyAgICAjIHN1Y2Nlc3NmdWxseS4KKworICAgIGRlZiBHZXRMYXN0QnVpbGQoc2VsZik6Cisg
ICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBsYXN0IGJ1aWxkIG51bWJlciBmb3IgdGhp
cyBwbGF0Zm9ybS4KKyAgICAgICAgSWYgdXNlX2Z5aSBpcyB0cnVlLCB0aGlzIG9ubHkgbG9va3Mg
YXQgdGhlIGZ5aSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgcmV0dXJuIEV4dHJhY3RTaW5nbGVSZWdleEF0VVJMKEdldEJ1aWxkZXJVUkwoc2VsZi5wbGF0
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZnlpX2J1aWxkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExBU1RfQlVJTERfUkVHRVgpCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhU
VFBFcnJvcjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZ5aV9idWlsZGVyOgorICAgICAgICAg
ICAgICAgIHNlbGYuZnlpX2J1aWxkZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuR2V0TGFzdEJ1aWxkKCkKKworICAgIGRlZiBHZXRGYWlsdXJlcyhzZWxmKToKKyAgICAgICAg
aWYgbm90IHNlbGYuYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkID0gc2VsZi5HZXRMYXN0
QnVpbGQoKQorICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiVXNp
bmcgYnVpbGQgbnVtYmVyICVzIiAlIHNlbGYuYnVpbGQKKworICAgICAgICBpZiBzZWxmLnVzZV9s
b2NhbF9iYXNlbGluZXM6CisgICAgICAgICAgICBzZWxmLl9CdWlsZEJhc2VsaW5lSW5kZXhlcygp
CisgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBzZWxmLl9HZXRGYWlsdXJlc0Zyb21CdWlsZGVyKCkK
KyAgICAgICAgaWYgKHNlbGYuZmFpbHVyZXMgYW5kCisgICAgICAgICAgICAoc2VsZi5fRG93bmxv
YWRSZXN1bHRSZXNvdXJjZXMoKSBvciBzZWxmLmRvbnRfZG93bmxvYWQpKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLmZhaWx1cmVzCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX0dl
dEZhaWx1cmVzRnJvbUJ1aWxkZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5z
IGEgbGlzdCBvZiBmYWlsdXJlcyBmb3IgdGhlIGdpdmVuIGJ1aWxkIGFuZCBwbGF0Zm9ybSBieSBz
Y3JhcGluZworICAgICAgICB0aGUgYnVpbGRib3RzIGFuZCBwYXJzaW5nIHRoZWlyIHJlc3VsdHMu
CisgICAgICAgIFRoZSBsaXN0IHJldHVybmVkIGNvbnRhaW5zIEZhaWx1cmUgY2xhc3Mgb2JqZWN0
cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHBy
aW50ICJGZXRjaGluZyBmYWlsdXJlcyBmcm9tIGJ1aWxkYm90Li4uIgorCisgICAgICAgIGNvbnRl
bnQgPSBzZWxmLl9TY3JhcGVCdWlsZGVyT3V0cHV0KCkKKyAgICAgICAgaWYgbm90IGNvbnRlbnQ6
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBtYXRjaGVzID0gc2VsZi5fRmluZE1h
dGNoZXNJbkJ1aWxkZXJPdXRwdXQoY29udGVudCkKKworICAgICAgICBpZiBzZWxmLnZlcmJvc2U6
CisgICAgICAgICAgICBwcmludCAiJXMgZmFpbHVyZXMgZm91bmQuIiAlIGxlbihtYXRjaGVzKQor
CisgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgbWF0Y2hlcy5zb3J0KCkKKyAgICAgICAg
Zm9yIG1hdGNoIGluIG1hdGNoZXM6CisgICAgICAgICAgICBpZiAobGVuKGZhaWx1cmVzKSA8IHNl
bGYubWF4X2ZhaWx1cmVzIGFuZAorICAgICAgICAgICAgICAgIChub3Qgc2VsZi50ZXN0X3JlZ2V4
IG9yIG1hdGNoWzBdLmZpbmQoc2VsZi50ZXN0X3JlZ2V4KSA+IC0xKSk6CisgICAgICAgICAgICAg
ICAgZmFpbHVyZSA9IHNlbGYuX0NyZWF0ZUZhaWx1cmVGcm9tTWF0Y2gobWF0Y2gpCisgICAgICAg
ICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCBmYWls
dXJlLnRlc3RfcGF0aAorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChmYWlsdXJlKQor
CisgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgZGVmIF9TY3JhcGVCdWlsZGVyT3V0cHV0
KHNlbGYpOgorICAgICAgICAjIElmIHRoZSBidWlsZCBsb2cgZmlsZSBpcyBzcGVjaWZpZWQsIHVz
ZSB0aGF0IGluc3RlYWQgb2Ygc2NyYXBpbmcuCisgICAgICAgIGlmIHNlbGYuYnVpbGRlcl9vdXRw
dXRfbG9nX2ZpbGU6CisgICAgICAgICAgICBsb2cgPSBvcGVuKHNlbGYuYnVpbGRlcl9vdXRwdXRf
bG9nX2ZpbGUsICdyJykKKyAgICAgICAgICAgIHJldHVybiAiIi5qb2luKGxvZy5yZWFkbGluZXMo
KSkKKworICAgICAgICAjIFNjcmFwZSB0aGUgZmFpbHVyZXMgZnJvbSB0aGUgYnVpbGRib3QgZm9y
IHRoaXMgcmV2aXNpb24uCisgICAgICAgIHRyeToKKworICAgICAgICAgICAgcmV0dXJuIFNjcmFw
ZVVSTChHZXRSZXN1bHRzVVJMKHNlbGYuYnVpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmZ5aV9idWlsZGVyKSkKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgIyBJZiB3ZSBoaXQgYSBwcm9ibGVtLCBhbmQgd2UncmUgbm90IG9uIHRoZSBG
WUkgYnVpbGRlciwgdHJ5IGl0CisgICAgICAgICAgICAjIGFnYWluIG9uIHRoZSBGWUkgYnVpbGRl
ci4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZ5aV9idWlsZGVyOgorICAgICAgICAgICAgICAg
IGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJDb3VsZCBub3Qg
ZmluZCBidWlsZGVyIG9uIHdhdGVyZmFsbCwgdHJ5aW5nIGZ5aSAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ3YXRlcmZhbGwuLi4iKQorICAgICAgICAgICAgICAgIHNlbGYuZnlpX2J1aWxk
ZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX1NjcmFwZUJ1aWxkZXJPdXRw
dXQoKQorICAgICAgICAgICAgcHJpbnQgIkkgY291bGQgbm90IGZpbmQgdGhhdCBidWlsZGVyLCBv
ciBidWlsZCBkaWQgbm90IGNvbXBpbGUuIgorICAgICAgICAgICAgcHJpbnQgIkNoZWNrIHRoYXQg
dGhlIGJ1aWxkZXIgbmFtZSBtYXRjaGVzIGV4YWN0bHkgIgorICAgICAgICAgICAgcHJpbnQgIihj
YXNlIHNlbnNpdGl2ZSksIGFuZCB3cmFwIHF1b3RlcyBhcm91bmQgYnVpbGRlciBuYW1lcyAiCisg
ICAgICAgICAgICBwcmludCAidGhhdCBoYXZlIHNwYWNlcy4iCisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgIyBUT0RPKGd3aWxzb24pOiBUaGUgdHlwZSBvZiBmYWlsdXJlIGlzIG5vdyBv
dXRwdXQgaW4gdGhlIHN1bW1hcnksIHNvIG5vCisgICAgIyBtYXRjaGluZyBiZXR3ZWVuIHRoZSBz
dW1tYXJ5IGFuZCB0aGUgZWFybGllciBvdXRwdXQgaXMgbmVjZXNzYXJ5LgorICAgICMgQ2hhbmdl
IHRoaXMgbWV0aG9kIGFuZCBvdGhlcnMgdG8gZGVyaXZlIGZhaWx1cmUgdHlwZXMgZnJvbSBzdW1t
YXJ5IG9ubHkuCisKKyAgICBkZWYgX0ZpbmRNYXRjaGVzSW5CdWlsZGVyT3V0cHV0KHNlbGYsIG91
dHB1dCk6CisgICAgICAgIG1hdGNoZXMgPSBbXQorICAgICAgICBtYXRjaGVzID0gcmUuZmluZGFs
bChGQUlMRURfUkVHRVgsIG91dHB1dCwgcmUuTVVMVElMSU5FKQorICAgICAgICBpZiBzZWxmLmV4
Y2x1ZGVfa25vd25fZmFpbHVyZXM6CisgICAgICAgICAgICBzdW1tYXJ5ID0gcmUuc2VhcmNoKFNV
TU1BUllfUkVHRVgsIG91dHB1dCwgcmUuRE9UQUxMKQorICAgICAgICAgICAgcmVncmVzc2lvbnMg
PSBbXQorICAgICAgICAgICAgaWYgc3VtbWFyeToKKyAgICAgICAgICAgICAgICByZWdyZXNzaW9u
cyA9IHNlbGYuX0ZpbmRSZWdyZXNzaW9uc0luU3VtbWFyeShzdW1tYXJ5Lmdyb3VwKDEpKQorICAg
ICAgICAgICAgbWF0Y2hlcyA9IHNlbGYuX01hdGNoUmVncmVzc2lvbnNUb0ZhaWx1cmVzKHJlZ3Jl
c3Npb25zLCBtYXRjaGVzKQorICAgICAgICByZXR1cm4gbWF0Y2hlcworCisgICAgZGVmIF9DcmVh
dGVGYWlsdXJlRnJvbU1hdGNoKHNlbGYsIG1hdGNoKToKKyAgICAgICAgZmFpbHVyZSA9IEZhaWx1
cmUoKQorICAgICAgICBmYWlsdXJlLnRleHRfZGlmZl9taXNtYXRjaCA9IG1hdGNoWzFdICE9ICcn
CisgICAgICAgIGZhaWx1cmUuaW1hZ2VfbWlzbWF0Y2ggPSBtYXRjaFsyXSAhPSAnJworICAgICAg
ICBmYWlsdXJlLmNyYXNoZWQgPSBtYXRjaFs0XSAhPSAnJworICAgICAgICBmYWlsdXJlLnRpbWVv
dXQgPSBtYXRjaFszXSAhPSAnJworICAgICAgICBmYWlsdXJlLnRlc3RfcGF0aCA9IG1hdGNoWzBd
CisgICAgICAgIGZhaWx1cmUucGxhdGZvcm0gPSBzZWxmLnBsYXRmb3JtCisgICAgICAgIHJldHVy
biBmYWlsdXJlCisKKyAgICBkZWYgX0ZpbmRSZWdyZXNzaW9uc0luU3VtbWFyeShzZWxmLCBzdW1t
YXJ5KToKKyAgICAgICAgcmVncmVzc2lvbnMgPSBbXQorICAgICAgICBpZiBub3Qgc3VtbWFyeSBv
ciBub3QgbGVuKHN1bW1hcnkpOgorICAgICAgICAgICAgcmV0dXJuIHJlZ3Jlc3Npb25zCisgICAg
ICAgIG1hdGNoZXMgPSByZS5maW5kYWxsKFNVTU1BUllfUkVHUkVTU0lPTlMsIHN1bW1hcnksIHJl
LkRPVEFMTCkKKyAgICAgICAgZm9yIG1hdGNoIGluIG1hdGNoZXM6CisgICAgICAgICAgICBsaW5l
cyA9IHJlLmZpbmRhbGwoRkFJTEVEX1VORVhQRUNURURfUkVHRVgsIG1hdGNoLCByZS5ET1RBTEwp
CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBjbGlwcGVk
ID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgY2xpcHBlZC5maW5kKCI9IikgPiAt
MToKKyAgICAgICAgICAgICAgICAgICAgY2xpcHBlZCA9IGNsaXBwZWRbOmNsaXBwZWQuZmluZCgi
PSIpIC0gMV0KKyAgICAgICAgICAgICAgICByZWdyZXNzaW9ucy5hcHBlbmQoY2xpcHBlZCkKKyAg
ICAgICAgcmV0dXJuIHJlZ3Jlc3Npb25zCisKKyAgICBkZWYgX01hdGNoUmVncmVzc2lvbnNUb0Zh
aWx1cmVzKHNlbGYsIHJlZ3Jlc3Npb25zLCBmYWlsdXJlcyk6CisgICAgICAgIG1hdGNoZXMgPSBb
XQorICAgICAgICBmb3IgcmVncmVzc2lvbiBpbiByZWdyZXNzaW9uczoKKyAgICAgICAgICAgIGZv
ciBmYWlsdXJlIGluIGZhaWx1cmVzOgorICAgICAgICAgICAgICAgIGlmIGZhaWx1cmVbMF0uZmlu
ZChyZWdyZXNzaW9uKSA+IC0xOgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChm
YWlsdXJlKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gbWF0Y2hl
cworCisgICAgIyBUT0RPKGd3aWxzb24pOiBhZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgY29uZmxp
Y3RpbmcgYnVpbGQgbnVtYmVycyBieQorICAgICMgcmVuYW1pbmcgdGhlIHppcCBmaWxlIGFuZCBu
YW1pbmcgdGhlIGRpcmVjdG9yeSBhcHByb3ByaWF0ZWx5LgorCisgICAgZGVmIF9Eb3dubG9hZFJl
c3VsdFJlc291cmNlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmRzIGFuZCBkb3du
bG9hZHMvZXh0cmFjdHMgYWxsIG9mIHRoZSB0ZXN0IHJlc3VsdHMgKHBpeGVsL3RleHQKKyAgICAg
ICAgb3V0cHV0KSBmb3IgYWxsIG9mIHRoZSBnaXZlbiBmYWlsdXJlcy4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgdGFyZ2V0X3ppcCA9ICIlcy9sYXlvdXQtdGVzdC1yZXN1bHRzLSVzLnppcCIgJSAo
c2VsZi5vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkKQorICAgICAgICBpZiBzZWxmLnppcF9maWxlOgor
ICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLnppcF9maWxlCisgICAgICAgICAgICBzZWxmLmRl
bGV0ZV96aXBfZmlsZSA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXZpc2lv
biwgYnVpbGRfbmFtZSA9IHNlbGYuX0dldFJldmlzaW9uQW5kQnVpbGRGcm9tQXJjaGl2ZVN0ZXAo
KQorICAgICAgICAgICAgemlwX3VybCA9IEdldFppcEZpbGVVUkwocmV2aXNpb24sIGJ1aWxkX25h
bWUpCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQg
IkRvd25sb2FkaW5nIHppcCBmaWxlIGZyb20gJXMgdG8gJXMiICUgKHppcF91cmwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldF96aXApCisgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuX0Rvd25sb2FkRmlsZSh6aXBf
dXJsLCB0YXJnZXRfemlwLCAiYiIpCisgICAgICAgICAgICBpZiBub3QgZmlsZW5hbWU6CisgICAg
ICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAo
IkNvdWxkIG5vdCBkb3dubG9hZCB6aXAgZmlsZSBmcm9tICVzLiAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiRG9lcyBpdCBleGlzdD8iICUgemlwX3VybCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB6aXBmaWxlLmlzX3ppcGZpbGUoZmlsZW5hbWUpOgor
ICAgICAgICAgICAgemlwID0gemlwZmlsZS5aaXBGaWxlKGZpbGVuYW1lKQorICAgICAgICAgICAg
aWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdFeHRyYWN0aW5nIGZpbGVz
Li4uJworICAgICAgICAgICAgZGlyZWN0b3J5ID0gIiVzL2xheW91dC10ZXN0LXJlc3VsdHMtJXMi
ICUgKHNlbGYub3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkKQorICAgICAgICAgICAgQ3JlYXRlRGlyZWN0
b3J5KGRpcmVjdG9yeSkKKyAgICAgICAgICAgIHNlbGYuX1VuemlwWmlwZmlsZSh6aXAsIFRFTVBf
WklQX0RJUikKKworICAgICAgICAgICAgZm9yIGZhaWx1cmUgaW4gc2VsZi5mYWlsdXJlczoKKyAg
ICAgICAgICAgICAgICBmYWlsdXJlLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUgPSAoCisgICAgICAg
ICAgICAgICAgICBzZWxmLl9HZXRUZXN0RXhwZWN0YXRpb25zTGluZShmYWlsdXJlLnRlc3RfcGF0
aCkpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5leGNsdWRlX3dvbnRmaXggYW5kIGZhaWx1cmUu
SXNXb250Rml4KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMucmVtb3ZlKGZh
aWx1cmUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYg
ZmFpbHVyZS50ZXh0X2RpZmZfbWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX1Bv
cHVsYXRlVGV4dEZhaWx1cmUoZmFpbHVyZSwgZGlyZWN0b3J5LCB6aXApCisgICAgICAgICAgICAg
ICAgaWYgZmFpbHVyZS5pbWFnZV9taXNtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
UG9wdWxhdGVJbWFnZUZhaWx1cmUoZmFpbHVyZSwgZGlyZWN0b3J5LCB6aXApCisgICAgICAgICAg
ICAgICAgaWYgbm90IHNlbGYudXNlX2xvY2FsX2Jhc2VsaW5lczoKKyAgICAgICAgICAgICAgICAg
ICAgZmFpbHVyZS50ZXN0X2FnZSA9IHNlbGYuX0dldEZpbGVBZ2UoZmFpbHVyZS5HZXRUZXN0SG9t
ZSgpKQorICAgICAgICAgICAgICAgIGZhaWx1cmUuZmxha2luZXNzID0gc2VsZi5fR2V0Rmxha2lu
ZXNzKGZhaWx1cmUudGVzdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGxhdGZvcm0pCisgICAgICAgICAgICB6aXAuY2xv
c2UoKQorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50
ICJGaWxlcyBleHRyYWN0ZWQuIgorICAgICAgICAgICAgaWYgc2VsZi5kZWxldGVfemlwX2ZpbGU6
CisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBw
cmludCAiQ2xlYW5pbmcgdXAgemlwIGZpbGUuLi4iCisgICAgICAgICAgICAgICAgcGF0aF91dGls
cy5SZW1vdmVEaXJlY3RvcnkoVEVNUF9aSVBfRElSKQorICAgICAgICAgICAgICAgIG9zLnJlbW92
ZShmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJEb3dubG9h
ZGVkIGZpbGUgJyVzJyBkb2Vzbid0IGxvb2sgbGlrZSBhIHppcCBmaWxlLiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
ZGVmIF9VbnppcFppcGZpbGUoc2VsZiwgemlwLCBiYXNlX2Rpcik6CisgICAgICAgIGZvciBpLCBu
YW1lIGluIGVudW1lcmF0ZSh6aXAubmFtZWxpc3QoKSk6CisgICAgICAgICAgICBpZiBub3QgbmFt
ZS5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgIGV4dHJhY3RlZF9maWxlX3BhdGggPSBv
cy5wYXRoLmpvaW4oYmFzZV9kaXIsIG5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgICAgICAocGF0aCwgZmlsZW5hbWUpID0gb3MucGF0aC5zcGxpdChleHRyYWN0ZWRf
ZmlsZV9wYXRoKQorICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhwYXRoLCAwNzc3KQor
ICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAg
ICAgICAgICAgIG91dGZpbGUgPSBvcGVuKGV4dHJhY3RlZF9maWxlX3BhdGgsICd3YicpCisgICAg
ICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSh6aXAucmVhZChuYW1lKSkKKyAgICAgICAgICAgICAg
ICBvdXRmaWxlLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBvdXRmaWxlLmNsb3NlKCkKKyAgICAg
ICAgICAgICAgICBvcy5jaG1vZChleHRyYWN0ZWRfZmlsZV9wYXRoLCAwNzc3KQorCisgICAgZGVm
IF9HZXRSZXZpc2lvbkFuZEJ1aWxkRnJvbUFyY2hpdmVTdGVwKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLmFyY2hpdmVfc3RlcF9sb2dfZmlsZToKKyAgICAgICAgICAgIGxvZyA9IG9wZW4oc2VsZi5h
cmNoaXZlX3N0ZXBfbG9nX2ZpbGUsICdyJykKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiIi5qb2lu
KGxvZy5yZWFkbGluZXMoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSBT
Y3JhcGVVUkwoR2V0QXJjaGl2ZVVSTChzZWxmLmJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGxhdGZvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5meWlfYnVpbGRlcikpCisgICAgICAg
IHJldmlzaW9uID0gRXh0cmFjdEZpcnN0VmFsdWUoY29udGVudCwgQVJDSElWRV9VUkxfUkVHRVgp
CisgICAgICAgIGJ1aWxkX25hbWUgPSBFeHRyYWN0Rmlyc3RWYWx1ZShjb250ZW50LCBCVUlMRF9O
QU1FX1JFR0VYKQorICAgICAgICByZXR1cm4gKHJldmlzaW9uLCBidWlsZF9uYW1lKQorCisgICAg
ZGVmIF9Qb3B1bGF0ZVRleHRGYWlsdXJlKHNlbGYsIGZhaWx1cmUsIGRpcmVjdG9yeSwgemlwKToK
KyAgICAgICAgYmFzZWxpbmUgPSBzZWxmLl9HZXRCYXNlbGluZShmYWlsdXJlLkdldEV4cGVjdGVk
VGV4dEZpbGVuYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0b3J5KQorICAgICAgICBmYWlsdXJlLnRleHRfYmFzZWxpbmVfbG9jYWwgPSBiYXNlbGluZS5s
b2NhbF9maWxlCisgICAgICAgIGZhaWx1cmUudGV4dF9iYXNlbGluZV91cmwgPSBiYXNlbGluZS5i
YXNlbGluZV91cmwKKyAgICAgICAgZmFpbHVyZS50ZXh0X2Jhc2VsaW5lX2FnZSA9ICgKKyAgICAg
ICAgICBzZWxmLl9HZXRGaWxlQWdlKGZhaWx1cmUuR2V0VGV4dEJhc2VsaW5lVHJhY0hvbWUoKSkp
CisgICAgICAgIGZhaWx1cmUudGV4dF9hY3R1YWxfbG9jYWwgPSAiJXMvJXMiICUgKGRpcmVjdG9y
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVy
ZS5HZXRBY3R1YWxUZXh0RmlsZW5hbWUoKSkKKyAgICAgICAgaWYgKGJhc2VsaW5lIGFuZCBiYXNl
bGluZS5Jc1ZhbGlkKCkgYW5kIG5vdCBzZWxmLmRvbnRfZG93bmxvYWQpOgorICAgICAgICAgICAg
c2VsZi5fQ29weUZpbGVGcm9tWmlwRGlyKGZhaWx1cmUuR2V0VGV4dFJlc3VsdExvY2F0aW9uSW5a
aXBGaWxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS50
ZXh0X2FjdHVhbF9sb2NhbCkKKyAgICAgICAgICAgIEdlbmVyYXRlVGV4dERpZmYoZmFpbHVyZS50
ZXh0X2Jhc2VsaW5lX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJl
LnRleHRfYWN0dWFsX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rv
cnkgKyAiLyIgKyBmYWlsdXJlLkdldFRleHREaWZmRmlsZW5hbWUoKSkKKworICAgIGRlZiBfUG9w
dWxhdGVJbWFnZUZhaWx1cmUoc2VsZiwgZmFpbHVyZSwgZGlyZWN0b3J5LCB6aXApOgorICAgICAg
ICBiYXNlbGluZSA9IHNlbGYuX0dldEJhc2VsaW5lKGZhaWx1cmUuR2V0RXhwZWN0ZWRJbWFnZUZp
bGVuYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5
KQorICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX2xvY2FsID0gYmFzZWxpbmUubG9jYWxf
ZmlsZQorICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3VybCA9IGJhc2VsaW5lLmJhc2Vs
aW5lX3VybAorICAgICAgICBpZiBiYXNlbGluZSBhbmQgYmFzZWxpbmUuSXNWYWxpZCgpOgorICAg
ICAgICAgICAgZmFpbHVyZS5pbWFnZV9iYXNlbGluZV9hZ2UgPSAoCisgICAgICAgICAgICAgIHNl
bGYuX0dldEZpbGVBZ2UoZmFpbHVyZS5HZXRJbWFnZUJhc2VsaW5lVHJhY0hvbWUoKSkpCisgICAg
ICAgICAgICBmYWlsdXJlLmltYWdlX2FjdHVhbF9sb2NhbCA9ICIlcy8lcyIgJSAoZGlyZWN0b3J5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLkdldEFj
dHVhbEltYWdlRmlsZW5hbWUoKSkKKyAgICAgICAgICAgIHNlbGYuX0NvcHlGaWxlRnJvbVppcERp
cihmYWlsdXJlLkdldEltYWdlUmVzdWx0TG9jYXRpb25JblppcEZpbGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2FjdHVhbF9sb2NhbCkKKyAg
ICAgICAgICAgIGlmIChub3QgR2VuZXJhdGVQTkdEaWZmKGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVf
bG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdl
X2FjdHVhbF9sb2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLyVz
IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXJlY3RvcnksIGZhaWx1
cmUuR2V0SW1hZ2VEaWZmRmlsZW5hbWUoKSkpCisgICAgICAgICAgICAgICAgYW5kIHNlbGYudmVy
Ym9zZSk6CisgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBnZW5lcmF0ZSBQTkcgZGlm
ZiBmb3IgJXMiICUgZmFpbHVyZS50ZXN0X3BhdGgKKyAgICAgICAgICAgIGlmIGZhaWx1cmUuSXNJ
bWFnZUJhc2VsaW5lSW5DaHJvbWl1bSgpIG9yIHNlbGYudXNlX2xvY2FsX2Jhc2VsaW5lczoKKyAg
ICAgICAgICAgICAgICB1cHN0cmVhbV9iYXNlbGluZSA9ICgKKyAgICAgICAgICAgICAgICAgIHNl
bGYuX0dldFVwc3RyZWFtQmFzZWxpbmUoZmFpbHVyZS5HZXRFeHBlY3RlZEltYWdlRmlsZW5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5
KSkKKyAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3Vwc3RyZWFtX2xvY2Fs
ID0gXAorICAgICAgICAgICAgICAgICAgICB1cHN0cmVhbV9iYXNlbGluZS5sb2NhbF9maWxlCisg
ICAgICAgICAgICAgICAgZmFpbHVyZS5pbWFnZV9iYXNlbGluZV91cHN0cmVhbV91cmwgPSBcCisg
ICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtX2Jhc2VsaW5lLmJhc2VsaW5lX3VybAorCisgICAg
ZGVmIF9HZXRCYXNlbGluZShzZWxmLCBmaWxlbmFtZSwgZGlyZWN0b3J5LCB1cHN0cmVhbV9vbmx5
PUZhbHNlKToKKyAgICAgICAgIiIiIFNlYXJjaCBhbmQgZG93bmxvYWQgdGhlIGJhc2VsaW5lIGZv
ciB0aGUgZ2l2ZW4gdGVzdCAocHV0IGl0IGluIHRoZQorICAgICAgICBkaXJlY3RvcnkgZ2l2ZW4u
KSIiIgorCisgICAgICAgIGxvY2FsX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwg
ZmlsZW5hbWUpCisgICAgICAgIGxvY2FsX2RpcmVjdG9yeSA9IGxvY2FsX2ZpbGVuYW1lWzpsb2Nh
bF9maWxlbmFtZS5yZmluZCgiLyIpXQorICAgICAgICBpZiB1cHN0cmVhbV9vbmx5OgorICAgICAg
ICAgICAgbGFzdF9pbmRleCA9IGxvY2FsX2ZpbGVuYW1lLnJmaW5kKCIuIikKKyAgICAgICAgICAg
IGlmIGxhc3RfaW5kZXggPiAtMToKKyAgICAgICAgICAgICAgICBsb2NhbF9maWxlbmFtZSA9IChs
b2NhbF9maWxlbmFtZVs6bGFzdF9pbmRleF0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVQU1RSRUFNX0lNQUdFX0ZJTEVfRU5ESU5HKQorCisgICAgICAgIGRvd25sb2FkX2Zp
bGVfbW9kaWZpZXJzID0gIiIKKyAgICAgICAgaWYgbG9jYWxfZmlsZW5hbWUuZW5kc3dpdGgoIi5w
bmciKToKKyAgICAgICAgICAgIGRvd25sb2FkX2ZpbGVfbW9kaWZpZXJzID0gImIiICAjIGJpbmFy
eSBmaWxlCisKKyAgICAgICAgaWYgbm90IHNlbGYuZG9udF9kb3dubG9hZDoKKyAgICAgICAgICAg
IENyZWF0ZURpcmVjdG9yeShsb2NhbF9kaXJlY3RvcnkpCisKKyAgICAgICAgbG9jYWxfYmFzZWxp
bmUgPSBOb25lCisgICAgICAgIHVybF9vZl9iYXNlbGluZSA9IE5vbmUKKworICAgICAgICBpZiBz
ZWxmLnVzZV9sb2NhbF9iYXNlbGluZXM6CisgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5ID0gc2Vs
Zi5fTm9ybWFsaXplQmFzZWxpbmVJZGVudGlmaWVyKGZpbGVuYW1lKQorICAgICAgICAgICAgZGlj
dCA9IHNlbGYuYmFzZWxpbmVfZGljdAorICAgICAgICAgICAgaWYgdXBzdHJlYW1fb25seToKKyAg
ICAgICAgICAgICAgICBkaWN0ID0gc2VsZi53ZWJraXRfYmFzZWxpbmVfZGljdAorICAgICAgICAg
ICAgaWYgdGVzdF9wYXRoX2tleSBpbiBkaWN0OgorICAgICAgICAgICAgICAgIGxvY2FsX2Jhc2Vs
aW5lID0gZGljdFt0ZXN0X3BhdGhfa2V5XQorICAgICAgICAgICAgICAgIHVybF9vZl9iYXNlbGlu
ZSA9IGxvY2FsX2Jhc2VsaW5lCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkobG9jYWxfYmFz
ZWxpbmUsIGxvY2FsX2RpcmVjdG9yeSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi52ZXJib3NlOgor
ICAgICAgICAgICAgICAgIHByaW50ICgiQmFzZWxpbmUgJXMgZG9lcyBub3QgZXhpc3QgaW4gdGhl
IGluZGV4LiIgJQorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5KQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgaW5kZXggPSAwCisgICAgICAgICAgICBwb3NzaWJsZV9maWxl
cyA9IHNlbGYuX0dldFBvc3NpYmxlRmlsZUxpc3QoZmlsZW5hbWUsIHVwc3RyZWFtX29ubHkpCisg
ICAgICAgICAgICAjIERvd25sb2FkIHRoZSBiYXNlbGluZXMgZnJvbSB0aGUgd2Via2l0Lm9yZyBz
aXRlLgorICAgICAgICAgICAgd2hpbGUgbG9jYWxfYmFzZWxpbmUgPT0gTm9uZSBhbmQgaW5kZXgg
PCBsZW4ocG9zc2libGVfZmlsZXMpOgorICAgICAgICAgICAgICAgIGxvY2FsX2Jhc2VsaW5lID0g
c2VsZi5fRG93bmxvYWRGaWxlKHBvc3NpYmxlX2ZpbGVzW2luZGV4XSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9maWxlbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9h
ZF9maWxlX21vZGlmaWVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgIGlmIGxvY2FsX2Jhc2VsaW5lOgor
ICAgICAgICAgICAgICAgICAgICB1cmxfb2ZfYmFzZWxpbmUgPSBwb3NzaWJsZV9maWxlc1tpbmRl
eF0KKyAgICAgICAgICAgICAgICBpbmRleCArPSAxCisKKyAgICAgICAgaWYgbm90IGxvY2FsX2Jh
c2VsaW5lOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHBy
aW50ICJDb3VsZCBub3QgZmluZCBhbnkgYmFzZWxpbmUgZm9yICVzIiAlIGZpbGVuYW1lCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBsb2NhbF9iYXNlbGluZSA9IG9zLnBhdGgubm9ybXBhdGgo
bG9jYWxfYmFzZWxpbmUpCisgICAgICAgIGlmIGxvY2FsX2Jhc2VsaW5lIGFuZCBzZWxmLnZlcmJv
c2U6CisgICAgICAgICAgICBwcmludCAiRm91bmQgYmFzZWxpbmU6ICVzIiAlIHVybF9vZl9iYXNl
bGluZQorCisgICAgICAgIHJldHVybiBCYXNlbGluZUNhbmRpZGF0ZShsb2NhbF9iYXNlbGluZSwg
dXJsX29mX2Jhc2VsaW5lKQorCisgICAgZGVmIF9BZGRCYXNlbGluZVBhdGhzKHNlbGYsIGxpc3Qs
IGJhc2VfcGF0aCwgZGlyZWN0b3JpZXMpOgorICAgICAgICBmb3IgZGlyIGluIGRpcmVjdG9yaWVz
OgorICAgICAgICAgICAgbGlzdC5hcHBlbmQob3MucGF0aC5qb2luKGJhc2VfcGF0aCwgZGlyKSkK
KworICAgICMgVE9ETyhnd2lsc29uKTogUmVmYWN0b3IgdGhpcyBtZXRob2QgdG8gdXNlCisgICAg
IyBwbGF0Zm9ybV91dGlsc18qLkJhc2VsaW5lU2VhcmNoUGF0aCBpbnN0ZWFkIG9mIGN1c3RvbSBs
b2dpYy4KKworICAgIGRlZiBfQnVpbGRCYXNlbGluZUluZGV4ZXMoc2VsZik6CisgICAgICAgICIi
IiBCdWlsZHMgYW4gaW5kZXggb2YgYWxsIHRoZSBrbm93biBsb2NhbCBiYXNlbGluZXMgaW4gYm90
aCBjaHJvbWl1bQorICAgICAgICBhbmQgd2Via2l0LiBUd28gYmFzZWxpbmVzIGFyZSBjcmVhdGVk
LCBhIHdlYmtpdC1zcGVjaWZpYyAobm8gY2hyb21pdW0KKyAgICAgICAgYmFzZWxpbmUpIGRpY3Rp
b25hcnkgYW5kIGFuIG92ZXJhbGwgKGJvdGgpIGRpY3Rpb25hcnkuIEVhY2ggb25lIGhhcyBhCisg
ICAgICAgIHN0cnVjdHVyZSBsaWtlOiAiL2Zhc3QvZG9tL29uZS1leHBlY3RlZC50eHQiIC0+Cisg
ICAgICAgICJDOlxccGF0aFxcdG9cXGZhc3RcXGRvbVxcb25lLWV4cGVjdGVkLnR4dCIKKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJCdWls
ZGluZyBpbmRleCBvZiBhbGwgbG9jYWwgYmFzZWxpbmVzLi4uIgorCisgICAgICAgIHNlbGYuYmFz
ZWxpbmVfZGljdCA9IHt9CisgICAgICAgIHNlbGYud2Via2l0X2Jhc2VsaW5lX2RpY3QgPSB7fQor
CisgICAgICAgIGJhc2UgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5jdXJkaXIpCisgICAgICAg
IHdlYmtpdF9iYXNlID0gcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ1dl
YmtpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xh
eW91dFRlc3RzJykKKyAgICAgICAgY2hyb21pdW1fYmFzZSA9IHBhdGhfdXRpbHMuUGF0aEZyb21C
YXNlKCd3ZWJraXQnLCAnZGF0YScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKKyAgICAgICAgY2hyb21pdW1fYmFzZV9wbGF0
Zm9ybSA9IG9zLnBhdGguam9pbihjaHJvbWl1bV9iYXNlLCBQTEFURk9STSkKKyAgICAgICAgd2Vi
a2l0X2Jhc2VfcGxhdGZvcm0gPSBvcy5wYXRoLmpvaW4od2Via2l0X2Jhc2UsIFBMQVRGT1JNKQor
CisgICAgICAgIHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVzID0gW10KKyAgICAgICAgcG9zc2libGVf
d2Via2l0X2ZpbGVzID0gW10KKworICAgICAgICBpZiBJc01hY1BsYXRmb3JtKHNlbGYucGxhdGZv
cm0pOgorICAgICAgICAgICAgc2VsZi5fQWRkQmFzZWxpbmVQYXRocyhwb3NzaWJsZV9jaHJvbWl1
bV9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fYmFz
ZV9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hST01JVU1f
TUFDX1BMQVRGT1JNX0RJUlMpCisgICAgICAgICAgICBzZWxmLl9BZGRCYXNlbGluZVBhdGhzKHBv
c3NpYmxlX2Nocm9taXVtX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3ZWJraXRfYmFzZV9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX01BQ19QTEFURk9STV9ESVJTKQorICAgICAgICAgICAgc2VsZi5fQWRkQmFzZWxp
bmVQYXRocyhwb3NzaWJsZV93ZWJraXRfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdlYmtpdF9iYXNlX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfTUFDX1BMQVRGT1JNX0RJUlMpCisgICAgICAgIGVsaWYgSXNMaW51
eFBsYXRmb3JtKHNlbGYucGxhdGZvcm0pOgorICAgICAgICAgICAgc2VsZi5fQWRkQmFzZWxpbmVQ
YXRocyhwb3NzaWJsZV9jaHJvbWl1bV9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hyb21pdW1fYmFzZV9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0hST01JVU1fTElOVVhfUExBVEZPUk1fRElSUykKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYuX0FkZEJhc2VsaW5lUGF0aHMocG9zc2libGVfY2hyb21pdW1fZmls
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX2Jhc2VfcGxh
dGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dJTl9Q
TEFURk9STV9ESVJTKQorCisgICAgICAgIGlmIG5vdCBJc01hY1BsYXRmb3JtKHNlbGYucGxhdGZv
cm0pOgorICAgICAgICAgICAgc2VsZi5fQWRkQmFzZWxpbmVQYXRocyhwb3NzaWJsZV93ZWJraXRf
ZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9iYXNlX3Bs
YXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfV0lOX1BM
QVRGT1JNX0RJUlMpCisKKyAgICAgICAgcG9zc2libGVfd2Via2l0X2ZpbGVzLmFwcGVuZCh3ZWJr
aXRfYmFzZSkKKworICAgICAgICBzZWxmLl9Qb3B1bGF0ZUJhc2VsaW5lRGljdChwb3NzaWJsZV93
ZWJraXRfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2Vi
a2l0X2Jhc2VsaW5lX2RpY3QpCisgICAgICAgIHNlbGYuX1BvcHVsYXRlQmFzZWxpbmVEaWN0KHBv
c3NpYmxlX2Nocm9taXVtX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmJhc2VsaW5lX2RpY3QpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi53ZWJraXRfYmFz
ZWxpbmVfZGljdC5rZXlzKCk6CisgICAgICAgICAgICBpZiBub3Qga2V5IGluIHNlbGYuYmFzZWxp
bmVfZGljdDoKKyAgICAgICAgICAgICAgICBzZWxmLmJhc2VsaW5lX2RpY3Rba2V5XSA9IHNlbGYu
d2Via2l0X2Jhc2VsaW5lX2RpY3Rba2V5XQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgX1BvcHVsYXRlQmFzZWxpbmVEaWN0KHNlbGYsIGRpcmVjdG9yaWVzLCBkaWN0aW9uYXJ5KToK
KyAgICAgICAgZm9yIGRpciBpbiBkaXJlY3RvcmllczoKKyAgICAgICAgICAgIG9zLnBhdGgud2Fs
ayhkaXIsIHNlbGYuX1Zpc2l0QmFzZWxpbmVEaXIsIGRpY3Rpb25hcnkpCisKKyAgICBkZWYgX1Zp
c2l0QmFzZWxpbmVEaXIoc2VsZiwgZGljdCwgZGlybmFtZSwgbmFtZXMpOgorICAgICAgICAiIiIg
TWV0aG9kIGludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBvcy5wYXRoLndhbGsgdG8gYnVpbGQgdXAg
YW4gaW5kZXgKKyAgICAgICAgb2Ygd2hlcmUgYWxsIHRoZSB0ZXN0IGJhc2VsaW5lcyBleGlzdC4g
IiIiCisgICAgICAgICMgRXhjbHVkZSAuc3ZuIGZyb20gdGhlIHdhbGssIHNpbmNlIHdlIGRvbid0
IGNhcmUgd2hhdCBpcyBpbiB0aGVzZQorICAgICAgICAjIGRpcnMuCisgICAgICAgIGlmICcuc3Zu
JyBpbiBuYW1lczoKKyAgICAgICAgICAgIG5hbWVzLnJlbW92ZSgnLnN2bicpCisgICAgICAgIGZv
ciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgbmFtZS5maW5kKCItZXhwZWN0ZWQuIikg
PiAtMToKKyAgICAgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5ID0gb3MucGF0aC5qb2luKGRpcm5h
bWUsIG5hbWUpCisgICAgICAgICAgICAgICAgIyBGaXggcGF0aCBzZXBhcmF0b3JzIHRvIG1hdGNo
IHRoZSBzZXBhcmF0b3JzIHVzZWQgb24KKyAgICAgICAgICAgICAgICAjIHRoZSBidWlsZGJvdHMu
CisgICAgICAgICAgICAgICAgdGVzdF9wYXRoX2tleSA9IHRlc3RfcGF0aF9rZXkucmVwbGFjZSgi
XFwiLCAiLyIpCisgICAgICAgICAgICAgICAgdGVzdF9wYXRoX2tleSA9IHNlbGYuX05vcm1hbGl6
ZUJhc2VsaW5lSWRlbnRpZmllcigKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoX2tleSkK
KyAgICAgICAgICAgICAgICBpZiBub3QgdGVzdF9wYXRoX2tleSBpbiBkaWN0OgorICAgICAgICAg
ICAgICAgICAgICBkaWN0W3Rlc3RfcGF0aF9rZXldID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIG5h
bWUpCisKKyAgICAjIFRPRE8oZ3dpbHNvbik6IFNpbXBsaWZ5IGlkZW50aWZpZXIgY3JlYXRpb24g
dG8gbm90IHJlbHkgc28gaGVhdmlseSBvbgorICAgICMgZGlyZWN0b3J5IGFuZCBwYXRoIG5hbWVz
LgorCisgICAgZGVmIF9Ob3JtYWxpemVCYXNlbGluZUlkZW50aWZpZXIoc2VsZiwgdGVzdF9wYXRo
KToKKyAgICAgICAgIiIiIEdpdmVuIGVpdGhlciBhIGJhc2VsaW5lIHBhdGggKGkuZS4gL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy8uLi4pCisgICAgICAgIG9yIGEgdGVzdCBwYXRoIChpLmUuIC9M
YXlvdXRUZXN0cy9mYXN0L2RvbS8uLi4uKSB3aWxsIG5vcm1hbGl6ZQorICAgICAgICB0byBhIHVu
aXF1ZSBpZGVudGlmaWVyLiBUaGlzIGlzIGJhc2ljYWxseSBhIGhhc2hpbmcgZnVuY3Rpb24gZm9y
CisgICAgICAgIGxheW91dCB0ZXN0IHBhdGhzLiIiIgorCisgICAgICAgIGZvciByZWdleCBpbiBM
T0NBTF9CQVNFTElORV9SRUdFWEVTOgorICAgICAgICAgICAgdmFsdWUgPSBFeHRyYWN0Rmlyc3RW
YWx1ZSh0ZXN0X3BhdGgsIHJlZ2V4KQorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHJldHVybiB0ZXN0X3BhdGgKKworICAgIGRlZiBf
QWRkQmFzZWxpbmVVUkxzKHNlbGYsIGxpc3QsIGJhc2VfdXJsLCBwbGF0Zm9ybXMpOgorICAgICAg
ICAjIElmIHRoZSBiYXNlIFVSTCBkb2Vzbid0IGNvbnRhaW4gYW55IHBsYXRmb3JtIGluIGl0cyBw
YXRoLCBvbmx5IGFkZAorICAgICAgICAjIHRoZSBiYXNlIFVSTCB0byB0aGUgbGlzdC4gIFRoaXMg
aGFwcGVucyB3aXRoIHRoZSBjaHJvbWUvIGRpci4KKyAgICAgICAgaWYgYmFzZV91cmwuZmluZCgi
JXMiKSA9PSAtMToKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGJhc2VfdXJsKQorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIGZvciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6CisgICAgICAgICAg
ICBsaXN0LmFwcGVuZChiYXNlX3VybCAlIHBsYXRmb3JtKQorCisgICAgIyBUT0RPKGd3aWxzb24p
OiBSZWZhY3RvciB0aGlzIG1ldGhvZCB0byB1c2UKKyAgICAjIHBsYXRmb3JtX3V0aWxzXyouQmFz
ZWxpbmVTZWFyY2hQYXRoIGluc3RlYWQgb2YgY3VzdG9tIGxvZ2ljLiAgVGhpcyBtYXkKKyAgICAj
IHJlcXVpcmUgc29tZSBraW5kIG9mIHdyYXBwZXIgc2luY2UgdGhpcyBtZXRob2QgbG9va3MgZm9y
IFVSTHMgaW5zdGVhZAorICAgICMgb2YgbG9jYWwgcGF0aHMuCisKKyAgICBkZWYgX0dldFBvc3Np
YmxlRmlsZUxpc3Qoc2VsZiwgZmlsZW5hbWUsIG9ubHlfd2Via2l0KToKKyAgICAgICAgIiIiIFJl
dHVybnMgYSBsaXN0IG9mIHBvc3NpYmxlIGZpbGVuYW1lIGxvY2F0aW9ucyBmb3IgdGhlIGdpdmVu
IGZpbGUuCisgICAgICAgIFVzZXMgdGhlIHBsYXRmb3JtIG9mIHRoZSBjbGFzcyB0byBkZXRlcm1p
bmUgdGhlIG9yZGVyLgorICAgICAgICAiIiIKKworICAgICAgICBwb3NzaWJsZV9jaHJvbWl1bV9m
aWxlcyA9IFtdCisgICAgICAgIHBvc3NpYmxlX3dlYmtpdF9maWxlcyA9IFtdCisKKyAgICAgICAg
Y2hyb21pdW1fcGxhdGZvcm1fdXJsID0gTEFZT1VUX1RFU1RfUkVQT19CQVNFX1VSTAorICAgICAg
ICBpZiBub3QgZmlsZW5hbWUuc3RhcnRzd2l0aCgiY2hyb21lIik6CisgICAgICAgICAgICBjaHJv
bWl1bV9wbGF0Zm9ybV91cmwgKz0gInBsYXRmb3JtLyVzLyIKKyAgICAgICAgY2hyb21pdW1fcGxh
dGZvcm1fdXJsICs9IGZpbGVuYW1lCisKKyAgICAgICAgd2Via2l0X3BsYXRmb3JtX3VybCA9IFdF
QktJVF9QTEFURk9STV9CQVNFTElORV9VUkwgKyBmaWxlbmFtZQorCisgICAgICAgIGlmIElzTWFj
UGxhdGZvcm0oc2VsZi5wbGF0Zm9ybSk6CisgICAgICAgICAgICBzZWxmLl9BZGRCYXNlbGluZVVS
THMocG9zc2libGVfY2hyb21pdW1fZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hyb21pdW1fcGxhdGZvcm1fdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENIUk9NSVVNX01BQ19QTEFURk9STV9ESVJTKQorICAgICAgICAgICAgc2VsZi5fQWRk
QmFzZWxpbmVVUkxzKHBvc3NpYmxlX3dlYmtpdF9maWxlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3ZWJraXRfcGxhdGZvcm1fdXJsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9NQUNfUExBVEZPUk1fRElSUykKKyAgICAgICAgZWxpZiBJc0xp
bnV4UGxhdGZvcm0oc2VsZi5wbGF0Zm9ybSk6CisgICAgICAgICAgICBzZWxmLl9BZGRCYXNlbGlu
ZVVSTHMocG9zc2libGVfY2hyb21pdW1fZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hyb21pdW1fcGxhdGZvcm1fdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENIUk9NSVVNX0xJTlVYX1BMQVRGT1JNX0RJUlMpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBzZWxmLl9BZGRCYXNlbGluZVVSTHMocG9zc2libGVfY2hyb21pdW1fZmlsZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fcGxhdGZvcm1fdXJs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dJTl9QTEFURk9S
TV9ESVJTKQorCisgICAgICAgIGlmIG5vdCBJc01hY1BsYXRmb3JtKHNlbGYucGxhdGZvcm0pOgor
ICAgICAgICAgICAgc2VsZi5fQWRkQmFzZWxpbmVVUkxzKHBvc3NpYmxlX3dlYmtpdF9maWxlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfcGxhdGZvcm1fdXJsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9XSU5fUExBVEZPUk1fRElS
UykKKyAgICAgICAgcG9zc2libGVfd2Via2l0X2ZpbGVzLmFwcGVuZChXRUJLSVRfTEFZT1VUX1RF
U1RfQkFTRV9VUkwgKyBmaWxlbmFtZSkKKworICAgICAgICBpZiBvbmx5X3dlYmtpdDoKKyAgICAg
ICAgICAgIHJldHVybiBwb3NzaWJsZV93ZWJraXRfZmlsZXMKKyAgICAgICAgcmV0dXJuIHBvc3Np
YmxlX2Nocm9taXVtX2ZpbGVzICsgcG9zc2libGVfd2Via2l0X2ZpbGVzCisKKyAgICAjIExpa2Ug
X0dldEJhc2VsaW5lLCBidXQgb25seSByZXRyaWV2ZXMgdGhlIGJhc2VsaW5lIGZyb20gdXBzdHJl
YW0gKHNraXAKKyAgICAjIGxvb2tpbmcgaW4gY2hyb21pdW0pLgorCisgICAgZGVmIF9HZXRVcHN0
cmVhbUJhc2VsaW5lKHNlbGYsIGZpbGVuYW1lLCBkaXJlY3RvcnkpOgorICAgICAgICByZXR1cm4g
c2VsZi5fR2V0QmFzZWxpbmUoZmlsZW5hbWUsIGRpcmVjdG9yeSwgdXBzdHJlYW1fb25seT1UcnVl
KQorCisgICAgZGVmIF9HZXRGaWxlQWdlKHNlbGYsIHVybCk6CisgICAgICAgICMgQ2hlY2sgaWYg
dGhlIGdpdmVuIFVSTCBpcyByZWFsbHkgYSBsb2NhbCBmaWxlIHBhdGguCisgICAgICAgIGlmIG5v
dCB1cmwgb3Igbm90IHVybC5zdGFydHN3aXRoKCJodHRwIik6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB1cmwuZmluZChXRUJLSVRfVFJBQ19I
T1NUTkFNRSkgPiAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gRXh0cmFjdFNpbmdsZVJlZ2V4
QXRVUkwodXJsWzp1cmwucmZpbmQoIi8iKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9GSUxFX0FHRV9SRUdFWCAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybFt1cmwuZmluZCgiL2Jyb3dzZXIi
KTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRXh0cmFjdFNp
bmdsZVJlZ2V4QXRVUkwodXJsICsgIj92aWV3PWxvZyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX0ZJTEVfQUdFX1JFR0VYKQorICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAg
cHJpbnQgIkNvdWxkIG5vdCBmaW5kIGFnZSBmb3IgJXMuIERvZXMgdGhlIGZpbGUgZXhpc3Q/IiAl
IHVybAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgUmV0dXJucyBhIGZsYWtpbmVz
cyBvbiBhIHNjYWxlIG9mIDEtNTAuCisgICAgIyBUT0RPKGd3aWxzb24pOiBtb2RpZnkgdGhpcyB0
byBhbHNvIHJldHVybiB3aGljaCBvZiB0aGUgbGFzdCAxMAorICAgICMgYnVpbGRzIGZhaWxlZCBm
b3IgdGhpcyB0ZXN0LgorCisgICAgZGVmIF9HZXRGbGFraW5lc3Moc2VsZiwgdGVzdF9wYXRoLCB0
YXJnZXRfcGxhdGZvcm0pOgorICAgICAgICB1cmwgPSBHZXRGbGFreVRlc3RVUkwodGFyZ2V0X3Bs
YXRmb3JtKQorICAgICAgICBpZiB1cmwgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgICAgIGlmIHVybCBpbiBzZWxmLl9mbGFreV90ZXN0X2NhY2hlOgorICAgICAgICAgICAg
Y29udGVudCA9IHNlbGYuX2ZsYWt5X3Rlc3RfY2FjaGVbdXJsXQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgY29udGVudCA9IHVybGxpYjIudXJsb3Blbih1cmxsaWIyLlJlcXVlc3QodXJsKSku
cmVhZCgpCisgICAgICAgICAgICBzZWxmLl9mbGFreV90ZXN0X2NhY2hlW3VybF0gPSBjb250ZW50
CisKKyAgICAgICAgZmxha2luZXNzID0gRXh0cmFjdEZpcnN0VmFsdWUoY29udGVudCwgRkxBS1lf
VEVTVF9SRUdFWCAlIHRlc3RfcGF0aCkKKyAgICAgICAgcmV0dXJuIGZsYWtpbmVzcworCisgICAg
ZGVmIF9HZXRUZXN0RXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fdGVz
dF9leHBlY3RhdGlvbnNfY2FjaGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
aWYgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19maWxlOgorICAgICAgICAgICAgICAgICAgICBsb2cg
PSBvcGVuKHNlbGYudGVzdF9leHBlY3RhdGlvbnNfZmlsZSwgJ3InKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0aW9uc19jYWNoZSA9ICJcbiIuam9pbihsb2cucmVhZGxp
bmVzKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
dGVzdF9leHBlY3RhdGlvbnNfY2FjaGUgPSBTY3JhcGVVUkwoCisgICAgICAgICAgICAgICAgICAg
ICAgICBURVNUX0VYUEVDVEFUSU9OU19VUkwpCisgICAgICAgICAgICBleGNlcHQgSFRUUEVycm9y
OgorICAgICAgICAgICAgICAgIHByaW50ICgiQ291bGQgbm90IGZpbmQgdGVzdF9leHBlY3RhdGlv
bnMudHh0IGF0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfRVhQRUNUQVRJT05T
X1VSTCkKKworICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9leHBlY3RhdGlvbnNfY2FjaGUKKwor
ICAgIGRlZiBfR2V0VGVzdEV4cGVjdGF0aW9uc0xpbmUoc2VsZiwgdGVzdF9wYXRoKToKKyAgICAg
ICAgY29udGVudCA9IHNlbGYuX0dldFRlc3RFeHBlY3RhdGlvbnMoKQorCisgICAgICAgIGlmIG5v
dCBjb250ZW50OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBmb3IgbWF0Y2gg
aW4gY29udGVudC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBsaW5lID0gcmUuc2VhcmNoKCIu
Kj8gOiAoLio/KSA9IC4qIiwgbWF0Y2gpCisgICAgICAgICAgICBpZiBsaW5lIGFuZCB0ZXN0X3Bh
dGguZmluZChsaW5lLmdyb3VwKDEpKSA+IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiBtYXRj
aAorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX0NvcHlGaWxlRnJvbVppcERpcihz
ZWxmLCBmaWxlX2luX3ppcCwgZmlsZV90b19jcmVhdGUpOgorICAgICAgICBtb2RpZmllcnMgPSAi
IgorICAgICAgICBpZiBmaWxlX3RvX2NyZWF0ZS5lbmRzd2l0aCgiLnBuZyIpOgorICAgICAgICAg
ICAgbW9kaWZpZXJzID0gImIiCisgICAgICAgIGRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLnNw
bGl0KGZpbGVfdG9fY3JlYXRlKVswOi0xXSlbMF0KKyAgICAgICAgQ3JlYXRlRGlyZWN0b3J5KGRp
cikKKyAgICAgICAgZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKFRFTVBfWklQ
X0RJUiwgZmlsZV9pbl96aXApKQorICAgICAgICBzaHV0aWwuY29weShmaWxlLCBkaXIpCisKKyAg
ICBkZWYgX0V4dHJhY3RGaWxlRnJvbVppcChzZWxmLCB6aXAsIGZpbGVfaW5femlwLCBmaWxlX3Rv
X2NyZWF0ZSk6CisgICAgICAgIG1vZGlmaWVycyA9ICIiCisgICAgICAgIGlmIGZpbGVfdG9fY3Jl
YXRlLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBtb2RpZmllcnMgPSAiYiIKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgQ3JlYXRlRGlyZWN0b3J5KGZpbGVfdG9fY3JlYXRlWzA6Zmls
ZV90b19jcmVhdGUucmZpbmQoIi8iKV0pCisgICAgICAgICAgICBsb2NhbEZpbGUgPSBvcGVuKGZp
bGVfdG9fY3JlYXRlLCAidyVzIiAlIG1vZGlmaWVycykKKyAgICAgICAgICAgIGxvY2FsRmlsZS53
cml0ZSh6aXAucmVhZChmaWxlX2luX3ppcCkpCisgICAgICAgICAgICBsb2NhbEZpbGUuY2xvc2Uo
KQorICAgICAgICAgICAgb3MuY2htb2QoZmlsZV90b19jcmVhdGUsIDA3NzcpCisgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcmlu
dCAiRmlsZSAlcyBkb2VzIG5vdCBleGlzdCBpbiB6aXAgZmlsZS4iICUgKGZpbGVfaW5femlwKQor
ICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiRmlsZSAl
cyBkb2VzIG5vdCBleGlzdCBpbiB6aXAgZmlsZS4iICUgKGZpbGVfaW5femlwKQorICAgICAgICAg
ICAgcHJpbnQgIklzIHRoaXMgemlwIGZpbGUgYXNzZW1ibGVkIGNvcnJlY3RseT8iCisgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgZGVmIF9Eb3dubG9hZEZpbGUoc2VsZiwgdXJsLCBsb2NhbF9m
aWxlbmFtZT1Ob25lLCBtb2RpZmllcnM9IiIsCisgICAgICAgICAgICAgICAgICAgICAgZm9yY2U9
RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29weSB0aGUgY29udGVudHMgb2YgYSBmaWxl
IGZyb20gYSBnaXZlbiBVUkwKKyAgICAgICAgdG8gYSBsb2NhbCBmaWxlLgorICAgICAgICAiIiIK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbG9jYWxfZmlsZW5hbWUgPT0gTm9uZToKKyAg
ICAgICAgICAgICAgICBsb2NhbF9maWxlbmFtZSA9IHVybC5zcGxpdCgnLycpWy0xXQorICAgICAg
ICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobG9jYWxfZmlsZW5hbWUpIGFuZCBub3QgZm9yY2U6Cisg
ICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmlu
dCAiRmlsZSBhdCAlcyBhbHJlYWR5IGV4aXN0cy4iICUgbG9jYWxfZmlsZW5hbWUKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbG9jYWxfZmlsZW5hbWUKKyAgICAgICAgICAgIGlmIHNlbGYuZG9udF9k
b3dubG9hZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxfZmlsZW5hbWUKKyAgICAgICAg
ICAgIHdlYkZpbGUgPSB1cmxsaWIyLnVybG9wZW4odXJsKQorICAgICAgICAgICAgbG9jYWxGaWxl
ID0gb3Blbihsb2NhbF9maWxlbmFtZSwgKCJ3JXMiICUgbW9kaWZpZXJzKSkKKyAgICAgICAgICAg
IGxvY2FsRmlsZS53cml0ZSh3ZWJGaWxlLnJlYWQoKSkKKyAgICAgICAgICAgIHdlYkZpbGUuY2xv
c2UoKQorICAgICAgICAgICAgbG9jYWxGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNobW9k
KGxvY2FsX2ZpbGVuYW1lLCAwNzc3KQorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3I6
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJv
cjoKKyAgICAgICAgICAgIHByaW50ICJUaGUgdXJsICVzIGlzIG1hbGZvcm1lZC4iICUgdXJsCisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gbG9jYWxGaWxlLm5hbWUKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2ZhaWx1cmVfZmluZGVyX3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRlcl90ZXN0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmJlZDUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9mYWlsdXJlX2ZpbmRlcl90ZXN0LnB5CkBAIC0wLDAgKzEsMzc0IEBACisjIS9iaW4v
ZW52L3B5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCitpbXBvcnQgb3MKK2ltcG9ydCB6aXBmaWxlCisKK2Zyb20gZmFpbHVy
ZV9maW5kZXIgaW1wb3J0IEZhaWx1cmVGaW5kZXIKKworVEVTVF9CVUlMREVSX09VVFBVVCA9ICIi
IjA5MDcyMyAxMDozODoyMiB0ZXN0X3NoZWxsX3RocmVhZC5weToyODkKKyAgICAgICAgICAgIEVS
Uk9SIGNocm9tZS9mYXN0L2Zvcm1zL3RleHRhcmVhLW1ldHJpY3MuaHRtbCBmYWlsZWQ6CisgICAg
ICAgICAgICAgIFRleHQgZGlmZiBtaXNtYXRjaAorICAgICAgICAgICAgMDkwNzIzIDEwOjM4OjIx
IHRlc3Rfc2hlbGxfdGhyZWFkLnB5OjI4OQorICAgICAgICAgICAgRVJST1IgY2hyb21lL2Zhc3Qv
ZG9tL3hzcy1ERU5JRUQtamF2YXNjcmlwdC12YXJpYXRpb25zLmh0bWwgZmFpbGVkOgorICAgICAg
ICAgICAgICBUZXh0IGRpZmYgbWlzbWF0Y2gKKyAgICAgICAgICAgIDA5MDcyMyAxMDozNzo1OCB0
ZXN0X3NoZWxsX3RocmVhZC5weToyODkKKyAgICAgICAgICAgIEVSUk9SIExheW91dFRlc3RzL3Bs
dWdpbnMvYmluZGluZ3MtdGVzdC5odG1sIGZhaWxlZDoKKyAgICAgICAgICAgICAgVGV4dCBkaWZm
IG1pc21hdGNoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXhwZWN0ZWQgdG8gY3Jhc2gsIGJ1
dCBwYXNzZWQgKDEpOgorICBjaHJvbWUvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tZXRyaWNzLmh0bWwK
KworUmVncmVzc2lvbnM6IFVuZXhwZWN0ZWQgZmFpbHVyZXMgKDIpOgorICBjaHJvbWUvZmFzdC9k
b20veHNzLURFTklFRC1qYXZhc2NyaXB0LXZhcmlhdGlvbnMuaHRtbCA9IEZBSUwKKyAgTGF5b3V0
VGVzdHMvcGx1Z2lucy9iaW5kaW5ncy10ZXN0Lmh0bWwgPSBGQUlMCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyIiIgorCitURVNUX0ZBSUxVUkVfMSA9ICgibGF5b3V0LXRlc3QtcmVzdWx0cy9jaHJv
bWUvZmFzdC9mb3Jtcy8iCisgICAgICAgICAgICAgICAgICAidGV4dGFyZWEtbWV0cmljcy1hY3R1
YWwudHh0IikKK1RFU1RfRkFJTFVSRV8yID0gKCJsYXlvdXQtdGVzdC1yZXN1bHRzL2Nocm9tZS9m
YXN0L2RvbS8iCisgICAgICAgICAgICAgICAgICAieHNzLURFTklFRC1qYXZhc2NyaXB0LXZhcmlh
dGlvbnMtYWN0dWFsLnR4dCIpCitURVNUX0ZBSUxVUkVfMyA9ICgibGF5b3V0LXRlc3QtcmVzdWx0
cy9MYXlvdXRUZXN0cy9wbHVnaW5zLyIKKyAgICAgICAgICAgICAgICAgICJiaW5kaW5ncy10ZXN0
LWFjdHVhbC50eHQiKQorCitURVNUX0FSQ0hJVkVfT1VUUFVUID0gIiIiCitBZGRpbmcgbGF5b3V0
LXRlc3QtcmVzdWx0c1xwZW5kaW5nXGZhc3RccmVwYWludFxub3QtcmVhbC1hY3R1YWwuY2hlY2tz
dW0KK0FkZGluZyBsYXlvdXQtdGVzdC1yZXN1bHRzXHBlbmRpbmdcZmFzdFxyZXBhaW50XG5vdC1y
ZWFsLWFjdHVhbC5wbmcKK0FkZGluZyBsYXlvdXQtdGVzdC1yZXN1bHRzXHBlbmRpbmdcZmFzdFxy
ZXBhaW50XG5vdC1yZWFsLWFjdHVhbC50eHQKK2xhc3QgY2hhbmdlOiAyMjA1NworYnVpbGQgbmFt
ZTogd2Via2l0LXJlbAoraG9zdCBuYW1lOiBjb2RmMTM4CitzYXZpbmcgcmVzdWx0cyB0byBcXG15
XHRlc3RcbG9jYXRpb25cd2Via2l0LXJlbFwyMjA1NworcHJvZ3JhbSBmaW5pc2hlZCB3aXRoIGV4
aXQgY29kZSAwCisiIiIKKworVEVTVF9URVNUX0VYUEVDVEFUSU9OUyA9ICIiIgorQlVHMTIzNCBj
aHJvbWUvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tZXRyaWNzLmh0bWwgPSBDUkFTSAorIiIiCisKK1RF
U1RfQlVJTERFUl9MT0dfRklMRSA9ICJURVNUX2J1aWxkZXIubG9nIgorVEVTVF9BUkNISVZFX0xP
R19GSUxFID0gIlRFU1RfYXJjaGl2ZS5sb2ciCitURVNUX0RVTU1ZX1pJUF9GSUxFID0gIlRFU1Rf
emlwZmlsZS56aXAiCitURVNUX0VYUEVDVEFUSU9OU19GSUxFID0gIlRFU1RfZXhwZWN0YXRpb25z
LnR4dCIKKworV0VCS0lUX0JVSUxERVJfTlVNQkVSID0gIjk4MDAiCitXRUJLSVRfRkFJTFVSRVMg
PSAoCisgIFsiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9hbmltYXRlZC1zdmctYXMtbWFz
ay5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL2JhY2tncm91bmQtY2xp
cC10ZXh0Lmh0bWwiLAorICAgIkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvbWFzay1jb21w
b3NpdGUuaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9yZXBlYXQvbWFz
ay1uZWdhdGl2ZS1vZmZzZXQtcmVwZWF0Lmh0bWwiLAorICAgIkxheW91dFRlc3RzL2Zhc3QvYmFj
a2dyb3VuZHMvc3ZnLWFzLWJhY2tncm91bmQtMy5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0
L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTYuaHRtbCIsCisgICAiTGF5b3V0VGVzdHMv
ZmFzdC9iYWNrZ3JvdW5kcy9zdmctYXMtbWFzay5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0
L2Jsb2NrL2Zsb2F0LzAxMy5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrL2Zsb2F0
L25lc3RlZC1jbGVhcmFuY2UuaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9wb3Np
dGlvbmluZy8wNDcuaHRtbCJdKQorCitDSFJPTUlVTV9CQVNFTElORSA9ICJjaHJvbWUvZmFzdC9m
b3Jtcy9iYXNpYy1idXR0b25zLmh0bWwiCitFWFBFQ1RFRF9DSFJPTUlVTV9MT0NBTF9CQVNFTElO
RSA9ICIuL2Nocm9tZS9mYXN0L2Zvcm1zL2Jhc2ljLWJ1dHRvbnMuaHRtbCIKK0VYUEVDVEVEX0NI
Uk9NSVVNX1VSTF9CQVNFTElORSA9ICgiaHR0cDovL3NyYy5jaHJvbWl1bS5vcmcvdmlld3ZjL2No
cm9tZS8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRydW5rL3NyYy93ZWJr
aXQvZGF0YS9sYXlvdXRfdGVzdHMvY2hyb21lLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZmFzdC9mb3Jtcy9iYXNpYy1idXR0b25zLmh0bWwiKQorCitXRUJLSVRfQkFTRUxJ
TkUgPSAiTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy8xMTQyMy5odG1sIgorRVhQRUNURURfV0VCS0lU
X0xPQ0FMX0JBU0VMSU5FID0gIi4vTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy8xMTQyMy5odG1sIgor
RVhQRUNURURfV0VCS0lUX1VSTF9CQVNFTElORSA9ICgKKyAgICAiaHR0cDovL3N2bi53ZWJraXQu
b3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rLyIKKyAgICAiTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy8xMTQyMy5odG1sIikKKworVEVTVF9aSVBfRklMRSA9ICgiaHR0cDovL2J1aWxkLmNocm9taXVt
Lm9yZy9idWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKKyAgICAgICAgICAgICAgICAgIndl
YmtpdC1yZWwvMjE0MzIvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAiKQorCitFWFBFQ1RFRF9SRVZJ
U0lPTiA9ICIyMDg2MSIKK0VYUEVDVEVEX0JVSUxEX05BTUUgPSAid2Via2l0LXJlbCIKKworU1ZH
X1RFU1RfRVhQRUNUQVRJT04gPSAoCisgICAgIkxheW91dFRlc3RzL3N2Zy9jdXN0b20vZm9yZWln
bi1vYmplY3Qtc2tldy1leHBlY3RlZC5wbmciKQorU1ZHX1RFU1RfRVhQRUNUQVRJT05fVVBTVFJF
QU0gPSAoIkxheW91dFRlc3RzL3N2Zy9jdXN0b20vIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImZvcmVpZ24tb2JqZWN0LXNrZXctZXhwZWN0ZWQtdXBzdHJlYW0ucG5nIikKK1dF
QkFSQ0hJVkVfVEVTVF9FWFBFQ1RBVElPTiA9ICgiTGF5b3V0VGVzdHMvd2ViYXJjaGl2ZS9hZG9w
dC1hdHRyaWJ1dGUtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZWQtYm9k
eS13ZWJhcmNoaXZlLWV4cGVjdGVkLndlYmFyY2hpdmUiKQorRE9NX1RFU1RfRVhQRUNUQVRJT04g
PSAoIkxheW91dFRlc3RzL2Zhc3QvZG9tLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICJhdHRy
aWJ1dGUtZG93bmNhc3QtcmlnaHQtZXhwZWN0ZWQudHh0IikKK0RPTV9URVNUX0VYUEVDVEFUSU9O
X1VQU1RSRUFNID0gKCJMYXlvdXRUZXN0cy9mYXN0L2RvbS8iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYXR0cmlidXRlLWRvd25jYXN0LXJpZ2h0LSIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJleHBlY3RlZC11cHN0cmVhbS5wbmciKQorCitURVNUX0VYUEVD
VEFUSU9OUyA9ICIiIgorQlVHMTIzNCBXT05URklYIDogTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3Jv
dW5kcy9zdmctYXMtYmFja2dyb3VuZC0zLmh0bWwgPSBGQUlMCitCVUczNDU2IFdJTiA6IExheW91
dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvc3ZnLWFzLWJhY2tncm91bmQtNi5odG1sID0gQ1JBU0gK
K0JVRzQ1NjcgOiBMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1tYXNrLmh0bWwg
PSBQQVNTCitXT05URklYIDogTGF5b3V0VGVzdHMvZmFzdC9ibG9jay8gPSBGQUlMCisiIiIKKwor
RVhQRUNUX0VYQUNUX01BVENIID0gIkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvc3ZnLWFz
LWJhY2tncm91bmQtNi5odG1sIgorRVhQRUNUX0dFTkVSQUxfTUFUQ0ggPSAiTGF5b3V0VGVzdHMv
ZmFzdC9ibG9jay9mbG9hdC8wMTMuaHRtbCIKK0VYUEVDVF9OT19NQVRDSCA9ICJMYXlvdXRUZXN0
cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTk5Lmh0bWwiCisKK1dFQktJVF9P
UkcgPSAid2Via2l0Lm9yZyIKK0NIUk9NSVVNX09SRyA9ICJjaHJvbWl1bS5vcmciCisKKworY2xh
c3MgRmFpbHVyZUZpbmRlclRlc3Qob2JqZWN0KToKKworICAgIGRlZiBydW5UZXN0cyhzZWxmKToK
KyAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKKworICAgICAgICB0ZXN0cyA9IFsidGVz
dFdoaXRlc3BhY2VJbkJ1aWxkZXJOYW1lIiwKKyAgICAgICAgICAgICAgICAgInRlc3RHZXRMYXN0
QnVpbGQiLAorICAgICAgICAgICAgICAgICAidGVzdEZpbmRNYXRjaGVzSW5CdWlsZGVyT3V0cHV0
IiwKKyAgICAgICAgICAgICAgICAgInRlc3RTY3JhcGVCdWlsZGVyT3V0cHV0IiwKKyAgICAgICAg
ICAgICAgICAgInRlc3RHZXRDaHJvbWl1bUJhc2VsaW5lIiwKKyAgICAgICAgICAgICAgICAgInRl
c3RHZXRXZWJraXRCYXNlbGluZSIsCisgICAgICAgICAgICAgICAgICJ0ZXN0WmlwRG93bmxvYWQi
LAorICAgICAgICAgICAgICAgICAidGVzdFVzZUxvY2FsT3V0cHV0IiwKKyAgICAgICAgICAgICAg
ICAgInRlc3RUcmFuc2xhdGVCdWlsZFRvWmlwIiwKKyAgICAgICAgICAgICAgICAgInRlc3RHZXRC
YXNlbGluZSIsCisgICAgICAgICAgICAgICAgICJ0ZXN0RmluZFRlc3RFeHBlY3RhdGlvbnMiLAor
ICAgICAgICAgICAgICAgICAidGVzdEZ1bGwiXQorCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3Rz
OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwodGVzdCAr
ICIoKSIpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICBw
cmludCAiWyBPSyAgICAgIF0gJXMiICUgdGVzdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICAgICAgICAg
ICAgICBwcmludCAiWyAgICBGQUlMIF0gJXMiICUgdGVzdAorICAgICAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgICAgIHByaW50ICJbICBFUlJPUiAgXSAlcyIgJSB0ZXN0CisgICAgICAgIHJl
dHVybiBhbGxfdGVzdHNfcGFzc2VkCisKKworZGVmIF9nZXRCYXNpY0ZhaWx1cmVGaW5kZXIoKToK
KyAgICByZXR1cm4gRmFpbHVyZUZpbmRlcihOb25lLCAiV2Via2l0IiwgRmFsc2UsICIiLCAiLiIs
IDEwLCBGYWxzZSkKKworCitkZWYgX3Rlc3RMYXN0QnVpbGQoZmFpbHVyZV9maW5kZXIpOgorICAg
IHRyeToKKyAgICAgICAgbGFzdF9idWlsZCA9IGZhaWx1cmVfZmluZGVyLkdldExhc3RCdWlsZCgp
CisgICAgICAgICMgVmVyaWZ5IHRoYXQgbGFzdF9idWlsZCBpcyBub3QgZW1wdHkgYW5kIGlzIGEg
bnVtYmVyLgorICAgICAgICBidWlsZCA9IGludChsYXN0X2J1aWxkKQorICAgICAgICByZXR1cm4g
KGJ1aWxkID4gMCkKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiB0
ZXN0R2V0TGFzdEJ1aWxkKCk6CisgICAgdGVzdCA9IF9nZXRCYXNpY0ZhaWx1cmVGaW5kZXIoKQor
ICAgIHJldHVybiBfdGVzdExhc3RCdWlsZCh0ZXN0KQorCisKK2RlZiB0ZXN0V2hpdGVzcGFjZUlu
QnVpbGRlck5hbWUoKToKKyAgICB0ZXN0ID0gX2dldEJhc2ljRmFpbHVyZUZpbmRlcigpCisgICAg
dGVzdC5TZXRQbGF0Zm9ybSgiV2Via2l0ICh3ZWJraXQub3JnKSIpCisgICAgcmV0dXJuIF90ZXN0
TGFzdEJ1aWxkKHRlc3QpCisKKworZGVmIHRlc3RTY3JhcGVCdWlsZGVyT3V0cHV0KCk6CisKKyAg
ICAjIFRyeSBvbiB0aGUgZGVmYXVsdCBidWlsZGVyLgorICAgIHRlc3QgPSBfZ2V0QmFzaWNGYWls
dXJlRmluZGVyKCkKKyAgICB0ZXN0LmJ1aWxkID0gIjk4MDAiCisgICAgb3V0cHV0ID0gdGVzdC5f
U2NyYXBlQnVpbGRlck91dHB1dCgpCisgICAgaWYgbm90IG91dHB1dDoKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAjIFRyeSBvbiBhIGNyYXp5IGJ1aWxkZXIgb24gdGhlIEZZSSB3YXRlcmZh
bGwuCisgICAgdGVzdCA9IF9nZXRCYXNpY0ZhaWx1cmVGaW5kZXIoKQorICAgIHRlc3QuYnVpbGQg
PSAiMTc2NiIKKyAgICB0ZXN0LlNldFBsYXRmb3JtKCJXZWJraXQgTGludXggKHdlYmtpdC5vcmcp
IikKKyAgICBvdXRwdXQgPSB0ZXN0Ll9TY3JhcGVCdWlsZGVyT3V0cHV0KCkKKyAgICBpZiBub3Qg
b3V0cHV0OgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVm
IHRlc3RGaW5kTWF0Y2hlc0luQnVpbGRlck91dHB1dCgpOgorICAgIHRlc3QgPSBfZ2V0QmFzaWNG
YWlsdXJlRmluZGVyKCkKKyAgICB0ZXN0LmV4Y2x1ZGVfa25vd25fZmFpbHVyZXMgPSBUcnVlCisg
ICAgbWF0Y2hlcyA9IHRlc3QuX0ZpbmRNYXRjaGVzSW5CdWlsZGVyT3V0cHV0KFRFU1RfQlVJTERF
Ul9PVVRQVVQpCisgICAgIyBWZXJpZnkgdGhhdCB3ZSBmb3VuZCB4IG1hdGNoZXMuCisgICAgaWYg
bGVuKG1hdGNoZXMpICE9IDI6CisgICAgICAgIHByaW50ICJEaWQgbm90IGZpbmQgYWxsIHVuZXhw
ZWN0ZWQgZmFpbHVyZXMuIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHRlc3QuZXhjbHVk
ZV9rbm93bl9mYWlsdXJlcyA9IEZhbHNlCisgICAgbWF0Y2hlcyA9IHRlc3QuX0ZpbmRNYXRjaGVz
SW5CdWlsZGVyT3V0cHV0KFRFU1RfQlVJTERFUl9PVVRQVVQpCisgICAgaWYgbGVuKG1hdGNoZXMp
ICE9IDM6CisgICAgICAgIHByaW50ICJEaWQgbm90IGZpbmQgYWxsIGZhaWx1cmVzLiIKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgX3Rlc3RCYXNlbGluZSh0
ZXN0X25hbWUsIGV4cGVjdGVkX2xvY2FsLCBleHBlY3RlZF91cmwpOgorICAgIHRlc3QgPSBfZ2V0
QmFzaWNGYWlsdXJlRmluZGVyKCkKKyAgICAjIFRlc3QgYmFzZWxpbmUgdGhhdCBpcyBvYnZpb3Vz
bHkgaW4gQ2hyb21pdW0ncyB0cmVlLgorICAgIGJhc2VsaW5lID0gdGVzdC5fR2V0QmFzZWxpbmUo
dGVzdF9uYW1lLCAiLiIsIEZhbHNlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGJhc2Vs
aW5lLmxvY2FsX2ZpbGUpCisgICAgICAgIGlmIChiYXNlbGluZS5sb2NhbF9maWxlICE9IGV4cGVj
dGVkX2xvY2FsIG9yCisgICAgICAgICAgICBiYXNlbGluZS5iYXNlbGluZV91cmwgIT0gZXhwZWN0
ZWRfdXJsKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV4Y2VwdDoKKyAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgdGVzdEdldENocm9taXVtQmFz
ZWxpbmUoKToKKyAgICByZXR1cm4gX3Rlc3RCYXNlbGluZShDSFJPTUlVTV9CQVNFTElORSwgRVhQ
RUNURURfQ0hST01JVU1fTE9DQUxfQkFTRUxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
RVhQRUNURURfQ0hST01JVU1fVVJMX0JBU0VMSU5FKQorCisKK2RlZiB0ZXN0R2V0V2Via2l0QmFz
ZWxpbmUoKToKKyAgICByZXR1cm4gX3Rlc3RCYXNlbGluZShXRUJLSVRfQkFTRUxJTkUsIEVYUEVD
VEVEX1dFQktJVF9MT0NBTF9CQVNFTElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFWFBF
Q1RFRF9XRUJLSVRfVVJMX0JBU0VMSU5FKQorCisKK2RlZiB0ZXN0VXNlTG9jYWxPdXRwdXQoKToK
KyAgICB0ZXN0X3Jlc3VsdCA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIF93cml0ZUZpbGUoVEVT
VF9CVUlMREVSX0xPR19GSUxFLCBURVNUX0JVSUxERVJfT1VUUFVUKQorICAgICAgICBfd3JpdGVG
aWxlKFRFU1RfQVJDSElWRV9MT0dfRklMRSwgVEVTVF9BUkNISVZFX09VVFBVVCkKKyAgICAgICAg
X3dyaXRlRmlsZShURVNUX0VYUEVDVEFUSU9OU19GSUxFLCBURVNUX1RFU1RfRVhQRUNUQVRJT05T
KQorICAgICAgICB6aXAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVF9EVU1NWV9aSVBfRklMRSwgJ3cn
KQorICAgICAgICB6aXAud3JpdGUoVEVTVF9CVUlMREVSX0xPR19GSUxFLCBURVNUX0ZBSUxVUkVf
MSkKKyAgICAgICAgemlwLndyaXRlKFRFU1RfQlVJTERFUl9MT0dfRklMRSwgVEVTVF9GQUlMVVJF
XzIpCisgICAgICAgIHppcC53cml0ZShURVNUX0JVSUxERVJfTE9HX0ZJTEUsIFRFU1RfRkFJTFVS
RV8zKQorICAgICAgICB6aXAuY2xvc2UoKQorICAgICAgICB0ZXN0ID0gX2dldEJhc2ljRmFpbHVy
ZUZpbmRlcigpCisgICAgICAgIHRlc3QuYXJjaGl2ZV9zdGVwX2xvZ19maWxlID0gVEVTVF9BUkNI
SVZFX0xPR19GSUxFCisgICAgICAgIHRlc3QuYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGUgPSBURVNU
X0JVSUxERVJfTE9HX0ZJTEUKKyAgICAgICAgdGVzdC50ZXN0X2V4cGVjdGF0aW9uc19maWxlID0g
VEVTVF9FWFBFQ1RBVElPTlNfRklMRQorICAgICAgICB0ZXN0LnppcF9maWxlID0gVEVTVF9EVU1N
WV9aSVBfRklMRQorICAgICAgICB0ZXN0LmRvbnRfZG93bmxvYWQgPSBUcnVlCisgICAgICAgIHRl
c3QuZXhjbHVkZV9rbm93bl9mYWlsdXJlcyA9IFRydWUKKyAgICAgICAgdGVzdC5kZWxldGVfemlw
X2ZpbGUgPSBGYWxzZQorICAgICAgICBmYWlsdXJlcyA9IHRlc3QuR2V0RmFpbHVyZXMoKQorICAg
ICAgICBpZiBub3QgZmFpbHVyZXMgb3IgbGVuKGZhaWx1cmVzKSAhPSAyOgorICAgICAgICAgICAg
cHJpbnQgIkRpZCBub3QgZ2V0IGV4cGVjdGVkIG51bWJlciBvZiBmYWlsdXJlcyA6IgorICAgICAg
ICAgICAgZm9yIGZhaWx1cmUgaW4gZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcHJpbnQgZmFp
bHVyZS50ZXN0X3BhdGgKKyAgICAgICAgICAgIHRlc3RfcmVzdWx0ID0gRmFsc2UKKyAgICBmaW5h
bGx5OgorICAgICAgICBvcy5yZW1vdmUoVEVTVF9CVUlMREVSX0xPR19GSUxFKQorICAgICAgICBv
cy5yZW1vdmUoVEVTVF9BUkNISVZFX0xPR19GSUxFKQorICAgICAgICBvcy5yZW1vdmUoVEVTVF9F
WFBFQ1RBVElPTlNfRklMRSkKKyAgICAgICAgb3MucmVtb3ZlKFRFU1RfRFVNTVlfWklQX0ZJTEUp
CisgICAgcmV0dXJuIHRlc3RfcmVzdWx0CisKKworZGVmIF93cml0ZUZpbGUoZmlsZW5hbWUsIGNv
bnRlbnRzKToKKyAgICBteWZpbGUgPSBvcGVuKGZpbGVuYW1lLCAndycpCisgICAgbXlmaWxlLndy
aXRlKGNvbnRlbnRzKQorICAgIG15ZmlsZS5jbG9zZSgpCisKKworZGVmIHRlc3RaaXBEb3dubG9h
ZCgpOgorICAgIHRlc3QgPSBfZ2V0QmFzaWNGYWlsdXJlRmluZGVyKCkKKyAgICB0cnk6CisgICAg
ICAgIHRlc3QuX0Rvd25sb2FkRmlsZShURVNUX1pJUF9GSUxFLCAidGVzdC56aXAiLCAiYiIpICMg
ImIiIC0+IGJpbmFyeQorICAgICAgICBvcy5yZW1vdmUoInRlc3QuemlwIikKKyAgICAgICAgcmV0
dXJuIFRydWUKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiB0ZXN0
VHJhbnNsYXRlQnVpbGRUb1ppcCgpOgorICAgIHRlc3QgPSBfZ2V0QmFzaWNGYWlsdXJlRmluZGVy
KCkKKyAgICB0ZXN0LmJ1aWxkID0gV0VCS0lUX0JVSUxERVJfTlVNQkVSCisgICAgcmV2aXNpb24s
IGJ1aWxkX25hbWUgPSB0ZXN0Ll9HZXRSZXZpc2lvbkFuZEJ1aWxkRnJvbUFyY2hpdmVTdGVwKCkK
KyAgICBpZiByZXZpc2lvbiAhPSBFWFBFQ1RFRF9SRVZJU0lPTiBvciBidWlsZF9uYW1lICE9IEVY
UEVDVEVEX0JVSUxEX05BTUU6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVl
CisKKworZGVmIHRlc3RHZXRCYXNlbGluZSgpOgorICAgIHRlc3QgPSBfZ2V0QmFzaWNGYWlsdXJl
RmluZGVyKCkKKyAgICByZXN1bHQgPSBUcnVlCisgICAgdGVzdC5wbGF0Zm9ybSA9ICJjaHJvbWl1
bS1tYWMiCisgICAgYmFzZWxpbmUgPSB0ZXN0Ll9HZXRCYXNlbGluZShXRUJBUkNISVZFX1RFU1Rf
RVhQRUNUQVRJT04sICIuIikKKyAgICBpZiBub3QgYmFzZWxpbmUubG9jYWxfZmlsZSBvciBiYXNl
bGluZS5iYXNlbGluZV91cmwuZmluZChXRUJLSVRfT1JHKSA9PSAtMToKKyAgICAgICAgcmVzdWx0
ID0gRmFsc2UKKyAgICAgICAgcHJpbnQgIldlYmFyY2hpdmUgbGF5b3V0IHRlc3Qgbm90IGZvdW5k
IGF0IHdlYmtpdC5vcmc6ICVzIiAlIHVybAorICAgIHRlc3QucGxhdGZvcm0gPSAiY2hyb21pdW0t
d2luIgorICAgIGJhc2VsaW5lID0gdGVzdC5fR2V0QmFzZWxpbmUoU1ZHX1RFU1RfRVhQRUNUQVRJ
T04sICIuIikKKyAgICBpZiAobm90IGJhc2VsaW5lLmxvY2FsX2ZpbGUgb3IKKyAgICAgICAgYmFz
ZWxpbmUuYmFzZWxpbmVfdXJsLmZpbmQoQ0hST01JVU1fT1JHKSA9PSAtMSk6CisgICAgICAgIHJl
c3VsdCA9IEZhbHNlCisgICAgICAgIHByaW50ICJTVkcgbGF5b3V0IHRlc3QgZm91bmQgYXQgJXMs
IG5vdCBjaHJvbWl1bS5vcmciICUgdXJsCisgICAgYmFzZWxpbmUgPSB0ZXN0Ll9HZXRCYXNlbGlu
ZShTVkdfVEVTVF9FWFBFQ1RBVElPTiwgIi4iLCBUcnVlKQorICAgIGlmIG5vdCBiYXNlbGluZS5s
b2NhbF9maWxlIG9yIGJhc2VsaW5lLmJhc2VsaW5lX3VybC5maW5kKFdFQktJVF9PUkcpID09IC0x
OgorICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBwcmludCAiVXBzdHJlYW0gU1ZHIGxh
eW91dCB0ZXN0IE5PVCBmb3VuZCBhdCB3ZWJraXQub3JnISIKKyAgICBiYXNlbGluZSA9IHRlc3Qu
X0dldEJhc2VsaW5lKERPTV9URVNUX0VYUEVDVEFUSU9OLCAiLiIsIFRydWUpCisgICAgaWYgKG5v
dCBiYXNlbGluZS5sb2NhbF9maWxlIG9yCisgICAgICAgIGJhc2VsaW5lLmJhc2VsaW5lX3VybC5m
aW5kKCIvcGxhdGZvcm0vIikgPiAtMSk6CisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAg
IHByaW50ICgiVXBzdHJlYW0gU1ZHIGxheW91dCB0ZXN0IGZvdW5kIGluIGEgIgorICAgICAgICAg
ICAgICAgInBsYXRmb3JtIGRpcmVjdG9yeTogJXMiICUgdXJsKQorICAgIG9zLnJlbW92ZShXRUJB
UkNISVZFX1RFU1RfRVhQRUNUQVRJT04pCisgICAgb3MucmVtb3ZlKFNWR19URVNUX0VYUEVDVEFU
SU9OKQorICAgIG9zLnJlbW92ZShTVkdfVEVTVF9FWFBFQ1RBVElPTl9VUFNUUkVBTSkKKyAgICBv
cy5yZW1vdmUoRE9NX1RFU1RfRVhQRUNUQVRJT05fVVBTVFJFQU0pCisgICAgZGVsZXRlRGlyKCJM
YXlvdXRUZXN0cyIpCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBkZWxldGVEaXIoZGlyZWN0
b3J5KToKKyAgICAiIiIgUmVjdXJzaXZlbHkgZGVsZXRlcyBlbXB0eSBkaXJlY3RvcmllcyBnaXZl
biBhIHJvb3QuCisgICAgVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhl
eSBhcmUgbm90IGVtcHR5LiAiIiIKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fs
ayhkaXJlY3RvcnksIHRvcGRvd249RmFsc2UpOgorICAgICAgICBmb3IgZCBpbiBkaXJzOgorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihyb290
LCBkKSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgb3Mu
cm1kaXIoZGlyZWN0b3J5KQorCisKK2RlZiB0ZXN0RnVsbCgpOgorICAgICIiIiBWZXJpZmllcyB0
aGF0IHRoZSBlbnRpcmUgc3lzdGVtIHdvcmtzIGVuZC10by1lbmQuICIiIgorICAgIHRlc3QgPSBf
Z2V0QmFzaWNGYWlsdXJlRmluZGVyKCkKKyAgICB0ZXN0LmJ1aWxkID0gV0VCS0lUX0JVSUxERVJf
TlVNQkVSCisgICAgdGVzdC5kb250X2Rvd25sb2FkID0gVHJ1ZSAgIyBEcnkgcnVuIG9ubHksIG5v
IGRvd25sb2FkaW5nIG5lZWRlZC4KKyAgICBmYWlsdXJlcyA9IHRlc3QuR2V0RmFpbHVyZXMoKQor
ICAgICMgVmVyaWZ5IHRoYXQgdGhlIG1heCBmYWlsdXJlcyBwYXJhbWV0ZXIgd29ya3MuCisgICAg
aWYgbm90IGZhaWx1cmVzIG9yIGxlbihmYWlsdXJlcykgPiAxMDoKKyAgICAgICAgIkdvdCBubyBm
YWlsdXJlcyBvciB0b28gbWFueSBmYWlsdXJlcy4iCisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgIyBWZXJpZnkgdGhlIGZhaWx1cmVzIG1hdGNoIHRoZSBsaXN0IG9mIGV4cGVjdGVkIGZhaWx1
cmVzLgorICAgIGZvciBmYWlsdXJlIGluIGZhaWx1cmVzOgorICAgICAgICBpZiBub3QgKGZhaWx1
cmUudGVzdF9wYXRoIGluIFdFQktJVF9GQUlMVVJFUyk6CisgICAgICAgICAgICBwcmludCAiRm91
bmQgYSBmYWlsdXJlIEkgZGlkIG5vdCBleHBlY3QgdG8gc2VlLiIKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgdGVzdEZpbmRUZXN0RXhwZWN0YXRp
b25zKCk6CisgICAgdGVzdCA9IF9nZXRCYXNpY0ZhaWx1cmVGaW5kZXIoKQorICAgIHRlc3QuX3Rl
c3RfZXhwZWN0YXRpb25zX2NhY2hlID0gVEVTVF9FWFBFQ1RBVElPTlMKKyAgICBtYXRjaCA9IHRl
c3QuX0dldFRlc3RFeHBlY3RhdGlvbnNMaW5lKEVYUEVDVF9FWEFDVF9NQVRDSCkKKyAgICBpZiBu
b3QgbWF0Y2g6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIG1hdGNoID0gdGVzdC5fR2V0VGVz
dEV4cGVjdGF0aW9uc0xpbmUoRVhQRUNUX0dFTkVSQUxfTUFUQ0gpCisgICAgaWYgbm90IG1hdGNo
OgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBtYXRjaCA9IHRlc3QuX0dldFRlc3RFeHBlY3Rh
dGlvbnNMaW5lKEVYUEVDVF9OT19NQVRDSCkKKyAgICByZXR1cm4gbm90IG1hdGNoCisKKworaWYg
X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBmZnQgPSBGYWlsdXJlRmluZGVyVGVzdCgpCisg
ICAgcmVzdWx0ID0gZmZ0LnJ1blRlc3RzKCkKKyAgICBpZiByZXN1bHQ6CisgICAgICAgIHByaW50
ICJBbGwgdGVzdHMgcGFzc2VkLiIKKyAgICBlbHNlOgorICAgICAgICBwcmludCAiTm90IGFsbCB0
ZXN0cyBwYXNzZWQuIgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHRtbF9nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odG1sX2dlbmVy
YXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTMxNjZiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvaHRtbF9nZW5lcmF0b3IucHkKQEAgLTAsMCArMSwyMzAgQEAKKyMgQ29w
eXJpZ2h0IChjKSAyMDA2LTIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
aW1wb3J0IHJlCisKK2Zyb20gZmFpbHVyZSBpbXBvcnQgRmFpbHVyZQorCitDSFJPTUlVTV9CVUdf
VVJMID0gImh0dHA6Ly9jcmJ1Zy5jb20vIgorCisKK2RlZiBFeHRyYWN0Rmlyc3RWYWx1ZShzdHJp
bmcsIHJlZ2V4KToKKyAgICBtID0gcmUuc2VhcmNoKHJlZ2V4LCBzdHJpbmcpCisgICAgaWYgbSBh
bmQgbS5ncm91cCgxKToKKyAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKKyAgICByZXR1cm4gTm9u
ZQorCisjIFRPRE8oZ3dpbHNvbik6IFJlZmFjdG9yIEhUTUwgZ2VuZXJhdGlvbiBpbnRvIGEgSFRN
TCB0ZW1wbGF0aW5nIHN5c3RlbSBsaWtlCisjIERqYW5nbyB0ZW1wbGF0ZXMuCisKKworY2xhc3Mg
SFRNTEdlbmVyYXRvcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZhaWx1cmVz
LCBvdXRwdXRfZGlyLCBidWlsZCwgcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgIGV4Y2x1ZGVf
a25vd25fZmFpbHVyZXMpOgorICAgICAgICBzZWxmLmZhaWx1cmVzID0gZmFpbHVyZXMKKyAgICAg
ICAgc2VsZi5vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgorICAgICAgICBzZWxmLmJ1aWxkID0gYnVp
bGQKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNlbGYuZXhjbHVk
ZV9rbm93bl9mYWlsdXJlcyA9IGV4Y2x1ZGVfa25vd25fZmFpbHVyZXMKKyAgICAgICAgc2VsZi5p
bWFnZV9zaXplID0gIjIwMHB4IgorCisgICAgZGVmIEdlbmVyYXRlSFRNTChzZWxmKToKKyAgICAg
ICAgaHRtbCA9ICIiCisgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgPGh0bWw+
CisgICAgICAgICAgICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHN0eWxlPgor
ICAgICAgICAgICAgICAgICAgICAgIGJvZHkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9u
dC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgIGgyIHsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgLm1haW5UYWJsZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5k
OiAjNjY2NjY2OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAubWFpblRhYmxlIHRkICwgLm1haW5UYWJsZSB0aCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgLnRpdGxlbGluayB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNp
emU6IDE4cHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgLmRldGFpbCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmdpbi10b3A6IDNweDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIDwvc3R5bGU+CisgICAgICAgICAgICAgICAgICA8L2hlYWQ+CisgICAg
ICAgICAgICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgdGl0bGUg
PSAiQWxsIGZhaWx1cmVzIgorICAgICAgICBpZiBzZWxmLmV4Y2x1ZGVfa25vd25fZmFpbHVyZXM6
CisgICAgICAgICAgICB0aXRsZSA9ICJSZWdyZXNzaW9ucyIKKworICAgICAgICBodG1sICs9ICIi
IgorICAgICAgICAgICAgICAgIDxoMT4lcyBmb3IgYnVpbGQgJXMgKCVzKTwvaDE+CisgICAgICAg
ICAgICAgICAgIiIiICUgKHRpdGxlLCBzZWxmLmJ1aWxkLCBzZWxmLnBsYXRmb3JtKQorCisgICAg
ICAgIHRlc3RfbnVtYmVyID0gMAorCisgICAgICAgICMgVE9ETyhnd2lsc29uKTogUmVmYWN0b3Ig
dGhpcyB0byBkbyBhIGpvaW4oKSBvbiBhbiBhcnJheSBvZiBIVE1MLAorICAgICAgICAjIHJhdGhl
ciB0aGFuIGFwcGVuZGluZyBzdHJpbmdzIGluIGEgbG9vcC4KKyAgICAgICAgZm9yIGZhaWx1cmUg
aW4gc2VsZi5mYWlsdXJlczoKKyAgICAgICAgICAgIHRlc3RfbnVtYmVyICs9IDEKKyAgICAgICAg
ICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJib3JkZXI6IDFw
eCBzb2xpZCBibGFjazsgd2lkdGg6IDEyMDBweDsKKyAgICAgICAgICAgICAgICAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiA1cHg7IiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgorICAg
ICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImJhY2tn
cm91bmQtY29sb3I6ICNDREVDREU7CisgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9t
OiAxcHggc29saWQgYmxhY2s7Ij4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRp
dGxlbGluayI+JXMuJm5ic3A7Jm5ic3A7JXM8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAg
ICAgICAgPHRyPjx0ZD4mbmJzcDsmbmJzcDtMYXN0IG1vZGlmaWVkOiA8YSBocmVmPSIlcyI+JXM8
L2E+CisgICAgICAgICAgICAgICAgIiIiICUgKHRlc3RfbnVtYmVyLCBmYWlsdXJlLnRlc3RfcGF0
aCwgZmFpbHVyZS5HZXRUZXN0SG9tZSgpLAorICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJl
LnRlc3RfYWdlKQorICAgICAgICAgICAgaHRtbCArPSAiPGRpdiBjbGFzcz0nZGV0YWlsJz4iCisg
ICAgICAgICAgICBodG1sICs9ICI8cHJlPiVzPC9wcmU+IiAlIFwKKyAgICAgICAgICAgICAgICAg
ICAgKHNlbGYuX0dlbmVyYXRlTGlua2lmaWVkVGV4dEV4cGVjdGF0aW9ucyhmYWlsdXJlKSkKKwor
ICAgICAgICAgICAgaHRtbCArPSBzZWxmLl9HZW5lcmF0ZUZsYWtpbmVzc0hUTUwoZmFpbHVyZSkK
KworICAgICAgICAgICAgaWYgZmFpbHVyZS5jcmFzaGVkOgorICAgICAgICAgICAgICAgIGh0bWwg
Kz0gIjxkaXY+VGVzdCA8Yj5DUkFTSEVEPC9iPjwvZGl2PiIKKyAgICAgICAgICAgIGVsaWYgZmFp
bHVyZS50aW1lb3V0OgorICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxkaXY+VGVzdCA8Yj5USU1F
RCBPVVQ8L2I+PC9kaXY+IgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBodG1s
ICs9ICIiIgorICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJtYWluVGFibGUi
IGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
PHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0nMjUwJz4mbmJzcDs8
L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0nMjAwJz5FeHBlY3Rl
ZDwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPScyMDAnPkFjdHVh
bDwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPScyMDAnPkRpZmZl
cmVuY2U8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0nMjAwJz5V
cHN0cmVhbTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgICAgIGlmIGZhaWx1cmUudGV4dF9kaWZm
X21pc21hdGNoOgorICAgICAgICAgICAgICAgICAgICBodG1sICs9IHNlbGYuX0dlbmVyYXRlVGV4
dEZhaWx1cmVIVE1MKGZhaWx1cmUpCisKKyAgICAgICAgICAgICAgICBpZiBmYWlsdXJlLmltYWdl
X21pc21hdGNoOgorICAgICAgICAgICAgICAgICAgICBodG1sICs9IHNlbGYuX0dlbmVyYXRlSW1h
Z2VGYWlsdXJlSFRNTChmYWlsdXJlKQorCisgICAgICAgICAgICAgICAgaHRtbCArPSAiPC90YWJs
ZT4iCisgICAgICAgICAgICBodG1sICs9ICI8L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48YnI+Igor
ICAgICAgICBodG1sICs9ICIiIjwvYm9keT48L2h0bWw+IiIiCisKKyAgICAgICAgIyBUT0RPKGd3
aWxzb24pOiBDaGFuZ2UgdGhpcyBmaWxlbmFtZSB0byBiZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1l
bnQuCisgICAgICAgIGh0bWxfZmlsZW5hbWUgPSAiJXMvaW5kZXgtJXMuaHRtbCIgJSAoc2VsZi5v
dXRwdXRfZGlyLCBzZWxmLmJ1aWxkKQorICAgICAgICBodG1sRmlsZSA9IG9wZW4oaHRtbF9maWxl
bmFtZSwgJ3cnKQorICAgICAgICBodG1sRmlsZS53cml0ZShodG1sKQorICAgICAgICBodG1sRmls
ZS5jbG9zZSgpCisgICAgICAgIHJldHVybiBodG1sX2ZpbGVuYW1lCisKKyAgICBkZWYgX0dlbmVy
YXRlTGlua2lmaWVkVGV4dEV4cGVjdGF0aW9ucyhzZWxmLCBmYWlsdXJlKToKKyAgICAgICAgaWYg
bm90IGZhaWx1cmUudGVzdF9leHBlY3RhdGlvbnNfbGluZToKKyAgICAgICAgICAgIHJldHVybiAi
IgorICAgICAgICBidWdfbnVtYmVyID0gRXh0cmFjdEZpcnN0VmFsdWUoZmFpbHVyZS50ZXN0X2V4
cGVjdGF0aW9uc19saW5lLAorICAgICAgICAgICAgIkJVRyhcZCspIikKKyAgICAgICAgaWYgbm90
IGJ1Z19udW1iZXIgb3IgYnVnX251bWJlciA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiAiIgor
ICAgICAgICByZXR1cm4gZmFpbHVyZS50ZXN0X2V4cGVjdGF0aW9uc19saW5lLnJlcGxhY2UoCisg
ICAgICAgICAgIkJVRyIgKyBidWdfbnVtYmVyLAorICAgICAgICAgICI8YSBocmVmPSclcyVzJz5C
VUclczwvYT4iICUgKENIUk9NSVVNX0JVR19VUkwsIGJ1Z19udW1iZXIsCisgICAgICAgICAgICAg
ICBidWdfbnVtYmVyKSkKKworICAgICMgVE9ETyhnd2lsc29uKTogRml4IHRoaXMgc28gdGhhdCBp
dCBzaG93cyB0aGUgbGFzdCB0ZW4gcnVucworICAgICMgbm90IGp1c3QgYSAibWV0ZXIiIG9mIGZs
YWtpbmVzcy4KKworICAgIGRlZiBfR2VuZXJhdGVGbGFraW5lc3NIVE1MKHNlbGYsIGZhaWx1cmUp
OgorICAgICAgICBodG1sID0gIiIKKyAgICAgICAgaWYgbm90IGZhaWx1cmUuZmxha2luZXNzOgor
ICAgICAgICAgICAgcmV0dXJuIGh0bWwKKyAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAg
ICAgICA8dGFibGU+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAg
IDx0ZD5GbGFraW5lc3M6ICglcyk8L3RkPgorICAgICAgICAgICAgICAgICIiIiAlIChmYWlsdXJl
LmZsYWtpbmVzcykKKworICAgICAgICBmbGFreV9yZWQgPSBpbnQocm91bmQoaW50KGZhaWx1cmUu
Zmxha2luZXNzKSAvIDUpKQorICAgICAgICBmbGFreV9ncmVlbiA9IDEwIC0gZmxha3lfcmVkCisg
ICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGZsYWt5X2dyZWVuKToKKyAgICAgICAgICAgIGh0bWwg
Kz0gIiIiCisgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iYmFja2dyb3VuZDogZ3JlZW4i
PiZuYnNwOyZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICBmb3Ig
aSBpbiByYW5nZSgwLCBmbGFreV9yZWQpOgorICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAg
ICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJiYWNrZ3JvdW5kOiByZWQiPiZuYnNwOyZuYnNwOzwv
dGQ+CisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICBodG1sICs9ICIiIgorICAgICAg
ICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3RhYmxlPjxicj4KKyAgICAgICAg
ICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGh0bWwKKworICAgIGRlZiBfR2VuZXJhdGVUZXh0
RmFpbHVyZUhUTUwoc2VsZiwgZmFpbHVyZSk6CisgICAgICAgIGh0bWwgPSAiIgorICAgICAgICBp
ZiBub3QgZmFpbHVyZS5HZXRUZXh0QmFzZWxpbmVMb2NhdGlvbigpOgorICAgICAgICAgICAgcmV0
dXJuICIiIjx0cj48dGQgY29sc3Bhbj0nNSc+VGhpcyB0ZXN0IGxpa2VseSBkb2VzIG5vdCBoYXZl
IGFueQorICAgICAgICAgICAgICAgICAgICAgIFRFWFQgYmFzZWxpbmUgZm9yIHRoaXMgcGxhdGZv
cm0sIG9yIG9uZSBjb3VsZCBub3QKKyAgICAgICAgICAgICAgICAgICAgICBiZSBmb3VuZC48L3Rk
PjwvdHI+IiIiCisgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgICA8dHI+Cisg
ICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICA8Yj48YSBocmVm
PSIlcyI+UmVuZGVyIFRyZWUgRHVtcDwvYT48L2I+PGJyPgorICAgICAgICAgICAgICAgICAgICAg
IDxiPiVzPC9iPiBiYXNlbGluZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICBBZ2U6ICVzPGJy
PgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICIiIiAlIChmYWls
dXJlLnRleHRfYmFzZWxpbmVfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLkdl
dFRleHRCYXNlbGluZUxvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUu
dGV4dF9iYXNlbGluZV9hZ2UpCisgICAgICAgIGh0bWwgKz0gc2VsZi5fR2VuZXJhdGVUZXh0RmFp
bHVyZVREKGZhaWx1cmUuR2V0RXhwZWN0ZWRUZXh0RmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHRleHQiKQorICAgICAgICBo
dG1sICs9IHNlbGYuX0dlbmVyYXRlVGV4dEZhaWx1cmVURChmYWlsdXJlLkdldEFjdHVhbFRleHRG
aWxlbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YWN0dWFsIHRleHQiKQorICAgICAgICBodG1sICs9IHNlbGYuX0dlbmVyYXRlVGV4dEZhaWx1cmVU
RChmYWlsdXJlLkdldFRleHREaWZmRmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInRleHQgZGlmZiIpCisgICAgICAgIGh0bWwgKz0gIjx0ZD4m
bmJzcDs8L3RkPiIKKyAgICAgICAgaHRtbCArPSAiPC90cj4iCisgICAgICAgIHJldHVybiBodG1s
CisKKyAgICBkZWYgX0dlbmVyYXRlVGV4dEZhaWx1cmVURChzZWxmLCBmaWxlX3BhdGgsIGFuY2hv
cl90ZXh0KToKKyAgICAgICAgcmV0dXJuICgiPHRkIGFsaWduPWNlbnRlcj4iCisgICAgICAgICAg
ICAgICAgIjxhIGhyZWY9Jy4vbGF5b3V0LXRlc3QtcmVzdWx0cy0lcy8lcyc+JXM8L2E+PC90ZD4i
KSAlICgKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkLCBmaWxlX3BhdGgsIGFuY2hvcl90ZXh0
KQorCisgICAgZGVmIF9HZW5lcmF0ZUltYWdlRmFpbHVyZUhUTUwoc2VsZiwgZmFpbHVyZSk6Cisg
ICAgICAgIGlmIG5vdCBmYWlsdXJlLkdldEltYWdlQmFzZWxpbmVMb2NhdGlvbigpOgorICAgICAg
ICAgICAgcmV0dXJuICIiIjx0cj48dGQgY29sc3Bhbj0nNSc+VGhpcyB0ZXN0IGxpa2VseSBkb2Vz
IG5vdCBoYXZlIGFueQorICAgICAgICAgICAgICAgICAgICAgIElNQUdFIGJhc2VsaW5lIGZvciB0
aGlzIHBsYXRmb3JtLCBvciBvbmUgY291bGQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAg
Zm91bmQuPC90ZD48L3RyPiIiIgorICAgICAgICBodG1sID0gIiIiCisgICAgICAgICAgPHRyPgor
ICAgICAgICAgICAgPHRkPjxiPjxhIGhyZWY9IiVzIj5QaXhlbCBEdW1wPC9hPjwvYj48YnI+Cisg
ICAgICAgICAgICA8Yj4lczwvYj4gYmFzZWxpbmU8YnI+QWdlOiAlczwvdGQ+CisgICAgICAgICAg
IiIiICUgKGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVfdXJsLAorICAgICAgICAgICAgICAgICBmYWls
dXJlLkdldEltYWdlQmFzZWxpbmVMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICBmYWlsdXJl
LmltYWdlX2Jhc2VsaW5lX2FnZSkKKyAgICAgICAgaHRtbCArPSBzZWxmLl9HZW5lcmF0ZUltYWdl
RmFpbHVyZVREKAorICAgICAgICAgICAgZmFpbHVyZS5HZXRFeHBlY3RlZEltYWdlRmlsZW5hbWUo
KSkKKyAgICAgICAgaHRtbCArPSBzZWxmLl9HZW5lcmF0ZUltYWdlRmFpbHVyZVREKAorICAgICAg
ICAgICAgZmFpbHVyZS5HZXRBY3R1YWxJbWFnZUZpbGVuYW1lKCkpCisgICAgICAgIGh0bWwgKz0g
c2VsZi5fR2VuZXJhdGVJbWFnZUZhaWx1cmVURCgKKyAgICAgICAgICAgIGZhaWx1cmUuR2V0SW1h
Z2VEaWZmRmlsZW5hbWUoKSkKKyAgICAgICAgaWYgKGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVfdXBz
dHJlYW1fbG9jYWwgYW5kCisgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3Vwc3Ry
ZWFtX2xvY2FsICE9ICIiKToKKyAgICAgICAgICAgIGh0bWwgKz0gc2VsZi5fR2VuZXJhdGVJbWFn
ZUZhaWx1cmVURCgKKyAgICAgICAgICAgICAgICBmYWlsdXJlLkdldEltYWdlVXBzdHJlYW1GaWxl
bmFtZSgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAg
ICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICIiIgorICAg
ICAgICBodG1sICs9ICI8L3RyPiIKKyAgICAgICAgcmV0dXJuIGh0bWwKKworICAgIGRlZiBfR2Vu
ZXJhdGVJbWFnZUZhaWx1cmVURChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiAoIjx0
ZD48YSBocmVmPScuL2xheW91dC10ZXN0LXJlc3VsdHMtJXMvJXMnPiIKKyAgICAgICAgICAgICAg
ICAiPGltZyBzdHlsZT0nd2lkdGg6ICVzJyBzcmM9Jy4vbGF5b3V0LXRlc3QtcmVzdWx0cy0lcy8l
cycgLz4iCisgICAgICAgICAgICAgICAgIjwvYT48L3RkPiIpICUgKHNlbGYuYnVpbGQsIGZpbGVu
YW1lLCBzZWxmLmltYWdlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuYnVpbGQsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3Nl
cnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zN2UxNGY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwyNTQgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorCisiIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgbGln
aHR0cGQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCisKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnBy
b2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1
cmxsaWIKKworaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKK2ltcG9ydCBwYXRoX3V0aWxzCisKK2Ns
YXNzIEh0dHBkTm90U3RhcnRlZChFeGNlcHRpb24pOiBwYXNzCisKKworZGVmIFJlbW92ZUxvZ0Zp
bGVzKGZvbGRlciwgc3RhcnRzX3dpdGgpOgorICAgIGZpbGVzID0gb3MubGlzdGRpcihmb2xkZXIp
CisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFy
dHNfd2l0aCk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCBm
aWxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKKworCitjbGFzcyBMaWdodHRw
ZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKyAgICAjIFdlYmtpdCB0ZXN0cwor
ICAgIHRyeToKKyAgICAgICAgX3dlYmtpdF90ZXN0cyA9IHBhdGhfdXRpbHMuUGF0aEZyb21CYXNl
KCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2h0dHAnLCAndGVzdHMnKQorICAgICAg
ICBfanNfdGVzdF9yZXNvdXJjZSA9IHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd0aGlyZF9wYXJ0
eScsICdXZWJLaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdMYXlvdXRUZXN0cycsICdmYXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanMnLCAncmVzb3VyY2VzJykKKyAgICBleGNl
cHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAgICAgIF93ZWJraXRfdGVzdHMgPSBOb25l
CisgICAgICAgIF9qc190ZXN0X3Jlc291cmNlID0gTm9uZQorCisgICAgIyBQYXRoIHdoZXJlIHdl
IGNhbiBhY2Nlc3MgYWxsIG9mIHRoZSB0ZXN0cworICAgIF9hbGxfdGVzdHMgPSBwYXRoX3V0aWxz
LlBhdGhGcm9tQmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJykKKyAgICAjIFNl
bGYgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIGZvciBTU0wgc2VydmVyIChmb3IgY2xpZW50IGNlcnQg
Z2V0CisgICAgIyA8YmFzZS1wYXRoPlxjaHJvbWVcdGVzdFxkYXRhXHNzbFxjZXJ0c1xyb290X2Nh
X2NlcnQuY3J0KQorICAgIF9wZW1fZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUo
b3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdodHRwZDIucGVtJykKKyAgICAjIE9uZSBtYXBwaW5nIHdoZXJlIHdlIGNhbiBnZXQgdG8gZXZl
cnl0aGluZworICAgIFZJUlRVQUxDT05GSUcgPSBbeydwb3J0JzogODA4MSwgJ2RvY3Jvb3QnOiBf
YWxsX3Rlc3RzfV0KKworICAgIGlmIF93ZWJraXRfdGVzdHM6CisgICAgICAgIFZJUlRVQUxDT05G
SUcuZXh0ZW5kKAorICAgICAgICAgICMgVGhyZWUgbWFwcGluZ3MgKG9uZSB3aXRoIFNTTCBlbmFi
bGVkKSBmb3IgTGF5b3V0VGVzdHMgaHR0cCB0ZXN0cworICAgICAgICAgIFt7J3BvcnQnOiA4MDAw
LCAnZG9jcm9vdCc6IF93ZWJraXRfdGVzdHN9LAorICAgICAgICAgICB7J3BvcnQnOiA4MDgwLCAn
ZG9jcm9vdCc6IF93ZWJraXRfdGVzdHN9LAorICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9j
cm9vdCc6IF93ZWJraXRfdGVzdHMsICdzc2xjZXJ0JzogX3BlbV9maWxlfV0pCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgb3V0cHV0X2RpciwgYmFja2dyb3VuZD1GYWxzZSwgcG9ydD1Ob25lLAor
ICAgICAgICAgICAgICAgICByb290PU5vbmUsIHJlZ2lzdGVyX2N5Z3dpbj1Ob25lLCBydW5fYmFj
a2dyb3VuZD1Ob25lKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICBvdXRwdXRfZGlyOiB0
aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQorICAg
ICAgICAiIiIKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAg
c2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
c2VsZi5fcm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfY3lnd2luID0gcmVnaXN0
ZXJfY3lnd2luCisgICAgICAgIHNlbGYuX3J1bl9iYWNrZ3JvdW5kID0gcnVuX2JhY2tncm91bmQK
KyAgICAgICAgaWYgc2VsZi5fcG9ydDoKKyAgICAgICAgICAgIHNlbGYuX3BvcnQgPSBpbnQoc2Vs
Zi5fcG9ydCkKKworICAgIGRlZiBJc1J1bm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9wcm9jZXNzICE9IE5vbmUKKworICAgIGRlZiBTdGFydChzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5Jc1J1bm5pbmcoKToKKyAgICAgICAgICAgIHJhaXNlICdMaWdodHRwZCBhbHJlYWR5IHJ1bm5p
bmcnCisKKyAgICAgICAgYmFzZV9jb25mX2ZpbGUgPSBwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZSgn
dGhpcmRfcGFydHknLAorICAgICAgICAgICAgJ1dlYktpdFRvb2xzJywgJ1NjcmlwdHMnLCAnd2Vi
a2l0cHknLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICdsYXlvdXRfcGFja2FnZScsICds
aWdodHRwZC5jb25mJykKKyAgICAgICAgb3V0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxm
Ll9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpCisgICAgICAgIHRpbWVfc3RyID0gdGltZS5z
dHJmdGltZSgiJWQlYiVZLSVIJU0lUyIpCisgICAgICAgIGFjY2Vzc19maWxlX25hbWUgPSAiYWNj
ZXNzLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKKyAgICAgICAgYWNjZXNzX2xvZyA9IG9zLnBh
dGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBhY2Nlc3NfZmlsZV9uYW1lKQorICAgICAgICBsb2df
ZmlsZV9uYW1lID0gImVycm9yLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKKyAgICAgICAgZXJy
b3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUpCisK
KyAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhl
IGxhc3Qgb25lcy4KKyAgICAgICAgUmVtb3ZlTG9nRmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImFj
Y2Vzcy5sb2ctIikKKyAgICAgICAgUmVtb3ZlTG9nRmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImVy
cm9yLmxvZy0iKQorCisgICAgICAgICMgV3JpdGUgb3V0IHRoZSBjb25maWcKKyAgICAgICAgZiA9
IGZpbGUoYmFzZV9jb25mX2ZpbGUsICdyYicpCisgICAgICAgIGJhc2VfY29uZiA9IGYucmVhZCgp
CisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBmaWxlKG91dF9jb25mX2ZpbGUsICd3
YicpCisgICAgICAgIGYud3JpdGUoYmFzZV9jb25mKQorCisgICAgICAgICMgV3JpdGUgb3V0IG91
ciBjZ2kgaGFuZGxlcnMuICBSdW4gcGVybCB0aHJvdWdoIGVudiBzbyB0aGF0IGl0CisgICAgICAg
ICMgcHJvY2Vzc2VzIHRoZSAjISBsaW5lIGFuZCBydW5zIHBlcmwgd2l0aCB0aGUgcHJvcGVyIGNv
bW1hbmQKKyAgICAgICAgIyBsaW5lIGFyZ3VtZW50cy4gRW11bGF0ZSBhcGFjaGUncyBtb2RfYXNp
cyB3aXRoIGEgY2F0IGNnaSBoYW5kbGVyLgorICAgICAgICBmLndyaXRlKCgnY2dpLmFzc2lnbiA9
ICggIi5jZ2kiICA9PiAiL3Vzci9iaW4vZW52IixcbicKKyAgICAgICAgICAgICAgICAgJyAgICAg
ICAgICAgICAgICIucGwiICAgPT4gIi91c3IvYmluL2VudiIsXG4nCisgICAgICAgICAgICAgICAg
ICcgICAgICAgICAgICAgICAiLmFzaXMiID0+ICIvYmluL2NhdCIsXG4nCisgICAgICAgICAgICAg
ICAgICcgICAgICAgICAgICAgICAiLnBocCIgID0+ICIlcyIgKVxuXG4nKSAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5MaWdIVFRQZFBIUFBhdGgoKSkK
KworICAgICAgICAjIFNldHVwIGxvZyBmaWxlcworICAgICAgICBmLndyaXRlKCgnc2VydmVyLmVy
cm9ybG9nID0gIiVzIlxuJworICAgICAgICAgICAgICAgICAnYWNjZXNzbG9nLmZpbGVuYW1lID0g
IiVzIlxuXG4nKSAlIChlcnJvcl9sb2csIGFjY2Vzc19sb2cpKQorCisgICAgICAgICMgU2V0dXAg
dXBsb2FkIGZvbGRlcnMuIFVwbG9hZCBmb2xkZXIgaXMgdG8gaG9sZCB0ZW1wb3JhcnkgdXBsb2Fk
IGZpbGVzCisgICAgICAgICMgYW5kIGFsc28gUE9TVCBkYXRhLiBUaGlzIGlzIHVzZWQgdG8gc3Vw
cG9ydCBYSFIgbGF5b3V0IHRlc3RzIHRoYXQKKyAgICAgICAgIyBkb2VzIFBPU1QuCisgICAgICAg
IGYud3JpdGUoKCdzZXJ2ZXIudXBsb2FkLWRpcnMgPSAoICIlcyIgKVxuXG4nKSAlIChzZWxmLl9v
dXRwdXRfZGlyKSkKKworICAgICAgICAjIFNldHVwIGEgbGluayB0byB3aGVyZSB0aGUganMgdGVz
dCB0ZW1wbGF0ZXMgYXJlIHN0b3JlZAorICAgICAgICBmLndyaXRlKCgnYWxpYXMudXJsID0gKCAi
L2pzLXRlc3QtcmVzb3VyY2VzIiA9PiAiJXMiIClcblxuJykgJQorICAgICAgICAgICAgICAgICAg
ICAoc2VsZi5fanNfdGVzdF9yZXNvdXJjZSkpCisKKyAgICAgICAgIyBkdW1wIG91dCBvZiB2aXJ0
dWFsIGhvc3QgY29uZmlnIGF0IHRoZSBib3R0b20uCisgICAgICAgIGlmIHNlbGYuX3Jvb3Q6Cisg
ICAgICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgICAgICMgSGF2ZSBib3RoIHBv
cnQgYW5kIHJvb3QgZGlyLgorICAgICAgICAgICAgICAgIG1hcHBpbmdzID0gW3sncG9ydCc6IHNl
bGYuX3BvcnQsICdkb2Nyb290Jzogc2VsZi5fcm9vdH1dCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICMgSGF2ZSBvbmx5IGEgcm9vdCBkaXIgLSBzZXQgdGhlIHBvcnRzIGFzIGZv
ciBMYXlvdXRUZXN0cy4KKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdXNlZCBpbiB1aV90ZXN0
cyB0byBydW4gaHR0cCB0ZXN0cyBhZ2FpbnN0IGEgYnJvd3Nlci4KKworICAgICAgICAgICAgICAg
ICMgZGVmYXVsdCBzZXQgb2YgcG9ydHMgYXMgZm9yIExheW91dFRlc3RzIGJ1dCB3aXRoIGEKKyAg
ICAgICAgICAgICAgICAjIHNwZWNpZmllZCByb290LgorICAgICAgICAgICAgICAgIG1hcHBpbmdz
ID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6IHNlbGYu
X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc2xjZXJ0JzogTGlnaHR0cGQu
X3BlbV9maWxlfV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcHBpbmdzID0gc2VsZi5W
SVJUVUFMQ09ORklHCisgICAgICAgIGZvciBtYXBwaW5nIGluIG1hcHBpbmdzOgorICAgICAgICAg
ICAgc3NsX3NldHVwID0gJycKKyAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5nOgor
ICAgICAgICAgICAgICAgIHNzbF9zZXR1cCA9ICgnICBzc2wuZW5naW5lID0gImVuYWJsZSJcbicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc3NsLnBlbWZpbGUgPSAiJXMiXG4nICUg
bWFwcGluZ1snc3NsY2VydCddKQorCisgICAgICAgICAgICBmLndyaXRlKCgnJFNFUlZFUlsic29j
a2V0Il0gPT0gIjEyNy4wLjAuMTolZCIge1xuJworICAgICAgICAgICAgICAgICAgICAgJyAgc2Vy
dmVyLmRvY3VtZW50LXJvb3QgPSAiJXMiXG4nICsKKyAgICAgICAgICAgICAgICAgICAgIHNzbF9z
ZXR1cCArCisgICAgICAgICAgICAgICAgICAgICAnfVxuXG4nKSAlIChtYXBwaW5nWydwb3J0J10s
IG1hcHBpbmdbJ2RvY3Jvb3QnXSkpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGV4ZWN1
dGFibGUgPSBwYXRoX3V0aWxzLkxpZ0hUVFBkRXhlY3V0YWJsZVBhdGgoKQorICAgICAgICBtb2R1
bGVfcGF0aCA9IHBhdGhfdXRpbHMuTGlnSFRUUGRNb2R1bGVQYXRoKCkKKyAgICAgICAgc3RhcnRf
Y21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAjIE5ld2x5IHdyaXR0ZW4g
Y29uZmlnIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICctZicsIHBhdGhfdXRpbHMuUGF0aEZy
b21CYXNlKHNlbGYuX291dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnbGlnaHR0cGQuY29uZicpLAorICAgICAgICAgICAgICAgICAg
ICAgIyBXaGVyZSBpdCBjYW4gZmluZCBpdHMgbW9kdWxlIGR5bmFtaWMgbGlicmFyaWVzCisgICAg
ICAgICAgICAgICAgICAgICAnLW0nLCBtb2R1bGVfcGF0aF0KKworICAgICAgICBpZiBub3Qgc2Vs
Zi5fcnVuX2JhY2tncm91bmQ6CisgICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKCMgRG9uJ3Qg
YmFja2dyb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLUQnKQorCisgICAgICAg
ICMgQ29weSBsaWJsaWdodGNvbXAuZHlsaWIgdG8gL3RtcC9saWdodHRwZC9saWIgdG8gd29yayBh
cm91bmQgdGhlCisgICAgICAgICMgYnVnIHRoYXQgbW9kX2FsaWFzLnNvIGxvYWRzIGl0IGZyb20g
dGhlIGhhcmQgY29kZWQgcGF0aC4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4n
OgorICAgICAgICAgICAgdG1wX21vZHVsZV9wYXRoID0gJy90bXAvbGlnaHR0cGQvbGliJworICAg
ICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRtcF9tb2R1bGVfcGF0aCk6CisgICAgICAg
ICAgICAgICAgb3MubWFrZWRpcnModG1wX21vZHVsZV9wYXRoKQorICAgICAgICAgICAgbGliX2Zp
bGUgPSAnbGlibGlnaHRjb21wLmR5bGliJworICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9z
LnBhdGguam9pbihtb2R1bGVfcGF0aCwgbGliX2ZpbGUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9zLnBhdGguam9pbih0bXBfbW9kdWxlX3BhdGgsIGxpYl9maWxlKSkKKworICAgICAg
ICAjIFB1dCB0aGUgY3lnd2luIGRpcmVjdG9yeSBmaXJzdCBpbiB0aGUgcGF0aCB0byBmaW5kIGN5
Z3dpbjEuZGxsCisgICAgICAgIGVudiA9IG9zLmVudmlyb24KKyAgICAgICAgaWYgc3lzLnBsYXRm
b3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgICAgICBlbnZbJ1BBVEgnXSA9ICcl
czslcycgJSAoCisgICAgICAgICAgICAgICAgcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJk
X3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAgICAgICAgICBlbnZbJ1BBVEgnXSkK
KworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgc2VsZi5fcmVnaXN0ZXJf
Y3lnd2luOgorICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBwYXRoX3V0aWxzLlBhdGhGcm9tQmFz
ZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQu
YmF0JykKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQor
CisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVyJykKKyAgICAgICAg
c2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRfY21kLCBlbnY9ZW52KQorCisg
ICAgICAgICMgV2FpdCBmb3Igc2VydmVyIHRvIHN0YXJ0LgorICAgICAgICBzZWxmLm1hcHBpbmdz
ID0gbWFwcGluZ3MKKyAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLldhaXRGb3JBY3Rpb24o
c2VsZi5Jc1NlcnZlclJ1bm5pbmdPbkFsbFBvcnRzKQorCisgICAgICAgICMgT3VyIHByb2Nlc3Mg
dGVybWluYXRlZCBhbHJlYWR5CisgICAgICAgIGlmIG5vdCBzZXJ2ZXJfc3RhcnRlZCBvciBzZWxm
Ll9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEh0dHBkTm90
U3RhcnRlZCgnRmFpbGVkIHRvIHN0YXJ0IGh0dHBkLicpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1
ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKKworICAgICMgVE9ETyhkZWFubSk6IEZp
bmQgYSBuaWNlciB3YXkgdG8gc2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cgZmlsZXMgYXJlCisg
ICAgIyBwcm9iYWJseSBub3QgYmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBw
eXRob24gaGF2ZSBvcy5raWxsID8KKworICAgIGRlZiBTdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToK
KyAgICAgICAgaWYgbm90IGZvcmNlIGFuZCBub3Qgc2VsZi5Jc1J1bm5pbmcoKToKKyAgICAgICAg
ICAgIHJldHVybgorCisgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5f
cHJvY2VzczoKKyAgICAgICAgICAgIGh0dHBkX3BpZCA9IHNlbGYuX3Byb2Nlc3MucGlkCisgICAg
ICAgIHBhdGhfdXRpbHMuU2h1dERvd25IVFRQU2VydmVyKGh0dHBkX3BpZCkKKworICAgICAgICBp
ZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkKKyAgICAg
ICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186
CisgICAgIyBQcm92aWRlIHNvbWUgY29tbWFuZCBsaW5lIHBhcmFtcyBmb3Igc3RhcnRpbmcvc3Rv
cHBpbmcgdGhlIGh0dHAgc2VydmVyCisgICAgIyBtYW51YWxseS4gQWxzbyB1c2VkIGluIHVpX3Rl
c3RzIHRvIHJ1biBodHRwIGxheW91dCB0ZXN0cyBpbiBhIGJyb3dzZXIuCisgICAgb3B0aW9uX3Bh
cnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0
aW9uKCctaycsICctLXNlcnZlcicsCisgICAgICAgIGhlbHA9J1NlcnZlciBhY3Rpb24gKHN0YXJ0
fHN0b3ApJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsCisg
ICAgICAgIGhlbHA9J1BvcnQgdG8gbGlzdGVuIG9uIChvdmVycmlkZXMgbGF5b3V0IHRlc3QgcG9y
dHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcm9vdCcsCisgICAg
ICAgIGhlbHA9J0Fic29sdXRlIHBhdGggdG8gRG9jdW1lbnRSb290IChvdmVycmlkZXMgbGF5b3V0
IHRlc3Qgcm9vdHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJf
Y3lnd2luJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVzdD0icmVnaXN0ZXJfY3ln
d2luIiwgaGVscD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhzIChvbiBXaW4gdHJ5IGJvdHMpJykKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcnVuX2JhY2tncm91bmQnLCBhY3Rpb249InN0
b3JlX3RydWUiLAorICAgICAgICBkZXN0PSJydW5fYmFja2dyb3VuZCIsCisgICAgICAgIGhlbHA9
J1J1biBvbiBiYWNrZ3JvdW5kIChmb3IgcnVubmluZyBhcyBVSSB0ZXN0KScpCisgICAgb3B0aW9u
cywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBub3Qgb3B0aW9u
cy5zZXJ2ZXI6CisgICAgICAgIHByaW50ICgnVXNhZ2U6ICVzIC0tc2VydmVyIHtzdGFydHxzdG9w
fSBbLS1yb290PXJvb3RfZGlyXScKKyAgICAgICAgICAgICAgICcgWy0tcG9ydD1wb3J0X251bWJl
cl0nICUgc3lzLmFyZ3ZbMF0pCisgICAgZWxzZToKKyAgICAgICAgaWYgKG9wdGlvbnMucm9vdCBp
cyBOb25lKSBhbmQgKG9wdGlvbnMucG9ydCBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAjIHNw
ZWNpZnlpbmcgcm9vdCBidXQgbm90IHBvcnQgbWVhbnMgd2Ugd2FudCBodHRwZCBvbiBkZWZhdWx0
CisgICAgICAgICAgICAjIHNldCBvZiBwb3J0cyB0aGF0IExheW91dFRlc3QgdXNlLCBidXQgcG9p
bnRpbmcgdG8gYSBkaWZmZXJlbnQKKyAgICAgICAgICAgICMgc291cmNlIG9mIHRlc3RzLiBTcGVj
aWZ5aW5nIHBvcnQgYnV0IG5vIHJvb3QgZG9lcyBub3Qgc2VlbQorICAgICAgICAgICAgIyBtZWFu
aW5nZnVsLgorICAgICAgICAgICAgcmFpc2UgJ1NwZWNpZnlpbmcgcG9ydCByZXF1aXJlcyBhbHNv
IGEgcm9vdC4nCisgICAgICAgIGh0dHBkID0gTGlnaHR0cGQodGVtcGZpbGUuZ2V0dGVtcGRpcigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9b3B0aW9ucy5wb3J0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHJvb3Q9b3B0aW9ucy5yb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyX2N5Z3dpbj1vcHRpb25zLnJlZ2lzdGVyX2N5Z3dpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBydW5fYmFja2dyb3VuZD1vcHRpb25zLnJ1bl9iYWNrZ3JvdW5kKQorICAg
ICAgICBpZiAnc3RhcnQnID09IG9wdGlvbnMuc2VydmVyOgorICAgICAgICAgICAgaHR0cGQuU3Rh
cnQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaHR0cGQuU3RvcChmb3JjZT1UcnVlKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmMDk3OAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2h0dHBfc2VydmVyX2Jhc2UucHkKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgKGMp
IDIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworIiIiQmFzZSBjbGFzcyB3
aXRoIGNvbW1vbiByb3V0aW5lcyBiZXR3ZWVuIHRoZSBBcGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZl
cnMuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxpYgorCisK
K2NsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CisKKyAgICBkZWYgV2FpdEZvckFjdGlvbihz
ZWxmLCBhY3Rpb24pOgorICAgICAgICAiIiJSZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25k
cyBvciB1bnRpbCBpdCBzdWNjZWVkcy4gUmV0dXJucworICAgICAgICB3aGV0aGVyIGl0IHN1Y2Nl
ZWRlZC4iIiIKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHdoaWxl
IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IDIwOgorICAgICAgICAgICAgaWYgYWN0aW9uKCk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkK
KworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBJc1NlcnZlclJ1bm5pbmdPbkFsbFBv
cnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZlciBpcyBydW5u
aW5nIG9uIGFsbCB0aGUgZGVzaXJlZCBwb3J0cy4iIiIKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4g
c2VsZi5tYXBwaW5nczoKKyAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5nOgorICAg
ICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJ3MnCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGh0dHBfc3VmZml4ID0gJycKKworICAgICAgICAgICAgdXJsID0gJ2h0dHAlczov
LzEyNy4wLjAuMTolZC8nICUgKGh0dHBfc3VmZml4LCBtYXBwaW5nWydwb3J0J10pCisKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVybGxpYi51cmxvcGVuKHVy
bCkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgcnVubmluZyBhdCAlcyIg
JSB1cmwpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dn
aW5nLmRlYnVnKCJTZXJ2ZXIgTk9UIHJ1bm5pbmcgYXQgJXMiICUgdXJsKQorICAgICAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRw
ZDIucGVtIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvaHR0cGQyLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
MzQ5Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBlbQpAQCAtMCwwICsxLDQxIEBACist
LS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVaRENDQWt5Z0F3SUJBZ0lCQVRBTkJna3Fo
a2lHOXcwQkFRVUZBREJnTVJBd0RnWURWUVFERXdkVVpYTjAKK0lFTkJNUXN3Q1FZRFZRUUdFd0pW
VXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU4KK1RXOTFiblJoYVc0
Z1ZtbGxkekVTTUJBR0ExVUVDaE1KUTJWeWRDQlVaWE4wTUI0WERUQTRNRGN5T0RJeU16SXkKK09G
b1hEVEV6TURjeU56SXlNekl5T0Zvd1NqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQWdUQ2tO
aGJHbG0KK2IzSnVhV0V4RWpBUUJnTlZCQW9UQ1VObGNuUWdWR1Z6ZERFU01CQUdBMVVFQXhNSk1U
STNMakF1TUM0eE1JR2YKK01BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEUWoydFBX
UFVnYnVJNEgzLzNkbnR0cVZibmR3VTMKKzNCZFJDZDY3REZNNDRHUnJzakRTSDRiWS9FYkZ5WDlE
NTJkL2l5NlphQW1EZVBjQ3o1ay9mZ1AzRE11anlrWUcKK3FnTmlWMnl3eFRsTWo3TmxOMkM3U1J0
NjhmUU1acjVpSTdyeXBkeHVhWnQ5bFNNRDNFTkJmZll0dUxUeVpkOWEKKzNKUEplMVRhSWFiNUd3
SURBUUFCbzRIQ01JRy9NQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRkNZTEJ2NUsKK3g1c0xO
VmxwTGg1RndUd2hkRGw3TUlHU0JnTlZIU01FZ1lvd2dZZUFGRjNPZjVuajFCbEJNVS9HejdFbDlW
cXYKKzQ1Y3hvV1NrWWpCZ01SQXdEZ1lEVlFRREV3ZFVaWE4wSUVOQk1Rc3dDUVlEVlFRR0V3SlZV
ekVUTUJFR0ExVUUKK0NCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVFc5MWJuUmhhVzRn
Vm1sbGR6RVNNQkFHQTFVRUNoTUoKK1EyVnlkQ0JVWlhOMGdna0ExRkdUMUQvZTJVNHdEUVlKS29a
SWh2Y05BUUVGQlFBRGdnSUJBRXRrVm1MT2JVZ2sKK2IyY0lBMlMrUUR0aWZxMVVnVmZCYnl0dlIy
bEZtbkFET1I1NW1vMGdIUUczSEhxcTRnMDM0TG1vVlhESGhVazgKK0diNmFGaXY0UXVibVZoTFhj
VWVsVFJYd2lOdkd6a1c3cEM2SnJxMTA1aGRQanpYTUtUY21pTGFvcG01RnFmYzcKK2hqNUNuMVNq
c3BjOHBkZVFqcmJlTWR2Y2E3S2xGckdQOFlrd0NVMnhPT1g5UGlOOUcwOTY2Qldmam5yL2ZaWnAK
KytPUVZ1VUZIZGlBWnd0aEVNdURwQUFYSHFZWElzZXJtZ2RPcGdKYUE1M2NmOE5xQlYyUUdodEZn
dHNKQ1JvaXUKKzdES3FoeVJXQkd5ejE5VklIMmI3eSs2cXZRVnh1SGsxOWtLUk0wbmZ0dy95TmNK
bm03Z3R0dGVzcE1VUHNPTWEKK2EyU0QxRzBobTBUTkQ2dnhhQmhnUjNjVnFwbC9xSXBBZEZpMDBU
bTdoVHlZRTdJNDN6UFcwM3QrL0RwQ3QzVW0KK0VNUlpzUTkwY281cStiY3gvdlE3WUF0d1VoMzB1
TWIwd3BpYmV5Q3dEcDhjcU5tU2lSa0V1Yy9GalRZZXM1dDgKKzVnUi8vV1gxbDArcWpyanVzTzlO
bW9MbnEyWWs2VWNpb1greitxNlovZHVkR2ZxaExmZVdEMlEwTFdZQTI0MkMKK2Q3a201WTNLQXQx
UEpkVnNvZi9haVZoVmRkZFkvT0lFS1RSUWhXRWREYm9zeTJlaDE2QkNLWFQyRkZ2aE5EZzEKK0FZ
RnZuNkk4bmo5SWxkTUppSWMzRGRoYWNFQUV6Uk1lUmdQZHpBYTFncmlLVUdrbnhzeVR5UmlpOHJ1
MFdTNncKK0RDTnJsRE9WWGR6WUdFWm9vQkk3NkJEVlkwVzBha2pWCistLS0tLUVORCBDRVJUSUZJ
Q0FURS0tLS0tCistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWFFJQkFBS0Jn
UURRajJ0UFdQVWdidUk0SDMvM2RudHRxVmJuZHdVMzNCZFJDZDY3REZNNDRHUnJzakRTCitINGJZ
L0ViRnlYOUQ1MmQvaXk2WmFBbURlUGNDejVrL2ZnUDNETXVqeWtZR3FnTmlWMnl3eFRsTWo3TmxO
MkM3CitTUnQ2OGZRTVpyNWlJN3J5cGR4dWFadDlsU01EM0VOQmZmWXR1TFR5WmQ5YTNKUEplMVRh
SWFiNUd3SURBUUFCCitBb0dBTkhYdTh6MllJemxoRStid2hHbThNR0JwS0wzcWhSdUtqZXJpcU1B
MzZ0V2V6T3c4bFk0eW1FQVUrVWx2CitCc0NkYXhxeWRRb1RZb3U1N200VHlVSEVjeHE5cHEzSDB6
QjBxTDcwOURkSGkvdDR6YlY5WElvQXpDNXYwL2hHCis5K0NhMjlUd0MwMkZDdytxTGtOcnR3Q3B3
T2NRbWMrYlB4cXZGdTFpTWlhaFVSRUNRUUQySS9IaTI0MTNDTVp6CitUQmpsOGZNaVZPOUdoQTJK
MHNjOFFpK1ljZ0pha2FMRDl4Y2JhaUxrVHpQWkRsQTM4OUMxYjZJYStwb0FyNFlBCitWZTBGRmJ4
cEFrRUEyT29iYXl5SEUvUXRQRXFveTZOTFI1N2ppcm1WQk5tU1dXZDRsQXlMNVVJSElZVnR0Slpn
Cis4Q0x2YnphVS9pREd3Uit3S3NNNjY0cktQSEVtdGx5bzR3SkJBTWVTcVlPNVpPQ0pHdTlOV2py
SGpNM2ZkQXNHCis4enMyemhpTHlhK2ZjVTBpSElrc0JXNVRCbXQ3MUp3L3dNYzlSNUoxSzBrWXZG
bWw5ODY1M081c2kxRUNRQkNrCitSVjQvbUUxcm1selp6WUZ5RWNCNDdEUWtjTTVpY3R2eEdFc2pl
MGduZkt5UnRBejZ6STBmNFFiRFJVTUorTFd3CitYSytyTXNZSGErU2ZPYjBiOXNrQ1FRQ0xkZW9u
c0lwRkR2L1V2K2ZsSElTeTBXQStBRmtMWHJSa0JLaDZHL09ECitkTUhhTmV2a0pnVW5wY2VWRW5r
cmRlbnA1Q2NFb0ZUSTE3cGQrbkJnRG0vQgorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlv
dXRfcmVzdWx0c19nZW5lcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZjYyMDc1ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJh
dG9yLnB5CkBAIC0wLDAgKzEsMTU5IEBACisjIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKK2Zy
b20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKK2Zyb20gbGF5
b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1
cmVzCisKKworY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dl
bmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcik6CisgICAgIiIiQSBKU09OIHJlc3VsdHMgZ2Vu
ZXJhdG9yIGZvciBsYXlvdXQgdGVzdHMuIiIiCisKKyAgICBMQVlPVVRfVEVTVFNfUEFUSCA9ICJM
YXlvdXRUZXN0cyIKKworICAgICMgQWRkaXRpb25hbCBKU09OIGZpZWxkcy4KKyAgICBXT05URklY
ID0gIndvbnRmaXhDb3VudHMiCisgICAgREVGRVJSRUQgPSAiZGVmZXJyZWRDb3VudHMiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1i
ZXIsCisgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisg
ICAgICAgIHRlc3RfdGltaW5ncywgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgYWxsX3Rl
c3RzKToKKyAgICAgICAgIiIiTW9kaWZpZXMgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiBHcmFicyBp
dCBvZmYgdGhlIGFyY2hpdmUgZGlyZWN0b3J5CisgICAgICAgIGlmIGl0IGlzIG5vdCBmb3VuZCBs
b2NhbGx5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IFJlc3Vs
dHNTdW1tYXJ5IG9iamVjdCBzdG9yaW5nIHRoZSBzdW1tYXJ5IG9mIHRoZSB0ZXN0CisgICAgICAg
ICAgICAgIHJlc3VsdHMuCisgICAgICAgICAgKHNlZSB0aGUgY29tbWVudCBvZiBKU09OUmVzdWx0
c0dlbmVyYXRvci5fX2luaXRfXyBmb3Igb3RoZXIgQXJncykKKyAgICAgICAgIiIiCisKKyAgICAg
ICAgc2VsZi5fYnVpbGRlcl9uYW1lID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxk
X25hbWUgPSBidWlsZF9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251
bWJlcgorICAgICAgICBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAor
ICAgICAgICBzZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2Zp
bGVfYmFzZV9wYXRoLAorICAgICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAg
ICBzZWxmLl9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMKKworICAgICAgICAjIFdlIGRvbid0
IHVzZSBzZWxmLl9za2lwcGVkX3Rlc3RzIGFuZCBzZWxmLl9wYXNzZWRfdGVzdHMgYXMgd2UKKyAg
ICAgICAgIyBvdmVycmlkZSBfSW5zZXJ0RmFpbHVyZVN1bW1hcmllcy4KKworICAgICAgICAjIFdl
IHdhbnQgcmVsYXRpdmUgcGF0aHMgdG8gTGF5b3V0VGVzdCByb290IGZvciBKU09OIG91dHB1dC4K
KyAgICAgICAgcGF0aF90b19uYW1lID0gc2VsZi5fR2V0UGF0aFJlbGF0aXZlVG9MYXlvdXRUZXN0
Um9vdAorICAgICAgICBzZWxmLl9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAg
ICAgIHNlbGYuX2ZhaWx1cmVzID0gZGljdCgKKyAgICAgICAgICAgIChwYXRoX3RvX25hbWUodGVz
dCksIHRlc3RfZmFpbHVyZXMuRGV0ZXJtaW5lUmVzdWx0VHlwZShmYWlsdXJlcykpCisgICAgICAg
ICAgICBmb3IgKHRlc3QsIGZhaWx1cmVzKSBpbiByZXN1bHRfc3VtbWFyeS5mYWlsdXJlcy5pdGVy
aXRlbXMoKSkKKyAgICAgICAgc2VsZi5fYWxsX3Rlc3RzID0gW3BhdGhfdG9fbmFtZSh0ZXN0KSBm
b3IgdGVzdCBpbiBhbGxfdGVzdHNdCisgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IGRpY3Qo
CisgICAgICAgICAgICAocGF0aF90b19uYW1lKHRlc3RfdHVwbGUuZmlsZW5hbWUpLCB0ZXN0X3R1
cGxlLnRlc3RfcnVuX3RpbWUpCisgICAgICAgICAgICBmb3IgdGVzdF90dXBsZSBpbiB0ZXN0X3Rp
bWluZ3MpCisKKyAgICAgICAgc2VsZi5fR2VuZXJhdGVKU09OT3V0cHV0KCkKKworICAgIGRlZiBf
R2V0UGF0aFJlbGF0aXZlVG9MYXlvdXRUZXN0Um9vdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIiIi
UmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgdGVzdCByZWxhdGl2ZSB0byB0aGUgbGF5b3V0IHRlc3Qg
cm9vdC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGZvcjoKKyAgICAgICAgICBzcmMvdGhpcmRfcGFy
dHkvV2ViS2l0L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9vLmh0bWwKKyAgICAgICAgV2Ugd291
bGQgcmV0dXJuCisgICAgICAgICAgZmFzdC9mb3Jtcy9mb28uaHRtbAorICAgICAgICAiIiIKKyAg
ICAgICAgaW5kZXggPSB0ZXN0LmZpbmQoc2VsZi5MQVlPVVRfVEVTVFNfUEFUSCkKKyAgICAgICAg
aWYgaW5kZXggaXMgbm90IC0xOgorICAgICAgICAgICAgaW5kZXggKz0gbGVuKHNlbGYuTEFZT1VU
X1RFU1RTX1BBVEgpCisKKyAgICAgICAgaWYgaW5kZXggaXMgLTE6CisgICAgICAgICAgICAjIEFs
cmVhZHkgYSByZWxhdGl2ZSBwYXRoLgorICAgICAgICAgICAgcmVsYXRpdmVQYXRoID0gdGVzdAor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVsYXRpdmVQYXRoID0gdGVzdFtpbmRleCArIDE6
XQorCisgICAgICAgICMgTWFrZSBzdXJlIGFsbCBwYXRocyBhcmUgdW5peC1zdHlsZS4KKyAgICAg
ICAgcmV0dXJuIHJlbGF0aXZlUGF0aC5yZXBsYWNlKCdcXCcsICcvJykKKworICAgICMgb3ZlcnJp
ZGUKKyAgICBkZWYgX0NvbnZlcnRKU09OVG9DdXJyZW50VmVyc2lvbihzZWxmLCByZXN1bHRzX2pz
b24pOgorICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCisgICAgICAgIGlmIHNlbGYuVkVS
U0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJzaW9uID0g
cmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCisKKyAgICAgICAgc3VwZXIoSlNPTkxheW91
dFJlc3VsdHNHZW5lcmF0b3IsIHNlbGYpLl9Db252ZXJ0SlNPTlRvQ3VycmVudFZlcnNpb24oCisg
ICAgICAgICAgICByZXN1bHRzX2pzb24pCisKKyAgICAgICAgIyB2ZXJzaW9uIDItPjMKKyAgICAg
ICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09IDI6CisgICAgICAgICAgICBmb3IgcmVzdWx0c19mb3Jf
YnVpbGRlciBpbiByZXN1bHRzX2pzb24uaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0c19mb3JfYnVpbGRl
cltzZWxmLlRFU1RTXQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9yZXN1bHRzOgorICAg
ICAgICAgICAgICAgICMgTWFrZSBzdXJlIGFsbCBwYXRocyBhcmUgcmVsYXRpdmUKKyAgICAgICAg
ICAgICAgICB0ZXN0X3BhdGggPSBzZWxmLl9HZXRQYXRoUmVsYXRpdmVUb0xheW91dFRlc3RSb290
KHRlc3QpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9wYXRoICE9IHRlc3Q6CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RfcmVzdWx0c1t0ZXN0X3BhdGhdID0gdGVzdF9yZXN1bHRzW3Rlc3RdCisg
ICAgICAgICAgICAgICAgICAgIGRlbCB0ZXN0X3Jlc3VsdHNbdGVzdF0KKworICAgICMgb3ZlcnJp
ZGUKKyAgICBkZWYgX0luc2VydEZhaWx1cmVTdW1tYXJpZXMoc2VsZiwgcmVzdWx0c19mb3JfYnVp
bGRlcik6CisgICAgICAgIHN1bW1hcnkgPSBzZWxmLl9yZXN1bHRfc3VtbWFyeQorCisgICAgICAg
IHNlbGYuX0luc2VydEl0ZW1JbnRvUmF3TGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAg
ICAgICAgbGVuKChzZXQoc3VtbWFyeS5mYWlsdXJlcy5rZXlzKCkpIHwKKyAgICAgICAgICAgICAg
ICBzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKSAm
CisgICAgICAgICAgICAgICAgc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0ZXN0X2V4cGVjdGF0
aW9ucy5OT1ddKSwKKyAgICAgICAgICAgIHNlbGYuRklYQUJMRV9DT1VOVCkKKyAgICAgICAgc2Vs
Zi5fSW5zZXJ0SXRlbUludG9SYXdMaXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAg
ICBzZWxmLl9HZXRGYWlsdXJlU3VtbWFyeUVudHJ5KHRlc3RfZXhwZWN0YXRpb25zLk5PVyksCisg
ICAgICAgICAgICBzZWxmLkZJWEFCTEUpCisgICAgICAgIHNlbGYuX0luc2VydEl0ZW1JbnRvUmF3
TGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgbGVuKHNlbGYuX2V4cGVjdGF0
aW9ucy5HZXRUZXN0c1dpdGhUaW1lbGluZSgKKyAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0
aW9ucy5OT1cpKSwgc2VsZi5BTExfRklYQUJMRV9DT1VOVCkKKyAgICAgICAgc2VsZi5fSW5zZXJ0
SXRlbUludG9SYXdMaXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBzZWxmLl9H
ZXRGYWlsdXJlU3VtbWFyeUVudHJ5KHRlc3RfZXhwZWN0YXRpb25zLkRFRkVSKSwKKyAgICAgICAg
ICAgIHNlbGYuREVGRVJSRUQpCisgICAgICAgIHNlbGYuX0luc2VydEl0ZW1JbnRvUmF3TGlzdChy
ZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fR2V0RmFpbHVyZVN1bW1hcnlF
bnRyeSh0ZXN0X2V4cGVjdGF0aW9ucy5XT05URklYKSwKKyAgICAgICAgICAgIHNlbGYuV09OVEZJ
WCkKKworICAgICMgb3ZlcnJpZGUKKyAgICBkZWYgX05vcm1hbGl6ZVJlc3VsdHNKU09OKHNlbGYs
IHRlc3QsIHRlc3RfbmFtZSwgdGVzdHMpOgorICAgICAgICBzdXBlcihKU09OTGF5b3V0UmVzdWx0
c0dlbmVyYXRvciwgc2VsZikuX05vcm1hbGl6ZVJlc3VsdHNKU09OKAorICAgICAgICAgICAgdGVz
dCwgdGVzdF9uYW1lLCB0ZXN0cykKKworICAgICAgICAjIFJlbW92ZSB0ZXN0cyB0aGF0IGRvbid0
IGV4aXN0IGFueW1vcmUuCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoX3V0
aWxzLkxheW91dFRlc3RzRGlyKCksIHRlc3RfbmFtZSkKKyAgICAgICAgZnVsbF9wYXRoID0gb3Mu
cGF0aC5ub3JtcGF0aChmdWxsX3BhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhm
dWxsX3BhdGgpOgorICAgICAgICAgICAgZGVsIHRlc3RzW3Rlc3RfbmFtZV0KKworICAgIGRlZiBf
R2V0RmFpbHVyZVN1bW1hcnlFbnRyeShzZWxmLCB0aW1lbGluZSk6CisgICAgICAgICIiIkNyZWF0
ZXMgYSBzdW1tYXJ5IG9iamVjdCB0byBpbnNlcnQgaW50byB0aGUgSlNPTi4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHN1bW1hcnkgICBSZXN1bHRTdW1tYXJ5IG9iamVjdCB3aXRoIHRlc3Qg
cmVzdWx0cworICAgICAgICAgIHRpbWVsaW5lICBjdXJyZW50IHRlc3RfZXhwZWN0YXRpb25zIHRp
bWVsaW5lIHRvIGJ1aWxkIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgICAgICAoZS5nLiwgdGVz
dF9leHBlY3RhdGlvbnMuTk9XLCBldGMuKQorICAgICAgICAiIiIKKyAgICAgICAgZW50cnkgPSB7
fQorICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0X3N1bW1hcnkKKyAgICAgICAgdGltZWxp
bmVfdGVzdHMgPSBzdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXQorICAgICAgICBl
bnRyeVtzZWxmLlNLSVBfUkVTVUxUXSA9IGxlbigKKyAgICAgICAgICAgIHN1bW1hcnkudGVzdHNf
YnlfZXhwZWN0YXRpb25bdGVzdF9leHBlY3RhdGlvbnMuU0tJUF0gJgorICAgICAgICAgICAgdGlt
ZWxpbmVfdGVzdHMpCisgICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVuKAorICAg
ICAgICAgICAgc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTXSAmCisgICAgICAgICAgICB0aW1lbGluZV90ZXN0cykKKyAgICAgICAgZm9yIGZhaWx1cmVf
dHlwZSBpbiBzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uLmtleXMoKToKKyAgICAgICAgICAg
IGlmIGZhaWx1cmVfdHlwZSBub3QgaW4gc2VsZi5GQUlMVVJFX1RPX0NIQVI6CisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50ID0gbGVuKHN1bW1hcnkudGVzdHNfYnlf
ZXhwZWN0YXRpb25bZmFpbHVyZV90eXBlXSAmCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
bGluZV90ZXN0cykKKyAgICAgICAgICAgIGVudHJ5W3NlbGYuRkFJTFVSRV9UT19DSEFSW2ZhaWx1
cmVfdHlwZV1dID0gY291bnQKKyAgICAgICAgcmV0dXJuIGVudHJ5CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTI1MWFkCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
anNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtMCwwICsxLDM5MSBAQAorIyBDb3B5cmlnaHQg
KGMpIDIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitmcm9tIGxheW91dF9w
YWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X2V4cGVjdGF0aW9ucworCitzeXMucGF0aC5hcHBlbmQocGF0aF91dGlscy5QYXRoRnJvbUJhc2Uo
CisgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29scycpKQoraW1wb3J0IHNp
bXBsZWpzb24KKworCitjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgorCisgICAg
TUFYX05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPRyA9IDc1MAorICAgICMgTWluIHRpbWUg
KHNlY29uZHMpIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgSlNPTi4KKyAgICBNSU5fVElNRSA9
IDEKKyAgICBKU09OX1BSRUZJWCA9ICJBRERfUkVTVUxUUygiCisgICAgSlNPTl9TVUZGSVggPSAi
KTsiCisgICAgUEFTU19SRVNVTFQgPSAiUCIKKyAgICBTS0lQX1JFU1VMVCA9ICJYIgorICAgIE5P
X0RBVEFfUkVTVUxUID0gIk4iCisgICAgVkVSU0lPTiA9IDMKKyAgICBWRVJTSU9OX0tFWSA9ICJ2
ZXJzaW9uIgorICAgIFJFU1VMVFMgPSAicmVzdWx0cyIKKyAgICBUSU1FUyA9ICJ0aW1lcyIKKyAg
ICBCVUlMRF9OVU1CRVJTID0gImJ1aWxkTnVtYmVycyIKKyAgICBXRUJLSVRfU1ZOID0gIndlYmtp
dFJldmlzaW9uIgorICAgIENIUk9NRV9TVk4gPSAiY2hyb21lUmV2aXNpb24iCisgICAgVElNRSA9
ICJzZWNvbmRzU2luY2VFcG9jaCIKKyAgICBURVNUUyA9ICJ0ZXN0cyIKKworICAgIEZJWEFCTEVf
Q09VTlQgPSAiZml4YWJsZUNvdW50IgorICAgIEZJWEFCTEUgPSAiZml4YWJsZUNvdW50cyIKKyAg
ICBBTExfRklYQUJMRV9DT1VOVCA9ICJhbGxGaXhhYmxlQ291bnQiCisKKyAgICAjIE5vdGUgdGhh
dCB3ZSBvbWl0IHRlc3RfZXhwZWN0YXRpb25zLkZBSUwgZnJvbSB0aGlzIGxpc3QgYmVjYXVzZQor
ICAgICMgaXQgc2hvdWxkIG5ldmVyIHNob3cgdXAgKGl0J3MgYSBsZWdhY3kgaW5wdXQgZXhwZWN0
YXRpb24sIG5ldmVyCisgICAgIyBhbiBvdXRwdXQgZXhwZWN0YXRpb24pLgorICAgIEZBSUxVUkVf
VE9fQ0hBUiA9IHt0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDogIkMiLAorICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUOiAiVCIsCisgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFOiAiSSIsCisgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RfZXhwZWN0YXRpb25zLlRFWFQ6ICJGIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
dGVzdF9leHBlY3RhdGlvbnMuTUlTU0lORzogIk8iLAorICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRV9QTFVTX1RFWFQ6ICJaIn0KKyAgICBGQUlMVVJFX0NIQVJT
ID0gRkFJTFVSRV9UT19DSEFSLnZhbHVlcygpCisKKyAgICBSRVNVTFRTX0ZJTEVOQU1FID0gInJl
c3VsdHMuanNvbiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyX25hbWUsIGJ1aWxk
X25hbWUsIGJ1aWxkX251bWJlciwKKyAgICAgICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aCwgYnVp
bGRlcl9iYXNlX3VybCwKKyAgICAgICAgdGVzdF90aW1pbmdzLCBmYWlsdXJlcywgcGFzc2VkX3Rl
c3RzLCBza2lwcGVkX3Rlc3RzLCBhbGxfdGVzdHMpOgorICAgICAgICAiIiJNb2RpZmllcyB0aGUg
cmVzdWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2ZSBkaXJlY3RvcnkKKyAg
ICAgICAgaWYgaXQgaXMgbm90IGZvdW5kIGxvY2FsbHkuCisKKyAgICAgICAgQXJncworICAgICAg
ICAgIGJ1aWxkZXJfbmFtZTogdGhlIGJ1aWxkZXIgbmFtZSAoZS5nLiBXZWJraXQpLgorICAgICAg
ICAgIGJ1aWxkX25hbWU6IHRoZSBidWlsZCBuYW1lIChlLmcuIHdlYmtpdC1yZWwpLgorICAgICAg
ICAgIGJ1aWxkX251bWJlcjogdGhlIGJ1aWxkIG51bWJlci4KKyAgICAgICAgICByZXN1bHRzX2Zp
bGVfYmFzZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0
aGUKKyAgICAgICAgICAgICAgcmVzdWx0cyBqc29uIGZpbGUuCisgICAgICAgICAgYnVpbGRlcl9i
YXNlX3VybDogdGhlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMu
CisgICAgICAgICAgdGVzdF90aW1pbmdzOiBNYXAgb2YgdGVzdCBuYW1lIHRvIGEgdGVzdF9ydW4t
dGltZS4KKyAgICAgICAgICBmYWlsdXJlczogTWFwIG9mIHRlc3QgbmFtZSB0byBhIGZhaWx1cmUg
dHlwZSAob2YgdGVzdF9leHBlY3RhdGlvbnMpLgorICAgICAgICAgIHBhc3NlZF90ZXN0czogQSBz
ZXQgY29udGFpbmluZyBhbGwgdGhlIHBhc3NlZCB0ZXN0cy4KKyAgICAgICAgICBza2lwcGVkX3Rl
c3RzOiBBIHNldCBjb250YWluaW5nIGFsbCB0aGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgICBh
bGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVuLiAgVGhpcyBzaG91
bGQgbm90CisgICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgIiIi
CisgICAgICAgIHNlbGYuX2J1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQorICAgICAgICBzZWxm
Ll9idWlsZF9uYW1lID0gYnVpbGRfbmFtZQorICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBi
dWlsZF9udW1iZXIKKyAgICAgICAgc2VsZi5fYnVpbGRlcl9iYXNlX3VybCA9IGJ1aWxkZXJfYmFz
ZV91cmwKKyAgICAgICAgc2VsZi5fcmVzdWx0c19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVz
dWx0c19maWxlX2Jhc2VfcGF0aCwKKyAgICAgICAgICAgIHNlbGYuUkVTVUxUU19GSUxFTkFNRSkK
KyAgICAgICAgc2VsZi5fdGVzdF90aW1pbmdzID0gdGVzdF90aW1pbmdzCisgICAgICAgIHNlbGYu
X2ZhaWx1cmVzID0gZmFpbHVyZXMKKyAgICAgICAgc2VsZi5fcGFzc2VkX3Rlc3RzID0gcGFzc2Vk
X3Rlc3RzCisgICAgICAgIHNlbGYuX3NraXBwZWRfdGVzdHMgPSBza2lwcGVkX3Rlc3RzCisgICAg
ICAgIHNlbGYuX2FsbF90ZXN0cyA9IGFsbF90ZXN0cworCisgICAgICAgIHNlbGYuX0dlbmVyYXRl
SlNPTk91dHB1dCgpCisKKyAgICBkZWYgX0dlbmVyYXRlSlNPTk91dHB1dChzZWxmKToKKyAgICAg
ICAgIiIiR2VuZXJhdGVzIHRoZSBKU09OIG91dHB1dCBmaWxlLiIiIgorICAgICAgICBqc29uID0g
c2VsZi5fR2V0SlNPTigpCisgICAgICAgIGlmIGpzb246CisgICAgICAgICAgICByZXN1bHRzX2Zp
bGUgPSBvcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAidyIpCisgICAgICAgICAgICByZXN1
bHRzX2ZpbGUud3JpdGUoanNvbikKKyAgICAgICAgICAgIHJlc3VsdHNfZmlsZS5jbG9zZSgpCisK
KyAgICBkZWYgX0dldFNWTlJldmlzaW9uKHNlbGYsIGluX2RpcmVjdG9yeT1Ob25lKToKKyAgICAg
ICAgIiIiUmV0dXJucyB0aGUgc3ZuIHJldmlzaW9uIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5Lgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgaW5fZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5IHdo
ZXJlIHN2biBpcyB0byBiZSBydW4uCisgICAgICAgICIiIgorICAgICAgICBvdXRwdXQgPSBzdWJw
cm9jZXNzLlBvcGVuKFsic3ZuIiwgImluZm8iLCAiLS14bWwiXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjd2Q9aW5fZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNoZWxsPShzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNh
dGUoKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkb20gPSB4bWwuZG9tLm1pbmlkb20u
cGFyc2VTdHJpbmcob3V0cHV0KQorICAgICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnZW50cnknKVswXS5nZXRBdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgJ3Jldmlz
aW9uJykKKyAgICAgICAgZXhjZXB0IHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3I6CisgICAg
ICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBfR2V0QXJjaGl2ZWRKU09OUmVzdWx0cyhzZWxm
KToKKyAgICAgICAgIiIiUmVhZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4K
KyAgICAgICAgUmV0dXJucyAoYXJjaGl2ZWRfcmVzdWx0cywgZXJyb3IpIHR1cGxlIHdoZXJlIGVy
cm9yIGlzIE5vbmUgaWYgcmVzdWx0cworICAgICAgICB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkLgor
ICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0c19qc29uID0ge30KKyAgICAgICAgb2xkX3Jlc3Vs
dHMgPSBOb25lCisgICAgICAgIGVycm9yID0gTm9uZQorCisgICAgICAgIGlmIG9zLnBhdGguZXhp
c3RzKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoKToKKyAgICAgICAgICAgIG9sZF9yZXN1bHRzX2Zp
bGUgPSBvcGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAiciIpCisgICAgICAgICAgICBvbGRf
cmVzdWx0cyA9IG9sZF9yZXN1bHRzX2ZpbGUucmVhZCgpCisgICAgICAgIGVsaWYgc2VsZi5fYnVp
bGRlcl9iYXNlX3VybDoKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2
ZWQgSlNPTiBmaWxlIG9uIHRoZSBidWlsZGJvdCBzZXJ2ZXIuCisgICAgICAgICAgICByZXN1bHRz
X2ZpbGVfdXJsID0gKHNlbGYuX2J1aWxkZXJfYmFzZV91cmwgKworICAgICAgICAgICAgICAgIHNl
bGYuX2J1aWxkX25hbWUgKyAiLyIgKyBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCisgICAgICAgICAg
ICBsb2dnaW5nLmVycm9yKCJMb2NhbCByZXN1bHRzLmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4g
R3JhYmJpbmcgIgorICAgICAgICAgICAgICAgICJpdCBvZmYgdGhlIGFyY2hpdmUgYXQgIiArIHJl
c3VsdHNfZmlsZV91cmwpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1
bHRzX2ZpbGUgPSB1cmxsaWIyLnVybG9wZW4ocmVzdWx0c19maWxlX3VybCkKKyAgICAgICAgICAg
ICAgICBpbmZvID0gcmVzdWx0c19maWxlLmluZm8oKQorICAgICAgICAgICAgICAgIG9sZF9yZXN1
bHRzID0gcmVzdWx0c19maWxlLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRU
UEVycm9yLCBodHRwX2Vycm9yOgorICAgICAgICAgICAgICAgICMgQSBub24tNHh4IHN0YXR1cyBj
b2RlIG1lYW5zIHRoZSBib3QgaXMgaG9zZWQgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAg
ICAgIyBhbmQgd2UgY2FuJ3QgZ3JhYiB0aGUgcmVzdWx0cy5qc29uIGZpbGUgb2ZmIG9mIGl0Lgor
ICAgICAgICAgICAgICAgIGlmIChodHRwX2Vycm9yLmNvZGUgPCA0MDAgYW5kIGh0dHBfZXJyb3Iu
Y29kZSA+PSA1MDApOgorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGh0dHBfZXJyb3IKKyAg
ICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yLCB1cmxfZXJyb3I6CisgICAgICAgICAg
ICAgICAgZXJyb3IgPSB1cmxfZXJyb3IKKworICAgICAgICBpZiBvbGRfcmVzdWx0czoKKyAgICAg
ICAgICAgICMgU3RyaXAgdGhlIHByZWZpeCBhbmQgc3VmZml4IHNvIHdlIGNhbiBnZXQgdGhlIGFj
dHVhbCBKU09OIG9iamVjdC4KKyAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gb2xkX3Jlc3VsdHNb
bGVuKHNlbGYuSlNPTl9QUkVGSVgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZW4ob2xkX3Jlc3VsdHMpIC0gbGVuKHNlbGYuSlNPTl9TVUZGSVgpXQorCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0c19qc29uID0gc2ltcGxlanNvbi5sb2Fk
cyhvbGRfcmVzdWx0cykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dn
aW5nLmRlYnVnKCJyZXN1bHRzLmpzb24gd2FzIG5vdCB2YWxpZCBKU09OLiBDbG9iYmVyaW5nLiIp
CisgICAgICAgICAgICAgICAgIyBUaGUgSlNPTiBmaWxlIGlzIG5vdCB2YWxpZCBKU09OLiBKdXN0
IGNsb2JiZXIgdGhlIHJlc3VsdHMuCisgICAgICAgICAgICAgICAgcmVzdWx0c19qc29uID0ge30K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ09sZCBKU09OIHJlc3Vs
dHMgZG8gbm90IGV4aXN0LiBTdGFydGluZyBmcmVzaC4nKQorICAgICAgICAgICAgcmVzdWx0c19q
c29uID0ge30KKworICAgICAgICByZXR1cm4gcmVzdWx0c19qc29uLCBlcnJvcgorCisgICAgZGVm
IF9HZXRKU09OKHNlbGYpOgorICAgICAgICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0aGUgcmVz
dWx0cy5qc29uIGZpbGUuIiIiCisgICAgICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBzZWxmLl9H
ZXRBcmNoaXZlZEpTT05SZXN1bHRzKCkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAj
IElmIHRoZXJlIHdhcyBhbiBlcnJvciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNvbgorICAgICAg
ICAgICAgIyBmaWxlIGF0IGFsbCBhcyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24g
b24gdGhlIGJvdC4KKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5
IGlzIGluYWNjZXNzaWJsZS4gTm90IG1vZGlmeWluZyAiCisgICAgICAgICAgICAgICAgIm9yIGNs
b2JiZXJpbmcgdGhlIHJlc3VsdHMuanNvbiBmaWxlOiAiICsgc3RyKGVycm9yKSkKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYnVpbGRlcl9uYW1lID0gc2VsZi5fYnVpbGRlcl9u
YW1lCisgICAgICAgIGlmIHJlc3VsdHNfanNvbiBhbmQgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1
bHRzX2pzb246CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJCdWlsZGVyIG5hbWUgKCVzKSBp
cyBub3QgaW4gdGhlIHJlc3VsdHMuanNvbiBmaWxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgJSBidWlsZGVyX25hbWUpCisKKyAgICAgICAgc2VsZi5fQ29udmVydEpTT05Ub0N1cnJlbnRW
ZXJzaW9uKHJlc3VsdHNfanNvbikKKworICAgICAgICBpZiBidWlsZGVyX25hbWUgbm90IGluIHJl
c3VsdHNfanNvbjoKKyAgICAgICAgICAgIHJlc3VsdHNfanNvbltidWlsZGVyX25hbWVdID0gc2Vs
Zi5fQ3JlYXRlUmVzdWx0c0ZvckJ1aWxkZXJKU09OKCkKKworICAgICAgICByZXN1bHRzX2Zvcl9i
dWlsZGVyID0gcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0KKworICAgICAgICBzZWxmLl9JbnNl
cnRHZW5lcmljTWV0YWRhdGEocmVzdWx0c19mb3JfYnVpbGRlcikKKworICAgICAgICBzZWxmLl9J
bnNlcnRGYWlsdXJlU3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgIyBV
cGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUuCisg
ICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQorICAgICAgICBh
bGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5pdGVya2V5cygpKQorICAgICAg
ICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAgICAgZm9y
IHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6CisgICAgICAgICAgICBzZWxmLl9JbnNlcnRUZXN0
VGltZUFuZFJlc3VsdCh0ZXN0LCB0ZXN0cykKKworICAgICAgICAjIFNwZWNpZnkgc2VwYXJhdG9y
cyBpbiBvcmRlciB0byBnZXQgY29tcGFjdCBlbmNvZGluZy4KKyAgICAgICAgcmVzdWx0c19zdHIg
PSBzaW1wbGVqc29uLmR1bXBzKHJlc3VsdHNfanNvbiwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQor
ICAgICAgICByZXR1cm4gc2VsZi5KU09OX1BSRUZJWCArIHJlc3VsdHNfc3RyICsgc2VsZi5KU09O
X1NVRkZJWAorCisgICAgZGVmIF9JbnNlcnRGYWlsdXJlU3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNf
Zm9yX2J1aWxkZXIpOgorICAgICAgICAiIiJJbnNlcnRzIGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUg
c3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgorICAgICAgICBUaGlzIG1ldGhvZCByZWFkcyBzZWxm
Ll9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVzdHMgYW5kCisgICAgICAgIHNlbGYuX2Zh
aWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFCTEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxF
X0NPVU5UCisgICAgICAgIGVudHJpZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1
bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBm
b3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAg
ICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCisgICAgICAgIHNlbGYu
X0luc2VydEl0ZW1JbnRvUmF3TGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAg
bGVuKHNldChzZWxmLl9mYWlsdXJlcy5rZXlzKCkpIHwgc2VsZi5fc2tpcHBlZF90ZXN0cyksCisg
ICAgICAgICAgICBzZWxmLkZJWEFCTEVfQ09VTlQpCisKKyAgICAgICAgIyBDcmVhdGUgYSBwYXNz
L3NraXAvZmFpbHVyZSBzdW1tYXJ5IGRpY3Rpb25hcnkuCisgICAgICAgIGVudHJ5ID0ge30KKyAg
ICAgICAgZW50cnlbc2VsZi5TS0lQX1JFU1VMVF0gPSBsZW4oc2VsZi5fc2tpcHBlZF90ZXN0cykK
KyAgICAgICAgZW50cnlbc2VsZi5QQVNTX1JFU1VMVF0gPSBsZW4oc2VsZi5fcGFzc2VkX3Rlc3Rz
KQorICAgICAgICBnZXQgPSBlbnRyeS5nZXQKKyAgICAgICAgZm9yIGZhaWx1cmVfdHlwZSBpbiBz
ZWxmLl9mYWlsdXJlcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGZhaWx1cmVfY2hhciA9IHNlbGYu
RkFJTFVSRV9UT19DSEFSW2ZhaWx1cmVfdHlwZV0KKyAgICAgICAgICAgIGVudHJ5W2ZhaWx1cmVf
Y2hhcl0gPSBnZXQoZmFpbHVyZV9jaGFyLCAwKSArIDEKKworICAgICAgICAjIEluc2VydCB0aGUg
cGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9uYXJ5LgorICAgICAgICBzZWxmLl9JbnNl
cnRJdGVtSW50b1Jhd0xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwgZW50cnksIHNlbGYuRklYQUJM
RSkKKworICAgICAgICAjIEluc2VydCB0aGUgbnVtYmVyIG9mIGFsbCB0aGUgdGVzdHMgdGhhdCBh
cmUgc3VwcG9zZWQgdG8gcGFzcy4KKyAgICAgICAgc2VsZi5fSW5zZXJ0SXRlbUludG9SYXdMaXN0
KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBsZW4oc2VsZi5fc2tpcHBlZF90ZXN0
cyB8IHNlbGYuX2FsbF90ZXN0cyksCisgICAgICAgICAgICBzZWxmLkFMTF9GSVhBQkxFX0NPVU5U
KQorCisgICAgZGVmIF9JbnNlcnRJdGVtSW50b1Jhd0xpc3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVp
bGRlciwgaXRlbSwga2V5KToKKyAgICAgICAgIiIiSW5zZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBs
aXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVzdWx0cyBmb3IKKyAgICAgICAgdGhpcyBi
dWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1Y2ggbGlzdCBleGlzdHMuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRh
aW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRl
ci4KKyAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3RyaW5nIHRvIGluc2VydCBpbnRvIHRoZSBs
aXN0LgorICAgICAgICAgIGtleTogS2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBs
aXN0IHRvIGluc2VydCBpbnRvLgorICAgICAgICAiIiIKKyAgICAgICAgaWYga2V5IGluIHJlc3Vs
dHNfZm9yX2J1aWxkZXI6CisgICAgICAgICAgICByYXdfbGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxk
ZXJba2V5XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmF3X2xpc3QgPSBbXQorCisgICAg
ICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQorICAgICAgICByYXdfbGlzdCA9IHJhd19saXN0
WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0ddCisgICAgICAgIHJlc3Vs
dHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0CisKKyAgICBkZWYgX0luc2VydEl0ZW1SdW5M
ZW5ndGhFbmNvZGVkKHNlbGYsIGl0ZW0sIGVuY29kZWRfcmVzdWx0cyk6CisgICAgICAgICIiIklu
c2VydHMgdGhlIGl0ZW0gaW50byB0aGUgcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICBpdGVtOiBTdHJpbmcgb3IgbnVtYmVyIHRvIGluc2VydC4K
KyAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHM6IHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLiBB
biBhcnJheSBvZiBhcnJheXMsIGUuZy4KKyAgICAgICAgICAgICAgW1szLCdBJ10sWzEsJ1EnXV0g
ZW5jb2RlcyBBQUFRLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKGVuY29kZWRfcmVzdWx0
cykgYW5kIGl0ZW0gPT0gZW5jb2RlZF9yZXN1bHRzWzBdWzFdOgorICAgICAgICAgICAgbnVtX3Jl
c3VsdHMgPSBlbmNvZGVkX3Jlc3VsdHNbMF1bMF0KKyAgICAgICAgICAgIGlmIG51bV9yZXN1bHRz
IDw9IHNlbGYuTUFYX05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPRzoKKyAgICAgICAgICAg
ICAgICBlbmNvZGVkX3Jlc3VsdHNbMF1bMF0gPSBudW1fcmVzdWx0cyArIDEKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICMgVXNlIGEgbGlzdCBpbnN0ZWFkIG9mIGEgY2xhc3MgZm9yIHRoZSBy
dW4tbGVuZ3RoIGVuY29kaW5nIHNpbmNlCisgICAgICAgICAgICAjIHdlIHdhbnQgdGhlIHNlcmlh
bGl6ZWQgZm9ybSB0byBiZSBjb25jaXNlLgorICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzLmlu
c2VydCgwLCBbMSwgaXRlbV0pCisKKyAgICBkZWYgX0luc2VydEdlbmVyaWNNZXRhZGF0YShzZWxm
LCByZXN1bHRzX2Zvcl9idWlsZGVyKToKKyAgICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRh
ZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJlciwgY3VycmVudCB0aW1lIGV0YykKKyAgICAgICAg
aW50byB0aGUgSlNPTi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1
aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvcgorICAgICAg
ICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fSW5z
ZXJ0SXRlbUludG9SYXdMaXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBzZWxm
Ll9idWlsZF9udW1iZXIsIHNlbGYuQlVJTERfTlVNQkVSUykKKworICAgICAgICBwYXRoX3RvX3dl
YmtpdCA9IHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJDb3Jl
JykKKyAgICAgICAgc2VsZi5fSW5zZXJ0SXRlbUludG9SYXdMaXN0KHJlc3VsdHNfZm9yX2J1aWxk
ZXIsCisgICAgICAgICAgICBzZWxmLl9HZXRTVk5SZXZpc2lvbihwYXRoX3RvX3dlYmtpdCksCisg
ICAgICAgICAgICBzZWxmLldFQktJVF9TVk4pCisKKyAgICAgICAgcGF0aF90b19jaHJvbWVfYmFz
ZSA9IHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCkKKyAgICAgICAgc2VsZi5fSW5zZXJ0SXRlbUlu
dG9SYXdMaXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBzZWxmLl9HZXRTVk5S
ZXZpc2lvbihwYXRoX3RvX2Nocm9tZV9iYXNlKSwKKyAgICAgICAgICAgIHNlbGYuQ0hST01FX1NW
TikKKworICAgICAgICBzZWxmLl9JbnNlcnRJdGVtSW50b1Jhd0xpc3QocmVzdWx0c19mb3JfYnVp
bGRlciwKKyAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSksCisgICAgICAgICAgICBzZWxmLlRJ
TUUpCisKKyAgICBkZWYgX0luc2VydFRlc3RUaW1lQW5kUmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwg
dGVzdHMpOgorICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGggaXRzIHJlc3VsdHMg
dG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRlc3QgcmVzdWx0IGVudHJpZXMuCisgICAg
ICAgICIiIgorCisgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJhdG9yLlBBU1NfUkVT
VUxUCisgICAgICAgIHRpbWUgPSAwCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiBzZWxm
Ll9hbGxfdGVzdHM6CisgICAgICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0c0dlbmVyYXRvci5O
T19EQVRBX1JFU1VMVAorCisgICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl9mYWlsdXJlczoK
KyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW3NlbGYuX2ZhaWx1cmVz
W3Rlc3RfbmFtZV1dCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RfdGltaW5n
czoKKyAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0byBnZXQgdGltZSBpbiBzZWNvbmRzLgor
ICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0X3RpbWluZ3NbdGVzdF9uYW1lXSkKKwor
ICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgorICAgICAgICAgICAgdGVzdHNbdGVz
dF9uYW1lXSA9IHNlbGYuX0NyZWF0ZVJlc3VsdHNBbmRUaW1lc0pTT04oKQorCisgICAgICAgIHRo
aXNUZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAgICAgICBzZWxmLl9JbnNlcnRJdGVtUnVuTGVu
Z3RoRW5jb2RlZChyZXN1bHQsIHRoaXNUZXN0W3NlbGYuUkVTVUxUU10pCisgICAgICAgIHNlbGYu
X0luc2VydEl0ZW1SdW5MZW5ndGhFbmNvZGVkKHRpbWUsIHRoaXNUZXN0W3NlbGYuVElNRVNdKQor
ICAgICAgICBzZWxmLl9Ob3JtYWxpemVSZXN1bHRzSlNPTih0aGlzVGVzdCwgdGVzdF9uYW1lLCB0
ZXN0cykKKworICAgIGRlZiBfQ29udmVydEpTT05Ub0N1cnJlbnRWZXJzaW9uKHNlbGYsIHJlc3Vs
dHNfanNvbik6CisgICAgICAgICIiIklmIHRoZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJy
ZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRvIHRoZQorICAgICAgICBjdXJyZW50IHZlcnNpb24g
YW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9uIG51bWJlci4KKyAgICAgICAgIiIiCisgICAgICAg
IGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJlc3VsdHNfanNvbiBhbmQKKyAgICAgICAgICAgIHJl
c3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9PSBzZWxmLlZFUlNJT04pOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID0gc2Vs
Zi5WRVJTSU9OCisKKyAgICBkZWYgX0NyZWF0ZVJlc3VsdHNBbmRUaW1lc0pTT04oc2VsZik6Cisg
ICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzID0ge30KKyAgICAgICAgcmVzdWx0c19hbmRfdGltZXNb
c2VsZi5SRVNVTFRTXSA9IFtdCisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuVElNRVNd
ID0gW10KKyAgICAgICAgcmV0dXJuIHJlc3VsdHNfYW5kX3RpbWVzCisKKyAgICBkZWYgX0NyZWF0
ZVJlc3VsdHNGb3JCdWlsZGVySlNPTihzZWxmKToKKyAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRl
ciA9IHt9CisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10gPSB7fQorICAg
ICAgICByZXR1cm4gcmVzdWx0c19mb3JfYnVpbGRlcgorCisgICAgZGVmIF9SZW1vdmVJdGVtc092
ZXJNYXhOdW1iZXJPZkJ1aWxkcyhzZWxmLCBlbmNvZGVkX2xpc3QpOgorICAgICAgICAiIiJSZW1v
dmVzIGl0ZW1zIGZyb20gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCBsaXN0IGFmdGVyIHRoZSBmaW5h
bAorICAgICAgICBpdGVtIHRoYXQgZXhjZWVkcyB0aGUgbWF4IG51bWJlciBvZiBidWlsZHMgdG8g
dHJhY2suCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHM6IHJ1bi1s
ZW5ndGggZW5jb2RlZCByZXN1bHRzLiBBbiBhcnJheSBvZiBhcnJheXMsIGUuZy4KKyAgICAgICAg
ICAgICAgW1szLCdBJ10sWzEsJ1EnXV0gZW5jb2RlcyBBQUFRLgorICAgICAgICAiIiIKKyAgICAg
ICAgbnVtX2J1aWxkcyA9IDAKKyAgICAgICAgaW5kZXggPSAwCisgICAgICAgIGZvciByZXN1bHQg
aW4gZW5jb2RlZF9saXN0OgorICAgICAgICAgICAgbnVtX2J1aWxkcyA9IG51bV9idWlsZHMgKyBy
ZXN1bHRbMF0KKyAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCisgICAgICAgICAgICBpZiBu
dW1fYnVpbGRzID4gc2VsZi5NQVhfTlVNQkVSX09GX0JVSUxEX1JFU1VMVFNfVE9fTE9HOgorICAg
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3RbOmluZGV4XQorICAgICAgICByZXR1cm4g
ZW5jb2RlZF9saXN0CisKKyAgICBkZWYgX05vcm1hbGl6ZVJlc3VsdHNKU09OKHNlbGYsIHRlc3Qs
IHRlc3RfbmFtZSwgdGVzdHMpOgorICAgICAgICAiIiIgUHJ1bmUgdGVzdHMgd2hlcmUgYWxsIHJ1
bnMgcGFzcyBvciB0ZXN0cyB0aGF0IG5vIGxvbmdlciBleGlzdCBhbmQKKyAgICAgICAgdHJ1bmNh
dGUgYWxsIHJlc3VsdHMgdG8gbWF4TnVtYmVyT2ZCdWlsZHMuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICB0ZXN0OiBSZXN1bHRzQW5kVGltZXMgb2JqZWN0IGZvciB0aGlzIHRlc3QuCisgICAg
ICAgICAgdGVzdF9uYW1lOiBOYW1lIG9mIHRoZSB0ZXN0LgorICAgICAgICAgIHRlc3RzOiBUaGUg
SlNPTiBvYmplY3Qgd2l0aCBhbGwgdGhlIHRlc3QgcmVzdWx0cyBmb3IgdGhpcyBidWlsZGVyLgor
ICAgICAgICAiIiIKKyAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdID0gc2VsZi5fUmVtb3ZlSXRl
bXNPdmVyTWF4TnVtYmVyT2ZCdWlsZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYuUkVTVUxUU10p
CisgICAgICAgIHRlc3Rbc2VsZi5USU1FU10gPSBzZWxmLl9SZW1vdmVJdGVtc092ZXJNYXhOdW1i
ZXJPZkJ1aWxkcygKKyAgICAgICAgICAgIHRlc3Rbc2VsZi5USU1FU10pCisKKyAgICAgICAgaXNf
YWxsX3Bhc3MgPSBzZWxmLl9Jc1Jlc3VsdHNBbGxPZlR5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlBBU1Nf
UkVTVUxUKQorICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNlbGYuX0lzUmVzdWx0c0FsbE9mVHlw
ZSh0ZXN0W3NlbGYuUkVTVUxUU10sCisgICAgICAgICAgICBzZWxmLk5PX0RBVEFfUkVTVUxUKQor
ICAgICAgICBtYXhfdGltZSA9IG1heChbdGltZVsxXSBmb3IgdGltZSBpbiB0ZXN0W3NlbGYuVElN
RVNdXSkKKworICAgICAgICAjIFJlbW92ZSBhbGwgcGFzc2VzL25vLWRhdGEgZnJvbSB0aGUgcmVz
dWx0cyB0byByZWR1Y2Ugbm9pc2UgYW5kCisgICAgICAgICMgZmlsZXNpemUuIElmIGEgdGVzdCBw
YXNzZXMgZXZlcnkgcnVuLCBidXQgdGFrZXMgPiBNSU5fVElNRSB0byBydW4sCisgICAgICAgICMg
ZG9uJ3QgdGhyb3cgYXdheSB0aGUgZGF0YS4KKyAgICAgICAgaWYgaXNfYWxsX25vX2RhdGEgb3Ig
KGlzX2FsbF9wYXNzIGFuZCBtYXhfdGltZSA8PSBzZWxmLk1JTl9USU1FKToKKyAgICAgICAgICAg
IGRlbCB0ZXN0c1t0ZXN0X25hbWVdCisKKyAgICBkZWYgX0lzUmVzdWx0c0FsbE9mVHlwZShzZWxm
LCByZXN1bHRzLCB0eXBlKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIGFsbCB0aGUgcmVz
dWx0cyBhcmUgb2YgdGhlIGdpdmVuIHR5cGUKKyAgICAgICAgKGUuZy4gYWxsIHBhc3NlcykuIiIi
CisgICAgICAgIHJldHVybiBsZW4ocmVzdWx0cykgPT0gMSBhbmQgcmVzdWx0c1swXVsxXSA9PSB0
eXBlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbGlnaHR0cGQuY29uZgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE1MGRkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbGln
aHR0cGQuY29uZgpAQCAtMCwwICsxLDg5IEBACitzZXJ2ZXIudGFnICAgICAgICAgICAgICAgICAg
PSAiTGlnaHRUUEQvMS40LjE5IChXaW4zMikiCitzZXJ2ZXIubW9kdWxlcyAgICAgICAgICAgICAg
PSAoICJtb2RfYWNjZXNzbG9nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1v
ZF9hbGlhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY2dpIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9yZXdyaXRlIiApCisKKyMgZGVmYXVs
dCBkb2N1bWVudCByb290IHJlcXVpcmVkCitzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIuIgorCisj
IGZpbGVzIHRvIGNoZWNrIGZvciBpZiAuLi4vIGlzIHJlcXVlc3RlZAoraW5kZXgtZmlsZS5uYW1l
cyAgICAgICAgICAgID0gKCAiaW5kZXgucGhwIiwgImluZGV4LnBsIiwgImluZGV4LmNnaSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleC5odG1sIiwgImluZGV4Lmh0bSIs
ICJkZWZhdWx0Lmh0bSIgKQorIyBtaW1ldHlwZSBtYXBwaW5nCittaW1ldHlwZS5hc3NpZ24gICAg
ICAgICAgICAgPSAoCisgICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAorICAi
LmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIuanBlZyIgICAgICAgICA9
PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3Bu
ZyIsCisgICIuc3ZnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9zdmcreG1sIiwKKyAgIi5jc3Mi
ICAgICAgICAgID0+ICAgICAgInRleHQvY3NzIiwKKyAgIi5odG1sIiAgICAgICAgID0+ICAgICAg
InRleHQvaHRtbCIsCisgICIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAi
LnhodG1sIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veGh0bWwreG1sIiwKKyAgIi5qcyIg
ICAgICAgICAgID0+ICAgICAgInRleHQvamF2YXNjcmlwdCIsCisgICIubG9nIiAgICAgICAgICA9
PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jb25mIiAgICAgICAgID0+ICAgICAgInRleHQvcGxh
aW4iLAorICAiLnRleHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIudHh0IiAg
ICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5kdGQiICAgICAgICAgID0+ICAgICAg
InRleHQveG1sIiwKKyAgIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKyAgIi5t
YW5pZmVzdCIgICAgID0+ICAgICAgInRleHQvY2FjaGUtbWFuaWZlc3QiLAorICkKKworIyBVc2Ug
dGhlICJDb250ZW50LVR5cGUiIGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBvYnRhaW4gbWltZSB0eXBl
IGlmIHBvc3NpYmxlCittaW1ldHlwZS51c2UteGF0dHIgICAgICAgICAgPSAiZW5hYmxlIgorCisj
IworIyB3aGljaCBleHRlbnNpb25zIHNob3VsZCBub3QgYmUgaGFuZGxlIHZpYSBzdGF0aWMtZmls
ZSB0cmFuc2ZlcgorIworIyAucGhwLCAucGwsIC5mY2dpIGFyZSBtb3N0IG9mdGVuIGhhbmRsZWQg
YnkgbW9kX2Zhc3RjZ2kgb3IgbW9kX2NnaQorc3RhdGljLWZpbGUuZXhjbHVkZS1leHRlbnNpb25z
ID0gKCAiLnBocCIsICIucGwiLCAiLmNnaSIgKQorCitzZXJ2ZXIuYmluZCA9ICJsb2NhbGhvc3Qi
CitzZXJ2ZXIucG9ydCA9IDgwMDEKKworIyMgdmlydHVhbCBkaXJlY3RvcnkgbGlzdGluZ3MKK2Rp
ci1saXN0aW5nLmFjdGl2YXRlICAgICAgICA9ICJlbmFibGUiCisjZGlyLWxpc3RpbmcuZW5jb2Rp
bmcgICAgICAgPSAiaXNvLTg4NTktMiIKKyNkaXItbGlzdGluZy5leHRlcm5hbC1jc3MgICA9ICJz
dHlsZS9vbGRzdHlsZS5jc3MiCisKKyMjIGVuYWJsZSBkZWJ1Z2dpbmcKKyNkZWJ1Zy5sb2ctcmVx
dWVzdC1oZWFkZXIgICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlc3BvbnNlLWhlYWRlciAgPSAi
ZW5hYmxlIgorI2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKyNkZWJ1Zy5s
b2ctZmlsZS1ub3QtZm91bmQgICA9ICJlbmFibGUiCisKKyMjIyMgU1NMIGVuZ2luZQorI3NzbC5l
bmdpbmUgICAgICAgICAgICAgICAgID0gImVuYWJsZSIKKyNzc2wucGVtZmlsZSAgICAgICAgICAg
ICAgICA9ICJzZXJ2ZXIucGVtIgorCisjIFJld3JpdGUgcnVsZSBmb3IgdXRmLTggcGF0aCB0ZXN0
IChMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS91dGY4LXBhdGguaHRtbCkKKyMgU2VlIHRoZSBh
cGFjaGUgcmV3cml0ZSBydWxlIGF0IExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2ludGVyY2Vw
dC8uaHRhY2Nlc3MKKyMgUmV3cml0ZSBydWxlIGZvciBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Fw
cGNhY2hlL2N5cmlsbGljLXVyaS5odG1sLgorIyBTZWUgdGhlIGFwYWNoZSByZXdyaXRlIHJ1bGUg
YXQKKyMgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvaW50ZXJjZXB0
Ly5odGFjY2VzcwordXJsLnJld3JpdGUtb25jZSA9ICgKKyAgIl4vdXJpL2ludGVyY2VwdC8oLiop
IiA9PiAiL3VyaS9yZXNvdXJjZXMvcHJpbnQtdXJpLnBocCIsCisgICJeL2FwcGNhY2hlL3Jlc291
cmNlcy9pbnRlcmNlcHQvKC4qKSIgPT4gIi9hcHBjYWNoZS9yZXNvdXJjZXMvcHJpbnQtdXJpLnBo
cCIKKykKKworIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc3BvbnNl
LWVuY29kaW5nLmh0bWwgdXNlcyBhbiBodGFjY2VzcworIyB0byBvdmVycmlkZSBjaGFyc2V0IGZv
ciByZXBseTIudHh0LCByZXBseTIueG1sLCBhbmQgcmVwbHk0LnR4dC4KKyRIVFRQWyJ1cmwiXSA9
fiAiXi94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVwbHkyLih0eHR8eG1sKSIgeworICBtaW1l
dHlwZS5hc3NpZ24gPSAoCisgICAgIi50eHQiID0+ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXdpbmRv
d3MtMTI1MSIsCisgICAgIi54bWwiID0+ICJ0ZXh0L3htbDsgY2hhcnNldD13aW5kb3dzLTEyNTEi
CisgICkKK30KKyRIVFRQWyJ1cmwiXSA9fiAiXi94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVw
bHk0LnR4dCIgeworICBtaW1ldHlwZS5hc3NpZ24gPSAoICIudHh0IiA9PiAidGV4dC9wbGFpbjsg
Y2hhcnNldD1rb2k4LXIiICkKK30KKworIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hl
L3dyb25nLWNvbnRlbnQtdHlwZS5odG1sIHVzZXMgYW4gaHRhY2Nlc3MKKyMgdG8gb3ZlcnJpZGUg
bWltZSB0eXBlIGZvciB3cm9uZy1jb250ZW50LXR5cGUubWFuaWZlc3QuCiskSFRUUFsidXJsIl0g
PX4gIl4vYXBwY2FjaGUvcmVzb3VyY2VzL3dyb25nLWNvbnRlbnQtdHlwZS5tYW5pZmVzdCIgewor
ICBtaW1ldHlwZS5hc3NpZ24gPSAoICIubWFuaWZlc3QiID0+ICJ0ZXh0L3BsYWluIiApCit9CisK
KyMgQXV0b2dlbmVyYXRlZCB0ZXN0LXNwZWNpZmljIGNvbmZpZyBmb2xsb3dzLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvbWV0ZXJlZF9zdHJlYW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41NzUyMDllCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9z
dHJlYW0ucHkKQEAgLTAsMCArMSw3MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisiIiIKK1Bh
Y2thZ2UgdGhhdCBpbXBsZW1lbnRzIGEgc3RyZWFtIHdyYXBwZXIgdGhhdCBoYXMgJ21ldGVycycg
YXMgd2VsbCBhcworcmVndWxhciBvdXRwdXQuIEEgJ21ldGVyJyBpcyBhIHNpbmdsZSBsaW5lIG9m
IHRleHQgdGhhdCBjYW4gYmUgZXJhc2VkCithbmQgcmV3cml0dGVuIHJlcGVhdGVkbHksIHdpdGhv
dXQgcHJvZHVjaW5nIG11bHRpcGxlIGxpbmVzIG9mIG91dHB1dC4gSXQKK2NhbiBiZSB1c2VkIHRv
IHByb2R1Y2UgZWZmZWN0cyBsaWtlIHByb2dyZXNzIGJhcnMuCisiIiIKKworCitjbGFzcyBNZXRl
cmVkU3RyZWFtOgorICAgICIiIlRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN0cmVh
bSB0aGF0IGFsbG93cyB5b3UgdG8gaW1wbGVtZW50CisgICAgbWV0ZXJzLgorCisgICAgSXQgY2Fu
IGJlIHVzZWQgbGlrZSBhIHN0cmVhbSwgYnV0IGNhbGxpbmcgdXBkYXRlKCkgd2lsbCBwcmludAor
ICAgIHRoZSBzdHJpbmcgZm9sbG93ZWQgYnkgb25seSBhIGNhcnJpYWdlIHJldHVybiAoaW5zdGVh
ZCBvZiBhIGNhcnJpYWdlCisgICAgcmV0dXJuIGFuZCBhIGxpbmUgZmVlZCkuIFRoaXMgY2FuIGJl
IHVzZWQgdG8gaW1wbGVtZW50IHByb2dyZXNzIGJhcnMgYW5kCisgICAgb3RoZXIgc29ydHMgb2Yg
bWV0ZXJzLiBOb3RlIHRoYXQgYW55dGhpbmcgd3JpdHRlbiBieSB1cGRhdGUoKSB3aWxsIGJlCisg
ICAgZXJhc2VkIGJ5IGEgc3Vic2VxdWVudCB1cGRhdGUoKSwgd3JpdGUoKSwgb3IgZmx1c2goKS4i
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJib3NlLCBzdHJlYW0pOgorICAgICAgICAi
IiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB2ZXJib3NlOiB3aGV0aGVyIHVwZGF0ZSBpcyBh
IG5vLW9wCisgICAgICAgICAgc3RyZWFtOiBvdXRwdXQgc3RyZWFtIHRvIHdyaXRlIHRvCisgICAg
ICAgICIiIgorICAgICAgICBzZWxmLl9kaXJ0eSA9IEZhbHNlCisgICAgICAgIHNlbGYuX3ZlcmJv
c2UgPSB2ZXJib3NlCisgICAgICAgIHNlbGYuX3N0cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxm
Ll9sYXN0X3VwZGF0ZSA9ICIiCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdHh0KToKKyAgICAgICAg
IiIiV3JpdGUgdGV4dCBkaXJlY3RseSB0byB0aGUgc3RyZWFtLCBvdmVyd3JpdGluZyBhbmQgcmVz
ZXR0aW5nIHRoZQorICAgICAgICBtZXRlci4iIiIKKyAgICAgICAgaWYgc2VsZi5fZGlydHk6Cisg
ICAgICAgICAgICBzZWxmLnVwZGF0ZSgiIikKKyAgICAgICAgICAgIHNlbGYuX2RpcnR5ID0gRmFs
c2UKKyAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHR4dCkKKworICAgIGRlZiBmbHVzaChzZWxm
KToKKyAgICAgICAgIiIiRmx1c2ggYW55IGJ1ZmZlcmVkIG91dHB1dC4iIiIKKyAgICAgICAgc2Vs
Zi5fc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgc3RyKToKKyAgICAgICAg
IiIiV3JpdGUgYW4gdXBkYXRlIHRvIHRoZSBzdHJlYW0gdGhhdCB3aWxsIGdldCBvdmVyd3JpdHRl
biBieSB0aGUgbmV4dAorICAgICAgICB1cGRhdGUoKSBvciBieSBhIHdyaXRlKCkuCisKKyAgICAg
ICAgVGhpcyBpcyB1c2VkIGZvciBwcm9ncmVzcyB1cGRhdGVzIHRoYXQgZG9uJ3QgbmVlZCB0byBi
ZSBwcmVzZXJ2ZWQgaW4KKyAgICAgICAgdGhlIGxvZy4gTm90ZSB0aGF0IHZlcmJvc2UgZGlzYWJs
ZXMgdGhpcyByb3V0aW5lOyB3ZSBoYXZlIHRoaXMgaW4KKyAgICAgICAgY2FzZSB3ZSBhcmUgbG9n
Z2luZyBsb3RzIG9mIG91dHB1dCBhbmQgdGhlIHVwZGF0ZSgpcyB3aWxsIGdldCBsb3N0CisgICAg
ICAgIG9yIHdvbid0IHdvcmsgcHJvcGVybHkgKHR5cGljYWxseSBiZWNhdXNlIHZlcmJvc2Ugc3Ry
ZWFtcyBhcmUKKyAgICAgICAgcmVkaXJlY3RlZCB0byBmaWxlcy4KKworICAgICAgICBUT0RPKGRw
cmFua2UpOiBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgd2F5IHRvIGRldGVjdCBpZiB3ZSdyZSB3
cml0aW5nCisgICAgICAgIHRvIGEgc3RyZWFtIHRoYXQgaGFuZGxlcyBDUnMgY29ycmVjdGx5IChl
LmcuLCB0ZXJtaW5hbHMpLiBUaGF0IG1pZ2h0CisgICAgICAgIGJlIGEgY2xlYW5lciB3YXkgb2Yg
aGFuZGxpbmcgdGhpcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3ZlcmJvc2U6Cisg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFByaW50IHRoZSBuZWNlc3NhcnkgbnVtYmVy
IG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHByZXZpb3VzCisgICAgICAgICMgbWVzc2FnZS4K
KyAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBsZW4oc2VsZi5fbGFzdF91cGRhdGUp
KQorICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc3RyKQorICAgICAgICBudW1fcmVtYWluaW5n
ID0gbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSAtIGxlbihzdHIpCisgICAgICAgIGlmIG51bV9yZW1h
aW5pbmcgPiAwOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCIgIiAqIG51bV9yZW1h
aW5pbmcgKyAiXGIiICogbnVtX3JlbWFpbmluZykKKyAgICAgICAgc2VsZi5fbGFzdF91cGRhdGUg
PSBzdHIKKyAgICAgICAgc2VsZi5fZGlydHkgPSBUcnVlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wYXRoX3V0aWxz
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvcGF0aF91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
NmVlZDYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGF0aF91dGlscy5weQpAQCAtMCwwICsxLDM3MCBA
QAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorCisiIiJUaGlzIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBtYW5p
cHVsYXRpbmcgcGF0aHMgYW5kCitmaWxlbmFtZXMgZm9yIHRlc3QgcmVzdWx0cyBhbmQgYmFzZWxp
bmVzLiBJdCBhbHNvIGNvbnRhaW5zIHdyYXBwZXJzCitvZiBhIGZldyByb3V0aW5lcyBpbiBwbGF0
Zm9ybV91dGlscy5weSBzbyB0aGF0IHBsYXRmb3JtX3V0aWxzLnB5IGNhbgorYmUgY29uc2lkZXJl
ZCBhICdwcm90ZWN0ZWQnIHBhY2thZ2UgLSBpLmUuLCB0aGlzIGZpbGUgc2hvdWxkIGJlCit0aGUg
b25seSBmaWxlIHRoYXQgZXZlciBpbmNsdWRlcyBwbGF0Zm9ybV91dGlscy4gVGhpcyBsZWFkcyB0
bwordXMgaW5jbHVkaW5nIGEgZmV3IHRoaW5ncyB0aGF0IGRvbid0IHJlYWxseSBoYXZlIGFueXRo
aW5nIHRvIGRvCisgd2l0aCBwYXRocywgdW5mb3J0dW5hdGVseS4iIiIKKworaW1wb3J0IGVycm5v
CitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0Zm9ybV91
dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxzX3dpbgoraW1wb3J0IHBsYXRmb3JtX3V0aWxzX21h
YworaW1wb3J0IHBsYXRmb3JtX3V0aWxzX2xpbnV4CisKKyMgQ2FjaGUgc29tZSB2YWx1ZXMgc28g
d2UgZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGVtLiBfYmFzZWRpciBpcworIyB1c2VkIGJ5
IFBhdGhGcm9tQmFzZSgpIGFuZCBjYWNoZXMgdGhlIGZ1bGwgKG5hdGl2ZSkgcGF0aCB0byB0aGUg
dG9wCisjIG9mIHRoZSBzb3VyY2UgdHJlZSAoL3NyYykuIF9iYXNlbGluZV9zZWFyY2hfcGF0aCBp
cyB1c2VkIGJ5CisjIEV4cGVjdGVkQmFzZWxpbmVzKCkgYW5kIGNhY2hlcyB0aGUgbGlzdCBvZiBu
YXRpdmUgcGF0aHMgdG8gc2VhcmNoCisjIGZvciBiYXNlbGluZSByZXN1bHRzLgorX2Jhc2VkaXIg
PSBOb25lCitfYmFzZWxpbmVfc2VhcmNoX3BhdGggPSBOb25lCisKKworY2xhc3MgUGF0aE5vdEZv
dW5kKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2RlZiBMYXlvdXRUZXN0c0RpcigpOgorICAg
ICIiIlJldHVybnMgdGhlIGZ1bGx5LXF1YWxpZmllZCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29u
dGFpbmluZyB0aGUgaW5wdXQKKyAgICBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGxheW91dCB0ZXN0
LiIiIgorICAgIHJldHVybiBQYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdM
YXlvdXRUZXN0cycpCisKKworZGVmIENocm9taXVtQmFzZWxpbmVQYXRoKHBsYXRmb3JtPU5vbmUp
OgorICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5p
bmcgZXhwZWN0ZWQKKyAgICBiYXNlbGluZSByZXN1bHRzIGZyb20gY2hyb21pdW0gcG9ydHMuIElm
IHxwbGF0Zm9ybXwgaXMgTm9uZSwgdGhlCisgICAgY3VycmVudGx5IGV4ZWN1dGluZyBwbGF0Zm9y
bSBpcyB1c2VkLgorCisgICAgTm90ZTogYWx0aG91Z2ggZGlyZWN0bHkgcmVmZXJlbmNpbmcgaW5k
aXZpZHVhbCBwbGF0Zm9ybV91dGlsc18qIGZpbGVzIGlzCisgICAgdXN1YWxseSBkaXNjb3VyYWdl
ZCwgd2UgYWxsb3cgaXQgaGVyZSBzbyB0aGF0IHRoZSByZWJhc2VsaW5pbmcgdG9vbCBjYW4KKyAg
ICBwdWxsIGJhc2VsaW5lcyBmb3IgcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIGhvc3QgcGxhdGZv
cm0uIiIiCisKKyAgICAjIE5vcm1hbGl6ZSB0aGUgcGxhdGZvcm0gc3RyaW5nLgorICAgIHBsYXRm
b3JtID0gUGxhdGZvcm1OYW1lKHBsYXRmb3JtKQorICAgIGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgo
J2Nocm9taXVtLW1hYycpOgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbWFjLkJhc2Vs
aW5lUGF0aChwbGF0Zm9ybSkKKyAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVt
LXdpbicpOgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfd2luLkJhc2VsaW5lUGF0aChw
bGF0Zm9ybSkKKyAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWxpbnV4Jyk6
CisgICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc19saW51eC5CYXNlbGluZVBhdGgocGxhdGZv
cm0pCisKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuQmFzZWxpbmVQYXRoKCkKKworCitkZWYg
V2ViS2l0QmFzZWxpbmVQYXRoKHBsYXRmb3JtKToKKyAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBh
dGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGV4cGVjdGVkCisgICAgYmFzZWxpbmUgcmVz
dWx0cyBmcm9tIFdlYktpdCBwb3J0cy4iIiIKKyAgICByZXR1cm4gUGF0aEZyb21CYXNlKCd0aGly
ZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0pCisKKworZGVmIEJhc2VsaW5lU2VhcmNoUGF0aChwbGF0
Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNl
YXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMgZm9yIGEKKyAgICBnaXZlbiBwbGF0Zm9ybSwgaW4g
b3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YKKyAg
ICB0aGUgc291cmNlIHRyZWUuIElmIHBhcmFtZXRlciBwbGF0Zm9ybSBpcyBOb25lLCByZXR1cm5z
IHRoZSBsaXN0IGZvciB0aGUKKyAgICBjdXJyZW50IHBsYXRmb3JtIHRoYXQgdGhlIHNjcmlwdCBp
cyBydW5uaW5nIG9uLgorCisgICAgTm90ZTogYWx0aG91Z2ggZGlyZWN0bHkgcmVmZXJlbmNpbmcg
aW5kaXZpZHVhbCBwbGF0Zm9ybV91dGlsc18qIGZpbGVzIGlzCisgICAgdXN1YWxseSBkaXNjb3Vy
YWdlZCwgd2UgYWxsb3cgaXQgaGVyZSBzbyB0aGF0IHRoZSByZWJhc2VsaW5pbmcgdG9vbCBjYW4K
KyAgICBwdWxsIGJhc2VsaW5lcyBmb3IgcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIGhvc3QgcGxh
dGZvcm0uIiIiCisKKyAgICAjIE5vcm1hbGl6ZSB0aGUgcGxhdGZvcm0gbmFtZS4KKyAgICBwbGF0
Zm9ybSA9IFBsYXRmb3JtTmFtZShwbGF0Zm9ybSkKKyAgICBpZiBwbGF0Zm9ybS5zdGFydHN3aXRo
KCdjaHJvbWl1bS1tYWMnKToKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX21hYy5CYXNl
bGluZVNlYXJjaFBhdGgocGxhdGZvcm0pCisgICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdj
aHJvbWl1bS13aW4nKToKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX3dpbi5CYXNlbGlu
ZVNlYXJjaFBhdGgocGxhdGZvcm0pCisgICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJv
bWl1bS1saW51eCcpOgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbGludXguQmFzZWxp
bmVTZWFyY2hQYXRoKHBsYXRmb3JtKQorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5CYXNlbGlu
ZVNlYXJjaFBhdGgoKQorCisKK2RlZiBFeHBlY3RlZEJhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4
LCBwbGF0Zm9ybT1Ob25lLCBhbGxfYmFzZWxpbmVzPUZhbHNlKToKKyAgICAiIiJHaXZlbiBhIHRl
c3QgbmFtZSwgZmluZHMgd2hlcmUgdGhlIGJhc2VsaW5lIHJlc3VsdHMgYXJlIGxvY2F0ZWQuCisK
KyAgICBBcmdzOgorICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZp
bGUKKyAgICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBp
bmNsdWRpbmcgZG90OyBlLmcuICcudHh0JworICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNo
b3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgcGxh
dGZvcm06IGxheW91dCB0ZXN0IHBsYXRmb3JtOiAnd2luJywgJ2xpbnV4JyBvciAnbWFjJy4gRGVm
YXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisgICAgICAg
YWxsX2Jhc2VsaW5lczogSWYgVHJ1ZSwgcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiBhbGwgYmFz
ZWxpbmUgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGdpdmVuIHBsYXRmb3Jt
LiBJZiBGYWxzZSwgcmV0dXJuIG9ubHkgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAg
b25lLgorICAgIFJldHVybnMKKyAgICAgICBhIGxpc3Qgb2YgKCBwbGF0Zm9ybV9kaXIsIHJlc3Vs
dHNfZmlsZW5hbWUgKSwgd2hlcmUKKyAgICAgICAgIHBsYXRmb3JtX2RpciAtIGFicyBwYXRoIHRv
IHRoZSB0b3Agb2YgdGhlIHJlc3VsdHMgdHJlZSAob3IgdGVzdCB0cmVlKQorICAgICAgICAgcmVz
dWx0c19maWxlbmFtZSAtIHJlbGF0aXZlIHBhdGggZnJvbSB0b3Agb2YgdHJlZSB0byB0aGUgcmVz
dWx0cyBmaWxlCisgICAgICAgICAgIChvcy5wYXRoLmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3Ug
dGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSwKKyAgICAgICAgICAgIHVubGVzcyBOb25lIHdhcyBy
ZXR1cm5lZC4pCisgICAgICBSZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBhcHBy
b3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0KKyAgICAgIChlLmcuLCAiXFwiIGZvciBw
YXRoIHNlcGFyYXRvcnMgb24gV2luZG93cykuIElmIHRoZSByZXN1bHRzIGZpbGUgaXMgbm90Cisg
ICAgICBmb3VuZCwgdGhlbiBOb25lIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHRoZSBkaXJlY3Rvcnks
IGJ1dCB0aGUgZXhwZWN0ZWQKKyAgICAgIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwgc3RpbGwgYmUg
cmV0dXJuZWQuCisgICAgIiIiCisgICAgZ2xvYmFsIF9iYXNlbGluZV9zZWFyY2hfcGF0aAorICAg
IGdsb2JhbCBfc2VhcmNoX3BhdGhfcGxhdGZvcm0KKyAgICB0ZXN0bmFtZSA9IG9zLnBhdGguc3Bs
aXRleHQoUmVsYXRpdmVUZXN0RmlsZW5hbWUoZmlsZW5hbWUpKVswXQorCisgICAgYmFzZWxpbmVf
ZmlsZW5hbWUgPSB0ZXN0bmFtZSArICctZXhwZWN0ZWQnICsgc3VmZml4CisKKyAgICBpZiAoX2Jh
c2VsaW5lX3NlYXJjaF9wYXRoIGlzIE5vbmUpIG9yIChfc2VhcmNoX3BhdGhfcGxhdGZvcm0gIT0g
cGxhdGZvcm0pOgorICAgICAgICBfYmFzZWxpbmVfc2VhcmNoX3BhdGggPSBCYXNlbGluZVNlYXJj
aFBhdGgocGxhdGZvcm0pCisgICAgICAgIF9zZWFyY2hfcGF0aF9wbGF0Zm9ybSA9IHBsYXRmb3Jt
CisKKyAgICBiYXNlbGluZXMgPSBbXQorICAgIGZvciBwbGF0Zm9ybV9kaXIgaW4gX2Jhc2VsaW5l
X3NlYXJjaF9wYXRoOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGxh
dGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgorICAgICAgICAgICAgYmFzZWxpbmVzLmFw
cGVuZCgocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCisKKyAgICAgICAgaWYgbm90
IGFsbF9iYXNlbGluZXMgYW5kIGJhc2VsaW5lczoKKyAgICAgICAgICAgIHJldHVybiBiYXNlbGlu
ZXMKKworICAgICMgSWYgaXQgd2Fzbid0IGZvdW5kIGluIGEgcGxhdGZvcm0gZGlyZWN0b3J5LCBy
ZXR1cm4gdGhlIGV4cGVjdGVkIHJlc3VsdAorICAgICMgaW4gdGhlIHRlc3QgZGlyZWN0b3J5LCBl
dmVuIGlmIG5vIHN1Y2ggZmlsZSBhY3R1YWxseSBleGlzdHMuCisgICAgcGxhdGZvcm1fZGlyID0g
TGF5b3V0VGVzdHNEaXIoKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0
Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6CisgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQo
KHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQorCisgICAgaWYgYmFzZWxpbmVzOgor
ICAgICAgICByZXR1cm4gYmFzZWxpbmVzCisKKyAgICByZXR1cm4gWyhOb25lLCBiYXNlbGluZV9m
aWxlbmFtZSldCisKKworZGVmIEV4cGVjdGVkRmlsZW5hbWUoZmlsZW5hbWUsIHN1ZmZpeCk6Cisg
ICAgIiIiR2l2ZW4gYSB0ZXN0IG5hbWUsIHJldHVybnMgYW4gYWJzb2x1dGUgcGF0aCB0byBpdHMg
ZXhwZWN0ZWQgcmVzdWx0cy4KKworICAgIElmIG5vIGV4cGVjdGVkIHJlc3VsdHMgYXJlIGZvdW5k
IGluIGFueSBvZiB0aGUgc2VhcmNoZWQgZGlyZWN0b3JpZXMsIHRoZQorICAgIGRpcmVjdG9yeSBp
biB3aGljaCB0aGUgdGVzdCBpdHNlbGYgaXMgbG9jYXRlZCB3aWxsIGJlIHJldHVybmVkLiBUaGUg
cmV0dXJuCisgICAgdmFsdWUgaXMgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHBs
YXRmb3JtIChlLmcuLCAiXFwiIGZvcgorICAgIHBhdGggc2VwYXJhdG9ycyBvbiB3aW5kb3dzKS4K
KworICAgIEFyZ3M6CisgICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRlc3Qg
ZmlsZQorICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMs
IGluY2x1ZGluZyBkb3Q7IGUuZy4gJy50eHQnCisgICAgICAgICAgIG9yICcucG5nJy4gIFRoaXMg
c2hvdWxkIG5vdCBiZSBOb25lLCBidXQgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICBw
bGF0Zm9ybTogdGhlIG1vc3Qtc3BlY2lmaWMgZGlyZWN0b3J5IG5hbWUgdG8gdXNlIHRvIGJ1aWxk
IHRoZQorICAgICAgICAgICBzZWFyY2ggbGlzdCBvZiBkaXJlY3RvcmllcywgZS5nLiwgJ2Nocm9t
aXVtLXdpbicsIG9yCisgICAgICAgICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCcgKHdlIGZvbGxv
dyB0aGUgV2ViS2l0IGZvcm1hdCkKKyAgICAiIiIKKyAgICBwbGF0Zm9ybV9kaXIsIGJhc2VsaW5l
X2ZpbGVuYW1lID0gRXhwZWN0ZWRCYXNlbGluZXMoZmlsZW5hbWUsIHN1ZmZpeClbMF0KKyAgICBp
ZiBwbGF0Zm9ybV9kaXI6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGly
LCBiYXNlbGluZV9maWxlbmFtZSkKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKExheW91dFRlc3Rz
RGlyKCksIGJhc2VsaW5lX2ZpbGVuYW1lKQorCisKK2RlZiBSZWxhdGl2ZVRlc3RGaWxlbmFtZShm
aWxlbmFtZSk6CisgICAgIiIiUHJvdmlkZSB0aGUgZmlsZW5hbWUgb2YgdGhlIHRlc3QgcmVsYXRp
dmUgdG8gdGhlIGxheW91dCB0ZXN0cworICAgIGRpcmVjdG9yeSBhcyBhIHVuaXggc3R5bGUgcGF0
aCAoYS9iL2MpLiIiIgorICAgIHJldHVybiBfV2luUGF0aFRvVW5peChmaWxlbmFtZVtsZW4oTGF5
b3V0VGVzdHNEaXIoKSkgKyAxOl0pCisKKworZGVmIF9XaW5QYXRoVG9Vbml4KHBhdGgpOgorICAg
ICIiIkNvbnZlcnQgYSB3aW5kb3dzIHBhdGggdG8gdXNlIHVuaXgtc3R5bGUgcGF0aCBzZXBhcmF0
b3JzIChhL2IvYykuIiIiCisgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisKKyMK
KyMgUm91dGluZXMgdGhhdCBhcmUgYXJndWFibHkgcGxhdGZvcm0tc3BlY2lmaWMgYnV0IGhhdmUg
YmVlbiBtYWRlCisjIGdlbmVyaWMgZm9yIG5vdyAodGhleSB1c2VkIHRvIGJlIGluIHBsYXRmb3Jt
X3V0aWxzXyopCisjCisKKworZGVmIEZpbGVuYW1lVG9VcmkoZnVsbF9wYXRoKToKKyAgICAiIiJD
b252ZXJ0IGEgdGVzdCBmaWxlIHRvIGEgVVJJLiIiIgorICAgIExBWU9VVFRFU1RfSFRUUF9ESVIg
PSAiaHR0cC90ZXN0cy8iCisgICAgTEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSID0gIndlYnNvY2tl
dC90ZXN0cy8iCisKKyAgICByZWxhdGl2ZV9wYXRoID0gX1dpblBhdGhUb1VuaXgoUmVsYXRpdmVU
ZXN0RmlsZW5hbWUoZnVsbF9wYXRoKSkKKyAgICBwb3J0ID0gTm9uZQorICAgIHVzZV9zc2wgPSBG
YWxzZQorCisgICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1RfSFRUUF9E
SVIpOgorICAgICAgICAjIGh0dHAvdGVzdHMvIHJ1biBvZmYgcG9ydCA4MDAwIGFuZCBzc2wvIG9m
ZiA4NDQzCisgICAgICAgIHJlbGF0aXZlX3BhdGggPSByZWxhdGl2ZV9wYXRoW2xlbihMQVlPVVRU
RVNUX0hUVFBfRElSKTpdCisgICAgICAgIHBvcnQgPSA4MDAwCisgICAgZWxpZiByZWxhdGl2ZV9w
YXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSKToKKyAgICAgICAgIyB3ZWJz
b2NrZXQvdGVzdHMvIHJ1biBvZmYgcG9ydCA4ODgwIGFuZCA5MzIzCisgICAgICAgICMgTm90ZTog
dGhlIHJvb3QgaXMgLywgbm90IHdlYnNvY2tldC90ZXN0cy8KKyAgICAgICAgcG9ydCA9IDg4ODAK
KworICAgICMgTWFrZSBodHRwL3Rlc3RzL2xvY2FsIHJ1biBhcyBsb2NhbCBmaWxlcy4gVGhpcyBp
cyB0byBtaW1pYyB0aGUKKyAgICAjIGxvZ2ljIGluIHJ1bi13ZWJraXQtdGVzdHMuCisgICAgIyBU
T0RPKGppYW5saSk6IENvbnNpZGVyIGV4dGVuZGluZyB0aGlzIHRvICJtZWRpYS8iLgorICAgIGlm
IHBvcnQgYW5kIG5vdCByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoImxvY2FsLyIpOgorICAgICAg
ICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoInNzbC8iKToKKyAgICAgICAgICAgIHBvcnQg
Kz0gNDQzCisgICAgICAgICAgICBwcm90b2NvbCA9ICJodHRwcyIKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHByb3RvY29sID0gImh0dHAiCisgICAgICAgIHJldHVybiAiJXM6Ly8xMjcuMC4w
LjE6JXUvJXMiICUgKHByb3RvY29sLCBwb3J0LCByZWxhdGl2ZV9wYXRoKQorCisgICAgaWYgc3lz
LnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgIHJldHVybiAiZmlsZTov
Ly8iICsgR2V0QWJzb2x1dGVQYXRoKGZ1bGxfcGF0aCkKKyAgICByZXR1cm4gImZpbGU6Ly8iICsg
R2V0QWJzb2x1dGVQYXRoKGZ1bGxfcGF0aCkKKworCitkZWYgR2V0QWJzb2x1dGVQYXRoKHBhdGgp
OgorICAgICIiIlJldHVybnMgYW4gYWJzb2x1dGUgVU5JWCBwYXRoLiIiIgorICAgIHJldHVybiBf
V2luUGF0aFRvVW5peChvcy5wYXRoLmFic3BhdGgocGF0aCkpCisKKworZGVmIE1heWJlTWFrZURp
cmVjdG9yeSgqcGF0aCk6CisgICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBp
ZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuIiIiCisgICAgdHJ5OgorICAgICAgICBvcy5tYWtl
ZGlycyhvcy5wYXRoLmpvaW4oKnBhdGgpKQorICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAg
ICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlCisKKworZGVm
IFBhdGhGcm9tQmFzZSgqY29tcHMpOgorICAgICIiIlJldHVybnMgYW4gYWJzb2x1dGUgZmlsZW5h
bWUgZnJvbSBhIHNldCBvZiBjb21wb25lbnRzIHNwZWNpZmllZAorICAgIHJlbGF0aXZlIHRvIHRo
ZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdCwKKyAg
ICB0aGUgZXhjZXB0aW9uIFBhdGhOb3RGb3VuZCBpcyByYWlzZWQuIiIiCisgICAgZ2xvYmFsIF9i
YXNlZGlyCisgICAgaWYgX2Jhc2VkaXIgPT0gTm9uZToKKyAgICAgICAgIyBXZSBjb21wdXRlIHRo
ZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGJ5IGZpbmRpbmcgdGhlIGFic29sdXRlCisgICAgICAg
ICMgcGF0aCBvZiB0aGlzIHNvdXJjZSBmaWxlLCBhbmQgdGhlbiBjbGltYmluZyB1cCB0aHJlZSBk
aXJlY3RvcmllcworICAgICAgICAjIGFzIGdpdmVuIGluIHN1YnBhdGguIElmIHdlIG1vdmUgdGhp
cyBmaWxlLCBzdWJwYXRoIG5lZWRzIHRvIGJlCisgICAgICAgICMgdXBkYXRlZC4KKyAgICAgICAg
cGF0aCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgc3VicGF0aCA9IG9zLnBh
dGguam9pbigndGhpcmRfcGFydHknLCAnV2ViS2l0JykKKyAgICAgICAgX2Jhc2VkaXIgPSBwYXRo
WzpwYXRoLmluZGV4KHN1YnBhdGgpXQorICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oX2Jhc2VkaXIs
ICpjb21wcykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgIHJhaXNl
IFBhdGhOb3RGb3VuZCgnY291bGQgbm90IGZpbmQgJXMnICUgKHBhdGgpKQorICAgIHJldHVybiBw
YXRoCisKKworZGVmIFJlbW92ZURpcmVjdG9yeSgqcGF0aCk6CisgICAgIiIiUmVjdXJzaXZlbHkg
cmVtb3ZlcyBhIGRpcmVjdG9yeSwgZXZlbiBpZiBpdCdzIG1hcmtlZCByZWFkLW9ubHkuCisKKyAg
ICBSZW1vdmUgdGhlIGRpcmVjdG9yeSBsb2NhdGVkIGF0ICpwYXRoLCBpZiBpdCBleGlzdHMuCisK
KyAgICBzaHV0aWwucm10cmVlKCkgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgaWYgYW55IG9mIHRo
ZSBmaWxlcyBvciBkaXJlY3RvcmllcworICAgIGFyZSByZWFkLW9ubHksIHdoaWNoIHN2biByZXBv
c2l0b3JpZXMgYW5kIHNvbWUgLnN2biBmaWxlcyBhcmUuICBXZSBuZWVkIHRvCisgICAgYmUgYWJs
ZSB0byBmb3JjZSB0aGUgZmlsZXMgdG8gYmUgd3JpdGFibGUgKGkuZS4sIGRlbGV0YWJsZSkgYXMg
d2UgdHJhdmVyc2UKKyAgICB0aGUgdHJlZS4KKworICAgIEV2ZW4gd2l0aCBhbGwgdGhpcywgV2lu
ZG93cyBzdGlsbCBzb21ldGltZXMgZmFpbHMgdG8gZGVsZXRlIGEgZmlsZSwgY2l0aW5nCisgICAg
YSBwZXJtaXNzaW9uIGVycm9yIChtYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBhbnRpdmlydXMg
c2NhbnMgb3IgZGlzaworICAgIGluZGV4aW5nKS4gIFRoZSBiZXN0IHN1Z2dlc3Rpb24gYW55IG9m
IHRoZSB1c2VyIGZvcnVtcyBoYWQgd2FzIHRvIHdhaXQgYQorICAgIGJpdCBhbmQgdHJ5IGFnYWlu
LCBzbyB3ZSBkbyB0aGF0IHRvby4gIEl0J3MgaGFuZC13YXZpbmcsIGJ1dCBzb21ldGltZXMgaXQK
KyAgICB3b3Jrcy4gOi8KKyAgICAiIiIKKyAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oKnBh
dGgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6CisgICAgICAgIHJldHVy
bgorCisgICAgd2luMzIgPSBGYWxzZQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgor
ICAgICAgICB3aW4zMiA9IFRydWUKKyAgICAgICAgIyBTb21lIHBlb3BsZSBkb24ndCBoYXZlIHRo
ZSBBUElzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlJ2xsIGRvCisgICAgICAgICMgd2l0aG91
dC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2luMzJhcGkgPSBfX2ltcG9ydF9fKCd3aW4z
MmFwaScpCisgICAgICAgICAgICB3aW4zMmNvbiA9IF9faW1wb3J0X18oJ3dpbjMyY29uJykKKyAg
ICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgd2luMzIgPSBGYWxzZQorCisg
ICAgICAgIGRlZiByZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgorICAgICAgICAgICAg
b3MuY2htb2QocGF0aCwgc3RhdC5TX0lXUklURSkKKyAgICAgICAgICAgIGlmIHdpbjMyOgorICAg
ICAgICAgICAgICAgIHdpbjMyYXBpLlNldEZpbGVBdHRyaWJ1dGVzKHBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luMzJjb24uRklMRV9BVFRSSUJVVEVf
Tk9STUFMKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMo
cGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgorICAgICAgICAg
ICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFDQ0VTOgorICAgICAgICAgICAgICAgICAgICBy
YWlzZQorICAgICAgICAgICAgICAgIHByaW50ICdGYWlsZWQgdG8gZGVsZXRlICVzOiB0cnlpbmcg
YWdhaW4nICUgcmVwcihwYXRoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAg
ICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKyAgICBlbHNlOgorCisgICAgICAgIGRl
ZiByZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgorICAgICAgICAgICAgaWYgb3MucGF0
aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnJlbW92ZShwYXRoKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCisK
KyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhmaWxlX3BhdGgsIHRvcGRvd249
RmFsc2UpOgorICAgICAgICAjIEZvciBQT1NJWDogIG1ha2luZyB0aGUgZGlyZWN0b3J5IHdyaXRh
YmxlIGd1YXJhbnRlZXMgcmVtb3ZhYmlsaXR5LgorICAgICAgICAjIFdpbmRvd3Mgd2lsbCBpZ25v
cmUgdGhlIG5vbi1yZWFkLW9ubHkgYml0cyBpbiB0aGUgY2htb2QgdmFsdWUuCisgICAgICAgIG9z
LmNobW9kKHJvb3QsIDA3NzApCisgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAg
ICAgcmVtb3ZlX3dpdGhfcmV0cnkob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkp
CisgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRy
eShvcy5ybWRpciwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorCisgICAgcmVtb3ZlX3dpdGhf
cmV0cnkob3Mucm1kaXIsIGZpbGVfcGF0aCkKKworIworIyBXcmFwcGVycyBhcm91bmQgcGxhdGZv
cm1fdXRpbHMKKyMKKworCitkZWYgUGxhdGZvcm1OYW1lKHBsYXRmb3JtPU5vbmUpOgorICAgICIi
IlJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNocm9taXVtIHBsYXRmb3JtIG5hbWUgZm9yIHxwbGF0
Zm9ybXwuIElmCisgICAgICAgfHBsYXRmb3JtfCBpcyBOb25lLCByZXR1cm5zIHRoZSBuYW1lIG9m
IHRoZSBjaHJvbWl1bSBwbGF0Zm9ybSBvbiB0aGUKKyAgICAgICBjdXJyZW50bHkgcnVubmluZyBz
eXN0ZW0uIElmIHxwbGF0Zm9ybXwgaXMgb2YgdGhlIGZvcm0gJ2Nocm9taXVtLSonLAorICAgICAg
IGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZCwgb3RoZXJ3aXNlICdjaHJvbWl1bS0nIGlzIHByZXBl
bmRlZC4iIiIKKyAgICBpZiBwbGF0Zm9ybSA9PSBOb25lOgorICAgICAgICByZXR1cm4gcGxhdGZv
cm1fdXRpbHMuUGxhdGZvcm1OYW1lKCkKKyAgICBpZiBub3QgcGxhdGZvcm0uc3RhcnRzd2l0aCgn
Y2hyb21pdW0tJyk6CisgICAgICAgIHBsYXRmb3JtID0gImNocm9taXVtLSIgKyBwbGF0Zm9ybQor
ICAgIHJldHVybiBwbGF0Zm9ybQorCisKK2RlZiBQbGF0Zm9ybVZlcnNpb24oKToKKyAgICByZXR1
cm4gcGxhdGZvcm1fdXRpbHMuUGxhdGZvcm1WZXJzaW9uKCkKKworCitkZWYgTGlnSFRUUGRFeGVj
dXRhYmxlUGF0aCgpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5MaWdIVFRQZEV4ZWN1dGFi
bGVQYXRoKCkKKworCitkZWYgTGlnSFRUUGRNb2R1bGVQYXRoKCk6CisgICAgcmV0dXJuIHBsYXRm
b3JtX3V0aWxzLkxpZ0hUVFBkTW9kdWxlUGF0aCgpCisKKworZGVmIExpZ0hUVFBkUEhQUGF0aCgp
OgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5MaWdIVFRQZFBIUFBhdGgoKQorCisKK2RlZiBX
RGlmZlBhdGgoKToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuV0RpZmZQYXRoKCkKKworCitk
ZWYgVGVzdFNoZWxsUGF0aCh0YXJnZXQpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5UZXN0
U2hlbGxQYXRoKHRhcmdldCkKKworCitkZWYgSW1hZ2VEaWZmUGF0aCh0YXJnZXQpOgorICAgIHJl
dHVybiBwbGF0Zm9ybV91dGlscy5JbWFnZURpZmZQYXRoKHRhcmdldCkKKworCitkZWYgTGF5b3V0
VGVzdEhlbHBlclBhdGgodGFyZ2V0KToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuTGF5b3V0
VGVzdEhlbHBlclBhdGgodGFyZ2V0KQorCisKK2RlZiBGdXp6eU1hdGNoUGF0aCgpOgorICAgIHJl
dHVybiBwbGF0Zm9ybV91dGlscy5GdXp6eU1hdGNoUGF0aCgpCisKKworZGVmIFNodXREb3duSFRU
UFNlcnZlcihzZXJ2ZXJfcGlkKToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuU2h1dERvd25I
VFRQU2VydmVyKHNlcnZlcl9waWQpCisKKworZGVmIEtpbGxBbGxUZXN0U2hlbGxzKCk6CisgICAg
cGxhdGZvcm1fdXRpbHMuS2lsbEFsbFRlc3RTaGVsbHMoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1f
dXRpbHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9wbGF0Zm9ybV91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wM2FmODNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHMucHkKQEAg
LTAsMCArMSwyNSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorCisiIiJQbGF0Zm9ybS1zcGVjaWZpYyB1dGlsaXRpZXMgYW5kIHBz
ZXVkby1jb25zdGFudHMKKworQW55IGZ1bmN0aW9ucyB3aG9zZSBpbXBsZW1lbnRhdGlvbnMgb3Ig
dmFsdWVzIGRpZmZlciBmcm9tIG9uZSBwbGF0Zm9ybSB0bworYW5vdGhlciBzaG91bGQgYmUgZGVm
aW5lZCBpbiB0aGVpciByZXNwZWN0aXZlIHBsYXRmb3JtX3V0aWxzXzxwbGF0Zm9ybT4ucHkKK21v
ZHVsZXMuIFRoZSBhcHByb3ByaWF0ZSBvbmUgb2YgdGhvc2Ugd2lsbCBiZSBpbXBvcnRlZCBpbnRv
IHRoaXMgbW9kdWxlIHRvCitwcm92aWRlIGNhbGxlcnMgd2l0aCBhIGNvbW1vbiwgcGxhdGZvcm0t
aW5kZXBlbmRlbnQgaW50ZXJmYWNlLgorCitUaGlzIGZpbGUgc2hvdWxkIG9ubHkgZXZlciBiZSBp
bXBvcnRlZCBieSBsYXlvdXRfcGFja2FnZS5wYXRoX3V0aWxzLgorIiIiCisKK2ltcG9ydCBzeXMK
KworIyBXZSBtYXkgbm90IHN1cHBvcnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgYSB1c2Vy
IGhhcyBpbnN0YWxsZWQgKEN5Z3dpbgorIyBlc3BlY2lhbGx5IGhhcyBoYWQgcHJvYmxlbXMpLCBi
dXQgd2UnbGwgYWxsb3cgdGhlIHBsYXRmb3JtIHV0aWxzIHRvIGJlCisjIGluY2x1ZGVkIGluIGFu
eSBjYXNlIHNvIHdlIGRvbid0IGdldCBhbiBpbXBvcnQgZXJyb3IuCitpZiBzeXMucGxhdGZvcm0g
aW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICBmcm9tIHBsYXRmb3JtX3V0aWxzX3dpbiBpbXBv
cnQgKgorZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgZnJvbSBwbGF0Zm9ybV91
dGlsc19tYWMgaW1wb3J0ICoKK2VsaWYgc3lzLnBsYXRmb3JtIGluICgnbGludXgnLCAnbGludXgy
JywgJ2ZyZWVic2Q3JywgJ29wZW5ic2Q0Jyk6CisgICAgZnJvbSBwbGF0Zm9ybV91dGlsc19saW51
eCBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9y
bV91dGlsc19saW51eC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE2
YmE0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkKQEAgLTAsMCAr
MSwyMjMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKworIiIiVGhpcyBpcyB0aGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhl
IGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCisgICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hv
dWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgorCitpbXBvcnQgb3MKK2lt
cG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2lu
ZworCitpbXBvcnQgcGF0aF91dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxzX3dpbgorCisKK2Rl
ZiBQbGF0Zm9ybU5hbWUoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9y
bSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKKyAgICByZXR1cm4gJ2Nocm9taXVtLWxp
bnV4JyArIFBsYXRmb3JtVmVyc2lvbigpCisKKworZGVmIFBsYXRmb3JtVmVyc2lvbigpOgorICAg
ICIiIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12
aXN0YScgb3IKKyAgICAnLXNub3dsZW9wYXJkJy4gSWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRp
c3Rpbmd1aXNoIGJldHdlZW4KKyAgICBtaW5vciB2ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIK
KyAgICByZXR1cm4gJycKKworCitkZWYgR2V0TnVtQ29yZXMoKToKKyAgICAiIiJSZXR1cm5zIHRo
ZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVkIG1hY2hp
bmVzLAorICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwgcHJvY2Vz
c29ycy4iIiIKKyAgICBudW1fY29yZXMgPSBvcy5zeXNjb25mKCJTQ19OUFJPQ0VTU09SU19PTkxO
IikKKyAgICBpZiBpc2luc3RhbmNlKG51bV9jb3JlcywgaW50KSBhbmQgbnVtX2NvcmVzID4gMDoK
KyAgICAgICAgcmV0dXJuIG51bV9jb3JlcworICAgIHJldHVybiAxCisKKworZGVmIEJhc2VsaW5l
UGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRv
IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGZvciB0aGUKKyAgICBiYXNlbGluZXMgZm9yIHRo
ZSBzcGVjaWZpZWQgcGxhdGZvcm0gdmVyc2lvbi4gSWYgfHBsYXRmb3JtfCBpcyBOb25lLAorICAg
IHRoZW4gdGhlIHZlcnNpb24gY3VycmVudGx5IGluIHVzZSBpcyB1c2VkLiIiIgorICAgIGlmIHBs
YXRmb3JtIGlzIE5vbmU6CisgICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm1OYW1lKCkKKyAgICBy
ZXR1cm4gcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90
ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBs
YXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorCisKK2RlZiBCYXNlbGluZVNlYXJjaFBhdGgocGxhdGZv
cm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFy
Y2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgorICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBh
dGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKKyAgICBy
ZXR1cm4gW0Jhc2VsaW5lUGF0aChwbGF0Zm9ybSksCisgICAgICAgICAgICBwbGF0Zm9ybV91dGls
c193aW4uQmFzZWxpbmVQYXRoKCdjaHJvbWl1bS13aW4nKSwKKyAgICAgICAgICAgIHBhdGhfdXRp
bHMuV2ViS2l0QmFzZWxpbmVQYXRoKCd3aW4nKSwKKyAgICAgICAgICAgIHBhdGhfdXRpbHMuV2Vi
S2l0QmFzZWxpbmVQYXRoKCdtYWMnKV0KKworCitkZWYgQXBhY2hlRXhlY3V0YWJsZVBhdGgoKToK
KyAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCisg
ICAgcGF0aCA9IG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImFwYWNoZTIiKQorICAgIGlm
IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aAorICAgIHByaW50ICJV
bmFibGUgdG8gZmluZSBBcGFjaGUgZXhlY3V0YWJsZSAlcyIgJSBwYXRoCisgICAgX01pc3NpbmdB
cGFjaGUoKQorCisKK2RlZiBBcGFjaGVDb25maWdGaWxlUGF0aCgpOgorICAgICIiIlJldHVybnMg
dGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMu
UGF0aEZyb21CYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAorICAg
ICAgICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItZGViaWFuLWh0dHBkLmNvbmYiKQorCisKK2Rl
ZiBMaWdIVFRQZEV4ZWN1dGFibGVQYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0YWJs
ZSBwYXRoIHRvIHN0YXJ0IExpZ0hUVFBkIiIiCisgICAgYmlucGF0aCA9ICIvdXNyL3NiaW4vbGln
aHR0cGQiCisgICAgaWYgb3MucGF0aC5leGlzdHMoYmlucGF0aCk6CisgICAgICAgIHJldHVybiBi
aW5wYXRoCisgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIExpZ0hUVFBkIGV4ZWN1dGFibGUgJXMi
ICUgYmlucGF0aAorICAgIF9NaXNzaW5nTGlnSFRUUGQoKQorCisKK2RlZiBMaWdIVFRQZE1vZHVs
ZVBhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaWJyYXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdI
VFRQZCIiIgorICAgIG1vZHBhdGggPSAiL3Vzci9saWIvbGlnaHR0cGQiCisgICAgaWYgb3MucGF0
aC5leGlzdHMobW9kcGF0aCk6CisgICAgICAgIHJldHVybiBtb2RwYXRoCisgICAgcHJpbnQgIlVu
YWJsZSB0byBmaW5kIExpZ0hUVFBkIG1vZHVsZXMgJXMiICUgbW9kcGF0aAorICAgIF9NaXNzaW5n
TGlnSFRUUGQoKQorCisKK2RlZiBMaWdIVFRQZFBIUFBhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRo
ZSBQSFAgZXhlY3V0YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIGJpbnBhdGggPSAiL3Vz
ci9iaW4vcGhwLWNnaSIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhiaW5wYXRoKToKKyAgICAgICAg
cmV0dXJuIGJpbnBhdGgKKyAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgUEhQIENHSSBleGVjdXRh
YmxlICVzIiAlIGJpbnBhdGgKKyAgICBfTWlzc2luZ0xpZ0hUVFBkKCkKKworCitkZWYgV0RpZmZQ
YXRoKCk6CisgICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNz
dW1lIGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZAorICAgIGluIHRoZSB1c2VyJ3MgJFBBVEguIiIi
CisgICAgcmV0dXJuICd3ZGlmZicKKworCitkZWYgSW1hZ2VEaWZmUGF0aCh0YXJnZXQpOgorICAg
ICIiIlBhdGggdG8gdGhlIGltYWdlX2RpZmYgYmluYXJ5LgorCisgICAgQXJnczoKKyAgICAgIHRh
cmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpIiIiCisgICAgcmV0dXJu
IF9QYXRoRnJvbUJ1aWxkUmVzdWx0cyh0YXJnZXQsICdpbWFnZV9kaWZmJykKKworCitkZWYgTGF5
b3V0VGVzdEhlbHBlclBhdGgodGFyZ2V0KToKKyAgICAiIiJQYXRoIHRvIHRoZSBsYXlvdXRfdGVz
dCBoZWxwZXIgYmluYXJ5LCBpZiBuZWVkZWQsIGVtcHR5IG90aGVyd2lzZSIiIgorICAgIHJldHVy
biAnJworCisKK2RlZiBUZXN0U2hlbGxQYXRoKHRhcmdldCk6CisgICAgIiIiUmV0dXJuIHRoZSBw
bGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3Igb3VyIFRlc3RTaGVsbC4KKworICAgIEFy
Z3M6CisgICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdldCBtb2RlIChkZWJ1ZyBvciByZWxlYXNlKSAi
IiIKKyAgICBpZiB0YXJnZXQgaW4gKCdEZWJ1ZycsICdSZWxlYXNlJyk6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGRlYnVnX3BhdGggPSBfUGF0aEZyb21CdWlsZFJlc3VsdHMoJ0RlYnVnJywg
J3Rlc3Rfc2hlbGwnKQorICAgICAgICAgICAgcmVsZWFzZV9wYXRoID0gX1BhdGhGcm9tQnVpbGRS
ZXN1bHRzKCdSZWxlYXNlJywgJ3Rlc3Rfc2hlbGwnKQorCisgICAgICAgICAgICBkZWJ1Z19tdGlt
ZSA9IG9zLnN0YXQoZGVidWdfcGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgIHJlbGVhc2VfbXRp
bWUgPSBvcy5zdGF0KHJlbGVhc2VfcGF0aCkuc3RfbXRpbWUKKworICAgICAgICAgICAgaWYgZGVi
dWdfbXRpbWUgPiByZWxlYXNlX210aW1lIGFuZCB0YXJnZXQgPT0gJ1JlbGVhc2UnIG9yIFwKKyAg
ICAgICAgICAgICAgIHJlbGVhc2VfbXRpbWUgPiBkZWJ1Z19tdGltZSBhbmQgdGFyZ2V0ID09ICdE
ZWJ1Zyc6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdceDFiWzMxbVdhcm5pbmc6IHlv
dSBhcmUgbm90IHJ1bm5pbmcgdGhlIG1vc3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncmVjZW50IHRlc3Rfc2hlbGwgYmluYXJ5LiBZb3UgbmVlZCB0byBwYXNzICcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJy0tZGVidWcgb3Igbm90IHRvIHNlbGVjdCBiZXR3ZWVuIERl
YnVnIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWxlYXNlLlx4MWJbMG0n
KQorICAgICAgICAjIFRoaXMgd2lsbCBmYWlsIGlmIHdlIGRvbid0IGhhdmUgYm90aCBhIGRlYnVn
IGFuZCByZWxlYXNlIGJpbmFyeS4KKyAgICAgICAgIyBUaGF0J3MgZmluZSBiZWNhdXNlLCBpbiB0
aGlzIGNhc2UsIHdlIG11c3QgYWxyZWFkeSBiZSBydW5uaW5nIHRoZQorICAgICAgICAjIG1vc3Qg
dXAtdG8tZGF0ZSBvbmUuCisgICAgICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoK
KyAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiBfUGF0aEZyb21CdWlsZFJlc3VsdHModGFy
Z2V0LCAndGVzdF9zaGVsbCcpCisKKworZGVmIEZ1enp5TWF0Y2hQYXRoKCk6CisgICAgIiIiUmV0
dXJuIHRoZSBwYXRoIHRvIHRoZSBmdXp6eSBtYXRjaGVyIGJpbmFyeS4iIiIKKyAgICByZXR1cm4g
cGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ2Z1enp5bWF0Y2gnLCAnZnV6
enltYXRjaCcpCisKKworZGVmIFNodXREb3duSFRUUFNlcnZlcihzZXJ2ZXJfcGlkKToKKyAgICAi
IiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1
bGx5IHNodXQgZG93bi4KKworICAgIEFyZ3M6CisgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2Vz
cyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgIiIiCisgICAgIyBzZXJ2ZXJfcGlkIGlz
IG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAg
IGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAgICAgICAgIyBUaGlzIGlzbid0IGlkZWFsLCBzaW5j
ZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoIHdlYiBzZXJ2ZXIgcHJvY2Vzc2VzCisgICAgICAgICMg
bm90IHN0YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHksIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93Lgor
ICAgICAgICBLaWxsQWxsUHJvY2VzcygnbGlnaHR0cGQnKQorICAgICAgICBLaWxsQWxsUHJvY2Vz
cygnYXBhY2hlMicpCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mua2ls
bChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICNUT0RPKG1tb3NzKSBN
YXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPworICAgICAgICBleGNlcHQg
T1NFcnJvcjoKKyAgICAgICAgICAgICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4g
ZnJvbSBhIHN0YWxlIGh0dHBkLnBpZCBmaWxlKSwKKyAgICAgICAgICAgICMgc28gaWYga2lsbCBm
YWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0byAna2lsbGFsbCcgd2ViCisgICAgICAg
ICAgICAjIHNlcnZlcnMuCisgICAgICAgICAgICBTaHV0RG93bkhUVFBTZXJ2ZXIoTm9uZSkKKwor
CitkZWYgS2lsbFByb2Nlc3MocGlkKToKKyAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nl
c3MuCisKKyAgICBBcmdzOgorICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUg
a2lsbGVkLgorICAgICIiIgorICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKworCitk
ZWYgS2lsbEFsbFByb2Nlc3MocHJvY2Vzc19uYW1lKToKKyAgICBudWxsID0gb3Blbihvcy5kZXZu
dWxsKQorICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5n
ZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lXSwgc3RkZXJy
PW51bGwpCisgICAgbnVsbC5jbG9zZSgpCisKKworZGVmIEtpbGxBbGxUZXN0U2hlbGxzKCk6Cisg
ICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVsbCBiaW5hcnkgY3VycmVu
dGx5IHJ1bm5pbmcuIiIiCisgICAgS2lsbEFsbFByb2Nlc3MoJ3Rlc3Rfc2hlbGwnKQorCisjCisj
IFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucworIworCisKK2RlZiBfTWlzc2luZ0xpZ0hUVFBkKCk6
CisgICAgcHJpbnQgJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0IGluc3RhbGwg
bGlnaHR0cGQgcGhwNS1jZ2kiJworICAgIHByaW50ICdGb3IgY29tcGxldGUgTGludXggYnVpbGQg
cmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKKyAgICBwcmludCAnaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycKKyAgICBzeXMuZXhp
dCgxKQorCisKK2RlZiBfTWlzc2luZ0FwYWNoZSgpOgorICAgIHByaW50ICgnUGxlYXNlIGluc3Rh
bGwgdXNpbmc6ICJzdWRvIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyICcKKyAgICAgICAgJ2xpYmFw
YWNoZTItbW9kLXBocDUiJykKKyAgICBwcmludCAnRm9yIGNvbXBsZXRlIExpbnV4IGJ1aWxkIHJl
cXVpcmVtZW50cywgcGxlYXNlIHNlZTonCisgICAgcHJpbnQgJ2h0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9jaHJvbWl1bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlvbnMnCisgICAgc3lzLmV4aXQo
MSkKKworCitkZWYgX1BhdGhGcm9tQnVpbGRSZXN1bHRzKCpwYXRoaWVzKToKKyAgICAjIEZJWE1F
KGRrZWdlbCk6IHVzZSBsYXRlc3Qgb3Igd2FybiBpZiBtb3JlIHRoYW4gb25lIGZvdW5kPworICAg
IGZvciBkaXIgaW4gWyJzY29uc2J1aWxkIiwgIm91dCIsICJ4Y29kZWJ1aWxkIl06CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZShkaXIsICpw
YXRoaWVzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgcmFpc2UgcGF0
aF91dGlscy5QYXRoTm90Rm91bmQoIlVuYWJsZSB0byBmaW5kICVzIGluIGJ1aWxkIHRyZWUiICUK
KyAgICAgICAgKG9zLnBhdGguam9pbigqcGF0aGllcykpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1f
dXRpbHNfbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbWFjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmEzNTdmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGls
c19tYWMucHkKQEAgLTAsMCArMSwxNzUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
KyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworIiIiVGhpcyBpcyB0aGUgTWFjIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBsYXlvdXRfcGFja2FnZS5wbGF0Zm9ybV91dGlscworICAgcGFja2Fn
ZS4gVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIK
KworaW1wb3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJw
cm9jZXNzCisKK2ltcG9ydCBwYXRoX3V0aWxzCisKKworZGVmIFBsYXRmb3JtTmFtZSgpOgorICAg
ICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRseSBydW5u
aW5nIG9uLiIiIgorICAgICMgQXQgdGhlIG1vbWVudCBhbGwgY2hyb21pdW0gbWFjIHJlc3VsdHMg
YXJlIHZlcnNpb24taW5kZXBlbmRlbnQuIEF0IHNvbWUKKyAgICAjIHBvaW50IHdlIG1heSBuZWVk
IHRvIHJldHVybiAnY2hyb21pdW0tbWFjJyArIFBsYXRmb3JtVmVyc2lvbigpCisgICAgcmV0dXJu
ICdjaHJvbWl1bS1tYWMnCisKKworZGVmIFBsYXRmb3JtVmVyc2lvbigpOgorICAgICIiIlJldHVy
bnMgdGhlIHZlcnNpb24gc3RyaW5nIGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IK
KyAgICAnLXNub3dsZW9wYXJkJy4gSWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNo
IGJldHdlZW4KKyAgICBtaW5vciB2ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIKKyAgICBvc192
ZXJzaW9uX3N0cmluZyA9IHBsYXRmb3JtLm1hY192ZXIoKVswXSAgIyBlLmcuICIxMC41LjYiCisg
ICAgaWYgbm90IG9zX3ZlcnNpb25fc3RyaW5nOgorICAgICAgICByZXR1cm4gJy1sZW9wYXJkJwor
CisgICAgcmVsZWFzZV92ZXJzaW9uID0gaW50KG9zX3ZlcnNpb25fc3RyaW5nLnNwbGl0KCcuJylb
MV0pCisKKyAgICAjIHdlIGRvbid0IHN1cHBvcnQgJ3RpZ2VyJyBvciBlYXJsaWVyIHJlbGVhc2Vz
CisgICAgaWYgcmVsZWFzZV92ZXJzaW9uID09IDU6CisgICAgICAgIHJldHVybiAnLWxlb3BhcmQn
CisgICAgZWxpZiByZWxlYXNlX3ZlcnNpb24gPT0gNjoKKyAgICAgICAgcmV0dXJuICctc25vd2xl
b3BhcmQnCisKKyAgICByZXR1cm4gJycKKworCitkZWYgR2V0TnVtQ29yZXMoKToKKyAgICAiIiJS
ZXR1cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRocmVh
ZGVkIG1hY2hpbmVzLAorICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBhY3R1
YWwgcHJvY2Vzc29ycy4iIiIKKyAgICByZXR1cm4gaW50KG9zLnBvcGVuMigic3lzY3RsIC1uIGh3
Lm5jcHUiKVsxXS5yZWFkKCkpCisKKworZGVmIEJhc2VsaW5lUGF0aChwbGF0Zm9ybT1Ob25lKToK
KyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJj
ZSB0cmVlIGZvciB0aGUKKyAgICBiYXNlbGluZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0g
dmVyc2lvbi4gSWYgfHBsYXRmb3JtfCBpcyBOb25lLAorICAgIHRoZW4gdGhlIHZlcnNpb24gY3Vy
cmVudGx5IGluIHVzZSBpcyB1c2VkLiIiIgorICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6CisgICAg
ICAgIHBsYXRmb3JtID0gUGxhdGZvcm1OYW1lKCkKKyAgICByZXR1cm4gcGF0aF91dGlscy5QYXRo
RnJvbUJhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMn
KQorCisjIFRPRE86IFdlIHNob3VsZCBhZGQgbGVvcGFyZCBhbmQgc25vd2xlb3BhcmQgdG8gdGhl
IGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2sKKyMgb25jZSB3ZSBzdGFydCBydW5uaW5nIHRoZSB0ZXN0
cyBmcm9tIHNub3dsZW9wYXJkLgorCisKK2RlZiBCYXNlbGluZVNlYXJjaFBhdGgocGxhdGZvcm09
Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2gg
Zm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgorICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhz
IGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKKyAgICByZXR1
cm4gW0Jhc2VsaW5lUGF0aChwbGF0Zm9ybSksCisgICAgICAgICAgICBwYXRoX3V0aWxzLldlYktp
dEJhc2VsaW5lUGF0aCgnbWFjJyArIFBsYXRmb3JtVmVyc2lvbigpKSwKKyAgICAgICAgICAgIHBh
dGhfdXRpbHMuV2ViS2l0QmFzZWxpbmVQYXRoKCdtYWMnKV0KKworCitkZWYgV0RpZmZQYXRoKCk6
CisgICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNzdW1lIGlz
IGFscmVhZHkgaW5zdGFsbGVkIGFuZAorICAgIGluIHRoZSB1c2VyJ3MgJFBBVEguIiIiCisgICAg
cmV0dXJuICd3ZGlmZicKKworCitkZWYgSW1hZ2VEaWZmUGF0aCh0YXJnZXQpOgorICAgICIiIlBh
dGggdG8gdGhlIGltYWdlX2RpZmYgZXhlY3V0YWJsZQorCisgICAgQXJnczoKKyAgICAgIHRhcmdl
dDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKKyAgICByZXR1cm4gcGF0
aF91dGlscy5QYXRoRnJvbUJhc2UoJ3hjb2RlYnVpbGQnLCB0YXJnZXQsICdpbWFnZV9kaWZmJykK
KworCitkZWYgTGF5b3V0VGVzdEhlbHBlclBhdGgodGFyZ2V0KToKKyAgICAiIiJQYXRoIHRvIHRo
ZSBsYXlvdXRfdGVzdF9oZWxwZXIgZXhlY3V0YWJsZSwgaWYgbmVlZGVkLCBlbXB0eSBvdGhlcndp
c2UKKworICAgIEFyZ3M6CisgICAgICB0YXJnZXQ6IGJ1aWxkIHR5cGUgLSAnRGVidWcnLCdSZWxl
YXNlJyxldGMuIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd4Y29kZWJ1
aWxkJywgdGFyZ2V0LCAnbGF5b3V0X3Rlc3RfaGVscGVyJykKKworCitkZWYgVGVzdFNoZWxsUGF0
aCh0YXJnZXQpOgorICAgICIiIlBhdGggdG8gdGhlIHRlc3Rfc2hlbGwgZXhlY3V0YWJsZS4KKwor
ICAgIEFyZ3M6CisgICAgICB0YXJnZXQ6IGJ1aWxkIHR5cGUgLSAnRGVidWcnLCdSZWxlYXNlJyxl
dGMuIiIiCisgICAgIyBUT0RPKHBpbmtlcnRvbik6IG1ha2UgfHRhcmdldHwgaGFwcHkgd2l0aCBj
YXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMuCisgICAgcmV0dXJuIHBhdGhfdXRpbHMuUGF0aEZy
b21CYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAnVGVzdFNoZWxsLmFwcCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50cycsICdNYWNPUycsICdUZXN0U2hlbGwn
KQorCisKK2RlZiBBcGFjaGVFeGVjdXRhYmxlUGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4
ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUiIiIKKyAgICByZXR1cm4gb3MucGF0aC5qb2lu
KCIvdXNyIiwgInNiaW4iLCAiaHR0cGQiKQorCisKK2RlZiBBcGFjaGVDb25maWdGaWxlUGF0aCgp
OgorICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCisgICAg
cmV0dXJuIHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAi
TGF5b3V0VGVzdHMiLAorICAgICAgICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItaHR0cGQuY29u
ZiIpCisKKworZGVmIExpZ0hUVFBkRXhlY3V0YWJsZVBhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRo
ZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKKyAgICByZXR1cm4gcGF0aF91
dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaW4nLCAnbGlnaHR0cGQnKQorCisKK2Rl
ZiBMaWdIVFRQZE1vZHVsZVBhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaWJyYXJ5IG1vZHVs
ZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLlBhdGhGcm9tQmFz
ZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywgJ2xpYicpCisKKworZGVmIExpZ0hU
VFBkUEhQUGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9y
IExpZ0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd0aGlyZF9w
YXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnYmluJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3BocC1jZ2knKQorCisKK2RlZiBTaHV0RG93bkhUVFBTZXJ2ZXIoc2VydmVy
X3BpZCk6CisgICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9ja3Mg
dW50aWwgaXQncyBmdWxseSBzaHV0IGRvd24uCisKKyAgICAgIEFyZ3M6CisgICAgICAgIHNlcnZl
cl9waWQ6IFRoZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAiIiIKKyAg
ICAjIHNlcnZlcl9waWQgaXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBy
dW4gbWFudWFsbHkuCisgICAgaWYgc2VydmVyX3BpZCBpcyBOb25lOgorICAgICAgICAjIFRPRE8o
bW1vc3MpIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNlIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGggbGln
aHR0cGQKKyAgICAgICAgIyBwcm9jZXNzZXMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHks
IGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgICAgICBLaWxsQWxsUHJvY2VzcygnbGlnaHR0
cGQnKQorICAgICAgICBLaWxsQWxsUHJvY2VzcygnaHR0cGQnKQorICAgIGVsc2U6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCisg
ICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJlIHRocm93IGluIGEgU0lHS0lMTCBqdXN0IHRv
IGJlIHN1cmU/CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBTb21ldGlt
ZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkIGZpbGUpLAor
ICAgICAgICAgICAgIyBzbyBpZiBraWxsIGZhaWxzIG9uIHRoZSBnaXZlbiBQSUQsIGp1c3QgdHJ5
IHRvICdraWxsYWxsJyB3ZWIKKyAgICAgICAgICAgICMgc2VydmVycy4KKyAgICAgICAgICAgIFNo
dXREb3duSFRUUFNlcnZlcihOb25lKQorCisKK2RlZiBLaWxsUHJvY2VzcyhwaWQpOgorICAgICIi
IkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgIEFyZ3M6CisgICAgICBwaWQ6IFRo
ZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCisgICAgIiIiCisgICAgb3Mua2lsbChw
aWQsIHNpZ25hbC5TSUdLSUxMKQorCisKK2RlZiBLaWxsQWxsUHJvY2Vzcyhwcm9jZXNzX25hbWUp
OgorICAgICMgT24gTWFjIE9TIFggMTAuNiwga2lsbGFsbCBoYXMgYSBuZXcgY29uc3RyYWludDog
LVNJR05BTE5BTUUgb3IKKyAgICAjIC1TSUdOQUxOVU1CRVIgbXVzdCBjb21lIGZpcnN0LiAgRXhh
bXBsZSBwcm9ibGVtOgorICAgICMgICAkIGtpbGxhbGwgLXUgJFVTRVIgLVRFUk0gbGlnaHR0cGQK
KyAgICAjICAga2lsbGFsbDogaWxsZWdhbCBvcHRpb24gLS0gVAorICAgICMgVXNlIG9mIHRoZSBl
YXJsaWVyIC1URVJNIHBsYWNlbWVudCBpcyBqdXN0IGZpbmUgb24gMTAuNS4KKyAgICBudWxsID0g
b3Blbihvcy5kZXZudWxsKQorICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0n
LCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19u
YW1lXSwgc3RkZXJyPW51bGwpCisgICAgbnVsbC5jbG9zZSgpCisKKworZGVmIEtpbGxBbGxUZXN0
U2hlbGxzKCk6CisgICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVsbCBi
aW5hcnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAgS2lsbEFsbFByb2Nlc3MoJ1Rlc3RTaGVs
bCcpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc193
aW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2OTlkYwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX3dpbi5weQpAQCAtMCwwICsxLDE4NCBAQAorIyBD
b3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisiIiJUaGlzIGlzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGF5b3V0X3BhY2th
Z2UucGxhdGZvcm1fdXRpbHMKKyAgIHBhY2thZ2UuIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBp
bXBvcnRlZCBieSB0aGF0IHBhY2thZ2UuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHBhdGhfdXRp
bHMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKKworZGVmIFBsYXRmb3JtTmFtZSgp
OgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRs
eSBydW5uaW5nIG9uLiIiIgorICAgICMgV2UncmUgbm90IHJlYWR5IGZvciB2ZXJzaW9uLXNwZWNp
ZmljIHJlc3VsdHMgeWV0LiBXaGVuIHdlIHVuY29tbWVudAorICAgICMgdGhpcywgd2UgYWxzbyBu
ZWVkIHRvIGFkZCBpdCB0byB0aGUgQmFzZWxpbmVTZWFyY2hQYXRoKCkKKyAgICByZXR1cm4gJ2No
cm9taXVtLXdpbicgKyBQbGF0Zm9ybVZlcnNpb24oKQorCisKK2RlZiBQbGF0Zm9ybVZlcnNpb24o
KToKKyAgICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBl
LmcuICctdmlzdGEnIG9yCisgICAgJy1zbm93bGVvcGFyZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2Vz
IG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgICAgbWlub3IgdmVyc2lvbnMsIGl0IHJldHVybnMg
JycuIiIiCisgICAgd2ludmVyID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKKyAgICBpZiB3aW52
ZXJbMF0gPT0gNiBhbmQgKHdpbnZlclsxXSA9PSAxKToKKyAgICAgICAgcmV0dXJuICctNycKKyAg
ICBpZiB3aW52ZXJbMF0gPT0gNiBhbmQgKHdpbnZlclsxXSA9PSAwKToKKyAgICAgICAgcmV0dXJu
ICctdmlzdGEnCisgICAgaWYgd2ludmVyWzBdID09IDUgYW5kICh3aW52ZXJbMV0gPT0gMSBvciB3
aW52ZXJbMV0gPT0gMik6CisgICAgICAgIHJldHVybiAnLXhwJworICAgIHJldHVybiAnJworCisK
K2RlZiBHZXROdW1Db3JlcygpOgorICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBv
biB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCisgICAgdGhpcyB3aWxs
IGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgorICAgIHJldHVy
biBpbnQob3MuZW52aXJvbi5nZXQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJywgMSkpCisKKworZGVm
IEJhc2VsaW5lUGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHJl
bGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGZvciB0aGUKKyAgICBiYXNlbGlu
ZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0gdmVyc2lvbi4gSWYgfHBsYXRmb3JtfCBpcyBO
b25lLAorICAgIHRoZW4gdGhlIHZlcnNpb24gY3VycmVudGx5IGluIHVzZSBpcyB1c2VkLiIiIgor
ICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6CisgICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm1OYW1l
KCkKKyAgICByZXR1cm4gcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3dlYmtpdCcsICdkYXRhJywg
J2xheW91dF90ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0
Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorCisKK2RlZiBCYXNlbGluZVNlYXJjaFBh
dGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3Rvcmll
cyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgorICAgIG9yZGVyIG9mIHByZWZl
cmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4i
IiIKKyAgICBkaXJzID0gW10KKyAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICBwbGF0
Zm9ybSA9IFBsYXRmb3JtTmFtZSgpCisKKyAgICBpZiBwbGF0Zm9ybSA9PSAnY2hyb21pdW0td2lu
LXhwJzoKKyAgICAgICAgZGlycy5hcHBlbmQoQmFzZWxpbmVQYXRoKHBsYXRmb3JtKSkKKyAgICBp
ZiBwbGF0Zm9ybSBpbiAoJ2Nocm9taXVtLXdpbi14cCcsICdjaHJvbWl1bS13aW4tdmlzdGEnKToK
KyAgICAgICAgZGlycy5hcHBlbmQoQmFzZWxpbmVQYXRoKCdjaHJvbWl1bS13aW4tdmlzdGEnKSkK
KyAgICBkaXJzLmFwcGVuZChCYXNlbGluZVBhdGgoJ2Nocm9taXVtLXdpbicpKQorICAgIGRpcnMu
YXBwZW5kKHBhdGhfdXRpbHMuV2ViS2l0QmFzZWxpbmVQYXRoKCd3aW4nKSkKKyAgICBkaXJzLmFw
cGVuZChwYXRoX3V0aWxzLldlYktpdEJhc2VsaW5lUGF0aCgnbWFjJykpCisgICAgcmV0dXJuIGRp
cnMKKworCitkZWYgV0RpZmZQYXRoKCk6CisgICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0
YWJsZSwgd2hvc2UgYmluYXJ5IGlzIGNoZWNrZWQgaW4gb24gV2luIiIiCisgICAgcmV0dXJuIHBh
dGhfdXRpbHMuUGF0aEZyb21CYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJywgJ3dk
aWZmLmV4ZScpCisKKworZGVmIEltYWdlRGlmZlBhdGgodGFyZ2V0KToKKyAgICAiIiJSZXR1cm4g
dGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciB0aGUgaW1hZ2UgY29tcGFyZSB1
dGlsLgorICAgICAgICAgV2UgdXNlIHRoaXMgaWYgd2UgY2FuJ3QgZmluZCB0aGUgYmluYXJ5IGlu
IHRoZSBkZWZhdWx0IGxvY2F0aW9uCisgICAgICAgICBpbiBwYXRoX3V0aWxzLgorCisgICAgQXJn
czoKKyAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpCisg
ICAgIiIiCisgICAgcmV0dXJuIF9GaW5kQmluYXJ5KHRhcmdldCwgJ2ltYWdlX2RpZmYuZXhlJykK
KworCitkZWYgTGF5b3V0VGVzdEhlbHBlclBhdGgodGFyZ2V0KToKKyAgICAiIiJSZXR1cm4gdGhl
IHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciB0aGUgbGF5b3V0IHRlc3QgaGVscGVy
LgorICAgIFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVm
YXVsdCBsb2NhdGlvbgorICAgIGluIHBhdGhfdXRpbHMuCisKKyAgICBBcmdzOgorICAgICAgdGFy
Z2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKKyAgICAiIiIKKyAgICBy
ZXR1cm4gX0ZpbmRCaW5hcnkodGFyZ2V0LCAnbGF5b3V0X3Rlc3RfaGVscGVyLmV4ZScpCisKKwor
ZGVmIFRlc3RTaGVsbFBhdGgodGFyZ2V0KToKKyAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNw
ZWNpZmljIGJpbmFyeSBwYXRoIGZvciBvdXIgVGVzdFNoZWxsLgorICAgICAgIFdlIHVzZSB0aGlz
IGlmIHdlIGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgorICAg
ICAgIGluIHBhdGhfdXRpbHMuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJn
ZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKKyAgICAiIiIKKyAgICByZXR1cm4gX0ZpbmRCaW5h
cnkodGFyZ2V0LCAndGVzdF9zaGVsbC5leGUnKQorCisKK2RlZiBBcGFjaGVFeGVjdXRhYmxlUGF0
aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUi
IiIKKyAgICBwYXRoID0gcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5
Z3dpbicsICJ1c3IiLCAic2JpbiIpCisgICAgIyBEb24ndCByZXR1cm4gaHR0cGQuZXhlIHNpbmNl
IHdlIHdhbnQgdG8gdXNlIHRoaXMgZnJvbSBjeWd3aW4uCisgICAgcmV0dXJuIG9zLnBhdGguam9p
bihwYXRoLCAiaHR0cGQiKQorCisKK2RlZiBBcGFjaGVDb25maWdGaWxlUGF0aCgpOgorICAgICIi
IlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCisgICAgcmV0dXJuIHBh
dGhfdXRpbHMuUGF0aEZyb21CYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVz
dHMiLAorICAgICAgICAiaHR0cCIsICJjb25mIiwgImN5Z3dpbi1odHRwZC5jb25mIikKKworCitk
ZWYgTGlnSFRUUGRFeGVjdXRhYmxlUGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFi
bGUgcGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLlBhdGhG
cm9tQmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnd2luJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ0xpZ2h0VFBELmV4ZScpCisKKworZGVmIExpZ0hUVFBkTW9k
dWxlUGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExp
Z0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd0aGlyZF9wYXJ0
eScsICdsaWdodHRwZCcsICd3aW4nLCAnbGliJykKKworCitkZWYgTGlnSFRUUGRQSFBQYXRoKCk6
CisgICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1dGFibGUgcGF0aCBmb3IgTGlnSFRUUGQiIiIK
KyAgICByZXR1cm4gcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0
dHBkJywgJ3dpbicsICdwaHA1JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3BocC1jZ2kuZXhlJykKKworCitkZWYgU2h1dERvd25IVFRQU2VydmVyKHNlcnZlcl9waWQpOgor
ICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0
J3MgZnVsbHkgc2h1dCBkb3duLgorCisgICAgQXJnczoKKyAgICAgIHNlcnZlcl9waWQ6IFRoZSBw
cm9jZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAgICAgICBVbnVzZWQgaW4gdGhp
cyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWV0aG9kLgorICAgICIiIgorICAgIHN1YnByb2Nlc3Mu
UG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ0xpZ2h0VFBELmV4ZScpLAorICAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAg
ICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQorICAgIHN1YnByb2Nlc3MuUG9w
ZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ2h0dHBkLmV4ZScpLAorICAgICAgICAg
ICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAg
IHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQorCisKK2RlZiBLaWxsUHJvY2VzcyhwaWQp
OgorICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgIEFyZ3M6CisgICAg
ICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCisgICAgIiIiCisgICAg
c3VicHJvY2Vzcy5jYWxsKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9waWQnLCBzdHIocGlkKSks
CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAg
ICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKworZGVmIEtpbGxBbGxUZXN0U2hl
bGxzKHNlbGYpOgorICAgICIiIktpbGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwg
YmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIiIgorICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNr
a2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ3Rlc3Rfc2hlbGwuZXhlJyksCisgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCisKKyMKKyMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rp
b25zLgorIworCisKK2RlZiBfRmluZEJpbmFyeSh0YXJnZXQsIGJpbmFyeSk6CisgICAgIiIiT24g
V2luZG93cywgd2UgbG9vayBmb3IgYmluYXJpZXMgdGhhdCB3ZSBjb21waWxlIGluIHBvdGVudGlh
bGx5CisgICAgdHdvIHBsYWNlczogc3JjL3dlYmtpdC8kdGFyZ2V0IChwcmVmZXJhYmx5LCB3aGlj
aCB3ZSBnZXQgaWYgd2UKKyAgICBidWlsdCB1c2luZyB3ZWJraXRfZ2x1ZS5neXApLCBvciBzcmMv
Y2hyb21lLyR0YXJnZXQgKGlmIGNvbXBpbGVkIHNvbWUKKyAgICBvdGhlciB3YXkpLiIiIgorICAg
IHRyeToKKyAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd3ZWJraXQnLCB0
YXJnZXQsIGJpbmFyeSkKKyAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZSgnY2hy
b21lJywgdGFyZ2V0LCBiaW5hcnkpCisgICAgICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RG
b3VuZDoKKyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZSgnYnVpbGQn
LCB0YXJnZXQsIGJpbmFyeSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVz
dF9leHBlY3RhdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQz
YmRkNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC0wLDAgKzEs
Nzg0IEBACisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKyIiIkEgaGVscGVyIGNsYXNzIGZvciByZWFkaW5nIGluIGFuZCBkZWFsaW5n
IHdpdGggdGVzdHMgZXhwZWN0YXRpb25zCitmb3IgbGF5b3V0IHRlc3RzLgorIiIiCisKK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUK
K2ltcG9ydCBwYXRoX3V0aWxzCisKK3N5cy5wYXRoLmFwcGVuZChwYXRoX3V0aWxzLlBhdGhGcm9t
QmFzZSgKKyAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ1dlYktpdFRvb2xzJykpCitpbXBv
cnQgc2ltcGxlanNvbgorCisjIFRlc3QgZXhwZWN0YXRpb24gYW5kIG1vZGlmaWVyIGNvbnN0YW50
cy4KKyhQQVNTLCBGQUlMLCBURVhULCBJTUFHRSwgSU1BR0VfUExVU19URVhULCBUSU1FT1VULCBD
UkFTSCwgU0tJUCwgV09OVEZJWCwKKyBERUZFUiwgU0xPVywgUkVCQVNFTElORSwgTUlTU0lORywg
RkxBS1ksIE5PVywgTk9ORSkgPSByYW5nZSgxNikKKworIyBUZXN0IGV4cGVjdGF0aW9uIGZpbGUg
dXBkYXRlIGFjdGlvbiBjb25zdGFudHMKKyhOT19DSEFOR0UsIFJFTU9WRV9URVNULCBSRU1PVkVf
UExBVEZPUk0sIEFERF9QTEFURk9STVNfRVhDRVBUX1RISVMpID0gcmFuZ2UoNCkKKworCitjbGFz
cyBUZXN0RXhwZWN0YXRpb25zOgorICAgIFRFU1RfTElTVCA9ICJ0ZXN0X2V4cGVjdGF0aW9ucy50
eHQiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdHMsIGRpcmVjdG9yeSwgcGxhdGZvcm0s
IGlzX2RlYnVnX21vZGUsIGlzX2xpbnRfbW9kZSwKKyAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9
VHJ1ZSk6CisgICAgICAgICIiIlJlYWRzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlcyBmcm9t
IHRoZSBnaXZlbiBkaXJlY3RvcnkuIiIiCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGly
ZWN0b3J5LCBzZWxmLlRFU1RfTElTVCkKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMg
PSBUZXN0RXhwZWN0YXRpb25zRmlsZShwYXRoLCB0ZXN0cywgcGxhdGZvcm0sCisgICAgICAgICAg
ICBpc19kZWJ1Z19tb2RlLCBpc19saW50X21vZGUsIHRlc3RzX2FyZV9wcmVzZW50PXRlc3RzX2Fy
ZV9wcmVzZW50KQorCisgICAgIyBUT0RPKG9qYW4pOiBBbGxvdyBmb3IgcmVtb3Zpbmcgc2tpcHBl
ZCB0ZXN0cyB3aGVuIGdldHRpbmcgdGhlIGxpc3Qgb2YKKyAgICAjIHRlc3RzIHRvIHJ1biwgYnV0
IG5vdCB3aGVuIGdldHRpbmcgbWV0cmljcy4KKyAgICAjIFRPRE8ob2phbik6IFJlcGxhY2UgdGhl
IEdldCogY2FsbHMgaGVyZSB3aXRoIHRoZSBtb3JlIHNhbmUgQVBJIGV4cG9zZWQKKyAgICAjIGJ5
IFRlc3RFeHBlY3RhdGlvbnNGaWxlIGJlbG93LiBNYXliZSBtZXJnZSB0aGUgdHdvIGNsYXNzZXMg
ZW50aXJlbHk/CisKKyAgICBkZWYgR2V0RXhwZWN0YXRpb25zSnNvbkZvckFsbFBsYXRmb3Jtcyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLkdldEV4cGVjdGF0
aW9uc0pzb25Gb3JBbGxQbGF0Zm9ybXMoKQorCisgICAgZGVmIEdldFJlYmFzZWxpbmluZ0ZhaWx1
cmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLkdldFRl
c3RTZXQoUkVCQVNFTElORSwgRkFJTCkgfAorICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVk
X2ZhaWx1cmVzLkdldFRlc3RTZXQoUkVCQVNFTElORSwgSU1BR0UpIHwKKyAgICAgICAgICAgICAg
ICBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5HZXRUZXN0U2V0KFJFQkFTRUxJTkUsIFRFWFQpIHwK
KyAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5HZXRUZXN0U2V0KFJFQkFT
RUxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJTUFHRV9QTFVTX1RFWFQpKQorCisgICAgZGVmIEdldE9wdGlvbnMoc2VsZiwgdGVzdCk6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5HZXRPcHRpb25zKHRlc3QpCisK
KyAgICBkZWYgR2V0RXhwZWN0YXRpb25zKHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZXhwZWN0ZWRfZmFpbHVyZXMuR2V0RXhwZWN0YXRpb25zKHRlc3QpCisKKyAgICBkZWYgR2V0
RXhwZWN0YXRpb25zU3RyaW5nKHNlbGYsIHRlc3QpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBl
eHBlY3RhdG9ucyBmb3IgdGhlIGdpdmVuIHRlc3QgYXMgYW4gdXBwZXJjYXNlIHN0cmluZy4KKyAg
ICAgICAgSWYgdGhlcmUgYXJlIG5vIGV4cGVjdGF0aW9ucyBmb3IgdGhlIHRlc3QsIHRoZW4gIlBB
U1MiIGlzIHJldHVybmVkLiIiIgorICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLkdldEV4cGVj
dGF0aW9ucyh0ZXN0KQorICAgICAgICByZXR2YWwgPSBbXQorCisgICAgICAgIGZvciBleHBlY3Rh
dGlvbiBpbiBleHBlY3RhdGlvbnM6CisgICAgICAgICAgICBmb3IgaXRlbSBpbiBUZXN0RXhwZWN0
YXRpb25zRmlsZS5FWFBFQ1RBVElPTlMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBpdGVt
WzFdID09IGV4cGVjdGF0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXR2YWwuYXBwZW5kKGl0
ZW1bMF0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuICIgIi5q
b2luKHJldHZhbCkudXBwZXIoKQorCisgICAgZGVmIEdldFRpbWVsaW5lRm9yVGVzdChzZWxmLCB0
ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLkdldFRpbWVsaW5l
Rm9yVGVzdCh0ZXN0KQorCisgICAgZGVmIEdldFRlc3RzV2l0aFJlc3VsdFR5cGUoc2VsZiwgcmVz
dWx0X3R5cGUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuR2V0VGVz
dHNXaXRoUmVzdWx0VHlwZShyZXN1bHRfdHlwZSkKKworICAgIGRlZiBHZXRUZXN0c1dpdGhUaW1l
bGluZShzZWxmLCB0aW1lbGluZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWls
dXJlcy5HZXRUZXN0c1dpdGhUaW1lbGluZSh0aW1lbGluZSkKKworICAgIGRlZiBNYXRjaGVzQW5F
eHBlY3RlZFJlc3VsdChzZWxmLCB0ZXN0LCByZXN1bHQpOgorICAgICAgICAiIiJSZXR1cm5zIHdo
ZXRoZXIgd2UgZ290IG9uZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgdGhpcyB0ZXN0LiIi
IgorICAgICAgICByZXR1cm4gKHJlc3VsdCBpbiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5HZXRF
eHBlY3RhdGlvbnModGVzdCkgb3IKKyAgICAgICAgICAgICAgICAocmVzdWx0IGluIChJTUFHRSwg
VEVYVCwgSU1BR0VfUExVU19URVhUKSBhbmQKKyAgICAgICAgICAgICAgICBGQUlMIGluIHNlbGYu
X2V4cGVjdGVkX2ZhaWx1cmVzLkdldEV4cGVjdGF0aW9ucyh0ZXN0KSkgb3IKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPT0gTUlTU0lORyBhbmQgc2VsZi5Jc1JlYmFzZWxpbmluZyh0ZXN0KSBvcgor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9PSBTS0lQIGFuZCBzZWxmLl9leHBlY3RlZF9mYWlsdXJl
cy5IYXNNb2RpZmllcih0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTS0lQKSkKKworICAgIGRlZiBJc1Jl
YmFzZWxpbmluZyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2Zh
aWx1cmVzLkhhc01vZGlmaWVyKHRlc3QsIFJFQkFTRUxJTkUpCisKKyAgICBkZWYgSGFzTW9kaWZp
ZXIoc2VsZiwgdGVzdCwgbW9kaWZpZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRf
ZmFpbHVyZXMuSGFzTW9kaWZpZXIodGVzdCwgbW9kaWZpZXIpCisKKyAgICBkZWYgUmVtb3ZlUGxh
dGZvcm1Gcm9tRmlsZShzZWxmLCB0ZXN0cywgcGxhdGZvcm0sIGJhY2t1cD1GYWxzZSk6CisgICAg
ICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5SZW1vdmVQbGF0Zm9ybUZyb21GaWxl
KHRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwKQorCisKK2RlZiBTdHJpcENvbW1l
bnRzKGxpbmUpOgorICAgICIiIlN0cmlwcyBjb21tZW50cyBmcm9tIGEgbGluZSBhbmQgcmV0dXJu
IE5vbmUgaWYgdGhlIGxpbmUgaXMgZW1wdHkKKyAgICBvciBlbHNlIHRoZSBjb250ZW50cyBvZiBs
aW5lIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIHJlbW92ZWQKKyAgICBhbmQgYWxs
IG90aGVyIHdoaXRlc3BhY2UgY29sbGFwc2VkIiIiCisKKyAgICBjb21tZW50SW5kZXggPSBsaW5l
LmZpbmQoJy8vJykKKyAgICBpZiBjb21tZW50SW5kZXggaXMgLTE6CisgICAgICAgIGNvbW1lbnRJ
bmRleCA9IGxlbihsaW5lKQorCisgICAgbGluZSA9IHJlLnN1YihyJ1xzKycsICcgJywgbGluZVs6
Y29tbWVudEluZGV4XS5zdHJpcCgpKQorICAgIGlmIGxpbmUgPT0gJyc6CisgICAgICAgIHJldHVy
biBOb25lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBNb2RpZmll
cnNBbmRFeHBlY3RhdGlvbnM6CisgICAgIiIiQSBob2xkZXIgZm9yIG1vZGlmaWVycyBhbmQgZXhw
ZWN0YXRpb25zIG9uIGEgdGVzdCB0aGF0IHNlcmlhbGl6ZXMgdG8KKyAgICBKU09OLiIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGlmaWVycywgZXhwZWN0YXRpb25zKToKKyAgICAgICAg
c2VsZi5tb2RpZmllcnMgPSBtb2RpZmllcnMKKyAgICAgICAgc2VsZi5leHBlY3RhdGlvbnMgPSBl
eHBlY3RhdGlvbnMKKworCitjbGFzcyBFeHBlY3RhdGlvbnNKc29uRW5jb2RlcihzaW1wbGVqc29u
LkpTT05FbmNvZGVyKToKKyAgICAiIiJKU09OIGVuY29kZXIgdGhhdCBjYW4gaGFuZGxlIE1vZGlm
aWVyc0FuZEV4cGVjdGF0aW9ucyBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIGRlZmF1bHQo
c2VsZiwgb2JqKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIE1vZGlmaWVyc0FuZEV4cGVj
dGF0aW9ucyk6CisgICAgICAgICAgICByZXR1cm4geyJtb2RpZmllcnMiOiBvYmoubW9kaWZpZXJz
LAorICAgICAgICAgICAgICAgICAgICAiZXhwZWN0YXRpb25zIjogb2JqLmV4cGVjdGF0aW9uc30K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBKU09ORW5jb2Rlci5kZWZhdWx0KHNl
bGYsIG9iaikKKworCitjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKKyAgICAiIiJUZXN0IGV4
cGVjdGF0aW9uIGZpbGVzIGNvbnNpc3Qgb2YgbGluZXMgd2l0aCBzcGVjaWZpY2F0aW9ucyBvZiB3
aGF0CisgICAgdG8gZXhwZWN0IGZyb20gbGF5b3V0IHRlc3QgY2FzZXMuIFRoZSB0ZXN0IGNhc2Vz
IGNhbiBiZSBkaXJlY3RvcmllcworICAgIGluIHdoaWNoIGNhc2UgdGhlIGV4cGVjdGF0aW9ucyBh
cHBseSB0byBhbGwgdGVzdCBjYXNlcyBpbiB0aGF0CisgICAgZGlyZWN0b3J5IGFuZCBhbnkgc3Vi
ZGlyZWN0b3J5LiBUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIGlzIGFsb25nIHRoZQorICAgIGxpbmVz
IG9mOgorCisgICAgICBMYXlvdXRUZXN0cy9mYXN0L2pzL2ZpeG1lLmpzID0gRkFJTAorICAgICAg
TGF5b3V0VGVzdHMvZmFzdC9qcy9mbGFreS5qcyA9IEZBSUwgUEFTUworICAgICAgTGF5b3V0VGVz
dHMvZmFzdC9qcy9jcmFzaC5qcyA9IENSQVNIIFRJTUVPVVQgRkFJTCBQQVNTCisgICAgICAuLi4K
KworICAgIFRvIGFkZCBvdGhlciBvcHRpb25zOgorICAgICAgU0tJUCA6IExheW91dFRlc3RzL2Zh
c3QvanMvbm8tZ29vZC5qcyA9IFRJTUVPVVQgUEFTUworICAgICAgREVCVUcgOiBMYXlvdXRUZXN0
cy9mYXN0L2pzL25vLWdvb2QuanMgPSBUSU1FT1VUIFBBU1MKKyAgICAgIERFQlVHIFNLSVAgOiBM
YXlvdXRUZXN0cy9mYXN0L2pzL25vLWdvb2QuanMgPSBUSU1FT1VUIFBBU1MKKyAgICAgIExJTlVY
IERFQlVHIFNLSVAgOiBMYXlvdXRUZXN0cy9mYXN0L2pzL25vLWdvb2QuanMgPSBUSU1FT1VUIFBB
U1MKKyAgICAgIERFRkVSIExJTlVYIFdJTiA6IExheW91dFRlc3RzL2Zhc3QvanMvbm8tZ29vZC5q
cyA9IFRJTUVPVVQgUEFTUworCisgICAgU0tJUDogRG9lc24ndCBydW4gdGhlIHRlc3QuCisgICAg
U0xPVzogVGhlIHRlc3QgdGFrZXMgYSBsb25nIHRpbWUgdG8gcnVuLCBidXQgZG9lcyBub3QgdGlt
ZW91dCBpbmRlZmluaXRlbHkuCisgICAgV09OVEZJWDogRm9yIHRlc3RzIHRoYXQgd2UgbmV2ZXIg
aW50ZW5kIHRvIHBhc3Mgb24gYSBnaXZlbiBwbGF0Zm9ybS4KKyAgICBERUZFUjogVGVzdCBkb2Vz
IG5vdCBjb3VudCBpbiBvdXIgc3RhdGlzdGljcyBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZS4KKyAg
ICBERUJVRzogRXhwZWN0YXRpb25zIGFwcGx5IG9ubHkgdG8gdGhlIGRlYnVnIGJ1aWxkLgorICAg
IFJFTEVBU0U6IEV4cGVjdGF0aW9ucyBhcHBseSBvbmx5IHRvIHJlbGVhc2UgYnVpbGQuCisgICAg
TElOVVgvV0lOL1dJTi1YUC9XSU4tVklTVEEvV0lOLTcvTUFDOiBFeHBlY3RhdGlvbnMgYXBwbHkg
b25seSB0byB0aGVzZQorICAgICAgICBwbGF0Zm9ybXMuCisKKyAgICBOb3RlczoKKyAgICAgIC1B
IHRlc3QgY2Fubm90IGJlIGJvdGggU0xPVyBhbmQgVElNRU9VVAorICAgICAgLUEgdGVzdCBjYW5u
b3QgYmUgYm90aCBERUZFUiBhbmQgV09OVEZJWAorICAgICAgLUEgdGVzdCBzaG91bGQgb25seSBi
ZSBvbmUgb2YgSU1BR0UsIFRFWFQsIElNQUdFK1RFWFQsIG9yIEZBSUwuIEZBSUwgaXMKKyAgICAg
ICBhIG1pZ3JhdG9yeSBzdGF0ZSB0aGF0IGN1cnJlbnRseSBtZWFucyBlaXRoZXIgSU1BR0UsIFRF
WFQsIG9yCisgICAgICAgSU1BR0UrVEVYVC4gT25jZSB3ZSBoYXZlIGZpbmlzaGVkIG1pZ3JhdGlu
ZyB0aGUgZXhwZWN0YXRpb25zLCB3ZSB3aWxsCisgICAgICAgY2hhbmdlIEZBSUwgdG8gaGF2ZSB0
aGUgbWVhbmluZyBvZiBJTUFHRStURVhUIGFuZCByZW1vdmUgdGhlIElNQUdFK1RFWFQKKyAgICAg
ICBpZGVudGlmaWVyLgorICAgICAgLUEgdGVzdCBjYW4gYmUgaW5jbHVkZWQgdHdpY2UsIGJ1dCBu
b3QgdmlhIHRoZSBzYW1lIHBhdGguCisgICAgICAtSWYgYSB0ZXN0IGlzIGluY2x1ZGVkIHR3aWNl
LCB0aGVuIHRoZSBtb3JlIHByZWNpc2UgcGF0aCB3aW5zLgorICAgICAgLUNSQVNIIHRlc3RzIGNh
bm5vdCBiZSBERUZFUiBvciBXT05URklYCisgICAgIiIiCisKKyAgICBFWFBFQ1RBVElPTlMgPSB7
J3Bhc3MnOiBQQVNTLAorICAgICAgICAgICAgICAgICAgICAnZmFpbCc6IEZBSUwsCisgICAgICAg
ICAgICAgICAgICAgICd0ZXh0JzogVEVYVCwKKyAgICAgICAgICAgICAgICAgICAgJ2ltYWdlJzog
SU1BR0UsCisgICAgICAgICAgICAgICAgICAgICdpbWFnZSt0ZXh0JzogSU1BR0VfUExVU19URVhU
LAorICAgICAgICAgICAgICAgICAgICAndGltZW91dCc6IFRJTUVPVVQsCisgICAgICAgICAgICAg
ICAgICAgICdjcmFzaCc6IENSQVNILAorICAgICAgICAgICAgICAgICAgICAnbWlzc2luZyc6IE1J
U1NJTkd9CisKKyAgICBFWFBFQ1RBVElPTl9ERVNDUklQVElPTlMgPSB7U0tJUDogKCdza2lwcGVk
JywgJ3NraXBwZWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFTUzogKCdw
YXNzJywgJ3Bhc3NlcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOiAo
J2ZhaWx1cmUnLCAnZmFpbHVyZXMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEVYVDogKCd0ZXh0IGRpZmYgbWlzbWF0Y2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3RleHQgZGlmZiBtaXNtYXRjaCcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJTUFHRTogKCdpbWFnZSBtaXNtYXRjaCcsICdpbWFnZSBtaXNtYXRjaCcpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9QTFVTX1RFWFQ6ICgnaW1hZ2Ug
YW5kIHRleHQgbWlzbWF0Y2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnaW1hZ2UgYW5kIHRleHQgbWlzbWF0Y2gnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1JBU0g6ICgndGVzdCBzaGVsbCBjcmFzaCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qgc2hlbGwgY3Jhc2hlcycpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FT1VUOiAoJ3Rlc3QgdGltZWQgb3V0Jywg
J3Rlc3RzIHRpbWVkIG91dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVNT
SU5HOiAoJ25vIGV4cGVjdGVkIHJlc3VsdCBmb3VuZCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnbm8gZXhwZWN0ZWQgcmVzdWx0cyBmb3VuZCcpfQorCisgICAg
RVhQRUNUQVRJT05fT1JERVIgPSAoUEFTUywgQ1JBU0gsIFRJTUVPVVQsIE1JU1NJTkcsIElNQUdF
X1BMVVNfVEVYVCwKKyAgICAgICBURVhULCBJTUFHRSwgRkFJTCwgU0tJUCkKKworICAgIEJBU0Vf
UExBVEZPUk1TID0gKCdsaW51eCcsICdtYWMnLCAnd2luJykKKyAgICBQTEFURk9STVMgPSBCQVNF
X1BMQVRGT1JNUyArICgnd2luLXhwJywgJ3dpbi12aXN0YScsICd3aW4tNycpCisKKyAgICBCVUlM
RF9UWVBFUyA9ICgnZGVidWcnLCAncmVsZWFzZScpCisKKyAgICBNT0RJRklFUlMgPSB7J3NraXAn
OiBTS0lQLAorICAgICAgICAgICAgICAgICAnd29udGZpeCc6IFdPTlRGSVgsCisgICAgICAgICAg
ICAgICAgICdkZWZlcic6IERFRkVSLAorICAgICAgICAgICAgICAgICAnc2xvdyc6IFNMT1csCisg
ICAgICAgICAgICAgICAgICdyZWJhc2VsaW5lJzogUkVCQVNFTElORSwKKyAgICAgICAgICAgICAg
ICAgJ25vbmUnOiBOT05FfQorCisgICAgVElNRUxJTkVTID0geyd3b250Zml4JzogV09OVEZJWCwK
KyAgICAgICAgICAgICAgICAgJ25vdyc6IE5PVywKKyAgICAgICAgICAgICAgICAgJ2RlZmVyJzog
REVGRVJ9CisKKyAgICBSRVNVTFRfVFlQRVMgPSB7J3NraXAnOiBTS0lQLAorICAgICAgICAgICAg
ICAgICAgICAncGFzcyc6IFBBU1MsCisgICAgICAgICAgICAgICAgICAgICdmYWlsJzogRkFJTCwK
KyAgICAgICAgICAgICAgICAgICAgJ2ZsYWt5JzogRkxBS1l9CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcGF0aCwgZnVsbF90ZXN0X2xpc3QsIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLAorICAg
ICAgICBpc19saW50X21vZGUsIGV4cGVjdGF0aW9uc19hc19zdHI9Tm9uZSwgc3VwcHJlc3NfZXJy
b3JzPUZhbHNlLAorICAgICAgICB0ZXN0c19hcmVfcHJlc2VudD1UcnVlKToKKyAgICAgICAgIiIi
CisgICAgICAgIHBhdGg6IFRoZSBwYXRoIHRvIHRoZSBleHBlY3RhdGlvbiBmaWxlLiBBbiBlcnJv
ciBpcyB0aHJvd24gaWYgYSB0ZXN0IGlzCisgICAgICAgICAgICBsaXN0ZWQgbW9yZSB0aGFuIG9u
Y2UuCisgICAgICAgIGZ1bGxfdGVzdF9saXN0OiBUaGUgbGlzdCBvZiBhbGwgdGVzdHMgdG8gYmUg
cnVuIHBlbmRpbmcgcHJvY2Vzc2luZyBvZgorICAgICAgICAgICAgdGhlIGV4cGVjdGlvbnMgZm9y
IHRob3NlIHRlc3RzLgorICAgICAgICBwbGF0Zm9ybTogV2hpY2ggcGxhdGZvcm0gZnJvbSBzZWxm
LlBMQVRGT1JNUyB0byBmaWx0ZXIgdGVzdHMgZm9yLgorICAgICAgICBpc19kZWJ1Z19tb2RlOiBX
aGV0aGVyIHdlIHRlc3RpbmcgYSB0ZXN0X3NoZWxsIGJ1aWx0IGRlYnVnIG1vZGUuCisgICAgICAg
IGlzX2xpbnRfbW9kZTogV2hldGhlciB0aGlzIGlzIGp1c3QgbGludGluZyB0ZXN0X2V4cGVjYXRh
dGlvbnMudHh0LgorICAgICAgICBleHBlY3RhdGlvbnNfYXNfc3RyOiBDb250ZW50cyBvZiB0aGUg
ZXhwZWN0YXRpb25zIGZpbGUuIFVzZWQgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIHBhdGgu
IFRoaXMgbWFrZXMgdW5pdHRlc3Rpbmcgc2FuZS4KKyAgICAgICAgc3VwcHJlc3NfZXJyb3JzOiBX
aGV0aGVyIHRvIHN1cHByZXNzIGxpbnQgZXJyb3JzLgorICAgICAgICB0ZXN0c19hcmVfcHJlc2Vu
dDogV2hldGhlciB0aGUgdGVzdCBmaWxlcyBhcmUgcHJlc2VudCBpbiB0aGUgbG9jYWwKKyAgICAg
ICAgICAgIGZpbGVzeXN0ZW0uIFRoZSBMVFRGIERhc2hib2FyZCB1c2VzIEZhbHNlIGhlcmUgdG8g
YXZvaWQgaGF2aW5nIHRvCisgICAgICAgICAgICBrZWVwIGEgbG9jYWwgY29weSBvZiB0aGUgdHJl
ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKyAgICAgICAgc2Vs
Zi5fZXhwZWN0YXRpb25zX2FzX3N0ciA9IGV4cGVjdGF0aW9uc19hc19zdHIKKyAgICAgICAgc2Vs
Zi5faXNfbGludF9tb2RlID0gaXNfbGludF9tb2RlCisgICAgICAgIHNlbGYuX3Rlc3RzX2FyZV9w
cmVzZW50ID0gdGVzdHNfYXJlX3ByZXNlbnQKKyAgICAgICAgc2VsZi5fZnVsbF90ZXN0X2xpc3Qg
PSBmdWxsX3Rlc3RfbGlzdAorICAgICAgICBzZWxmLl9zdXBwcmVzc19lcnJvcnMgPSBzdXBwcmVz
c19lcnJvcnMKKyAgICAgICAgc2VsZi5fZXJyb3JzID0gW10KKyAgICAgICAgc2VsZi5fbm9uX2Zh
dGFsX2Vycm9ycyA9IFtdCisgICAgICAgIHNlbGYuX3BsYXRmb3JtID0gc2VsZi5Ub1Rlc3RQbGF0
Zm9ybU5hbWUocGxhdGZvcm0pCisgICAgICAgIGlmIHNlbGYuX3BsYXRmb3JtIGlzIE5vbmU6Cisg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gcGxhdGZvcm0gJyVzJyIgJSAocGxh
dGZvcm0pKQorICAgICAgICBzZWxmLl9pc19kZWJ1Z19tb2RlID0gaXNfZGVidWdfbW9kZQorCisg
ICAgICAgICMgTWFwcyByZWxhdGl2ZSB0ZXN0IHBhdGhzIGFzIGxpc3RlZCBpbiB0aGUgZXhwZWN0
YXRpb25zIGZpbGUgdG8gYQorICAgICAgICAjIGxpc3Qgb2YgbWFwcyBjb250YWluaW5nIG1vZGlm
aWVycyBhbmQgZXhwZWN0YXRpb25zIGZvciBlYWNoIHRpbWUKKyAgICAgICAgIyB0aGUgdGVzdCBp
cyBsaXN0ZWQgaW4gdGhlIGV4cGVjdGF0aW9ucyBmaWxlLgorICAgICAgICBzZWxmLl9hbGxfZXhw
ZWN0YXRpb25zID0ge30KKworICAgICAgICAjIE1hcHMgYSB0ZXN0IHRvIGl0cyBsaXN0IG9mIGV4
cGVjdGF0aW9ucy4KKyAgICAgICAgc2VsZi5fdGVzdF90b19leHBlY3RhdGlvbnMgPSB7fQorCisg
ICAgICAgICMgTWFwcyBhIHRlc3QgdG8gaXRzIGxpc3Qgb2Ygb3B0aW9ucyAoc3RyaW5nIHZhbHVl
cykKKyAgICAgICAgc2VsZi5fdGVzdF90b19vcHRpb25zID0ge30KKworICAgICAgICAjIE1hcHMg
YSB0ZXN0IHRvIGl0cyBsaXN0IG9mIG1vZGlmaWVyczogdGhlIGNvbnN0YW50cyBhc3NvY2lhdGVk
IHdpdGgKKyAgICAgICAgIyB0aGUgb3B0aW9ucyBtaW51cyBhbnkgYnVnIG9yIHBsYXRmb3JtIHN0
cmluZ3MKKyAgICAgICAgc2VsZi5fdGVzdF90b19tb2RpZmllcnMgPSB7fQorCisgICAgICAgICMg
TWFwcyBhIHRlc3QgdG8gdGhlIGJhc2UgcGF0aCB0aGF0IGl0IHdhcyBsaXN0ZWQgd2l0aCBpbiB0
aGUgbGlzdC4KKyAgICAgICAgc2VsZi5fdGVzdF9saXN0X3BhdGhzID0ge30KKworICAgICAgICBz
ZWxmLl9tb2RpZmllcl90b190ZXN0cyA9IHNlbGYuX0RpY3RPZlNldHMoc2VsZi5NT0RJRklFUlMp
CisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uX3RvX3Rlc3RzID0gc2VsZi5fRGljdE9mU2V0cyhz
ZWxmLkVYUEVDVEFUSU9OUykKKyAgICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxm
Ll9EaWN0T2ZTZXRzKHNlbGYuVElNRUxJTkVTKQorICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90
b190ZXN0cyA9IHNlbGYuX0RpY3RPZlNldHMoc2VsZi5SRVNVTFRfVFlQRVMpCisKKyAgICAgICAg
c2VsZi5fUmVhZChzZWxmLl9HZXRJdGVyYWJsZUV4cGVjdGF0aW9ucygpKQorCisgICAgZGVmIF9E
aWN0T2ZTZXRzKHNlbGYsIHN0cmluZ3NfdG9fY29uc3RhbnRzKToKKyAgICAgICAgIiIiVGFrZXMg
YSBkaWN0IG9mIHN0cmluZ3MtPmNvbnN0YW50cyBhbmQgcmV0dXJucyBhIGRpY3QgbWFwcGluZwor
ICAgICAgICBlYWNoIGNvbnN0YW50IHRvIGFuIGVtcHR5IHNldC4iIiIKKyAgICAgICAgZCA9IHt9
CisgICAgICAgIGZvciBjIGluIHN0cmluZ3NfdG9fY29uc3RhbnRzLnZhbHVlcygpOgorICAgICAg
ICAgICAgZFtjXSA9IHNldCgpCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgX0dldEl0ZXJh
YmxlRXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGFuIG9iamVjdCB0aGF0
IGNhbiBiZSBpdGVyYXRlZCBvdmVyLiBBbGxvd3MgZm9yIG5vdCBjYXJpbmcKKyAgICAgICAgYWJv
dXQgd2hldGhlciB3ZSdyZSBpdGVyYXRpbmcgb3ZlciBhIGZpbGUgb3IgYSBuZXctbGluZSBzZXBh
cmF0ZWQKKyAgICAgICAgc3RyaW5nLiIiIgorICAgICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnNf
YXNfc3RyOgorICAgICAgICAgICAgaXRlcmFibGUgPSBbeCArICJcbiIgZm9yIHggaW4KKyAgICAg
ICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNfYXNfc3RyLnNwbGl0KCJcbiIpXQorICAgICAg
ICAgICAgIyBTdHJpcCBmaW5hbCBlbnRyeSBpZiBpdCdzIGVtcHR5IHRvIGF2b2lkIGFkZGVkIGlu
IGFuIGV4dHJhCisgICAgICAgICAgICAjIG5ld2xpbmUuCisgICAgICAgICAgICBpZiBpdGVyYWJs
ZVtsZW4oaXRlcmFibGUpIC0gMV0gPT0gIlxuIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRl
cmFibGVbOmxlbihpdGVyYWJsZSkgLSAxXQorICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3BlbihzZWxmLl9wYXRoKQorCisgICAg
ZGVmIFRvVGVzdFBsYXRmb3JtTmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyB0
aGUgdGVzdCBleHBlY3RhdGlvbiBwbGF0Zm9ybSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYQorICAg
ICAgICBnaXZlbiBwbGF0Zm9ybSBuYW1lLCBvciBOb25lIGlmIHRoZXJlIGlzIG5vIG1hdGNoLiIi
IgorICAgICAgICBjaHJvbWl1bV9wcmVmaXggPSAnY2hyb21pdW0tJworICAgICAgICBuYW1lID0g
bmFtZS5sb3dlcigpCisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChjaHJvbWl1bV9wcmVmaXgp
OgorICAgICAgICAgICAgbmFtZSA9IG5hbWVbbGVuKGNocm9taXVtX3ByZWZpeCk6XQorICAgICAg
ICBpZiBuYW1lIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBHZXRUZXN0U2V0KHNlbGYsIG1vZGlmaWVyLCBl
eHBlY3RhdGlvbj1Ob25lLCBpbmNsdWRlX3NraXBzPVRydWUpOgorICAgICAgICBpZiBleHBlY3Rh
dGlvbiBpcyBOb25lOgorICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9tb2RpZmllcl90b190ZXN0
c1ttb2RpZmllcl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RzID0gKHNlbGYuX2V4
cGVjdGF0aW9uX3RvX3Rlc3RzW2V4cGVjdGF0aW9uXSAmCisgICAgICAgICAgICAgICAgc2VsZi5f
bW9kaWZpZXJfdG9fdGVzdHNbbW9kaWZpZXJdKQorCisgICAgICAgIGlmIG5vdCBpbmNsdWRlX3Nr
aXBzOgorICAgICAgICAgICAgdGVzdHMgPSB0ZXN0cyAtIHNlbGYuR2V0VGVzdFNldChTS0lQLCBl
eHBlY3RhdGlvbikKKworICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRlZiBHZXRUZXN0c1dp
dGhSZXN1bHRUeXBlKHNlbGYsIHJlc3VsdF90eXBlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jl
c3VsdF90eXBlX3RvX3Rlc3RzW3Jlc3VsdF90eXBlXQorCisgICAgZGVmIEdldFRlc3RzV2l0aFRp
bWVsaW5lKHNlbGYsIHRpbWVsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWVsaW5lX3Rv
X3Rlc3RzW3RpbWVsaW5lXQorCisgICAgZGVmIEdldE9wdGlvbnMoc2VsZiwgdGVzdCk6CisgICAg
ICAgICIiIlRoaXMgcmV0dXJucyB0aGUgZW50aXJlIHNldCBvZiBvcHRpb25zIGZvciB0aGUgZ2l2
ZW4gdGVzdAorICAgICAgICAodGhlIG1vZGlmaWVycyBwbHVzIHRoZSBCVUdYWFhYIGlkZW50aWZp
ZXIpLiBUaGlzIGlzIHVzZWQgYnkgdGhlCisgICAgICAgIExUVEYgZGFzaGJvYXJkLiIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fdGVzdF90b19vcHRpb25zW3Rlc3RdCisKKyAgICBkZWYgSGFzTW9k
aWZpZXIoc2VsZiwgdGVzdCwgbW9kaWZpZXIpOgorICAgICAgICByZXR1cm4gdGVzdCBpbiBzZWxm
Ll9tb2RpZmllcl90b190ZXN0c1ttb2RpZmllcl0KKworICAgIGRlZiBHZXRFeHBlY3RhdGlvbnMo
c2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9uc1t0
ZXN0XQorCisgICAgZGVmIEdldEV4cGVjdGF0aW9uc0pzb25Gb3JBbGxQbGF0Zm9ybXMoc2VsZik6
CisgICAgICAgICMgU3BlY2lmeSBzZXBhcmF0b3JzIGluIG9yZGVyIHRvIGdldCBjb21wYWN0IGVu
Y29kaW5nLgorICAgICAgICByZXR1cm4gRXhwZWN0YXRpb25zSnNvbkVuY29kZXIoc2VwYXJhdG9y
cz0oJywnLCAnOicpKS5lbmNvZGUoCisgICAgICAgICAgICBzZWxmLl9hbGxfZXhwZWN0YXRpb25z
KQorCisgICAgZGVmIENvbnRhaW5zKHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4gdGVzdCBp
biBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9ucworCisgICAgZGVmIFJlbW92ZVBsYXRmb3JtRnJv
bUZpbGUoc2VsZiwgdGVzdHMsIHBsYXRmb3JtLCBiYWNrdXA9RmFsc2UpOgorICAgICAgICAiIiJS
ZW1vdmUgdGhlIHBsYXRmb3JtIG9wdGlvbiBmcm9tIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuCisK
KyAgICAgICAgSWYgYSB0ZXN0IGlzIGluIHRoZSB0ZXN0IGxpc3QgYW5kIGhhcyBhbiBvcHRpb24g
dGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBwbGF0Zm9ybSwgcmVtb3ZlIHRoZSBtYXRj
aGluZyBwbGF0Zm9ybSBhbmQgc2F2ZSB0aGUgdXBkYXRlZCB0ZXN0IGJhY2sKKyAgICAgICAgdG8g
dGhlIGZpbGUuIElmIG5vIG90aGVyIHBsYXRmb3JtcyByZW1haW5pbmcgYWZ0ZXIgcmVtb3ZhbCwg
ZGVsZXRlIHRoZQorICAgICAgICB0ZXN0IGZyb20gdGhlIGZpbGUuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICB0ZXN0czogbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgdG8gdXBkYXRlLi4KKyAg
ICAgICAgICBwbGF0Zm9ybTogd2hpY2ggcGxhdGZvcm0gb3B0aW9uIHRvIHJlbW92ZS4KKyAgICAg
ICAgICBiYWNrdXA6IGlmIHRydWUsIHRoZSBvcmlnaW5hbCB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxl
IGlzIHNhdmVkIGFzCisgICAgICAgICAgICAgICAgICBbc2VsZi5URVNUX0xJU1RdLm9yaWcuWVlZ
WU1NRERISE1NU1MKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIG5vCisgICAgICAgICIi
IgorCisgICAgICAgIG5ld19maWxlID0gc2VsZi5fcGF0aCArICcubmV3JworICAgICAgICBsb2dn
aW5nLmRlYnVnKCdPcmlnaW5hbCBmaWxlOiAiJXMiJywgc2VsZi5fcGF0aCkKKyAgICAgICAgbG9n
Z2luZy5kZWJ1ZygnTmV3IGZpbGU6ICIlcyInLCBuZXdfZmlsZSkKKyAgICAgICAgZl9vcmlnID0g
c2VsZi5fR2V0SXRlcmFibGVFeHBlY3RhdGlvbnMoKQorICAgICAgICBmX25ldyA9IG9wZW4obmV3
X2ZpbGUsICd3JykKKworICAgICAgICB0ZXN0c19yZW1vdmVkID0gMAorICAgICAgICB0ZXN0c191
cGRhdGVkID0gMAorICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgIGZvciBsaW5lIGluIGZfb3Jp
ZzoKKyAgICAgICAgICAgIGxpbmVubyArPSAxCisgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9H
ZXRQbGF0Zm9ybVVwZGF0ZUFjdGlvbihsaW5lLCBsaW5lbm8sIHRlc3RzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisgICAgICAg
ICAgICBpZiBhY3Rpb24gPT0gTk9fQ0hBTkdFOgorICAgICAgICAgICAgICAgICMgU2F2ZSB0aGUg
b3JpZ2luYWwgbGluZSBiYWNrIHRvIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnTm8gY2hhbmdlIHRvIHRlc3Q6ICVzJywgbGluZSkKKyAgICAgICAgICAgICAgICBmX25l
dy53cml0ZShsaW5lKQorICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gUkVNT1ZFX1RFU1Q6Cisg
ICAgICAgICAgICAgICAgdGVzdHNfcmVtb3ZlZCArPSAxCisgICAgICAgICAgICAgICAgbG9nZ2lu
Zy5pbmZvKCdUZXN0IHJlbW92ZWQ6ICVzJywgbGluZSkKKyAgICAgICAgICAgIGVsaWYgYWN0aW9u
ID09IFJFTU9WRV9QTEFURk9STToKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQo
JzonKQorICAgICAgICAgICAgICAgIG5ld19vcHRpb25zID0gcGFydHNbMF0ucmVwbGFjZShwbGF0
Zm9ybS51cHBlcigpICsgJyAnLCAnJywgMSkKKyAgICAgICAgICAgICAgICBuZXdfbGluZSA9ICgn
JXM6JXMnICUgKG5ld19vcHRpb25zLCBwYXJ0c1sxXSkpCisgICAgICAgICAgICAgICAgZl9uZXcu
d3JpdGUobmV3X2xpbmUpCisgICAgICAgICAgICAgICAgdGVzdHNfdXBkYXRlZCArPSAxCisgICAg
ICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdUZXN0IHVwZGF0ZWQ6ICcpCisgICAgICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCcgIG9sZDogJXMnLCBsaW5lKQorICAgICAgICAgICAgICAgIGxvZ2dp
bmcuaW5mbygnICBuZXc6ICVzJywgbmV3X2xpbmUpCisgICAgICAgICAgICBlbGlmIGFjdGlvbiA9
PSBBRERfUExBVEZPUk1TX0VYQ0VQVF9USElTOgorICAgICAgICAgICAgICAgIHBhcnRzID0gbGlu
ZS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgbmV3X29wdGlvbnMgPSBwYXJ0c1swXQorICAg
ICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgICAgICAg
ICBpZiBub3QgcCA9PSBwbGF0Zm9ybToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19vcHRp
b25zICs9IHAudXBwZXIoKSArICcgJworICAgICAgICAgICAgICAgIG5ld19saW5lID0gKCclczol
cycgJSAobmV3X29wdGlvbnMsIHBhcnRzWzFdKSkKKyAgICAgICAgICAgICAgICBmX25ldy53cml0
ZShuZXdfbGluZSkKKyAgICAgICAgICAgICAgICB0ZXN0c191cGRhdGVkICs9IDEKKyAgICAgICAg
ICAgICAgICBsb2dnaW5nLmluZm8oJ1Rlc3QgdXBkYXRlZDogJykKKyAgICAgICAgICAgICAgICBs
b2dnaW5nLmluZm8oJyAgb2xkOiAlcycsIGxpbmUpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCcgIG5ldzogJXMnLCBuZXdfbGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgbG9nZ2luZy5lcnJvcignVW5rbm93biB1cGRhdGUgYWN0aW9uOiAlZDsgbGluZTogJXMn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBsaW5lKQorCisgICAgICAg
IGxvZ2dpbmcuaW5mbygnVG90YWwgdGVzdHMgcmVtb3ZlZDogJWQnLCB0ZXN0c19yZW1vdmVkKQor
ICAgICAgICBsb2dnaW5nLmluZm8oJ1RvdGFsIHRlc3RzIHVwZGF0ZWQ6ICVkJywgdGVzdHNfdXBk
YXRlZCkKKworICAgICAgICBmX29yaWcuY2xvc2UoKQorICAgICAgICBmX25ldy5jbG9zZSgpCisK
KyAgICAgICAgaWYgYmFja3VwOgorICAgICAgICAgICAgZGF0ZV9zdWZmaXggPSB0aW1lLnN0cmZ0
aW1lKCclWSVtJWQlSCVNJVMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWUubG9jYWx0aW1lKHRpbWUudGltZSgpKSkKKyAgICAgICAgICAgIGJhY2t1cF9maWxl
ID0gKCclcy5vcmlnLiVzJyAlIChzZWxmLl9wYXRoLCBkYXRlX3N1ZmZpeCkpCisgICAgICAgICAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhiYWNrdXBfZmlsZSk6CisgICAgICAgICAgICAgICAgb3MucmVt
b3ZlKGJhY2t1cF9maWxlKQorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdTYXZpbmcgb3JpZ2lu
YWwgZmlsZSB0byAiJXMiJywgYmFja3VwX2ZpbGUpCisgICAgICAgICAgICBvcy5yZW5hbWUoc2Vs
Zi5fcGF0aCwgYmFja3VwX2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5yZW1v
dmUoc2VsZi5fcGF0aCkKKworICAgICAgICBsb2dnaW5nLmRlYnVnKCdTYXZpbmcgbmV3IGZpbGUg
dG8gIiVzIicsIHNlbGYuX3BhdGgpCisgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZSwgc2VsZi5f
cGF0aCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBQYXJzZUV4cGVjdGF0aW9uc0xp
bmUoc2VsZiwgbGluZSwgbGluZW5vKToKKyAgICAgICAgIiIiUGFyc2VzIGEgbGluZSBmcm9tIHRl
c3RfZXhwZWN0YXRpb25zLnR4dCBhbmQgcmV0dXJucyBhIHR1cGxlCisgICAgICAgIHdpdGggdGhl
IHRlc3QgcGF0aCwgb3B0aW9ucyBhcyBhIGxpc3QsIGV4cGVjdGF0aW9ucyBhcyBhIGxpc3QuIiIi
CisgICAgICAgIGxpbmUgPSBTdHJpcENvbW1lbnRzKGxpbmUpCisgICAgICAgIGlmIG5vdCBsaW5l
OgorICAgICAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBOb25lKQorCisgICAgICAgIG9wdGlv
bnMgPSBbXQorICAgICAgICBpZiBsaW5lLmZpbmQoIjoiKSBpcyAtMToKKyAgICAgICAgICAgIHRl
c3RfYW5kX2V4cGVjdGF0aW9uID0gbGluZS5zcGxpdCgiPSIpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgb3B0aW9ucyA9IHNl
bGYuX0dldE9wdGlvbnNMaXN0KHBhcnRzWzBdKQorICAgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0
YXRpb24gPSBwYXJ0c1sxXS5zcGxpdCgnPScpCisKKyAgICAgICAgdGVzdCA9IHRlc3RfYW5kX2V4
cGVjdGF0aW9uWzBdLnN0cmlwKCkKKyAgICAgICAgaWYgKGxlbih0ZXN0X2FuZF9leHBlY3RhdGlv
bikgaXMgbm90IDIpOgorICAgICAgICAgICAgc2VsZi5fQWRkRXJyb3IobGluZW5vLCAiTWlzc2lu
ZyBleHBlY3RhdGlvbnMuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYW5kX2V4
cGVjdGF0aW9uKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zID0gTm9uZQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgZXhwZWN0YXRpb25zID0gc2VsZi5fR2V0T3B0aW9uc0xpc3QodGVzdF9h
bmRfZXhwZWN0YXRpb25bMV0pCisKKyAgICAgICAgcmV0dXJuICh0ZXN0LCBvcHRpb25zLCBleHBl
Y3RhdGlvbnMpCisKKyAgICBkZWYgX0dldFBsYXRmb3JtVXBkYXRlQWN0aW9uKHNlbGYsIGxpbmUs
IGxpbmVubywgdGVzdHMsIHBsYXRmb3JtKToKKyAgICAgICAgIiIiQ2hlY2sgdGhlIHBsYXRmb3Jt
IG9wdGlvbiBhbmQgcmV0dXJuIHRoZSBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4uCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBsaW5lOiBjdXJyZW50IGxpbmUgaW4gdGVzdCBleHBlY3RhdGlv
bnMgZmlsZS4KKyAgICAgICAgICBsaW5lbm86IGN1cnJlbnQgbGluZSBudW1iZXIgb2YgbGluZQor
ICAgICAgICAgIHRlc3RzOiBsaXN0IG9mIHRlc3RzIHRoYXQgbmVlZCB0byB1cGRhdGUuLgorICAg
ICAgICAgIHBsYXRmb3JtOiB3aGljaCBwbGF0Zm9ybSBvcHRpb24gdG8gcmVtb3ZlLgorCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgTk9fQ0hBTkdFOiBubyBjaGFuZ2UgdG8gdGhlIGxpbmUg
KGNvbW1lbnRzLCB0ZXN0IG5vdCBpbiB0aGUgbGlzdCBldGMpCisgICAgICAgICAgUkVNT1ZFX1RF
U1Q6IHJlbW92ZSB0aGUgdGVzdCBmcm9tIGZpbGUuCisgICAgICAgICAgUkVNT1ZFX1BMQVRGT1JN
OiByZW1vdmUgdGhpcyBwbGF0Zm9ybSBvcHRpb24gZnJvbSB0aGUgdGVzdC4KKyAgICAgICAgICBB
RERfUExBVEZPUk1TX0VYQ0VQVF9USElTOiBhZGQgYWxsIHRoZSBwbGF0Zm9ybXMgZXhjZXB0IHRo
aXMgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdCwgb3B0aW9ucywgZXhwZWN0YXRpb25z
ID0gc2VsZi5QYXJzZUV4cGVjdGF0aW9uc0xpbmUobGluZSwgbGluZW5vKQorICAgICAgICBpZiBu
b3QgdGVzdCBvciB0ZXN0IG5vdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHJldHVybiBOT19DSEFO
R0UKKworICAgICAgICBoYXNfYW55X3BsYXRmb3JtID0gRmFsc2UKKyAgICAgICAgZm9yIG9wdGlv
biBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgb3B0aW9uIGluIHNlbGYuUExBVEZPUk1TOgor
ICAgICAgICAgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBUcnVlCisgICAgICAgICAgICAgICAg
aWYgbm90IG9wdGlvbiA9PSBwbGF0Zm9ybToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJF
TU9WRV9QTEFURk9STQorCisgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gcGxhdGZvcm0gc3BlY2lm
aWVkLCB0aGVuIGl0IG1lYW5zIGFwcGx5IHRvIGFsbAorICAgICAgICAjIHBsYXRmb3Jtcy4gUmV0
dXJuIHRoZSBhY3Rpb24gdG8gYWRkIGFsbCB0aGUgcGxhdGZvcm1zIGV4Y2VwdCB0aGlzCisgICAg
ICAgICMgb25lLgorICAgICAgICBpZiBub3QgaGFzX2FueV9wbGF0Zm9ybToKKyAgICAgICAgICAg
IHJldHVybiBBRERfUExBVEZPUk1TX0VYQ0VQVF9USElTCisKKyAgICAgICAgcmV0dXJuIFJFTU9W
RV9URVNUCisKKyAgICBkZWYgX0hhc1ZhbGlkTW9kaWZpZXJzRm9yQ3VycmVudFBsYXRmb3JtKHNl
bGYsIG9wdGlvbnMsIGxpbmVubywKKyAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb25zLCBtb2Rp
ZmllcnMpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgcGxhdGZvcm0g
aXMgaW4gdGhlIG9wdGlvbnMgbGlzdCBvciBpZgorICAgICAgICBubyBwbGF0Zm9ybXMgYXJlIGxp
c3RlZCBhbmQgaWYgdGhlcmUgYXJlIG5vIGZhdGFsIGVycm9ycyBpbiB0aGUKKyAgICAgICAgb3B0
aW9ucyBsaXN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgb3B0aW9uczogTGlzdCBvZiBs
b3dlcmNhc2Ugb3B0aW9ucy4KKyAgICAgICAgICBsaW5lbm86IFRoZSBsaW5lIGluIHRoZSBmaWxl
IHdoZXJlIHRoZSB0ZXN0IGlzIGxpc3RlZC4KKyAgICAgICAgICB0ZXN0X2FuZF9leHBlY3RhdGlv
bnM6IFRoZSBwYXRoIGFuZCBleHBlY3RhdGlvbnMgZm9yIHRoZSB0ZXN0LgorICAgICAgICAgIG1v
ZGlmaWVyczogVGhlIHNldCB0byBwb3B1bGF0ZSB3aXRoIG1vZGlmaWVycy4KKyAgICAgICAgIiIi
CisgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBGYWxzZQorICAgICAgICBoYXNfYnVnX2lkID0g
RmFsc2UKKyAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgb3B0
aW9uIGluIHNlbGYuTU9ESUZJRVJTOgorICAgICAgICAgICAgICAgIG1vZGlmaWVycy5hZGQob3B0
aW9uKQorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5QTEFURk9STVM6CisgICAgICAg
ICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgb3B0aW9u
LnN0YXJ0c3dpdGgoJ2J1ZycpOgorICAgICAgICAgICAgICAgIGhhc19idWdfaWQgPSBUcnVlCisg
ICAgICAgICAgICBlbGlmIG9wdGlvbiBub3QgaW4gc2VsZi5CVUlMRF9UWVBFUzoKKyAgICAgICAg
ICAgICAgICBzZWxmLl9BZGRFcnJvcihsaW5lbm8sICdJbnZhbGlkIG1vZGlmaWVyIGZvciB0ZXN0
OiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgdGVzdF9hbmRf
ZXhwZWN0YXRpb25zKQorCisgICAgICAgIGlmIGhhc19hbnlfcGxhdGZvcm0gYW5kIG5vdCBzZWxm
Ll9NYXRjaFBsYXRmb3JtKG9wdGlvbnMpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAg
ICAgICAgaWYgbm90IGhhc19idWdfaWQgYW5kICd3b250Zml4JyBub3QgaW4gb3B0aW9uczoKKyAg
ICAgICAgICAgICMgVE9ETyhvamFuKTogVHVybiB0aGlzIGludG8gYW4gQWRkRXJyb3IgY2FsbCBv
bmNlIGFsbCB0aGUKKyAgICAgICAgICAgICMgdGVzdHMgaGF2ZSBCVUcgaWRlbnRpZmllcnMuCisg
ICAgICAgICAgICBzZWxmLl9Mb2dOb25GYXRhbEVycm9yKGxpbmVubywgJ1Rlc3QgbGFja3MgQlVH
IG1vZGlmaWVyLicsCisgICAgICAgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb25zKQorCisg
ICAgICAgIGlmICdyZWxlYXNlJyBpbiBvcHRpb25zIG9yICdkZWJ1ZycgaW4gb3B0aW9uczoKKyAg
ICAgICAgICAgIGlmIHNlbGYuX2lzX2RlYnVnX21vZGUgYW5kICdkZWJ1Zycgbm90IGluIG9wdGlv
bnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5faXNfZGVidWdfbW9kZSBhbmQgJ3JlbGVhc2UnIG5vdCBpbiBvcHRpb25zOgorICAgICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmICd3b250Zml4JyBpbiBvcHRpb25zIGFu
ZCAnZGVmZXInIGluIG9wdGlvbnM6CisgICAgICAgICAgICBzZWxmLl9BZGRFcnJvcihsaW5lbm8s
ICdUZXN0IGNhbm5vdCBiZSBib3RoIERFRkVSIGFuZCBXT05URklYLicsCisgICAgICAgICAgICAg
ICAgdGVzdF9hbmRfZXhwZWN0YXRpb25zKQorCisgICAgICAgIGlmIHNlbGYuX2lzX2xpbnRfbW9k
ZSBhbmQgJ3JlYmFzZWxpbmUnIGluIG9wdGlvbnM6CisgICAgICAgICAgICBzZWxmLl9BZGRFcnJv
cihsaW5lbm8sICdSRUJBU0VMSU5FIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHJ1bm5pbmcnCisg
ICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmUucHkuIENhbm5vdCBiZSBjaGVja2VkIGluLicsIHRl
c3RfYW5kX2V4cGVjdGF0aW9ucykKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9N
YXRjaFBsYXRmb3JtKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAiIiJNYXRjaCB0aGUgbGlzdCBv
ZiBvcHRpb25zIGFnYWluc3Qgb3VyIHNwZWNpZmllZCBwbGF0Zm9ybS4gSWYgYW55CisgICAgICAg
IG9mIHRoZSBvcHRpb25zIHByZWZpeC1tYXRjaCBzZWxmLl9wbGF0Zm9ybSwgcmV0dXJuIFRydWUu
IFRoaXMgaGFuZGxlcworICAgICAgICB0aGUgY2FzZSB3aGVyZSBhIHRlc3QgaXMgbWFya2VkIFdJ
TiBhbmQgdGhlIHBsYXRmb3JtIGlzIFdJTi1WSVNUQS4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIG9wdGlvbnM6IGxpc3Qgb2Ygb3B0aW9ucworICAgICAgICAiIiIKKyAgICAgICAgZm9yIG9w
dCBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm0uc3RhcnRzd2l0aChv
cHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIF9BZGRUb0FsbEV4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0LCBvcHRpb25zLCBleHBl
Y3RhdGlvbnMpOgorICAgICAgICAjIE1ha2UgYWxsIHBhdGhzIHVuaXgtc3R5bGUgc28gdGhlIGRh
c2hib2FyZCBkb2Vzbid0IG5lZWQgdG8uCisgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ1xc
JywgJy8nKQorICAgICAgICBpZiBub3QgdGVzdCBpbiBzZWxmLl9hbGxfZXhwZWN0YXRpb25zOgor
ICAgICAgICAgICAgc2VsZi5fYWxsX2V4cGVjdGF0aW9uc1t0ZXN0XSA9IFtdCisgICAgICAgIHNl
bGYuX2FsbF9leHBlY3RhdGlvbnNbdGVzdF0uYXBwZW5kKAorICAgICAgICAgICAgTW9kaWZpZXJz
QW5kRXhwZWN0YXRpb25zKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykpCisKKyAgICBkZWYgX1JlYWQo
c2VsZiwgZXhwZWN0YXRpb25zKToKKyAgICAgICAgIiIiRm9yIGVhY2ggdGVzdCBpbiBhbiBleHBl
Y3RhdGlvbnMgaXRlcmFibGUsIGdlbmVyYXRlIHRoZQorICAgICAgICBleHBlY3RhdGlvbnMgZm9y
IGl0LiIiIgorICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgIGZvciBsaW5lIGluIGV4cGVjdGF0
aW9uczoKKyAgICAgICAgICAgIGxpbmVubyArPSAxCisKKyAgICAgICAgICAgIHRlc3RfbGlzdF9w
YXRoLCBvcHRpb25zLCBleHBlY3RhdGlvbnMgPSBcCisgICAgICAgICAgICAgICAgc2VsZi5QYXJz
ZUV4cGVjdGF0aW9uc0xpbmUobGluZSwgbGluZW5vKQorICAgICAgICAgICAgaWYgbm90IGV4cGVj
dGF0aW9uczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzZWxmLl9B
ZGRUb0FsbEV4cGVjdGF0aW9ucyh0ZXN0X2xpc3RfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgIi5qb2luKG9wdGlvbnMpLnVwcGVyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIuam9pbihleHBlY3RhdGlvbnMpLnVwcGVy
KCkpCisKKyAgICAgICAgICAgIG1vZGlmaWVycyA9IHNldCgpCisgICAgICAgICAgICBpZiBvcHRp
b25zIGFuZCBub3Qgc2VsZi5fSGFzVmFsaWRNb2RpZmllcnNGb3JDdXJyZW50UGxhdGZvcm0oCisg
ICAgICAgICAgICAgICAgb3B0aW9ucywgbGluZW5vLCB0ZXN0X2xpc3RfcGF0aCwgbW9kaWZpZXJz
KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBleHBlY3RhdGlvbnMg
PSBzZWxmLl9QYXJzZUV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIGxpbmVubywKKyAgICAgICAg
ICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKworICAgICAgICAgICAgaWYgJ3Nsb3cnIGluIG9wdGlv
bnMgYW5kIFRJTUVPVVQgaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgICAgIHNlbGYuX0Fk
ZEVycm9yKGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgJ0EgdGVzdCBjYW4gbm90IGJlIGJv
dGggc2xvdyBhbmQgdGltZW91dC4gSWYgaXQgdGltZXMgb3V0ICcKKyAgICAgICAgICAgICAgICAg
ICAgJ2luZGVmaW5pdGVseSwgdGhlbiBpdCBzaG91bGQgYmUganVzdCB0aW1lb3V0LicsCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoKQorCisgICAgICAgICAgICBmdWxsX3BhdGgg
PSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5MYXlvdXRUZXN0c0RpcigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoKQorICAgICAgICAgICAgZnVs
bF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChmdWxsX3BhdGgpCisgICAgICAgICAgICAjIFdlYktp
dCdzIHdheSBvZiBza2lwcGluZyB0ZXN0cyBpcyB0byBhZGQgYSAtZGlzYWJsZWQgc3VmZml4Lgor
ICAgICAgICAgICAgIyBTbyB3ZSBzaG91bGQgY29uc2lkZXIgdGhlIHBhdGggZXhpc3RpbmcgaWYg
dGhlIHBhdGggb3IgdGhlCisgICAgICAgICAgICAjIC1kaXNhYmxlZCB2ZXJzaW9uIGV4aXN0cy4K
KyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0c19hcmVfcHJlc2VudCBhbmQgbm90IG9zLnBhdGgu
ZXhpc3RzKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICAgICBhbmQgbm90IG9zLnBhdGguZXhpc3Rz
KGZ1bGxfcGF0aCArICctZGlzYWJsZWQnKSk6CisgICAgICAgICAgICAgICAgIyBMb2cgYSBub24g
ZmF0YWwgZXJyb3IgaGVyZSBzaW5jZSB5b3UgaGl0IHRoaXMgY2FzZSBhbnkKKyAgICAgICAgICAg
ICAgICAjIHRpbWUgeW91IHVwZGF0ZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgd2l0aG91dCBzeW5j
aW5nCisgICAgICAgICAgICAgICAgIyB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5CisgICAgICAg
ICAgICAgICAgc2VsZi5fTG9nTm9uRmF0YWxFcnJvcihsaW5lbm8sICdQYXRoIGRvZXMgbm90IGV4
aXN0LicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3Rf
cGF0aCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5fZnVsbF90ZXN0X2xpc3Q6CisgICAgICAgICAgICAgICAgdGVzdHMgPSBbdGVzdF9saXN0X3Bh
dGhdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRlc3RzID0gc2VsZi5fRXhw
YW5kVGVzdHModGVzdF9saXN0X3BhdGgpCisKKyAgICAgICAgICAgIHNlbGYuX0FkZFRlc3RzKHRl
c3RzLCBleHBlY3RhdGlvbnMsIHRlc3RfbGlzdF9wYXRoLCBsaW5lbm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2RpZmllcnMsIG9wdGlvbnMpCisKKyAgICAgICAgaWYgbm90IHNlbGYu
X3N1cHByZXNzX2Vycm9ycyBhbmQgKAorICAgICAgICAgICAgbGVuKHNlbGYuX2Vycm9ycykgb3Ig
bGVuKHNlbGYuX25vbl9mYXRhbF9lcnJvcnMpKToKKyAgICAgICAgICAgIGlmIHNlbGYuX2lzX2Rl
YnVnX21vZGU6CisgICAgICAgICAgICAgICAgYnVpbGRfdHlwZSA9ICdERUJVRycKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnVpbGRfdHlwZSA9ICdSRUxFQVNFJworICAgICAg
ICAgICAgcHJpbnQgIlxuRkFJTFVSRVMgRk9SIFBMQVRGT1JNOiAlcywgQlVJTERfVFlQRTogJXMi
IFwKKyAgICAgICAgICAgICAgICAlIChzZWxmLl9wbGF0Zm9ybS51cHBlcigpLCBidWlsZF90eXBl
KQorCisgICAgICAgICAgICBmb3IgZXJyb3IgaW4gc2VsZi5fbm9uX2ZhdGFsX2Vycm9yczoKKyAg
ICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKGVycm9yKQorICAgICAgICAgICAgaWYgbGVuKHNl
bGYuX2Vycm9ycyk6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoJ1xuJy5qb2lu
KG1hcChzdHIsIHNlbGYuX2Vycm9ycykpKQorCisgICAgICAgICMgTm93IGFkZCBpbiB0aGUgdGVz
dHMgdGhhdCB3ZXJlbid0IHByZXNlbnQgaW4gdGhlIGV4cGVjdGF0aW9ucyBmaWxlCisgICAgICAg
IGV4cGVjdGF0aW9ucyA9IHNldChbUEFTU10pCisgICAgICAgIG9wdGlvbnMgPSBbXQorICAgICAg
ICBtb2RpZmllcnMgPSBbXQorICAgICAgICBpZiBzZWxmLl9mdWxsX3Rlc3RfbGlzdDoKKyAgICAg
ICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2Z1bGxfdGVzdF9saXN0OgorICAgICAgICAgICAgICAg
IGlmIG5vdCB0ZXN0IGluIHNlbGYuX3Rlc3RfbGlzdF9wYXRoczoKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fQWRkVGVzdCh0ZXN0LCBtb2RpZmllcnMsIGV4cGVjdGF0aW9ucywgb3B0aW9ucykK
KworICAgIGRlZiBfR2V0T3B0aW9uc0xpc3Qoc2VsZiwgbGlzdFN0cmluZyk6CisgICAgICAgIHJl
dHVybiBbcGFydC5zdHJpcCgpLmxvd2VyKCkgZm9yIHBhcnQgaW4gbGlzdFN0cmluZy5zdHJpcCgp
LnNwbGl0KCcgJyldCisKKyAgICBkZWYgX1BhcnNlRXhwZWN0YXRpb25zKHNlbGYsIGV4cGVjdGF0
aW9ucywgbGluZW5vLCB0ZXN0X2xpc3RfcGF0aCk6CisgICAgICAgIHJlc3VsdCA9IHNldCgpCisg
ICAgICAgIGZvciBwYXJ0IGluIGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0
IGluIHNlbGYuRVhQRUNUQVRJT05TOgorICAgICAgICAgICAgICAgIHNlbGYuX0FkZEVycm9yKGxp
bmVubywgJ1Vuc3VwcG9ydGVkIGV4cGVjdGF0aW9uOiAlcycgJSBwYXJ0LAorICAgICAgICAgICAg
ICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgZXhwZWN0YXRpb24gPSBzZWxmLkVYUEVDVEFUSU9OU1twYXJ0XQorICAgICAgICAgICAg
cmVzdWx0LmFkZChleHBlY3RhdGlvbikKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVm
IF9FeHBhbmRUZXN0cyhzZWxmLCB0ZXN0X2xpc3RfcGF0aCk6CisgICAgICAgICIiIkNvbnZlcnQg
dGhlIHRlc3Qgc3BlY2lmaWNhdGlvbiB0byBhbiBhYnNvbHV0ZSwgbm9ybWFsaXplZAorICAgICAg
ICBwYXRoIGFuZCBtYWtlIHN1cmUgZGlyZWN0b3JpZXMgZW5kIHdpdGggdGhlIE9TIHBhdGggc2Vw
YXJhdG9yLiIiIgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMuTGF5b3V0
VGVzdHNEaXIoKSwgdGVzdF9saXN0X3BhdGgpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1w
YXRoKHBhdGgpCisgICAgICAgIHBhdGggPSBzZWxmLl9GaXhEaXIocGF0aCkKKworICAgICAgICBy
ZXN1bHQgPSBbXQorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9mdWxsX3Rlc3RfbGlzdDoKKyAg
ICAgICAgICAgIGlmIHRlc3Quc3RhcnRzd2l0aChwYXRoKToKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHRlc3QpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfRml4RGly
KHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHBhdGggcG9pbnRz
IHRvIGEgZGlyZWN0b3J5LCBhbmQgaWYgc28sIGFwcGVuZAorICAgICAgICB0aGUgZGlyZWN0b3J5
IHNlcGFyYXRvciBpZiBuZWNlc3NhcnkuIiIiCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX2FyZV9w
cmVzZW50OgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAg
ICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICcnKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgIyBJZiB3ZSBjYW4ndCBjaGVjayB0aGUgZmlsZXN5c3RlbSB0byBzZWUgaWYgdGhpcyBp
cyBhIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICMgd2UgYXNzdW1lIHRoYXQgZmlsZXMgdy9vIGFu
IGV4dGVuc2lvbiBhcmUgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAjIFRPRE8oZHByYW5rZSk6
IFdoYXQgaGFwcGVucyB3LyBMYXlvdXRUZXN0cy9jc3MyLjEgPworICAgICAgICAgICAgaWYgb3Mu
cGF0aC5zcGxpdGV4dChwYXRoKVsxXSA9PSAnJzoKKyAgICAgICAgICAgICAgICBwYXRoID0gb3Mu
cGF0aC5qb2luKHBhdGgsICcnKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9BZGRU
ZXN0cyhzZWxmLCB0ZXN0cywgZXhwZWN0YXRpb25zLCB0ZXN0X2xpc3RfcGF0aCwgbGluZW5vLCBt
b2RpZmllcnMsCisgICAgICAgICAgICAgICAgICBvcHRpb25zKToKKyAgICAgICAgZm9yIHRlc3Qg
aW4gdGVzdHM6CisgICAgICAgICAgICBpZiBzZWxmLl9BbHJlYWR5U2VlblRlc3QodGVzdCwgdGVz
dF9saXN0X3BhdGgsIGxpbmVubyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgc2VsZi5fQ2xlYXJFeHBlY3RhdGlvbnNGb3JUZXN0KHRlc3QsIHRlc3RfbGlzdF9wYXRo
KQorICAgICAgICAgICAgc2VsZi5fQWRkVGVzdCh0ZXN0LCBtb2RpZmllcnMsIGV4cGVjdGF0aW9u
cywgb3B0aW9ucykKKworICAgIGRlZiBfQWRkVGVzdChzZWxmLCB0ZXN0LCBtb2RpZmllcnMsIGV4
cGVjdGF0aW9ucywgb3B0aW9ucyk6CisgICAgICAgICIiIlNldHMgdGhlIGV4cGVjdGVkIHN0YXRl
IGZvciBhIGdpdmVuIHRlc3QuCisKKyAgICAgICAgVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhlIHRl
c3QgaGFzIG5vdCBiZWVuIGFkZGVkIGJlZm9yZS4gSWYgaXQgaGFzLAorICAgICAgICB1c2UgX0Ns
ZWFyRXhwZWN0YXRpb25zRm9yVGVzdCgpIHRvIHJlc2V0IHRoZSBzdGF0ZSBwcmlvciB0bworICAg
ICAgICBjYWxsaW5nIHRoaXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiB0ZXN0
IHRvIGFkZAorICAgICAgICAgIG1vZGlmaWVyczogc2VxdWVuY2Ugb2YgbW9kaWZpZXIga2V5d29y
ZHMgKCd3b250Zml4JywgJ3Nsb3cnLCBldGMuKQorICAgICAgICAgIGV4cGVjdGF0aW9uczogc2Vx
dWVuY2Ugb2YgZXhwZWN0YXRpb25zIChQQVNTLCBJTUFHRSwgZXRjLikKKyAgICAgICAgICBvcHRp
b25zOiBzZXF1ZW5jZSBvZiBrZXl3b3JkcyBhbmQgYnVnIGlkZW50aWZpZXJzLiIiIgorICAgICAg
ICBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9uc1t0ZXN0XSA9IGV4cGVjdGF0aW9ucworICAgICAg
ICBmb3IgZXhwZWN0YXRpb24gaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgc2VsZi5fZXhw
ZWN0YXRpb25fdG9fdGVzdHNbZXhwZWN0YXRpb25dLmFkZCh0ZXN0KQorCisgICAgICAgIHNlbGYu
X3Rlc3RfdG9fb3B0aW9uc1t0ZXN0XSA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fdGVzdF90b19t
b2RpZmllcnNbdGVzdF0gPSBzZXQoKQorICAgICAgICBmb3IgbW9kaWZpZXIgaW4gbW9kaWZpZXJz
OgorICAgICAgICAgICAgbW9kX3ZhbHVlID0gc2VsZi5NT0RJRklFUlNbbW9kaWZpZXJdCisgICAg
ICAgICAgICBzZWxmLl9tb2RpZmllcl90b190ZXN0c1ttb2RfdmFsdWVdLmFkZCh0ZXN0KQorICAg
ICAgICAgICAgc2VsZi5fdGVzdF90b19tb2RpZmllcnNbdGVzdF0uYWRkKG1vZF92YWx1ZSkKKwor
ICAgICAgICBpZiAnd29udGZpeCcgaW4gbW9kaWZpZXJzOgorICAgICAgICAgICAgc2VsZi5fdGlt
ZWxpbmVfdG9fdGVzdHNbV09OVEZJWF0uYWRkKHRlc3QpCisgICAgICAgIGVsaWYgJ2RlZmVyJyBp
biBtb2RpZmllcnM6CisgICAgICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0c1tERUZFUl0u
YWRkKHRlc3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90aW1lbGluZV90b190
ZXN0c1tOT1ddLmFkZCh0ZXN0KQorCisgICAgICAgIGlmICdza2lwJyBpbiBtb2RpZmllcnM6Cisg
ICAgICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0c1tTS0lQXS5hZGQodGVzdCkKKyAg
ICAgICAgZWxpZiBleHBlY3RhdGlvbnMgPT0gc2V0KFtQQVNTXSk6CisgICAgICAgICAgICBzZWxm
Ll9yZXN1bHRfdHlwZV90b190ZXN0c1tQQVNTXS5hZGQodGVzdCkKKyAgICAgICAgZWxpZiBsZW4o
ZXhwZWN0YXRpb25zKSA+IDE6CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0
c1tGTEFLWV0uYWRkKHRlc3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZXN1
bHRfdHlwZV90b190ZXN0c1tGQUlMXS5hZGQodGVzdCkKKworICAgIGRlZiBfQ2xlYXJFeHBlY3Rh
dGlvbnNGb3JUZXN0KHNlbGYsIHRlc3QsIHRlc3RfbGlzdF9wYXRoKToKKyAgICAgICAgIiIiUmVt
b3ZlIHByZXhpc3RpbmcgZXhwZWN0YXRpb25zIGZvciB0aGlzIHRlc3QuCisgICAgICAgIFRoaXMg
aGFwcGVucyBpZiB3ZSBhcmUgc2VlaW5nIGEgbW9yZSBwcmVjaXNlIHBhdGgKKyAgICAgICAgdGhh
biBhIHByZXZpb3VzIGxpc3RpbmcuCisgICAgICAgICIiIgorICAgICAgICBpZiB0ZXN0IGluIHNl
bGYuX3Rlc3RfbGlzdF9wYXRoczoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRp
b25zLnBvcCh0ZXN0LCAnJykKKyAgICAgICAgICAgIHNlbGYuX1JlbW92ZUZyb21TZXRzKHRlc3Qs
IHNlbGYuX2V4cGVjdGF0aW9uX3RvX3Rlc3RzKQorICAgICAgICAgICAgc2VsZi5fUmVtb3ZlRnJv
bVNldHModGVzdCwgc2VsZi5fbW9kaWZpZXJfdG9fdGVzdHMpCisgICAgICAgICAgICBzZWxmLl9S
ZW1vdmVGcm9tU2V0cyh0ZXN0LCBzZWxmLl90aW1lbGluZV90b190ZXN0cykKKyAgICAgICAgICAg
IHNlbGYuX1JlbW92ZUZyb21TZXRzKHRlc3QsIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzKQor
CisgICAgICAgIHNlbGYuX3Rlc3RfbGlzdF9wYXRoc1t0ZXN0XSA9IG9zLnBhdGgubm9ybXBhdGgo
dGVzdF9saXN0X3BhdGgpCisKKyAgICBkZWYgX1JlbW92ZUZyb21TZXRzKHNlbGYsIHRlc3QsIGRp
Y3QpOgorICAgICAgICAiIiJSZW1vdmVzIHRoZSBnaXZlbiB0ZXN0IGZyb20gdGhlIHNldHMgaW4g
dGhlIGRpY3Rpb25hcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiB0ZXN0IHRv
IGxvb2sgZm9yCisgICAgICAgICAgZGljdDogZGljdCBvZiBzZXRzIG9mIGZpbGVzIiIiCisgICAg
ICAgIGZvciBzZXRfb2ZfdGVzdHMgaW4gZGljdC5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICBp
ZiB0ZXN0IGluIHNldF9vZl90ZXN0czoKKyAgICAgICAgICAgICAgICBzZXRfb2ZfdGVzdHMucmVt
b3ZlKHRlc3QpCisKKyAgICBkZWYgX0FscmVhZHlTZWVuVGVzdChzZWxmLCB0ZXN0LCB0ZXN0X2xp
c3RfcGF0aCwgbGluZW5vKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmIHdlJ3ZlIGFscmVh
ZHkgc2VlbiBhIG1vcmUgcHJlY2lzZSBwYXRoIGZvciB0aGlzIHRlc3QKKyAgICAgICAgdGhhbiB0
aGUgdGVzdF9saXN0X3BhdGguCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgdGVzdCBpbiBz
ZWxmLl90ZXN0X2xpc3RfcGF0aHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAg
ICBwcmV2X2Jhc2VfcGF0aCA9IHNlbGYuX3Rlc3RfbGlzdF9wYXRoc1t0ZXN0XQorICAgICAgICBp
ZiAocHJldl9iYXNlX3BhdGggPT0gb3MucGF0aC5ub3JtcGF0aCh0ZXN0X2xpc3RfcGF0aCkpOgor
ICAgICAgICAgICAgc2VsZi5fQWRkRXJyb3IobGluZW5vLCAnRHVwbGljYXRlIGV4cGVjdGF0aW9u
cy4nLCB0ZXN0KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIENoZWNrIGlm
IHdlJ3ZlIGFscmVhZHkgc2VlbiBhIG1vcmUgcHJlY2lzZSBwYXRoLgorICAgICAgICByZXR1cm4g
cHJldl9iYXNlX3BhdGguc3RhcnRzd2l0aChvcy5wYXRoLm5vcm1wYXRoKHRlc3RfbGlzdF9wYXRo
KSkKKworICAgIGRlZiBfQWRkRXJyb3Ioc2VsZiwgbGluZW5vLCBtc2csIHBhdGgpOgorICAgICAg
ICAiIiJSZXBvcnRzIGFuIGVycm9yIHRoYXQgd2lsbCBwcmV2ZW50IHJ1bm5pbmcgdGhlIHRlc3Rz
LiBEb2VzIG5vdAorICAgICAgICBpbW1lZGlhdGVseSByYWlzZSBhbiBleGNlcHRpb24gYmVjYXVz
ZSB3ZSdkIGxpa2UgdG8gYWdncmVnYXRlIGFsbCB0aGUKKyAgICAgICAgZXJyb3JzIHNvIHRoZXkg
Y2FuIGFsbCBiZSBwcmludGVkIG91dC4iIiIKKyAgICAgICAgc2VsZi5fZXJyb3JzLmFwcGVuZCgn
XG5MaW5lOiVzICVzICVzJyAlIChsaW5lbm8sIG1zZywgcGF0aCkpCisKKyAgICBkZWYgX0xvZ05v
bkZhdGFsRXJyb3Ioc2VsZiwgbGluZW5vLCBtc2csIHBhdGgpOgorICAgICAgICAiIiJSZXBvcnRz
IGFuIGVycm9yIHRoYXQgd2lsbCBub3QgcHJldmVudCBydW5uaW5nIHRoZSB0ZXN0cy4gVGhlc2Ug
YXJlCisgICAgICAgIHN0aWxsIGVycm9ycywgYnV0IG5vdCBiYWQgZW5vdWdoIHRvIHdhcnJhbnQg
YnJlYWtpbmcgdGVzdCBydW5uaW5nLiIiIgorICAgICAgICBzZWxmLl9ub25fZmF0YWxfZXJyb3Jz
LmFwcGVuZCgnTGluZTolcyAlcyAlcycgJSAobGluZW5vLCBtc2csIHBhdGgpKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9mYWlsdXJlcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmFpbHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMThkMjZlMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmFpbHVy
ZXMucHkKQEAgLTAsMCArMSwyNDEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworIiIiQ2xhc3NlcyBmb3IgZmFpbHVyZXMgdGhh
dCBvY2N1ciBkdXJpbmcgdGVzdHMuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHRlc3RfZXhwZWN0
YXRpb25zCisKKworZGVmIERldGVybWluZVJlc3VsdFR5cGUoZmFpbHVyZV9saXN0KToKKyAgICAi
IiJUYWtlcyBhIHNldCBvZiB0ZXN0X2ZhaWx1cmVzIGFuZCByZXR1cm5zIHdoaWNoIHJlc3VsdCB0
eXBlIGJlc3QgZml0cworICAgIHRoZSBsaXN0IG9mIGZhaWx1cmVzLiAiQmVzdCBmaXRzIiBtZWFu
cyB3ZSB1c2UgdGhlIHdvcnN0IHR5cGUgb2YgZmFpbHVyZS4KKworICAgIFJldHVybnM6CisgICAg
ICBvbmUgb2YgdGhlIHRlc3RfZXhwZWN0YXRpb25zIHJlc3VsdCB0eXBlcyAtIFBBU1MsIFRFWFQs
IENSQVNILCBldGMuIiIiCisKKyAgICBpZiBub3QgZmFpbHVyZV9saXN0IG9yIGxlbihmYWlsdXJl
X2xpc3QpID09IDA6CisgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTCisKKyAg
ICBmYWlsdXJlX3R5cGVzID0gW3R5cGUoZikgZm9yIGYgaW4gZmFpbHVyZV9saXN0XQorICAgIGlm
IEZhaWx1cmVDcmFzaCBpbiBmYWlsdXJlX3R5cGVzOgorICAgICAgICByZXR1cm4gdGVzdF9leHBl
Y3RhdGlvbnMuQ1JBU0gKKyAgICBlbGlmIEZhaWx1cmVUaW1lb3V0IGluIGZhaWx1cmVfdHlwZXM6
CisgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUCisgICAgZWxpZiAoRmFp
bHVyZU1pc3NpbmdSZXN1bHQgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAgICAgIEZhaWx1cmVN
aXNzaW5nSW1hZ2UgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAgICAgIEZhaWx1cmVNaXNzaW5n
SW1hZ2VIYXNoIGluIGZhaWx1cmVfdHlwZXMpOgorICAgICAgICByZXR1cm4gdGVzdF9leHBlY3Rh
dGlvbnMuTUlTU0lORworICAgIGVsc2U6CisgICAgICAgIGlzX3RleHRfZmFpbHVyZSA9IEZhaWx1
cmVUZXh0TWlzbWF0Y2ggaW4gZmFpbHVyZV90eXBlcworICAgICAgICBpc19pbWFnZV9mYWlsdXJl
ID0gKEZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCBpbiBmYWlsdXJl
X3R5cGVzKQorICAgICAgICBpZiBpc190ZXh0X2ZhaWx1cmUgYW5kIGlzX2ltYWdlX2ZhaWx1cmU6
CisgICAgICAgICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMuSU1BR0VfUExVU19URVhUCisg
ICAgICAgIGVsaWYgaXNfdGV4dF9mYWlsdXJlOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RfZXhw
ZWN0YXRpb25zLlRFWFQKKyAgICAgICAgZWxpZiBpc19pbWFnZV9mYWlsdXJlOgorICAgICAgICAg
ICAgcmV0dXJuIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmNsYXNzaWZpYWJsZSBzZXQgb2YgZmFpbHVyZXM6ICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIoZmFpbHVyZV90eXBlcykpCisKKwor
Y2xhc3MgVGVzdEZhaWx1cmUob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHRo
YXQgZGVmaW5lcyB0aGUgZmFpbHVyZSBpbnRlcmZhY2UuIiIiCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIE1lc3NhZ2UoKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBkZXNjcmli
aW5nIHRoZSBmYWlsdXJlIGluIG1vcmUgZGV0YWlsLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZAorCisgICAgZGVmIFJlc3VsdEh0bWxPdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAg
ICAgICAiIiJSZXR1cm5zIGFuIEhUTUwgc3RyaW5nIHRvIGJlIGluY2x1ZGVkIG9uIHRoZSByZXN1
bHRzLmh0bWwgcGFnZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQKKworICAgIGRl
ZiBTaG91bGRLaWxsVGVzdFNoZWxsKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYg
d2Ugc2hvdWxkIGtpbGwgdGhlIHRlc3Qgc2hlbGwgYmVmb3JlIHRoZSBuZXh0CisgICAgICAgIHRl
c3QuIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIFJlbGF0aXZlT3V0cHV0Rmls
ZW5hbWUoc2VsZiwgZmlsZW5hbWUsIG1vZGlmaWVyKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHJl
bGF0aXZlIGZpbGVuYW1lIGluc2lkZSB0aGUgb3V0cHV0IGRpciB0aGF0IGNvbnRhaW5zCisgICAg
ICAgIG1vZGlmaWVyLgorCisgICAgICAgIEZvciBleGFtcGxlLCBpZiBmaWxlbmFtZSBpcyBmYXN0
XGRvbVxmb28uaHRtbCBhbmQgbW9kaWZpZXIgaXMKKyAgICAgICAgIi1leHBlY3RlZC50eHQiLCB0
aGUgcmV0dXJuIHZhbHVlIGlzIGZhc3RcZG9tXGZvby1leHBlY3RlZC50eHQKKworICAgICAgICBB
cmdzOgorICAgICAgICAgIGZpbGVuYW1lOiByZWxhdGl2ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUK
KyAgICAgICAgICBtb2RpZmllcjogYSBzdHJpbmcgdG8gcmVwbGFjZSB0aGUgZXh0ZW5zaW9uIG9m
IGZpbGVuYW1lIHdpdGgKKworICAgICAgICBSZXR1cm46CisgICAgICAgICAgVGhlIHJlbGF0aXZl
IHdpbmRvd3MgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGVuYW1lCisgICAgICAgICIiIgorICAgICAg
ICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyBtb2RpZmllcgorCisKK2Ns
YXNzIEZhaWx1cmVXaXRoVHlwZShUZXN0RmFpbHVyZSk6CisgICAgIiIiQmFzZSBjbGFzcyB0aGF0
IHByb2R1Y2VzIHN0YW5kYXJkIEhUTUwgb3V0cHV0IGJhc2VkIG9uIHRoZSB0ZXN0IHR5cGUuCisK
KyAgICBTdWJjbGFzc2VzIG1heSBjb21tb25seSBjaG9vc2UgdG8gb3ZlcnJpZGUgdGhlIFJlc3Vs
dEh0bWxPdXRwdXQsIGJ1dCBzdGlsbAorICAgIHVzZSB0aGUgc3RhbmRhcmQgT3V0cHV0TGlua3Mu
CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF90eXBlKToKKyAgICAgICAg
VGVzdEZhaWx1cmUuX19pbml0X18oc2VsZikKKyAgICAgICAgIyBUT0RPKG9qYW4pOiBUaGlzIGNs
YXNzIG5vIGxvbmdlciBuZWVkcyB0byBrbm93IHRoZSB0ZXN0X3R5cGUuCisgICAgICAgIHNlbGYu
X3Rlc3RfdHlwZSA9IHRlc3RfdHlwZQorCisgICAgIyBGaWxlbmFtZSBzdWZmaXhlcyB1c2VkIGJ5
IFJlc3VsdEh0bWxPdXRwdXQuCisgICAgT1VUX0ZJTEVOQU1FUyA9IFtdCisKKyAgICBkZWYgT3V0
cHV0TGlua3Moc2VsZiwgZmlsZW5hbWUsIG91dF9uYW1lcyk6CisgICAgICAgICIiIlJldHVybnMg
YSBzdHJpbmcgaG9sZGluZyBhbGwgYXBwbGljYWJsZSBvdXRwdXQgZmlsZSBsaW5rcy4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiB0aGUgdGVzdCBmaWxlbmFtZSwgdXNlZCB0
byBjb25zdHJ1Y3QgdGhlIHJlc3VsdCBmaWxlIG5hbWVzCisgICAgICAgICAgb3V0X25hbWVzOiBs
aXN0IG9mIGZpbGVuYW1lIHN1ZmZpeGVzIGZvciB0aGUgZmlsZXMuIElmIHRocmVlIG9yIG1vcmUK
KyAgICAgICAgICAgICAgc3VmZml4ZXMgYXJlIGluIHRoZSBsaXN0LCB0aGV5IHNob3VsZCBiZSBb
YWN0dWFsLCBleHBlY3RlZCwgZGlmZiwKKyAgICAgICAgICAgICAgd2RpZmZdLiBUd28gc3VmZml4
ZXMgc2hvdWxkIGJlIFthY3R1YWwsIGV4cGVjdGVkXSwgYW5kIGEKKyAgICAgICAgICAgICAgc2lu
Z2xlIGl0ZW0gaXMgdGhlIFthY3R1YWxdIGZpbGVuYW1lIHN1ZmZpeC4KKyAgICAgICAgICAgICAg
SWYgb3V0X25hbWVzIGlzIGVtcHR5LCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuCisgICAgICAg
ICIiIgorICAgICAgICBsaW5rcyA9IFsnJ10KKyAgICAgICAgdXJpcyA9IFtzZWxmLlJlbGF0aXZl
T3V0cHV0RmlsZW5hbWUoZmlsZW5hbWUsIGZuKSBmb3IgZm4gaW4gb3V0X25hbWVzXQorICAgICAg
ICBpZiBsZW4odXJpcykgPiAxOgorICAgICAgICAgICAgbGlua3MuYXBwZW5kKCI8YSBocmVmPScl
cyc+ZXhwZWN0ZWQ8L2E+IiAlIHVyaXNbMV0pCisgICAgICAgIGlmIGxlbih1cmlzKSA+IDA6Cisg
ICAgICAgICAgICBsaW5rcy5hcHBlbmQoIjxhIGhyZWY9JyVzJz5hY3R1YWw8L2E+IiAlIHVyaXNb
MF0pCisgICAgICAgIGlmIGxlbih1cmlzKSA+IDI6CisgICAgICAgICAgICBsaW5rcy5hcHBlbmQo
IjxhIGhyZWY9JyVzJz5kaWZmPC9hPiIgJSB1cmlzWzJdKQorICAgICAgICBpZiBsZW4odXJpcykg
PiAzOgorICAgICAgICAgICAgbGlua3MuYXBwZW5kKCI8YSBocmVmPSclcyc+d2RpZmY8L2E+IiAl
IHVyaXNbM10pCisgICAgICAgIHJldHVybiAnICcuam9pbihsaW5rcykKKworICAgIGRlZiBSZXN1
bHRIdG1sT3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuTWVzc2Fn
ZSgpICsgc2VsZi5PdXRwdXRMaW5rcyhmaWxlbmFtZSwgc2VsZi5PVVRfRklMRU5BTUVTKQorCisK
K2NsYXNzIEZhaWx1cmVUaW1lb3V0KFRlc3RGYWlsdXJlKToKKyAgICAiIiJUZXN0IHRpbWVkIG91
dC4gIFdlIGFsc28gd2FudCB0byByZXN0YXJ0IHRoZSB0ZXN0IHNoZWxsIGlmIHRoaXMKKyAgICBo
YXBwZW5zLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBNZXNzYWdlKCk6CisgICAg
ICAgIHJldHVybiAiVGVzdCB0aW1lZCBvdXQiCisKKyAgICBkZWYgUmVzdWx0SHRtbE91dHB1dChz
ZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiAiPHN0cm9uZz4lczwvc3Ryb25nPiIgJSBz
ZWxmLk1lc3NhZ2UoKQorCisgICAgZGVmIFNob3VsZEtpbGxUZXN0U2hlbGwoc2VsZik6CisgICAg
ICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgRmFpbHVyZUNyYXNoKFRlc3RGYWlsdXJlKToKKyAg
ICAiIiJUZXN0IHNoZWxsIGNyYXNoZWQuIiIiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IE1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJUZXN0IHNoZWxsIGNyYXNoZWQiCisKKyAgICBk
ZWYgUmVzdWx0SHRtbE91dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICMgVE9ETyh0Yyk6
IGNyZWF0ZSBhIGxpbmsgdG8gdGhlIG1pbmlkdW1wIGZpbGUKKyAgICAgICAgc3RhY2sgPSBzZWxm
LlJlbGF0aXZlT3V0cHV0RmlsZW5hbWUoZmlsZW5hbWUsICItc3RhY2sudHh0IikKKyAgICAgICAg
cmV0dXJuICI8c3Ryb25nPiVzPC9zdHJvbmc+IDxhIGhyZWY9JXM+c3RhY2s8L2E+IiAlIChzZWxm
Lk1lc3NhZ2UoKSwKKyAgICAgICAgICAgIHN0YWNrKQorCisgICAgZGVmIFNob3VsZEtpbGxUZXN0
U2hlbGwoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgRmFpbHVyZU1pc3Np
bmdSZXN1bHQoRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJFeHBlY3RlZCByZXN1bHQgd2FzIG1p
c3NpbmcuIiIiCisgICAgT1VUX0ZJTEVOQU1FUyA9IFsiLWFjdHVhbC50eHQiXQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBNZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiTm8gZXhwZWN0
ZWQgcmVzdWx0cyBmb3VuZCIKKworICAgIGRlZiBSZXN1bHRIdG1sT3V0cHV0KHNlbGYsIGZpbGVu
YW1lKToKKyAgICAgICAgcmV0dXJuICgiPHN0cm9uZz4lczwvc3Ryb25nPiIgJSBzZWxmLk1lc3Nh
Z2UoKSArCisgICAgICAgICAgICAgICAgc2VsZi5PdXRwdXRMaW5rcyhmaWxlbmFtZSwgc2VsZi5P
VVRfRklMRU5BTUVTKSkKKworCitjbGFzcyBGYWlsdXJlVGV4dE1pc21hdGNoKEZhaWx1cmVXaXRo
VHlwZSk6CisgICAgIiIiVGV4dCBkaWZmIG91dHB1dCBmYWlsZWQuIiIiCisgICAgIyBGaWxlbmFt
ZSBzdWZmaXhlcyB1c2VkIGJ5IFJlc3VsdEh0bWxPdXRwdXQuCisgICAgT1VUX0ZJTEVOQU1FUyA9
IFsiLWFjdHVhbC50eHQiLCAiLWV4cGVjdGVkLnR4dCIsICItZGlmZi50eHQiXQorICAgIE9VVF9G
SUxFTkFNRVNfV0RJRkYgPSBbIi1hY3R1YWwudHh0IiwgIi1leHBlY3RlZC50eHQiLCAiLWRpZmYu
dHh0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItd2RpZmYuaHRtbCJdCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdGVzdF90eXBlLCBoYXNfd2RpZmYpOgorICAgICAgICBGYWlsdXJl
V2l0aFR5cGUuX19pbml0X18oc2VsZiwgdGVzdF90eXBlKQorICAgICAgICBpZiBoYXNfd2RpZmY6
CisgICAgICAgICAgICBzZWxmLk9VVF9GSUxFTkFNRVMgPSBzZWxmLk9VVF9GSUxFTkFNRVNfV0RJ
RkYKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgTWVzc2FnZSgpOgorICAgICAgICByZXR1
cm4gIlRleHQgZGlmZiBtaXNtYXRjaCIKKworCitjbGFzcyBGYWlsdXJlTWlzc2luZ0ltYWdlSGFz
aChGYWlsdXJlV2l0aFR5cGUpOgorICAgICIiIkFjdHVhbCByZXN1bHQgaGFzaCB3YXMgbWlzc2lu
Zy4iIiIKKyAgICAjIENocm9tZSBkb2Vzbid0IGtub3cgdG8gZGlzcGxheSBhIC5jaGVja3N1bSBm
aWxlIGFzIHRleHQsIHNvIGRvbid0IGJvdGhlcgorICAgICMgcHV0dGluZyBpbiBhIGxpbmsgdG8g
dGhlIGFjdHVhbCByZXN1bHQuCisgICAgT1VUX0ZJTEVOQU1FUyA9IFtdCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIE1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJObyBleHBlY3RlZCBp
bWFnZSBoYXNoIGZvdW5kIgorCisgICAgZGVmIFJlc3VsdEh0bWxPdXRwdXQoc2VsZiwgZmlsZW5h
bWUpOgorICAgICAgICByZXR1cm4gIjxzdHJvbmc+JXM8L3N0cm9uZz4iICUgc2VsZi5NZXNzYWdl
KCkKKworCitjbGFzcyBGYWlsdXJlTWlzc2luZ0ltYWdlKEZhaWx1cmVXaXRoVHlwZSk6CisgICAg
IiIiQWN0dWFsIHJlc3VsdCBpbWFnZSB3YXMgbWlzc2luZy4iIiIKKyAgICBPVVRfRklMRU5BTUVT
ID0gWyItYWN0dWFsLnBuZyJdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIE1lc3NhZ2Uo
KToKKyAgICAgICAgcmV0dXJuICJObyBleHBlY3RlZCBpbWFnZSBmb3VuZCIKKworICAgIGRlZiBS
ZXN1bHRIdG1sT3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuICgiPHN0cm9u
Zz4lczwvc3Ryb25nPiIgJSBzZWxmLk1lc3NhZ2UoKSArCisgICAgICAgICAgICAgICAgc2VsZi5P
dXRwdXRMaW5rcyhmaWxlbmFtZSwgc2VsZi5PVVRfRklMRU5BTUVTKSkKKworCitjbGFzcyBGYWls
dXJlSW1hZ2VIYXNoTWlzbWF0Y2goRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJJbWFnZSBoYXNo
ZXMgZGlkbid0IG1hdGNoLiIiIgorICAgIE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwucG5nIiwg
Ii1leHBlY3RlZC5wbmciLCAiLWRpZmYucG5nIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgTWVzc2FnZSgpOgorICAgICAgICAjIFdlIGNhbGwgdGhpcyBhIHNpbXBsZSBpbWFnZSBtaXNt
YXRjaCB0byBhdm9pZCBjb25mdXNpb24sIHNpbmNlCisgICAgICAgICMgd2UgbGluayB0byB0aGUg
UE5HcyByYXRoZXIgdGhhbiB0aGUgY2hlY2tzdW1zLgorICAgICAgICByZXR1cm4gIkltYWdlIG1p
c21hdGNoIgorCisKK2NsYXNzIEZhaWx1cmVGdXp6eUZhaWx1cmUoRmFpbHVyZVdpdGhUeXBlKToK
KyAgICAiIiJJbWFnZSBoYXNoZXMgZGlkbid0IG1hdGNoLiIiIgorICAgIE9VVF9GSUxFTkFNRVMg
PSBbIi1hY3R1YWwucG5nIiwgIi1leHBlY3RlZC5wbmciXQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBNZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiRnV6enkgaW1hZ2UgbWF0Y2ggYWxz
byBmYWlsZWQiCisKKworY2xhc3MgRmFpbHVyZUltYWdlSGFzaEluY29ycmVjdChGYWlsdXJlV2l0
aFR5cGUpOgorICAgICIiIkFjdHVhbCByZXN1bHQgaGFzaCBpcyBpbmNvcnJlY3QuIiIiCisgICAg
IyBDaHJvbWUgZG9lc24ndCBrbm93IHRvIGRpc3BsYXkgYSAuY2hlY2tzdW0gZmlsZSBhcyB0ZXh0
LCBzbyBkb24ndCBib3RoZXIKKyAgICAjIHB1dHRpbmcgaW4gYSBsaW5rIHRvIHRoZSBhY3R1YWwg
cmVzdWx0LgorICAgIE9VVF9GSUxFTkFNRVMgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBNZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiSW1hZ2VzIG1hdGNoLCBleHBlY3RlZCBp
bWFnZSBoYXNoIGluY29ycmVjdC4gIgorCisgICAgZGVmIFJlc3VsdEh0bWxPdXRwdXQoc2VsZiwg
ZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gIjxzdHJvbmc+JXM8L3N0cm9uZz4iICUgc2VsZi5N
ZXNzYWdlKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOGVhYWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X2ZpbGVzLnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
IiIiVGhpcyBtb2R1bGUgaXMgdXNlZCB0byBmaW5kIGFsbCBvZiB0aGUgbGF5b3V0IHRlc3QgZmls
ZXMgdXNlZCBieSBDaHJvbWl1bQorKGFjcm9zcyBhbGwgcGxhdGZvcm1zKS4gSXQgZXhwb3NlcyBv
bmUgcHVibGljIGZ1bmN0aW9uIC0gR2F0aGVyVGVzdEZpbGVzKCkgLQord2hpY2ggdGFrZXMgYW4g
b3B0aW9uYWwgbGlzdCBvZiBwYXRocy4gSWYgYSBsaXN0IGlzIHBhc3NlZCBpbiwgdGhlIHJldHVy
bmVkCitsaXN0IG9mIHRlc3QgZmlsZXMgaXMgY29uc3RyYWluZWQgdG8gdGhvc2UgZm91bmQgdW5k
ZXIgdGhlIHBhdGhzIHBhc3NlZCBpbiwKK2kuZS4gY2FsbGluZyBHYXRoZXJUZXN0RmlsZXMoWyJM
YXlvdXRUZXN0cy9mYXN0Il0pIHdpbGwgb25seSByZXR1cm4gZmlsZXMKK3VuZGVyIHRoYXQgZGly
ZWN0b3J5LiIiIgorCitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgcGF0aF91dGlscwor
CisjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCB3ZSBpbmNsdWRlIGFueSBmaWxlIHdpdGgg
dGhlc2UgZXh0ZW5zaW9ucy4KK19zdXBwb3J0ZWRfZmlsZV9leHRlbnNpb25zID0gc2V0KFsnLmh0
bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5wbCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJy5waHAnLCAnLnN2ZyddKQorIyBXaGVuIGNvbGxlY3RpbmcgdGVz
dCBjYXNlcywgc2tpcCB0aGVzZSBkaXJlY3RvcmllcworX3NraXBwZWRfZGlyZWN0b3JpZXMgPSBz
ZXQoWycuc3ZuJywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3NjcmlwdC10ZXN0cyddKQorCisKK2Rl
ZiBHYXRoZXJUZXN0RmlsZXMocGF0aHMpOgorICAgICIiIkdlbmVyYXRlIGEgc2V0IG9mIHRlc3Qg
ZmlsZXMgYW5kIHJldHVybiB0aGVtLgorCisgICAgQXJnczoKKyAgICAgIHBhdGhzOiBhIGxpc3Qg
b2YgY29tbWFuZCBsaW5lIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSB3ZWJraXQvdGVzdHMKKyAgICAg
ICAgICBkaXJlY3RvcnkuIGdsb2IgcGF0dGVybnMgYXJlIG9rLgorICAgICIiIgorICAgIHBhdGhz
X3RvX3dhbGsgPSBzZXQoKQorICAgICMgaWYgcGF0aHMgaXMgZW1wdHksIHByb3ZpZGUgYSBwcmUt
ZGVmaW5lZCBsaXN0LgorICAgIGlmIHBhdGhzOgorICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoK
KyAgICAgICAgICAgICMgSWYgdGhlcmUncyBhbiAqIGluIHRoZSBuYW1lLCBhc3N1bWUgaXQncyBh
IGdsb2IgcGF0dGVybi4KKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGls
cy5MYXlvdXRUZXN0c0RpcigpLCBwYXRoKQorICAgICAgICAgICAgaWYgcGF0aC5maW5kKCcqJykg
PiAtMToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZXMgPSBnbG9iLmdsb2IocGF0aCkKKyAgICAg
ICAgICAgICAgICBwYXRoc190b193YWxrLnVwZGF0ZShmaWxlbmFtZXMpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHBhdGhzX3RvX3dhbGsuYWRkKHBhdGgpCisgICAgZWxzZToK
KyAgICAgICAgcGF0aHNfdG9fd2Fsay5hZGQocGF0aF91dGlscy5MYXlvdXRUZXN0c0RpcigpKQor
CisgICAgIyBOb3cgd2FsayBhbGwgdGhlIHBhdGhzIHBhc3NlZCBpbiBvbiB0aGUgY29tbWFuZCBs
aW5lIGFuZCBnZXQgZmlsZW5hbWVzCisgICAgdGVzdF9maWxlcyA9IHNldCgpCisgICAgZm9yIHBh
dGggaW4gcGF0aHNfdG9fd2FsazoKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCkgYW5k
IF9IYXNTdXBwb3J0ZWRFeHRlbnNpb24ocGF0aCk6CisgICAgICAgICAgICB0ZXN0X2ZpbGVzLmFk
ZChvcy5wYXRoLm5vcm1wYXRoKHBhdGgpKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgICMg
ZG9uJ3Qgd2FsayBza2lwcGVkIGRpcmVjdG9yaWVzIGFuZCBzdWIgZGlyZWN0b3JpZXMKKyAgICAg
ICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocm9vdCkgaW4gX3NraXBwZWRfZGlyZWN0b3JpZXM6
CisgICAgICAgICAgICAgICAgZGVsIGRpcnNbOl0KKyAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYg
X0hhc1N1cHBvcnRlZEV4dGVuc2lvbihmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGZp
bGVuYW1lID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAg
ICBmaWxlbmFtZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAg
ICAgIHRlc3RfZmlsZXMuYWRkKGZpbGVuYW1lKQorCisgICAgcmV0dXJuIHRlc3RfZmlsZXMKKwor
CitkZWYgX0hhc1N1cHBvcnRlZEV4dGVuc2lvbihmaWxlbmFtZSk6CisgICAgIiIiUmV0dXJuIHRy
dWUgaWYgZmlsZW5hbWUgaXMgb25lIG9mIHRoZSBmaWxlIGV4dGVuc2lvbnMgd2Ugd2FudCB0byBy
dW4gYQorICAgIHRlc3Qgb24uIiIiCisgICAgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChm
aWxlbmFtZSlbMV0KKyAgICByZXR1cm4gZXh0ZW5zaW9uIGluIF9zdXBwb3J0ZWRfZmlsZV9leHRl
bnNpb25zCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhy
ZWFkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZTJlZDgKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQpAQCAtMCwwICsxLDQ4OCBAQAorIyBD
b3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisiIiJBIFRocmVhZCBvYmplY3QgZm9yIHJ1bm5pbmcgdGhlIHRlc3Qgc2hlbGwgYW5kIHByb2Nl
c3NpbmcgVVJMcyBmcm9tIGEKK3NoYXJlZCBxdWV1ZS4KKworRWFjaCB0aHJlYWQgcnVucyBhIHNl
cGFyYXRlIGluc3RhbmNlIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFyeSBhbmQgdmFsaWRhdGVzCit0
aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBVUkxzIHRvIHByb2Nlc3MgaW4gdGhl
IHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJlYWQgZXhpdHMuCisiIiIKKworaW1wb3J0IGNvcHkKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHNpZ25hbAoraW1w
b3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWQKK2ltcG9ydCB0aHJlYWRp
bmcKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCBwYXRoX3V0aWxzCitpbXBvcnQgdGVzdF9mYWlsdXJl
cworCisKK2RlZiBQcm9jZXNzT3V0cHV0KHByb2MsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIpOgorICAgICIiIlJlY2VpdmVzIHRoZSBvdXRwdXQg
ZnJvbSBhIHRlc3Rfc2hlbGwgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYSBudW1iZXIKKyAgICBv
ZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJv
ZHVjZWQuCisKKyAgICBBcmdzOgorICAgICAgcHJvYzogYW4gYWN0aXZlIHRlc3Rfc2hlbGwgcHJv
Y2VzcworICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFt
ZSwgdXJpIGFuZCB0aW1lb3V0CisgICAgICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMg
dG8gc3ViamVjdCB0aGUgb3V0cHV0IHRvCisgICAgICB0ZXN0X2FyZ3M6IGFyZ3VtZW50cyB0byBi
ZSBwYXNzZWQgdG8gZWFjaCB0ZXN0CisgICAgICB0YXJnZXQ6IERlYnVnIG9yIFJlbGVhc2UKKyAg
ICAgIG91dHB1dF9kaXI6IGRpcmVjdG9yeSB0byBwdXQgY3Jhc2ggc3RhY2sgdHJhY2VzIGludG8K
KworICAgIFJldHVybnM6IGEgbGlzdCBvZiBmYWlsdXJlIG9iamVjdHMgYW5kIHRpbWVzIGZvciB0
aGUgdGVzdCBiZWluZyBwcm9jZXNzZWQKKyAgICAiIiIKKyAgICBvdXRsaW5lcyA9IFtdCisgICAg
ZXh0cmFfbGluZXMgPSBbXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBjcmFzaCA9IEZhbHNlCisK
KyAgICAjIFNvbWUgdGVzdCBhcmdzLCBzdWNoIGFzIHRoZSBpbWFnZSBoYXNoLCBtYXkgYmUgYWRk
ZWQgb3IgY2hhbmdlZCBvbiBhCisgICAgIyB0ZXN0LWJ5LXRlc3QgYmFzaXMuCisgICAgbG9jYWxf
dGVzdF9hcmdzID0gY29weS5jb3B5KHRlc3RfYXJncykKKworICAgIHN0YXJ0X3RpbWUgPSB0aW1l
LnRpbWUoKQorCisgICAgbGluZSA9IHByb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKworICAgICMgT25s
eSBzdGFydCBzYXZpbmcgb3V0cHV0IGxpbmVzIG9uY2Ugd2UndmUgbG9hZGVkIHRoZSBVUkwgZm9y
IHRoZSB0ZXN0LgorICAgIHVybCA9IE5vbmUKKyAgICB0ZXN0X3N0cmluZyA9IHRlc3RfaW5mby51
cmkuc3RyaXAoKQorCisgICAgd2hpbGUgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6CisgICAgICAg
ICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KKyAgICAgICAgaWYgbGluZSA9PSAnJyBh
bmQgcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQo
dGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKKworICAgICAgICAgICAgIyBUaGlzIGlzIGhl
eCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVzZWQgZm9yIGFicnVwdAorICAgICAgICAgICAg
IyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBjdHJsK2MgZnJvbSB0aGUgcHJv
bXB0IGFuZAorICAgICAgICAgICAgIyB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVz
dF9zaGVsbC4KKyAgICAgICAgICAgICMgc2RveW9uOiBOb3Qgc3VyZSBmb3Igd2hpY2ggT1MgYW5k
IGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUKKyAgICAgICAgICAgICMgYWJvdmUgY29kZSBpcyB2
YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIgTGludXggdG8gZGV0ZWN0CisgICAgICAgICAg
ICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2
ZSBTSUdJTlQuCisgICAgICAgICAgICAjIEFuZCB0aGF0IGFncmVlcyB3aXRoIHRoZSBzdWJwcm9j
ZXNzIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0gcHJvYy5y
ZXR1cm5jb2RlIG9yCisgICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5UID09IHByb2MucmV0
dXJuY29kZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAg
ICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIERvbid0
IGluY2x1ZGUgI1VSTCBsaW5lcyBpbiBvdXIgb3V0cHV0CisgICAgICAgIGlmIGxpbmUuc3RhcnRz
d2l0aCgiI1VSTDoiKToKKyAgICAgICAgICAgIHVybCA9IGxpbmUucnN0cmlwKClbNTpdCisgICAg
ICAgICAgICBpZiB1cmwgIT0gdGVzdF9zdHJpbmc6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5m
YXRhbCgiVGVzdCBnb3Qgb3V0IG9mIHN5bmM6XG58JXN8XG58JXN8IiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodXJsLCB0ZXN0X3N0cmluZykpCisgICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoInRlc3Qgb3V0IG9mIHN5bmMiKQorICAgICAgICBlbGlmIGxpbmUu
c3RhcnRzd2l0aCgiI01ENToiKToKKyAgICAgICAgICAgIGxvY2FsX3Rlc3RfYXJncy5oYXNoID0g
bGluZS5yc3RyaXAoKVs1Ol0KKyAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIiNURVNUX1RJ
TUVEX09VVCIpOgorICAgICAgICAgICAgIyBUZXN0IHRpbWVkIG91dCwgYnV0IHdlIHN0aWxsIG5l
ZWQgdG8gcmVhZCB1bnRpbCAjRU9GLgorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3Rf
ZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkKKyAgICAgICAgZWxpZiB1cmw6CisgICAgICAgICAg
ICBvdXRsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dHJh
X2xpbmVzLmFwcGVuZChsaW5lKQorCisgICAgICAgIGxpbmUgPSBwcm9jLnN0ZG91dC5yZWFkbGlu
ZSgpCisKKyAgICBlbmRfdGVzdF90aW1lID0gdGltZS50aW1lKCkKKworICAgIGlmIGxlbihleHRy
YV9saW5lcyk6CisgICAgICAgIGV4dHJhID0gIiIuam9pbihleHRyYV9saW5lcykKKyAgICAgICAg
aWYgY3Jhc2g6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdGFja3RyYWNlIGZvciAlczpc
biVzIiAlICh0ZXN0X3N0cmluZywgZXh0cmEpKQorICAgICAgICAgICAgIyBTdHJpcCBvZmYgImZp
bGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVzdEZpbGVuYW1lIGV4cGVjdHMKKyAgICAgICAgICAgICMg
ZmlsZXN5c3RlbSBwYXRocy4KKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG91
dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgcGF0aF91dGlscy5SZWxhdGl2ZVRlc3RGaWxlbmFt
ZSh0ZXN0X3N0cmluZ1s3Ol0pKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0
ZXh0KGZpbGVuYW1lKVswXSArICItc3RhY2sudHh0IgorICAgICAgICAgICAgcGF0aF91dGlscy5N
YXliZU1ha2VEaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCisgICAgICAgICAg
ICBvcGVuKGZpbGVuYW1lLCAid2IiKS53cml0ZShleHRyYSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0IGV4dHJhIGxpbmVzIGFm
dGVyIGR1bXA6XG4lcyIgJQorICAgICAgICAgICAgICAgIGV4dHJhKQorCisgICAgIyBDaGVjayB0
aGUgb3V0cHV0IGFuZCBzYXZlIHRoZSByZXN1bHRzLgorICAgIHRpbWVfZm9yX2RpZmZzID0ge30K
KyAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6CisgICAgICAgIHN0YXJ0X2RpZmZfdGlt
ZSA9IHRpbWUudGltZSgpCisgICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5Db21wYXJl
T3V0cHV0KHRlc3RfaW5mby5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJycuam9pbihvdXRsaW5lcyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KQorICAgICAgICAjIERvbid0
IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjcmFzaCwgc28gd2Ug
ZG9uJ3QKKyAgICAgICAgIyBkb3VibGUtcmVwb3J0IHRob3NlIHRlc3RzLiBXZSBkbyBkb3VibGUt
cmVwb3J0IGZvciB0aW1lb3V0cyBzaW5jZQorICAgICAgICAjIHdlIHN0aWxsIHdhbnQgdG8gc2Vl
IHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCisgICAgICAgIGlmIG5vdCBjcmFzaDoKKyAgICAg
ICAgICAgIGZhaWx1cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCisgICAgICAgIHRpbWVfZm9yX2Rp
ZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1lX19dID0gKAorICAgICAgICAgICAgdGltZS50
aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUpCisKKyAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMg
PSB0aW1lLnRpbWUoKSAtIGVuZF90ZXN0X3RpbWUKKyAgICB0ZXN0X3J1bl90aW1lID0gZW5kX3Rl
c3RfdGltZSAtIHN0YXJ0X3RpbWUKKyAgICByZXR1cm4gVGVzdFN0YXRzKHRlc3RfaW5mby5maWxl
bmFtZSwgZmFpbHVyZXMsIHRlc3RfcnVuX3RpbWUsCisgICAgICAgIHRvdGFsX3RpbWVfZm9yX2Fs
bF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCisKKworZGVmIFN0YXJ0VGVzdFNoZWxsKGNvbW1hbmQs
IGFyZ3MpOgorICAgICIiIlJldHVybnMgdGhlIHByb2Nlc3MgZm9yIGEgbmV3IHRlc3Rfc2hlbGwg
c3RhcnRlZCBpbiBsYXlvdXQtdGVzdHMgbW9kZS4KKyAgICAiIiIKKyAgICBjbWQgPSBbXQorICAg
ICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVu
dGF0aW9uLAorICAgICMgdXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3Rz
LnB5LgorICAgIHdyYXBwZXIgPSBvcy5lbnZpcm9uLmdldCgiQlJPV1NFUl9XUkFQUEVSIiwgTm9u
ZSkKKyAgICBpZiB3cmFwcGVyICE9IE5vbmU6CisgICAgICAgIGNtZCArPSBbd3JhcHBlcl0KKyAg
ICBjbWQgKz0gY29tbWFuZCArIFsnLS1sYXlvdXQtdGVzdHMnXSArIGFyZ3MKKyAgICByZXR1cm4g
c3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49
c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nl
c3MuU1RET1VUKQorCisKK2NsYXNzIFRlc3RTdGF0czoKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBmaWxlbmFtZSwgZmFpbHVyZXMsIHRlc3RfcnVuX3RpbWUsCisgICAgICAgICAgICAgICAgIHRv
dGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpOgorICAgICAgICBzZWxmLmZp
bGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5mYWlsdXJlcyA9IGZhaWx1cmVzCisgICAg
ICAgIHNlbGYudGVzdF9ydW5fdGltZSA9IHRlc3RfcnVuX3RpbWUKKyAgICAgICAgc2VsZi50b3Rh
bF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMKKyAgICAgICAg
c2VsZi50aW1lX2Zvcl9kaWZmcyA9IHRpbWVfZm9yX2RpZmZzCisKKworY2xhc3MgU2luZ2xlVGVz
dFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3IgcnVu
bmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVz
dF9zaGVsbF9jb21tYW5kLCBzaGVsbF9hcmdzLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsCisgICAg
ICAgIHRlc3RfYXJncywgdGFyZ2V0LCBvdXRwdXRfZGlyKToKKyAgICAgICAgIiIiCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBm
aWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisgICAgICAgICAgb3V0cHV0X2RpcjogRGlyZWN0b3J5
IHRvIHB1dCBjcmFzaCBzdGFja3MgaW50by4KKyAgICAgICAgICBTZWUgVGVzdFNoZWxsVGhyZWFk
IGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorICAgICAgICAi
IiIKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNl
bGYuX2NvbW1hbmQgPSB0ZXN0X3NoZWxsX2NvbW1hbmQKKyAgICAgICAgc2VsZi5fc2hlbGxfYXJn
cyA9IHNoZWxsX2FyZ3MKKyAgICAgICAgc2VsZi5fdGVzdF9pbmZvID0gdGVzdF9pbmZvCisgICAg
ICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCisgICAgICAgIHNlbGYuX3Rlc3RfYXJn
cyA9IHRlc3RfYXJncworICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgc2Vs
Zi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAg
IHByb2MgPSBTdGFydFRlc3RTaGVsbChzZWxmLl9jb21tYW5kLCBzZWxmLl9zaGVsbF9hcmdzICsK
KyAgICAgICAgICAgIFsiLS10aW1lLW91dC1tcz0iICsgc2VsZi5fdGVzdF9pbmZvLnRpbWVvdXQs
IHNlbGYuX3Rlc3RfaW5mby51cmldKQorICAgICAgICBzZWxmLl90ZXN0X3N0YXRzID0gUHJvY2Vz
c091dHB1dChwcm9jLCBzZWxmLl90ZXN0X2luZm8sCisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5
cGVzLCBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYuX3RhcmdldCwgc2VsZi5fb3V0cHV0X2RpcikKKwor
ICAgIGRlZiBHZXRUZXN0U3RhdHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3N0
YXRzCisKKworY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSwgdGVz
dF9zaGVsbF9jb21tYW5kLAorICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3Ms
IHNoZWxsX2FyZ3MsIG9wdGlvbnMpOgorICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9j
YWwgc3RhdGUgZm9yIHRoaXMgdGVzdCBzaGVsbCB0aHJlYWQuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRo
YXQgY29udGFpbnMgbGlzdHMKKyAgICAgICAgICAgICAgb2YgdHVwbGVzIG9mIChmaWxlbmFtZSwg
dXJpKSBwYWlycy4KKyAgICAgICAgICByZXN1bHRfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUg
Y2xhc3MgdGhhdCB3aWxsIGNvbnRhaW4gdHVwbGVzIG9mCisgICAgICAgICAgICAgICh0ZXN0LCBm
YWlsdXJlIGxpc3RzKSBmb3IgdGhlIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgICB0ZXN0X3NoZWxs
X2NvbW1hbmQ6IEEgbGlzdCBzcGVjaWZ5aW5nIHRoZSBjb21tYW5kK2FyZ3MgZm9yCisgICAgICAg
ICAgICAgIHRlc3Rfc2hlbGwKKyAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5
cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgIGFnYWluc3Qu
CisgICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8g
ZWFjaCBUZXN0VHlwZS4KKyAgICAgICAgICBzaGVsbF9hcmdzOiBBbnkgZXh0cmEgYXJndW1lbnRz
IHRvIGJlIHBhc3NlZCB0byB0ZXN0X3NoZWxsLmV4ZS4KKyAgICAgICAgICBvcHRpb25zOiBBIHBy
b3BlcnR5IGRpY3Rpb25hcnkgYXMgcHJvZHVjZWQgYnkgb3B0cGFyc2UuIFRoZQorICAgICAgICAg
ICAgICBjb21tYW5kLWxpbmUgb3B0aW9ucyBzaG91bGQgbWF0Y2ggdGhvc2UgZXhwZWN0ZWQgYnkK
KyAgICAgICAgICAgICAgcnVuX3dlYmtpdF90ZXN0czsgdGhleSBhcmUgdHlwaWNhbGx5IHBhc3Nl
ZCB2aWEgdGhlCisgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciBjbGFz
cy4iIiIKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBz
ZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1ZQorICAgICAgICBz
ZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKKyAgICAgICAgc2VsZi5fZmlsZW5hbWVf
bGlzdCA9IFtdCisgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCA9IHRlc3Rfc2hlbGxf
Y29tbWFuZAorICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcworICAgICAgICBz
ZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKKyAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9j
ID0gTm9uZQorICAgICAgICBzZWxmLl9zaGVsbF9hcmdzID0gc2hlbGxfYXJncworICAgICAgICBz
ZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQorICAgICAgICBzZWxmLl9kaXJlY3Rv
cnlfdGltaW5nX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fdGVzdF9zdGF0cyA9IFtdCisgICAg
ICAgIHNlbGYuX251bV90ZXN0cyA9IDAKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IDAKKyAg
ICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAorCisgICAgICAgICMgQ3VycmVudCBkaXJlY3Rvcnkg
b2YgdGVzdHMgd2UncmUgcnVubmluZy4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBOb25l
CisgICAgICAgICMgTnVtYmVyIG9mIHRlc3RzIGluIHNlbGYuX2N1cnJlbnRfZGlyLgorICAgICAg
ICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9kaXIgPSBOb25lCisgICAgICAgICMgVGltZSBh
dCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcgdGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2Rpci4K
KyAgICAgICAgc2VsZi5fY3VycmVudF9kaXJfc3RhcnRfdGltZSA9IE5vbmUKKworICAgIGRlZiBH
ZXREaXJlY3RvcnlUaW1pbmdTdGF0cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Rp
b25hcnkgbWFwcGluZyB0ZXN0IGRpcmVjdG9yeSB0byBhIHR1cGxlIG9mCisgICAgICAgIChudW1i
ZXIgb2YgdGVzdHMgaW4gdGhhdCBkaXJlY3RvcnksIHRpbWUgdG8gcnVuIHRoZSB0ZXN0cykiIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2RpcmVjdG9yeV90aW1pbmdfc3RhdHMKKworICAgIGRlZiBH
ZXRJbmRpdmlkdWFsVGVzdFN0YXRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgbGlzdCBv
ZiAodGVzdF9maWxlbmFtZSwgdGltZV90b19ydW5fdGVzdCwKKyAgICAgICAgdG90YWxfdGltZV9m
b3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykgdHVwbGVzLiIiIgorICAgICAgICByZXR1cm4g
c2VsZi5fdGVzdF9zdGF0cworCisgICAgZGVmIENhbmNlbChzZWxmKToKKyAgICAgICAgIiIiU2V0
IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCisgICAgICAgIHNlbGYuX2Nh
bmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIEdldEV4Y2VwdGlvbkluZm8oc2VsZik6CisgICAgICAg
ICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4g
aXQgaGVyZQorICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4KKyAgICAg
ICAgUmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50IHRvIGJl
IGNhbGxlZCBhZnRlcgorICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBHZXRUb3RhbFRpbWUoc2VsZik6
CisgICAgICAgIHJldHVybiBtYXgoc2VsZi5fc3RvcF90aW1lIC0gc2VsZi5fc3RhcnRfdGltZSwg
MC4wKQorCisgICAgZGVmIEdldE51bVRlc3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
bnVtX3Rlc3RzCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiJEZWxlZ2F0ZSBtYWlu
IHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5jYXVnaHQKKyAgICAgICAg
ZXhjZXB0aW9ucy4iIiIKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisg
ICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9n
Z2luZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkKKyAgICAgICAgICAg
IHNlbGYuX1J1bih0ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQorICAgICAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5HZXROdW1UZXN0cygpKSkKKyAgICAg
ICAgZXhjZXB0OgorICAgICAgICAgICAgIyBTYXZlIHRoZSBleGNlcHRpb24gZm9yIG91ciBjYWxs
ZXIgdG8gc2VlLgorICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2lu
Zm8oKQorICAgICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAg
ICAgICMgUmUtcmFpc2UgaXQgYW5kIGRpZS4KKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJyVz
IGR5aW5nOiAlcycgJSAoc2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2V4Y2VwdGlvbl9pbmZvKSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYu
X3N0b3BfdGltZSA9IHRpbWUudGltZSgpCisKKyAgICBkZWYgUnVuSW5NYWluVGhyZWFkKHNlbGYs
IHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlRoaXMgaG9vayBhbGxv
d3MgdXMgdG8gcnVuIHRoZSB0ZXN0cyBmcm9tIHRoZSBtYWluIHRocmVhZCBpZgorICAgICAgICAt
LW51bS10ZXN0LXNoZWxscz09MSwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gYWx3YXlzIHJ1biB0d28g
b3IgbW9yZQorICAgICAgICB0aHJlYWRzLiBUaGlzIGFsbG93cyB1cyB0byBkZWJ1ZyB0aGUgdGVz
dCBoYXJuZXNzIHdpdGhvdXQgaGF2aW5nIHRvCisgICAgICAgIGRvIG11bHRpLXRocmVhZGVkIGRl
YnVnZ2luZy4iIiIKKyAgICAgICAgc2VsZi5fUnVuKHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFy
eSkKKworICAgIGRlZiBfUnVuKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6Cisg
ICAgICAgICIiIk1haW4gd29yayBlbnRyeSBwb2ludCBvZiB0aGUgdGhyZWFkLiBCYXNpY2FsbHkg
d2UgcHVsbCB1cmxzIGZyb20gdGhlCisgICAgICAgIGZpbGVuYW1lIHF1ZXVlIGFuZCBydW4gdGhl
IHRlc3RzIHVudGlsIHdlIHJ1biBvdXQgb2YgdXJscy4KKworICAgICAgICBJZiB0ZXN0X3J1bm5l
ciBpcyBub3QgTm9uZSwgdGhlbiB3ZSBjYWxsIHRlc3RfcnVubmVyLlVwZGF0ZVN1bW1hcnkoKQor
ICAgICAgICB3aXRoIHRoZSByZXN1bHRzIG9mIGVhY2ggdGVzdC4iIiIKKyAgICAgICAgYmF0Y2hf
c2l6ZSA9IDAKKyAgICAgICAgYmF0Y2hfY291bnQgPSAwCisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMuYmF0Y2hfc2l6ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYXRjaF9z
aXplID0gaW50KHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIklnbm9yaW5nIGludmFsaWQgYmF0Y2ggc2l6
ZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYmF0
Y2hfc2l6ZSkKKworICAgICAgICAjIEFwcGVuZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBl
eGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUuCisgICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGlu
IHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0LgorICAgICAg
ICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0c19ydW4udHh0IikKKyAgICAgICAgdGVzdHNfcnVuX2ZpbGUgPSBvcGVuKHRlc3RzX3J1bl9m
aWxlbmFtZSwgImEiKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzZWxm
Ll9jYW5jZWxlZDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1Rlc3RpbmcgY2FuY2Vs
ZWQnKQorICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlz
IDA6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9kaXIgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2RpcmVjdG9yeV90aW1pbmdfc3RhdHNbc2VsZi5fY3Vy
cmVudF9kaXJdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX251bV90ZXN0c19p
bl9jdXJyZW50X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHNl
bGYuX2N1cnJlbnRfZGlyX3N0YXJ0X3RpbWUpCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyLCBzZWxmLl9maWxlbmFtZV9saXN0ID0g
XAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRf
bm93YWl0KCkKKyAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX0tpbGxUZXN0U2hlbGwoKQorICAgICAgICAgICAgICAgICAgICB0ZXN0
c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAg
ICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZGlyID0gbGVuKHNlbGYuX2ZpbGVu
YW1lX2xpc3QpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXJfc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCisKKyAgICAgICAgICAgIHRlc3RfaW5mbyA9IHNlbGYuX2ZpbGVuYW1lX2xp
c3QucG9wKCkKKworICAgICAgICAgICAgIyBXZSBoYXZlIGEgdXJsLCBydW4gdGVzdHMuCisgICAg
ICAgICAgICBiYXRjaF9jb3VudCArPSAxCisgICAgICAgICAgICBzZWxmLl9udW1fdGVzdHMgKz0g
MQorICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAg
ICAgIGZhaWx1cmVzID0gc2VsZi5fUnVuVGVzdFNpbmdseSh0ZXN0X2luZm8pCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzID0gc2VsZi5fUnVuVGVzdCh0ZXN0X2lu
Zm8pCisKKyAgICAgICAgICAgIGZpbGVuYW1lID0gdGVzdF9pbmZvLmZpbGVuYW1lCisgICAgICAg
ICAgICB0ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFtZSArICJcbiIpCisgICAgICAgICAgICBp
ZiBmYWlsdXJlczoKKyAgICAgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIHRlc3Qgc2hlbGwg
aWYgd2UgbmVlZCB0b28uCisgICAgICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBmIGluIGZhaWx1
cmVzIGlmIGYuU2hvdWxkS2lsbFRlc3RTaGVsbCgpXSk6CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuX0tpbGxUZXN0U2hlbGwoKQorICAgICAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRj
aCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgorICAgICAgICAgICAgICAgICAg
ICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNz
YWdlKHMpLgorICAgICAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYu
TWVzc2FnZSgpIGZvciBmIGluIGZhaWx1cmVzXSkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRl
YnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLlJlbGF0aXZlVGVzdEZpbGVuYW1lKGZpbGVuYW1l
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAo
c2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxz
LlJlbGF0aXZlVGVzdEZpbGVuYW1lKGZpbGVuYW1lKSkpCisgICAgICAgICAgICBzZWxmLl9yZXN1
bHRfcXVldWUucHV0KChmaWxlbmFtZSwgZmFpbHVyZXMpKQorCisgICAgICAgICAgICBpZiBiYXRj
aF9zaXplID4gMCBhbmQgYmF0Y2hfY291bnQgPiBiYXRjaF9zaXplOgorICAgICAgICAgICAgICAg
ICMgQm91bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCisgICAgICAgICAgICAgICAgc2Vs
Zi5fS2lsbFRlc3RTaGVsbCgpCisgICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCisKKyAg
ICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgorICAgICAgICAgICAgICAgIHRlc3RfcnVubmVyLlVw
ZGF0ZVN1bW1hcnkocmVzdWx0X3N1bW1hcnkpCisKKyAgICBkZWYgX1J1blRlc3RTaW5nbHkoc2Vs
ZiwgdGVzdF9pbmZvKToKKyAgICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVh
ZCwgZW5mb3JjaW5nIGEgaGFyZCB0aW1lIGxpbWl0LgorCisgICAgICAgIFNpbmNlIHdlIGNhbiBv
bmx5IGRldGVjdCB0aGUgdGVybWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwK
KyAgICAgICAgc3RhdGUgb3IgcHJvZ3Jlc3MsIHdlIGNhbiBvbmx5IHJ1biBwZXItdGVzdCB0aW1l
b3V0cyB3aGVuIHJ1bm5pbmcgdGVzdAorICAgICAgICBmaWxlcyBzaW5nbHkuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICB0ZXN0X2luZm86IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZp
bGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAgICAgICBSZXR1cm46CisgICAgICAgICAgQSBs
aXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMgZGVzY3JpYmluZyB0aGUgZXJyb3IuCisgICAgICAg
ICIiIgorICAgICAgICB3b3JrZXIgPSBTaW5nbGVUZXN0VGhyZWFkKHNlbGYuX3Rlc3Rfc2hlbGxf
Y29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbF9h
cmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mbywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisg
ICAgICAgIHdvcmtlci5zdGFydCgpCisKKyAgICAgICAgIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgb25l
IHRlc3QgcGVyIHRlc3Rfc2hlbGwgcHJvY2Vzcywgd2UgY2FuIGVuZm9yY2UKKyAgICAgICAgIyBh
IGhhcmQgdGltZW91dC4gdGhlIHRlc3Rfc2hlbGwgd2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1l
b3V0CisgICAgICAgICMgV2Ugd2FudCB0byBiZSBsYXJnZXIgdGhhbiB0aGF0LgorICAgICAgICB3
b3JrZXIuam9pbihpbnQodGVzdF9pbmZvLnRpbWVvdXQpICogMy4wIC8gMTAwMC4wKQorICAgICAg
ICBpZiB3b3JrZXIuaXNBbGl2ZSgpOgorICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQg
d2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQorICAgICAgICAgICAgIyB0ZXN0X3No
ZWxsLmV4ZSBpcyBjb21wbGV0ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGluZworICAgICAgICAg
ICAgIyBtb3JlIHdlIGNhbiBkbyB3aXRoIGl0LiAgV2UgaGF2ZSB0byBraWxsIGFsbCB0aGUKKyAg
ICAgICAgICAgICMgdGVzdF9zaGVsbHMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBt
b3JlIHRoYW4KKyAgICAgICAgICAgICMgb25lIHRlc3Rfc2hlbGwgdGhyZWFkLCB3ZSdsbCBlbmQg
dXAga2lsbGluZyB0aGUgb3RoZXIKKyAgICAgICAgICAgICMgdGVzdF9zaGVsbHMgdG9vLCBpbnRy
b2R1Y2luZyBzcHVyaW91cyBjcmFzaGVzLiBXZSBhY2NlcHQgdGhhdAorICAgICAgICAgICAgIyB0
cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcyB0aHJlYWQn
cworICAgICAgICAgICAgIyByZXN1bHRzLgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignVGVz
dCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgdGVzdF9zaGVsbHMnKQorICAgICAgICAgICAgcGF0
aF91dGlscy5LaWxsQWxsVGVzdFNoZWxscygpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c3RhdHMgPSB3b3JrZXIuR2V0VGVzdFN0YXRzKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc3Rh
dHMuYXBwZW5kKHN0YXRzKQorICAgICAgICAgICAgZmFpbHVyZXMgPSBzdGF0cy5mYWlsdXJlcwor
ICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBmYWlsdXJlcyA9
IFtdCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdDYW5ub3QgZ2V0IHJlc3VsdHMgb2YgdGVz
dDogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKQor
CisgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgZGVmIF9SdW5UZXN0KHNlbGYsIHRlc3Rf
aW5mbyk6CisgICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQg
dGVzdF9zaGVsbCBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbmZv
OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisK
KyAgICAgICAgUmV0dXJuOgorICAgICAgICAgIEEgbGlzdCBvZiBUZXN0RmFpbHVyZSBvYmplY3Rz
IGRlc2NyaWJpbmcgdGhlIGVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fRW5zdXJl
VGVzdFNoZWxsSXNSdW5uaW5nKCkKKyAgICAgICAgIyBBcmdzIHRvIHRlc3Rfc2hlbGwgaXMgYSBz
cGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgorICAgICAgICAjICJ1cmkgdGltZW91dCBwaXhlbF9oYXNo
IgorICAgICAgICAjIFRoZSB0aW1lb3V0IGFuZCBwaXhlbF9oYXNoIGFyZSBvcHRpb25hbC4gIFRo
ZSB0aW1lb3V0IGlzIHVzZWQgaWYgdGhpcworICAgICAgICAjIHRlc3QgaGFzIGEgY3VzdG9tIHRp
bWVvdXQuIFRoZSBwaXhlbF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4KKyAgICAgICAg
IyBpbWFnZSBkdW1wIGlmIHRoZSBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQg
dG8gYSBibGFuaworICAgICAgICAjIHZhbHVlIGlmIHdlIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJh
c2VsaW5lLgorICAgICAgICAjIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYSBwcmV2aW91cyBy
dW4gd2lsbCBiZSBjb3BpZWQgaW50bworICAgICAgICAjIHRoZSBiYXNlbGluZS4pCisgICAgICAg
IGltYWdlX2hhc2ggPSB0ZXN0X2luZm8uaW1hZ2VfaGFzaAorICAgICAgICBpZiBpbWFnZV9oYXNo
IGFuZCBzZWxmLl90ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lOgorICAgICAgICAgICAgaW1hZ2VfaGFz
aCA9ICIiCisgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi53cml0ZSgoIiVzICVz
ICVzXG4iICUKKyAgICAgICAgICAgICh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwg
aW1hZ2VfaGFzaCkpKQorCisgICAgICAgICMgSWYgdGhlIHRlc3Qgc2hlbGwgaXMgZGVhZCwgdGhl
IGFib3ZlIG1heSBjYXVzZSBhbiBJT0Vycm9yIGFzIHdlCisgICAgICAgICMgdHJ5IHRvIHdyaXRl
IG9udG8gdGhlIGJyb2tlbiBwaXBlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0ZXN0IGZvcgorICAg
ICAgICAjIHRoaXMgdGVzdCBzaGVsbCBwcm9jZXNzLCB0aGFuIHRoZSB0ZXN0IHNoZWxsIGRpZCBu
b3QKKyAgICAgICAgIyBzdWNjZXNzZnVsbHkgc3RhcnQuIElmIHRoaXMgaXMgbm90IHRoZSBmaXJz
dCB0ZXN0LCB0aGVuIHRoZQorICAgICAgICAjIHByZXZpb3VzIHRlc3RzIGhhdmUgY2F1c2VkIHNv
bWUga2luZCBvZiBkZWxheWVkIGNyYXNoLiBXZSBkb24ndAorICAgICAgICAjIHRyeSB0byByZWNv
dmVyIGhlcmUuCisgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi5mbHVzaCgpCisK
KyAgICAgICAgc3RhdHMgPSBQcm9jZXNzT3V0cHV0KHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYywgdGVz
dF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywg
c2VsZi5fdGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy50YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgICAgIHNlbGYuX3Rlc3Rfc3RhdHMuYXBwZW5kKHN0
YXRzKQorICAgICAgICByZXR1cm4gc3RhdHMuZmFpbHVyZXMKKworICAgIGRlZiBfRW5zdXJlVGVz
dFNoZWxsSXNSdW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJTdGFydCB0aGUgc2hhcmVkIHRlc3Qg
c2hlbGwsIGlmIGl0J3Mgbm90IHJ1bm5pbmcuICBOb3QgZm9yIHVzZSB3aGVuCisgICAgICAgIHJ1
bm5pbmcgdGVzdHMgc2luZ2x5LCBzaW5jZSB0aG9zZSBlYWNoIHN0YXJ0IGEgc2VwYXJhdGUgdGVz
dCBzaGVsbCBpbgorICAgICAgICB0aGVpciBvd24gdGhyZWFkLgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgKG5vdCBzZWxmLl90ZXN0X3NoZWxsX3Byb2Mgb3IKKyAgICAgICAgICAgIHNlbGYuX3Rl
c3Rfc2hlbGxfcHJvYy5wb2xsKCkgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgc2VsZi5fdGVz
dF9zaGVsbF9wcm9jID0gU3RhcnRUZXN0U2hlbGwoc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
c2hlbGxfYXJncykKKworICAgIGRlZiBfS2lsbFRlc3RTaGVsbChzZWxmKToKKyAgICAgICAgIiIi
S2lsbCB0aGUgdGVzdCBzaGVsbCBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKKyAgICAgICAg
aWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9w
cm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRv
dXQuY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGVycjoK
KyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAg
ICAgICAgICAgIGlmIChzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJykgYW5k
CisgICAgICAgICAgICAgICAgbm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5wb2xsKCkpOgorICAg
ICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1l
cyBvbiBPUyBYLgorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikK
KyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnBpZCld
LCBzdGRlcnI9bnVsbCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKKyAgICAgICAgICAg
IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2
ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS93ZWJzb2NrZXRfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjIxMmJkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93ZWJzb2NrZXRfc2VydmVyLnB5CkBA
IC0wLDAgKzEsMjczIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAy
MDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyIiIkEgY2xhc3MgdG8gaGVs
cCBzdGFydC9zdG9wIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMu
IiIiCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQor
aW1wb3J0IHVybGxpYgorCitpbXBvcnQgcGF0aF91dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxz
CitpbXBvcnQgaHR0cF9zZXJ2ZXIKKworX1dTX0xPR19QUkVGSVggPSAncHl3ZWJzb2NrZXQud3Mu
bG9nLScKK19XU1NfTE9HX1BSRUZJWCA9ICdweXdlYnNvY2tldC53c3MubG9nLScKKworX0RFRkFV
TFRfV1NfUE9SVCA9IDg4ODAKK19ERUZBVUxUX1dTU19QT1JUID0gOTMyMworCisKK2RlZiBVcmxJ
c0FsaXZlKHVybCk6CisgICIiIkNoZWNrcyB0byBzZWUgaWYgd2UgZ2V0IGFuIGh0dHAgcmVzcG9u
c2UgZnJvbSB8dXJsfC4KKyAgV2UgcG9sbCB0aGUgdXJsIDUgdGltZXMgd2l0aCBhIDEgc2Vjb25k
IGRlbGF5LiAgSWYgd2UgZG9uJ3QKKyAgZ2V0IGEgcmVwbHkgaW4gdGhhdCB0aW1lLCB3ZSBnaXZl
IHVwIGFuZCBhc3N1bWUgdGhlIGh0dHBkCisgIGRpZG4ndCBzdGFydCBwcm9wZXJseS4KKworICBB
cmdzOgorICAgIHVybDogVGhlIFVSTCB0byBjaGVjay4KKyAgUmV0dXJuOgorICAgIFRydWUgaWYg
dGhlIHVybCBpcyBhbGl2ZS4KKyAgIiIiCisgIHdhaXRfdGltZSA9IDUKKyAgd2hpbGUgd2FpdF90
aW1lID4gMDoKKyAgICB0cnk6CisgICAgICByZXNwb25zZSA9IHVybGxpYi51cmxvcGVuKHVybCkK
KyAgICAgICMgU2VydmVyIGlzIHVwIGFuZCByZXNwb25kaW5nLgorICAgICAgcmV0dXJuIFRydWUK
KyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgIHBhc3MKKyAgICB3YWl0X3RpbWUgLT0gMQorICAg
ICMgV2FpdCBhIHNlY29uZCBhbmQgdHJ5IGFnYWluLgorICAgIHRpbWUuc2xlZXAoMSkKKworICBy
ZXR1cm4gRmFsc2UKKworCitkZWYgUmVtb3ZlTG9nRmlsZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6
CisgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoK
KyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKKyAgICAgICAgICAgIGZ1
bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCisgICAgICAgICAgICBvcy5yZW1v
dmUoZnVsbF9wYXRoKQorCisKK2NsYXNzIFB5V2ViU29ja2V0Tm90U3RhcnRlZChFeGNlcHRpb24p
OgorICAgIHBhc3MKKworCitjbGFzcyBQeVdlYlNvY2tldE5vdEZvdW5kKEV4Y2VwdGlvbik6Cisg
ICAgcGFzcworCisKK2NsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBwb3J0PV9ERUZBVUxUX1dTX1BPUlQs
CisgICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgdXNlX3Rscz1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgcHJpdmF0ZV9rZXk9aHR0cF9zZXJ2ZXIuTGlnaHR0cGQu
X3BlbV9maWxlLAorICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZT1odHRwX3NlcnZlci5MaWdo
dHRwZC5fcGVtX2ZpbGUsCisgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1Ob25lLAor
ICAgICAgICAgICAgICAgICBwaWRmaWxlPU5vbmUpOgorICAgICAgICAiIiJBcmdzOgorICAgICAg
ICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1
bHQgZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBodHRwX3NlcnZlci5MaWdodHRwZC5f
X2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3J0PXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJvb3Q9cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJfY3lnd2luPXJlZ2lzdGVyX2N5Z3dpbikKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91
dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKKyAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5fdXNlX3Rs
cyA9IHVzZV90bHMKKyAgICAgICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBwcml2YXRlX2tleQorICAg
ICAgICBzZWxmLl9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlCisgICAgICAgIGlmIHNlbGYuX3Bv
cnQ6CisgICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCisgICAgICAgIGlm
IHNlbGYuX3VzZV90bHM6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSA9ICdQeVdlYlNv
Y2tldChTZWN1cmUpJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyX25h
bWUgPSAnUHlXZWJTb2NrZXQnCisgICAgICAgIHNlbGYuX3BpZGZpbGUgPSBwaWRmaWxlCisgICAg
ICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorCisgICAgICAgICMgV2Via2l0IHRlc3RzCisgICAgICAg
IGlmIHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHMgPSBvcy5wYXRo
LmFic3BhdGgoc2VsZi5fcm9vdCkKKyAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMg
PSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuX3Jv
b3QsICd3ZWJzb2NrZXQnLCAndGVzdHMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gcGF0aF91dGlscy5Q
YXRoRnJvbUJhc2UoCisgICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdXZWJLaXQn
LCAnTGF5b3V0VGVzdHMnLCAnd2Vic29ja2V0JywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rz
JykKKyAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHMgPSBwYXRoX3V0aWxzLlBhdGhG
cm9tQmFzZSgKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdM
YXlvdXRUZXN0cycpCisgICAgICAgICAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6
CisgICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IE5vbmUKKworICAgIGRl
ZiBTdGFydChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dlYl9zb2NrZXRfdGVzdHM6Cisg
ICAgICAgICAgICBsb2dnaW5nLmluZm8oJ05vIG5lZWQgdG8gc3RhcnQgJXMgc2VydmVyLicgJSBz
ZWxmLl9zZXJ2ZXJfbmFtZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLklz
UnVubmluZygpOgorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RTdGFydGVkKCclcyBp
cyBhbHJlYWR5IHJ1bm5pbmcuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0
aW1lKCclZCViJVktJUglTSVTJykKKyAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKKyAgICAgICAg
ICAgIGxvZ19wcmVmaXggPSBfV1NTX0xPR19QUkVGSVgKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGxvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAorICAgICAgICBsb2dfZmlsZV9uYW1lID0g
bG9nX3ByZWZpeCArIHRpbWVfc3RyCisKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4g
V2Ugb25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KKyAgICAgICAgUmVtb3ZlTG9nRmls
ZXMoc2VsZi5fb3V0cHV0X2RpciwgbG9nX3ByZWZpeCkKKworICAgICAgICBlcnJvcl9sb2cgPSBv
cy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICItZXJyLnR4dCIp
CisKKyAgICAgICAgb3V0cHV0X2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBs
b2dfZmlsZV9uYW1lICsgIi1vdXQudHh0IikKKyAgICAgICAgc2VsZi5fd3NvdXQgPSBvcGVuKG91
dHB1dF9sb2csICJ3IikKKworICAgICAgICBweXRob25faW50ZXJwID0gc3lzLmV4ZWN1dGFibGUK
KyAgICAgICAgcHl3ZWJzb2NrZXRfYmFzZSA9IHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKAorICAg
ICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29scycsICdweXdlYnNv
Y2tldCcpCisgICAgICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IHBhdGhfdXRpbHMuUGF0aEZyb21C
YXNlKAorICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29scycs
ICdweXdlYnNvY2tldCcsCisgICAgICAgICAgICAnbW9kX3B5d2Vic29ja2V0JywgJ3N0YW5kYWxv
bmUucHknKQorICAgICAgICBzdGFydF9jbWQgPSBbCisgICAgICAgICAgICBweXRob25faW50ZXJw
LCBweXdlYnNvY2tldF9zY3JpcHQsCisgICAgICAgICAgICAnLXAnLCBzdHIoc2VsZi5fcG9ydCks
CisgICAgICAgICAgICAnLWQnLCBzZWxmLl9sYXlvdXRfdGVzdHMsCisgICAgICAgICAgICAnLXMn
LCBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAorICAgICAgICAgICAgJy1sJywgZXJyb3JfbG9nLAor
ICAgICAgICBdCisgICAgICAgIGlmIHNlbGYuX3VzZV90bHM6CisgICAgICAgICAgICBzdGFydF9j
bWQuZXh0ZW5kKFsnLXQnLCAnLWsnLCBzZWxmLl9wcml2YXRlX2tleSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICctYycsIHNlbGYuX2NlcnRpZmljYXRlXSkKKworICAgICAgICAjIFB1
dCB0aGUgY3lnd2luIGRpcmVjdG9yeSBmaXJzdCBpbiB0aGUgcGF0aCB0byBmaW5kIGN5Z3dpbjEu
ZGxsCisgICAgICAgIGVudiA9IG9zLmVudmlyb24KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGlu
ICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgICAgICBlbnZbJ1BBVEgnXSA9ICclczslcycg
JSAoCisgICAgICAgICAgICAgICAgcGF0aF91dGlscy5QYXRoRnJvbUJhc2UoJ3RoaXJkX3BhcnR5
JywgJ2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAgICAgICAgICBlbnZbJ1BBVEgnXSkKKworICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgc2VsZi5fcmVnaXN0ZXJfY3lnd2lu
OgorICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZSgndGhp
cmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykK
KyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQorCisgICAg
ICAgIGVudlsnUFlUSE9OUEFUSCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhz
ZXAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywg
JycpKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlci4nICUgc2Vs
Zi5fc2VydmVyX25hbWUpCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVu
KHN0YXJ0X2NtZCwgc3Rkb3V0PXNlbGYuX3dzb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnY9ZW52KQorCisgICAgICAgICMgV2FpdCBhIGJpdCBiZWZvcmUg
Y2hlY2tpbmcgdGhlIGxpdmVuZXNzIG9mIHRoZSBzZXJ2ZXIuCisgICAgICAgIHRpbWUuc2xlZXAo
MC41KQorCisgICAgICAgIGlmIHNlbGYuX3VzZV90bHM6CisgICAgICAgICAgICB1cmwgPSAnaHR0
cHMnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAnaHR0cCcKKyAgICAgICAgdXJs
ID0gdXJsICsgJzovLzEyNy4wLjAuMTolZC8nICUgc2VsZi5fcG9ydAorICAgICAgICBpZiBub3Qg
VXJsSXNBbGl2ZSh1cmwpOgorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RTdGFydGVk
KAorICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gc3RhcnQgJXMgc2VydmVyIG9uIHBvcnQgJXMu
JyAlCisgICAgICAgICAgICAgICAgICAgIChzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5fcG9ydCkp
CisKKyAgICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKKyAgICAgICAgaWYg
c2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlICE9IE5vbmU6CisgICAgICAgICAgICByYWlzZSBQeVdl
YlNvY2tldE5vdFN0YXJ0ZWQoCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzdGFydCAlcyBz
ZXJ2ZXIuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQorICAgICAgICBpZiBzZWxmLl9waWRmaWxlOgor
ICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGlkZmlsZSwgJ3cnKQorICAgICAgICAgICAgZi53
cml0ZSgiJWQiICUgc2VsZi5fcHJvY2Vzcy5waWQpCisgICAgICAgICAgICBmLmNsb3NlKCkKKwor
ICAgIGRlZiBTdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGZvcmNlIGFu
ZCBub3Qgc2VsZi5Jc1J1bm5pbmcoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlm
IHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAg
ICAgICBlbGlmIHNlbGYuX3BpZGZpbGU6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRm
aWxlKQorICAgICAgICAgICAgcGlkID0gaW50KGYucmVhZCgpLnN0cmlwKCkpCisgICAgICAgICAg
ICBmLmNsb3NlKCkKKworICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgcmFpc2UgUHlX
ZWJTb2NrZXROb3RGb3VuZCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2Vy
dmVyIHBpZC4nICUgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zygn
U2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkK
KyAgICAgICAgcGxhdGZvcm1fdXRpbHMuS2lsbFByb2Nlc3MocGlkKQorCisgICAgICAgIGlmIHNl
bGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICAg
ICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl93c291dDoKKyAgICAg
ICAgICAgIHNlbGYuX3dzb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9u
ZQorCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgIyBQcm92aWRlIHNvbWUgY29t
bWFuZCBsaW5lIHBhcmFtcyBmb3Igc3RhcnRpbmcgdGhlIFB5V2ViU29ja2V0IHNlcnZlcgorICAg
ICMgbWFudWFsbHkuCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigp
CisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXNlcnZlcicsIHR5cGU9J2Nob2ljZScs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WydzdGFydCcsICdzdG9wJ10s
IGRlZmF1bHQ9J3N0YXJ0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2Vy
dmVyIGFjdGlvbiAoc3RhcnR8c3RvcCknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbign
LXAnLCAnLS1wb3J0JywgZGVzdD0ncG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9Tm9uZSwgaGVscD0nUG9ydCB0byBsaXN0ZW4gb24nKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbignLXInLCAnLS1yb290JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0nQWJzb2x1dGUgcGF0aCB0byBEb2N1bWVudFJvb3QgJworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcob3ZlcnJpZGVzIGxheW91dCB0ZXN0IHJvb3RzKScpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRscycsIGRlc3Q9J3VzZV90bHMnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6
Ly8pJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1rJywgJy0tcHJpdmF0ZV9rZXkn
LCBkZXN0PSdwcml2YXRlX2tleScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9JycsIGhlbHA9J1RMUyBwcml2YXRlIGtleSBmaWxlLicpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCctYycsICctLWNlcnRpZmljYXRlJywgZGVzdD0nY2VydGlmaWNhdGUnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMgY2VydGlmaWNh
dGUgZmlsZS4nKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWdpc3Rlcl9jeWd3
aW4nLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0PSJyZWdpc3Rlcl9jeWd3aW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdSZWdpc3RlciBDeWd3aW4gcGF0aHMgKG9uIFdpbiB0cnkgYm90cyknKQorICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbignLS1waWRmaWxlJywgaGVscD0ncGF0aCB0byBwaWQgZmlsZS4nKQor
ICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYg
bm90IG9wdGlvbnMucG9ydDoKKyAgICAgICAgaWYgb3B0aW9ucy51c2VfdGxzOgorICAgICAgICAg
ICAgb3B0aW9ucy5wb3J0ID0gX0RFRkFVTFRfV1NTX1BPUlQKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG9wdGlvbnMucG9ydCA9IF9ERUZBVUxUX1dTX1BPUlQKKworICAgIGt3ZHMgPSB7J3Bv
cnQnOiBvcHRpb25zLnBvcnQsICd1c2VfdGxzJzogb3B0aW9ucy51c2VfdGxzfQorICAgIGlmIG9w
dGlvbnMucm9vdDoKKyAgICAgICAga3dkc1sncm9vdCddID0gb3B0aW9ucy5yb290CisgICAgaWYg
b3B0aW9ucy5wcml2YXRlX2tleToKKyAgICAgICAga3dkc1sncHJpdmF0ZV9rZXknXSA9IG9wdGlv
bnMucHJpdmF0ZV9rZXkKKyAgICBpZiBvcHRpb25zLmNlcnRpZmljYXRlOgorICAgICAgICBrd2Rz
WydjZXJ0aWZpY2F0ZSddID0gb3B0aW9ucy5jZXJ0aWZpY2F0ZQorICAgIGt3ZHNbJ3JlZ2lzdGVy
X2N5Z3dpbiddID0gb3B0aW9ucy5yZWdpc3Rlcl9jeWd3aW4KKyAgICBpZiBvcHRpb25zLnBpZGZp
bGU6CisgICAgICAgIGt3ZHNbJ3BpZGZpbGUnXSA9IG9wdGlvbnMucGlkZmlsZQorCisgICAgcHl3
ZWJzb2NrZXQgPSBQeVdlYlNvY2tldCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICoqa3dkcykKKwor
ICAgIGlmICdzdGFydCcgPT0gb3B0aW9ucy5zZXJ2ZXI6CisgICAgICAgIHB5d2Vic29ja2V0LlN0
YXJ0KCkKKyAgICBlbHNlOgorICAgICAgICBweXdlYnNvY2tldC5TdG9wKGZvcmNlPVRydWUpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJh
c2VsaW5lLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmVi
YXNlbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTZlMTlkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcmViYXNlbGluZS5weQpAQCAtMCwwICsxLDEwMTEgQEAKKyMhdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKyIiIlJlYmFzZWxpbmluZyB0b29sIHRoYXQgYXV0b21hdGljYWxseSBwcm9kdWNlcyBi
YXNlbGluZXMgZm9yIGFsbCBwbGF0Zm9ybXMuCisKK1RoZSBzY3JpcHQgZG9lcyB0aGUgZm9sbG93
aW5nIGZvciBlYWNoIHBsYXRmb3JtIHNwZWNpZmllZDoKKyAgMS4gQ29tcGlsZSBhIGxpc3Qgb2Yg
dGVzdHMgdGhhdCBuZWVkIHJlYmFzZWxpbmluZy4KKyAgMi4gRG93bmxvYWQgdGVzdCByZXN1bHQg
YXJjaGl2ZSBmcm9tIGJ1aWxkYm90IGZvciB0aGUgcGxhdGZvcm0uCisgIDMuIEV4dHJhY3QgYmFz
ZWxpbmVzIGZyb20gdGhlIGFyY2hpdmUgZmlsZSBmb3IgYWxsIGlkZW50aWZpZWQgZmlsZXMuCisg
IDQuIEFkZCBuZXcgYmFzZWxpbmVzIHRvIFNWTiByZXBvc2l0b3J5LgorICA1LiBGb3IgZWFjaCB0
ZXN0IHRoYXQgaGFzIGJlZW4gcmViYXNlbGluZWQsIHJlbW92ZSB0aGlzIHBsYXRmb3JtIG9wdGlv
biBmcm9tCisgICAgIHRoZSB0ZXN0IGluIHRlc3RfZXhwZWN0YXRpb24udHh0LiBJZiBubyBvdGhl
ciBwbGF0Zm9ybXMgcmVtYWluIGFmdGVyCisgICAgIHJlbW92YWwsIGRlbGV0ZSB0aGUgcmViYXNl
bGluZWQgdGVzdCBmcm9tIHRoZSBmaWxlLgorCitBdCB0aGUgZW5kLCB0aGUgc2NyaXB0IGdlbmVy
YXRlcyBhIGh0bWwgdGhhdCBjb21wYXJlcyBvbGQgYW5kIG5ldyBiYXNlbGluZXMuCisiIiIKKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2lt
cG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZp
bGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCitpbXBvcnQgd2ViYnJvd3NlcgoraW1wb3J0
IHppcGZpbGUKKworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20gdGVzdF90eXBlcyBp
bXBvcnQgaW1hZ2VfZGlmZgorZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKKworIyBS
ZXBvc2l0b3J5IHR5cGUgY29uc3RhbnRzLgorUkVQT19TVk4sIFJFUE9fVU5LTk9XTiA9IHJhbmdl
KDIpCisKK0JBU0VMSU5FX1NVRkZJWEVTID0gWycudHh0JywgJy5wbmcnLCAnLmNoZWNrc3VtJ10K
K1JFQkFTRUxJTkVfUExBVEZPUk1fT1JERVIgPSBbJ21hYycsICd3aW4nLCAnd2luLXhwJywgJ3dp
bi12aXN0YScsICdsaW51eCddCitBUkNISVZFX0RJUl9OQU1FX0RJQ1QgPSB7J3dpbic6ICd3ZWJr
aXQtcmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnd2luLXZpc3RhJzogJ3dlYmtpdC1k
YmctdmlzdGEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd3aW4teHAnOiAnd2Via2l0LXJl
bCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ21hYyc6ICd3ZWJraXQtcmVsLW1hYzUnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICdsaW51eCc6ICd3ZWJraXQtcmVsLWxpbnV4JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAnd2luLWNhbmFyeSc6ICd3ZWJraXQtcmVsLXdlYmtpdC1v
cmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd3aW4tdmlzdGEtY2FuYXJ5JzogJ3dlYmtp
dC1kYmctdmlzdGEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd3aW4teHAtY2FuYXJ5Jzog
J3dlYmtpdC1yZWwtd2Via2l0LW9yZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ21hYy1j
YW5hcnknOiAnd2Via2l0LXJlbC1tYWMtd2Via2l0LW9yZycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2xpbnV4LWNhbmFyeSc6ICd3ZWJraXQtcmVsLWxpbnV4LXdlYmtpdC1vcmcnfQorCisK
K2RlZiBSdW5TaGVsbFdpdGhSZXR1cm5Db2RlKGNvbW1hbmQsIHByaW50X291dHB1dD1GYWxzZSk6
CisgICAgIiIiRXhlY3V0ZXMgYSBjb21tYW5kIGFuZCByZXR1cm5zIHRoZSBvdXRwdXQgYW5kIHBy
b2Nlc3MgcmV0dXJuIGNvZGUuCisKKyAgICBBcmdzOgorICAgICAgY29tbWFuZDogcHJvZ3JhbSBh
bmQgYXJndW1lbnRzLgorICAgICAgcHJpbnRfb3V0cHV0OiBpZiB0cnVlLCBwcmludCB0aGUgY29t
bWFuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dC4KKworICAgIFJldHVybnM6CisgICAgICBj
b21tYW5kIG91dHB1dCwgcmV0dXJuIGNvZGUKKyAgICAiIiIKKworICAgICMgVXNlIGEgc2hlbGwg
Zm9yIHN1YmNvbW1hbmRzIG9uIFdpbmRvd3MgdG8gZ2V0IGEgUEFUSCBzZWFyY2guCisgICAgdXNl
X3NoZWxsID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisgICAgcCA9IHN1YnByb2Nl
c3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPXVzZV9zaGVsbCkKKyAg
ICBpZiBwcmludF9vdXRwdXQ6CisgICAgICAgIG91dHB1dF9hcnJheSA9IFtdCisgICAgICAgIHdo
aWxlIFRydWU6CisgICAgICAgICAgICBsaW5lID0gcC5zdGRvdXQucmVhZGxpbmUoKQorICAgICAg
ICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlm
IHByaW50X291dHB1dDoKKyAgICAgICAgICAgICAgICBwcmludCBsaW5lLnN0cmlwKCdcbicpCisg
ICAgICAgICAgICBvdXRwdXRfYXJyYXkuYXBwZW5kKGxpbmUpCisgICAgICAgIG91dHB1dCA9ICcn
LmpvaW4ob3V0cHV0X2FycmF5KQorICAgIGVsc2U6CisgICAgICAgIG91dHB1dCA9IHAuc3Rkb3V0
LnJlYWQoKQorICAgIHAud2FpdCgpCisgICAgcC5zdGRvdXQuY2xvc2UoKQorCisgICAgcmV0dXJu
IG91dHB1dCwgcC5yZXR1cm5jb2RlCisKKworZGVmIFJ1blNoZWxsKGNvbW1hbmQsIHByaW50X291
dHB1dD1GYWxzZSk6CisgICAgIiIiRXhlY3V0ZXMgYSBjb21tYW5kIGFuZCByZXR1cm5zIHRoZSBv
dXRwdXQuCisKKyAgICBBcmdzOgorICAgICAgY29tbWFuZDogcHJvZ3JhbSBhbmQgYXJndW1lbnRz
LgorICAgICAgcHJpbnRfb3V0cHV0OiBpZiB0cnVlLCBwcmludCB0aGUgY29tbWFuZCByZXN1bHRz
IHRvIHN0YW5kYXJkIG91dHB1dC4KKworICAgIFJldHVybnM6CisgICAgICBjb21tYW5kIG91dHB1
dAorICAgICIiIgorCisgICAgb3V0cHV0LCByZXR1cm5fY29kZSA9IFJ1blNoZWxsV2l0aFJldHVy
bkNvZGUoY29tbWFuZCwgcHJpbnRfb3V0cHV0KQorICAgIHJldHVybiBvdXRwdXQKKworCitkZWYg
TG9nRGFzaGVkU3RyaW5nKHRleHQsIHBsYXRmb3JtLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuSU5G
Tyk6CisgICAgIiIiTG9nIHRleHQgbWVzc2FnZSB3aXRoIGRhc2hlcyBvbiBib3RoIHNpZGVzLiIi
IgorCisgICAgbXNnID0gdGV4dAorICAgIGlmIHBsYXRmb3JtOgorICAgICAgICBtc2cgKz0gJzog
JyArIHBsYXRmb3JtCisgICAgaWYgbGVuKG1zZykgPCA3ODoKKyAgICAgICAgZGFzaGVzID0gJy0n
ICogKCg3OCAtIGxlbihtc2cpKSAvIDIpCisgICAgICAgIG1zZyA9ICclcyAlcyAlcycgJSAoZGFz
aGVzLCBtc2csIGRhc2hlcykKKworICAgIGlmIGxvZ2dpbmdfbGV2ZWwgPT0gbG9nZ2luZy5FUlJP
UjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcihtc2cpCisgICAgZWxpZiBsb2dnaW5nX2xldmVsID09
IGxvZ2dpbmcuV0FSTklORzoKKyAgICAgICAgbG9nZ2luZy53YXJuKG1zZykKKyAgICBlbHNlOgor
ICAgICAgICBsb2dnaW5nLmluZm8obXNnKQorCisKK2RlZiBTZXR1cEh0bWxEaXJlY3RvcnkoaHRt
bF9kaXJlY3RvcnkpOgorICAgICIiIlNldHVwIHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgaHRtbCBy
ZXN1bHRzLgorCisgICAgICAgQWxsIGh0bWwgcmVsYXRlZCBmaWxlcyBhcmUgc3RvcmVkIGluIHRo
ZSAicmViYXNlbGluZV9odG1sIiBzdWJkaXJlY3RvcnkuCisKKyAgICBBcmdzOgorICAgICAgaHRt
bF9kaXJlY3Rvcnk6IHBhcmVudCBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgdGhlIHJlYmFzZWxpbmlu
ZyByZXN1bHRzLgorICAgICAgICAgICAgICAgICAgICAgIElmIE5vbmUsIGEgdGVtcCBkaXJlY3Rv
cnkgaXMgY3JlYXRlZC4KKworICAgIFJldHVybnM6CisgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQg
c3RvcmVzIHRoZSBodG1sIHJlbGF0ZWQgcmViYXNlbGluaW5nIHJlc3VsdHMuCisgICAgIiIiCisK
KyAgICBpZiBub3QgaHRtbF9kaXJlY3Rvcnk6CisgICAgICAgIGh0bWxfZGlyZWN0b3J5ID0gdGVt
cGZpbGUubWtkdGVtcCgpCisgICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMoaHRtbF9kaXJlY3Rv
cnkpOgorICAgICAgICBvcy5ta2RpcihodG1sX2RpcmVjdG9yeSkKKworICAgIGh0bWxfZGlyZWN0
b3J5ID0gb3MucGF0aC5qb2luKGh0bWxfZGlyZWN0b3J5LCAncmViYXNlbGluZV9odG1sJykKKyAg
ICBsb2dnaW5nLmluZm8oJ0h0bWwgZGlyZWN0b3J5OiAiJXMiJywgaHRtbF9kaXJlY3RvcnkpCisK
KyAgICBpZiBvcy5wYXRoLmV4aXN0cyhodG1sX2RpcmVjdG9yeSk6CisgICAgICAgIHNodXRpbC5y
bXRyZWUoaHRtbF9kaXJlY3RvcnksIFRydWUpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnRGVsZXRl
ZCBmaWxlIGF0IGh0bWwgZGlyZWN0b3J5OiAiJXMiJywgaHRtbF9kaXJlY3RvcnkpCisKKyAgICBp
ZiBub3Qgb3MucGF0aC5leGlzdHMoaHRtbF9kaXJlY3RvcnkpOgorICAgICAgICBvcy5ta2Rpciho
dG1sX2RpcmVjdG9yeSkKKyAgICByZXR1cm4gaHRtbF9kaXJlY3RvcnkKKworCitkZWYgR2V0UmVz
dWx0RmlsZUZ1bGxwYXRoKGh0bWxfZGlyZWN0b3J5LCBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZv
cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlKToKKyAgICAiIiJHZXQg
ZnVsbCBwYXRoIG9mIHRoZSBiYXNlbGluZSByZXN1bHQgZmlsZS4KKworICAgIEFyZ3M6CisgICAg
ICBodG1sX2RpcmVjdG9yeTogZGlyZWN0b3J5IHRoYXQgc3RvcmVzIHRoZSBodG1sIHJlbGF0ZWQg
ZmlsZXMuCisgICAgICBiYXNlbGluZV9maWxlbmFtZTogbmFtZSBvZiB0aGUgYmFzZWxpbmUgZmls
ZS4KKyAgICAgIHBsYXRmb3JtOiB3aW4sIGxpbnV4IG9yIG1hYworICAgICAgcmVzdWx0X3R5cGU6
IHR5cGUgb2YgdGhlIGJhc2VsaW5lIHJlc3VsdDogJy50eHQnLCAnLnBuZycuCisKKyAgICBSZXR1
cm5zOgorICAgICAgRnVsbCBwYXRoIG9mIHRoZSBiYXNlbGluZSBmaWxlIGZvciByZWJhc2VsaW5p
bmcgcmVzdWx0IGNvbXBhcmlzb24uCisgICAgIiIiCisKKyAgICBiYXNlLCBleHQgPSBvcy5wYXRo
LnNwbGl0ZXh0KGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgIHJlc3VsdF9maWxlbmFtZSA9ICclcy0l
cy0lcyVzJyAlIChiYXNlLCBwbGF0Zm9ybSwgcmVzdWx0X3R5cGUsIGV4dCkKKyAgICBmdWxscGF0
aCA9IG9zLnBhdGguam9pbihodG1sX2RpcmVjdG9yeSwgcmVzdWx0X2ZpbGVuYW1lKQorICAgIGxv
Z2dpbmcuZGVidWcoJyAgUmVzdWx0IGZpbGUgZnVsbCBwYXRoOiAiJXMiLicsIGZ1bGxwYXRoKQor
ICAgIHJldHVybiBmdWxscGF0aAorCisKK2NsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CisgICAg
IiIiQ2xhc3MgdG8gcHJvZHVjZSBuZXcgYmFzZWxpbmVzIGZvciBhIGdpdmVuIHBsYXRmb3JtLiIi
IgorCisgICAgUkVWSVNJT05fUkVHRVggPSByJzxhIGhyZWY9XCIoXGQrKS9cIj4nCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0sIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9maWxl
X2RpciA9IHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd3ZWJraXQnLCAndG9vbHMnLAorICAgICAg
ICAgICAgJ2xheW91dF90ZXN0cycpCisgICAgICAgIHNlbGYuX3BsYXRmb3JtID0gcGxhdGZvcm0K
KyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcmViYXNlbGlu
aW5nX3Rlc3RzID0gW10KKyAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMgPSBbXQorCisg
ICAgICAgICMgQ3JlYXRlIHRlc3RzIGFuZCBleHBlY3RhdGlvbnMgaGVscGVyIHdoaWNoIGlzIHVz
ZWQgdG86CisgICAgICAgICMgICAtLiBjb21waWxlIGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVkIHJl
YmFzZWxpbmluZy4KKyAgICAgICAgIyAgIC0uIHVwZGF0ZSB0aGUgdGVzdHMgaW4gdGVzdF9leHBl
Y3RhdGlvbnMgZmlsZSBhZnRlciByZWJhc2VsaW5lCisgICAgICAgICMgICAgICBpcyBkb25lLgor
ICAgICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0aW9ucyA9IFwKKyAgICAgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9kaXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpCisKKyAgICAgICAgc2VsZi5fcmVw
b190eXBlID0gc2VsZi5fR2V0UmVwb1R5cGUoKQorCisgICAgZGVmIFJ1bihzZWxmLCBiYWNrdXAp
OgorICAgICAgICAiIiJSdW4gcmViYXNlbGluZSBwcm9jZXNzLiIiIgorCisgICAgICAgIExvZ0Rh
c2hlZFN0cmluZygnQ29tcGlsaW5nIHJlYmFzZWxpbmluZyB0ZXN0cycsIHNlbGYuX3BsYXRmb3Jt
KQorICAgICAgICBpZiBub3Qgc2VsZi5fQ29tcGlsZVJlYmFzZWxpbmluZ1Rlc3RzKCk6CisgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIExvZ0Rhc2hlZFN0cmluZygnRG93bmxvYWRp
bmcgYXJjaGl2ZScsIHNlbGYuX3BsYXRmb3JtKQorICAgICAgICBhcmNoaXZlX2ZpbGUgPSBzZWxm
Ll9Eb3dubG9hZEJ1aWxkQm90QXJjaGl2ZSgpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnJykKKyAg
ICAgICAgaWYgbm90IGFyY2hpdmVfZmlsZToKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ05v
IGFyY2hpdmUgZm91bmQuJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIExv
Z0Rhc2hlZFN0cmluZygnRXh0cmFjdGluZyBhbmQgYWRkaW5nIG5ldyBiYXNlbGluZXMnLCBzZWxm
Ll9wbGF0Zm9ybSkKKyAgICAgICAgaWYgbm90IHNlbGYuX0V4dHJhY3RBbmRBZGROZXdCYXNlbGlu
ZXMoYXJjaGl2ZV9maWxlKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIExv
Z0Rhc2hlZFN0cmluZygnVXBkYXRpbmcgcmViYXNlbGluZWQgdGVzdHMgaW4gZmlsZScsIHNlbGYu
X3BsYXRmb3JtKQorICAgICAgICBzZWxmLl9VcGRhdGVSZWJhc2VsaW5lZFRlc3RzSW5GaWxlKGJh
Y2t1cCkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcnKQorCisgICAgICAgIGlmIGxlbihzZWxmLl9y
ZWJhc2VsaW5pbmdfdGVzdHMpICE9IGxlbihzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyk6CisgICAg
ICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ05PVCBBTEwgVEVTVFMgVEhBVCBORUVEIFJFQkFTRUxJ
TklORyBIQVZFIEJFRU4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRUJBU0VMSU5F
RC4nKQorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCcgIFRvdGFsIHRlc3RzIG5lZWRpbmcg
cmViYXNlbGluaW5nOiAlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYu
X3JlYmFzZWxpbmluZ190ZXN0cykpCisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJyAgVG90
YWwgdGVzdHMgcmViYXNlbGluZWQ6ICVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZW4oc2VsZi5fcmViYXNlbGluZWRfdGVzdHMpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdBbGwgdGVzdHMgbmVlZGluZyByZWJhc2VsaW5pbmcg
d2VyZSBzdWNjZXNzZnVsbHkgJworICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmVk
LicpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBHZXRSZWJhc2VsaW5pbmdUZXN0
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cworCisgICAg
ZGVmIF9HZXRSZXBvVHlwZShzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSByZXBvc2l0b3J5IHR5
cGUgdGhhdCBjbGllbnQgaXMgdXNpbmcuIiIiCisKKyAgICAgICAgb3V0cHV0LCByZXR1cm5fY29k
ZSA9IFJ1blNoZWxsV2l0aFJldHVybkNvZGUoWydzdm4nLCAnaW5mbyddLCBGYWxzZSkKKyAgICAg
ICAgaWYgcmV0dXJuX2NvZGUgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBSRVBPX1NWTgorCisg
ICAgICAgIHJldHVybiBSRVBPX1VOS05PV04KKworICAgIGRlZiBfQ29tcGlsZVJlYmFzZWxpbmlu
Z1Rlc3RzKHNlbGYpOgorICAgICAgICAiIiJDb21waWxlIGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVk
IHJlYmFzZWxpbmluZyBmb3IgdGhlIHBsYXRmb3JtLgorCisgICAgICAgIFJldHVybnM6CisgICAg
ICAgICAgTGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nIG9yCisgICAgICAgICAg
Tm9uZSBpZiB0aGVyZSBpcyBubyBzdWNoIHRlc3QuCisgICAgICAgICIiIgorCisgICAgICAgIHNl
bGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9IFwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0
YXRpb25zLkdldFJlYmFzZWxpbmluZ0ZhaWx1cmVzKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jl
YmFzZWxpbmluZ190ZXN0czoKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybignTm8gdGVzdHMgZm91
bmQgdGhhdCBuZWVkIHJlYmFzZWxpbmluZy4nKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICBsb2dnaW5nLmluZm8oJ1RvdGFsIG51bWJlciBvZiB0ZXN0cyBuZWVkaW5nIHJlYmFz
ZWxpbmluZyAnCisgICAgICAgICAgICAgICAgICAgICAnZm9yICIlcyI6ICIlZCInLCBzZWxmLl9w
bGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLl9yZWJhc2VsaW5pbmdfdGVz
dHMpKQorCisgICAgICAgIHRlc3Rfbm8gPSAxCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3Jl
YmFzZWxpbmluZ190ZXN0czoKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICAlZDogJXMnLCB0
ZXN0X25vLCB0ZXN0KQorICAgICAgICAgICAgdGVzdF9ubyArPSAxCisKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cworCisgICAgZGVmIF9HZXRMYXRlc3RSZXZpc2lvbihz
ZWxmLCB1cmwpOgorICAgICAgICAiIiJHZXQgdGhlIGxhdGVzdCBsYXlvdXQgdGVzdCByZXZpc2lv
biBudW1iZXIgZnJvbSBidWlsZGJvdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHVybDog
VXJsIHRvIHJldHJpZXZlIGxheW91dCB0ZXN0IHJldmlzaW9uIG51bWJlcnMuCisKKyAgICAgICAg
UmV0dXJuczoKKyAgICAgICAgICBsYXRlc3QgcmV2aXNpb24gb3IKKyAgICAgICAgICBOb25lIG9u
IGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VybCB0byBy
ZXRyaWV2ZSByZXZpc2lvbjogIiVzIicsIHVybCkKKworICAgICAgICBmID0gdXJsbGliLnVybG9w
ZW4odXJsKQorICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgZi5jbG9zZSgpCisK
KyAgICAgICAgcmV2aXNpb25zID0gcmUuZmluZGFsbChzZWxmLlJFVklTSU9OX1JFR0VYLCBjb250
ZW50KQorICAgICAgICBpZiBub3QgcmV2aXNpb25zOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cignRmFpbGVkIHRvIGZpbmQgcmV2aXNpb24sIGNvbnRlbnQ6ICIlcyInLCBjb250ZW50KQorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXZpc2lvbnMuc29ydChrZXk9aW50KQor
ICAgICAgICBsb2dnaW5nLmluZm8oJ0xhdGVzdCByZXZpc2lvbjogIiVzIicsIHJldmlzaW9uc1ts
ZW4ocmV2aXNpb25zKSAtIDFdKQorICAgICAgICByZXR1cm4gcmV2aXNpb25zW2xlbihyZXZpc2lv
bnMpIC0gMV0KKworICAgIGRlZiBfR2V0QXJjaGl2ZURpck5hbWUoc2VsZiwgcGxhdGZvcm0sIHdl
YmtpdF9jYW5hcnkpOgorICAgICAgICAiIiJHZXQgbmFtZSBvZiB0aGUgbGF5b3V0IHRlc3QgYXJj
aGl2ZSBkaXJlY3RvcnkuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBEaXJlY3Rvcnkg
bmFtZSBvcgorICAgICAgICAgIE5vbmUgb24gZmFpbHVyZQorICAgICAgICAiIiIKKworICAgICAg
ICBpZiB3ZWJraXRfY2FuYXJ5OgorICAgICAgICAgICAgcGxhdGZvcm0gKz0gJy1jYW5hcnknCisK
KyAgICAgICAgaWYgcGxhdGZvcm0gaW4gQVJDSElWRV9ESVJfTkFNRV9ESUNUOgorICAgICAgICAg
ICAgcmV0dXJuIEFSQ0hJVkVfRElSX05BTUVfRElDVFtwbGF0Zm9ybV0KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0Nhbm5vdCBmaW5kIHBsYXRmb3JtIGtleSAlcyBp
biBhcmNoaXZlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSBuYW1lIGRp
Y3Rpb25hcnknLCBwbGF0Zm9ybSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYg
X0dldEFyY2hpdmVVcmwoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSB1cmwgdG8gZG93
bmxvYWQgbGF0ZXN0IGxheW91dCB0ZXN0IGFyY2hpdmUuCisKKyAgICAgICAgUmV0dXJuczoKKyAg
ICAgICAgICBVcmwgdG8gZG93bmxvYWQgYXJjaGl2ZSBvcgorICAgICAgICAgIE5vbmUgb24gZmFp
bHVyZQorICAgICAgICAiIiIKKworICAgICAgICBkaXJfbmFtZSA9IHNlbGYuX0dldEFyY2hpdmVE
aXJOYW1lKHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMud2Via2l0X2NhbmFyeSkKKyAgICAgICAgaWYgbm90IGRp
cl9uYW1lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBsb2dnaW5nLmRlYnVn
KCdCdWlsZGJvdCBwbGF0Zm9ybSBkaXIgbmFtZTogIiVzIicsIGRpcl9uYW1lKQorCisgICAgICAg
IHVybF9iYXNlID0gJyVzLyVzLycgJSAoc2VsZi5fb3B0aW9ucy5hcmNoaXZlX3VybCwgZGlyX25h
bWUpCisgICAgICAgIGxhdGVzdF9yZXZpc2lvbiA9IHNlbGYuX0dldExhdGVzdFJldmlzaW9uKHVy
bF9iYXNlKQorICAgICAgICBpZiBsYXRlc3RfcmV2aXNpb24gaXMgTm9uZSBvciBsYXRlc3RfcmV2
aXNpb24gPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYXJjaGl2ZV91
cmwgPSAoJyVzJXMvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnICUgKHVybF9iYXNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0
X3JldmlzaW9uKSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdBcmNoaXZlIHVybDogIiVzIicsIGFy
Y2hpdmVfdXJsKQorICAgICAgICByZXR1cm4gYXJjaGl2ZV91cmwKKworICAgIGRlZiBfRG93bmxv
YWRCdWlsZEJvdEFyY2hpdmUoc2VsZik6CisgICAgICAgICIiIkRvd25sb2FkIGxheW91dCB0ZXN0
IGFyY2hpdmUgZmlsZSBmcm9tIGJ1aWxkYm90LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAg
ICAgVHJ1ZSBpZiBkb3dubG9hZCBzdWNjZWVkZWQgb3IKKyAgICAgICAgICBGYWxzZSBvdGhlcndp
c2UuCisgICAgICAgICIiIgorCisgICAgICAgIHVybCA9IHNlbGYuX0dldEFyY2hpdmVVcmwoKQor
ICAgICAgICBpZiB1cmwgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAg
ICAgZm4gPSB1cmxsaWIudXJscmV0cmlldmUodXJsKVswXQorICAgICAgICBsb2dnaW5nLmluZm8o
J0FyY2hpdmUgZG93bmxvYWRlZCBhbmQgc2F2ZWQgdG8gZmlsZTogIiVzIicsIGZuKQorICAgICAg
ICByZXR1cm4gZm4KKworICAgIGRlZiBfRXh0cmFjdEFuZEFkZE5ld0Jhc2VsaW5lcyhzZWxmLCBh
cmNoaXZlX2ZpbGUpOgorICAgICAgICAiIiJFeHRyYWN0IG5ldyBiYXNlbGluZXMgZnJvbSBhcmNo
aXZlIGFuZCBhZGQgdGhlbSB0byBTVk4gcmVwb3NpdG9yeS4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIGFyY2hpdmVfZmlsZTogZnVsbCBwYXRoIHRvIHRoZSBhcmNoaXZlIGZpbGUuCisKKyAg
ICAgICAgUmV0dXJuczoKKyAgICAgICAgICBMaXN0IG9mIHRlc3RzIHRoYXQgaGF2ZSBiZWVuIHJl
YmFzZWxpbmVkIG9yCisgICAgICAgICAgTm9uZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIKKwor
ICAgICAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZShhcmNoaXZlX2ZpbGUsICdyJykKKyAg
ICAgICAgemlwX25hbWVsaXN0ID0gemlwX2ZpbGUubmFtZWxpc3QoKQorCisgICAgICAgIGxvZ2dp
bmcuZGVidWcoJ3ppcCBmaWxlIG5hbWVsaXN0OicpCisgICAgICAgIGZvciBuYW1lIGluIHppcF9u
YW1lbGlzdDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyAgJyArIG5hbWUpCisKKyAgICAg
ICAgcGxhdGZvcm0gPSBwYXRoX3V0aWxzLlBsYXRmb3JtTmFtZShzZWxmLl9wbGF0Zm9ybSkKKyAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygnUGxhdGZvcm0gZGlyOiAiJXMiJywgcGxhdGZvcm0pCisKKyAg
ICAgICAgdGVzdF9ubyA9IDEKKyAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMgPSBbXQor
ICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6CisgICAgICAgICAg
ICBsb2dnaW5nLmluZm8oJ1Rlc3QgJWQ6ICVzJywgdGVzdF9ubywgdGVzdCkKKworICAgICAgICAg
ICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgc3ZuX2Vycm9yID0gRmFsc2UKKyAgICAgICAg
ICAgIHRlc3RfYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpWzBdCisgICAgICAgICAg
ICBmb3Igc3VmZml4IGluIEJBU0VMSU5FX1NVRkZJWEVTOgorICAgICAgICAgICAgICAgIGFyY2hp
dmVfdGVzdF9uYW1lID0gKCdsYXlvdXQtdGVzdC1yZXN1bHRzLyVzLWFjdHVhbCVzJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCkp
CisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICBBcmNoaXZlIHRlc3QgZmlsZSBuYW1l
OiAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfdGVzdF9uYW1l
KQorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmNoaXZlX3Rlc3RfbmFtZSBpbiB6aXBfbmFtZWxp
c3Q6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICAlcyBmaWxlIG5vdCBpbiBh
cmNoaXZlLicsIHN1ZmZpeCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICAl
cyBmaWxlIGZvdW5kIGluIGFyY2hpdmUuJywgc3VmZml4KQorCisgICAgICAgICAgICAgICAgIyBF
eHRyYWN0IG5ldyBiYXNlbGluZSBmcm9tIGFyY2hpdmUgYW5kIHNhdmUgaXQgdG8gYSB0ZW1wIGZp
bGUuCisgICAgICAgICAgICAgICAgZGF0YSA9IHppcF9maWxlLnJlYWQoYXJjaGl2ZV90ZXN0X25h
bWUpCisgICAgICAgICAgICAgICAgdGVtcF9mZCwgdGVtcF9uYW1lID0gdGVtcGZpbGUubWtzdGVt
cChzdWZmaXgpCisgICAgICAgICAgICAgICAgZiA9IG9zLmZkb3Blbih0ZW1wX2ZkLCAnd2InKQor
ICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkK
KworICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lID0gJyVzLWV4cGVjdGVkJXMnICUg
KHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9mdWxscGF0
aCA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5DaHJvbWl1
bUJhc2VsaW5lUGF0aChwbGF0Zm9ybSksCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Zp
bGVuYW1lKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Z1bGxwYXRoID0gb3MucGF0aC5ub3Jt
cGF0aChleHBlY3RlZF9mdWxscGF0aCkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcg
IEV4cGVjdGVkIGZpbGUgZnVsbCBwYXRoOiAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkX2Z1bGxwYXRoKQorCisgICAgICAgICAgICAgICAgIyBUT0RPKHZpY3Rv
cncpOiBmb3Igbm93LCB0aGUgcmViYXNlbGluaW5nIHRvb2wgY2hlY2tzIHdoZXRoZXIKKyAgICAg
ICAgICAgICAgICAjIG9yIG5vdCBUSElTIGJhc2VsaW5lIGlzIGR1cGxpY2F0ZSBhbmQgc2hvdWxk
IGJlIHNraXBwZWQuCisgICAgICAgICAgICAgICAgIyBXZSBjb3VsZCBpbXByb3ZlIHRoZSB0b29s
IHRvIGNoZWNrIGFsbCBiYXNlbGluZXMgaW4gdXBwZXIKKyAgICAgICAgICAgICAgICAjIGFuZCBs
b3dlcgorICAgICAgICAgICAgICAgICMgbGV2ZWxzIGFuZCByZW1vdmUgYWxsIGR1cGxpY2F0ZWQg
YmFzZWxpbmVzLgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX0lzRHVwQmFzZWxpbmUodGVtcF9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZnVs
bHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0pOgorICAgICAgICAgICAg
ICAgICAgICBvcy5yZW1vdmUodGVtcF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9E
ZWxldGVCYXNlbGluZShleHBlY3RlZF9mdWxscGF0aCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWUKKworICAgICAgICAgICAgICAgICMgQ3JlYXRlIHRoZSBuZXcgYmFzZWxpbmUgZGlyZWN0
b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICAgICMgZXhpc3QuCisgICAg
ICAgICAgICAgICAgcGF0aF91dGlscy5NYXliZU1ha2VEaXJlY3RvcnkoCisgICAgICAgICAgICAg
ICAgICAgIG9zLnBhdGguZGlybmFtZShleHBlY3RlZF9mdWxscGF0aCkpCisKKyAgICAgICAgICAg
ICAgICBzaHV0aWwubW92ZSh0ZW1wX25hbWUsIGV4cGVjdGVkX2Z1bGxwYXRoKQorCisgICAgICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX1N2bkFkZChleHBlY3RlZF9mdWxscGF0aCk6CisgICAgICAg
ICAgICAgICAgICAgIHN2bl9lcnJvciA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIHN1ZmZp
eCAhPSAnLmNoZWNrc3VtJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fQ3JlYXRlSHRtbEJh
c2VsaW5lRmlsZXMoZXhwZWN0ZWRfZnVsbHBhdGgpCisKKyAgICAgICAgICAgIGlmIG5vdCBmb3Vu
ZDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oJyAgTm8gbmV3IGJhc2VsaW5lcyBmb3Vu
ZCBpbiBhcmNoaXZlLicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHN2
bl9lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuKCcgIEZhaWxlZCB0byBh
ZGQgYmFzZWxpbmVzIHRvIFNWTi4nKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBSZWJhc2VsaW5lIHN1Y2NlZWRlZC4nKQorICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cy5hcHBlbmQodGVzdCkKKworICAg
ICAgICAgICAgdGVzdF9ubyArPSAxCisKKyAgICAgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgICAg
ICBvcy5yZW1vdmUoYXJjaGl2ZV9maWxlKQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWJhc2Vs
aW5lZF90ZXN0cworCisgICAgZGVmIF9Jc0R1cEJhc2VsaW5lKHNlbGYsIG5ld19iYXNlbGluZSwg
YmFzZWxpbmVfcGF0aCwgdGVzdCwgc3VmZml4LAorICAgICAgICAgICAgICAgICAgICAgICBwbGF0
Zm9ybSk6CisgICAgICAgICIiIkNoZWNrIHdoZXRoZXIgYSBiYXNlbGluZSBpcyBkdXBsaWNhdGUg
YW5kIGNhbiBmYWxsYmFjayB0byBzYW1lCisgICAgICAgICAgIGJhc2VsaW5lIGZvciBhbm90aGVy
IHBsYXRmb3JtLiBGb3IgZXhhbXBsZSwgaWYgYSB0ZXN0IGhhcyBzYW1lCisgICAgICAgICAgIGJh
c2VsaW5lIG9uIGxpbnV4IGFuZCB3aW5kb3dzLCB0aGVuIHdlIG9ubHkgc3RvcmUgd2luZG93cwor
ICAgICAgICAgICBiYXNlbGluZSBhbmQgbGludXggYmFzZWxpbmUgd2lsbCBmYWxsYmFjayB0byB0
aGUgd2luZG93cyB2ZXJzaW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZXhwZWN0ZWRf
ZmlsZW5hbWU6IGJhc2VsaW5lIGV4cGVjdGF0aW9uIGZpbGUgbmFtZS4KKyAgICAgICAgICB0ZXN0
OiB0ZXN0IG5hbWUuCisgICAgICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0
ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsKKyAgICAgICAgICAgICAgICAgIGUuZy4gJy50eHQn
IG9yICcucG5nJy4KKyAgICAgICAgICBwbGF0Zm9ybTogYmFzZWxpbmUgcGxhdGZvcm0gJ21hYycs
ICd3aW4nIG9yICdsaW51eCcuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlm
IHRoZSBiYXNlbGluZSBpcyB1bm5lY2Vzc2FyeS4KKyAgICAgICAgICBGYWxzZSBvdGhlcndpc2Uu
CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2ZpbGVwYXRoID0gb3MucGF0aC5qb2luKHBhdGhf
dXRpbHMuTGF5b3V0VGVzdHNEaXIoKSwgdGVzdCkKKyAgICAgICAgYWxsX2Jhc2VsaW5lcyA9IHBh
dGhfdXRpbHMuRXhwZWN0ZWRCYXNlbGluZXModGVzdF9maWxlcGF0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkK
KyAgICAgICAgZm9yIChmYWxsYmFja19kaXIsIGZhbGxiYWNrX2ZpbGUpIGluIGFsbF9iYXNlbGlu
ZXM6CisgICAgICAgICAgICBpZiBmYWxsYmFja19kaXIgYW5kIGZhbGxiYWNrX2ZpbGU6CisgICAg
ICAgICAgICAgICAgZmFsbGJhY2tfZnVsbHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKAorICAgICAg
ICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZmFsbGJhY2tfZGlyLCBmYWxsYmFja19maWxlKSkK
KyAgICAgICAgICAgICAgICBpZiBmYWxsYmFja19mdWxscGF0aC5sb3dlcigpICE9IGJhc2VsaW5l
X3BhdGgubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX0RpZmZCYXNl
bGluZXMobmV3X2Jhc2VsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxsYmFja19mdWxscGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBs
b2dnaW5nLmluZm8oJyAgRm91bmQgc2FtZSBiYXNlbGluZSBhdCAlcycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tfZnVsbHBhdGgpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICBkZWYgX0RpZmZCYXNlbGluZXMoc2VsZiwgZmlsZTEsIGZpbGUyKToKKyAgICAgICAgIiIi
Q2hlY2sgd2hldGhlciB0d28gYmFzZWxpbmVzIGFyZSBkaWZmZXJlbnQuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBmaWxlMSwgZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGJhc2VsaW5lcyB0
byBjb21wYXJlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgVHJ1ZSBpZiB0d28gZmls
ZXMgYXJlIGRpZmZlcmVudCBvciBoYXZlIGRpZmZlcmVudCBleHRlbnNpb25zLgorICAgICAgICAg
IEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZXh0MSA9IG9zLnBhdGgu
c3BsaXRleHQoZmlsZTEpWzFdLnVwcGVyKCkKKyAgICAgICAgZXh0MiA9IG9zLnBhdGguc3BsaXRl
eHQoZmlsZTIpWzFdLnVwcGVyKCkKKyAgICAgICAgaWYgZXh0MSAhPSBleHQyOgorICAgICAgICAg
ICAgbG9nZ2luZy53YXJuKCdGaWxlcyB0byBjb21wYXJlIGhhdmUgZGlmZmVyZW50IGV4dC4gJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICdGaWxlMTogJXM7IEZpbGUyOiAlcycsIGZpbGUxLCBm
aWxlMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgZXh0MSA9PSAnLlBO
Ryc6CisgICAgICAgICAgICByZXR1cm4gaW1hZ2VfZGlmZi5JbWFnZURpZmYoc2VsZi5fcGxhdGZv
cm0sICcnKS5EaWZmRmlsZXMoZmlsZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTIpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gdGV4dF9kaWZmLlRlc3RUZXh0RGlmZihzZWxmLl9wbGF0
Zm9ybSwgJycpLkRpZmZGaWxlcyhmaWxlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUyKQorCisgICAg
ZGVmIF9EZWxldGVCYXNlbGluZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlJlbW92ZSB0
aGUgZmlsZSBmcm9tIHJlcG9zaXRvcnkgYW5kIGRlbGV0ZSBpdCBmcm9tIGRpc2suCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogZnVsbCBwYXRoIG9mIHRoZSBmaWxlIHRvIGRl
bGV0ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IGZpbGVuYW1lIG9yIG5vdCBvcy5w
YXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBz
ZWxmLl9yZXBvX3R5cGUgPT0gUkVQT19TVk46CisgICAgICAgICAgICBwYXJlbnRfZGlyLCBiYXNl
bmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCisgICAgICAgICAgICBvcmlnaW5hbF9kaXIg
PSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgb3MuY2hkaXIocGFyZW50X2RpcikKKyAgICAgICAg
ICAgIFJ1blNoZWxsKFsnc3ZuJywgJ2RlbGV0ZScsICctLWZvcmNlJywgYmFzZW5hbWVdLCBGYWxz
ZSkKKyAgICAgICAgICAgIG9zLmNoZGlyKG9yaWdpbmFsX2RpcikKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKworICAgIGRlZiBfVXBkYXRlUmViYXNlbGlu
ZWRUZXN0c0luRmlsZShzZWxmLCBiYWNrdXApOgorICAgICAgICAiIiJVcGRhdGUgdGhlIHJlYmFz
ZWxpbmVkIHRlc3RzIGluIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICBiYWNrdXA6IGlmIFRydWUsIGJhY2t1cCB0aGUgb3JpZ2luYWwgdGVzdCBleHBl
Y3RhdGlvbnMgZmlsZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIG5vCisgICAgICAg
ICIiIgorCisgICAgICAgIGlmIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzOgorICAgICAgICAgICAg
c2VsZi5fdGVzdF9leHBlY3RhdGlvbnMuUmVtb3ZlUGxhdGZvcm1Gcm9tRmlsZSgKKyAgICAgICAg
ICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cywgc2VsZi5fcGxhdGZvcm0sIGJhY2t1cCkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnTm8gdGVzdCB3YXMgcmVi
YXNlbGluZWQgc28gbm90aGluZyB0byByZW1vdmUuJykKKworICAgIGRlZiBfU3ZuQWRkKHNlbGYs
IGZpbGVuYW1lKToKKyAgICAgICAgIiIiQWRkIHRoZSBmaWxlIHRvIFNWTiByZXBvc2l0b3J5Lgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWU6IGZ1bGwgcGF0aCBvZiB0aGUgZmls
ZSB0byBhZGQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIHRoZSBmaWxl
IGFscmVhZHkgZXhpc3RzIGluIFNWTiBvciBpcyBzdWNlc3NmdWxseSBhZGRlZAorICAgICAgICAg
ICAgICAgdG8gU1ZOLgorICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAg
ICAgICAgcGFyZW50X2RpciwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQorICAg
ICAgICBpZiBzZWxmLl9yZXBvX3R5cGUgIT0gUkVQT19TVk4gb3IgcGFyZW50X2RpciA9PSBmaWxl
bmFtZToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiTm8gc3ZuIGNoZWNrb3V0IGZvdW5kLCBz
a2lwIHN2biBhZGQuIikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgb3JpZ2lu
YWxfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIocGFyZW50X2RpcikKKyAgICAg
ICAgc3RhdHVzX291dHB1dCA9IFJ1blNoZWxsKFsnc3ZuJywgJ3N0YXR1cycsIGJhc2VuYW1lXSwg
RmFsc2UpCisgICAgICAgIG9zLmNoZGlyKG9yaWdpbmFsX2RpcikKKyAgICAgICAgb3V0cHV0ID0g
c3RhdHVzX291dHB1dC51cHBlcigpCisgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdBJykg
b3Igb3V0cHV0LnN0YXJ0c3dpdGgoJ00nKToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBG
aWxlIGFscmVhZHkgYWRkZWQgdG8gU1ZOOiAiJXMiJywgZmlsZW5hbWUpCisgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgIGlmIG91dHB1dC5maW5kKCdJUyBOT1QgQSBXT1JLSU5HIENP
UFknKSA+PSAwOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEZpbGUgaXMgbm90IGEgd29y
a2luZyBjb3B5LCBhZGQgaXRzIHBhcmVudDogIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50X2RpcikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9Tdm5BZGQocGFyZW50X2Rp
cikKKworICAgICAgICBvcy5jaGRpcihwYXJlbnRfZGlyKQorICAgICAgICBhZGRfb3V0cHV0ID0g
UnVuU2hlbGwoWydzdm4nLCAnYWRkJywgYmFzZW5hbWVdLCBUcnVlKQorICAgICAgICBvcy5jaGRp
cihvcmlnaW5hbF9kaXIpCisgICAgICAgIG91dHB1dCA9IGFkZF9vdXRwdXQudXBwZXIoKS5yc3Ry
aXAoKQorICAgICAgICBpZiBvdXRwdXQuc3RhcnRzd2l0aCgnQScpIGFuZCBvdXRwdXQuZmluZChi
YXNlbmFtZS51cHBlcigpKSA+PSAwOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEFkZGVk
IG5ldyBmaWxlOiAiJXMiJywgZmlsZW5hbWUpCisgICAgICAgICAgICBzZWxmLl9Tdm5Qcm9wU2V0
KGZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiAobm90IHN0
YXR1c19vdXRwdXQpIGFuZCAoYWRkX291dHB1dC51cHBlcigpLmZpbmQoCisgICAgICAgICAgICAn
QUxSRUFEWSBVTkRFUiBWRVJTSU9OIENPTlRST0wnKSA+PSAwKToKKyAgICAgICAgICAgIGxvZ2dp
bmcuaW5mbygnICBGaWxlIGFscmVhZHkgdW5kZXIgU1ZOIGFuZCBoYXMgbm8gY2hhbmdlOiAiJXMi
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICAgICAgbG9nZ2luZy53YXJuKCcgIEZhaWxlZCB0byBhZGQgZmlsZSB0byBT
Vk46ICIlcyInLCBmaWxlbmFtZSkKKyAgICAgICAgbG9nZ2luZy53YXJuKCcgIFN2biBzdGF0dXMg
b3V0cHV0OiAiJXMiJywgc3RhdHVzX291dHB1dCkKKyAgICAgICAgbG9nZ2luZy53YXJuKCcgIFN2
biBhZGQgb3V0cHV0OiAiJXMiJywgYWRkX291dHB1dCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICBkZWYgX1N2blByb3BTZXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJTZXQgdGhl
IGJhc2VsaW5lIHByb3BlcnR5CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTog
ZnVsbCBwYXRoIG9mIHRoZSBmaWxlIHRvIGFkZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAg
ICAgIFRydWUgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gU1ZOIG9yIGlzIHN1Y2Vzc2Z1
bGx5IGFkZGVkCisgICAgICAgICAgICAgICB0byBTVk4uCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3
aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFt
ZSlbMV0udXBwZXIoKQorICAgICAgICBpZiBleHQgIT0gJy5UWFQnIGFuZCBleHQgIT0gJy5QTkcn
IGFuZCBleHQgIT0gJy5DSEVDS1NVTSc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBw
YXJlbnRfZGlyLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCisgICAgICAgIG9y
aWdpbmFsX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHBhcmVudF9kaXIpCisg
ICAgICAgIGlmIGV4dCA9PSAnLlBORyc6CisgICAgICAgICAgICBjbWQgPSBbJ3N2bicsICdwc2V0
JywgJ3N2bjptaW1lLXR5cGUnLCAnaW1hZ2UvcG5nJywgYmFzZW5hbWVdCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBjbWQgPSBbJ3N2bicsICdwc2V0JywgJ3N2bjplb2wtc3R5bGUnLCAnTEYn
LCBiYXNlbmFtZV0KKworICAgICAgICBsb2dnaW5nLmRlYnVnKCcgIFNldCBzdm4gcHJvcDogJXMn
LCAnICcuam9pbihjbWQpKQorICAgICAgICBSdW5TaGVsbChjbWQsIEZhbHNlKQorICAgICAgICBv
cy5jaGRpcihvcmlnaW5hbF9kaXIpCisKKyAgICBkZWYgX0NyZWF0ZUh0bWxCYXNlbGluZUZpbGVz
KHNlbGYsIGJhc2VsaW5lX2Z1bGxwYXRoKToKKyAgICAgICAgIiIiQ3JlYXRlIGJhc2VsaW5lIGZp
bGVzIChvbGQsIG5ldyBhbmQgZGlmZikgaW4gaHRtbCBkaXJlY3RvcnkuCisKKyAgICAgICAgICAg
VGhlIGZpbGVzIGFyZSB1c2VkIHRvIGNvbXBhcmUgdGhlIHJlYmFzZWxpbmluZyByZXN1bHRzLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgYmFzZWxpbmVfZnVsbHBhdGg6IGZ1bGwgcGF0aCBv
ZiB0aGUgZXhwZWN0ZWQgYmFzZWxpbmUgZmlsZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYg
bm90IGJhc2VsaW5lX2Z1bGxwYXRoIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyhiYXNlbGluZV9mdWxs
cGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENvcHkgdGhlIG5ldyBiYXNl
bGluZSB0byBodG1sIGRpcmVjdG9yeSBmb3IgcmVzdWx0IGNvbXBhcmlzb24uCisgICAgICAgIGJh
c2VsaW5lX2ZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShiYXNlbGluZV9mdWxscGF0aCkKKyAg
ICAgICAgbmV3X2ZpbGUgPSBHZXRSZXN1bHRGaWxlRnVsbHBhdGgoc2VsZi5fb3B0aW9ucy5odG1s
X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZWxpbmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnbmV3JykKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGJhc2VsaW5lX2Z1bGxwYXRoLCBuZXdf
ZmlsZSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEh0bWw6IGNvcGllZCBuZXcgYmFzZWxpbmUg
ZmlsZSBmcm9tICIlcyIgdG8gIiVzIi4nLAorICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVf
ZnVsbHBhdGgsIG5ld19maWxlKQorCisgICAgICAgICMgR2V0IHRoZSBvbGQgYmFzZWxpbmUgZnJv
bSBTVk4gYW5kIHNhdmUgdG8gdGhlIGh0bWwgZGlyZWN0b3J5LgorICAgICAgICBvdXRwdXQgPSBS
dW5TaGVsbChbJ3N2bicsICdjYXQnLCAnLXInLCAnQkFTRScsIGJhc2VsaW5lX2Z1bGxwYXRoXSkK
KyAgICAgICAgaWYgKG5vdCBvdXRwdXQpIG9yIChvdXRwdXQudXBwZXIoKS5yc3RyaXAoKS5lbmRz
d2l0aCgKKyAgICAgICAgICAgICdOTyBTVUNIIEZJTEUgT1IgRElSRUNUT1JZJykpOgorICAgICAg
ICAgICAgbG9nZ2luZy5pbmZvKCcgIE5vIGJhc2UgZmlsZTogIiVzIicsIGJhc2VsaW5lX2Z1bGxw
YXRoKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGJhc2VfZmlsZSA9IEdldFJlc3VsdEZp
bGVGdWxscGF0aChzZWxmLl9vcHRpb25zLmh0bWxfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbGQnKQorICAgICAgICBmID0gb3Bl
bihiYXNlX2ZpbGUsICd3YicpCisgICAgICAgIGYud3JpdGUob3V0cHV0KQorICAgICAgICBmLmNs
b3NlKCkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEh0bWw6IGNyZWF0ZWQgb2xkIGJhc2VsaW5l
IGZpbGU6ICIlcyIuJywKKyAgICAgICAgICAgICAgICAgICAgIGJhc2VfZmlsZSkKKworICAgICAg
ICAjIEdldCB0aGUgZGlmZiBiZXR3ZWVuIG9sZCBhbmQgbmV3IGJhc2VsaW5lcyBhbmQgc2F2ZSB0
byB0aGUgaHRtbCBkaXIuCisgICAgICAgIGlmIGJhc2VsaW5lX2ZpbGVuYW1lLnVwcGVyKCkuZW5k
c3dpdGgoJy5UWFQnKToKKyAgICAgICAgICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY3Vz
dG9tIGRpZmYgY29tbWFuZCBpbiB0aGVpciBzdm4gY29uZmlnCisgICAgICAgICAgICAjIGZpbGUs
IHRoZW4gaXQnbGwgYmUgdXNlZCB3aGVuIHdlIGRvIHN2biBkaWZmLCB3aGljaCB3ZSBkb24ndCB3
YW50CisgICAgICAgICAgICAjIHRvIGhhcHBlbiBzaW5jZSB3ZSB3YW50IHRoZSB1bmlmaWVkIGRp
ZmYuICBVc2luZyAtLWRpZmYtY21kPWRpZmYKKyAgICAgICAgICAgICMgZG9lc24ndCBhbHdheXMg
d29yaywgc2luY2UgdGhleSBjYW4gaGF2ZSBhbm90aGVyIGRpZmYgZXhlY3V0YWJsZQorICAgICAg
ICAgICAgIyBpbiB0aGVpciBwYXRoIHRoYXQgZ2l2ZXMgZGlmZmVyZW50IGxpbmUgZW5kaW5ncy4g
IFNvIHdlIHVzZSBhCisgICAgICAgICAgICAjIGJvZ3VzIHRlbXAgZGlyZWN0b3J5IGFzIHRoZSBj
b25maWcgZGlyZWN0b3J5LCB3aGljaCBnZXRzCisgICAgICAgICAgICAjIGFyb3VuZCB0aGVzZSBw
cm9ibGVtcy4KKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToK
KyAgICAgICAgICAgICAgICBwYXJlbnRfZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcmVudF9kaXIgPSBzeXMucGF0aFswXSAg
IyB0ZW1wZGlyIGlzIG5vdCBzZWN1cmUuCisgICAgICAgICAgICBib2d1c19kaXIgPSBvcy5wYXRo
LmpvaW4ocGFyZW50X2RpciwgInRlbXBfc3ZuX2NvbmZpZyIpCisgICAgICAgICAgICBsb2dnaW5n
LmRlYnVnKCcgIEh0bWw6IHRlbXAgY29uZmlnIGRpcjogIiVzIi4nLCBib2d1c19kaXIpCisgICAg
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYm9ndXNfZGlyKToKKyAgICAgICAgICAgICAg
ICBvcy5ta2Rpcihib2d1c19kaXIpCisgICAgICAgICAgICAgICAgZGVsZXRlX2JvZ3VzX2RpciA9
IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsZXRlX2JvZ3VzX2Rp
ciA9IEZhbHNlCisKKyAgICAgICAgICAgIG91dHB1dCA9IFJ1blNoZWxsKFsic3ZuIiwgImRpZmYi
LCAiLS1jb25maWctZGlyIiwgYm9ndXNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lX2Z1bGxwYXRoXSkKKyAgICAgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAg
ICAgICAgICBkaWZmX2ZpbGUgPSBHZXRSZXN1bHRGaWxlRnVsbHBhdGgoc2VsZi5fb3B0aW9ucy5o
dG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlmZicpCisgICAgICAgICAgICAgICAg
ZiA9IG9wZW4oZGlmZl9maWxlLCAnd2InKQorICAgICAgICAgICAgICAgIGYud3JpdGUob3V0cHV0
KQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5m
bygnICBIdG1sOiBjcmVhdGVkIGJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIi4nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGUpCisKKyAgICAgICAgICAgIGlmIGRlbGV0ZV9i
b2d1c19kaXI6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShib2d1c19kaXIsIFRydWUp
CisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICBIdG1sOiByZW1vdmVkIHRlbXAgY29u
ZmlnIGRpcjogIiVzIi4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9ndXNfZGly
KQorCisKK2NsYXNzIEh0bWxHZW5lcmF0b3Iob2JqZWN0KToKKyAgICAiIiJDbGFzcyB0byBnZW5l
cmF0ZSByZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gaHRtbC4iIiIKKworICAgIEhUTUxf
UkVCQVNFTElORSA9ICgnPGh0bWw+JworICAgICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+Jwor
ICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlPicKKyAgICAgICAgICAgICAgICAgICAgICAg
J2JvZHkge2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO30nCisgICAgICAgICAgICAgICAgICAgICAg
ICcubWFpblRhYmxlIHtiYWNrZ3JvdW5kOiAjNjY2NjY2O30nCisgICAgICAgICAgICAgICAgICAg
ICAgICcubWFpblRhYmxlIHRkICwgLm1haW5UYWJsZSB0aCB7YmFja2dyb3VuZDogd2hpdGU7fScK
KyAgICAgICAgICAgICAgICAgICAgICAgJy5kZXRhaWwge21hcmdpbi1sZWZ0OiAxMHB4OyBtYXJn
aW4tdG9wOiAzcHg7fScKKyAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+JworICAgICAg
ICAgICAgICAgICAgICAgICAnPHRpdGxlPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFyaXNvbiAo
JSh0aW1lKXMpJworICAgICAgICAgICAgICAgICAgICAgICAnPC90aXRsZT4nCisgICAgICAgICAg
ICAgICAgICAgICAgICc8L2hlYWQ+JworICAgICAgICAgICAgICAgICAgICAgICAnPGJvZHk+Jwor
ICAgICAgICAgICAgICAgICAgICAgICAnPGgyPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFyaXNv
biAoJSh0aW1lKXMpPC9oMj4nCisgICAgICAgICAgICAgICAgICAgICAgICclKGJvZHkpcycKKyAg
ICAgICAgICAgICAgICAgICAgICAgJzwvYm9keT4nCisgICAgICAgICAgICAgICAgICAgICAgICc8
L2h0bWw+JykKKyAgICBIVE1MX05PX1JFQkFTRUxJTklOR19URVNUUyA9ICgKKyAgICAgICAgJzxw
Pk5vIHRlc3RzIGZvdW5kIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuPC9wPicpCisgICAgSFRNTF9U
QUJMRV9URVNUID0gKCc8dGFibGUgY2xhc3M9Im1haW5UYWJsZSIgY2VsbHNwYWNpbmc9MSBjZWxs
cGFkZGluZz01PicKKyAgICAgICAgICAgICAgICAgICAgICAgJyVzPC90YWJsZT48YnI+JykKKyAg
ICBIVE1MX1RSX1RFU1QgPSAoJzx0cj4nCisgICAgICAgICAgICAgICAgICAgICc8dGggc3R5bGU9
ImJhY2tncm91bmQtY29sb3I6ICNDREVDREU7IGJvcmRlci1ib3R0b206ICcKKyAgICAgICAgICAg
ICAgICAgICAgJzFweCBzb2xpZCBibGFjazsgZm9udC1zaXplOiAxOHB0OyBmb250LXdlaWdodDog
Ym9sZCIgJworICAgICAgICAgICAgICAgICAgICAnY29sc3Bhbj0iNSI+JworICAgICAgICAgICAg
ICAgICAgICAnPGEgaHJlZj0iJXMiPiVzPC9hPicKKyAgICAgICAgICAgICAgICAgICAgJzwvdGg+
JworICAgICAgICAgICAgICAgICAgICAnPC90cj4nKQorICAgIEhUTUxfVEVTVF9ERVRBSUwgPSAo
JzxkaXYgY2xhc3M9ImRldGFpbCI+JworICAgICAgICAgICAgICAgICAgICAgICAgJzx0cj4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPkJhc2VsaW5lPC90aD4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPlBsYXRmb3JtPC90aD4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIyMDAiPk9sZDwvdGg+JworICAgICAg
ICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0aD0iMjAwIj5OZXc8L3RoPicKKyAgICAgICAgICAg
ICAgICAgICAgICAgICc8dGggd2lkdGg9IjE1MCI+RGlmZmVyZW5jZTwvdGg+JworICAgICAgICAg
ICAgICAgICAgICAgICAgJzwvdHI+JworICAgICAgICAgICAgICAgICAgICAgICAgJyVzJworICAg
ICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicpCisgICAgSFRNTF9URF9OT0xJTksgPSAnPHRk
IGFsaWduPWNlbnRlcj48YT4lczwvYT48L3RkPicKKyAgICBIVE1MX1REX0xJTksgPSAnPHRkIGFs
aWduPWNlbnRlcj48YSBocmVmPSIlKHVyaSlzIj4lKG5hbWUpczwvYT48L3RkPicKKyAgICBIVE1M
X1REX0xJTktfSU1HID0gKCc8dGQ+PGEgaHJlZj0iJSh1cmkpcyI+JworICAgICAgICAgICAgICAg
ICAgICAgICAgJzxpbWcgc3R5bGU9IndpZHRoOiAyMDAiIHNyYz0iJSh1cmkpcyIgLz48L2E+PC90
ZD4nKQorICAgIEhUTUxfVFIgPSAnPHRyPiVzPC90cj4nCisKKyAgICBkZWYgX19pbml0X18oc2Vs
Ziwgb3B0aW9ucywgcGxhdGZvcm1zLCByZWJhc2VsaW5pbmdfdGVzdHMpOgorICAgICAgICBzZWxm
Ll9odG1sX2RpcmVjdG9yeSA9IG9wdGlvbnMuaHRtbF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5f
cGxhdGZvcm1zID0gcGxhdGZvcm1zCisgICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9
IHJlYmFzZWxpbmluZ190ZXN0cworICAgICAgICBzZWxmLl9odG1sX2ZpbGUgPSBvcy5wYXRoLmpv
aW4ob3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdyZWJhc2VsaW5lLmh0bWwnKQorCisgICAgZGVmIEdlbmVyYXRlSHRtbChzZWxm
KToKKyAgICAgICAgIiIiR2VuZXJhdGUgaHRtbCBmaWxlIGZvciByZWJhc2VsaW5pbmcgcmVzdWx0
IGNvbXBhcmlzb24uIiIiCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdHZW5lcmF0aW5nIGh0bWwg
ZmlsZScpCisKKyAgICAgICAgaHRtbF9ib2R5ID0gJycKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jl
YmFzZWxpbmluZ190ZXN0czoKKyAgICAgICAgICAgIGh0bWxfYm9keSArPSBzZWxmLkhUTUxfTk9f
UkVCQVNFTElOSU5HX1RFU1RTCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0cyA9IGxp
c3Qoc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKQorICAgICAgICAgICAgdGVzdHMuc29ydCgpCisK
KyAgICAgICAgICAgIHRlc3Rfbm8gPSAxCisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1Rlc3QgJWQ6ICVzJywgdGVzdF9ubywgdGVz
dCkKKyAgICAgICAgICAgICAgICBodG1sX2JvZHkgKz0gc2VsZi5fR2VuZXJhdGVIdG1sRm9yT25l
VGVzdCh0ZXN0KQorCisgICAgICAgIGh0bWwgPSBzZWxmLkhUTUxfUkVCQVNFTElORSAlICh7J3Rp
bWUnOiB0aW1lLmFzY3RpbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnYm9keSc6IGh0bWxfYm9keX0pCisgICAgICAgIGxvZ2dpbmcuZGVidWcoaHRtbCkKKwor
ICAgICAgICBmID0gb3BlbihzZWxmLl9odG1sX2ZpbGUsICd3JykKKyAgICAgICAgZi53cml0ZSho
dG1sKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBsb2dnaW5nLmluZm8oJ0Jhc2VsaW5l
IGNvbXBhcmlzb24gaHRtbCBnZW5lcmF0ZWQgYXQgIiVzIicsCisgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9odG1sX2ZpbGUpCisKKyAgICBkZWYgU2hvd0h0bWwoc2VsZik6CisgICAgICAgICIi
IkxhdW5jaCB0aGUgcmViYXNlbGluaW5nIGh0bWwgaW4gYnJ3b3Nlci4iIiIKKworICAgICAgICBs
b2dnaW5nLmluZm8oJ0xhdW5jaGluZyBodG1sOiAiJXMiJywgc2VsZi5faHRtbF9maWxlKQorCisg
ICAgICAgIGh0bWxfdXJpID0gcGF0aF91dGlscy5GaWxlbmFtZVRvVXJpKHNlbGYuX2h0bWxfZmls
ZSkKKyAgICAgICAgd2ViYnJvd3Nlci5vcGVuKGh0bWxfdXJpLCAxKQorCisgICAgICAgIGxvZ2dp
bmcuaW5mbygnSHRtbCBsYXVuY2hlZC4nKQorCisgICAgZGVmIF9HZW5lcmF0ZUJhc2VsaW5lTGlu
a3Moc2VsZiwgdGVzdF9iYXNlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybSk6CisgICAgICAgICIiIkdl
bmVyYXRlIGxpbmtzIGZvciBiYXNlbGluZSByZXN1bHRzIChvbGQsIG5ldyBhbmQgZGlmZikuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0X2Jhc2VuYW1lOiBiYXNlIGZpbGVuYW1lIG9m
IHRoZSB0ZXN0CisgICAgICAgICAgc3VmZml4OiBiYXNlbGluZSBmaWxlIHN1ZmZpeGVzOiAnLnR4
dCcsICcucG5nJworICAgICAgICAgIHBsYXRmb3JtOiB3aW4sIGxpbnV4IG9yIG1hYworCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgaHRtbCBsaW5rcyBmb3Igc2hvd2luZyBiYXNlbGluZSBy
ZXN1bHRzIChvbGQsIG5ldyBhbmQgZGlmZikKKyAgICAgICAgIiIiCisKKyAgICAgICAgYmFzZWxp
bmVfZmlsZW5hbWUgPSAnJXMtZXhwZWN0ZWQlcycgJSAodGVzdF9iYXNlbmFtZSwgc3VmZml4KQor
ICAgICAgICBsb2dnaW5nLmRlYnVnKCcgICAgYmFzZWxpbmUgZmlsZW5hbWU6ICIlcyInLCBiYXNl
bGluZV9maWxlbmFtZSkKKworICAgICAgICBuZXdfZmlsZSA9IEdldFJlc3VsdEZpbGVGdWxscGF0
aChzZWxmLl9odG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnbmV3JykKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcgICAgTmV3IGJhc2VsaW5lIGZp
bGU6ICIlcyInLCBuZXdfZmlsZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld19m
aWxlKToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICAgIE5vIG5ldyBiYXNlbGluZSBmaWxl
OiAiJXMiJywgbmV3X2ZpbGUpCisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBvbGRf
ZmlsZSA9IEdldFJlc3VsdEZpbGVGdWxscGF0aChzZWxmLl9odG1sX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2xkJykKKyAgICAgICAgbG9nZ2lu
Zy5pbmZvKCcgICAgT2xkIGJhc2VsaW5lIGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKKyAgICAgICAg
aWYgc3VmZml4ID09ICcucG5nJzoKKyAgICAgICAgICAgIGh0bWxfdGRfbGluayA9IHNlbGYuSFRN
TF9URF9MSU5LX0lNRworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaHRtbF90ZF9saW5rID0g
c2VsZi5IVE1MX1REX0xJTksKKworICAgICAgICBsaW5rcyA9ICcnCisgICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKG9sZF9maWxlKToKKyAgICAgICAgICAgIGxpbmtzICs9IGh0bWxfdGRfbGluayAl
IHsndXJpJzogcGF0aF91dGlscy5GaWxlbmFtZVRvVXJpKG9sZF9maWxlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGJhc2VsaW5lX2ZpbGVuYW1lfQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgICAgTm8gb2xkIGJhc2VsaW5l
IGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKKyAgICAgICAgICAgIGxpbmtzICs9IHNlbGYuSFRNTF9U
RF9OT0xJTksgJSAnJworCisgICAgICAgIGxpbmtzICs9IGh0bWxfdGRfbGluayAlIHsndXJpJzog
cGF0aF91dGlscy5GaWxlbmFtZVRvVXJpKG5ld19maWxlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICduYW1lJzogYmFzZWxpbmVfZmlsZW5hbWV9CisKKyAgICAgICAgZGlmZl9m
aWxlID0gR2V0UmVzdWx0RmlsZUZ1bGxwYXRoKHNlbGYuX2h0bWxfZGlyZWN0b3J5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaWZmJykKKyAgICAgICAgbG9n
Z2luZy5pbmZvKCcgICAgQmFzZWxpbmUgZGlmZiBmaWxlOiAiJXMiJywgZGlmZl9maWxlKQorICAg
ICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkaWZmX2ZpbGUpOgorICAgICAgICAgICAgbGlua3MgKz0g
aHRtbF90ZF9saW5rICUgeyd1cmknOiBwYXRoX3V0aWxzLkZpbGVuYW1lVG9VcmkoCisgICAgICAg
ICAgICAgICAgZGlmZl9maWxlKSwgJ25hbWUnOiAnRGlmZid9CisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBsb2dnaW5nLmluZm8oJyAgICBObyBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyInLCBk
aWZmX2ZpbGUpCisgICAgICAgICAgICBsaW5rcyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgJycK
KworICAgICAgICByZXR1cm4gbGlua3MKKworICAgIGRlZiBfR2VuZXJhdGVIdG1sRm9yT25lVGVz
dChzZWxmLCB0ZXN0KToKKyAgICAgICAgIiIiR2VuZXJhdGUgaHRtbCBmb3Igb25lIHJlYmFzZWxp
bmluZyB0ZXN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdDogbGF5b3V0IHRlc3Qg
bmFtZQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgaHRtbCB0aGF0IGNvbXBhcmVzIGJh
c2VsaW5lIHJlc3VsdHMgZm9yIHRoZSB0ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICB0ZXN0
X2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpWzBdKQor
ICAgICAgICBsb2dnaW5nLmluZm8oJyAgYmFzZW5hbWU6ICIlcyInLCB0ZXN0X2Jhc2VuYW1lKQor
ICAgICAgICByb3dzID0gW10KKyAgICAgICAgZm9yIHN1ZmZpeCBpbiBCQVNFTElORV9TVUZGSVhF
UzoKKyAgICAgICAgICAgIGlmIHN1ZmZpeCA9PSAnLmNoZWNrc3VtJzoKKyAgICAgICAgICAgICAg
ICBjb250aW51ZQorCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgQ2hlY2tpbmcgJXMgZmls
ZXMnLCBzdWZmaXgpCisgICAgICAgICAgICBmb3IgcGxhdGZvcm0gaW4gc2VsZi5fcGxhdGZvcm1z
OgorICAgICAgICAgICAgICAgIGxpbmtzID0gc2VsZi5fR2VuZXJhdGVCYXNlbGluZUxpbmtzKHRl
c3RfYmFzZW5hbWUsIHN1ZmZpeCwKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisgICAg
ICAgICAgICAgICAgaWYgbGlua3M6CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IHNlbGYuSFRN
TF9URF9OT0xJTksgJSBzZWxmLl9HZXRCYXNlbGluZVJlc3VsdFR5cGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdWZmaXgpCisgICAgICAgICAgICAgICAgICAgIHJvdyArPSBzZWxmLkhUTUxf
VERfTk9MSU5LICUgcGxhdGZvcm0KKyAgICAgICAgICAgICAgICAgICAgcm93ICs9IGxpbmtzCisg
ICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyAgICBodG1sIHJvdzogJXMnLCByb3cp
CisKKyAgICAgICAgICAgICAgICAgICAgcm93cy5hcHBlbmQoc2VsZi5IVE1MX1RSICUgcm93KQor
CisgICAgICAgIGlmIHJvd3M6CisgICAgICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4o
cGF0aF91dGlscy5MYXlvdXRUZXN0c0RpcigpLCB0ZXN0KQorICAgICAgICAgICAgaHRtbCA9IHNl
bGYuSFRNTF9UUl9URVNUICUgKHBhdGhfdXRpbHMuRmlsZW5hbWVUb1VyaSh0ZXN0X3BhdGgpLAor
ICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICBodG1sICs9IHNlbGYuSFRNTF9URVNU
X0RFVEFJTCAlICcgJy5qb2luKHJvd3MpCisKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyAg
ICBodG1sIGZvciB0ZXN0OiAlcycsIGh0bWwpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5IVE1M
X1RBQkxFX1RFU1QgJSBodG1sCisKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgX0dldEJh
c2VsaW5lUmVzdWx0VHlwZShzZWxmLCBzdWZmaXgpOgorICAgICAgICAiIiJOYW1lIG9mIHRoZSBi
YXNlbGluZSByZXN1bHQgdHlwZS4iIiIKKworICAgICAgICBpZiBzdWZmaXggPT0gJy5wbmcnOgor
ICAgICAgICAgICAgcmV0dXJuICdQaXhlbCcKKyAgICAgICAgZWxpZiBzdWZmaXggPT0gJy50eHQn
OgorICAgICAgICAgICAgcmV0dXJuICdSZW5kZXIgVHJlZScKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJldHVybiAnT3RoZXInCisKKworZGVmIG1haW4oKToKKyAgICAiIiJNYWluIGZ1bmN0
aW9uIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5lcy4iIiIKKworICAgIG9wdGlvbl9wYXJzZXIgPSBv
cHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXYn
LCAnLS12ZXJib3NlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9y
ZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0naW5jbHVkZSBkZWJ1Zy1sZXZlbCBsb2dn
aW5nLicpCisKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGxhdGZvcm1z
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nbWFjLHdpbix3aW4teHAs
d2luLXZpc3RhLGxpbnV4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ0Nv
bW1hIGRlbGltaXRlZCBsaXN0IG9mIHBsYXRmb3JtcyAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICd0aGF0IG5lZWQgcmViYXNlbGluaW5nLicpKQorCisgICAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctdScsICctLWFyY2hpdmVfdXJsJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdD0oJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3Qv
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0X3Rlc3RfcmVz
dWx0cycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnVXJsIHRvIGZpbmQg
dGhlIGxheW91dCB0ZXN0IHJlc3VsdCBhcmNoaXZlJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnIGZpbGUuJykpCisKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy13
JywgJy0td2Via2l0X2NhbmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlv
bj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFs
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdJZiBUcnVlLCBwdWxsIGJh
c2VsaW5lcyBmcm9tIHdlYmtpdC5vcmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnY2FuYXJ5IGJvdC4nKSkKKworICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWIn
LCAnLS1iYWNrdXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3Jl
X3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnV2hldGhlciBvciBub3QgdG8gYmFja3Vw
IHRoZSBvcmlnaW5hbCB0ZXN0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
IGV4cGVjdGF0aW9ucyBmaWxlIGFmdGVyIHJlYmFzZWxpbmUuJykpCisKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy1kJywgJy0taHRtbF9kaXJlY3RvcnknLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSgnVGhlIGRpcmVjdG9yeSB0aGF0IHN0b3JlcyB0aGUgcmVzdWx0cyBmb3InCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgcmViYXNlbGluaW5nIGNvbXBhcmlzb24uJykp
CisKKyAgICBvcHRpb25zID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKClbMF0KKworICAgICMg
U2V0IHVwIG91ciBsb2dnaW5nIGZvcm1hdC4KKyAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8K
KyAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVC
VUcKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZlbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdD0oJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubykt
M2QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJShsZXZlbG5hbWUpcyAlKG1l
c3NhZ2UpcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJXklbSVkICVIOiVN
OiVTJykKKworICAgICMgVmVyaWZ5ICdwbGF0Zm9ybXMnIG9wdGlvbiBpcyB2YWxpZAorICAgIGlm
IG5vdCBvcHRpb25zLnBsYXRmb3JtczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcignSW52YWxpZCAi
cGxhdGZvcm1zIiBvcHRpb24uIC0tcGxhdGZvcm1zIG11c3QgYmUgJworICAgICAgICAgICAgICAg
ICAgICAgICdzcGVjaWZpZWQgaW4gb3JkZXIgdG8gcmViYXNlbGluZS4nKQorICAgICAgICBzeXMu
ZXhpdCgxKQorICAgIHBsYXRmb3JtcyA9IFtwLnN0cmlwKCkubG93ZXIoKSBmb3IgcCBpbiBvcHRp
b25zLnBsYXRmb3Jtcy5zcGxpdCgnLCcpXQorICAgIGZvciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6
CisgICAgICAgIGlmIG5vdCBwbGF0Zm9ybSBpbiBSRUJBU0VMSU5FX1BMQVRGT1JNX09SREVSOgor
ICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignSW52YWxpZCBwbGF0Zm9ybTogIiVzIicgJSAocGxh
dGZvcm0pKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICMgQWRqdXN0IHRoZSBwbGF0
Zm9ybSBvcmRlciBzbyByZWJhc2VsaW5lIHRvb2wgaXMgcnVubmluZyBhdCB0aGUgb3JkZXIgb2YK
KyAgICAjICdtYWMnLCAnd2luJyBhbmQgJ2xpbnV4Jy4gVGhpcyBpcyBpbiBzYW1lIG9yZGVyIHdp
dGggbGF5b3V0IHRlc3QgYmFzZWxpbmUKKyAgICAjIHNlYXJjaCBwYXRocy4gSXQgc2ltcGxpZmll
cyBob3cgdGhlIHJlYmFzZWxpbmUgdG9vbCBkZXRlY3RzIGR1cGxpY2F0ZQorICAgICMgYmFzZWxp
bmVzLiBDaGVjayBfSXNEdXBCYXNlbGluZSBtZXRob2QgZm9yIGRldGFpbHMuCisgICAgcmViYXNl
bGluZV9wbGF0Zm9ybXMgPSBbXQorICAgIGZvciBwbGF0Zm9ybSBpbiBSRUJBU0VMSU5FX1BMQVRG
T1JNX09SREVSOgorICAgICAgICBpZiBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6CisgICAgICAgICAg
ICByZWJhc2VsaW5lX3BsYXRmb3Jtcy5hcHBlbmQocGxhdGZvcm0pCisKKyAgICBvcHRpb25zLmh0
bWxfZGlyZWN0b3J5ID0gU2V0dXBIdG1sRGlyZWN0b3J5KG9wdGlvbnMuaHRtbF9kaXJlY3Rvcnkp
CisKKyAgICByZWJhc2VsaW5pbmdfdGVzdHMgPSBzZXQoKQorICAgIGJhY2t1cCA9IG9wdGlvbnMu
YmFja3VwCisgICAgZm9yIHBsYXRmb3JtIGluIHJlYmFzZWxpbmVfcGxhdGZvcm1zOgorICAgICAg
ICByZWJhc2VsaW5lciA9IFJlYmFzZWxpbmVyKHBsYXRmb3JtLCBvcHRpb25zKQorCisgICAgICAg
IGxvZ2dpbmcuaW5mbygnJykKKyAgICAgICAgTG9nRGFzaGVkU3RyaW5nKCdSZWJhc2VsaW5lIHN0
YXJ0ZWQnLCBwbGF0Zm9ybSkKKyAgICAgICAgaWYgcmViYXNlbGluZXIuUnVuKGJhY2t1cCk6Cisg
ICAgICAgICAgICAjIE9ubHkgbmVlZCB0byBiYWNrdXAgb25lIG9yaWdpbmFsIGNvcHkgb2YgdGVz
dCBleHBlY3RhdGlvbiBmaWxlLgorICAgICAgICAgICAgYmFja3VwID0gRmFsc2UKKyAgICAgICAg
ICAgIExvZ0Rhc2hlZFN0cmluZygnUmViYXNlbGluZSBkb25lJywgcGxhdGZvcm0pCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBMb2dEYXNoZWRTdHJpbmcoJ1JlYmFzZWxpbmUgZmFpbGVkJywg
cGxhdGZvcm0sIGxvZ2dpbmcuRVJST1IpCisKKyAgICAgICAgcmViYXNlbGluaW5nX3Rlc3RzIHw9
IHNldChyZWJhc2VsaW5lci5HZXRSZWJhc2VsaW5pbmdUZXN0cygpKQorCisgICAgbG9nZ2luZy5p
bmZvKCcnKQorICAgIExvZ0Rhc2hlZFN0cmluZygnUmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJp
c29uIHN0YXJ0ZWQnLCBOb25lKQorICAgIGh0bWxfZ2VuZXJhdG9yID0gSHRtbEdlbmVyYXRvcihv
cHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWJhc2VsaW5lX3Bs
YXRmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmViYXNlbGluaW5n
X3Rlc3RzKQorICAgIGh0bWxfZ2VuZXJhdG9yLkdlbmVyYXRlSHRtbCgpCisgICAgaHRtbF9nZW5l
cmF0b3IuU2hvd0h0bWwoKQorICAgIExvZ0Rhc2hlZFN0cmluZygnUmViYXNlbGluaW5nIHJlc3Vs
dCBjb21wYXJpc29uIGRvbmUnLCBOb25lKQorCisgICAgc3lzLmV4aXQoMCkKKworaWYgJ19fbWFp
bl9fJyA9PSBfX25hbWVfXzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1f
d2Via2l0X3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmZTZi
NmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTY2MyBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyIiIlJ1biBsYXlvdXQgdGVzdHMgdXNpbmcgdGhl
IHRlc3Rfc2hlbGwuCisKK1RoaXMgaXMgYSBwb3J0IG9mIHRoZSBleGlzdGluZyB3ZWJraXQgdGVz
dCBzY3JpcHQgcnVuLXdlYmtpdC10ZXN0cy4KKworVGhlIFRlc3RSdW5uZXIgY2xhc3MgcnVucyBh
IHNlcmllcyBvZiB0ZXN0cyAoVGVzdFR5cGUgaW50ZXJmYWNlKSBhZ2FpbnN0IGEgc2V0CitvZiB0
ZXN0IGZpbGVzLiAgSWYgYSB0ZXN0IGZpbGUgZmFpbHMgYSBUZXN0VHlwZSwgaXQgcmV0dXJucyBh
IGxpc3QgVGVzdEZhaWx1cmUKK29iamVjdHMgdG8gdGhlIFRlc3RSdW5uZXIuICBUaGUgVGVzdFJ1
bm5lciB0aGVuIGFnZ3JlZ2F0ZXMgdGhlIFRlc3RGYWlsdXJlcyB0bworY3JlYXRlIGEgZmluYWwg
cmVwb3J0LgorCitUaGlzIHNjcmlwdCByZWFkcyBzZXZlcmFsIGZpbGVzLCBpZiB0aGV5IGV4aXN0
IGluIHRoZSB0ZXN0X2xpc3RzIHN1YmRpcmVjdG9yeQorbmV4dCB0byB0aGlzIHNjcmlwdCBpdHNl
bGYuICBFYWNoIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBwYXRocyB0byBpbmRpdmlkdWFsCit0
ZXN0cyBvciBlbnRpcmUgc3ViZGlyZWN0b3JpZXMgb2YgdGVzdHMsIHJlbGF0aXZlIHRvIHRoZSBv
dXRlcm1vc3QgdGVzdAorZGlyZWN0b3J5LiAgRW50aXJlIGxpbmVzIHN0YXJ0aW5nIHdpdGggJy8v
JyAoY29tbWVudHMpIHdpbGwgYmUgaWdub3JlZC4KKworRm9yIGRldGFpbHMgb2YgdGhlIGZpbGVz
JyBjb250ZW50cyBhbmQgcHVycG9zZXMsIHNlZSB0ZXN0X2xpc3RzL1JFQURNRS4KKyIiIgorCitp
bXBvcnQgZXJybm8KK2ltcG9ydCBnbG9iCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG1hdGgKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCByYW5kb20KK2lt
cG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2lt
cG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IGFwYWNoZV9odHRwX3NlcnZlcgorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBl
Y3RhdGlvbnMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGh0dHBfc2VydmVyCitmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvcgorZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KK2Zyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBsYXRmb3JtX3V0
aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIGxheW91
dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3NoZWxsX3RocmVhZAorZnJvbSBsYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9maWxlcworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgd2Vic29ja2V0X3Nl
cnZlcgorZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBmdXp6eV9pbWFnZV9kaWZmCitmcm9tIHRlc3Rf
dHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKK2Zyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBl
X2Jhc2UKK2Zyb20gdGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCisKK3N5cy5wYXRoLmFwcGVu
ZChwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZSgndGhpcmRfcGFydHknKSkKK2ltcG9ydCBzaW1wbGVq
c29uCisKKyMgSW5kaWNhdGVzIHRoYXQgd2Ugd2FudCBkZXRhaWxlZCBwcm9ncmVzcyB1cGRhdGVz
IGluIHRoZSBvdXRwdXQgKHByaW50cworIyBkaXJlY3RvcnktYnktZGlyZWN0b3J5IGZlZWRiYWNr
KS4KK0xPR19ERVRBSUxFRF9QUk9HUkVTUyA9ICdkZXRhaWxlZC1wcm9ncmVzcycKKworIyBMb2cg
YW55IHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGlsZSBydW5uaW5nIChpbnN0ZWFkIG9mIGp1c3QgYXQg
dGhlIGVuZCkuCitMT0dfVU5FWFBFQ1RFRCA9ICd1bmV4cGVjdGVkJworCisjIEJ1aWxkZXIgYmFz
ZSBVUkwgd2hlcmUgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgdGVzdCByZXN1bHRzLgorQlVJTERFUl9C
QVNFX1VSTCA9ICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2J1aWxkYm90L2xheW91dF90ZXN0
X3Jlc3VsdHMvIgorCitUZXN0RXhwZWN0YXRpb25zRmlsZSA9IHRlc3RfZXhwZWN0YXRpb25zLlRl
c3RFeHBlY3RhdGlvbnNGaWxlCisKKworY2xhc3MgVGVzdEluZm86CisgICAgIiIiR3JvdXBzIGlu
Zm9ybWF0aW9uIGFib3V0IGEgdGVzdCBmb3IgZWFzeSBwYXNzaW5nIG9mIGRhdGEuIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHRpbWVvdXQpOgorICAgICAgICAiIiJHZW5l
cmF0ZXMgdGhlIFVSSSBhbmQgc3RvcmVzIHRoZSBmaWxlbmFtZSBhbmQgdGltZW91dCBmb3IgdGhp
cyB0ZXN0LgorICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiBGdWxsIHBhdGggdG8g
dGhlIHRlc3QuCisgICAgICAgICAgdGltZW91dDogVGltZW91dCBmb3IgcnVubmluZyB0aGUgdGVz
dCBpbiBUZXN0U2hlbGwuCisgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBm
aWxlbmFtZQorICAgICAgICBzZWxmLnVyaSA9IHBhdGhfdXRpbHMuRmlsZW5hbWVUb1VyaShmaWxl
bmFtZSkKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBleHBlY3RlZF9o
YXNoX2ZpbGUgPSBwYXRoX3V0aWxzLkV4cGVjdGVkRmlsZW5hbWUoZmlsZW5hbWUsICcuY2hlY2tz
dW0nKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSBvcGVuKGV4
cGVjdGVkX2hhc2hfZmlsZSwgInIiKS5yZWFkKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6
CisgICAgICAgICAgICBpZiBlcnJuby5FTk9FTlQgIT0gZS5lcnJubzoKKyAgICAgICAgICAgICAg
ICByYWlzZQorICAgICAgICAgICAgc2VsZi5pbWFnZV9oYXNoID0gTm9uZQorCisKK2NsYXNzIFJl
c3VsdFN1bW1hcnkob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIGZvciBwYXJ0aXRpb25pbmcgdGhl
IHRlc3QgcmVzdWx0cyB3ZSBnZXQgaW50byBidWNrZXRzLgorCisgICAgVGhpcyBjbGFzcyBpcyBi
YXNpY2FsbHkgYSBnbG9yaWZpZWQgc3RydWN0IGFuZCBpdCdzIHByaXZhdGUgdG8gdGhpcyBmaWxl
CisgICAgc28gd2UgZG9uJ3QgYm90aGVyIHdpdGggYW55IGluZm9ybWF0aW9uIGhpZGluZy4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RhdGlvbnMsIHRlc3RfZmlsZXMpOgorICAg
ICAgICBzZWxmLnRvdGFsID0gbGVuKHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYucmVtYWluaW5n
ID0gc2VsZi50b3RhbAorICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwor
ICAgICAgICBzZWxmLmV4cGVjdGVkID0gMAorICAgICAgICBzZWxmLnVuZXhwZWN0ZWQgPSAwCisg
ICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb24gPSB7fQorICAgICAgICBzZWxmLnRlc3Rz
X2J5X3RpbWVsaW5lID0ge30KKyAgICAgICAgc2VsZi5yZXN1bHRzID0ge30KKyAgICAgICAgc2Vs
Zi51bmV4cGVjdGVkX3Jlc3VsdHMgPSB7fQorICAgICAgICBzZWxmLmZhaWx1cmVzID0ge30KKyAg
ICAgICAgc2VsZi50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSA9
IHNldCgpCisgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5F
WFBFQ1RBVElPTlMudmFsdWVzKCk6CisgICAgICAgICAgICBzZWxmLnRlc3RzX2J5X2V4cGVjdGF0
aW9uW2V4cGVjdGF0aW9uXSA9IHNldCgpCisgICAgICAgIGZvciB0aW1lbGluZSBpbiBUZXN0RXhw
ZWN0YXRpb25zRmlsZS5USU1FTElORVMudmFsdWVzKCk6CisgICAgICAgICAgICBzZWxmLnRlc3Rz
X2J5X3RpbWVsaW5lW3RpbWVsaW5lXSA9ICgKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMu
R2V0VGVzdHNXaXRoVGltZWxpbmUodGltZWxpbmUpKQorCisgICAgZGVmIEFkZChzZWxmLCB0ZXN0
LCBmYWlsdXJlcywgcmVzdWx0LCBleHBlY3RlZCk6CisgICAgICAgICIiIkFkZCBhIHJlc3VsdCBp
bnRvIHRoZSBhcHByb3ByaWF0ZSBiaW4uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0
OiB0ZXN0IGZpbGUgbmFtZQorICAgICAgICAgIGZhaWx1cmVzOiBsaXN0IG9mIGZhaWx1cmUgb2Jq
ZWN0cyBmcm9tIHRlc3QgZXhlY3V0aW9uCisgICAgICAgICAgcmVzdWx0OiByZXN1bHQgb2YgdGVz
dCAoUEFTUywgSU1BR0UsIGV0Yy4pLgorICAgICAgICAgIGV4cGVjdGVkOiB3aGV0aGVyIHRoZSBy
ZXN1bHQgd2FzIHdoYXQgd2UgZXhwZWN0ZWQgaXQgdG8gYmUuCisgICAgICAgICIiIgorCisgICAg
ICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb25bcmVzdWx0XS5hZGQodGVzdCkKKyAgICAgICAg
c2VsZi5yZXN1bHRzW3Rlc3RdID0gcmVzdWx0CisgICAgICAgIHNlbGYucmVtYWluaW5nIC09IDEK
KyAgICAgICAgaWYgbGVuKGZhaWx1cmVzKToKKyAgICAgICAgICAgIHNlbGYuZmFpbHVyZXNbdGVz
dF0gPSBmYWlsdXJlcworICAgICAgICBpZiBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuZXhw
ZWN0ZWQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkX3Jl
c3VsdHNbdGVzdF0gPSByZXN1bHQKKyAgICAgICAgICAgIHNlbGYudW5leHBlY3RlZCArPSAxCisK
KworY2xhc3MgVGVzdFJ1bm5lcjoKKyAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5n
IGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAorICAgIHRlc3QgZmlsZXMu
IiIiCisKKyAgICBIVFRQX1NVQkRJUiA9IG9zLnNlcC5qb2luKFsnJywgJ2h0dHAnLCAnJ10pCisg
ICAgV0VCU09DS0VUX1NVQkRJUiA9IG9zLnNlcC5qb2luKFsnJywgJ3dlYnNvY2tldCcsICcnXSkK
KworICAgICMgVGhlIHBlci10ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBpZiBubyAtLXRp
bWUtb3V0LW1zIG9wdGlvbiB3YXMKKyAgICAjIGdpdmVuIHRvIHJ1bl93ZWJraXRfdGVzdHMuIFRo
aXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIGRlZmF1bHQgdGltZW91dAorICAgICMgaW4gdGVz
dF9zaGVsbC5leGUuCisgICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAorCisg
ICAgTlVNX1JFVFJZX09OX1VORVhQRUNURURfRkFJTFVSRSA9IDEKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBvcHRpb25zLCBtZXRlcik6CisgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5u
ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgb3B0aW9uczog
YSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCisgICAgICAgICAgbWV0ZXI6IGEg
TWV0ZXJlZFN0cmVhbSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICIiIgor
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9tZXRlciA9IG1l
dGVyCisKKyAgICAgICAgaWYgb3B0aW9ucy51c2VfYXBhY2hlOgorICAgICAgICAgICAgc2VsZi5f
aHR0cF9zZXJ2ZXIgPSBhcGFjaGVfaHR0cF9zZXJ2ZXIuTGF5b3V0VGVzdEFwYWNoZUh0dHBkKAor
ICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IGh0dHBfc2VydmVyLkxpZ2h0dHBkKG9w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZl
ciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCisgICAgICAgICAgICBvcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5KQorICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBp
bnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCisgICAgICAgICMgc2VsZi5fd2Vic29ja2V0
X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAorICAgICAgICAj
ICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMy
MykKKworICAgICAgICAjIGEgbGlzdCBvZiBUZXN0VHlwZSBvYmplY3RzCisgICAgICAgIHNlbGYu
X3Rlc3RfdHlwZXMgPSBbXQorCisgICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRo
ZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkK
KyAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQorICAgICAgICBzZWxmLl9maWxl
X2RpciA9IHBhdGhfdXRpbHMuUGF0aEZyb21CYXNlKCd3ZWJraXQnLCAndG9vbHMnLAorICAgICAg
ICAgICAgJ2xheW91dF90ZXN0cycpCisgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVl
LlF1ZXVlKCkKKworICAgICAgICAjIFRoZXNlIGFyZSB1c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1w
cm9ncmVzcyB0byB0cmFjayBzdGF0dXMgYnkKKyAgICAgICAgIyBkaXJlY3RvcnkuCisgICAgICAg
IHNlbGYuX2N1cnJlbnRfZGlyID0gTm9uZQorICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNz
X3N0ciA9ICIiCisgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIgPSAwCisKKyAgICBk
ZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiZmx1c2hpbmcgc3Rkb3V0
IikKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoImZs
dXNoaW5nIHN0ZGVyciIpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBsb2dn
aW5nLmRlYnVnKCJzdG9wcGluZyBodHRwIHNlcnZlciIpCisgICAgICAgICMgU3RvcCB0aGUgaHR0
cCBzZXJ2ZXIuCisgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyLlN0b3AoKQorICAgICAgICAjIFN0
b3AgdGhlIFdlYiBTb2NrZXQgLyBXZWIgU29ja2V0IFNlY3VyZSBzZXJ2ZXJzLgorICAgICAgICBz
ZWxmLl93ZWJzb2NrZXRfc2VydmVyLlN0b3AoKQorICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9z
ZWN1cmVfc2VydmVyLlN0b3AoKQorCisgICAgZGVmIEdhdGhlckZpbGVQYXRocyhzZWxmLCBwYXRo
cyk6CisgICAgICAgICIiIkZpbmQgYWxsIHRoZSBmaWxlcyB0byB0ZXN0LgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgcGF0aHM6IGEgbGlzdCBvZiBnbG9icyB0byB1c2UgaW5zdGVhZCBvZiB0
aGUgZGVmYXVsdHMuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSB0ZXN0X2ZpbGVzLkdh
dGhlclRlc3RGaWxlcyhwYXRocykKKworICAgIGRlZiBQYXJzZUV4cGVjdGF0aW9ucyhzZWxmLCBw
bGF0Zm9ybSwgaXNfZGVidWdfbW9kZSk6CisgICAgICAgICIiIlBhcnNlIHRoZSBleHBlY3RhdGlv
bnMgZnJvbSB0aGUgdGVzdF9saXN0IGZpbGVzIGFuZCByZXR1cm4gYSBkYXRhCisgICAgICAgIHN0
cnVjdHVyZSBob2xkaW5nIHRoZW0uIFRocm93cyBhbiBlcnJvciBpZiB0aGUgdGVzdF9saXN0IGZp
bGVzIGhhdmUKKyAgICAgICAgaW52YWxpZCBzeW50YXguIiIiCisgICAgICAgIGlmIHNlbGYuX29w
dGlvbnMubGludF90ZXN0X2ZpbGVzOgorICAgICAgICAgICAgdGVzdF9maWxlcyA9IE5vbmUKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSBzZWxmLl90ZXN0X2ZpbGVzCisK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gdGVzdF9leHBl
Y3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucyh0ZXN0X2ZpbGVzLAorICAgICAgICAgICAgICAgIHNl
bGYuX2ZpbGVfZGlyLCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSwKKyAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9maWxlcykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9l
eHBlY3RhdGlvbnMKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3RfZmlsZXM6CisgICAgICAgICAgICAgICAgcHJpbnQg
c3RyKGVycikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisK
KyAgICBkZWYgUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQoc2VsZiwgd3JpdGUpOgorICAgICAg
ICAiIiJDcmVhdGUgYXBwcm9wcmlhdGUgc3Vic2V0cyBvZiB0ZXN0IGxpc3RzIGFuZCByZXR1cm5z
IGEKKyAgICAgICAgUmVzdWx0U3VtbWFyeSBvYmplY3QuIEFsc28gcHJpbnRzIGV4cGVjdGVkIHRl
c3QgY291bnRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sg
dG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgorICAgICAgICAgICAg
IHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICIiIgorCisgICAgICAgICMgUmVtb3ZlIHNraXBw
ZWQgLSBib3RoIGZpeGFibGUgYW5kIGlnbm9yZWQgLSBmaWxlcyBmcm9tIHRoZQorICAgICAgICAj
IHRvcC1sZXZlbCBsaXN0IG9mIGZpbGVzIHRvIHRlc3QuCisgICAgICAgIG51bV9hbGxfdGVzdF9m
aWxlcyA9IGxlbihzZWxmLl90ZXN0X2ZpbGVzKQorICAgICAgICB3cml0ZSgiRm91bmQ6ICAlZCB0
ZXN0cyIgJSAobGVuKHNlbGYuX3Rlc3RfZmlsZXMpKSkKKyAgICAgICAgc2tpcHBlZCA9IHNldCgp
CisgICAgICAgIGlmIG51bV9hbGxfdGVzdF9maWxlcyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25z
LmZvcmNlOgorICAgICAgICAgICAgc2tpcHBlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5HZXRUZXN0
c1dpdGhSZXN1bHRUeXBlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3Rh
dGlvbnMuU0tJUCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgLT0gc2tpcHBlZAorCisg
ICAgICAgICMgQ3JlYXRlIGEgc29ydGVkIGxpc3Qgb2YgdGVzdCBmaWxlcyBzbyB0aGUgc3Vic2V0
IGNodW5rLAorICAgICAgICAjIGlmIHVzZWQsIGNvbnRhaW5zIGFscGhhYmV0aWNhbGx5IGNvbnNl
Y3V0aXZlIHRlc3RzLgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBsaXN0KHNlbGYu
X3Rlc3RfZmlsZXMpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmFuZG9taXplX29yZGVyOgor
ICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZi5fdGVzdF9maWxlc19saXN0KQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0LnNvcnQoKQorCisgICAg
ICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIHRoZXkganVzdCB3YW50IHRvIHJ1biBhIHN1YnNl
dCBvZiB0aGUgdGVzdHMsCisgICAgICAgICMganVzdCBncmFiIGEgc3Vic2V0IG9mIHRoZSBub24t
c2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fY2h1bmsgb3Igc2Vs
Zi5fb3B0aW9ucy5ydW5fcGFydDoKKyAgICAgICAgICAgIGNodW5rX3ZhbHVlID0gc2VsZi5fb3B0
aW9ucy5ydW5fY2h1bmsgb3Igc2VsZi5fb3B0aW9ucy5ydW5fcGFydAorICAgICAgICAgICAgdGVz
dF9maWxlcyA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdAorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIChjaHVua19udW0sIGNodW5rX2xlbikgPSBjaHVua192YWx1ZS5zcGxpdCgiOiIp
CisgICAgICAgICAgICAgICAgY2h1bmtfbnVtID0gaW50KGNodW5rX251bSkKKyAgICAgICAgICAg
ICAgICBhc3NlcnQoY2h1bmtfbnVtID49IDApCisgICAgICAgICAgICAgICAgdGVzdF9zaXplID0g
aW50KGNodW5rX2xlbikKKyAgICAgICAgICAgICAgICBhc3NlcnQodGVzdF9zaXplID4gMCkKKyAg
ICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCJpbnZh
bGlkIGNodW5rICclcyciICUgY2h1bmtfdmFsdWUpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQo
MSkKKworICAgICAgICAgICAgIyBHZXQgdGhlIG51bWJlciBvZiB0ZXN0cworICAgICAgICAgICAg
bnVtX3Rlc3RzID0gbGVuKHRlc3RfZmlsZXMpCisKKyAgICAgICAgICAgICMgR2V0IHRoZSBzdGFy
dCBvZmZzZXQgb2YgdGhlIHNsaWNlLgorICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5f
Y2h1bms6CisgICAgICAgICAgICAgICAgY2h1bmtfbGVuID0gdGVzdF9zaXplCisgICAgICAgICAg
ICAgICAgIyBJbiB0aGlzIGNhc2UgY2h1bmtfbnVtIGNhbiBiZSByZWFsbHkgbGFyZ2UuIFdlIG5l
ZWQKKyAgICAgICAgICAgICAgICAjIHRvIG1ha2UgdGhlIHNsYXZlIGZpdCBpbiB0aGUgY3VycmVu
dCBudW1iZXIgb2YgdGVzdHMuCisgICAgICAgICAgICAgICAgc2xpY2Vfc3RhcnQgPSAoY2h1bmtf
bnVtICogY2h1bmtfbGVuKSAlIG51bV90ZXN0cworICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAjIFZhbGlkYXRlIHRoZSBkYXRhLgorICAgICAgICAgICAgICAgIGFzc2VydCh0ZXN0
X3NpemUgPD0gbnVtX3Rlc3RzKQorICAgICAgICAgICAgICAgIGFzc2VydChjaHVua19udW0gPD0g
dGVzdF9zaXplKQorCisgICAgICAgICAgICAgICAgIyBUbyBjb3VudCB0aGUgY2h1bmtfbGVuLCBh
bmQgbWFrZSBzdXJlIHdlIGRvbid0IHNraXAKKyAgICAgICAgICAgICAgICAjIHNvbWUgdGVzdHMs
IHdlIHJvdW5kIHRvIHRoZSBuZXh0IHZhbHVlIHRoYXQgZml0cyBleGFjdGx5CisgICAgICAgICAg
ICAgICAgIyBhbGwgdGhlIHBhcnRzLgorICAgICAgICAgICAgICAgIHJvdW5kZWRfdGVzdHMgPSBu
dW1fdGVzdHMKKyAgICAgICAgICAgICAgICBpZiByb3VuZGVkX3Rlc3RzICUgdGVzdF9zaXplICE9
IDA6CisgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRfdGVzdHMgPSAobnVtX3Rlc3RzICsgdGVz
dF9zaXplIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3Rlc3Rz
ICUgdGVzdF9zaXplKSkKKworICAgICAgICAgICAgICAgIGNodW5rX2xlbiA9IHJvdW5kZWRfdGVz
dHMgLyB0ZXN0X3NpemUKKyAgICAgICAgICAgICAgICBzbGljZV9zdGFydCA9IGNodW5rX2xlbiAq
IChjaHVua19udW0gLSAxKQorICAgICAgICAgICAgICAgICMgSXQgZG9lcyBub3QgbWluZCBpZiB3
ZSBnbyBvdmVyIHRlc3Rfc2l6ZS4KKworICAgICAgICAgICAgIyBHZXQgdGhlIGVuZCBvZmZzZXQg
b2YgdGhlIHNsaWNlLgorICAgICAgICAgICAgc2xpY2VfZW5kID0gbWluKG51bV90ZXN0cywgc2xp
Y2Vfc3RhcnQgKyBjaHVua19sZW4pCisKKyAgICAgICAgICAgIGZpbGVzID0gdGVzdF9maWxlc1tz
bGljZV9zdGFydDpzbGljZV9lbmRdCisKKyAgICAgICAgICAgIHRlc3RzX3J1bl9tc2cgPSAnUnVu
bmluZzogJWQgdGVzdHMgKGNodW5rIHNsaWNlIFslZDolZF0gb2YgJWQpJyAlICgKKyAgICAgICAg
ICAgICAgICAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpLCBzbGljZV9zdGFydCwgc2xpY2VfZW5k
LCBudW1fdGVzdHMpCisgICAgICAgICAgICB3cml0ZSh0ZXN0c19ydW5fbXNnKQorCisgICAgICAg
ICAgICAjIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBhbmQgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdGVz
dHMsIHdlIHJ1biBzb21lCisgICAgICAgICAgICAjIGZyb20gdGhlIGJlZ2lubmluZy4KKyAgICAg
ICAgICAgIGlmIChzZWxmLl9vcHRpb25zLnJ1bl9jaHVuayBhbmQKKyAgICAgICAgICAgICAgICAo
c2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQgPCBjaHVua19sZW4pKToKKyAgICAgICAgICAgICAgICBl
eHRyYSA9IDEgKyBjaHVua19sZW4gLSAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpCisgICAgICAg
ICAgICAgICAgZXh0cmFfbXNnID0gKCcgICBsYXN0IGNodW5rIGlzIHBhcnRpYWwsIGFwcGVuZGlu
ZyBbMDolZF0nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSkKKyAgICAgICAg
ICAgICAgICB3cml0ZShleHRyYV9tc2cpCisgICAgICAgICAgICAgICAgdGVzdHNfcnVuX21zZyAr
PSAiXG4iICsgZXh0cmFfbXNnCisgICAgICAgICAgICAgICAgZmlsZXMuZXh0ZW5kKHRlc3RfZmls
ZXNbMDpleHRyYV0pCisgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpv
aW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCisgICAgICAgICAgICB0
ZXN0c19ydW5fZmlsZSA9IG9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAidyIpCisgICAgICAgICAg
ICB0ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0c19ydW5fbXNnICsgIlxuIikKKyAgICAgICAgICAg
IHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKKworICAgICAgICAgICAgbGVuX3NraXBfY2h1bmsgPSBp
bnQobGVuKGZpbGVzKSAqIGxlbihza2lwcGVkKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdChsZW4oc2VsZi5fdGVzdF9maWxlcykpKQorICAgICAgICAgICAgc2tpcF9j
aHVua19saXN0ID0gbGlzdChza2lwcGVkKVswOmxlbl9za2lwX2NodW5rXQorICAgICAgICAgICAg
c2tpcF9jaHVuayA9IHNldChza2lwX2NodW5rX2xpc3QpCisKKyAgICAgICAgICAgICMgVXBkYXRl
IGV4cGVjdGF0aW9ucyBzbyB0aGF0IHRoZSBzdGF0cyBhcmUgY2FsY3VsYXRlZCBjb3JyZWN0bHku
CisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBhIGxpc3QgdGhhdCBpbmNsdWRlcyB0aGUg
cmlnaHQgIyBvZiBza2lwcGVkIGZpbGVzCisgICAgICAgICAgICAjIHRvIFBhcnNlRXhwZWN0YXRp
b25zIHNvIHRoYXQgUmVzdWx0U3VtbWFyeSgpIHdpbGwgZ2V0IHRoZSBjb3JyZWN0CisgICAgICAg
ICAgICAjIHN0YXRzLiBTbywgd2UgYWRkIGluIHRoZSBzdWJzZXQgb2Ygc2tpcHBlZCBmaWxlcywg
YW5kIHRoZW4KKyAgICAgICAgICAgICMgc3VidHJhY3QgdGhlbSBiYWNrIG91dC4KKyAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IGZpbGVzICsgc2tpcF9jaHVua19saXN0CisgICAg
ICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKwor
ICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gc2VsZi5QYXJzZUV4cGVjdGF0aW9ucygK
KyAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLlBsYXRmb3JtTmFtZSgpLCBzZWxmLl9vcHRpb25z
LnRhcmdldCA9PSAnRGVidWcnKQorCisgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0
KGZpbGVzKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gZmlsZXMKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNraXBfY2h1bmsgPSBza2lwcGVkCisKKyAgICAgICAgcmVz
dWx0X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KHNlbGYuX2V4cGVjdGF0aW9ucywKKyAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfZmlsZXMgfCBza2lwX2NodW5rKQorICAgICAgICBzZWxmLl9QcmludEV4
cGVjdGVkUmVzdWx0c09mVHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICB0
ZXN0X2V4cGVjdGF0aW9ucy5QQVNTLCAicGFzc2VzIikKKyAgICAgICAgc2VsZi5fUHJpbnRFeHBl
Y3RlZFJlc3VsdHNPZlR5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuRkFJTCwgImZhaWx1cmVzIikKKyAgICAgICAgc2VsZi5fUHJpbnRFeHBl
Y3RlZFJlc3VsdHNPZlR5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuRkxBS1ksICJmbGFreSIpCisgICAgICAgIHNlbGYuX1ByaW50RXhwZWN0
ZWRSZXN1bHRzT2ZUeXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHRlc3Rf
ZXhwZWN0YXRpb25zLlNLSVAsICJza2lwcGVkIikKKworCisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMuZm9yY2U6CisgICAgICAgICAgICB3cml0ZSgnUnVubmluZyBhbGwgdGVzdHMsIGluY2x1ZGlu
ZyBza2lwcyAoLS1mb3JjZSknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBOb3RlIHRo
YXQgd2UgZG9uJ3QgYWN0dWFsbHkgcnVuIHRoZSBza2lwcGVkIHRlc3RzICh0aGV5IHdlcmUKKyAg
ICAgICAgICAgICMgc3VidHJhY3RlZCBvdXQgb2Ygc2VsZi5fdGVzdF9maWxlcywgYWJvdmUpLCBi
dXQgd2Ugc3R1YiBvdXQgdGhlCisgICAgICAgICAgICAjIHJlc3VsdHMgaGVyZSBzbyB0aGUgc3Rh
dGlzdGljcyBjYW4gcmVtYWluIGFjY3VyYXRlLgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2tp
cF9jaHVuazoKKyAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5BZGQodGVzdCwgW10sIHRl
c3RfZXhwZWN0YXRpb25zLlNLSVAsCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9VHJ1ZSkKKyAg
ICAgICAgd3JpdGUoIiIpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdF9zdW1tYXJ5CisKKyAgICBk
ZWYgQWRkVGVzdFR5cGUoc2VsZiwgdGVzdF90eXBlKToKKyAgICAgICAgIiIiQWRkIGEgVGVzdFR5
cGUgdG8gdGhlIFRlc3RSdW5uZXIuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5k
KHRlc3RfdHlwZSkKKworICAgIGRlZiBfR2V0RGlyRm9yVGVzdEZpbGUoc2VsZiwgdGVzdF9maWxl
KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgaGlnaGVzdC1sZXZlbCBkaXJlY3RvcnkgYnkgd2hp
Y2ggdG8gc2hhcmQgdGhlIGdpdmVuCisgICAgICAgIHRlc3QgZmlsZS4iIiIKKyAgICAgICAgaW5k
ZXggPSB0ZXN0X2ZpbGUucmZpbmQob3Muc2VwICsgJ0xheW91dFRlc3RzJyArIG9zLnNlcCkKKwor
ICAgICAgICB0ZXN0X2ZpbGUgPSB0ZXN0X2ZpbGVbaW5kZXggKyBsZW4oJ0xheW91dFRlc3RzLycp
Ol0KKyAgICAgICAgdGVzdF9maWxlX3BhcnRzID0gdGVzdF9maWxlLnNwbGl0KG9zLnNlcCwgMSkK
KyAgICAgICAgZGlyZWN0b3J5ID0gdGVzdF9maWxlX3BhcnRzWzBdCisgICAgICAgIHRlc3RfZmls
ZSA9IHRlc3RfZmlsZV9wYXJ0c1sxXQorCisgICAgICAgICMgVGhlIGh0dHAgdGVzdHMgYXJlIHZl
cnkgc3RhYmxlIG9uIG1hYy9saW51eC4KKyAgICAgICAgIyBUT0RPKG9qYW4pOiBNYWtlIHRoZSBo
dHRwIHNlcnZlciBvbiBXaW5kb3dzIGJlIGFwYWNoZSBzbyB3ZSBjYW4KKyAgICAgICAgIyB0dXJu
IHNoYXJkIHRoZSBodHRwIHRlc3RzIHRoZXJlIGFzIHdlbGwuIFN3aXRjaGluZyB0byBhcGFjaGUg
aXMKKyAgICAgICAgIyB3aGF0IG1hZGUgdGhlbSBzdGFibGUgb24gbGludXgvbWFjLgorICAgICAg
ICByZXR1cm5fdmFsdWUgPSBkaXJlY3RvcnkKKyAgICAgICAgd2hpbGUgKChkaXJlY3RvcnkgIT0g
J2h0dHAnIG9yIHN5cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdsaW51eDInKSkKKyAgICAgICAg
ICAgICAgICBhbmQgdGVzdF9maWxlLmZpbmQob3Muc2VwKSA+PSAwKToKKyAgICAgICAgICAgIHRl
c3RfZmlsZV9wYXJ0cyA9IHRlc3RfZmlsZS5zcGxpdChvcy5zZXAsIDEpCisgICAgICAgICAgICBk
aXJlY3RvcnkgPSB0ZXN0X2ZpbGVfcGFydHNbMF0KKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9
IG9zLnBhdGguam9pbihyZXR1cm5fdmFsdWUsIGRpcmVjdG9yeSkKKyAgICAgICAgICAgIHRlc3Rf
ZmlsZSA9IHRlc3RfZmlsZV9wYXJ0c1sxXQorCisgICAgICAgIHJldHVybiByZXR1cm5fdmFsdWUK
KworICAgIGRlZiBfR2V0VGVzdEluZm9Gb3JGaWxlKHNlbGYsIHRlc3RfZmlsZSk6CisgICAgICAg
ICIiIlJldHVybnMgdGhlIGFwcHJvcHJpYXRlIFRlc3RJbmZvIG9iamVjdCBmb3IgdGhlIGZpbGUu
IE1vc3RseSB0aGlzCisgICAgICAgIGlzIHVzZWQgZm9yIGxvb2tpbmcgdXAgdGhlIHRpbWVvdXQg
dmFsdWUgKGluIG1zKSB0byB1c2UgZm9yIHRoZSBnaXZlbgorICAgICAgICB0ZXN0LiIiIgorICAg
ICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnMuSGFzTW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4
cGVjdGF0aW9ucy5TTE9XKToKKyAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUs
IHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKKyAgICAgICAgcmV0dXJuIFRlc3RJbmZv
KHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKKworICAgIGRlZiBfR2V0VGVz
dEZpbGVRdWV1ZShzZWxmLCB0ZXN0X2ZpbGVzKToKKyAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJl
YWQgc2FmZSBxdWV1ZSBvZiBsaXN0cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKKyAg
ICAgICAgdHVwbGVzLiBFYWNoIFRlc3RTaGVsbFRocmVhZCBwdWxscyBhIGxpc3QgZnJvbSB0aGlz
IHF1ZXVlIGFuZCBydW5zCisgICAgICAgIHRob3NlIHRlc3RzIGluIG9yZGVyIGJlZm9yZSBncmFi
YmluZyB0aGUgbmV4dCBhdmFpbGFibGUgbGlzdC4KKworICAgICAgICBTaGFyZCB0aGUgbGlzdHMg
YnkgZGlyZWN0b3J5LiBUaGlzIGhlbHBzIGVuc3VyZSB0aGF0IHRlc3RzIHRoYXQgZGVwZW5kCisg
ICAgICAgIG9uIGVhY2ggb3RoZXIgKGFrYSBiYWQgdGVzdHMhKSBjb250aW51ZSB0byBydW4gdG9n
ZXRoZXIgYXMgbW9zdAorICAgICAgICBjcm9zcy10ZXN0cyBkZXBlbmRlbmNpZXMgdGVuZCB0byBv
Y2N1ciB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorCisgICAgICAgIFJldHVybjoKKyAgICAg
ICAgICBUaGUgUXVldWUgb2YgbGlzdHMgb2YgVGVzdEluZm8gb2JqZWN0cy4KKyAgICAgICAgIiIi
CisKKyAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVs
IG9yCisgICAgICAgICAgICBzZWxmLl9Jc1NpbmdsZVRocmVhZGVkKCkpOgorICAgICAgICAgICAg
ZmlsZW5hbWVfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgICAgICBmb3IgdGVzdF9maWxl
IGluIHRlc3RfZmlsZXM6CisgICAgICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUucHV0KCcuJywg
W3NlbGYuX0dldFRlc3RJbmZvRm9yRmlsZSh0ZXN0X2ZpbGUpXSkKKyAgICAgICAgICAgIHJldHVy
biBmaWxlbmFtZV9xdWV1ZQorCisgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9CisgICAgICAgIGZv
ciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IHNlbGYu
X0dldERpckZvclRlc3RGaWxlKHRlc3RfZmlsZSkKKyAgICAgICAgICAgIHRlc3RzX2J5X2Rpci5z
ZXRkZWZhdWx0KGRpcmVjdG9yeSwgW10pCisgICAgICAgICAgICB0ZXN0c19ieV9kaXJbZGlyZWN0
b3J5XS5hcHBlbmQoc2VsZi5fR2V0VGVzdEluZm9Gb3JGaWxlKHRlc3RfZmlsZSkpCisKKyAgICAg
ICAgIyBTb3J0IGJ5IHRoZSBudW1iZXIgb2YgdGVzdHMgaW4gdGhlIGRpciBzbyB0aGF0IHRoZSBv
bmVzIHdpdGggdGhlCisgICAgICAgICMgbW9zdCB0ZXN0cyBnZXQgcnVuIGZpcnN0IGluIG9yZGVy
IHRvIG1heGltaXplIHBhcmFsbGVsaXphdGlvbi4KKyAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMg
aXMgYSBnb29kIGVub3VnaCwgYnV0IG5vdCBwZXJmZWN0LCBhcHByb3hpbWF0aW9uCisgICAgICAg
ICMgb2YgaG93IGxvbmcgdGhhdCBzZXQgb2YgdGVzdHMgd2lsbCB0YWtlIHRvIHJ1bi4gV2UgY2Fu
J3QganVzdCB1c2UKKyAgICAgICAgIyBhIFByaW9yaXR5UXVldWUgdW50aWwgd2UgbW92ZSAjIHRv
IFB5dGhvbiAyLjYuCisgICAgICAgIHRlc3RfbGlzdHMgPSBbXQorICAgICAgICBodHRwX3Rlc3Rz
ID0gTm9uZQorICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHRlc3RzX2J5X2RpcjoKKyAgICAgICAg
ICAgIHRlc3RfbGlzdCA9IHRlc3RzX2J5X2RpcltkaXJlY3RvcnldCisgICAgICAgICAgICAjIEtl
ZXAgdGhlIHRlc3RzIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyAgICAgICAgICAgICMgVE9ETzog
UmVtb3ZlIG9uY2UgdGVzdHMgYXJlIGZpeGVkIHNvIHRoZXkgY2FuIGJlIHJ1biBpbiBhbnkKKyAg
ICAgICAgICAgICMgb3JkZXIuCisgICAgICAgICAgICB0ZXN0X2xpc3QucmV2ZXJzZSgpCisgICAg
ICAgICAgICB0ZXN0X2xpc3RfdHVwbGUgPSAoZGlyZWN0b3J5LCB0ZXN0X2xpc3QpCisgICAgICAg
ICAgICBpZiBkaXJlY3RvcnkgPT0gJ0xheW91dFRlc3RzJyArIG9zLnNlcCArICdodHRwJzoKKyAg
ICAgICAgICAgICAgICBodHRwX3Rlc3RzID0gdGVzdF9saXN0X3R1cGxlCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHRlc3RfbGlzdHMuYXBwZW5kKHRlc3RfbGlzdF90dXBsZSkK
KyAgICAgICAgdGVzdF9saXN0cy5zb3J0KGxhbWJkYSBhLCBiOiBjbXAobGVuKGJbMV0pLCBsZW4o
YVsxXSkpKQorCisgICAgICAgICMgUHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0LiBUaGVyZSBhcmUg
b25seSBhIGNvdXBsZSBodW5kcmVkIG9mIHRoZW0sCisgICAgICAgICMgYnV0IGVhY2ggaHR0cCB0
ZXN0IHRha2VzIGEgdmVyeSBsb25nIHRpbWUgdG8gcnVuLCBzbyBzb3J0aW5nIGJ5IHRoZQorICAg
ICAgICAjIG51bWJlciBvZiB0ZXN0cyBkb2Vzbid0IGFjY3VyYXRlbHkgY2FwdHVyZSBob3cgbG9u
ZyB0aGV5IHRha2UgdG8gcnVuLgorICAgICAgICBpZiBodHRwX3Rlc3RzOgorICAgICAgICAgICAg
dGVzdF9saXN0cy5pbnNlcnQoMCwgaHR0cF90ZXN0cykKKworICAgICAgICBmaWxlbmFtZV9xdWV1
ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0czoKKyAgICAg
ICAgICAgIGZpbGVuYW1lX3F1ZXVlLnB1dChpdGVtKQorICAgICAgICByZXR1cm4gZmlsZW5hbWVf
cXVldWUKKworICAgIGRlZiBfR2V0VGVzdFNoZWxsQXJncyhzZWxmLCBpbmRleCk6CisgICAgICAg
ICIiIlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZvciB0ZXN0
X3NoZWxsLiIiIgorICAgICAgICBzaGVsbF9hcmdzID0gW10KKyAgICAgICAgdGVzdF9hcmdzID0g
dGVzdF90eXBlX2Jhc2UuVGVzdEFyZ3VtZW50cygpCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRp
b25zLm5vX3BpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4o
c2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQorICAgICAgICAgICAgc2hl
bGxfYXJncy5hcHBlbmQoIi0tcGl4ZWwtdGVzdHM9IiArIHBuZ19wYXRoKQorICAgICAgICAgICAg
dGVzdF9hcmdzLnBuZ19wYXRoID0gcG5nX3BhdGgKKworICAgICAgICB0ZXN0X2FyZ3MubmV3X2Jh
c2VsaW5lID0gc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUKKworICAgICAgICB0ZXN0X2FyZ3Mu
c2hvd19zb3VyY2VzID0gc2VsZi5fb3B0aW9ucy5zb3VyY2VzCisKKyAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5zdGFydHVwX2RpYWxvZzoKKyAgICAgICAgICAgIHNoZWxsX2FyZ3MuYXBwZW5kKCct
LXRlc3RzaGVsbC1zdGFydHVwLWRpYWxvZycpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5n
cF9mYXVsdF9lcnJvcl9ib3g6CisgICAgICAgICAgICBzaGVsbF9hcmdzLmFwcGVuZCgnLS1ncC1m
YXVsdC1lcnJvci1ib3gnKQorCisgICAgICAgIHJldHVybiAodGVzdF9hcmdzLCBzaGVsbF9hcmdz
KQorCisgICAgZGVmIF9Db250YWluc1Rlc3RzKHNlbGYsIHN1YmRpcik6CisgICAgICAgIGZvciB0
ZXN0X2ZpbGUgaW4gc2VsZi5fdGVzdF9maWxlc19saXN0OgorICAgICAgICAgICAgaWYgdGVzdF9m
aWxlLmZpbmQoc3ViZGlyKSA+PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9JbnN0YW50aWF0ZVRlc3RTaGVsbFRocmVhZHMo
c2VsZiwgdGVzdF9zaGVsbF9iaW5hcnksIHRlc3RfZmlsZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJJbnN0YW50aXRh
dGVzIGFuZCBzdGFydHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KKworICAgICAgICBSZXR1cm46
CisgICAgICAgICAgVGhlIGxpc3Qgb2YgdGhyZWFkcy4KKyAgICAgICAgIiIiCisgICAgICAgIHRl
c3Rfc2hlbGxfY29tbWFuZCA9IFt0ZXN0X3NoZWxsX2JpbmFyeV0KKworICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLndyYXBwZXI6CisgICAgICAgICAgICAjIFRoaXMgc3BsaXQoKSBpc24ndCByZWFs
bHkgd2hhdCB3ZSB3YW50IC0tIGl0IGluY29ycmVjdGx5IHdpbGwKKyAgICAgICAgICAgICMgc3Bs
aXQgcXVvdGVkIHN0cmluZ3Mgd2l0aGluIHRoZSB3cmFwcGVyIGFyZ3VtZW50IC0tIGJ1dCBpbgor
ICAgICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0taGVs
cCBvdXRwdXQgd2FybnMKKyAgICAgICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgorICAgICAgICAg
ICAgdGVzdF9zaGVsbF9jb21tYW5kID0gKHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgpICsK
KyAgICAgICAgICAgICAgICB0ZXN0X3NoZWxsX2NvbW1hbmQpCisKKyAgICAgICAgZmlsZW5hbWVf
cXVldWUgPSBzZWxmLl9HZXRUZXN0RmlsZVF1ZXVlKHRlc3RfZmlsZXMpCisKKyAgICAgICAgIyBJ
bnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgorICAgICAgICB0aHJl
YWRzID0gW10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGludChzZWxmLl9vcHRpb25zLm51bV90
ZXN0X3NoZWxscykpOgorICAgICAgICAgICAgIyBDcmVhdGUgc2VwYXJhdGUgVGVzdFR5cGVzIGlu
c3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuCisgICAgICAgICAgICB0ZXN0X3R5cGVzID0gW10KKyAg
ICAgICAgICAgIGZvciB0IGluIHNlbGYuX3Rlc3RfdHlwZXM6CisgICAgICAgICAgICAgICAgdGVz
dF90eXBlcy5hcHBlbmQodChzZWxmLl9vcHRpb25zLnBsYXRmb3JtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCisK
KyAgICAgICAgICAgIHRlc3RfYXJncywgc2hlbGxfYXJncyA9IHNlbGYuX0dldFRlc3RTaGVsbEFy
Z3MoaSkKKyAgICAgICAgICAgIHRocmVhZCA9IHRlc3Rfc2hlbGxfdGhyZWFkLlRlc3RTaGVsbFRo
cmVhZChmaWxlbmFtZV9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5k
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNoZWxsX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucykKKyAgICAgICAg
ICAgIGlmIHNlbGYuX0lzU2luZ2xlVGhyZWFkZWQoKToKKyAgICAgICAgICAgICAgICB0aHJlYWQu
UnVuSW5NYWluVGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgdGhyZWFkcy5hcHBl
bmQodGhyZWFkKQorCisgICAgICAgIHJldHVybiB0aHJlYWRzCisKKyAgICBkZWYgX1N0b3BMYXlv
dXRUZXN0SGVscGVyKHNlbGYsIHByb2MpOgorICAgICAgICAiIiJTdG9wIHRoZSBsYXlvdXQgdGVz
dCBoZWxwZXIgYW5kIGNsb3NlcyBpdCBkb3duLiIiIgorICAgICAgICBpZiBwcm9jOgorICAgICAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RvcHBpbmcgbGF5b3V0IHRlc3QgaGVscGVyIikKKyAgICAg
ICAgICAgIHByb2Muc3RkaW4ud3JpdGUoInhcbiIpCisgICAgICAgICAgICBwcm9jLnN0ZGluLmNs
b3NlKCkKKyAgICAgICAgICAgIHByb2Mud2FpdCgpCisKKyAgICBkZWYgX0lzU2luZ2xlVGhyZWFk
ZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFsbCB0
aGUgdGVzdHMgaW4gdGhlIG1haW4gdGhyZWFkLiIiIgorICAgICAgICByZXR1cm4gaW50KHNlbGYu
X29wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzKSA9PSAxCisKKyAgICBkZWYgX1J1blRlc3RzKHNlbGYs
IHRlc3Rfc2hlbGxfYmluYXJ5LCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAg
IiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KKworICAgICAgICBSZXR1cm46IEEg
dHVwbGUgKGZhaWx1cmVzLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICAg
ICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgICAgICBmYWlsdXJlcyBpcyBhIG1h
cCBmcm9tIHRlc3QgdG8gbGlzdCBvZiBmYWlsdXJlIHR5cGVzCisgICAgICAgICAgICB0aHJlYWRf
dGltaW5ncyBpcyBhIGxpc3Qgb2YgZGljdHMgd2l0aCB0aGUgdG90YWwgcnVudGltZQorICAgICAg
ICAgICAgICBvZiBlYWNoIHRocmVhZCB3aXRoICduYW1lJywgJ251bV90ZXN0cycsICd0b3RhbF90
aW1lJyBwcm9wZXJ0aWVzCisgICAgICAgICAgICB0ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHRp
bWluZ3MgZm9yIGVhY2ggc2hhcmRlZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgb2YgdGhl
IGZvcm0gW3RpbWUsIGRpcmVjdG9yeV9uYW1lLCBudW1fdGVzdHNdCisgICAgICAgICAgICBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgcnVuIHRpbWVzIGZvciBlYWNoIHRlc3QK
KyAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1bl90
aW1lOnRlc3RfcnVuX3RpbWV9CisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBv
YmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAg
dGhyZWFkcyA9IHNlbGYuX0luc3RhbnRpYXRlVGVzdFNoZWxsVGhyZWFkcyh0ZXN0X3NoZWxsX2Jp
bmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFk
cyB0byBmaW5pc2ggYW5kIGNvbGxlY3QgdGVzdCBmYWlsdXJlcy4KKyAgICAgICAgZmFpbHVyZXMg
PSB7fQorICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQorICAgICAgICBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncyA9IFtdCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHdoaWxl
IHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICMgTGV0IGl0IHRpbWVvdXQg
b2NjYXNpb25hbGx5IHNvIGl0IGNhbiBub3RpY2UgYQorICAgICAgICAgICAgICAgICAgICAjIEtl
eWJvYXJkSW50ZXJydXB0LiBBY3R1YWxseSwgdGhlIHRpbWVvdXQgZG9lc24ndAorICAgICAgICAg
ICAgICAgICAgICAjIHJlYWxseSBtYXR0ZXI6IGFwcGFyZW50bHkgaXQgc3VmZmljZXMgdG8gbm90
IHVzZQorICAgICAgICAgICAgICAgICAgICAjIGFuIGluZGVmaW5pdGUgYmxvY2tpbmcgam9pbiBm
b3IgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgIyBiZSBpbnRlcnJ1cHRpYmxlIGJ5IEtleWJv
YXJkSW50ZXJydXB0LgorICAgICAgICAgICAgICAgICAgICB0aHJlYWQuam9pbigwLjEpCisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuVXBkYXRlU3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKyAgICAg
ICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQoeyduYW1lJzogdGhyZWFkLmdldE5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1fdGVzdHMnOiB0
aHJlYWQuR2V0TnVtVGVzdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0b3RhbF90aW1lJzogdGhyZWFkLkdldFRvdGFsVGltZSgpfSkKKyAgICAgICAgICAgICAg
ICB0ZXN0X3RpbWluZ3MudXBkYXRlKHRocmVhZC5HZXREaXJlY3RvcnlUaW1pbmdTdGF0cygpKQor
ICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0aHJlYWQuR2V0
SW5kaXZpZHVhbFRlc3RTdGF0cygpKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6
CisgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdGhy
ZWFkLkNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLl9TdG9wTGF5b3V0VGVzdEhlbHBlcihsYXlv
dXRfdGVzdF9oZWxwZXJfcHJvYykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZvciB0aHJl
YWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBhIFRlc3RTaGVsbFRo
cmVhZCBkaWVkIGJlZm9yZSBub3JtYWwgY29tcGxldGlvbi4KKyAgICAgICAgICAgIGV4Y2VwdGlv
bl9pbmZvID0gdGhyZWFkLkdldEV4Y2VwdGlvbkluZm8oKQorICAgICAgICAgICAgaWYgZXhjZXB0
aW9uX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhy
ZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdCBjbGVhciB0aGF0CisgICAgICAgICAgICAg
ICAgIyB0ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsIHRoZSB0ZXN0cyB0aGF0IGRpZCBu
b3QgcnVuCisgICAgICAgICAgICAgICAgIyB3b3VsZCBiZSBhc3N1bWVkIHRvIGhhdmUgcGFzc2Vk
LgorICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5m
b1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBwaWNrIHVw
IGFueSByZW1haW5pbmcgdGVzdHMuCisgICAgICAgIHNlbGYuVXBkYXRlU3VtbWFyeShyZXN1bHRf
c3VtbWFyeSkKKyAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBp
bmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKworICAgIGRlZiBSdW4oc2VsZiwgcmVzdWx0X3N1bW1h
cnkpOgorICAgICAgICAiIiJSdW4gYWxsIG91ciB0ZXN0cyBvbiBhbGwgb3VyIHRlc3QgZmlsZXMu
CisKKyAgICAgICAgRm9yIGVhY2ggdGVzdCBmaWxlLCB3ZSBydW4gZWFjaCB0ZXN0IHR5cGUuIElm
IHRoZXJlIGFyZSBhbnkgZmFpbHVyZXMsCisgICAgICAgIHdlIGNvbGxlY3QgdGhlbSBmb3IgcmVw
b3J0aW5nLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGEgc3Vt
bWFyeSBvYmplY3QgdHJhY2tpbmcgdGhlIHRlc3QgcmVzdWx0cy4KKworICAgICAgICBSZXR1cm46
CisgICAgICAgICAgV2UgcmV0dXJuIG5vbnplcm8gaWYgdGhlcmUgYXJlIHJlZ3Jlc3Npb25zIGNv
bXBhcmVkIHRvIHRoZSBsYXN0IHJ1bi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxm
Ll90ZXN0X2ZpbGVzOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCisgICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5ID0gcGF0aF91dGlscy5UZXN0
U2hlbGxQYXRoKHNlbGYuX29wdGlvbnMudGFyZ2V0KQorCisgICAgICAgICMgU3RhcnQgdXAgYW55
IGhlbHBlciBuZWVkZWQKKyAgICAgICAgbGF5b3V0X3Rlc3RfaGVscGVyX3Byb2MgPSBOb25lCisg
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgorICAgICAgICAgICAg
aGVscGVyX3BhdGggPSBwYXRoX3V0aWxzLkxheW91dFRlc3RIZWxwZXJQYXRoKHNlbGYuX29wdGlv
bnMudGFyZ2V0KQorICAgICAgICAgICAgaWYgbGVuKGhlbHBlcl9wYXRoKToKKyAgICAgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJTdGFydGluZyBsYXlvdXQgaGVscGVyICVzIiAlIGhlbHBlcl9w
YXRoKQorICAgICAgICAgICAgICAgIGxheW91dF90ZXN0X2hlbHBlcl9wcm9jID0gc3VicHJvY2Vz
cy5Qb3BlbigKKyAgICAgICAgICAgICAgICAgICAgW2hlbHBlcl9wYXRoXSwgc3RkaW49c3VicHJv
Y2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBz
dGRlcnI9Tm9uZSkKKyAgICAgICAgICAgICAgICBpc19yZWFkeSA9IGxheW91dF90ZXN0X2hlbHBl
cl9wcm9jLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGlzX3JlYWR5
LnN0YXJ0c3dpdGgoJ3JlYWR5Jyk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Io
ImxheW91dF90ZXN0X2hlbHBlciBmYWlsZWQgdG8gYmUgcmVhZHkiKQorCisgICAgICAgICMgQ2hl
Y2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAodGhlbWVzLCBmb250cywgLi4uKSBhcmUg
Y29ycmVjdC4KKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMubm9jaGVja19zeXNfZGVwczoK
KyAgICAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFt0ZXN0X3NoZWxsX2JpbmFyeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWNoZWNrLWxheW91dC10ZXN0
LXN5cy1kZXBzIl0pCisgICAgICAgICAgICBpZiBwcm9jLndhaXQoKSAhPSAwOgorICAgICAgICAg
ICAgICAgIGxvZ2dpbmcuaW5mbygiQWJvcnRpbmcgYmVjYXVzZSBzeXN0ZW0gZGVwZW5kZW5jaWVz
IGNoZWNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC5cbiBUbyBvdmVy
cmlkZSwgaW52b2tlIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1ub2No
ZWNrLXN5cy1kZXBzIikKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlm
IHNlbGYuX0NvbnRhaW5zVGVzdHMoc2VsZi5IVFRQX1NVQkRJUik6CisgICAgICAgICAgICBzZWxm
Ll9odHRwX3NlcnZlci5TdGFydCgpCisKKyAgICAgICAgaWYgc2VsZi5fQ29udGFpbnNUZXN0cyhz
ZWxmLldFQlNPQ0tFVF9TVUJESVIpOgorICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZl
ci5TdGFydCgpCisgICAgICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyLlN0
YXJ0KCkKKworICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncyA9ICgKKyAgICAgICAgICAgIHNlbGYuX1J1blRlc3RzKHRlc3Rfc2hlbGxf
YmluYXJ5LCBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeSkpCisKKyAgICAgICAgIyBXZSBleGNsdWRlIHRoZSBjcmFzaGVzIGZy
b20gdGhlIGxpc3Qgb2YgcmVzdWx0cyB0byByZXRyeSwgYmVjYXVzZQorICAgICAgICAjIHdlIHdh
bnQgdG8gdHJlYXQgZXZlbiBhIHBvdGVudGlhbGx5IGZsYWt5IGNyYXNoIGFzIGFuIGVycm9yLgor
ICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX0dldEZhaWx1cmVzKHJlc3VsdF9zdW1tYXJ5LCBpbmNs
dWRlX2NyYXNoZXM9RmFsc2UpCisgICAgICAgIHJldHJpZXMgPSAwCisgICAgICAgIHJldHJ5X3N1
bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICB3aGlsZSAocmV0cmllcyA8IHNlbGYuTlVN
X1JFVFJZX09OX1VORVhQRUNURURfRkFJTFVSRSBhbmQKKyAgICAgICAgICAgICAgIGxlbihmYWls
dXJlcykpOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUmV0cnlpbmcgJWQgdW5leHBlY3Rl
ZCBmYWlsdXJlKHMpIiAlIGxlbihmYWlsdXJlcykpCisgICAgICAgICAgICByZXRyaWVzICs9IDEK
KyAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KHNlbGYuX2V4cGVjdGF0
aW9ucywgZmFpbHVyZXMua2V5cygpKQorICAgICAgICAgICAgc2VsZi5fUnVuVGVzdHModGVzdF9z
aGVsbF9iaW5hcnksIGZhaWx1cmVzLmtleXMoKSwgcmV0cnlfc3VtbWFyeSkKKyAgICAgICAgICAg
IGZhaWx1cmVzID0gc2VsZi5fR2V0RmFpbHVyZXMocmV0cnlfc3VtbWFyeSwgaW5jbHVkZV9jcmFz
aGVzPVRydWUpCisKKyAgICAgICAgc2VsZi5fU3RvcExheW91dFRlc3RIZWxwZXIobGF5b3V0X3Rl
c3RfaGVscGVyX3Byb2MpCisgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKKworICAgICAg
ICB3cml0ZSA9IENyZWF0ZUxvZ2dpbmdXcml0ZXIoc2VsZi5fb3B0aW9ucywgJ3RpbWluZycpCisg
ICAgICAgIHNlbGYuX1ByaW50VGltaW5nU3RhdGlzdGljcyh3cml0ZSwgZW5kX3RpbWUgLSBzdGFy
dF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWlu
Z3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCIiKQorCisg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgICMgV2Ugd3JpdGUg
dGhpcyBibG9jayB0byBzdGRvdXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKKyAgICAgICAg
ICAgICMgYnVpbGRib3QgbG9nIHBhcnNlciwgd2hpY2ggb25seSBsb29rcyBhdCBzdGRvdXQsIG5v
dCBzdGRlcnIgOigKKyAgICAgICAgICAgIHdyaXRlID0gbGFtYmRhIHM6IHN5cy5zdGRvdXQud3Jp
dGUoIiVzXG4iICUgcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdyaXRlID0gQ3JlYXRl
TG9nZ2luZ1dyaXRlcihzZWxmLl9vcHRpb25zLCAnYWN0dWFsJykKKworICAgICAgICBzZWxmLl9Q
cmludFJlc3VsdFN1bW1hcnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5KQorCisgICAgICAgIHN5cy5z
dGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgICAgICBpZiAo
TE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYuX29wdGlvbnMubG9nIG9yCisgICAgICAgICAg
ICAoTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCisgICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkudG90YWwgIT0gcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQpKToKKyAgICAg
ICAgICAgIHByaW50CisKKyAgICAgICAgIyBUaGlzIHN1bW1hcnkgZGF0YSBnZXRzIHdyaXR0ZW4g
dG8gc3Rkb3V0IHJlZ2FyZGxlc3Mgb2YgbG9nIGxldmVsCisgICAgICAgIHNlbGYuX1ByaW50T25l
TGluZVN1bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQpCisKKyAgICAgICAgdW5leHBlY3Rl
ZF9yZXN1bHRzID0gc2VsZi5fU3VtbWFyaXplVW5leHBlY3RlZFJlc3VsdHMocmVzdWx0X3N1bW1h
cnksCisgICAgICAgICAgICByZXRyeV9zdW1tYXJ5KQorICAgICAgICBzZWxmLl9QcmludFVuZXhw
ZWN0ZWRSZXN1bHRzKHVuZXhwZWN0ZWRfcmVzdWx0cykKKworICAgICAgICAjIFdyaXRlIHRoZSBz
YW1lIGRhdGEgdG8gbG9nIGZpbGVzLgorICAgICAgICBzZWxmLl9Xcml0ZUpTT05GaWxlcyh1bmV4
cGVjdGVkX3Jlc3VsdHMsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKworICAgICAgICAjIFdyaXRlIHRoZSBzdW1t
YXJ5IHRvIGRpc2sgKHJlc3VsdHMuaHRtbCkgYW5kIG1heWJlIG9wZW4gdGhlCisgICAgICAgICMg
dGVzdF9zaGVsbCB0byB0aGlzIGZpbGUuCisgICAgICAgIHdyb3RlX3Jlc3VsdHMgPSBzZWxmLl9X
cml0ZVJlc3VsdHNIdG1sRmlsZShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgaWYgbm90IHNlbGYu
X29wdGlvbnMubm9zaG93X3Jlc3VsdHMgYW5kIHdyb3RlX3Jlc3VsdHM6CisgICAgICAgICAgICBz
ZWxmLl9TaG93UmVzdWx0c0h0bWxGaWxlKCkKKworICAgICAgICAjIElnbm9yZSBmbGFreSBmYWls
dXJlcyBhbmQgdW5leHBlY3RlZCBwYXNzZXMgc28gd2UgZG9uJ3QgdHVybiB0aGUKKyAgICAgICAg
IyBib3QgcmVkIGZvciB0aG9zZS4KKyAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0c1sn
bnVtX3JlZ3Jlc3Npb25zJ10KKworICAgIGRlZiBVcGRhdGVTdW1tYXJ5KHNlbGYsIHJlc3VsdF9z
dW1tYXJ5KToKKyAgICAgICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IHdoaWxlIHJ1bm5pbmcgdGVz
dHMuIiIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgKHRlc3QsIGZhaWxfbGlzdCkgPSBzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgp
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9mYWlsdXJlcy5EZXRlcm1pbmVSZXN1bHRU
eXBlKGZhaWxfbGlzdCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0
aW9ucy5NYXRjaGVzQW5FeHBlY3RlZFJlc3VsdCh0ZXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkK
KyAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5BZGQodGVzdCwgZmFpbF9saXN0LCByZXN1
bHQsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIChMT0dfREVUQUlMRURfUFJPR1JFU1Mg
aW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCisgICAgICAgICAgICAgICAgICAgIChzZWxmLl9vcHRp
b25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgorICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fSXNTaW5nbGVUaHJlYWRlZCgpKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX0Rp
c3BsYXlEZXRhaWxlZFByb2dyZXNzKHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBleHBlY3RlZCBhbmQgTE9HX1VORVhQRUNU
RUQgaW4gc2VsZi5fb3B0aW9ucy5sb2c6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9Q
cmludFVuZXhwZWN0ZWRUZXN0UmVzdWx0KHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fRGlzcGxheU9uZUxpbmVQcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIGRl
ZiBfRGlzcGxheU9uZUxpbmVQcm9ncmVzcyhzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAg
ICIiIkRpc3BsYXlzIHRoZSBwcm9ncmVzcyB0aHJvdWdoIHRoZSB0ZXN0IHJ1bi4iIiIKKyAgICAg
ICAgc2VsZi5fbWV0ZXIudXBkYXRlKCJUZXN0aW5nOiAlZCByYW4gYXMgZXhwZWN0ZWQsICVkIGRp
ZG4ndCwgJWQgbGVmdCIgJQorICAgICAgICAgICAgKHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkLCBy
ZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkLAorICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnJl
bWFpbmluZykpCisKKyAgICBkZWYgX0Rpc3BsYXlEZXRhaWxlZFByb2dyZXNzKHNlbGYsIHJlc3Vs
dF9zdW1tYXJ5KToKKyAgICAgICAgIiIiRGlzcGxheSBkZXRhaWxlZCBwcm9ncmVzcyBvdXRwdXQg
d2hlcmUgd2UgcHJpbnQgdGhlIGRpcmVjdG9yeSBuYW1lCisgICAgICAgIGFuZCBvbmUgZG90IGZv
ciBlYWNoIGNvbXBsZXRlZCB0ZXN0LiBUaGlzIGlzIHRyaWdnZXJlZCBieQorICAgICAgICAiLS1s
b2cgZGV0YWlsZWQtcHJvZ3Jlc3MiLiIiIgorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3Rf
bnVtYmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgbmV4dF90ZXN0ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJl
bnRfdGVzdF9udW1iZXJdCisgICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKHBhdGhf
dXRpbHMuUmVsYXRpdmVUZXN0RmlsZW5hbWUobmV4dF90ZXN0KSkKKyAgICAgICAgaWYgc2VsZi5f
Y3VycmVudF9wcm9ncmVzc19zdHIgPT0gIiI6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3By
b2dyZXNzX3N0ciA9ICIlczogIiAlIChuZXh0X2RpcikKKyAgICAgICAgICAgIHNlbGYuX2N1cnJl
bnRfZGlyID0gbmV4dF9kaXIKKworICAgICAgICB3aGlsZSBuZXh0X3Rlc3QgaW4gcmVzdWx0X3N1
bW1hcnkucmVzdWx0czoKKyAgICAgICAgICAgIGlmIG5leHRfZGlyICE9IHNlbGYuX2N1cnJlbnRf
ZGlyOgorICAgICAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIlc1xuIiAlIChzZWxmLl9j
dXJyZW50X3Byb2dyZXNzX3N0cikpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9n
cmVzc19zdHIgPSAiJXM6IC4iICUgKG5leHRfZGlyKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1
cnJlbnRfZGlyID0gbmV4dF9kaXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
c2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgKz0gIi4iCisKKyAgICAgICAgICAgIGlmIChuZXh0
X3Rlc3QgaW4gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzIGFuZAorICAgICAgICAg
ICAgICAgIExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29wdGlvbnMubG9nKToKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbbmV4dF90ZXN0
XQorICAgICAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIlc1xuIiAlIHNlbGYuX2N1cnJl
bnRfcHJvZ3Jlc3Nfc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuX1ByaW50VW5leHBlY3RlZFRl
c3RSZXN1bHQobmV4dF90ZXN0LCByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVu
dF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSBzZWxmLl9jdXJyZW50X2RpcgorCisgICAgICAgICAg
ICBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyICs9IDEKKyAgICAgICAgICAgIGlmIHNlbGYuX2N1
cnJlbnRfdGVzdF9udW1iZXIgPT0gbGVuKHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCk6CisgICAgICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbmV4dF90ZXN0ID0gc2VsZi5fdGVzdF9maWxl
c19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAgICAgICAgICBuZXh0X2RpciA9
IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLlJlbGF0aXZlVGVz
dEZpbGVuYW1lKG5leHRfdGVzdCkpCisKKyAgICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWlu
aW5nOgorICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnku
cmVtYWluaW5nKQorICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCIlcyVzIiAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyLCBy
ZW1haW5fc3RyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRl
KCIlc1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikpCisKKyAgICBkZWYgX0dldEZh
aWx1cmVzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCBpbmNsdWRlX2NyYXNoZXMpOgorICAgICAgICAi
IiJGaWx0ZXJzIGEgZGljdCBvZiByZXN1bHRzIGFuZCByZXR1cm5zIG9ubHkgdGhlIGZhaWx1cmVz
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHRoZSByZXN1bHRz
IG9mIHRoZSB0ZXN0IHJ1bgorICAgICAgICAgIGluY2x1ZGVfY3Jhc2hlczogd2hldGhlciBjcmFz
aGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LgorICAgICAgICAgICAgV2UgdXNlIEZhbHNl
IHdoZW4gZmluZGluZyB0aGUgbGlzdCBvZiBmYWlsdXJlcyB0byByZXRyeQorICAgICAgICAgICAg
dG8gc2VlIGlmIHRoZSByZXN1bHRzIHdlcmUgZmxha3kuIEFsdGhvdWdoIHRoZSBjcmFzaGVzIG1h
eSBhbHNvIGJlCisgICAgICAgICAgICBmbGFreSwgd2UgdHJlYXQgdGhlbSBhcyBpZiB0aGV5IGFy
ZW4ndCBzbyB0aGF0IHRoZXkncmUgbm90IGlnbm9yZWQuCisgICAgICAgIFJldHVybnM6CisgICAg
ICAgICAgYSBkaWN0IG9mIGZpbGVzIC0+IHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIGZh
aWxlZF9yZXN1bHRzID0ge30KKyAgICAgICAgZm9yIHRlc3QsIHJlc3VsdCBpbiByZXN1bHRfc3Vt
bWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlBBU1Mgb3IKKyAgICAgICAgICAgICAgICByZXN1bHQg
PT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0ggYW5kIG5vdCBpbmNsdWRlX2NyYXNoZXMpOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmYWlsZWRfcmVzdWx0c1t0ZXN0XSA9
IHJlc3VsdAorCisgICAgICAgIHJldHVybiBmYWlsZWRfcmVzdWx0cworCisgICAgZGVmIF9TdW1t
YXJpemVVbmV4cGVjdGVkUmVzdWx0cyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFy
eSk6CisgICAgICAgICIiIlN1bW1hcml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGlj
dC4KKworICAgICAgICBUT0RPKGRwcmFua2UpOiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0dXJlIGlu
dG8gYSBzZXBhcmF0ZSBjbGFzcz8KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGluaXRpYWwgdGVzdCBydW5zCisgICAgICAgICAg
cmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRy
aWVkIHRlc3RzCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRh
aW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUKKyAgICAg
ICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6CisgICAgICAgICAgICAndmVyc2lv
bic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEgaW4gdGhpcyB2ZXJzaW9uKQorICAgICAgICAgICAg
J2ZpeGFibGUnOiAjIG9mIGZpeGFibGUgdGVzdHMgKE5PVyAtIFBBU1MpCisgICAgICAgICAgICAn
c2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0cyAoTk9XICYgU0tJUFBFRCkKKyAgICAgICAgICAg
ICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5vbi1mbGFreSBmYWlsdXJlcworICAgICAgICAgICAg
J251bV9mbGFreSc6ICMgb2YgZmxha3kgZmFpbHVyZXMKKyAgICAgICAgICAgICdudW1fcGFzc2Vz
JzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcworICAgICAgICAgICAgJ3Rlc3RzJzogYSBkaWN0IG9m
IHRlc3RzIC0+IHsnZXhwZWN0ZWQnOiAnLi4uJywgJ2FjdHVhbCc6ICcuLi4nfQorICAgICAgICAi
IiIKKyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9IDEK
KworICAgICAgICB0YmUgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbgorICAg
ICAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQorICAgICAgICByZXN1
bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gLQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdKQor
ICAgICAgICByZXN1bHRzWydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5P
V10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRp
b25zLlNLSVBdKQorCisgICAgICAgIG51bV9wYXNzZXMgPSAwCisgICAgICAgIG51bV9mbGFreSA9
IDAKKyAgICAgICAgbnVtX3JlZ3Jlc3Npb25zID0gMAorICAgICAgICBrZXl3b3JkcyA9IHt9Cisg
ICAgICAgIGZvciBrLCB2IGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5pdGVy
aXRlbXMoKToKKyAgICAgICAgICAgIGtleXdvcmRzW3ZdID0gay51cHBlcigpCisKKyAgICAgICAg
dGVzdHMgPSB7fQorICAgICAgICBmb3IgZmlsZW5hbWUsIHJlc3VsdCBpbiByZXN1bHRfc3VtbWFy
eS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAjIE5vdGUgdGhh
dCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKKyAgICAg
ICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlm
IHdlIHJldHJpZWQgaXQpLAorICAgICAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSBy
ZXN1bHQgbm90IGZsYWt5LgorICAgICAgICAgICAgdGVzdCA9IHBhdGhfdXRpbHMuUmVsYXRpdmVU
ZXN0RmlsZW5hbWUoZmlsZW5hbWUpCisgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVj
dGF0aW9ucy5HZXRFeHBlY3RhdGlvbnNTdHJpbmcoZmlsZW5hbWUpCisgICAgICAgICAgICBhY3R1
YWwgPSBba2V5d29yZHNbcmVzdWx0XV0KKworICAgICAgICAgICAgaWYgcmVzdWx0ID09IHRlc3Rf
ZXhwZWN0YXRpb25zLlBBU1M6CisgICAgICAgICAgICAgICAgbnVtX3Bhc3NlcyArPSAxCisgICAg
ICAgICAgICBlbGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAg
ICAgICAgICBudW1fcmVncmVzc2lvbnMgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3Vs
dHM6CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5leHRlbmQoCisgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuR2V0RXhwZWN0YXRpb25zU3RyaW5nKAorICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpLnNwbGl0KCIgIikpCisgICAgICAgICAgICAgICAg
ICAgIG51bV9mbGFreSArPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0cnlfcmVzdWx0ID0gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbZmls
ZW5hbWVdCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCAhPSByZXRyeV9yZXN1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5X3Jlc3Vs
dF0pCisgICAgICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQorICAgICAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9
IDEKKworICAgICAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQorICAgICAgICAgICAgdGVzdHNbdGVz
dF1bJ2V4cGVjdGVkJ10gPSBleHBlY3RlZAorICAgICAgICAgICAgdGVzdHNbdGVzdF1bJ2FjdHVh
bCddID0gIiAiLmpvaW4oYWN0dWFsKQorCisgICAgICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0ZXN0
cworICAgICAgICByZXN1bHRzWydudW1fcGFzc2VzJ10gPSBudW1fcGFzc2VzCisgICAgICAgIHJl
c3VsdHNbJ251bV9mbGFreSddID0gbnVtX2ZsYWt5CisgICAgICAgIHJlc3VsdHNbJ251bV9yZWdy
ZXNzaW9ucyddID0gbnVtX3JlZ3Jlc3Npb25zCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKwor
ICAgIGRlZiBfV3JpdGVKU09ORmlsZXMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzLCByZXN1bHRf
c3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
KToKKyAgICAgICAgIiIiV3JpdGVzIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0IHJ1biBhcyBKU09O
IGZpbGVzIGludG8gdGhlIHJlc3VsdHMKKyAgICAgICAgZGlyLgorCisgICAgICAgIFRoZXJlIGFy
ZSB0aHJlZSBkaWZmZXJlbnQgZmlsZXMgd3JpdHRlbiBpbnRvIHRoZSByZXN1bHRzIGRpcjoKKyAg
ICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMuanNvbjogQSBzaG9ydCBsaXN0IG9mIGFueSB1bmV4
cGVjdGVkIHJlc3VsdHMuCisgICAgICAgICAgICBUaGlzIGlzIHVzZWQgYnkgdGhlIGJ1aWxkYm90
cyB0byBkaXNwbGF5IHJlc3VsdHMuCisgICAgICAgICAgZXhwZWN0YXRpb25zLmpzb246IFRoaXMg
aXMgdXNlZCBieSB0aGUgZmxha2luZXNzIGRhc2hib2FyZC4KKyAgICAgICAgICByZXN1bHRzLmpz
b246IEEgZnVsbCBsaXN0IG9mIHRoZSByZXN1bHRzIC0gdXNlZCBieSB0aGUgZmxha2luZXNzCisg
ICAgICAgICAgICBkYXNoYm9hcmQgYW5kIHRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBkYXNoYm9hcmQu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHM6IGRpY3Qgb2Yg
dW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGZ1bGwgc3VtbWFy
eSBvYmplY3QKKyAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogbGlzdCBvZiB0ZXN0
IHRpbWVzICh1c2VkIGJ5IHRoZSBmbGFraW5lc3MKKyAgICAgICAgICAgIGRhc2hib2FyZCkuCisg
ICAgICAgICIiIgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJXcml0aW5nIEpTT04gZmlsZXMgaW4g
JXMuIiAlCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSkKKyAgICAgICAgdW5leHBlY3RlZF9maWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICJ1bmV4cGVjdGVkX3Jlc3Vs
dHMuanNvbiIpLCAidyIpCisgICAgICAgIHVuZXhwZWN0ZWRfZmlsZS53cml0ZShzaW1wbGVqc29u
LmR1bXBzKHVuZXhwZWN0ZWRfcmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9MikpCisgICAgICAgIHVuZXhwZWN0ZWRfZmlsZS5jbG9z
ZSgpCisKKyAgICAgICAgIyBXcml0ZSBhIGpzb24gZmlsZSBvZiB0aGUgdGVzdF9leHBlY3RhdGlv
bnMudHh0IGZpbGUgZm9yIHRoZSBsYXlvdXQKKyAgICAgICAgIyB0ZXN0cyBkYXNoYm9hcmQuCisg
ICAgICAgIGV4cGVjdGF0aW9uc19maWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICJleHBlY3RhdGlvbnMuanNvbiIpLCAi
dyIpCisgICAgICAgIGV4cGVjdGF0aW9uc19qc29uID0gXAorICAgICAgICAgICAgc2VsZi5fZXhw
ZWN0YXRpb25zLkdldEV4cGVjdGF0aW9uc0pzb25Gb3JBbGxQbGF0Zm9ybXMoKQorICAgICAgICBl
eHBlY3RhdGlvbnNfZmlsZS53cml0ZSgiQUREX0VYUEVDVEFUSU9OUygiICsgZXhwZWN0YXRpb25z
X2pzb24gKyAiKTsiKQorICAgICAgICBleHBlY3RhdGlvbnNfZmlsZS5jbG9zZSgpCisKKyAgICAg
ICAganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IuSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0
b3IoCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkZXJfbmFtZSwgc2VsZi5fb3B0aW9u
cy5idWlsZF9uYW1lLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWlsZF9udW1iZXIsIHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICBCVUlMREVSX0JBU0Vf
VVJMLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0
aW9ucywgcmVzdWx0X3N1bW1hcnksIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKworICAgICAgICBs
b2dnaW5nLmRlYnVnKCJGaW5pc2hlZCB3cml0aW5nIEpTT04gZmlsZXMuIikKKworICAgIGRlZiBf
UHJpbnRFeHBlY3RlZFJlc3VsdHNPZlR5cGUoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5LCBy
ZXN1bHRfdHlwZSwKKyAgICAgICAgcmVzdWx0X3R5cGVfc3RyKToKKyAgICAgICAgIiIiUHJpbnQg
dGhlIG51bWJlciBvZiB0aGUgdGVzdHMgaW4gYSBnaXZlbiByZXN1bHQgY2xhc3MuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChl
LmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4K
KyAgICAgICAgICByZXN1bHRfc3VtbWFyeSAtIHRoZSBvYmplY3QgY29udGFpbmluZyBhbGwgdGhl
IHJlc3VsdHMgdG8gcmVwb3J0IG9uCisgICAgICAgICAgcmVzdWx0X3R5cGUgLSB0aGUgcGFydGlj
dWxhciByZXN1bHQgdHlwZSB0byByZXBvcnQgaW4gdGhlIHN1bW1hcnkuCisgICAgICAgICAgcmVz
dWx0X3R5cGVfc3RyIC0gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHJlc3VsdF90eXBlLgor
ICAgICAgICAiIiIKKyAgICAgICAgdGVzdHMgPSBzZWxmLl9leHBlY3RhdGlvbnMuR2V0VGVzdHNX
aXRoUmVzdWx0VHlwZShyZXN1bHRfdHlwZSkKKyAgICAgICAgbm93ID0gcmVzdWx0X3N1bW1hcnku
dGVzdHNfYnlfdGltZWxpbmVbdGVzdF9leHBlY3RhdGlvbnMuTk9XXQorICAgICAgICB3b250Zml4
ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGVzdF9leHBlY3RhdGlvbnMuV09O
VEZJWF0KKyAgICAgICAgZGVmZXIgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0
ZXN0X2V4cGVjdGF0aW9ucy5ERUZFUl0KKworICAgICAgICAjIFdlIHVzZSBhIGZhbmN5IGZvcm1h
dCBzdHJpbmcgaW4gb3JkZXIgdG8gcHJpbnQgdGhlIGRhdGEgb3V0IGluIGEKKyAgICAgICAgIyBu
aWNlbHktYWxpZ25lZCB0YWJsZS4KKyAgICAgICAgZm10c3RyID0gKCJFeHBlY3Q6ICUlNWQgJSUt
OHMgKCUlJWRkIG5vdywgJSUlZGQgZGVmZXIsICUlJWRkIHdvbnRmaXgpIgorICAgICAgICAgICAg
ICAgICAgJSAoc2VsZi5fTnVtRGlnaXRzKG5vdyksIHNlbGYuX051bURpZ2l0cyhkZWZlciksCisg
ICAgICAgICAgICAgICAgICBzZWxmLl9OdW1EaWdpdHMod29udGZpeCkpKQorICAgICAgICB3cml0
ZShmbXRzdHIgJSAobGVuKHRlc3RzKSwgcmVzdWx0X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cp
LAorICAgICAgICAgICAgICBsZW4odGVzdHMgJiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRmaXgp
KSkKKworICAgIGRlZiBfTnVtRGlnaXRzKHNlbGYsIG51bSk6CisgICAgICAgICIiIlJldHVybnMg
dGhlIG51bWJlciBvZiBkaWdpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9mIGEK
KyAgICAgICAgc2VxdWVuY2UuIiIiCisgICAgICAgIG5kaWdpdHMgPSAxCisgICAgICAgIGlmIGxl
bihudW0pOgorICAgICAgICAgICAgbmRpZ2l0cyA9IGludChtYXRoLmxvZzEwKGxlbihudW0pKSkg
KyAxCisgICAgICAgIHJldHVybiBuZGlnaXRzCisKKyAgICBkZWYgX1ByaW50VGltaW5nU3RhdGlz
dGljcyhzZWxmLCB3cml0ZSwgdG90YWxfdGltZSwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkpOgorICAgICAgICAiIiJSZWNvcmQgdGltaW5nLXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciB0
aGUgdGVzdCBydW4uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFj
ayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAg
ICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgdG90YWxfdGltZTogdG90YWwgZWxhcHNl
ZCB0aW1lIChpbiBzZWNvbmRzKSBmb3IgdGhlIHRlc3QgcnVuCisgICAgICAgICAgdGhyZWFkX3Rp
bWluZ3M6IHdhbGwgY2xvY2sgdGltZSBlYWNoIHRocmVhZCByYW4gZm9yCisgICAgICAgICAgZGly
ZWN0b3J5X3Rlc3RfdGltaW5nczogdGltaW5nIGJ5IGRpcmVjdG9yeQorICAgICAgICAgIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzOiB0aW1pbmcgYnkgZmlsZQorICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5OiBzdW1tYXJ5IG9iamVjdCBmb3IgdGhlIHRlc3QgcnVuCisgICAgICAgICIiIgorICAgICAg
ICB3cml0ZSgiVGVzdCB0aW1pbmc6IikKKyAgICAgICAgd3JpdGUoIiAgJTYuMmYgdG90YWwgdGVz
dGluZyB0aW1lIiAlIHRvdGFsX3RpbWUpCisgICAgICAgIHdyaXRlKCIiKQorICAgICAgICB3cml0
ZSgiVGhyZWFkIHRpbWluZzoiKQorICAgICAgICBjdW1sX3RpbWUgPSAwCisgICAgICAgIGZvciB0
IGluIHRocmVhZF90aW1pbmdzOgorICAgICAgICAgICAgd3JpdGUoIiAgICAlMTBzOiAlNWQgdGVz
dHMsICU2LjJmIHNlY3MiICUKKyAgICAgICAgICAgICAgICAgICh0WyduYW1lJ10sIHRbJ251bV90
ZXN0cyddLCB0Wyd0b3RhbF90aW1lJ10pKQorICAgICAgICAgICAgY3VtbF90aW1lICs9IHRbJ3Rv
dGFsX3RpbWUnXQorICAgICAgICB3cml0ZSgiICAgJTYuMmYgY3VtdWxhdGl2ZSwgJTYuMmYgb3B0
aW1hbCIgJQorICAgICAgICAgICAgICAoY3VtbF90aW1lLCBjdW1sX3RpbWUgLyBpbnQoc2VsZi5f
b3B0aW9ucy5udW1fdGVzdF9zaGVsbHMpKSkKKyAgICAgICAgd3JpdGUoIiIpCisKKyAgICAgICAg
c2VsZi5fUHJpbnRBZ2dyZWdhdGVUZXN0U3RhdGlzdGljcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX1ByaW50SW5kaXZpZHVhbFRlc3RUaW1lcyh3cml0ZSwg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fUHJpbnREaXJlY3RvcnlUaW1p
bmdzKHdyaXRlLCBkaXJlY3RvcnlfdGVzdF90aW1pbmdzKQorCisgICAgZGVmIF9QcmludEFnZ3Jl
Z2F0ZVRlc3RTdGF0aXN0aWNzKHNlbGYsIHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6
CisgICAgICAgICIiIlByaW50cyBhZ2dyZWdhdGUgc3RhdGlzdGljcyAoZS5nLiBtZWRpYW4sIG1l
YW4sIGV0Yy4pIGZvciBhbGwgdGVzdHMuCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgd3JpdGU6
IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgor
ICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgorICAgICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzOiBMaXN0IG9mIHRlc3Rfc2hlbGxfdGhyZWFkLlRlc3RTdGF0cyBmb3IgYWxsCisg
ICAgICAgICAgICAgIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF90eXBlcyA9IGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzWzBdLnRpbWVfZm9yX2RpZmZzLmtleXMoKQorICAgICAgICB0
aW1lc19mb3JfdGVzdF9zaGVsbCA9IFtdCisgICAgICAgIHRpbWVzX2Zvcl9kaWZmX3Byb2Nlc3Np
bmcgPSBbXQorICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlID0ge30KKyAgICAgICAgZm9yIHRl
c3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgorICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZVt0
ZXN0X3R5cGVdID0gW10KKworICAgICAgICBmb3IgdGVzdF9zdGF0cyBpbiBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5nczoKKyAgICAgICAgICAgIHRpbWVzX2Zvcl90ZXN0X3NoZWxsLmFwcGVuZCh0ZXN0
X3N0YXRzLnRlc3RfcnVuX3RpbWUpCisgICAgICAgICAgICB0aW1lc19mb3JfZGlmZl9wcm9jZXNz
aW5nLmFwcGVuZCgKKyAgICAgICAgICAgICAgICB0ZXN0X3N0YXRzLnRvdGFsX3RpbWVfZm9yX2Fs
bF9kaWZmcykKKyAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzID0gdGVzdF9zdGF0cy50aW1lX2Zv
cl9kaWZmcworICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgorICAgICAg
ICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXS5hcHBlbmQoCisgICAgICAg
ICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZV0pCisKKyAgICAgICAgc2VsZi5f
UHJpbnRTdGF0aXN0aWNzRm9yVGVzdFRpbWluZ3Mod3JpdGUsCisgICAgICAgICAgICAiUEVSIFRF
U1QgVElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMpOiIsIHRpbWVzX2Zvcl90ZXN0X3NoZWxsKQor
ICAgICAgICBzZWxmLl9QcmludFN0YXRpc3RpY3NGb3JUZXN0VGltaW5ncyh3cml0ZSwKKyAgICAg
ICAgICAgICJQRVIgVEVTVCBESUZGIFBST0NFU1NJTkcgVElNRVMgKHNlY29uZHMpOiIsCisgICAg
ICAgICAgICB0aW1lc19mb3JfZGlmZl9wcm9jZXNzaW5nKQorICAgICAgICBmb3IgdGVzdF90eXBl
IGluIHRlc3RfdHlwZXM6CisgICAgICAgICAgICBzZWxmLl9QcmludFN0YXRpc3RpY3NGb3JUZXN0
VGltaW5ncyh3cml0ZSwKKyAgICAgICAgICAgICAgICAiUEVSIFRFU1QgVElNRVMgQlkgVEVTVCBU
WVBFOiAlcyIgJSB0ZXN0X3R5cGUsCisgICAgICAgICAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlw
ZVt0ZXN0X3R5cGVdKQorCisgICAgZGVmIF9QcmludEluZGl2aWR1YWxUZXN0VGltZXMoc2VsZiwg
d3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiUHJpbnRzIHRoZSBydW4gdGlt
ZXMgZm9yIHNsb3csIHRpbWVvdXQgYW5kIGNyYXNoIHRlc3RzLgorICAgICAgICBBcmdzOgorICAg
ICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2lu
Z1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgICBp
bmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiB0ZXN0X3NoZWxsX3RocmVhZC5UZXN0U3Rh
dHMgZm9yIGFsbAorICAgICAgICAgICAgICB0ZXN0cy4KKyAgICAgICAgICByZXN1bHRfc3VtbWFy
eTogc3VtbWFyeSBvYmplY3QgZm9yIHRlc3QgcnVuCisgICAgICAgICIiIgorICAgICAgICAjIFJl
dmVyc2Utc29ydCBieSB0aGUgdGltZSBzcGVudCBpbiB0ZXN0X3NoZWxsLgorICAgICAgICBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncy5zb3J0KGxhbWJkYSBhLCBiOgorICAgICAgICAgICAgY21wKGIu
dGVzdF9ydW5fdGltZSwgYS50ZXN0X3J1bl90aW1lKSkKKworICAgICAgICBudW1fcHJpbnRlZCA9
IDAKKyAgICAgICAgc2xvd190ZXN0cyA9IFtdCisgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVz
dHMgPSBbXQorICAgICAgICB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMgPSBbXQorICAgICAgICBmb3Ig
dGVzdF90dXBsZSBpbiBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczoKKyAgICAgICAgICAgIGZpbGVu
YW1lID0gdGVzdF90dXBsZS5maWxlbmFtZQorICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9v
cl9zbG93ID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuX2V4cGVjdGF0aW9ucy5IYXNNb2Rp
ZmllcihmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKToKKyAgICAgICAgICAgICAgICBpc190aW1lb3V0
X2NyYXNoX29yX3Nsb3cgPSBUcnVlCisgICAgICAgICAgICAgICAgc2xvd190ZXN0cy5hcHBlbmQo
dGVzdF90dXBsZSkKKworICAgICAgICAgICAgaWYgZmlsZW5hbWUgaW4gcmVzdWx0X3N1bW1hcnku
ZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0
c1tmaWxlbmFtZV0KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IHRlc3RfZXhwZWN0YXRp
b25zLlRJTUVPVVQgb3IKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID09IHRlc3RfZXhwZWN0
YXRpb25zLkNSQVNIKToKKyAgICAgICAgICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9vcl9z
bG93ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzLmFw
cGVuZCh0ZXN0X3R1cGxlKQorCisgICAgICAgICAgICBpZiAobm90IGlzX3RpbWVvdXRfY3Jhc2hf
b3Jfc2xvdyBhbmQKKyAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA8IHNlbGYuX29wdGlvbnMu
bnVtX3Nsb3dfdGVzdHNfdG9fbG9nKToKKyAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA9IG51
bV9wcmludGVkICsgMQorICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRfc2xvd190ZXN0cy5hcHBl
bmQodGVzdF90dXBsZSkKKworICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fUHJpbnRU
ZXN0TGlzdFRpbWluZyh3cml0ZSwgIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90ICIKKyAg
ICAgICAgICAgICJtYXJrZWQgYXMgU0xPVyBhbmQgZGlkIG5vdCB0aW1lb3V0L2NyYXNoOiIgJQor
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5udW1fc2xvd190ZXN0c190b19sb2csIHVuZXhwZWN0
ZWRfc2xvd190ZXN0cykKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYuX1ByaW50VGVz
dExpc3RUaW1pbmcod3JpdGUsICJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLCBzbG93X3Rlc3RzKQor
ICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fUHJpbnRUZXN0TGlzdFRpbWluZyh3cml0
ZSwgIlRlc3RzIHRoYXQgdGltZWQgb3V0IG9yIGNyYXNoZWQ6IiwKKyAgICAgICAgICAgIHRpbWVv
dXRfb3JfY3Jhc2hfdGVzdHMpCisgICAgICAgIHdyaXRlKCIiKQorCisgICAgZGVmIF9QcmludFRl
c3RMaXN0VGltaW5nKHNlbGYsIHdyaXRlLCB0aXRsZSwgdGVzdF9saXN0KToKKyAgICAgICAgIiIi
UHJpbnQgdGltaW5nIGluZm8gZm9yIGVhY2ggdGVzdC4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dy
aXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgICB0aXRs
ZTogc2VjdGlvbiBoZWFkaW5nCisgICAgICAgICAgdGVzdF9saXN0OiB0ZXN0cyB0aGF0IGZhbGwg
aW4gdGhpcyBzZWN0aW9uCisgICAgICAgICIiIgorICAgICAgICB3cml0ZSh0aXRsZSkKKyAgICAg
ICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgZmlsZW5hbWUgPSB0
ZXN0X3R1cGxlLmZpbGVuYW1lW2xlbigKKyAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLkxheW91
dFRlc3RzRGlyKCkpICsgMTpdCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxh
Y2UoJ1xcJywgJy8nKQorICAgICAgICAgICAgdGVzdF9ydW5fdGltZSA9IHJvdW5kKHRlc3RfdHVw
bGUudGVzdF9ydW5fdGltZSwgMSkKKyAgICAgICAgICAgIHdyaXRlKCIgICVzIHRvb2sgJXMgc2Vj
b25kcyIgJSAoZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQorCisgICAgZGVmIF9QcmludERpcmVj
dG9yeVRpbWluZ3Moc2VsZiwgd3JpdGUsIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpOgorICAgICAg
ICAiIiJQcmludCB0aW1pbmcgaW5mbyBieSBkaXJlY3RvcnkgZm9yIGFueSBkaXJlY3RvcmllcyB0
aGF0CisgICAgICAgIHRha2UgPiAxMCBzZWNvbmRzIHRvIHJ1bi4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9n
Z2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAg
ICBkaXJlY3RvcnlfdGVzdF90aW1pbmc6IHRpbWUgaW5mbyBmb3IgZWFjaCBkaXJlY3RvcnkKKyAg
ICAgICAgIiIiCisgICAgICAgIHRpbWluZ3MgPSBbXQorICAgICAgICBmb3IgZGlyZWN0b3J5IGlu
IGRpcmVjdG9yeV90ZXN0X3RpbWluZ3M6CisgICAgICAgICAgICBudW1fdGVzdHMsIHRpbWVfZm9y
X2RpcmVjdG9yeSA9IGRpcmVjdG9yeV90ZXN0X3RpbWluZ3NbZGlyZWN0b3J5XQorICAgICAgICAg
ICAgdGltaW5ncy5hcHBlbmQoKHJvdW5kKHRpbWVfZm9yX2RpcmVjdG9yeSwgMSksIGRpcmVjdG9y
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fdGVzdHMpKQorICAgICAgICB0aW1p
bmdzLnNvcnQoKQorCisgICAgICAgIHdyaXRlKCJUaW1lIHRvIHByb2Nlc3Mgc2xvd2VzdCBzdWJk
aXJlY3RvcmllczoiKQorICAgICAgICBtaW5fc2Vjb25kc190b19wcmludCA9IDEwCisgICAgICAg
IGZvciB0aW1pbmcgaW4gdGltaW5nczoKKyAgICAgICAgICAgIGlmIHRpbWluZ1swXSA+IG1pbl9z
ZWNvbmRzX3RvX3ByaW50OgorICAgICAgICAgICAgICAgIHdyaXRlKCIgICVzIHRvb2sgJXMgc2Vj
b25kcyB0byBydW4gJXMgdGVzdHMuIiAlICh0aW1pbmdbMV0sCisgICAgICAgICAgICAgICAgICAg
ICAgdGltaW5nWzBdLCB0aW1pbmdbMl0pKQorICAgICAgICB3cml0ZSgiIikKKworICAgIGRlZiBf
UHJpbnRTdGF0aXN0aWNzRm9yVGVzdFRpbWluZ3Moc2VsZiwgd3JpdGUsIHRpdGxlLCB0aW1pbmdz
KToKKyAgICAgICAgIiIiUHJpbnRzIHRoZSBtZWRpYW4sIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlh
dGlvbiBvZiB0aGUgdmFsdWVzIGluCisgICAgICAgIHRpbWluZ3MuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExv
Z2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAg
ICAgdGl0bGU6IFRpdGxlIGZvciB0aGVzZSB0aW1pbmdzLgorICAgICAgICAgIHRpbWluZ3M6IEEg
bGlzdCBvZiBmbG9hdHMgcmVwcmVzZW50aW5nIHRpbWVzLgorICAgICAgICAiIiIKKyAgICAgICAg
d3JpdGUodGl0bGUpCisgICAgICAgIHRpbWluZ3Muc29ydCgpCisKKyAgICAgICAgbnVtX3Rlc3Rz
ID0gbGVuKHRpbWluZ3MpCisgICAgICAgIHBlcmNlbnRpbGU5MCA9IHRpbWluZ3NbaW50KC45ICog
bnVtX3Rlc3RzKV0KKyAgICAgICAgcGVyY2VudGlsZTk5ID0gdGltaW5nc1tpbnQoLjk5ICogbnVt
X3Rlc3RzKV0KKworICAgICAgICBpZiBudW1fdGVzdHMgJSAyID09IDE6CisgICAgICAgICAgICBt
ZWRpYW4gPSB0aW1pbmdzWygobnVtX3Rlc3RzIC0gMSkgLyAyKSAtIDFdCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBsb3dlciA9IHRpbWluZ3NbbnVtX3Rlc3RzIC8gMiAtIDFdCisgICAgICAg
ICAgICB1cHBlciA9IHRpbWluZ3NbbnVtX3Rlc3RzIC8gMl0KKyAgICAgICAgICAgIG1lZGlhbiA9
IChmbG9hdChsb3dlciArIHVwcGVyKSkgLyAyCisKKyAgICAgICAgbWVhbiA9IHN1bSh0aW1pbmdz
KSAvIG51bV90ZXN0cworCisgICAgICAgIGZvciB0aW1lIGluIHRpbWluZ3M6CisgICAgICAgICAg
ICBzdW1fb2ZfZGV2aWF0aW9ucyA9IG1hdGgucG93KHRpbWUgLSBtZWFuLCAyKQorCisgICAgICAg
IHN0ZF9kZXZpYXRpb24gPSBtYXRoLnNxcnQoc3VtX29mX2RldmlhdGlvbnMgLyBudW1fdGVzdHMp
CisgICAgICAgIHdyaXRlKCIgIE1lZGlhbjogICAgICAgICAgJTYuM2YiICUgbWVkaWFuKQorICAg
ICAgICB3cml0ZSgiICBNZWFuOiAgICAgICAgICAgICU2LjNmIiAlIG1lYW4pCisgICAgICAgIHdy
aXRlKCIgIDkwdGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTkwKQorICAgICAgICB3
cml0ZSgiICA5OXRoIHBlcmNlbnRpbGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5OSkKKyAgICAgICAg
d3JpdGUoIiAgU3RhbmRhcmQgZGV2OiAgICAlNi4zZiIgJSBzdGRfZGV2aWF0aW9uKQorICAgICAg
ICB3cml0ZSgiIikKKworICAgIGRlZiBfUHJpbnRSZXN1bHRTdW1tYXJ5KHNlbGYsIHdyaXRlLCBy
ZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlByaW50IGEgc2hvcnQgc3VtbWFyeSBhYm91dCBo
b3cgbWFueSB0ZXN0cyBwYXNzZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTog
QSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisg
ICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6
IGluZm9ybWF0aW9uIHRvIGxvZworICAgICAgICAiIiIKKyAgICAgICAgZmFpbGVkID0gbGVuKHJl
c3VsdF9zdW1tYXJ5LmZhaWx1cmVzKQorICAgICAgICBza2lwcGVkID0gbGVuKAorICAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25bdGVzdF9leHBlY3RhdGlvbnMu
U0tJUF0pCisgICAgICAgIHRvdGFsID0gcmVzdWx0X3N1bW1hcnkudG90YWwKKyAgICAgICAgcGFz
c2VkID0gdG90YWwgLSBmYWlsZWQgLSBza2lwcGVkCisgICAgICAgIHBjdF9wYXNzZWQgPSAwLjAK
KyAgICAgICAgaWYgdG90YWwgPiAwOgorICAgICAgICAgICAgcGN0X3Bhc3NlZCA9IGZsb2F0KHBh
c3NlZCkgKiAxMDAgLyB0b3RhbAorCisgICAgICAgIHdyaXRlKCIiKQorICAgICAgICB3cml0ZSgi
PT4gUmVzdWx0czogJWQvJWQgdGVzdHMgcGFzc2VkICglLjFmJSUpIiAlCisgICAgICAgICAgICAg
ICAgICAgICAocGFzc2VkLCB0b3RhbCwgcGN0X3Bhc3NlZCkpCisgICAgICAgIHdyaXRlKCIiKQor
ICAgICAgICBzZWxmLl9QcmludFJlc3VsdFN1bW1hcnlFbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1h
cnksCisgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5OT1csICJUZXN0cyB0byBiZSBmaXhl
ZCBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZSIpCisKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAg
IHNlbGYuX1ByaW50UmVzdWx0U3VtbWFyeUVudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAg
ICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkRFRkVSLAorICAgICAgICAgICAgIlRlc3RzIHdl
J2xsIGZpeCBpbiB0aGUgZnV0dXJlIGlmIHRoZXkgZmFpbCAoREVGRVIpIikKKworICAgICAgICB3
cml0ZSgiIikKKyAgICAgICAgc2VsZi5fUHJpbnRSZXN1bHRTdW1tYXJ5RW50cnkod3JpdGUsIHJl
c3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuV09OVEZJWCwKKyAg
ICAgICAgICAgICJUZXN0cyB0aGF0IHdpbGwgb25seSBiZSBmaXhlZCBpZiB0aGV5IGNyYXNoIChX
T05URklYKSIpCisKKyAgICBkZWYgX1ByaW50UmVzdWx0U3VtbWFyeUVudHJ5KHNlbGYsIHdyaXRl
LCByZXN1bHRfc3VtbWFyeSwgdGltZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWFkaW5nKToKKyAgICAgICAgIiIiUHJpbnQgYSBzdW1tYXJ5IGJsb2NrIG9mIHJlc3Vs
dHMgZm9yIGEgcGFydGljdWxhciB0aW1lbGluZSBvZiB0ZXN0LgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dn
aW5nV3JpdGVyKSBvcgorICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgorICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IHRvIHByaW50IHJlc3VsdHMgZm9yCisgICAgICAgICAg
dGltZWxpbmU6IHRoZSB0aW1lbGluZSB0byBwcmludCByZXN1bHRzIGZvciAoTk9ULCBXT05URklY
LCBldGMuKQorICAgICAgICAgIGhlYWRpbmc6IGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUg
dGltZWxpbmUKKyAgICAgICAgIiIiCisgICAgICAgIHRvdGFsID0gbGVuKHJlc3VsdF9zdW1tYXJ5
LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXSkKKyAgICAgICAgbm90X3Bhc3NpbmcgPSAodG90
YWwgLQorICAgICAgICAgICBsZW4ocmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25b
dGVzdF9leHBlY3RhdGlvbnMuUEFTU10gJgorICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnku
dGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKSkKKyAgICAgICAgd3JpdGUoIj0+ICVzICglZCk6
IiAlIChoZWFkaW5nLCBub3RfcGFzc2luZykpCisKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9PUkRFUjoKKyAgICAgICAgICAgIGlmIHJlc3Vs
dCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg
ICAgICAgICAgICByZXN1bHRzID0gKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9u
W3Jlc3VsdF0gJgorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50ZXN0c19i
eV90aW1lbGluZVt0aW1lbGluZV0pCisgICAgICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9u
c0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF0KKyAgICAgICAgICAgIGlmIG5v
dF9wYXNzaW5nIGFuZCBsZW4ocmVzdWx0cyk6CisgICAgICAgICAgICAgICAgcGN0ID0gbGVuKHJl
c3VsdHMpICogMTAwLjAgLyBub3RfcGFzc2luZworICAgICAgICAgICAgICAgIHdyaXRlKCIgICU1
ZCAlLTI0cyAoJTQuMWYlJSkiICUgKGxlbihyZXN1bHRzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICBkZXNjW2xlbihyZXN1bHRzKSAhPSAxXSwgcGN0KSkKKworICAgIGRlZiBfUHJpbnRPbmVMaW5l
U3VtbWFyeShzZWxmLCB0b3RhbCwgZXhwZWN0ZWQpOgorICAgICAgICAiIiJQcmludCBhIG9uZS1s
aW5lIHN1bW1hcnkgb2YgdGhlIHRlc3QgcnVuIHRvIHN0ZG91dC4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgIHRvdGFsOiB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuCisgICAgICAgICAgZXhw
ZWN0ZWQ6IG51bWJlciBvZiBleHBlY3RlZCByZXN1bHRzCisgICAgICAgICIiIgorICAgICAgICB1
bmV4cGVjdGVkID0gdG90YWwgLSBleHBlY3RlZAorICAgICAgICBpZiB1bmV4cGVjdGVkID09IDA6
CisgICAgICAgICAgICBwcmludCAiQWxsICVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZC4iICUgZXhw
ZWN0ZWQKKyAgICAgICAgZWxpZiBleHBlY3RlZCA9PSAxOgorICAgICAgICAgICAgcHJpbnQgIjEg
dGVzdCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoiICUgdW5leHBlY3RlZAorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcHJpbnQgIiVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlk
bid0OiIgJSAoZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgdW5leHBlY3RlZCkKKworICAgIGRl
ZiBfUHJpbnRVbmV4cGVjdGVkUmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMpOgorICAg
ICAgICAiIiJQcmludHMgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBpbiBhIGh1bWFuLXJlYWRhYmxl
IGZvcm0gdG8gc3Rkb3V0LiIiIgorICAgICAgICBwYXNzZXMgPSB7fQorICAgICAgICBmbGFreSA9
IHt9CisgICAgICAgIHJlZ3Jlc3Npb25zID0ge30KKworICAgICAgICBpZiBsZW4odW5leHBlY3Rl
ZF9yZXN1bHRzWyd0ZXN0cyddKToKKyAgICAgICAgICAgIHByaW50ICIiCisKKyAgICAgICAgZm9y
IHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddLml0ZXJpdGVtcygp
OgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3BsaXQoIiAiKQorICAg
ICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0KCIgIikKKyAgICAg
ICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKKyAgICAgICAgICAgICAgICBpZiAnQ1JBU0gn
IGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfQWRkVG9EaWN0T2ZMaXN0cyhwYXNz
ZXMsICdFeHBlY3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxpZiAnVElNRU9VVCcg
aW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9BZGRUb0RpY3RPZkxpc3RzKHBhc3Nl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIHRp
bWVvdXQsIGJ1dCBwYXNzZWQnLCB0ZXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIF9BZGRUb0RpY3RPZkxpc3RzKHBhc3NlcywgJ0V4cGVjdGVkIHRvIGZhaWws
IGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
KQorICAgICAgICAgICAgZWxpZiBsZW4oYWN0dWFsKSA+IDE6CisgICAgICAgICAgICAgICAgIyBX
ZSBncm91cCBmbGFreSB0ZXN0cyBieSB0aGUgZmlyc3QgYWN0dWFsIHJlc3VsdCB3ZSBnb3QuCisg
ICAgICAgICAgICAgICAgX0FkZFRvRGljdE9mTGlzdHMoZmxha3ksIGFjdHVhbFswXSwgdGVzdCkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX0FkZFRvRGljdE9mTGlzdHMocmVn
cmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisgICAgICAgIGlmIGxlbihwYXNz
ZXMpOgorICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgICAgIHByaW50ICIlczogKCVkKSIgJSAoa2V5LCBsZW4odGVzdHMpKQorICAg
ICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRl
c3RzOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyIgJSB0ZXN0CisgICAgICAgICAg
ICAgICAgcHJpbnQKKworICAgICAgICBpZiBsZW4oZmxha3kpOgorICAgICAgICAgICAgZGVzY3Jp
cHRpb25zID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCisg
ICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxv
d2VyKCldCisgICAgICAgICAgICAgICAgcHJpbnQgIlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAo
JWQpIiAlICgKKyAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4o
dGVzdHMpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorCisgICAgICAgICAgICAgICAg
Zm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVuZXhwZWN0
ZWRfcmVzdWx0c1sndGVzdHMnXVt0ZXN0XQorICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBy
ZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQg
PSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCisgICAg
ICAgICAgICAgICAgICAgIG5ld19leHBlY3RhdGlvbnNfbGlzdCA9IGxpc3Qoc2V0KGFjdHVhbCkg
fCBzZXQoZXhwZWN0ZWQpKQorICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyA9ICVzIiAl
ICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25zX2xpc3QpKQorICAgICAgICAgICAgICAg
IHByaW50CisKKyAgICAgICAgaWYgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIGRlc2Ny
aXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUwor
ICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05T
W2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgIHByaW50ICJSZWdyZXNzaW9uczogVW5leHBl
Y3RlZCAlcyA6ICglZCkiICUgKAorICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3Vs
dF1bMV0sIGxlbih0ZXN0cykpCisgICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCisgICAgICAg
ICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIg
ICVzID0gJXMiICUgKHRlc3QsIGtleSkKKyAgICAgICAgICAgICAgICBwcmludAorCisgICAgICAg
IGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxmLl9vcHRpb25zLnZl
cmJvc2U6CisgICAgICAgICAgICBwcmludCAiLSIgKiA3OAorCisgICAgZGVmIF9QcmludFVuZXhw
ZWN0ZWRUZXN0UmVzdWx0KHNlbGYsIHRlc3QsIHJlc3VsdCk6CisgICAgICAgICIiIlByaW50cyBv
bmUgdW5leHBlY3RlZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgorICAgICAgICBkZXNjID0gVGVzdEV4
cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF1bMF0KKyAgICAg
ICAgc2VsZi5fbWV0ZXIud3JpdGUoIiAgJXMgLT4gdW5leHBlY3RlZCAlc1xuIiAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIChwYXRoX3V0aWxzLlJlbGF0aXZlVGVzdEZpbGVuYW1lKHRlc3Qp
LCBkZXNjKSkKKworICAgIGRlZiBfV3JpdGVSZXN1bHRzSHRtbEZpbGUoc2VsZiwgcmVzdWx0X3N1
bW1hcnkpOgorICAgICAgICAiIiJXcml0ZSByZXN1bHRzLmh0bWwgd2hpY2ggaXMgYSBzdW1tYXJ5
IG9mIHRlc3RzIHRoYXQgZmFpbGVkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0
X3N1bW1hcnk6IGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cyA6KQorCisgICAgICAgIFJldHVybnM6
CisgICAgICAgICAgVHJ1ZSBpZiBhbnkgcmVzdWx0cyB3ZXJlIHdyaXR0ZW4gKHNpbmNlIGV4cGVj
dGVkIGZhaWx1cmVzIG1heSBiZQorICAgICAgICAgIG9taXR0ZWQpCisgICAgICAgICIiIgorICAg
ICAgICAjIHRlc3QgZmFpbHVyZXMKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5mdWxsX3Jlc3Vs
dHNfaHRtbDoKKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSByZXN1bHRfc3VtbWFyeS5mYWlsdXJl
cy5rZXlzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVuZXhwZWN0ZWRfZmFpbHVyZXMg
PSBzZWxmLl9HZXRGYWlsdXJlcyhyZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICBpbmNs
dWRlX2NyYXNoZXM9VHJ1ZSkKKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSB1bmV4cGVjdGVkX2Zh
aWx1cmVzLmtleXMoKQorICAgICAgICBpZiBub3QgbGVuKHRlc3RfZmlsZXMpOgorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgb3V0X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAicmVzdWx0cy5odG1sIikKKyAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKG91dF9m
aWxlbmFtZSwgJ3cnKQorICAgICAgICAjIGhlYWRlcgorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LmZ1bGxfcmVzdWx0c19odG1sOgorICAgICAgICAgICAgaDIgPSAiVGVzdCBGYWlsdXJlcyIKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGgyID0gIlVuZXhwZWN0ZWQgVGVzdCBGYWlsdXJlcyIK
KyAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjxodG1sPjxoZWFkPjx0aXRsZT5MYXlvdXQgVGVzdCBS
ZXN1bHRzICglKHRpbWUpcykiCisgICAgICAgICAgICAgICAgICAgICAgICI8L3RpdGxlPjwvaGVh
ZD48Ym9keT48aDI+JShoMilzICglKHRpbWUpcyk8L2gyPlxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAlIHsnaDInOiBoMiwgJ3RpbWUnOiB0aW1lLmFzY3RpbWUoKX0pCisKKyAgICAgICAgdGVz
dF9maWxlcy5zb3J0KCkKKyAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiB0ZXN0X2ZpbGVzOgorICAg
ICAgICAgICAgdGVzdF9mYWlsdXJlcyA9IHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzLmdldCh0ZXN0
X2ZpbGUsIFtdKQorICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjxwPjxhIGhyZWY9JyVzJz4l
czwvYT48YnIgLz5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGhfdXRpbHMu
RmlsZW5hbWVUb1VyaSh0ZXN0X2ZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGF0aF91dGlscy5SZWxhdGl2ZVRlc3RGaWxlbmFtZSh0ZXN0X2ZpbGUpKSkKKyAgICAgICAgICAg
IGZvciBmYWlsdXJlIGluIHRlc3RfZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgb3V0X2ZpbGUu
d3JpdGUoIiZuYnNwOyZuYnNwOyVzPGJyLz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJSBmYWlsdXJlLlJlc3VsdEh0bWxPdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoX3V0aWxzLlJlbGF0aXZlVGVzdEZpbGVuYW1lKHRlc3RfZmlsZSkpKQorICAg
ICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjwvcD5cbiIpCisKKyAgICAgICAgIyBmb290ZXIKKyAg
ICAgICAgb3V0X2ZpbGUud3JpdGUoIjwvYm9keT48L2h0bWw+XG4iKQorICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgZGVmIF9TaG93UmVzdWx0c0h0bWxGaWxlKHNlbGYpOgorICAgICAgICAiIiJM
YXVuY2hlcyB0aGUgdGVzdCBzaGVsbCBvcGVuIHRvIHRoZSByZXN1bHRzLmh0bWwgcGFnZS4iIiIK
KyAgICAgICAgcmVzdWx0c19maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyZXN1bHRzLmh0bWwiKQorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtwYXRoX3V0aWxzLlRl
c3RTaGVsbFBhdGgoc2VsZi5fb3B0aW9ucy50YXJnZXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRoX3V0aWxzLkZpbGVuYW1lVG9VcmkocmVzdWx0c19maWxlbmFtZSldKQorCisKK2Rl
ZiBfQWRkVG9EaWN0T2ZMaXN0cyhkaWN0LCBrZXksIHZhbHVlKToKKyAgICBkaWN0LnNldGRlZmF1
bHQoa2V5LCBbXSkuYXBwZW5kKHZhbHVlKQorCisKK2RlZiBSZWFkVGVzdEZpbGVzKGZpbGVzKToK
KyAgICB0ZXN0cyA9IFtdCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGZvciBsaW5l
IGluIG9wZW4oZmlsZSk6CisgICAgICAgICAgICBsaW5lID0gdGVzdF9leHBlY3RhdGlvbnMuU3Ry
aXBDb21tZW50cyhsaW5lKQorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICB0
ZXN0cy5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gdGVzdHMKKworCitkZWYgQ3JlYXRlTG9nZ2lu
Z1dyaXRlcihvcHRpb25zLCBsb2dfb3B0aW9uKToKKyAgICAiIiJSZXR1cm5zIGEgd3JpdGUoKSBm
dW5jdGlvbiB0aGF0IHdpbGwgd3JpdGUgdGhlIHN0cmluZyB0byBsb2dnaW5nLmluZm8oKQorICAg
IGlmIGNvbXAgd2FzIHNwZWNpZmllZCBpbiAtLWxvZyBvciBpZiAtLXZlcmJvc2UgaXMgdHJ1ZS4g
T3RoZXJ3aXNlIHRoZQorICAgIG1lc3NhZ2UgaXMgZHJvcHBlZC4KKworICAgIEFyZ3M6CisgICAg
ICBvcHRpb25zOiBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGZyb20gb3B0cGFyc2UKKyAg
ICAgIGxvZ19vcHRpb246IG9wdGlvbiB0byBtYXRjaCBpbiBvcHRpb25zLmxvZyBpbiBvcmRlciBm
b3IgdGhlIG1lc3NhZ2VzCisgICAgICAgICAgdG8gYmUgbG9nZ2VkIChlLmcuLCAnYWN0dWFsJyBv
ciAnZXhwZWN0ZWQnKQorICAgICIiIgorICAgIGlmIG9wdGlvbnMudmVyYm9zZSBvciBsb2dfb3B0
aW9uIGluIG9wdGlvbnMubG9nLnNwbGl0KCIsIik6CisgICAgICAgIHJldHVybiBsb2dnaW5nLmlu
Zm8KKyAgICByZXR1cm4gbGFtYmRhIHN0cjogMQorCisKK2RlZiBtYWluKG9wdGlvbnMsIGFyZ3Mp
OgorICAgICIiIlJ1biB0aGUgdGVzdHMuICBXaWxsIGNhbGwgc3lzLmV4aXQgd2hlbiBjb21wbGV0
ZS4KKworICAgIEFyZ3M6CisgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBs
aW5lIG9wdGlvbnMKKyAgICAgIGFyZ3M6IGEgbGlzdCBvZiBzdWIgZGlyZWN0b3JpZXMgb3IgZmls
ZXMgdG8gdGVzdAorICAgICIiIgorCisgICAgaWYgb3B0aW9ucy5zb3VyY2VzOgorICAgICAgICBv
cHRpb25zLnZlcmJvc2UgPSBUcnVlCisKKyAgICAjIFNldCB1cCBvdXIgbG9nZ2luZyBmb3JtYXQu
CisgICAgbWV0ZXIgPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3RyZWFtKG9wdGlvbnMudmVyYm9z
ZSwgc3lzLnN0ZGVycikKKyAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJworICAgIGxvZ19kYXRl
Zm10ID0gJyV5JW0lZCAlSDolTTolUycKKyAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAg
ICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUo
ZmlsZW5hbWUpczolKGxpbmVubyktNGQgJShsZXZlbG5hbWUpcyAnCisgICAgICAgICAgICAgICAg
ICAnJShtZXNzYWdlKXMnKQorICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAg
bG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm10LCBkYXRl
Zm10PWxvZ19kYXRlZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPW1ldGVyKQor
CisgICAgaWYgbm90IG9wdGlvbnMudGFyZ2V0OgorICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgor
ICAgICAgICAgICAgb3B0aW9ucy50YXJnZXQgPSAiRGVidWciCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBvcHRpb25zLnRhcmdldCA9ICJSZWxlYXNlIgorCisgICAgaWYgbm90IG9wdGlvbnMu
dXNlX2FwYWNoZToKKyAgICAgICAgb3B0aW9ucy51c2VfYXBhY2hlID0gc3lzLnBsYXRmb3JtIGlu
ICgnZGFyd2luJywgJ2xpbnV4MicpCisKKyAgICBpZiBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
LnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgIyBBc3N1bWUgaXQncyBhbiBhYnNvbHV0ZSBwYXRo
IGFuZCBub3JtYWxpemUuCisgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkgPSBwYXRo
X3V0aWxzLkdldEFic29sdXRlUGF0aCgKKyAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJl
Y3RvcnkpCisgICAgZWxzZToKKyAgICAgICAgIyBJZiBpdCdzIGEgcmVsYXRpdmUgcGF0aCwgbWFr
ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSByZWxhdGl2ZSB0bworICAgICAgICAjIERlYnVnIG9yIFJl
bGVhc2UuCisgICAgICAgIGJhc2VkaXIgPSBwYXRoX3V0aWxzLlBhdGhGcm9tQmFzZSgnd2Via2l0
JykKKyAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSA9IHBhdGhfdXRpbHMuR2V0QWJz
b2x1dGVQYXRoKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKGJhc2VkaXIsIG9wdGlvbnMudGFy
Z2V0LCBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKworICAgIGlmIG9wdGlvbnMuY2xvYmJl
cl9vbGRfcmVzdWx0czoKKyAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJl
c3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVyCisgICAgICAgICMgZmlsZXMgaW4gdGhl
IHJlc3VsdHMgZGlyZWN0b3J5IGFyZSBleHBsaWNpdGx5IHVzZWQgZm9yIGNyb3NzLXJ1bgorICAg
ICAgICAjIHRyYWNraW5nLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnksICdMYXlvdXRUZXN0cycpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3Rz
KHBhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorCisgICAgIyBFbnN1cmUg
cGxhdGZvcm0gaXMgdmFsaWQgYW5kIGZvcmNlIGl0IHRvIHRoZSBmb3JtICdjaHJvbWl1bS08cGxh
dGZvcm0+Jy4KKyAgICBvcHRpb25zLnBsYXRmb3JtID0gcGF0aF91dGlscy5QbGF0Zm9ybU5hbWUo
b3B0aW9ucy5wbGF0Zm9ybSkKKworICAgIGlmIG5vdCBvcHRpb25zLm51bV90ZXN0X3NoZWxsczoK
KyAgICAgICAgIyBUT0RPKG9qYW4pOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qg
b2YgdXNpbmcgbnVtY29yZXMgKyAxLgorICAgICAgICBvcHRpb25zLm51bV90ZXN0X3NoZWxscyA9
IHBsYXRmb3JtX3V0aWxzLkdldE51bUNvcmVzKCkKKworICAgIHdyaXRlID0gQ3JlYXRlTG9nZ2lu
Z1dyaXRlcihvcHRpb25zLCAnY29uZmlnJykKKyAgICB3cml0ZSgiUnVubmluZyAlcyB0ZXN0X3No
ZWxscyBpbiBwYXJhbGxlbCIgJSBvcHRpb25zLm51bV90ZXN0X3NoZWxscykKKworICAgIGlmIG5v
dCBvcHRpb25zLnRpbWVfb3V0X21zOgorICAgICAgICBpZiBvcHRpb25zLnRhcmdldCA9PSAiRGVi
dWciOgorICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cigyICogVGVzdFJ1bm5l
ci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9w
dGlvbnMudGltZV9vdXRfbXMgPSBzdHIoVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9N
UykKKworICAgIG9wdGlvbnMuc2xvd190aW1lX291dF9tcyA9IHN0cig1ICogaW50KG9wdGlvbnMu
dGltZV9vdXRfbXMpKQorICAgIHdyaXRlKCJSZWd1bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3Qg
dGltZW91dDogJXMiICUKKyAgICAgICAgICAob3B0aW9ucy50aW1lX291dF9tcywgb3B0aW9ucy5z
bG93X3RpbWVfb3V0X21zKSkKKworICAgICMgSW5jbHVkZSBhbGwgdGVzdHMgaWYgbm9uZSBhcmUg
c3BlY2lmaWVkLgorICAgIG5ld19hcmdzID0gW10KKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAg
ICAgIGlmIGFyZyBhbmQgYXJnICE9ICcnOgorICAgICAgICAgICAgbmV3X2FyZ3MuYXBwZW5kKGFy
ZykKKworICAgIHBhdGhzID0gbmV3X2FyZ3MKKyAgICBpZiBub3QgcGF0aHM6CisgICAgICAgIHBh
dGhzID0gW10KKyAgICBpZiBvcHRpb25zLnRlc3RfbGlzdDoKKyAgICAgICAgcGF0aHMgKz0gUmVh
ZFRlc3RGaWxlcyhvcHRpb25zLnRlc3RfbGlzdCkKKworICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQg
ZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KKyAgICBwYXRoX3V0aWxzLk1h
eWJlTWFrZURpcmVjdG9yeShvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgIG1ldGVyLnVw
ZGF0ZSgiR2F0aGVyaW5nIGZpbGVzIC4uLiIpCisKKyAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5u
ZXIob3B0aW9ucywgbWV0ZXIpCisgICAgdGVzdF9ydW5uZXIuR2F0aGVyRmlsZVBhdGhzKHBhdGhz
KQorCisgICAgaWYgb3B0aW9ucy5saW50X3Rlc3RfZmlsZXM6CisgICAgICAgICMgQ3JlYXRpbmcg
dGhlIGV4cGVjYXRpb25zIGZvciBlYWNoIHBsYXRmb3JtL3RhcmdldCBwYWlyIGRvZXMgYWxsIHRo
ZQorICAgICAgICAjIHRlc3QgbGlzdCBwYXJzaW5nIGFuZCBlbnN1cmVzIGl0J3MgY29ycmVjdCBz
eW50YXggKGUuZy4gbm8gZHVwZXMpLgorICAgICAgICBmb3IgcGxhdGZvcm0gaW4gVGVzdEV4cGVj
dGF0aW9uc0ZpbGUuUExBVEZPUk1TOgorICAgICAgICAgICAgdGVzdF9ydW5uZXIuUGFyc2VFeHBl
Y3RhdGlvbnMocGxhdGZvcm0sIGlzX2RlYnVnX21vZGU9VHJ1ZSkKKyAgICAgICAgICAgIHRlc3Rf
cnVubmVyLlBhcnNlRXhwZWN0YXRpb25zKHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlPUZhbHNlKQor
ICAgICAgICBwcmludCAoIklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3Ig
ZXhjZXB0aW9ucywgdGhlbiB0aGUgIgorICAgICAgICAgICAgImxpbnQgc3VjY2VlZGVkLiIpCisg
ICAgICAgIHN5cy5leGl0KDApCisKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5
X3BhdGggPSBwYXRoX3V0aWxzLlRlc3RTaGVsbFBhdGgob3B0aW9ucy50YXJnZXQpCisgICAgZXhj
ZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICBwcmludCAiXG5FUlJPUjogdGVz
dF9zaGVsbCBpcyBub3QgZm91bmQuIEJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBidWlsdCIKKyAgICAg
ICAgcHJpbnQgIml0IGFuZCB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgYnVpbGQuIFRo
aXMgc2NyaXB0IgorICAgICAgICBwcmludCAid2lsbCBydW4gdGhlIFJlbGVhc2Ugb25lIGJ5IGRl
ZmF1bHQuIFVzZSAtLWRlYnVnIHRvIHVzZSB0aGUiCisgICAgICAgIHByaW50ICJEZWJ1ZyBidWls
ZC5cbiIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHdyaXRlID0gQ3JlYXRlTG9nZ2luZ1dy
aXRlcihvcHRpb25zLCAiY29uZmlnIikKKyAgICB3cml0ZSgiVXNpbmcgcGxhdGZvcm0gJyVzJyIg
JSBvcHRpb25zLnBsYXRmb3JtKQorICAgIHdyaXRlKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAl
cyIgJSBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgIGlmIG9wdGlvbnMubmV3X2Jhc2Vs
aW5lOgorICAgICAgICB3cml0ZSgiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlCisgICAg
ICAgICAgICAgIHBhdGhfdXRpbHMuQ2hyb21pdW1CYXNlbGluZVBhdGgob3B0aW9ucy5wbGF0Zm9y
bSkpCisgICAgd3JpdGUoIlVzaW5nICVzIGJ1aWxkIGF0ICVzIiAlIChvcHRpb25zLnRhcmdldCwg
dGVzdF9zaGVsbF9iaW5hcnlfcGF0aCkpCisgICAgaWYgb3B0aW9ucy5ub19waXhlbF90ZXN0czoK
KyAgICAgICAgd3JpdGUoIk5vdCBydW5uaW5nIHBpeGVsIHRlc3RzIikKKyAgICB3cml0ZSgiIikK
KworICAgIG1ldGVyLnVwZGF0ZSgiUGFyc2luZyBleHBlY3RhdGlvbnMgLi4uIikKKyAgICB0ZXN0
X3J1bm5lci5QYXJzZUV4cGVjdGF0aW9ucyhvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zLnRhcmdl
dCA9PSAnRGVidWcnKQorCisgICAgbWV0ZXIudXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikK
KyAgICB3cml0ZSA9IENyZWF0ZUxvZ2dpbmdXcml0ZXIob3B0aW9ucywgImV4cGVjdGVkIikKKyAg
ICByZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLlByZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0
KHdyaXRlKQorCisgICAgaWYgJ2N5Z3dpbicgPT0gc3lzLnBsYXRmb3JtOgorICAgICAgICBsb2dn
aW5nLndhcm4oIiMiICogNDApCisgICAgICAgIGxvZ2dpbmcud2FybigiIyBVTkVYUEVDVEVEIFBZ
VEhPTiBWRVJTSU9OIikKKyAgICAgICAgbG9nZ2luZy53YXJuKCIjIFRoaXMgc2NyaXB0IHNob3Vs
ZCBiZSBydW4gdXNpbmcgdGhlIHZlcnNpb24gb2YgcHl0aG9uIikKKyAgICAgICAgbG9nZ2luZy53
YXJuKCIjIGluIHRoaXJkX3BhcnR5L3B5dGhvbl8yNC8iKQorICAgICAgICBsb2dnaW5nLndhcm4o
IiMiICogNDApCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAjIERlbGV0ZSB0aGUgZGlzayBj
YWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVzdCBydW4uCisgICAgY2FjaGVkaXIgPSBv
cy5wYXRoLnNwbGl0KHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGgpWzBdCisgICAgY2FjaGVkaXIgPSBv
cy5wYXRoLmpvaW4oY2FjaGVkaXIsICJjYWNoZSIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoY2Fj
aGVkaXIpOgorICAgICAgICBzaHV0aWwucm10cmVlKGNhY2hlZGlyKQorCisgICAgdGVzdF9ydW5u
ZXIuQWRkVGVzdFR5cGUodGV4dF9kaWZmLlRlc3RUZXh0RGlmZikKKyAgICBpZiBub3Qgb3B0aW9u
cy5ub19waXhlbF90ZXN0czoKKyAgICAgICAgdGVzdF9ydW5uZXIuQWRkVGVzdFR5cGUoaW1hZ2Vf
ZGlmZi5JbWFnZURpZmYpCisgICAgICAgIGlmIG9wdGlvbnMuZnV6enlfcGl4ZWxfdGVzdHM6Cisg
ICAgICAgICAgICB0ZXN0X3J1bm5lci5BZGRUZXN0VHlwZShmdXp6eV9pbWFnZV9kaWZmLkZ1enp5
SW1hZ2VEaWZmKQorCisgICAgbWV0ZXIudXBkYXRlKCJTdGFydGluZyAuLi4iKQorICAgIGhhc19u
ZXdfZmFpbHVyZXMgPSB0ZXN0X3J1bm5lci5SdW4ocmVzdWx0X3N1bW1hcnkpCisKKyAgICBsb2dn
aW5nLmRlYnVnKCJFeGl0IHN0YXR1czogJWQiICUgaGFzX25ld19mYWlsdXJlcykKKyAgICBzeXMu
ZXhpdChoYXNfbmV3X2ZhaWx1cmVzKQorCitkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgorICAg
ICIiIlByb3ZpZGVzIGEgZGVmYXVsdCBzZXQgb2YgY29tbWFuZCBsaW5lIGFyZ3MuCisKKyAgICBS
ZXR1cm5zIGEgdHVwbGUgb2Ygb3B0aW9ucywgYXJncyBmcm9tIG9wdHBhcnNlIiIiCisgICAgb3B0
aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCIiLCAiLS1uby1waXhlbC10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9ImRpc2FibGUgcGl4ZWwtdG8tcGl4ZWwgUE5HIGNvbXBhcmlz
b25zIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWZ1enp5LXBpeGVsLXRl
c3RzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQWxzbyB1
c2UgZnV6enkgbWF0Y2hpbmcgdG8gY29tcGFyZSBwaXhlbCAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRlc3Qgb3V0cHV0cy4iKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29w
dGlvbigiIiwgIi0tcmVzdWx0cy1kaXJlY3RvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PSJsYXlvdXQtdGVzdC1yZXN1bHRzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0iT3V0cHV0IHJlc3VsdHMgZGlyZWN0b3J5IHNvdXJjZSBkaXIsIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVsYXRpdmUgdG8gRGVidWcgb3IgUmVs
ZWFzZSIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1uZXctYmFzZWxpbmUi
LCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzYXZlIGFsbCBn
ZW5lcmF0ZWQgcmVzdWx0cyBhcyBuZXcgYmFzZWxpbmVzIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgaW50byB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5LCBvdmVyd3JpdGluZyAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoYXRldmVyJ3MgYWxyZWFkeSB0
aGVyZS4iKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbm9zaG93LXJlc3Vs
dHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PUZhbHNlLCBoZWxwPSJkb24ndCBsYXVuY2ggdGhlIHRlc3Rfc2hlbGwiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgd2l0aCByZXN1bHRzIGFmdGVyIHRoZSB0ZXN0cyBhcmUg
ZG9uZSIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1mdWxsLXJlc3VsdHMt
aHRtbCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9RmFsc2UsIGhlbHA9InNob3cgYWxsIGZhaWx1cmVzIGluICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMuaHRtbCwgcmF0aGVyIHRoYW4gb25seSByZWdyZXNz
aW9ucyIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1jbG9iYmVyLW9sZC1y
ZXN1bHRzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iQ2xvYmJlcnMgdGVzdCByZXN1bHRzIGZyb20gIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicHJldmlvdXMgcnVucy4iKQorICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbGludC10ZXN0LWZpbGVzIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0i
TWFrZXMgc3VyZSB0aGUgdGVzdCBmaWxlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJwYXJzZSBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLiBEb2VzIG5vdCBydW4gYW55ICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzLiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCIiLCAiLS1mb3JjZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9IlJ1biBhbGwgdGVzdHMsIGV2ZW4gdGhvc2UgbWFya2VkIFNLSVAgIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiB0aGUgdGVzdCBsaXN0IikKKyAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW51bS10ZXN0LXNoZWxscyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiB0ZXN0c2hlbGxzIHRvIHJ1biBpbiBw
YXJhbGxlbC4iKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdXNlLWFwYWNo
ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IldoZXRoZXIg
dG8gdXNlIGFwYWNoZSBpbnN0ZWFkIG9mIGxpZ2h0dHBkLiIpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCIiLCAiLS10aW1lLW91dC1tcyIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iU2V0IHRoZSB0aW1lb3V0IGZvciBlYWNoIHRlc3QiKQor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcnVuLXNpbmdseSIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biBhIHNlcGFyYXRlIHRlc3Rf
c2hlbGwgZm9yIGVhY2ggdGVzdCIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAi
LS1kZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9InVzZSB0aGUgZGVidWcgYmluYXJ5IGluc3RlYWQgb2Yg
dGhlIHJlbGVhc2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBiaW5hcnki
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbnVtLXNsb3ctdGVzdHMtdG8t
bG9nIiwgZGVmYXVsdD01MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iTnVt
YmVyIG9mIHNsb3cgdGVzdHMgd2hvc2UgdGltaW5ncyAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRvIHByaW50LiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIi
LCAiLS1wbGF0Zm9ybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik92ZXJy
aWRlIHRoZSBwbGF0Zm9ybSBmb3IgZXhwZWN0ZWQgcmVzdWx0cyIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCIiLCAiLS10YXJnZXQiLCBkZWZhdWx0PSIiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJTZXQgdGhlIGJ1aWxkIHRhcmdldCBjb25maWd1cmF0aW9uICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG92ZXJyaWRlcyAtLWRlYnVnKSIp
CisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1sb2ciLCBhY3Rpb249InN0b3Jl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZGV0YWlsZWQtcHJvZ3Jl
c3MsdW5leHBlY3RlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImxvZyB2
YXJpb3VzIHR5cGVzIG9mIGRhdGEuIFRoZSBwYXJhbSBzaG91bGQiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgYmUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgZnJvbTog
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWN0dWFsLGNvbmZpZywiICsgTE9HX0RF
VEFJTEVEX1BST0dSRVNTICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIixleHBlY3Rl
ZCx0aW1pbmcsIiArIExPR19VTkVYUEVDVEVEICsgIiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIoZGVmYXVsdHMgdG8gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIt
LWxvZyBkZXRhaWxlZC1wcm9ncmVzcyx1bmV4cGVjdGVkKSIpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJpbmNsdWRlIGRlYnVn
LWxldmVsIGxvZ2dpbmciKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tc291
cmNlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9InNob3cgZXhwZWN0ZWQgcmVzdWx0IGZpbGUgcGF0aCBmb3IgZWFjaCAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgKGltcGxpZXMgLS12ZXJib3NlKSIpCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1zdGFydHVwLWRpYWxvZyIsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFs
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImNyZWF0ZSBhIGRpYWxvZyBv
biB0ZXN0X3NoZWxsLmV4ZSBzdGFydHVwIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24o
IiIsICItLWdwLWZhdWx0LWVycm9yLWJveCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9ImVuYWJsZSBXaW5kb3dzIEdQIGZhdWx0IGVycm9yIGJveCIpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS13cmFwcGVyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0id3JhcHBlciBjb21tYW5kIHRvIGluc2VydCBiZWZvcmUgIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZvY2F0aW9ucyBvZiB0ZXN0X3No
ZWxsOyBvcHRpb24gaXMgc3BsaXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJvbiB3aGl0ZXNwYWNlIGJlZm9yZSBydW5uaW5nLiAoRXhhbXBsZTogIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICItLXdyYXBwZXI9J3ZhbGdyaW5kIC0tc21jLWNoZWNrPWFs
bCcpIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXRlc3QtbGlzdCIsIGFj
dGlvbj0iYXBwZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0icmVhZCBs
aXN0IG9mIHRlc3RzIHRvIHJ1biBmcm9tIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXRhdmFyPSJGSUxFIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICIt
LW5vY2hlY2stc3lzLWRlcHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSJEb24ndCBjaGVjayB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIih0aGVtZXMpIikKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oIiIsICItLXJhbmRvbWl6ZS1vcmRlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9KCJSdW4gdGVzdHMgaW4gcmFuZG9tIG9yZGVyICh1c2VmdWwg
Zm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyYWNraW5nIGRvd24g
Y29ycnVwdGlvbikiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJ1bi1j
aHVuayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIlJ1biBhIHNwZWNpZmllZCBjaHVuayAobjps
KSwgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm50aCBvZiBsZW4g
bCwgb2YgdGhlIGxheW91dCB0ZXN0cyIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigi
IiwgIi0tcnVuLXBhcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5v
bmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJSdW4gYSBzcGVjaWZpZWQg
cGFydCAobjptKSwgdGhlIG50aCBvZiBtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIHBhcnRzLCBvZiB0aGUgbGF5b3V0IHRlc3RzIikpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCIiLCAiLS1iYXRjaC1zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiUnVu
IGEgdGhlIHRlc3RzIGluIGJhdGNoZXMgKG4pLCBhZnRlciAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJldmVyeSBuIHRlc3RzLCB0aGUgdGVzdCBzaGVsbCBpcyAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdW5jaGVkLiIpKQorICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tYnVpbGRlci1uYW1lIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD0iRFVNTVlfQlVJTERFUl9OQU1FIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0oIlRoZSBuYW1lIG9mIHRoZSBidWlsZGVyIHNob3duIG9u
IHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXRlcmZhbGwgcnVu
bmluZyB0aGlzIHNjcmlwdCBlLmcuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIldlYktpdC4iKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWJ1aWxk
LW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJEVU1NWV9CVUlM
RF9OQU1FIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIlRoZSBuYW1lIG9m
IHRoZSBidWlsZGVyIHVzZWQgaW4gaXRzIHBhdGgsICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImUuZy4gd2Via2l0LXJlbC4iKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oIiIsICItLWJ1aWxkLW51bWJlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9IkRVTU1ZX0JVSUxEX05VTUJFUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9KCJUaGUgYnVpbGQgbnVtYmVyIG9mIHRoZSBidWlsZGVyIHJ1bm5pbmciCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIHNjcmlwdC4iKSkKKyAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1
bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biBhbGwgdGVz
dHMgaW4gcGFyYWxsZWwiKQorCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhh
cmdzKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBw
YXJzZV9hcmdzKCkKKyAgICBtYWluKG9wdGlvbnMsIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X291dHB1dF9mb3JtYXR0ZXIu
YmF0IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRw
dXRfZm9ybWF0dGVyLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMmU2
NmIwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdGVzdF9vdXRwdXRfZm9ybWF0dGVyLmJhdApAQCAtMCwwICsxIEBACitAJX5kcDBc
Li5cLi5cLi5cdGhpcmRfcGFydHlccHl0aG9uXzI0XHB5dGhvbi5leGUgJX5kcDBcd2Via2l0cHlc
bGF5b3V0X3Rlc3RzXHRlc3Rfb3V0cHV0X2Zvcm1hdHRlci5weSAtdiAlKgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRwdXRfZm9y
bWF0dGVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVz
dF9vdXRwdXRfZm9ybWF0dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAu
LmY2MGRhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X291dHB1dF9mb3JtYXR0ZXIucHkKQEAgLTAsMCArMSwxMDUgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisiIiIKK1RoaXMgaXMgYSBzY3JpcHQgZm9yIGdl
bmVyYXRpbmcgZWFzaWx5LXZpZXdhYmxlIGNvbXBhcmlzb25zIG9mIHRleHQgYW5kIHBpeGVsCitk
aWZmcy4KKyIiIgoraW1wb3J0IG9wdHBhcnNlCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBmYWlsdXJlCitm
cm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBmYWlsdXJlX2ZpbmRlcgorZnJvbSBsYXlvdXRfcGFj
a2FnZSBpbXBvcnQgZmFpbHVyZV9maW5kZXJfdGVzdAorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgaHRtbF9nZW5lcmF0b3IKKworREVGQVVMVF9CVUlMREVSID0gIldlYmtpdCIKKworCitkZWYg
bWFpbihvcHRpb25zLCBhcmdzKToKKworICAgIGlmIG9wdGlvbnMucnVuX3Rlc3RzOgorICAgICAg
ICBmZnQgPSBmYWlsdXJlX2ZpbmRlcl90ZXN0LkZhaWx1cmVGaW5kZXJUZXN0KCkKKyAgICAgICAg
cmV0dXJuIGZmdC5ydW5UZXN0cygpCisKKyAgICAjIFRPRE8oZ3dpbHNvbik6IEFkZCBhIGNoZWNr
IHRoYXQgdmVyaWZpZXMgdGhlIGdpdmVuIHBsYXRmb3JtIGV4aXN0cy4KKworICAgIGZpbmRlciA9
IGZhaWx1cmVfZmluZGVyLkZhaWx1cmVGaW5kZXIob3B0aW9ucy5idWlsZF9udW1iZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBsYXRmb3JtX2J1
aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm90IG9w
dGlvbnMuaW5jbHVkZV9leHBlY3RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLnRlc3RfcmVnZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zLm91dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQob3B0aW9ucy5tYXhfZmFpbHVyZXMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy52ZXJib3NlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5idWlsZGVyX2xv
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYXJj
aGl2ZV9sb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLnppcF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9ucy5leHBlY3RhdGlvbnNfZmlsZSkKKyAgICBmaW5kZXIudXNlX2xvY2FsX2Jhc2VsaW5l
cyA9IG9wdGlvbnMubG9jYWwKKyAgICBmYWlsdXJlX2xpc3QgPSBmaW5kZXIuR2V0RmFpbHVyZXMo
KQorCisgICAgaWYgbm90IGZhaWx1cmVfbGlzdDoKKyAgICAgICAgcHJpbnQgIkRpZCBub3QgZmlu
ZCBhbnkgZmFpbHVyZXMuIgorICAgICAgICByZXR1cm4KKworICAgIGdlbmVyYXRvciA9IGh0bWxf
Z2VuZXJhdG9yLkhUTUxHZW5lcmF0b3IoZmFpbHVyZV9saXN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vdXRwdXRfZGlyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZGVyLmJ1aWxkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wbGF0Zm9ybV9i
dWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5v
dCBvcHRpb25zLmluY2x1ZGVfZXhwZWN0ZWQpKQorICAgIGZpbGVuYW1lID0gZ2VuZXJhdG9yLkdl
bmVyYXRlSFRNTCgpCisKKyAgICBpZiBmaWxlbmFtZSBhbmQgb3B0aW9ucy52ZXJib3NlOgorICAg
ICAgICBwcmludCAiRmlsZSBjcmVhdGVkIGF0ICVzIiAlIGZpbGVuYW1lCisKK2lmIF9fbmFtZV9f
ID09ICJfX21haW5fXyI6CisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNl
cigpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rp
b249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXNwbGF5IGxvdHMgb2Yg
b3V0cHV0LiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWluY2x1ZGUt
ZXhwZWN0ZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJJ
bmNsdWRlIGV4cGVjdGVkIGZhaWx1cmVzIGluIG91dHB1dCIpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCItcCIsICItLXBsYXRmb3JtLWJ1aWxkZXIiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PURFRkFVTFRfQlVJTERFUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0iVXNlIHRoZSBnaXZlbiBidWlsZGVyIikKKyAgICBvcHRpb25fcGFyc2Vy
LmFkZF9vcHRpb24oIi1iIiwgIi0tYnVpbGQtbnVtYmVyIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJVc2UgdGhlIGdpdmVuIGJ1aWxkIG51bWJlciIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0
aW9uKCItdCIsICItLXRlc3QtcmVnZXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlVzZSB0aGUg
Z2l2ZW4gcmVnZXggdG8gZmlsdGVyIHRlc3RzIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRp
b24oIi1vIiwgIi0tb3V0cHV0LWRpciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9Ii4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJPdXRwdXQgZmls
ZXMgdG8gZ2l2ZW4gZGlyZWN0b3J5IikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1t
IiwgIi0tbWF4LWZhaWx1cmVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dD0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkxpbWl0IHRoZSBtYXhp
bXVtIG51bWJlciBvZiBmYWlsdXJlcyIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIt
ciIsICItLXJ1bi10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9IlJ1bnMgdW5pdCB0ZXN0cyIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIt
dSIsICItLWJ1aWxkZXItbG9nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVXNlIHRoZSBsb2Nh
bCBidWlsZGVyIGxvZyBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Imluc3RlYWQgb2Ygc2NyYXBpbmcgdGhlIGJ1aWxkYm90cyIpKQorICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbigiLWEiLCAiLS1hcmNoaXZlLWxvZyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0o
IlVzZSB0aGUgbG9jYWwgYXJjaGl2ZSBsb2cgZmlsZSAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbnN0ZWFkIG9mIHNjcmFwaW5nIHRoZSBidWlsZGJvdHMiKSkKKyAgICBv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0tZXhwZWN0YXRpb25zLWZpbGUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9KCJVc2UgdGhlIGxvY2FsIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUg
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdGVhZCBvZiBzY3JhcGlu
ZyB0aGUgYnVpbGRib3RzIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIteiIsICIt
LXppcC1maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVXNlIHRoZSBsb2NhbCB0ZXN0IG91
dHB1dCB6aXAgZmlsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0
ZWFkIG9mIHNjcmFwaW5nIHRoZSBidWlsZGJvdHMiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oIi1sIiwgIi0tbG9jYWwiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSgiVXNlIGxvY2FsIGJhc2VsaW5lcyBpbnN0ZWFkIG9mIHNjcmFwaW5nICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VsaW5lcyBmcm9tIHNvdXJjZSB3
ZWJzaXRlcyIpKQorCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJn
cygpCisgICAgbWFpbihvcHRpb25zLCBhcmdzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRwdXRfZm9ybWF0dGVyLnNoIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRwdXRfZm9ybWF0
dGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2MzUzMTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X291dHB1dF9mb3JtYXR0ZXIuc2gKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKKyMg
Q29weXJpZ2h0IChjKSAyMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKK2V4
ZWNfZGlyPSQoZGlybmFtZSAkMCkKKworaWYgWyAiJE9TVFlQRSIgPSAiY3lnd2luIiBdOyB0aGVu
CisgIHN5c3RlbV9yb290PWBjeWdwYXRoICIkU1lTVEVNUk9PVCJgCisgIFBBVEg9Ii91c3IvYmlu
OiRzeXN0ZW1fcm9vdC9zeXN0ZW0zMjokc3lzdGVtX3Jvb3Q6JHN5c3RlbV9yb290L3N5c3RlbTMy
L1dCRU0iCisgIGV4cG9ydCBQQVRICisgIFBZVEhPTl9QUk9HPSIkZXhlY19kaXIvLi4vLi4vLi4v
dGhpcmRfcGFydHkvcHl0aG9uXzI0L3B5dGhvbi5leGUiCitlbHNlCisgIFBZVEhPTl9QUk9HPXB5
dGhvbgorICAjIFdoZW4gbm90IHVzaW5nIHRoZSBpbmNsdWRlZCBweXRob24sIHdlIGRvbid0IGdl
dCBhdXRvbWF0aWMgc2l0ZS5weSBwYXRocy4KKyAgIyBTcGVjaWZpY2FsbHksIHJ1bl93ZWJraXRf
dGVzdHMgbmVlZHMgdGhlIHBhdGhzIGluOgorICAjIHRoaXJkX3BhcnR5L3B5dGhvbl8yNC9MaWIv
c2l0ZS1wYWNrYWdlcy9nb29nbGUucHRoCisgIFBZVEhPTlBBVEg9IiR7ZXhlY19kaXJ9Ly4uLy4u
Ly4uL3Rvb2xzL3B5dGhvbjokUFlUSE9OUEFUSCIKKyAgZXhwb3J0IFBZVEhPTlBBVEgKK2ZpCisK
KyIkUFlUSE9OX1BST0ciICIkZXhlY19kaXIvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0
cHV0X2Zvcm1hdHRlci5weSIgIi12IiAiJEAiCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X291dHB1dF94bWxfdG9fanNvbi5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0cHV0X3htbF90
b19qc29uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkYTFmZjMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X291dHB1dF94bWxfdG9fanNvbi5weQpAQCAtMCwwICsxLDEzNSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisiIiIKK1RoaXMgaXMgYSBzY3JpcHQgZm9yIGdlbmVyYXRpbmcgSlNPTiBm
cm9tIEpVbml0IFhNTCBvdXRwdXQgKGdlbmVyYXRlZCBieQorZ29vZ2xlIHRlc3RzIHdpdGggLS1n
dGVzdF9vdXRwdXQ9eG1sIG9wdGlvbikuCisiIiIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0
cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSB4bWwuZG9t
IGltcG9ydCBtaW5pZG9tCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0
c19nZW5lcmF0b3IKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCisKKyMgQnVpbGRlciBiYXNl
IFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCitCVUlMREVSX0JB
U0VfVVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvZ3Rlc3QtcmVzdWx0
cy8iCisKKworY2xhc3MgSlNPTkdlbmVyYXRvckZyb21YTUwob2JqZWN0KToKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMK
KworICAgICAgICAjIENoZWNrIHRoZSByZXN1bHRzIGRpcmVjdG9yeQorICAgICAgICBpZiBub3Qg
b3MucGF0aC5leGlzdHMoc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAg
ICAgICBvcy5ta2RpcihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgICAg
IHJlc3VsdHNfeG1sX2ZpbGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3Vs
dHNfeG1sX2ZpbGUgPSBvcGVuKHNlbGYuX29wdGlvbnMuaW5wdXRfcmVzdWx0c194bWwpCisgICAg
ICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgbG9nZ2luZy5mYXRhbCgiQ2Fubm90
IG9wZW4gZmlsZSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
aW5wdXRfcmVzdWx0c194bWwpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHN1
bW1hcnkgPSBzZWxmLl9QYXJzZVRlc3RSZXN1bHRzWE1MKAorICAgICAgICAgICAgbWluaWRvbS5w
YXJzZShyZXN1bHRzX3htbF9maWxlKS5kb2N1bWVudEVsZW1lbnQpCisgICAgICAgIHJlc3VsdHNf
eG1sX2ZpbGUuY2xvc2UoKQorCisgICAgICAgIGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJl
c3VsdHNHZW5lcmF0b3IoCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkZXJfbmFtZSwg
c2VsZi5fb3B0aW9ucy5idWlsZF9uYW1lLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWls
ZF9udW1iZXIsIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLmJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgICAgICBzZWxmLl90ZXN0X3Rp
bWluZ3MsCisgICAgICAgICAgICBzZWxmLl9mYWlsdXJlcywgc2VsZi5fcGFzc2VkX3Rlc3RzLCBz
ZWxmLl9za2lwcGVkX3Rlc3RzLAorICAgICAgICAgICAgc2VsZi5fdGVzdHNfbGlzdCkKKworICAg
IGRlZiBfUGFyc2VUZXN0UmVzdWx0c1hNTChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5fdGVz
dHNfbGlzdCA9IHNldCgpCisgICAgICAgIHNlbGYuX3Bhc3NlZF90ZXN0cyA9IHNldCgpCisgICAg
ICAgIHNlbGYuX3NraXBwZWRfdGVzdHMgPSBzZXQoKQorICAgICAgICBzZWxmLl90ZXN0X3RpbWlu
Z3MgPSB7fQorICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IHt9CisKKyAgICAgICAgdGVzdGNhc2Vz
ID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGVzdGNhc2UnKQorICAgICAgICBmb3IgdGVz
dGNhc2UgaW4gdGVzdGNhc2VzOgorICAgICAgICAgICAgbmFtZSA9IHRlc3RjYXNlLmdldEF0dHJp
YnV0ZSgnbmFtZScpCisgICAgICAgICAgICBjbGFzc25hbWUgPSB0ZXN0Y2FzZS5nZXRBdHRyaWJ1
dGUoJ2NsYXNzbmFtZScpCisgICAgICAgICAgICB0ZXN0X25hbWUgPSAiJXMuJXMiICUgKGNsYXNz
bmFtZSwgbmFtZSkKKworICAgICAgICAgICAgc3RhdHVzID0gdGVzdGNhc2UuZ2V0QXR0cmlidXRl
KCdzdGF0dXMnKQorICAgICAgICAgICAgaWYgc3RhdHVzID09ICdub3RydW4nOgorICAgICAgICAg
ICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnRElTQUJMRURfJyk6CisgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3NraXBwZWRfdGVzdHMuYWRkKHRlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorCisgICAgICAgICAgICBmYWlsdXJlcyA9IHRlc3RjYXNlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdmYWlsdXJlJykKKyAgICAgICAgICAgIGlmIGZhaWx1cmVzOgorICAgICAgICAgICAg
ICAgIHNlbGYuX2ZhaWx1cmVzW3Rlc3RfbmFtZV0gPSB0ZXN0X2V4cGVjdGF0aW9ucy5URVhUCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3Bhc3NlZF90ZXN0cy5hZGQo
dGVzdF9uYW1lKQorCisgICAgICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3NbdGVzdF9uYW1lXSA9
IGZsb2F0KAorICAgICAgICAgICAgICAgIHRlc3RjYXNlLmdldEF0dHJpYnV0ZSgndGltZScpKQor
ICAgICAgICAgICAgc2VsZi5fdGVzdHNfbGlzdC5hZGQodGVzdF9uYW1lKQorCisKK2RlZiBtYWlu
KG9wdGlvbnMsIGFyZ3MpOgorICAgICIiIlBhcnNlIHRoZSB0ZXN0cyByZXN1bHRzIGFuZCBnZW5l
cmF0ZSBKU09OIGZpbGVzLgorCisgICAgQXJnczoKKyAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFy
eSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgICAgYXJnczogYSBsaXN0IG9mIHN1YiBkaXJl
Y3RvcmllcyBvciBmaWxlcyB0byB0ZXN0CisgICAgIiIiCisKKyAgICBpZiBub3Qgb3B0aW9ucy50
ZXN0X3R5cGU6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIi0tdGVzdC10eXBlIG5lZWRzIHRvIGJl
IHNwZWNpZmllZC4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgY2Fub25fdGVzdF90eXBl
ID0gb3B0aW9ucy50ZXN0X3R5cGUucmVwbGFjZSgiLSIsICJfIikKKyAgICBpZiBub3Qgb3B0aW9u
cy5pbnB1dF9yZXN1bHRzX3htbDoKKyAgICAgICAgb3B0aW9ucy5pbnB1dF9yZXN1bHRzX3htbCA9
ICIlcy54bWwiICUgKGNhbm9uX3Rlc3RfdHlwZSkKKyAgICBpZiBub3Qgb3B0aW9ucy5idWlsZGVy
X2Jhc2VfdXJsOgorICAgICAgICBvcHRpb25zLmJ1aWxkZXJfYmFzZV91cmwgPSAiJXMlcy8iICUg
KEJVSUxERVJfQkFTRV9VUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucy50ZXN0X3R5cGUpCisKKyAgICBKU09OR2VuZXJhdG9yRnJvbVhNTChv
cHRpb25zKQorCisgICAgcmV0dXJuCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAg
b3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCIiLCAiLS10ZXN0LXR5cGUiLCBkZWZhdWx0PSIiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJUZXN0IHR5cGUgdGhhdCBnZW5lcmF0ZWQgdGhlIHJlc3Vs
dHMgWE1MLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGUuZy4gdW5pdC10
ZXN0cy4iKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcmVzdWx0cy1kaXJl
Y3RvcnkiLCBkZWZhdWx0PSIuLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
Ik91dHB1dCByZXN1bHRzIGRpcmVjdG9yeSBzb3VyY2UgZGlyLiIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCIiLCAiLS1pbnB1dC1yZXN1bHRzLXhtbCIsIGRlZmF1bHQ9IiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRlc3QgcmVzdWx0cyB4bWwgZmlsZSAoaW5w
dXQgZm9yIHVzKS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZWZhdWx0
IGlzIFRFU1RfVFlQRS54bWwiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0t
YnVpbGRlci1iYXNlLXVybCIsIGRlZmF1bHQ9IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9KCJBIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0ICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMuIChkZWZhdWx0PSVzVEVTVF9U
WVBFX3Jlc3VsdHMvKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBCVUlM
REVSX0JBU0VfVVJMKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWJ1aWxk
ZXItbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IkRVTU1ZX0JV
SUxERVJfTkFNRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRoZSBuYW1l
IG9mIHRoZSBidWlsZGVyIHNob3duIG9uIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIndhdGVyZmFsbCBydW5uaW5nIHRoaXMgc2NyaXB0IGUuZy4gV2ViS2l0LiIpCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZC1uYW1lIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iRFVNTVlfQlVJTERfTkFNRSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRoZSBuYW1lIG9mIHRoZSBidWlsZGVyIHVzZWQg
aW4gaXRzIHBhdGgsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZS5nLiB3
ZWJraXQtcmVsLiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZC1u
dW1iZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJEVU1NWV9CVUlM
RF9OVU1CRVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUaGUgYnVpbGQg
bnVtYmVyIG9mIHRoZSBidWlsZGVyIHJ1bm5pbmciCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRoaXMgc2NyaXB0LiIpCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJz
ZXIucGFyc2VfYXJncygpCisgICAgbWFpbihvcHRpb25zLCBhcmdzKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRf
Xy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlw
ZXMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUy
OQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTAzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5
X2ltYWdlX2RpZmYucHkKQEAgLTAsMCArMSw0NyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAw
OSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisiIiJDb21wYXJlcyB0aGUgaW1h
Z2Ugb3V0cHV0IG9mIGEgdGVzdCB0byB0aGUgZXhwZWN0ZWQgaW1hZ2Ugb3V0cHV0IHVzaW5nCitm
dXp6eSBtYXRjaGluZy4KKyIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rf
ZmFpbHVyZXMKK2Zyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKKworCitjbGFz
cyBGdXp6eUltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgorCisgICAgZGVm
IENvbXBhcmVPdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0
YXJnZXQpOgorICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBDb21wYXJlT3V0cHV0IHRoYXQg
Y2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5kCisgICAgICAgIGNoZWNrc3VtIGFnYWluc3QgdGhl
IGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExheW91dFRlc3QgZGlyZWN0b3J5LgorICAgICAgICAi
IiIKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorCisgICAgICAgICMgSWYgd2UgZGlkbid0IHByb2R1
Y2UgYSBoYXNoIGZpbGUsIHRoaXMgdGVzdCBtdXN0IGJlIHRleHQtb25seS4KKyAgICAgICAgaWYg
dGVzdF9hcmdzLmhhc2ggaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisg
ICAgICAgIGV4cGVjdGVkX3BuZ19maWxlID0gcGF0aF91dGlscy5FeHBlY3RlZEZpbGVuYW1lKGZp
bGVuYW1lLCAnLnBuZycpCisKKyAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxlKQor
CisgICAgICAgICMgQWxzbyByZXBvcnQgYSBtaXNzaW5nIGV4cGVjdGVkIFBORyBmaWxlLgorICAg
ICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhwZWN0ZWRfcG5nX2ZpbGUpOgorICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZShzZWxm
KSkKKworICAgICAgICAjIFJ1biB0aGUgZnV6enltYXRjaGVyCisgICAgICAgIHIgPSBzdWJwcm9j
ZXNzLmNhbGwoW3BhdGhfdXRpbHMuRnV6enlNYXRjaFBhdGgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGgsIGV4cGVjdGVkX3BuZ19maWxlXSkKKyAgICAg
ICAgaWYgciAhPSAwOgorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMu
RmFpbHVyZUZ1enp5RmFpbHVyZShzZWxmKSkKKworICAgICAgICByZXR1cm4gZmFpbHVyZXMKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rf
dHlwZXMvaW1hZ2VfZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zOGFiYjZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC0wLDAg
KzEsMTk5IEBACisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisKKyIiIkNvbXBhcmVzIHRoZSBpbWFnZSBvdXRwdXQgb2YgYSB0ZXN0IHRv
IHRoZSBleHBlY3RlZCBpbWFnZSBvdXRwdXQuCisKK0NvbXBhcmVzIGhhc2hlcyBmb3IgdGhlIGdl
bmVyYXRlZCBhbmQgZXhwZWN0ZWQgaW1hZ2VzLiBJZiB0aGUgb3V0cHV0IGRvZXNuJ3QKK21hdGNo
LCByZXR1cm5zIEZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCBhbmQgb3V0cHV0cyBib3RoIGhhc2hl
cyBpbnRvIHRoZSBsYXlvdXQKK3Rlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCisiIiIKKworaW1wb3J0
IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQg
c3VicHJvY2VzcworCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCitmcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIHRlc3RfdHlwZXMgaW1w
b3J0IHRlc3RfdHlwZV9iYXNlCisKKyMgQ2FjaGUgd2hldGhlciB3ZSBoYXZlIHRoZSBpbWFnZV9k
aWZmIGV4ZWN1dGFibGUgYXZhaWxhYmxlLgorX2NvbXBhcmVfYXZhaWxhYmxlID0gVHJ1ZQorX2Nv
bXBhcmVfbXNnX3ByaW50ZWQgPSBGYWxzZQorCisKK2NsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVf
YmFzZS5UZXN0VHlwZUJhc2UpOgorCisgICAgZGVmIF9Db3B5T3V0cHV0UE5HKHNlbGYsIHRlc3Rf
ZmlsZW5hbWUsIHNvdXJjZV9pbWFnZSwgZXh0ZW5zaW9uKToKKyAgICAgICAgIiIiQ29waWVzIHJl
c3VsdCBmaWxlcyBpbnRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHdpdGggYXBwcm9wcmlhdGUKKyAg
ICAgICAgbmFtZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0X2ZpbGVuYW1lOiB0
aGUgdGVzdCBmaWxlbmFtZQorICAgICAgICAgIHNvdXJjZV9maWxlOiBwYXRoIHRvIHRoZSBpbWFn
ZSBmaWxlIChlaXRoZXIgYWN0dWFsIG9yIGV4cGVjdGVkKQorICAgICAgICAgIGV4dGVuc2lvbjog
ZXh0ZW5zaW9uIHRvIGluZGljYXRlIC1hY3R1YWwucG5nIG9yIC1leHBlY3RlZC5wbmcKKyAgICAg
ICAgIiIiCisgICAgICAgIHNlbGYuX01ha2VPdXRwdXREaXJlY3RvcnkodGVzdF9maWxlbmFtZSkK
KyAgICAgICAgZGVzdF9pbWFnZSA9IHNlbGYuT3V0cHV0RmlsZW5hbWUodGVzdF9maWxlbmFtZSwg
ZXh0ZW5zaW9uKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShz
b3VyY2VfaW1hZ2UsIGRlc3RfaW1hZ2UpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAg
ICAgICAgICAgIyBBIG1pc3NpbmcgZXhwZWN0ZWQgUE5HIGhhcyBhbHJlYWR5IGJlZW4gcmVjb3Jk
ZWQgYXMgYW4gZXJyb3IuCisgICAgICAgICAgICBpZiBlcnJuby5FTk9FTlQgIT0gZS5lcnJubzoK
KyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9TYXZlQmFzZWxpbmVGaWxlcyhzZWxm
LCBmaWxlbmFtZSwgcG5nX3BhdGgsIGNoZWNrc3VtKToKKyAgICAgICAgIiIiU2F2ZXMgbmV3IGJh
c2VsaW5lcyBmb3IgdGhlIFBORyBhbmQgY2hlY2tzdW0uCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICBmaWxlbmFtZTogdGVzdCBmaWxlbmFtZQorICAgICAgICAgIHBuZ19wYXRoOiBwYXRoIHRv
IHRoZSBhY3R1YWwgUE5HIHJlc3VsdCBmaWxlCisgICAgICAgICAgY2hlY2tzdW06IHZhbHVlIG9m
IHRoZSBhY3R1YWwgY2hlY2tzdW0gcmVzdWx0CisgICAgICAgICIiIgorICAgICAgICBwbmdfZmls
ZSA9IG9wZW4ocG5nX3BhdGgsICJyYiIpCisgICAgICAgIHBuZ19kYXRhID0gcG5nX2ZpbGUucmVh
ZCgpCisgICAgICAgIHBuZ19maWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fU2F2ZUJhc2VsaW5l
RGF0YShmaWxlbmFtZSwgcG5nX2RhdGEsICIucG5nIikKKyAgICAgICAgc2VsZi5fU2F2ZUJhc2Vs
aW5lRGF0YShmaWxlbmFtZSwgY2hlY2tzdW0sICIuY2hlY2tzdW0iKQorCisgICAgZGVmIF9DcmVh
dGVJbWFnZURpZmYoc2VsZiwgZmlsZW5hbWUsIHRhcmdldCk6CisgICAgICAgICIiIkNyZWF0ZXMg
dGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBlY3RlZC9hY3R1YWwgUE5Hcy4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIGZpbGVuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdGVzdAorICAgICAgICAg
IHRhcmdldDogRGVidWcgb3IgUmVsZWFzZQorICAgICAgICAiIiIKKyAgICAgICAgZGlmZl9maWxl
bmFtZSA9IHNlbGYuT3V0cHV0RmlsZW5hbWUoZmlsZW5hbWUsCisgICAgICAgICAgc2VsZi5GSUxF
TkFNRV9TVUZGSVhfQ09NUEFSRSkKKyAgICAgICAgYWN0dWFsX2ZpbGVuYW1lID0gc2VsZi5PdXRw
dXRGaWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9BQ1RV
QUwgKyAnLnBuZycpCisgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lID0gc2VsZi5PdXRwdXRGaWxl
bmFtZShmaWxlbmFtZSwKKyAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCAr
ICcucG5nJykKKworICAgICAgICBnbG9iYWwgX2NvbXBhcmVfYXZhaWxhYmxlCisgICAgICAgIGNt
ZCA9ICcnCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRp
bHMuSW1hZ2VEaWZmUGF0aCh0YXJnZXQpCisgICAgICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwg
Jy0tZGlmZicsIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAg
ICAgICAgICAgZGlmZl9maWxlbmFtZV0KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAg
ICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNlCisKKyAgICAgICAgcmVzdWx0ID0g
MQorICAgICAgICBpZiBfY29tcGFyZV9hdmFpbGFibGU6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCkKKyAgICAgICAgICAgIGV4
Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5P
RU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgorICAgICAgICAgICAgICAgICAgICBfY29t
cGFyZV9hdmFpbGFibGUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAg
ICAgICAgICAgICMgd29yayBhcm91bmQgYSByYWNlIGNvbmRpdGlvbiBpbiBQeXRob24gMi40J3Mg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICAjIG9mIHN1YnByb2Nlc3MuUG9wZW4KKyAg
ICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZ2xvYmFsIF9jb21wYXJlX21zZ19wcmludGVk
CisKKyAgICAgICAgaWYgbm90IF9jb21wYXJlX2F2YWlsYWJsZSBhbmQgbm90IF9jb21wYXJlX21z
Z19wcmludGVkOgorICAgICAgICAgICAgX2NvbXBhcmVfbXNnX3ByaW50ZWQgPSBUcnVlCisgICAg
ICAgICAgICBwcmludCgnaW1hZ2VfZGlmZiBub3QgZm91bmQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBh
ICcgKyB0YXJnZXQgKworICAgICAgICAgICAgICAgICAgJyBidWlsZCBvZiB0aGUgaW1hZ2VfZGlm
ZiBleGVjdXRhYmxlLicpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIENvbXBh
cmVPdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQp
OgorICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBDb21wYXJlT3V0cHV0IHRoYXQgY2hlY2tz
IHRoZSBvdXRwdXQgaW1hZ2UgYW5kCisgICAgICAgIGNoZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVj
dGVkIGZpbGVzIGZyb20gdGhlIExheW91dFRlc3QgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAg
ICAgICAgZmFpbHVyZXMgPSBbXQorCisgICAgICAgICMgSWYgd2UgZGlkbid0IHByb2R1Y2UgYSBo
YXNoIGZpbGUsIHRoaXMgdGVzdCBtdXN0IGJlIHRleHQtb25seS4KKyAgICAgICAgaWYgdGVzdF9h
cmdzLmhhc2ggaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgICAg
ICMgSWYgd2UncmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZSwgd2UgcGFzcy4KKyAgICAgICAg
aWYgdGVzdF9hcmdzLm5ld19iYXNlbGluZToKKyAgICAgICAgICAgIHNlbGYuX1NhdmVCYXNlbGlu
ZUZpbGVzKGZpbGVuYW1lLCB0ZXN0X2FyZ3MucG5nX3BhdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MuaGFzaCkKKyAgICAgICAgICAgIHJldHVybiBmYWls
dXJlcworCisgICAgICAgICMgQ29tcGFyZSBoYXNoZXMuCisgICAgICAgIGV4cGVjdGVkX2hhc2hf
ZmlsZSA9IHBhdGhfdXRpbHMuRXhwZWN0ZWRGaWxlbmFtZShmaWxlbmFtZSwgJy5jaGVja3N1bScp
CisKKyAgICAgICAgZXhwZWN0ZWRfcG5nX2ZpbGUgPSBwYXRoX3V0aWxzLkV4cGVjdGVkRmlsZW5h
bWUoZmlsZW5hbWUsICcucG5nJykKKworICAgICAgICBpZiB0ZXN0X2FyZ3Muc2hvd19zb3VyY2Vz
OgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgJXMnICUgZXhwZWN0ZWRfaGFzaF9m
aWxlKQorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgJXMnICUgZXhwZWN0ZWRfcG5n
X2ZpbGUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwZWN0ZWRfaGFzaCA9IG9wZW4o
ZXhwZWN0ZWRfaGFzaF9maWxlLCAiciIpLnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwg
ZToKKyAgICAgICAgICAgIGlmIGVycm5vLkVOT0VOVCAhPSBlLmVycm5vOgorICAgICAgICAgICAg
ICAgIHJhaXNlCisgICAgICAgICAgICBleHBlY3RlZF9oYXNoID0gJycKKworCisgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmlzZmlsZShleHBlY3RlZF9wbmdfZmlsZSk6CisgICAgICAgICAgICAjIFJl
cG9ydCBhIG1pc3NpbmcgZXhwZWN0ZWQgUE5HIGZpbGUuCisgICAgICAgICAgICBzZWxmLldyaXRl
T3V0cHV0RmlsZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywgdGVzdF9hcmdzLmhhc2gsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaGFzaCwgZGlmZj1GYWxz
ZSwgd2RpZmY9RmFsc2UpCisgICAgICAgICAgICBzZWxmLl9Db3B5T3V0cHV0UE5HKGZpbGVuYW1l
LCB0ZXN0X2FyZ3MucG5nX3BhdGgsICctYWN0dWFsLnBuZycpCisgICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKHNlbGYpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhaWx1cmVzCisgICAgICAgIGVsaWYgdGVzdF9hcmdzLmhhc2ggPT0gZXhw
ZWN0ZWRfaGFzaDoKKyAgICAgICAgICAgICMgSGFzaCBtYXRjaGVkIChubyBkaWZmIG5lZWRlZCwg
b2theSB0byByZXR1cm4pLgorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKworICAgICAg
ICBzZWxmLldyaXRlT3V0cHV0RmlsZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywgdGVzdF9h
cmdzLmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9oYXNoLCBk
aWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkKKyAgICAgICAgc2VsZi5fQ29weU91dHB1dFBORyhmaWxl
bmFtZSwgdGVzdF9hcmdzLnBuZ19wYXRoLCAnLWFjdHVhbC5wbmcnKQorICAgICAgICBzZWxmLl9D
b3B5T3V0cHV0UE5HKGZpbGVuYW1lLCBleHBlY3RlZF9wbmdfZmlsZSwgJy1leHBlY3RlZC5wbmcn
KQorCisgICAgICAgICMgRXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgcmVzdWx0IGluIG9uZSBjb2Rl
cGF0aCBiZWxvdyBidXQgd2UKKyAgICAgICAgIyBzdGlsbCBuZWVkIHRvIGNhbGwgQ3JlYXRlSW1h
Z2VEaWZmIGZvciBvdGhlciBjb2RlcGF0aHMuCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX0NyZWF0
ZUltYWdlRGlmZihmaWxlbmFtZSwgdGFyZ2V0KQorICAgICAgICBpZiBleHBlY3RlZF9oYXNoID09
ICcnOgorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1p
c3NpbmdJbWFnZUhhc2goc2VsZikpCisgICAgICAgIGVsaWYgdGVzdF9hcmdzLmhhc2ggIT0gZXhw
ZWN0ZWRfaGFzaDoKKyAgICAgICAgICAgICMgSGFzaGVzIGRvbid0IG1hdGNoLCBzbyBzZWUgaWYg
dGhlIGltYWdlcyBtYXRjaC4gSWYgdGhleSBkbywgdGhlbgorICAgICAgICAgICAgIyB0aGUgaGFz
aCBpcyB3cm9uZy4KKyAgICAgICAgICAgIGlmIHJlc3VsdCA9PSAwOgorICAgICAgICAgICAgICAg
IGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3Qo
c2VsZikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaChzZWxmKSkKKworICAgICAg
ICByZXR1cm4gZmFpbHVyZXMKKworICAgIGRlZiBEaWZmRmlsZXMoc2VsZiwgZmlsZTEsIGZpbGUy
KToKKyAgICAgICAgIiIiRGlmZiB0d28gaW1hZ2UgZmlsZXMuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBmaWxlMSwgZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGZpbGVzIHRvIGNvbXBhcmUu
CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIHR3byBmaWxlcyBhcmUgZGlm
ZmVyZW50LgorICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuSW1hZ2VEaWZmUGF0
aCgnRGVidWcnKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgbG9n
Z2luZy53YXJuKCdGYWlsZWQgdG8gZmluZCBpbWFnZSBkaWZmIGV4ZWN1dGFibGUuJykKKyAgICAg
ICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsIGZpbGUxLCBm
aWxlMl0KKyAgICAgICAgcmVzdWx0ID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1
bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAg
ICAgICAgICAgIGxvZ2dpbmcud2FybignRmFpbGVkIHRvIGNvbXBhcmUgaW1hZ2UgZGlmZjogJXMn
LCBlKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gcmVzdWx0ID09
IDEKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMGM3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlw
ZV9iYXNlLnB5CkBAIC0wLDAgKzEsMjQxIEBACisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyIiIkRlZmluZXMgdGhlIGludGVyZmFj
ZSBUZXN0VHlwZUJhc2Ugd2hpY2ggb3RoZXIgdGVzdCB0eXBlcyBpbmhlcml0IGZyb20uCisKK0Fs
c28gZGVmaW5lcyB0aGUgVGVzdEFyZ3VtZW50cyAic3RydWN0IiB0byBwYXNzIHRoZW0gYWRkaXRp
b25hbCBhcmd1bWVudHMuCisiIiIKKworaW1wb3J0IGNnaQoraW1wb3J0IGRpZmZsaWIKK2ltcG9y
dCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3VicHJvY2Vz
cworCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCisKKworY2xhc3MgVGVz
dEFyZ3VtZW50cyhvYmplY3QpOgorICAgICIiIlN0cnVjdC1saWtlIHdyYXBwZXIgZm9yIGFkZGl0
aW9uYWwgYXJndW1lbnRzIG5lZWRlZCBieQorICAgIHNwZWNpZmljIHRlc3RzLiIiIgorICAgICMg
V2hldGhlciB0byBzYXZlIG5ldyBiYXNlbGluZSByZXN1bHRzLgorICAgIG5ld19iYXNlbGluZSA9
IEZhbHNlCisKKyAgICAjIFBhdGggdG8gdGhlIGFjdHVhbCBQTkcgZmlsZSBnZW5lcmF0ZWQgYnkg
cGl4ZWwgdGVzdHMKKyAgICBwbmdfcGF0aCA9IE5vbmUKKworICAgICMgVmFsdWUgb2YgY2hlY2tz
dW0gZ2VuZXJhdGVkIGJ5IHBpeGVsIHRlc3RzLgorICAgIGhhc2ggPSBOb25lCisKKyAgICAjIFdo
ZXRoZXIgdG8gdXNlIHdkaWZmIHRvIGdlbmVyYXRlIGJ5LXdvcmQgZGlmZnMuCisgICAgd2RpZmYg
PSBGYWxzZQorCisgICAgIyBXaGV0aGVyIHRvIHJlcG9ydCB0aGUgbG9jYXRpb25zIG9mIHRoZSBl
eHBlY3RlZCByZXN1bHQgZmlsZXMgdXNlZC4KKyAgICBzaG93X3NvdXJjZXMgPSBGYWxzZQorCisj
IFB5dGhvbiBidWcgd29ya2Fyb3VuZC4gIFNlZSB0aGUgd2RpZmYgY29kZSBpbiBXcml0ZU91dHB1
dEZpbGVzIGZvciBhbgorIyBleHBsYW5hdGlvbi4KK193ZGlmZl9hdmFpbGFibGUgPSBUcnVlCisK
KworY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CisKKyAgICAjIEZpbGVuYW1lIHBpZWNlcyB3
aGVuIHdyaXRpbmcgZmFpbHVyZXMgdG8gdGhlIHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCisgICAg
RklMRU5BTUVfU1VGRklYX0FDVFVBTCA9ICItYWN0dWFsIgorICAgIEZJTEVOQU1FX1NVRkZJWF9F
WFBFQ1RFRCA9ICItZXhwZWN0ZWQiCisgICAgRklMRU5BTUVfU1VGRklYX0RJRkYgPSAiLWRpZmYi
CisgICAgRklMRU5BTUVfU1VGRklYX1dESUZGID0gIi13ZGlmZi5odG1sIgorICAgIEZJTEVOQU1F
X1NVRkZJWF9DT01QQVJFID0gIi1kaWZmLnBuZyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
bGF0Zm9ybSwgcm9vdF9vdXRwdXRfZGlyKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIFRlc3RU
eXBlQmFzZSBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBwbGF0Zm9ybTogdGhl
IHBsYXRmb3JtIChlLmcuLCAnY2hyb21pdW0tbWFjLWxlb3BhcmQnKQorICAgICAgICAgICAgaWRl
bnRpZnlpbmcgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHJlc3VsdHMgdG8gYmUgdXNlZC4KKyAgICAg
ICAgICByb290X291dHB1dF9kaXI6IFRoZSB1bml4IHN0eWxlIHBhdGggdG8gdGhlIG91dHB1dCBk
aXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9yb290X291dHB1dF9kaXIgPSByb290X291
dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQorCisgICAgZGVmIF9N
YWtlT3V0cHV0RGlyZWN0b3J5KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiQ3JlYXRlcyB0
aGUgb3V0cHV0IGRpcmVjdG9yeSAoaWYgbmVlZGVkKSBmb3IgYSBnaXZlbiB0ZXN0CisgICAgICAg
IGZpbGVuYW1lLiIiIgorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fcm9vdF9vdXRwdXRfZGlyLAorICAgICAgICAgICAgcGF0aF91dGlscy5SZWxhdGl2ZVRlc3RG
aWxlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHBhdGhfdXRpbHMuTWF5YmVNYWtlRGlyZWN0b3J5
KG9zLnBhdGguc3BsaXQob3V0cHV0X2ZpbGVuYW1lKVswXSkKKworICAgIGRlZiBfU2F2ZUJhc2Vs
aW5lRGF0YShzZWxmLCBmaWxlbmFtZSwgZGF0YSwgbW9kaWZpZXIpOgorICAgICAgICAiIiJTYXZl
cyBhIG5ldyBiYXNlbGluZSBmaWxlIGludG8gdGhlIHBsYXRmb3JtIGRpcmVjdG9yeS4KKworICAg
ICAgICBUaGUgZmlsZSB3aWxsIGJlIG5hbWVkIHNpbXBseSAiPHRlc3Q+LWV4cGVjdGVkPG1vZGlm
aWVyPiIsIHN1aXRhYmxlIGZvcgorICAgICAgICB1c2UgYXMgdGhlIGV4cGVjdGVkIHJlc3VsdHMg
aW4gYSBsYXRlciBydW4uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogcGF0
aCB0byB0aGUgdGVzdCBmaWxlCisgICAgICAgICAgZGF0YTogcmVzdWx0IHRvIGJlIHNhdmVkIGFz
IHRoZSBuZXcgYmFzZWxpbmUKKyAgICAgICAgICBtb2RpZmllcjogdHlwZSBvZiB0aGUgcmVzdWx0
IGZpbGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgorICAgICAgICAiIiIKKyAgICAgICAgcmVsYXRp
dmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgcGF0aF91dGlscy5SZWxhdGl2
ZVRlc3RGaWxlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIG91dHB1dF9kaXIgPSBvcy5wYXRoLmpv
aW4oCisgICAgICAgICAgICBwYXRoX3V0aWxzLkNocm9taXVtQmFzZWxpbmVQYXRoKHNlbGYuX3Bs
YXRmb3JtKSwgcmVsYXRpdmVfZGlyKQorICAgICAgICBvdXRwdXRfZmlsZSA9IG9zLnBhdGguYmFz
ZW5hbWUob3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKworICAgICAgICAgICAgc2VsZi5G
SUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgKyBtb2RpZmllcikKKworICAgICAgICBwYXRoX3V0aWxz
Lk1heWJlTWFrZURpcmVjdG9yeShvdXRwdXRfZGlyKQorICAgICAgICBvdXRwdXRfcGF0aCA9IG9z
LnBhdGguam9pbihvdXRwdXRfZGlyLCBvdXRwdXRfZmlsZSkKKyAgICAgICAgbG9nZ2luZy5kZWJ1
Zygnd3JpdGluZyBuZXcgYmFzZWxpbmUgdG8gIiVzIicgJSAob3V0cHV0X3BhdGgpKQorICAgICAg
ICBvcGVuKG91dHB1dF9wYXRoLCAid2IiKS53cml0ZShkYXRhKQorCisgICAgZGVmIE91dHB1dEZp
bGVuYW1lKHNlbGYsIGZpbGVuYW1lLCBtb2RpZmllcik6CisgICAgICAgICIiIlJldHVybnMgYSBm
aWxlbmFtZSBpbnNpZGUgdGhlIG91dHB1dCBkaXIgdGhhdCBjb250YWlucyBtb2RpZmllci4KKwor
ICAgICAgICBGb3IgZXhhbXBsZSwgaWYgZmlsZW5hbWUgaXMgYzovLi4uL2Zhc3QvZG9tL2Zvby5o
dG1sIGFuZCBtb2RpZmllciBpcworICAgICAgICAiLWV4cGVjdGVkLnR4dCIsIHRoZSByZXR1cm4g
dmFsdWUgaXMKKyAgICAgICAgYzovY3lnd2luL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZG9tL2Zvby1leHBlY3RlZC50eHQKKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1l
OiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICAgICBtb2RpZmllcjogYSBz
dHJpbmcgdG8gcmVwbGFjZSB0aGUgZXh0ZW5zaW9uIG9mIGZpbGVuYW1lIHdpdGgKKworICAgICAg
ICBSZXR1cm46CisgICAgICAgICAgVGhlIGFic29sdXRlIHdpbmRvd3MgcGF0aCB0byB0aGUgb3V0
cHV0IGZpbGVuYW1lCisgICAgICAgICIiIgorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5w
YXRoLmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLAorICAgICAgICAgICAgcGF0aF91dGlscy5S
ZWxhdGl2ZVRlc3RGaWxlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBvcy5wYXRoLnNw
bGl0ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgorCisgICAgZGVmIENvbXBhcmVP
dXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgor
ICAgICAgICAiIiJNZXRob2QgdGhhdCBjb21wYXJlcyB0aGUgb3V0cHV0IGZyb20gdGhlIHRlc3Qg
d2l0aCB0aGUKKyAgICAgICAgZXhwZWN0ZWQgdmFsdWUuCisKKyAgICAgICAgVGhpcyBpcyBhbiBh
YnN0cmFjdCBtZXRob2QgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYWxsIHN1YiBjbGFzc2VzLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRl
c3QgZmlsZQorICAgICAgICAgIHByb2M6IGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXN0X3NoZWxsIHBy
b2Nlc3MKKyAgICAgICAgICBvdXRwdXQ6IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG91dHB1dCBv
ZiB0aGUgdGVzdAorICAgICAgICAgIHRlc3RfYXJnczogYSBUZXN0QXJndW1lbnRzIG9iamVjdCBo
b2xkaW5nIG9wdGlvbmFsIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgYXJndW1lbnRzCisgICAg
ICAgICAgdGFyZ2V0OiBEZWJ1ZyBvciBSZWxlYXNlCisKKyAgICAgICAgUmV0dXJuOgorICAgICAg
ICAgIGEgbGlzdCBvZiBUZXN0RmFpbHVyZSBvYmplY3RzLCBlbXB0eSBpZiB0aGUgdGVzdCBwYXNz
ZXMKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYg
V3JpdGVPdXRwdXRGaWxlcyhzZWxmLCBmaWxlbmFtZSwgdGVzdF90eXBlLCBmaWxlX3R5cGUsIG91
dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlm
Zj1GYWxzZSk6CisgICAgICAgICIiIldyaXRlcyB0aGUgdGVzdCBvdXRwdXQsIHRoZSBleHBlY3Rl
ZCBvdXRwdXQgYW5kIG9wdGlvbmFsbHkgdGhlIGRpZmYKKyAgICAgICAgYmV0d2VlbiB0aGUgdHdv
IHRvIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeS4KKworICAgICAgICBUaGUgZnVsbCBv
dXRwdXQgZmlsZW5hbWUgb2YgdGhlIGFjdHVhbCwgZm9yIGV4YW1wbGUsIHdpbGwgYmUKKyAgICAg
ICAgICA8ZmlsZW5hbWU+PHRlc3RfdHlwZT4tYWN0dWFsPGZpbGVfdHlwZT4KKyAgICAgICAgRm9y
IGluc3RhbmNlLAorICAgICAgICAgIG15X3Rlc3Qtc2ltcC1hY3R1YWwudHh0CisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogVGhlIHRlc3QgZmlsZW5hbWUKKyAgICAgICAgICB0
ZXN0X3R5cGU6IEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3QgdHlwZSwgZS5nLiAic2ltcCIK
KyAgICAgICAgICBmaWxlX3R5cGU6IEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3Qgb3V0cHV0
IGZpbGUgdHlwZSwgZS5nLiAiLnR4dCIKKyAgICAgICAgICBvdXRwdXQ6IEEgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlIHRlc3Qgb3V0cHV0CisgICAgICAgICAgZXhwZWN0ZWQ6IEEgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlIGV4cGVjdGVkIHRlc3Qgb3V0cHV0CisgICAgICAgICAgZGlmZjogaWYgVHJ1ZSwg
d3JpdGUgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRpZmZzIHRvby4gVGhpcyBzaG91bGQgYmUKKyAg
ICAgICAgICAgICAgRmFsc2UgZm9yIHJlc3VsdHMgdGhhdCBhcmUgbm90IHRleHQKKyAgICAgICAg
ICB3ZGlmZjogaWYgVHJ1ZSwgd3JpdGUgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgd29yZC1ieS13
b3JkIGRpZmZzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9NYWtlT3V0cHV0RGlyZWN0b3J5
KGZpbGVuYW1lKQorICAgICAgICBhY3R1YWxfZmlsZW5hbWUgPSBzZWxmLk91dHB1dEZpbGVuYW1l
KGZpbGVuYW1lLAorICAgICAgICAgICAgdGVzdF90eXBlICsgc2VsZi5GSUxFTkFNRV9TVUZGSVhf
QUNUVUFMICsgZmlsZV90eXBlKQorICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYuT3V0
cHV0RmlsZW5hbWUoZmlsZW5hbWUsCisgICAgICAgICAgICB0ZXN0X3R5cGUgKyBzZWxmLkZJTEVO
QU1FX1NVRkZJWF9FWFBFQ1RFRCArIGZpbGVfdHlwZSkKKyAgICAgICAgaWYgb3V0cHV0OgorICAg
ICAgICAgICAgb3BlbihhY3R1YWxfZmlsZW5hbWUsICJ3YiIpLndyaXRlKG91dHB1dCkKKyAgICAg
ICAgaWYgZXhwZWN0ZWQ6CisgICAgICAgICAgICBvcGVuKGV4cGVjdGVkX2ZpbGVuYW1lLCAid2Ii
KS53cml0ZShleHBlY3RlZCkKKworICAgICAgICBpZiBub3Qgb3V0cHV0IG9yIG5vdCBleHBlY3Rl
ZDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGRpZmY6CisgICAgICAgICAgICBk
aWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZXhwZWN0ZWQuc3BsaXRsaW5lcyhUcnVlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaXRsaW5lcyhU
cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9m
aWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxf
ZmlsZW5hbWUpCisKKyAgICAgICAgICAgIGRpZmZfZmlsZW5hbWUgPSBzZWxmLk91dHB1dEZpbGVu
YW1lKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgIHRlc3RfdHlwZSArIHNlbGYuRklMRU5BTUVf
U1VGRklYX0RJRkYgKyBmaWxlX3R5cGUpCisgICAgICAgICAgICBvcGVuKGRpZmZfZmlsZW5hbWUs
ICJ3YiIpLndyaXRlKCcnLmpvaW4oZGlmZikpCisKKyAgICAgICAgaWYgd2RpZmY6CisgICAgICAg
ICAgICAjIFNoZWxsIG91dCB0byB3ZGlmZiB0byBnZXQgY29sb3JlZCBpbmxpbmUgZGlmZnMuCisg
ICAgICAgICAgICBleGVjdXRhYmxlID0gcGF0aF91dGlscy5XRGlmZlBhdGgoKQorICAgICAgICAg
ICAgY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgJy0tc3RhcnQtZGVsZXRl
PSMjV0RJRkZfREVMIyMnLAorICAgICAgICAgICAgICAgICAgICctLWVuZC1kZWxldGU9IyNXRElG
Rl9FTkQjIycsCisgICAgICAgICAgICAgICAgICAgJy0tc3RhcnQtaW5zZXJ0PSMjV0RJRkZfQURE
IyMnLAorICAgICAgICAgICAgICAgICAgICctLWVuZC1pbnNlcnQ9IyNXRElGRl9FTkQjIycsCisg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAg
YWN0dWFsX2ZpbGVuYW1lXQorICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLk91dHB1dEZpbGVu
YW1lKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdHlwZSArIHNl
bGYuRklMRU5BTUVfU1VGRklYX1dESUZGKQorCisgICAgICAgICAgICBnbG9iYWwgX3dkaWZmX2F2
YWlsYWJsZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBQeXRob24ncyBQ
b3BlbiBoYXMgYSBidWcgdGhhdCBjYXVzZXMgYW55IHBpcGVzIG9wZW5lZCB0byBhCisgICAgICAg
ICAgICAgICAgIyBwcm9jZXNzIHRoYXQgY2FuJ3QgYmUgZXhlY3V0ZWQgdG8gYmUgbGVha2VkLiAg
U2luY2UgdGhpcworICAgICAgICAgICAgICAgICMgY29kZSBpcyBzcGVjaWZpY2FsbHkgZGVzaWdu
ZWQgdG8gdG9sZXJhdGUgZXhlYyBmYWlsdXJlcworICAgICAgICAgICAgICAgICMgdG8gZ3JhY2Vm
dWxseSBoYW5kbGUgY2FzZXMgd2hlcmUgd2RpZmYgaXMgbm90IGluc3RhbGxlZCwKKyAgICAgICAg
ICAgICAgICAjIHRoZSBidWcgcmVzdWx0cyBpbiBhIG1hc3NpdmUgZmlsZSBkZXNjcmlwdG9yIGxl
YWsuIEFzIGEKKyAgICAgICAgICAgICAgICAjIHdvcmthcm91bmQsIGlmIGFuIGV4ZWMgZmFpbHVy
ZSBpcyBldmVyIGV4cGVyaWVuY2VkIGZvcgorICAgICAgICAgICAgICAgICMgd2RpZmYsIGFzc3Vt
ZSBpdCdzIG5vdCBhdmFpbGFibGUuICBUaGlzIHdpbGwgbGVhayBvbmUKKyAgICAgICAgICAgICAg
ICAjIGZpbGUgZGVzY3JpcHRvciBidXQgdGhhdCdzIGJldHRlciB0aGFuIGxlYWtpbmcgZWFjaCB0
aW1lCisgICAgICAgICAgICAgICAgIyB3ZGlmZiB3b3VsZCBiZSBydW4uCisgICAgICAgICAgICAg
ICAgIworICAgICAgICAgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwv
cHl0aG9uLWxpc3QvCisgICAgICAgICAgICAgICAgIyAgICAyMDA4LUF1Z3VzdC81MDU3NTMuaHRt
bAorICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTMyMTAKKyAg
ICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJdCBhbHNvIGhhcyBhIHRocmVhZGlu
ZyBidWcsIHNvIHdlIGRvbid0IG91dHB1dCB3ZGlmZiBpZgorICAgICAgICAgICAgICAgICMgdGhl
IFBvcGVuIHJhaXNlcyBhIFZhbHVlRXJyb3IuCisgICAgICAgICAgICAgICAgIyBodHRwOi8vYnVn
cy5weXRob24ub3JnL2lzc3VlMTIzNgorICAgICAgICAgICAgICAgIGlmIF93ZGlmZl9hdmFpbGFi
bGU6CisgICAgICAgICAgICAgICAgICAgIHdkaWZmID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNh
dGUoKVswXQorICAgICAgICAgICAgICAgICAgICB3ZGlmZl9mYWlsZWQgPSBGYWxzZQorCisgICAg
ICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiAoZS5lcnJubyA9
PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVMgb3IKKyAgICAgICAgICAg
ICAgICAgICAgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQpOgorICAgICAgICAgICAgICAgICAgICBf
d2RpZmZfYXZhaWxhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICByYWlzZSBlCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAg
ICAgICAgICAgICAgICB3ZGlmZl9mYWlsZWQgPSBUcnVlCisKKyAgICAgICAgICAgIG91dCA9IG9w
ZW4oZmlsZW5hbWUsICd3YicpCisKKyAgICAgICAgICAgIGlmIG5vdCBfd2RpZmZfYXZhaWxhYmxl
OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIndkaWZm
IG5vdCBpbnN0YWxsZWQuPGJyLz4gIgorICAgICAgICAgICAgICAgICAgICAiSWYgeW91J3JlIHJ1
bm5pbmcgT1MgWCwgeW91IGNhbiBpbnN0YWxsIHZpYSBtYWNwb3J0cy4iCisgICAgICAgICAgICAg
ICAgICAgICI8YnIvPiIKKyAgICAgICAgICAgICAgICAgICAgIklmIHJ1bm5pbmcgVWJ1bnR1IGxp
bnV4LCB5b3UgY2FuIHJ1biAiCisgICAgICAgICAgICAgICAgICAgICInc3VkbyBhcHQtZ2V0IGlu
c3RhbGwgd2RpZmYnLiIpCisgICAgICAgICAgICBlbGlmIHdkaWZmX2ZhaWxlZDoKKyAgICAgICAg
ICAgICAgICBvdXQud3JpdGUoJ3dkaWZmIGZhaWxlZCBkdWUgdG8gcnVubmluZyB3aXRoIG11bHRp
cGxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rfc2hlbGxzIGluIHBhcmFsbGVs
LicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdkaWZmID0gY2dpLmVzY2Fw
ZSh3ZGlmZikKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZf
REVMIyMnLCAnPHNwYW4gY2xhc3M9ZGVsPicpCisgICAgICAgICAgICAgICAgd2RpZmYgPSB3ZGlm
Zi5yZXBsYWNlKCcjI1dESUZGX0FERCMjJywgJzxzcGFuIGNsYXNzPWFkZD4nKQorICAgICAgICAg
ICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9FTkQjIycsICc8L3NwYW4+JykK
KyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJzxoZWFkPjxzdHlsZT4uZGVsIHsgYmFja2dyb3Vu
ZDogI2ZhYTsgfSAnKQorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLmFkZCB7IGJhY2tncm91
bmQ6ICNhZmE7IH08L3N0eWxlPjwvaGVhZD4nKQorICAgICAgICAgICAgICAgIG91dC53cml0ZSgn
PHByZT4nICsgd2RpZmYgKyAnPC9wcmU+JykKKworICAgICAgICAgICAgb3V0LmNsb3NlKCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rf
dHlwZXMvdGV4dF9kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGRiZGM4YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CkBAIC0wLDAgKzEs
OTYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKworIiIiQ29tcGFyZXMgdGhlIHRleHQgb3V0cHV0IG9mIGEgdGVzdCB0byB0aGUg
ZXhwZWN0ZWQgdGV4dCBvdXRwdXQuCisKK0lmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCwgcmV0
dXJucyBGYWlsdXJlVGV4dE1pc21hdGNoIGFuZCBvdXRwdXRzIHRoZSBkaWZmCitmaWxlcyBpbnRv
IHRoZSBsYXlvdXQgdGVzdCByZXN1bHRzIGRpcmVjdG9yeS4KKyIiIgorCitpbXBvcnQgZXJybm8K
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAorCitmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVz
Citmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCisKKworZGVmIGlzUmVuZGVy
VHJlZUR1bXAoZGF0YSk6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmIGRhdGEgYXBwZWFycyB0byBi
ZSBhIHJlbmRlciB0cmVlIGR1bXAgYXMgb3Bwb3NlZCB0byBhCisgICAgcGxhaW4gdGV4dCBkdW1w
LiIiIgorICAgIHJldHVybiBkYXRhLmZpbmQoIlJlbmRlclZpZXcgYXQgKDAsMCkiKSAhPSAtMQor
CisKK2NsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgorCisg
ICAgZGVmIEdldE5vcm1hbGl6ZWRPdXRwdXRUZXh0KHNlbGYsIG91dHB1dCk6CisgICAgICAgICMg
U29tZSB0ZXN0cyBwcm9kdWNlICJcclxuIiBleHBsaWNpdGx5LiAgT3VyIHN5c3RlbSAoUHl0aG9u
L0N5Z3dpbikKKyAgICAgICAgIyBoZWxwZnVsbHkgY2hhbmdlcyB0aGUgIlxuIiB0byAiXHJcbiIs
IHJlc3VsdGluZyBpbiAiXHJcclxuIi4KKyAgICAgICAgbm9ybSA9IG91dHB1dC5yZXBsYWNlKCJc
clxyXG4iLCAiXHJcbiIpLnN0cmlwKCJcclxuIikucmVwbGFjZSgKKyAgICAgICAgICAgICAiXHJc
biIsICJcbiIpCisgICAgICAgIHJldHVybiBub3JtICsgIlxuIgorCisgICAgZGVmIEdldE5vcm1h
bGl6ZWRFeHBlY3RlZFRleHQoc2VsZiwgZmlsZW5hbWUsIHNob3dfc291cmNlcyk6CisgICAgICAg
ICIiIkdpdmVuIHRoZSBmaWxlbmFtZSBvZiB0aGUgdGVzdCwgcmVhZCB0aGUgZXhwZWN0ZWQgb3V0
cHV0IGZyb20gYSBmaWxlCisgICAgICAgIGFuZCBub3JtYWxpemUgdGhlIHRleHQuICBSZXR1cm5z
IGEgc3RyaW5nIHdpdGggdGhlIGV4cGVjdGVkIHRleHQsIG9yICcnCisgICAgICAgIGlmIHRoZSBl
eHBlY3RlZCBvdXRwdXQgZmlsZSB3YXMgbm90IGZvdW5kLiIiIgorICAgICAgICAjIFJlYWQgdGhl
IHBsYXRmb3JtLXNwZWNpZmljIGV4cGVjdGVkIHRleHQuCisgICAgICAgIGV4cGVjdGVkX2ZpbGVu
YW1lID0gcGF0aF91dGlscy5FeHBlY3RlZEZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcpCisgICAg
ICAgIGlmIHNob3dfc291cmNlczoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVz
JyAlIGV4cGVjdGVkX2ZpbGVuYW1lKQorCisgICAgICAgIHJldHVybiBzZWxmLkdldE5vcm1hbGl6
ZWRUZXh0KGV4cGVjdGVkX2ZpbGVuYW1lKQorCisgICAgZGVmIEdldE5vcm1hbGl6ZWRUZXh0KHNl
bGYsIGZpbGVuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGV4dCA9IG9wZW4oZmls
ZW5hbWUpLnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIGlm
IGVycm5vLkVOT0VOVCAhPSBlLmVycm5vOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAg
ICAgICByZXR1cm4gJycKKworICAgICAgICAjIE5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MKKyAgICAg
ICAgcmV0dXJuIHRleHQuc3RyaXAoIlxyXG4iKS5yZXBsYWNlKCJcclxuIiwgIlxuIikgKyAiXG4i
CisKKyAgICBkZWYgQ29tcGFyZU91dHB1dChzZWxmLCBmaWxlbmFtZSwgcHJvYywgb3V0cHV0LCB0
ZXN0X2FyZ3MsIHRhcmdldCk6CisgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVP
dXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCB0ZXh0IGFnYWluc3QKKyAgICAgICAgdGhlIGV4
cGVjdGVkIHRleHQgZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuIiIiCisgICAgICAgIGZh
aWx1cmVzID0gW10KKworICAgICAgICAjIElmIHdlJ3JlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxp
bmUsIHdlIHBhc3MuCisgICAgICAgIGlmIHRlc3RfYXJncy5uZXdfYmFzZWxpbmU6CisgICAgICAg
ICAgICBzZWxmLl9TYXZlQmFzZWxpbmVEYXRhKGZpbGVuYW1lLCBvdXRwdXQsICIudHh0IikKKyAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgICAgICMgTm9ybWFsaXplIHRleHQgdG8g
ZGlmZgorICAgICAgICBvdXRwdXQgPSBzZWxmLkdldE5vcm1hbGl6ZWRPdXRwdXRUZXh0KG91dHB1
dCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLkdldE5vcm1hbGl6ZWRFeHBlY3RlZFRleHQoZmls
ZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfYXJncy5zaG93X3NvdXJjZXMpCisKKyAgICAgICAgIyBXcml0ZSBvdXRwdXQgZmlsZXMg
Zm9yIG5ldyB0ZXN0cywgdG9vLgorICAgICAgICBpZiBvdXRwdXQgIT0gZXhwZWN0ZWQ6CisgICAg
ICAgICAgICAjIFRleHQgZG9lc24ndCBtYXRjaCwgd3JpdGUgb3V0cHV0IGZpbGVzLgorICAgICAg
ICAgICAgc2VsZi5Xcml0ZU91dHB1dEZpbGVzKGZpbGVuYW1lLCAiIiwgIi50eHQiLCBvdXRwdXQs
IGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmY9VHJ1ZSwg
d2RpZmY9VHJ1ZSkKKworICAgICAgICAgICAgaWYgZXhwZWN0ZWQgPT0gJyc6CisgICAgICAgICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1bHQo
c2VsZikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUZXh0TWlzbWF0Y2goc2VsZiwgVHJ1ZSkpCisKKyAgICAg
ICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICBkZWYgRGlmZkZpbGVzKHNlbGYsIGZpbGUxLCBmaWxl
Mik6CisgICAgICAgICIiIkRpZmYgdHdvIHRleHQgZmlsZXMuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBmaWxlMSwgZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGZpbGVzIHRvIGNvbXBhcmUu
CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIHR3byBmaWxlcyBhcmUgZGlm
ZmVyZW50LgorICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgcmV0dXJuIHNlbGYuR2V0Tm9ybWFsaXplZFRleHQoZmlsZTEpICE9IHNlbGYuR2V0Tm9ybWFs
aXplZFRleHQoZmlsZTIpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy91cGRhdGVfZXhwZWN0YXRpb25zX2Zyb21fZGFzaGJvYXJkLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9u
c19mcm9tX2Rhc2hib2FyZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
NTc3NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZC5weQpAQCAtMCww
ICsxLDQ3NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAwOSBU
aGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisiIiJTY3JpcHQgdG8gcmVhZCBpbiB1
cGRhdGVzIGluIEpTT04gZm9ybSBmcm9tIHRoZSBsYXlvdXQgdGVzdCBkYXNoYm9hcmQKK2FuZCBh
cHBseSB0aGVtIHRvIHRlc3RfZXhwZWN0YXRpb25zLnR4dC4KKworVXNhZ2U6CisxLiBHbyB0byBo
dHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3NyYy93ZWJraXQvdG9v
bHMvCisgICAgICAgbGF5b3V0X3Rlc3RzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCNleHBlY3Rh
dGlvbnNVcGRhdGU9dHJ1ZQorMi4gQ29weS1wYXN0ZSB0aGF0IEpTT04gaW50byBhIGxvY2FsIGZp
bGUuCiszLiBweXRob24gdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZC5weSBwYXRo
L3RvL2xvY2FsL2ZpbGUKKyIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQg
c3lzCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCisKK3N5cy5wYXRoLmFwcGVuZChwYXRo
X3V0aWxzLlBhdGhGcm9tQmFzZSgndGhpcmRfcGFydHknKSkKK2ltcG9ydCBzaW1wbGVqc29uCisK
KworZGVmIFVwZGF0ZUV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMpOgorICAgIGV4
cGVjdGF0aW9ucyA9IEV4cGVjdGF0aW9uc1VwZGF0ZXIoTm9uZSwgTm9uZSwKKyAgICAgICAgJ1dJ
TicsIEZhbHNlLCBGYWxzZSwgZXhwZWN0YXRpb25zLCBUcnVlKQorICAgIHJldHVybiBleHBlY3Rh
dGlvbnMuVXBkYXRlQmFzZWRPbkpTT04odXBkYXRlcykKKworCitjbGFzcyBPcHRpb25zQW5kRXhw
ZWN0YXRpb25zSG9sZGVyKG9iamVjdCk6CisgICAgIiIiQ29udGFpbmVyIGZvciBhIGxpc3Qgb2Yg
b3B0aW9ucyBhbmQgYSBsaXN0IG9mIGV4cGVjdGF0aW9ucyBmb3IgYSBnaXZlbgorICAgIHRlc3Qu
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgZXhwZWN0YXRpb25zKToKKyAg
ICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9
IGV4cGVjdGF0aW9ucworCisKK2NsYXNzIEJ1aWxkSW5mbyhPcHRpb25zQW5kRXhwZWN0YXRpb25z
SG9sZGVyKToKKyAgICAiIiJDb250YWluZXIgZm9yIGEgbGlzdCBvZiBvcHRpb25zIGFuZCBleHBl
Y3RhdGlvbnMgZm9yIGEgZ2l2ZW4gdGVzdCBhcworICAgIHdlbGwgYXMgYSBtYXAgZnJvbSBidWls
ZF90eXBlIChlLmcuIGRlYnVnL3JlbGVhc2UpIHRvIGEgbGlzdCBvZiBwbGF0Zm9ybXMKKyAgICAo
ZS5nLiBbIndpbiIsICJsaW51eCJdKS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBvcHRpb25zLCBleHBlY3RhdGlvbnMsIGJ1aWxkX2luZm8pOgorICAgICAgICBPcHRpb25zQW5k
RXhwZWN0YXRpb25zSG9sZGVyLl9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIGV4cGVjdGF0aW9ucykK
KyAgICAgICAgc2VsZi5idWlsZF9pbmZvID0gYnVpbGRfaW5mbworCisKK2NsYXNzIEV4cGVjdGF0
aW9uc1VwZGF0ZXIodGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9uc0ZpbGUpOgorICAg
ICIiIkNsYXNzIHRvIHVwZGF0ZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgYmFzZWQgb24gdXBkYXRl
cyBpbiB0aGUgZm9sbG93aW5nCisgICAgZm9ybToKKyAgICB7InRlc3QxLmh0bWwiOiB7CisgICAg
ICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiRkFJTCBUSU1FT1VUIiwgImV4dHJhIjogIkNS
QVNIIn19CisgICAgICAiV0lOIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwgVElNRU9VVCJ9fQor
ICAgICAidGVzdDIuaHRtbCI6IC4uLgorICAgIH0KKyAgICAiIiIKKworICAgIGRlZiBfR2V0QnVp
bGRUeXBlc0FuZFBsYXRmb3JtcyhzZWxmLCBvcHRpb25zKToKKyAgICAgICAgIiIiU3BsaXRzIHVw
IHRoZSBvcHRpb25zIGxpc3QgaW50byB0aHJlZSBsaXN0czogcGxhdGZvcm1zLAorICAgICAgICBi
dWlsZF90eXBlcyBhbmQgb3RoZXJfb3B0aW9ucy4iIiIKKyAgICAgICAgcGxhdGZvcm1zID0gW10K
KyAgICAgICAgYnVpbGRfdHlwZXMgPSBbXQorICAgICAgICBvdGhlcl9vcHRpb25zID0gW10KKyAg
ICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgb3B0aW9uIGluIHNl
bGYuUExBVEZPUk1TOgorICAgICAgICAgICAgICAgIHBsYXRmb3Jtcy5hcHBlbmQob3B0aW9uKQor
ICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5CVUlMRF9UWVBFUzoKKyAgICAgICAgICAg
ICAgICBidWlsZF90eXBlcy5hcHBlbmQob3B0aW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBvdGhlcl9vcHRpb25zLmFwcGVuZChvcHRpb24pCisKKyAgICAgICAgaWYgbm90
IGxlbihidWlsZF90eXBlcyk6CisgICAgICAgICAgICBidWlsZF90eXBlcyA9IHNlbGYuQlVJTERf
VFlQRVMKKworICAgICAgICBpZiBub3QgbGVuKHBsYXRmb3Jtcyk6CisgICAgICAgICAgICAjIElm
IHRoZXJlIGFyZSBubyBwbGF0Zm9ybXMgc3BlY2lmaWVkLCB1c2UgdGhlIG1vc3QgZ2VuZXJpYyB2
ZXJzaW9uCisgICAgICAgICAgICAjIG9mIGVhY2ggcGxhdGZvcm0gbmFtZSBzbyB3ZSBkb24ndCBo
YXZlIHRvIGRlZHVwIHRoZW0gbGF0ZXIuCisgICAgICAgICAgICBwbGF0Zm9ybXMgPSBzZWxmLkJB
U0VfUExBVEZPUk1TCisKKyAgICAgICAgcmV0dXJuIChwbGF0Zm9ybXMsIGJ1aWxkX3R5cGVzLCBv
dGhlcl9vcHRpb25zKQorCisgICAgZGVmIF9BcHBseVVwZGF0ZXNUb1Jlc3VsdHMoc2VsZiwgdGVz
dCwgcmVzdWx0cywgdXBkYXRlX2pzb24sIGV4cGVjdGF0aW9ucywKKyAgICAgICAgb3RoZXJfb3B0
aW9ucyk6CisgICAgICAgICIiIkFwcGxpZXMgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgSlNPTiB0byB0
aGUgZXhpc3RpbmcgcmVzdWx0cyBpbgorICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiBUaGUgdGVzdCB0byB1cGRhdGUuCisgICAgICAgICAg
cmVzdWx0czogVGhlIHJlc3VsdHMgb2JqZWN0IHRvIHVwZGF0ZS4KKyAgICAgICAgICB1cGRhdGVf
anNvbjogVGhlIHBhcnNlZCBKU09OIG9iamVjdCB3aXRoIHRoZSB1cGRhdGVzLgorICAgICAgICAg
IGV4cGVjdGF0aW9uczogVGhlIGV4aXN0aW5nIGV4cGVjdGF0b25zIGZvciB0aGlzIHRlc3QuCisg
ICAgICAgICAgb3RoZXJfb3B0aW9uczogVGhlIGV4aXN0aW5nIG1vZGlmaWVycyBmb3IgdGhpcyB0
ZXN0CisgICAgICAgICAgICAgIGV4Y2x1ZGluZyBwbGF0Zm9ybXMgYW5kIGJ1aWxkX3R5cGVzLgor
ICAgICAgICAiIiIKKyAgICAgICAgdXBkYXRlcyA9IHVwZGF0ZV9qc29uW3Rlc3RdCisgICAgICAg
IGZvciBidWlsZF9pbmZvIGluIHVwZGF0ZXM6CisgICAgICAgICAgICBwbGF0Zm9ybSwgYnVpbGRf
dHlwZSA9IGJ1aWxkX2luZm8ubG93ZXIoKS5zcGxpdCgnICcpCisKKyAgICAgICAgICAgICMgSWYg
dGhlIHBsYXRmb3JtL2J1aWxkX3R5cGUgaXMgbm90IGN1cnJlbnRseSBsaXN0ZWQgZm9yIHRoZSB0
ZXN0LAorICAgICAgICAgICAgIyBza2lwIGl0IGFzIHRoaXMgcGxhdGZvcm0vYnVpbGRfdHlwZSBt
YXkgYmUgbGlzdGVkIGluIGFub3RoZXIKKyAgICAgICAgICAgICMgbGluZS4KKyAgICAgICAgICAg
IGlmIHBsYXRmb3JtIG5vdCBpbiByZXN1bHRzIG9yIGJ1aWxkX3R5cGUgbm90IGluIHJlc3VsdHNb
cGxhdGZvcm1dOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHRoZXNl
X3Jlc3VsdHMgPSByZXN1bHRzW3BsYXRmb3JtXVtidWlsZF90eXBlXQorICAgICAgICAgICAgdGhl
c2VfdXBkYXRlcyA9IHVwZGF0ZXNbYnVpbGRfaW5mb10KKyAgICAgICAgICAgIHRoZXNlX2V4cGVj
dGF0aW9ucyA9IHRoZXNlX3Jlc3VsdHMuZXhwZWN0YXRpb25zCisgICAgICAgICAgICB0aGVzZV9v
cHRpb25zID0gdGhlc2VfcmVzdWx0cy5vcHRpb25zCisKKyAgICAgICAgICAgIHNlbGYuX0FwcGx5
RXh0cmFVcGRhdGVzKHRoZXNlX3VwZGF0ZXMsIHRoZXNlX29wdGlvbnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGVzZV9leHBlY3RhdGlvbnMpCisgICAgICAgICAgICBz
ZWxmLl9BcHBseU1pc3NpbmdVcGRhdGVzKHRlc3QsIHRoZXNlX3VwZGF0ZXMsIHRoZXNlX29wdGlv
bnMsCisgICAgICAgICAgICAgICAgdGhlc2VfZXhwZWN0YXRpb25zKQorCisgICAgZGVmIF9BcHBs
eUV4dHJhVXBkYXRlcyhzZWxmLCB1cGRhdGVzLCBvcHRpb25zLCBleHBlY3RhdGlvbnMpOgorICAg
ICAgICAiIiJSZW1vdmUgZXh0cmFuZW91cyBleHBlY3RhdGlvbnMvb3B0aW9ucyBpbiB0aGUgdXBk
YXRlcyBvYmplY3QgdG8KKyAgICAgICAgdGhlIGdpdmVuIG9wdGlvbnMvZXhwZWN0YXRpb25zIGxp
c3RzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgImV4dHJhIiBub3QgaW4gdXBkYXRlczoKKyAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgIGl0ZW1zID0gdXBkYXRlc1siZXh0cmEiXS5sb3dl
cigpLnNwbGl0KCcgJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICBp
ZiBpdGVtIGluIHNlbGYuRVhQRUNUQVRJT05TOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gaW4g
ZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMucmVtb3ZlKGl0
ZW0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gaW4gb3B0aW9u
czoKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZW1vdmUoaXRlbSkKKworICAgIGRlZiBf
QXBwbHlNaXNzaW5nVXBkYXRlcyhzZWxmLCB0ZXN0LCB1cGRhdGVzLCBvcHRpb25zLCBleHBlY3Rh
dGlvbnMpOgorICAgICAgICAiIiJBcHBseSBhbiBhZGRpdGlvbiBleHBlY3RhdGlvbnMvb3B0aW9u
cyBpbiB0aGUgdXBkYXRlcyBvYmplY3QgdG8KKyAgICAgICAgdGhlIGdpdmVuIG9wdGlvbnMvZXhw
ZWN0YXRpb25zIGxpc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgIm1pc3NpbmciIG5vdCBp
biB1cGRhdGVzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXRlbXMgPSB1cGRhdGVz
WyJtaXNzaW5nIl0ubG93ZXIoKS5zcGxpdCgnICcpCisgICAgICAgIGZvciBpdGVtIGluIGl0ZW1z
OgorICAgICAgICAgICAgaWYgaXRlbSA9PSAnb3RoZXInOgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisKKyAgICAgICAgICAgICMgRG9uJ3QgYWRkIFRJTUVPVVQgdG8gU0xPVyB0ZXN0cy4gQXV0
b21hdGluZyB0aGF0IGlzIHRvbworICAgICAgICAgICAgIyBjb21wbGljYXRlZCBpbnN0ZWFkLCBw
cmludCBvdXQgdGVzdHMgdGhhdCBuZWVkIG1hbnVhbCBhdHRlbnRpb24uCisgICAgICAgICAgICBp
ZiAoKGl0ZW0gPT0gInRpbWVvdXQiIGFuZAorICAgICAgICAgICAgICAgICAoInNsb3ciIGluIG9w
dGlvbnMgb3IgInNsb3ciIGluIGl0ZW1zKSkgb3IKKyAgICAgICAgICAgICAgICAoaXRlbSA9PSAi
c2xvdyIgYW5kCisgICAgICAgICAgICAgICAgICgidGltZW91dCIgaW4gZXhwZWN0YXRpb25zIG9y
ICJ0aW1lb3V0IiBpbiBpdGVtcykpKToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIk5F
RURTIE1BTlVBTCBBVFRFTlRJT046ICVzIG1heSBuZWVkICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRvIGJlIG1hcmtlZCBUSU1FT1VUIG9yIFNMT1cuIiAlIHRlc3QpCisgICAgICAg
ICAgICBlbGlmIGl0ZW0gaW4gc2VsZi5FWFBFQ1RBVElPTlM6CisgICAgICAgICAgICAgICAgaWYg
aXRlbSBub3QgaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlv
bnMuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGlmICgiZmFpbCIgaW4gZXhwZWN0
YXRpb25zIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0gPT0gImltYWdlK3RleHQi
IG9yIGl0ZW0gPT0gImltYWdlIiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPT0g
InRleHQiKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMucmVtb3ZlKCJm
YWlsIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4g
b3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoaXRlbSkKKworICAg
IGRlZiBfQXBwZW5kUGxhdGZvcm0oc2VsZiwgaXRlbSwgYnVpbGRfdHlwZSwgcGxhdGZvcm0pOgor
ICAgICAgICAiIiJBcHBlbmRzIHRoZSBnaXZlIGJ1aWxkX3R5cGUgYW5kIHBsYXRmb3JtIHRvIHRo
ZSBCdWlsZEluZm8gaXRlbS4KKyAgICAgICAgIiIiCisgICAgICAgIGJ1aWxkX2luZm8gPSBpdGVt
LmJ1aWxkX2luZm8KKyAgICAgICAgaWYgYnVpbGRfdHlwZSBub3QgaW4gYnVpbGRfaW5mbzoKKyAg
ICAgICAgICAgIGJ1aWxkX2luZm9bYnVpbGRfdHlwZV0gPSBbXQorICAgICAgICBidWlsZF9pbmZv
W2J1aWxkX3R5cGVdLmFwcGVuZChwbGF0Zm9ybSkKKworICAgIGRlZiBfR2V0VXBkYXRlc0RlZHVw
ZWRCeU1hdGNoaW5nT3B0aW9uc0FuZEV4cGVjdGF0aW9ucyhzZWxmLCByZXN1bHRzKToKKyAgICAg
ICAgIiIiQ29udmVydHMgdGhlIHJlc3VsdHMsIHdoaWNoIGlzCisgICAgICAgIHJlc3VsdHNbcGxh
dGZvcm1zXVtidWlsZF90eXBlXSA9IE9wdGlvbnNBbmRFeHBlY3RhdGlvbnNIb2xkZXIKKyAgICAg
ICAgdG8gQnVpbGRJbmZvIG9iamVjdHMsIHdoaWNoIGRlZHVwZXMgcGxhdGZvcm0vYnVpbGRfdHlw
ZXMgdGhhdAorICAgICAgICBoYXZlIHRoZSBzYW1lIGV4cGVjdGF0aW9ucyBhbmQgb3B0aW9ucy4K
KyAgICAgICAgIiIiCisgICAgICAgIHVwZGF0ZXMgPSBbXQorICAgICAgICBmb3IgcGxhdGZvcm0g
aW4gcmVzdWx0czoKKyAgICAgICAgICAgIGZvciBidWlsZF90eXBlIGluIHJlc3VsdHNbcGxhdGZv
cm1dOgorICAgICAgICAgICAgICAgIG9wdGlvbnMgPSByZXN1bHRzW3BsYXRmb3JtXVtidWlsZF90
eXBlXS5vcHRpb25zCisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zID0gcmVzdWx0c1twbGF0
Zm9ybV1bYnVpbGRfdHlwZV0uZXhwZWN0YXRpb25zCisKKyAgICAgICAgICAgICAgICBmb3VuZF9t
YXRjaCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIHVwZGF0ZSBpbiB1cGRhdGVzOgorICAg
ICAgICAgICAgICAgICAgICBpZiAodXBkYXRlLm9wdGlvbnMgPT0gb3B0aW9ucyBhbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVwZGF0ZS5leHBlY3RhdGlvbnMgPT0gZXhwZWN0YXRpb25zKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX0FwcGVuZFBsYXRmb3JtKHVwZGF0ZSwgYnVp
bGRfdHlwZSwgcGxhdGZvcm0pCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9tYXRjaCA9
IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBp
ZiBmb3VuZF9tYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgICAgIHVwZGF0ZSA9IEJ1aWxkSW5mbyhvcHRpb25zLCBleHBlY3RhdGlvbnMsIHt9KQorICAg
ICAgICAgICAgICAgIHNlbGYuX0FwcGVuZFBsYXRmb3JtKHVwZGF0ZSwgYnVpbGRfdHlwZSwgcGxh
dGZvcm0pCisgICAgICAgICAgICAgICAgdXBkYXRlcy5hcHBlbmQodXBkYXRlKQorCisgICAgICAg
IHJldHVybiBzZWxmLl9Sb3VuZFVwRmxha3lVcGRhdGVzKHVwZGF0ZXMpCisKKyAgICBkZWYgX0hh
c01ham9yaXR5QnVpbGRDb25maWd1cmF0aW9ucyhzZWxmLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZTIp
OgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgdGhlIGNhbmRpZGF0ZSBCdWlsZEluZm8gcmVw
cmVzZW50cyBhbGwgYnVpbGQKKyAgICAgICAgY29uZmlndXJhdGlvbnMgZXhjZXB0IHRoZSBzaW5n
bGUgb25lIGxpc3RlZCBpbiBjYW5kaWRhdGUyLgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYSB0
ZXN0IGlzIEZBSUwgVElNRU9VVCBvbiBhbGwgYm90cyBleGNlcHQgV0lOLVJlbGVhc2UsCisgICAg
ICAgIHdoZXJlIGl0IGlzIGp1c3QgRkFJTC4gT3IgaWYgYSB0ZXN0IGlzIEZBSUwgVElNRU9VVCBv
biBNQUMtUmVsZWFzZSwKKyAgICAgICAgTWFjLURlYnVnIGFuZCBMaW51eC1SZWxlYXNlLCBidXQg
b25seSBGQUlMIG9uIExpbnV4LURlYnVnLgorICAgICAgICAiIiIKKyAgICAgICAgYnVpbGRfdHlw
ZXMgPSBzZWxmLkJVSUxEX1RZUEVTWzpdCisgICAgICAgIGJ1aWxkX2luZm8gPSBjYW5kaWRhdGUu
YnVpbGRfaW5mbworICAgICAgICBpZiAicmVsZWFzZSIgbm90IGluIGJ1aWxkX2luZm8gb3IgImRl
YnVnIiBub3QgaW4gYnVpbGRfaW5mbzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAg
ICAgcmVsZWFzZV9zZXQgPSBzZXQoYnVpbGRfaW5mb1sicmVsZWFzZSJdKQorICAgICAgICBkZWJ1
Z19zZXQgPSBzZXQoYnVpbGRfaW5mb1siZGVidWciXSkKKyAgICAgICAgaWYgbGVuKHJlbGVhc2Vf
c2V0IC0gZGVidWdfc2V0KSBpcyAxOgorICAgICAgICAgICAgZnVsbF9zZXQgPSByZWxlYXNlX3Nl
dAorICAgICAgICAgICAgcGFydGlhbF9zZXQgPSBkZWJ1Z19zZXQKKyAgICAgICAgICAgIG5lZWRl
ZF9idWlsZF90eXBlID0gImRlYnVnIgorICAgICAgICBlbGlmIGxlbihkZWJ1Z19zZXQgLSByZWxl
YXNlX3NldCkgaXMgMToKKyAgICAgICAgICAgIGZ1bGxfc2V0ID0gZGVidWdfc2V0CisgICAgICAg
ICAgICBwYXJ0aWFsX3NldCA9IHJlbGVhc2Vfc2V0CisgICAgICAgICAgICBuZWVkZWRfYnVpbGRf
dHlwZSA9ICJyZWxlYXNlIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICBidWlsZF9pbmZvMiA9IGNhbmRpZGF0ZTIuYnVpbGRfaW5mbworICAgICAgICBp
ZiBuZWVkZWRfYnVpbGRfdHlwZSBub3QgaW4gYnVpbGRfaW5mbzI6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIGJ1aWxkX3R5cGUgPSBOb25lCisgICAgICAgIGZvciB0aGlzX2J1
aWxkX3R5cGUgaW4gYnVpbGRfaW5mbzI6CisgICAgICAgICAgICAjIENhbiBvbmx5IHdvcmsgaWYg
dGhpcyBjYW5kaWRhdGUgaGFzIG9uZSBidWlsZF90eXBlLgorICAgICAgICAgICAgaWYgYnVpbGRf
dHlwZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgYnVpbGRfdHlw
ZSA9IHRoaXNfYnVpbGRfdHlwZQorCisgICAgICAgIGlmIHNldChidWlsZF9pbmZvMltuZWVkZWRf
YnVpbGRfdHlwZV0pID09IGZ1bGxfc2V0IC0gcGFydGlhbF9zZXQ6CisgICAgICAgICAgICByZXR1
cm4gZnVsbF9zZXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgX1JvdW5kVXBGbGFreVVwZGF0ZXMoc2VsZiwgdXBkYXRlcyk6CisgICAgICAgICIiIkNv
bnNvbGlkYXRlcyB0aGUgdXBkYXRlcyBpbnRvIG9uZSB1cGRhdGUgaWYgNS82IHJlc3VsdHMgYXJl
CisgICAgICAgIGZsYWt5IGFuZCB0aGUgaXMgYSBzdWJzZXQgb2YgdGhlIGZsYWt5IHJlc3VsdHMg
NnRoIGp1c3Qgbm90CisgICAgICAgIGhhcHBlbmluZyB0byBmbGFrZSBvciAzLzQgcmVzdWx0cyBh
cmUgZmxha3kgYW5kIHRoZSA0dGggaGFzIGEKKyAgICAgICAgc3Vic2V0IG9mIHRoZSBmbGFreSBy
ZXN1bHRzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKHVwZGF0ZXMpIGlzIG5vdCAyOgor
ICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZXMKKworICAgICAgICBpdGVtMSwgaXRlbTIgPSB1cGRh
dGVzCisgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgY2FuZGlkYXRlX3BsYXRmb3Jt
cyA9IHNlbGYuX0hhc01ham9yaXR5QnVpbGRDb25maWd1cmF0aW9ucyhpdGVtMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpdGVtMikKKyAgICAgICAgaWYgY2FuZGlkYXRlX3BsYXRmb3JtczoKKyAgICAgICAgICAgIGNh
bmRpZGF0ZSA9IGl0ZW0xCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYW5kaWRhdGVfcGxh
dGZvcm1zID0gc2VsZi5fSGFzTWFqb3JpdHlCdWlsZENvbmZpZ3VyYXRpb25zKGl0ZW0xLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtMikKKyAgICAgICAgICAgIGlmIGNhbmRpZGF0ZV9wbGF0Zm9ybXM6Cisg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gaXRlbTIKKworICAgICAgICBpZiBjYW5kaWRhdGU6
CisgICAgICAgICAgICBvcHRpb25zMSA9IHNldChpdGVtMS5vcHRpb25zKQorICAgICAgICAgICAg
b3B0aW9uczIgPSBzZXQoaXRlbTIub3B0aW9ucykKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uczEg
PSBzZXQoaXRlbTEuZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgaWYgbm90IGxlbihleHBlY3Rh
dGlvbnMxKToKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMxLmFkZCgicGFzcyIpCisgICAg
ICAgICAgICBleHBlY3RhdGlvbnMyID0gc2V0KGl0ZW0yLmV4cGVjdGF0aW9ucykKKyAgICAgICAg
ICAgIGlmIG5vdCBsZW4oZXhwZWN0YXRpb25zMik6CisgICAgICAgICAgICAgICAgZXhwZWN0YXRp
b25zMi5hZGQoInBhc3MiKQorCisgICAgICAgICAgICBvcHRpb25zX3VuaW9uID0gb3B0aW9uczEg
fCBvcHRpb25zMgorICAgICAgICAgICAgZXhwZWN0YXRpb25zX3VuaW9uID0gZXhwZWN0YXRpb25z
MSB8IGV4cGVjdGF0aW9uczIKKyAgICAgICAgICAgICMgSWYgdGhlIG9wdGlvbnMgYW5kIGV4cGVj
dGF0aW9ucyBhcmUgZXF1YWwgdG8gdGhlaXIgcmVzcGVjdGl2ZQorICAgICAgICAgICAgIyB1bmlv
bnMgdGhlbiB3ZSBjYW4gcm91bmQgdXAgdG8gaW5jbHVkZSB0aGUgNnRoIHBsYXRmb3JtLgorICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBpdGVtMSBhbmQgb3B0aW9uczEgPT0gb3B0aW9uc191
bmlvbiBhbmQKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMxID09IGV4cGVjdGF0aW9uc191
bmlvbiBhbmQgbGVuKGV4cGVjdGF0aW9uczIpIG9yCisgICAgICAgICAgICAgICAgY2FuZGlkYXRl
ID09IGl0ZW0yIGFuZCBvcHRpb25zMiA9PSBvcHRpb25zX3VuaW9uIGFuZAorICAgICAgICAgICAg
ICAgIGV4cGVjdGF0aW9uczIgPT0gZXhwZWN0YXRpb25zX3VuaW9uIGFuZCBsZW4oZXhwZWN0YXRp
b25zMSkpOgorICAgICAgICAgICAgICAgIGZvciBidWlsZF90eXBlIGluIHNlbGYuQlVJTERfVFlQ
RVM6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5idWlsZF9pbmZvW2J1aWxkX3R5cGVd
ID0gbGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZV9wbGF0Zm9ybXMpCisg
ICAgICAgICAgICAgICAgdXBkYXRlcyA9IFtjYW5kaWRhdGVdCisgICAgICAgIHJldHVybiB1cGRh
dGVzCisKKyAgICBkZWYgVXBkYXRlQmFzZWRPbkpTT04oc2VsZiwgdXBkYXRlX2pzb24pOgorICAg
ICAgICAiIiJVcGRhdGVzIHRoZSBleHBlY3RhdGlvbnMgYmFzZWQgb24gdGhlIHVwZGF0ZV9qc29u
LCB3aGljaCBpcyBvZiB0aGUKKyAgICAgICAgZm9sbG93aW5nIGZvcm06CisgICAgICAgIHsiMS5o
dG1sIjogeworICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIkZBSUwiLCAibWlzc2lu
ZyIsICJQQVNTIn0sCisgICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0K
KyAgICAgICAgfX0KKyAgICAgICAgIiIiCisgICAgICAgIG91dHB1dCA9IFtdCisKKyAgICAgICAg
Y29tbWVudF9saW5lcyA9IFtdCisgICAgICAgIHJlbW92ZWRfdGVzdF9vbl9wcmV2aW91c19saW5l
ID0gRmFsc2UKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9H
ZXRJdGVyYWJsZUV4cGVjdGF0aW9ucygpOgorICAgICAgICAgICAgbGluZW5vICs9IDEKKyAgICAg
ICAgICAgIHRlc3QsIG9wdGlvbnMsIGV4cGVjdGF0aW9ucyA9IHNlbGYuUGFyc2VFeHBlY3RhdGlv
bnNMaW5lKGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8pCisKKyAgICAgICAgICAgICMgSWYgdGhl
cmUgYXJlIG5vIHVwZGF0ZXMgZm9yIHRoaXMgdGVzdCwgdGhlbiBvdXRwdXQgdGhlIGxpbmUKKyAg
ICAgICAgICAgICMgdW5tb2RpZmllZC4KKyAgICAgICAgICAgIGlmICh0ZXN0IG5vdCBpbiB1cGRh
dGVfanNvbik6CisgICAgICAgICAgICAgICAgaWYgdGVzdDoKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fV3JpdGVDb21wbGV0ZWRMaW5lcyhvdXRwdXQsIGNvbW1lbnRfbGluZXMsIGxpbmUpCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZF90ZXN0
X29uX3ByZXZpb3VzX2xpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkX3Rlc3Rf
b25fcHJldmlvdXNfbGluZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50
X2xpbmVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgY29tbWVudF9saW5lcy5hcHBlbmQobGlu
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBwbGF0Zm9ybXMsIGJ1
aWxkX3R5cGVzLCBvdGhlcl9vcHRpb25zID0gXAorICAgICAgICAgICAgICAgIHNlbGYuX0dldEJ1
aWxkVHlwZXNBbmRQbGF0Zm9ybXMob3B0aW9ucykKKworICAgICAgICAgICAgdXBkYXRlcyA9IHVw
ZGF0ZV9qc29uW3Rlc3RdCisgICAgICAgICAgICBoYXNfdXBkYXRlc19mb3JfdGhpc19saW5lID0g
RmFsc2UKKyAgICAgICAgICAgIGZvciBidWlsZF9pbmZvIGluIHVwZGF0ZXM6CisgICAgICAgICAg
ICAgICAgcGxhdGZvcm0sIGJ1aWxkX3R5cGUgPSBidWlsZF9pbmZvLmxvd2VyKCkuc3BsaXQoJyAn
KQorICAgICAgICAgICAgICAgIGlmIHBsYXRmb3JtIGluIHBsYXRmb3JtcyBhbmQgYnVpbGRfdHlw
ZSBpbiBidWlsZF90eXBlczoKKyAgICAgICAgICAgICAgICAgICAgaGFzX3VwZGF0ZXNfZm9yX3Ro
aXNfbGluZSA9IFRydWUKKworICAgICAgICAgICAgIyBJZiB0aGUgdXBkYXRlcyBmb3IgdGhpcyB0
ZXN0IGRvbid0IGFwcGx5IGZvciB0aGUgcGxhdGZvcm1zIC8KKyAgICAgICAgICAgICMgYnVpbGQt
dHlwZXMgbGlzdGVkIGluIHRoaXMgbGluZSwgdGhlbiBvdXRwdXQgdGhlIGxpbmUgdW5tb2RpZmll
ZC4KKyAgICAgICAgICAgIGlmIG5vdCBoYXNfdXBkYXRlc19mb3JfdGhpc19saW5lOgorICAgICAg
ICAgICAgICAgIHNlbGYuX1dyaXRlQ29tcGxldGVkTGluZXMob3V0cHV0LCBjb21tZW50X2xpbmVz
LCBsaW5lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlc3VsdHMg
PSB7fQorICAgICAgICAgICAgZm9yIHBsYXRmb3JtIGluIHBsYXRmb3JtczoKKyAgICAgICAgICAg
ICAgICByZXN1bHRzW3BsYXRmb3JtXSA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGJ1aWxkX3R5
cGUgaW4gYnVpbGRfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbcGxhdGZvcm1d
W2J1aWxkX3R5cGVdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc0FuZEV4cGVj
dGF0aW9uc0hvbGRlcihvdGhlcl9vcHRpb25zWzpdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnNbOl0pCisKKyAgICAgICAg
ICAgIHNlbGYuX0FwcGx5VXBkYXRlc1RvUmVzdWx0cyh0ZXN0LCByZXN1bHRzLCB1cGRhdGVfanNv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMs
IG90aGVyX29wdGlvbnMpCisKKyAgICAgICAgICAgIGRlZHVwZWRfdXBkYXRlcyA9IFwKKyAgICAg
ICAgICAgICAgICBzZWxmLl9HZXRVcGRhdGVzRGVkdXBlZEJ5TWF0Y2hpbmdPcHRpb25zQW5kRXhw
ZWN0YXRpb25zKAorICAgICAgICAgICAgICAgICAgICByZXN1bHRzKQorICAgICAgICAgICAgcmVt
b3ZlZF90ZXN0X29uX3ByZXZpb3VzX2xpbmUgPSBub3Qgc2VsZi5fV3JpdGVVcGRhdGVzKG91dHB1
dCwKKyAgICAgICAgICAgICAgICBjb21tZW50X2xpbmVzLCB0ZXN0LCBkZWR1cGVkX3VwZGF0ZXMp
CisgICAgICAgICMgQXBwZW5kIGFueSBjb21tZW50L3doaXRlc3BhY2UgbGluZXMgYXQgdGhlIGVu
ZCBvZiB0ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAgICAgb3V0cHV0LmV4dGVuZChjb21tZW50X2xp
bmVzKQorICAgICAgICByZXR1cm4gIiIuam9pbihvdXRwdXQpCisKKyAgICBkZWYgX1dyaXRlVXBk
YXRlcyhzZWxmLCBvdXRwdXQsIGNvbW1lbnRfbGluZXMsIHRlc3QsIHVwZGF0ZXMpOgorICAgICAg
ICAiIiJXcml0ZXMgdGhlIHVwZGF0ZXMgdG8gdGhlIG91dHB1dC4KKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBvdXRwdXQ6IExpc3QgdG8gYXBwZW5kIHVwZGF0ZXMgdG8uCisgICAgICAgICAgY29t
bWVudF9saW5lczogQ29tbWVudHMgdGhhdCBjb21lIGJlZm9yZSB0aGlzIHRlc3QgdGhhdCBzaG91
bGQgYmUKKyAgICAgICAgICAgICAgcHJlcGVuZGluZyBpZmYgYW55IHRlc3RzIGxpbmVzIGFyZSB3
cml0dGVuIG91dC4KKyAgICAgICAgICB0ZXN0OiBUaGUgdGVzdCBiZWluZyB1cGRhdGluZy4KKyAg
ICAgICAgICB1cGRhdGVzOiBMaXN0IG9mIEJ1aWxkSW5mbyBpbnN0YW5jZXMgdGhhdCByZXByZXNl
bnQgdGhlIGZpbmFsIHZhbHVlcworICAgICAgICAgICAgICBmb3IgdGhpcyB0ZXN0IGxpbmUuLgor
ICAgICAgICAiIiIKKyAgICAgICAgd3JvdGVfYW55X2xpbmVzID0gRmFsc2UKKyAgICAgICAgZm9y
IHVwZGF0ZSBpbiB1cGRhdGVzOgorICAgICAgICAgICAgb3B0aW9ucyA9IHVwZGF0ZS5vcHRpb25z
CisgICAgICAgICAgICBleHBlY3RhdGlvbnMgPSB1cGRhdGUuZXhwZWN0YXRpb25zCisKKyAgICAg
ICAgICAgIGhhc19tZWFuaW5nZnVsX21vZGlmaWVyID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBv
cHRpb24gaW4gb3B0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBvcHRpb24gaW4gc2VsZi5NT0RJ
RklFUlM6CisgICAgICAgICAgICAgICAgICAgIGhhc19tZWFuaW5nZnVsX21vZGlmaWVyID0gVHJ1
ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBoYXNfbm9uX3Bhc3Nf
ZXhwZWN0YXRpb24gPSBGYWxzZQorICAgICAgICAgICAgZm9yIGV4cGVjdGF0aW9uIGluIGV4cGVj
dGF0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBleHBlY3RhdGlvbiAhPSAicGFzcyI6CisgICAg
ICAgICAgICAgICAgICAgIGhhc19ub25fcGFzc19leHBlY3RhdGlvbiA9IFRydWUKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBJZiB0aGlzIHRlc3QgaXMgb25seSBs
ZWZ0IHdpdGggcGxhdGZvcm0sIGJ1aWxkX3R5cGUsIGJ1ZyBudW1iZXIKKyAgICAgICAgICAgICMg
YW5kIGEgUEFTUyBvciBubyBleHBlY3RhdGlvbiwgdGhlbiB3ZSBjYW4gZXhjbHVkZSBpdCBmcm9t
CisgICAgICAgICAgICAjIHRlc3RfZXhwZWN0YXRpb25zLgorICAgICAgICAgICAgaWYgbm90IGhh
c19tZWFuaW5nZnVsX21vZGlmaWVyIGFuZCBub3QgaGFzX25vbl9wYXNzX2V4cGVjdGF0aW9uOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCBoYXNfbm9uX3Bh
c3NfZXhwZWN0YXRpb246CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zID0gWyJwYXNzIl0K
KworICAgICAgICAgICAgbWlzc2luZ19idWlsZF90eXBlcyA9IGxpc3Qoc2VsZi5CVUlMRF9UWVBF
UykKKyAgICAgICAgICAgIHNlbnRpbmFsID0gTm9uZQorICAgICAgICAgICAgZm9yIGJ1aWxkX3R5
cGUgaW4gdXBkYXRlLmJ1aWxkX2luZm86CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbnRpbmFs
OgorICAgICAgICAgICAgICAgICAgICBzZW50aW5hbCA9IHVwZGF0ZS5idWlsZF9pbmZvW2J1aWxk
X3R5cGVdCisgICAgICAgICAgICAgICAgIyBSZW1vdmUgYnVpbGRfdHlwZXMgd2hlcmUgdGhlIGxp
c3Qgb2YgcGxhdGZvcm1zIGlzIGVxdWFsLgorICAgICAgICAgICAgICAgIGlmIHNlbnRpbmFsID09
IHVwZGF0ZS5idWlsZF9pbmZvW2J1aWxkX3R5cGVdOgorICAgICAgICAgICAgICAgICAgICBtaXNz
aW5nX2J1aWxkX3R5cGVzLnJlbW92ZShidWlsZF90eXBlKQorCisgICAgICAgICAgICBoYXNfYWxs
X2J1aWxkX3R5cGVzID0gbm90IGxlbihtaXNzaW5nX2J1aWxkX3R5cGVzKQorICAgICAgICAgICAg
aWYgaGFzX2FsbF9idWlsZF90eXBlczoKKyAgICAgICAgICAgICAgICBzZWxmLl9Xcml0ZUxpbmUo
b3V0cHV0LCBjb21tZW50X2xpbmVzLCB1cGRhdGUsIG9wdGlvbnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkX3R5cGUsIGV4cGVjdGF0aW9ucywgdGVzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2FsbF9idWlsZF90eXBlcykKKyAgICAgICAgICAg
ICAgICB3cm90ZV9hbnlfbGluZXMgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIGZvciBidWlsZF90eXBlIGluIHVwZGF0ZS5idWlsZF9pbmZvOgorICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9Xcml0ZUxpbmUob3V0cHV0LCBjb21tZW50X2xpbmVzLCB1cGRhdGUsIG9w
dGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF90eXBlLCBl
eHBlY3RhdGlvbnMsIHRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YXNfYWxsX2J1aWxkX3R5cGVzKQorICAgICAgICAgICAgICAgICAgICB3cm90ZV9hbnlfbGluZXMg
PSBUcnVlCisKKyAgICAgICAgcmV0dXJuIHdyb3RlX2FueV9saW5lcworCisgICAgZGVmIF9Xcml0
ZUNvbXBsZXRlZExpbmVzKHNlbGYsIG91dHB1dCwgY29tbWVudF9saW5lcywgdGVzdF9saW5lPU5v
bmUpOgorICAgICAgICAiIiJXcml0ZXMgdGhlIGNvbW1lbnRfbGluZXMgYW5kIHRlc3RfbGluZSB0
byB0aGUgb3V0cHV0IGFuZCBlbXB0aWVzCisgICAgICAgIG91dCB0aGUgY29tbWVudF9saW5lcy4i
IiIKKyAgICAgICAgb3V0cHV0LmV4dGVuZChjb21tZW50X2xpbmVzKQorICAgICAgICBkZWwgY29t
bWVudF9saW5lc1s6XQorICAgICAgICBpZiB0ZXN0X2xpbmU6CisgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKHRlc3RfbGluZSkKKworICAgIGRlZiBfR2V0UGxhdGZvcm0oc2VsZiwgcGxhdGZvcm1z
KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGxhdGZvcm0gdG8gdXNlLiBJZiBhbGwgcGxhdGZv
cm1zIGFyZSBsaXN0ZWQsIHRoZW4KKyAgICAgICAgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgYXMg
dGhhdCdzIHdoYXQgd2Ugd2FudCB0byBsaXN0IGluCisgICAgICAgIHRlc3RfZXhwZWN0YXRpb25z
LnR4dC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHBsYXRmb3JtczogTGlzdCBvZiBsb3dl
ci1jYXNlIHBsYXRmb3JtIG5hbWVzLgorICAgICAgICAiIiIKKyAgICAgICAgcGxhdGZvcm1zLnNv
cnQoKQorICAgICAgICBpZiBwbGF0Zm9ybXMgPT0gbGlzdChzZWxmLkJBU0VfUExBVEZPUk1TKToK
KyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
ICIgIi5qb2luKHBsYXRmb3JtcykKKworICAgIGRlZiBfV3JpdGVMaW5lKHNlbGYsIG91dHB1dCwg
Y29tbWVudF9saW5lcywgdXBkYXRlLCBvcHRpb25zLCBidWlsZF90eXBlLAorICAgICAgICBleHBl
Y3RhdGlvbnMsIHRlc3QsIGV4Y2x1ZGVfYnVpbGRfdHlwZSk6CisgICAgICAgICIiIldyaXRlcyBh
IHRlc3RfZXhwZWN0YXRpb25zLnR4dCBsaW5lLgorICAgICAgICBBcmdzOgorICAgICAgICAgIG91
dHB1dDogTGlzdCB0byBhcHBlbmQgbmV3IGxpbmVzIHRvLgorICAgICAgICAgIGNvbW1lbnRfbGlu
ZXM6IExpc3Qgb2YgbGluZXMgdG8gcHJlcGVuZCBiZWZvcmUgdGhlIG5ldyBsaW5lLgorICAgICAg
ICAgIHVwZGF0ZTogVGhlIHVwZGF0ZSBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBsaW5l
ID0gb3B0aW9uc1s6XQorCisgICAgICAgIHBsYXRmb3JtcyA9IHNlbGYuX0dldFBsYXRmb3JtKHVw
ZGF0ZS5idWlsZF9pbmZvW2J1aWxkX3R5cGVdKQorICAgICAgICBpZiBwbGF0Zm9ybXM6CisgICAg
ICAgICAgICBsaW5lLmFwcGVuZChwbGF0Zm9ybXMpCisgICAgICAgIGlmIG5vdCBleGNsdWRlX2J1
aWxkX3R5cGU6CisgICAgICAgICAgICBsaW5lLmFwcGVuZChidWlsZF90eXBlKQorCisgICAgICAg
IGxpbmUgPSBbeC51cHBlcigpIGZvciB4IGluIGxpbmVdCisgICAgICAgIGV4cGVjdGF0aW9ucyA9
IFt4LnVwcGVyKCkgZm9yIHggaW4gZXhwZWN0YXRpb25zXQorCisgICAgICAgIGxpbmUgPSBsaW5l
ICsgWyI6IiwgdGVzdCwgIj0iXSArIGV4cGVjdGF0aW9ucworICAgICAgICBzZWxmLl9Xcml0ZUNv
bXBsZXRlZExpbmVzKG91dHB1dCwgY29tbWVudF9saW5lcywgIiAiLmpvaW4obGluZSkgKyAiXG4i
KQorCisKK2RlZiBtYWluKCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5n
LklORk8sCisgICAgICAgIGZvcm1hdD0nJShtZXNzYWdlKXMnKQorCisgICAgdXBkYXRlcyA9IHNp
bXBsZWpzb24ubG9hZChvcGVuKHN5cy5hcmd2WzFdKSkKKworICAgIHBhdGhfdG9fZXhwZWN0YXRp
b25zID0gcGF0aF91dGlscy5HZXRBYnNvbHV0ZVBhdGgoCisgICAgICAgIG9zLnBhdGguZGlybmFt
ZShzeXMuYXJndlswXSkpCisgICAgcGF0aF90b19leHBlY3RhdGlvbnMgPSBvcy5wYXRoLmpvaW4o
cGF0aF90b19leHBlY3RhdGlvbnMsCisgICAgICAgICJ0ZXN0X2V4cGVjdGF0aW9ucy50eHQiKQor
CisgICAgb2xkX2V4cGVjdGF0aW9ucyA9IG9wZW4ocGF0aF90b19leHBlY3RhdGlvbnMpLnJlYWQo
KQorICAgIG5ld19leHBlY3RhdGlvbnMgPSBVcGRhdGVFeHBlY3RhdGlvbnMob2xkX2V4cGVjdGF0
aW9ucywgdXBkYXRlcykKKyAgICBvcGVuKHBhdGhfdG9fZXhwZWN0YXRpb25zLCAndycpLndyaXRl
KG5ld19leHBlY3RhdGlvbnMpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgbWFp
bigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy91cGRhdGVfZXhwZWN0YXRpb25zX2Zyb21fZGFzaGJvYXJkX3VuaXR0ZXN0LnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19m
cm9tX2Rhc2hib2FyZF91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xMDIwNTRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZF91bml0
dGVzdC5weQpAQCAtMCwwICsxLDM1MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoYykgMjAwNi0yMDA4IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyIi
IlVuaXR0ZXN0cyB0byBtYWtlIHN1cmUgd2UgZ2VuZXJhdGUgYW5kIHVwZGF0ZSB0aGUgZXhwZWN0
ZWQtKi50eHQgZmlsZXMKK3Byb3Blcmx5IGFmdGVyIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiIiIgor
CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgdXBkYXRl
X2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZAorCisKK2NsYXNzIFVwZGF0ZUV4cGVjdGF0aW9u
c1VuaXR0ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAg
ICAjIFRlc3RzCisKKyAgICBkZWYgdGVzdEtlZXBzVW5tb2RpZmllZExpbmVzKHNlbGYpOgorICAg
ICAgICBleHBlY3RhdGlvbnMgPSAiIiIvLyBFbnN1cmUgY29tbWVudHMgYW5kIG5ld2xpbmVzIGRv
bid0IGdldCBzdHJpcHBlZC4KKyAgICBCVUcxIFNMT1cgOiAxLmh0bWwgPSBQQVNTCisKKyAgICBC
VUcyIDogMi5odG1sID0gRkFJTCBUSU1FT1VUCisgICAgIiIiCisgICAgICAgIGV4cF9yZXN1bHRz
ID0gIiIiLy8gRW5zdXJlIGNvbW1lbnRzIGFuZCBuZXdsaW5lcyBkb24ndCBnZXQgc3RyaXBwZWQu
CisgICAgQlVHMSBTTE9XIDogMS5odG1sID0gUEFTUworCisgICAgQlVHMiA6IDIuaHRtbCA9IEZB
SUwgVElNRU9VVAorICAgICIiIgorCisgICAgICAgIHVwZGF0ZXMgPSBbXQorICAgICAgICBzZWxm
LnVwZGF0ZUV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cF9yZXN1bHRzKQor
CisgICAgZGVmIHRlc3RSZW1vdmVGbGFreUV4cGVjdGF0aW9uKHNlbGYpOgorICAgICAgICBleHBl
Y3RhdGlvbnMgPSAiQlVHMSA6IDEuaHRtbCA9IFRJTUVPVVQgRkFJTFxuIgorICAgICAgICBleHBl
Y3RlZF9yZXN1bHRzID0gIkJVRzEgOiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAgICAgIHVwZGF0
ZXMgPSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsiZXh0cmEiOiAi
RkFJTCJ9LAorICAgICAgICAgICAgIldJTiBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9LAorICAg
ICAgICAgICAgIkxJTlVYIFJFTEVBU0UiOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAg
ICJMSU5VWCBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBSRUxF
QVNFIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTUFDIERFQlVHIjogeyJleHRy
YSI6ICJGQUlMIn19fQorICAgICAgICBzZWxmLnVwZGF0ZUV4cGVjdGF0aW9ucyhleHBlY3RhdGlv
bnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdFJlbW92ZUV4cGVj
dGF0aW9uU2xvd1Rlc3Qoc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIFNMT1cg
OiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSBTTE9X
IDogMS5odG1sID0gUEFTU1xuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAg
ICAgICAgICAiV0lOIFJFTEVBU0UiOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJX
SU4gREVCVUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNF
IjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVggREVCVUciOiB7ImV4dHJh
IjogIkZBSUwifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsiZXh0cmEiOiAiRkFJTCJ9
LAorICAgICAgICAgICAgIk1BQyBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9fX0KKyAgICAgICAg
c2VsZi51cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9y
ZXN1bHRzKQorCisgICAgZGVmIHRlc3RSZW1vdmVFeHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAg
ZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVk
X3Jlc3VsdHMgPSAiIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAgICAg
ICAiV0lOIFJFTEVBU0UiOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJXSU4gREVC
VUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJl
eHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVggREVCVUciOiB7ImV4dHJhIjogIkZB
SUwifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsiZXh0cmEiOiAiRkFJTCJ9LAorICAg
ICAgICAgICAgIk1BQyBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51
cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRz
KQorCisgICAgZGVmIHRlc3RSZW1vdmVFeHBlY3RhdGlvbkZyb21PbmVQbGF0Zm9ybShzZWxmKToK
KyAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAg
IGV4cGVjdGVkX3Jlc3VsdHMgPSAiIiJCVUcxIE1BQyBXSU4gREVCVUcgOiAxLmh0bWwgPSBGQUlM
CisgICAgQlVHMSBSRUxFQVNFIDogMS5odG1sID0gRkFJTAorICAgICIiIgorICAgICAgICB1cGRh
dGVzID0geyIxLmh0bWwiOiB7IkxJTlVYIERFQlVHIjogeyJleHRyYSI6ICJGQUlMIn19fQorICAg
ICAgICBzZWxmLnVwZGF0ZUV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVj
dGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdFJlbW92ZVNsb3coc2VsZik6CisgICAgICAgIGV4
cGVjdGF0aW9ucyA9ICJCVUcxIFNMT1cgOiAxLmh0bWwgPSBQQVNTXG4iCisgICAgICAgIGV4cGVj
dGVkX3Jlc3VsdHMgPSAiIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAg
ICAgICAiV0lOIFJFTEVBU0UiOiB7ImV4dHJhIjogIlNMT1cifSwKKyAgICAgICAgICAgICJXSU4g
REVCVUciOiB7ImV4dHJhIjogIlNMT1cifSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjog
eyJleHRyYSI6ICJTTE9XIn0sCisgICAgICAgICAgICAiTElOVVggREVCVUciOiB7ImV4dHJhIjog
IlNMT1cifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsiZXh0cmEiOiAiU0xPVyJ9LAor
ICAgICAgICAgICAgIk1BQyBERUJVRyI6IHsiZXh0cmEiOiAiU0xPVyJ9fX0KKyAgICAgICAgc2Vs
Zi51cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1
bHRzKQorCisgICAgZGVmIHRlc3RBZGRGbGFreUV4cGVjdGF0aW9uKHNlbGYpOgorICAgICAgICBl
eHBlY3RhdGlvbnMgPSAiQlVHMSA6IDEuaHRtbCA9IFRJTUVPVVRcbiIKKyAgICAgICAgZXhwZWN0
ZWRfcmVzdWx0cyA9ICJCVUcxIDogMS5odG1sID0gVElNRU9VVCBGQUlMXG4iCisgICAgICAgIHVw
ZGF0ZXMgPSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2lu
ZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAiV0lOIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwi
fSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAg
ICAgICAgICAgICJMSU5VWCBERUJVRyI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAg
ICAiTUFDIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBE
RUJVRyI6IHsibWlzc2luZyI6ICJGQUlMIn19fQorICAgICAgICBzZWxmLnVwZGF0ZUV4cGVjdGF0
aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYg
dGVzdEFkZEV4cGVjdGF0aW9uU2xvd1Rlc3Qoc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9
ICJCVUcxIFNMT1cgOiAxLmh0bWwgPSBQQVNTXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMg
PSAiQlVHMSBTTE9XIDogMS5odG1sID0gUEFTUyBGQUlMXG4iCisgICAgICAgIHVwZGF0ZXMgPSB7
IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlM
In0sCisgICAgICAgICAgICAiV0lOIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAg
ICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAg
ICJMSU5VWCBERUJVRyI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTUFDIFJF
TEVBU0UiOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBERUJVRyI6IHsi
bWlzc2luZyI6ICJGQUlMIn19fQorICAgICAgICBzZWxmLnVwZGF0ZUV4cGVjdGF0aW9ucyhleHBl
Y3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdEFkZEV4
cGVjdGF0aW9uKHNlbGYpOgorICAgICAgICAjIG5vdCB5ZXQgaW1wbGVtZW50ZWQKKyAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIKKyAgICAgICAgZXhwZWN0ZWRfcmVz
dWx0cyA9ICJCVUcxIDogMS5odG1sID0gRkFJTFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0
bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAor
ICAgICAgICAgICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAg
ICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElO
VVggREVCVUciOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBSRUxFQVNF
IjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7Im1pc3Np
bmciOiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRp
b25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RBZGRFeHBlY3Rh
dGlvbkZvck9uZVBsYXRmb3JtKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSBX
SU4gOiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVH
MSBXSU4gOiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAgICAgICMgVE9ETyhvamFuKTogT25jZSB3
ZSBhZGQgY3VycmVudGx5IHVubGlzdGVkIHRlc3RzLCB0aGlzIGV4cGVjdCByZXN1bHRzCisgICAg
ICAgICMgZm9yIHRoaXMgdGVzdCBzaG91bGQgYmU6CisgICAgICAgICNleHBlY3RlZF9yZXN1bHRz
ID0gIiIiQlVHMSBXSU4gOiAxLmh0bWwgPSBUSU1FT1VUCisgICAgICAgICNCVUdfQVVUTyBMSU5V
WCBERUJVRyA6IDEuaHRtbCA9IFRJTUVPVVQKKyAgICAgICAgIyIiIgorICAgICAgICB1cGRhdGVz
ID0geyIxLmh0bWwiOiB7IkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifX19Cisg
ICAgICAgIHNlbGYudXBkYXRlRXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhw
ZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0QWRkU2xvdyhzZWxmKToKKyAgICAgICAgZXhw
ZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jl
c3VsdHMgPSAiQlVHMSBTTE9XIDogMS5odG1sID0gRkFJTFxuIgorICAgICAgICB1cGRhdGVzID0g
eyIxLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiU0xP
VyJ9LAorICAgICAgICAgICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJTTE9XIn0sCisgICAg
ICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJTTE9XIn0sCisgICAgICAgICAg
ICAiTElOVVggREVCVUciOiB7Im1pc3NpbmciOiAiU0xPVyJ9LAorICAgICAgICAgICAgIk1BQyBS
RUxFQVNFIjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7
Im1pc3NpbmciOiAiU0xPVyJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVFeHBlY3RhdGlvbnMoZXhw
ZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RBZGRS
ZW1vdmVNdWx0aXBsZUV4cGVjdGF0aW9ucyhzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0g
IiIiQlVHMSBXSU4gOiAxLmh0bWwgPSBGQUlMCisgICAgQlVHMiBNQUMgOiAxLmh0bWwgPSBGQUlM
IiIiCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiIiJCVUcxIFNMT1cgV0lOIDogMS5odG1s
ID0gRkFJTAorICAgIEJVRzIgTUFDIDogMS5odG1sID0gVElNRU9VVFxuIiIiCisgICAgICAgICMg
VE9ETyhvamFuKTogT25jZSB3ZSBhZGQgY3VycmVudGx5IHVubGlzdGVkIHRlc3RzLCB0aGlzIGV4
cGVjdCByZXN1bHRzCisgICAgICAgICMgZm9yIHRoaXMgdGVzdCBzaG91bGQgYmU6CisgICAgICAg
ICNleHBlY3RlZF9yZXN1bHRzID0gIiIiQlVHMSBTTE9XIFdJTiA6IDEuaHRtbCA9IEZBSUwKKyAg
ICAgICAgI0JVR19BVVRPIExJTlVYIFNMT1cgOiAxLmh0bWwgPSBQQVNTCisgICAgICAgICNCVUcy
IE1BQyA6IDEuaHRtbCA9IFRJTUVPVVQKKyAgICAgICAgIyIiIgorCisgICAgICAgIHVwZGF0ZXMg
PSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJT
TE9XIn0sCisgICAgICAgICAgICAiV0lOIERFQlVHIjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAg
ICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAgICAgICAg
ICAgICJMSU5VWCBERUJVRyI6IHsibWlzc2luZyI6ICJTTE9XIn0sCisgICAgICAgICAgICAiTUFD
IFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiVElNRU9VVCIsICJleHRyYSI6ICJGQUlMIn0sCisgICAg
ICAgICAgICAiTUFDIERFQlVHIjogeyJtaXNzaW5nIjogIlRJTUVPVVQiLCAiZXh0cmEiOiAiRkFJ
TCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRh
dGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RBZGRFeGlzdGluZ0V4cGVjdGF0
aW9uKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSA6IDEuaHRtbCA9IEZBSUxc
biIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIDogMS5odG1sID0gRkFJTFxuIgor
ICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7IldJTiBSRUxFQVNFIjogeyJtaXNzaW5nIjog
IkZBSUwifX19CisgICAgICAgIHNlbGYudXBkYXRlRXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywg
dXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0QWRkSW1hZ2VPclRleHRU
b0ZhaWxFeHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIiQlVHMSBX
SU4gUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUwKKyAgICBCVUcxIE1BQyBSRUxFQVNFIDogMS5odG1s
ID0gRkFJTAorICAgIEJVRzEgTElOVVggUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUwKKyAgICBCVUcx
IExJTlVYIERFQlVHIDogMS5odG1sID0gVElNRU9VVAorICAgICIiIgorICAgICAgICBleHBlY3Rl
ZF9yZXN1bHRzID0gIiIiQlVHMSBXSU4gUkVMRUFTRSA6IDEuaHRtbCA9IElNQUdFK1RFWFQKKyAg
ICBCVUcxIE1BQyBSRUxFQVNFIDogMS5odG1sID0gSU1BR0UKKyAgICBCVUcxIExJTlVYIFJFTEVB
U0UgOiAxLmh0bWwgPSBURVhUCisgICAgQlVHMSBMSU5VWCBERUJVRyA6IDEuaHRtbCA9IFRJTUVP
VVQgSU1BR0UrVEVYVAorICAgICIiIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7Cisg
ICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiSU1BR0UrVEVYVCJ9LAorICAg
ICAgICAgICAgIk1BQyBSRUxFQVNFIjogeyJtaXNzaW5nIjogIklNQUdFIn0sCisgICAgICAgICAg
ICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJURVhUIn0sCisgICAgICAgICAgICAiTElO
VVggREVCVUciOiB7Im1pc3NpbmciOiAiSU1BR0UrVEVYVCJ9fX0KKyAgICAgICAgc2VsZi51cGRh
dGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQor
CisgICAgZGVmIHRlc3RBZGRPdGhlcihzZWxmKToKKyAgICAgICAgIyBPdGhlciBpcyBhIGNhdGNo
YWxsIGZvciBtb3JlIG9ic2N1cmUgZXhwZWN0YXRpb25zIHJlc3VsdHMuCisgICAgICAgICMgV2Ug
c2hvdWxkIG5ldmVyIGFkZCBpdCB0byB0ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAgICAgZXhwZWN0
YXRpb25zID0gIkJVRzEgV0lOIFJFTEVBU0UgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4
cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSBXSU4gUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUxcbiIKKyAg
ICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeyJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJP
VEhFUiJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1
cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RSZW1vdmVOb25FeGlzdGFu
dEV4cGVjdGF0aW9uKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSA6IDEuaHRt
bCA9IEZBSUxcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIDogMS5odG1sID0g
RkFJTFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7IldJTiBSRUxFQVNFIjogeyJl
eHRyYSI6ICJUSU1FT1VUIn19fQorICAgICAgICBzZWxmLnVwZGF0ZUV4cGVjdGF0aW9ucyhleHBl
Y3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdFVwZGF0
ZVNvbWVQbGF0Zm9ybXMoc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIERFQlVH
IDogMS5odG1sID0gVEVYVCBQQVNTXG4iCisgICAgICAgICMgVE9ETyhvamFuKTogT25jZSB3ZSBh
ZGQgY3VycmVudGx5IHVubGlzdGVkIHRlc3RzLCB0aGUgZXhwZWN0IHJlc3VsdHMKKyAgICAgICAg
IyBmb3IgdGhpcyB0ZXN0IHNob3VsZCBpbmNsdWRlIHRoZSBtaXNzaW5nIGJpdHMgZm9yIFJFTEVB
U0UuCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSBMSU5VWCBERUJVRyA6IDEuaHRt
bCA9IFRFWFQgUEFTU1xuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAg
ICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiUEFTUyBURVhUIn0sCisgICAgICAgICAg
ICAiV0lOIERFQlVHIjogeyJleHRyYSI6ICJNSVNTSU5HIFRFWFQifSwKKyAgICAgICAgICAgICJN
QUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJQQVNTIFRFWFQifSwKKyAgICAgICAgICAgICJNQUMg
REVCVUciOiB7ImV4dHJhIjogIk1JU1NJTkcgVEVYVCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVF
eHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisg
ICAgZGVmIHRlc3RBZGRUaW1lb3V0VG9TbG93VGVzdChzZWxmKToKKyAgICAgICAgIyBTTE9XIHRl
c3RzIG5lZWRpbmcgVElNRU9VVCBuZWVkIG1hbnVhbCB1cGRhdGluZy4gU2hvdWxkIGp1c3QgcHJp
bnQKKyAgICAgICAgIyBhIGxvZyBhbmQgbm90IG1vZGlmeSB0aGUgdGVzdC4KKyAgICAgICAgZXhw
ZWN0YXRpb25zID0gIkJVRzEgU0xPVyA6IDEuaHRtbCA9IFRFWFRcbiIKKyAgICAgICAgZXhwZWN0
ZWRfcmVzdWx0cyA9ICJCVUcxIFNMT1cgOiAxLmh0bWwgPSBURVhUXG4iCisgICAgICAgIHVwZGF0
ZXMgPSB7IjEuaHRtbCI6IHsiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9fX0K
KyAgICAgICAgc2VsZi51cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBl
eHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RBZGRTbG93VG9UaW1lb3V0VGVzdChzZWxm
KToKKyAgICAgICAgIyBTTE9XIHRlc3RzIG5lZWRpbmcgVElNRU9VVCBuZWVkIG1hbnVhbCB1cGRh
dGluZy4gU2hvdWxkIGp1c3QgcHJpbnQKKyAgICAgICAgIyBhIGxvZyBhbmQgbm90IG1vZGlmeSB0
aGUgdGVzdC4KKyAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBUSU1FT1VU
XG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSA6IDEuaHRtbCA9IFRJTUVPVVRc
biIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeyJXSU4gUkVMRUFTRSI6IHsibWlzc2lu
ZyI6ICJTTE9XIn19fQorICAgICAgICBzZWxmLnVwZGF0ZUV4cGVjdGF0aW9ucyhleHBlY3RhdGlv
bnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdEluY2x1ZGVMYXN0
UGxhdGZvcm1JbkZsYWtpbmVzcyhzZWxmKToKKyAgICAgICAgIyBJZiBhIHRlc3QgaXMgZmxha3kg
b24gNS82IHBsYXRmb3JtcyBhbmQgdGhlIDZ0aCdzIGV4cGVjdGF0aW9ucyBhcmUgYQorICAgICAg
ICAjIHN1YnNldCBvZiB0aGUgb3RoZXIgNS82LCB0aGVuIGdpdmUgdGhlbSBhbGwgdGhlIHNhbWUg
ZXhwZWN0YXRpb25zLgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMiA6IDEuaHRtbCA9IEZB
SUxcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcyIDogMS5odG1sID0gRkFJTCBU
SU1FT1VUXG4iCisgICAgICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJX
SU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIiwgImV4dHJhIjogIkZBSUwifSwKKyAg
ICAgICAgICAgICJXSU4gREVCVUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAgICAgICAg
ICAgIkxJTlVYIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAgICAgICAgICAg
IkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifSwKKyAgICAgICAgICAgICJNQUMg
UkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAgICAgICAgICAiTUFDIERFQlVH
IjogeyJtaXNzaW5nIjogIlRJTUVPVVQifX19CisgICAgICAgIHNlbGYudXBkYXRlRXhwZWN0YXRp
b25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0
ZXN0SW5jbHVkZUxhc3RQbGF0Zm9ybUluRmxha2luZXNzVGhyZWVPdXRPZkZvdXIoc2VsZik6Cisg
ICAgICAgICMgSWYgYSB0ZXN0IGlzIGZsYWt5IG9uIDUvNiBwbGF0Zm9ybXMgYW5kIHRoZSA2dGgn
cyBleHBlY3RhdGlvbnMgYXJlIGEKKyAgICAgICAgIyBzdWJzZXQgb2YgdGhlIG90aGVyIDUvNiwg
dGhlbiBnaXZlIHRoZW0gYWxsIHRoZSBzYW1lIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgZXhwZWN0
YXRpb25zID0gIkJVRzIgTUFDIExJTlVYIDogMS5odG1sID0gRkFJTFxuIgorICAgICAgICBleHBl
Y3RlZF9yZXN1bHRzID0gIkJVRzIgTElOVVggTUFDIDogMS5odG1sID0gRkFJTCBUSU1FT1VUXG4i
CisgICAgICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJMSU5VWCBSRUxF
QVNFIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6
IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAgICAgICAgICAiTUFDIERFQlVHIjogeyJtaXNz
aW5nIjogIlRJTUVPVVQifX19CisgICAgICAgIHNlbGYudXBkYXRlRXhwZWN0YXRpb25zKGV4cGVj
dGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0RXhjbHVk
ZUxhc3RQbGF0Zm9ybUZyb21GbGFraW5lc3Moc2VsZik6CisgICAgICAgICMgSWYgYSB0ZXN0IGlz
IGZsYWt5IG9uIDUvNiBwbGF0Zm9ybXMgYW5kIHRoZSA2dGgncyBleHBlY3RhdGlvbnMKKyAgICAg
ICAgIyBhcmUgbm90IGEgc3Vic2V0IG9mIHRoZSBvdGhlciA1LzYsIHRoZW4gZG9uJ3QgZ2l2ZSB0
aGVtCisgICAgICAgICMgYWxsIHRoZSBzYW1lIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgZXhwZWN0
YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3Vs
dHMgPSAiIiJCVUcxIERFQlVHIDogMS5odG1sID0gRkFJTCBUSU1FT1VUCisgICAgQlVHMSBMSU5V
WCBNQUMgUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUwgVElNRU9VVAorICAgIEJVRzEgV0lOIFJFTEVB
U0UgOiAxLmh0bWwgPSBGQUlMIENSQVNICisgICAgIiIiCisgICAgICAgIHVwZGF0ZXMgPSB7IjEu
aHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJDUkFTSCJ9
LAorICAgICAgICAgICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAg
ICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAgICAg
ICAgICAiTElOVVggREVCVUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAgICAgICAgICAg
Ik1BQyBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifSwKKyAgICAgICAgICAgICJNQUMg
REVCVUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVFeHBl
Y3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAg
ZGVmIHRlc3RTdHJpcENvbW1lbnRzKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiIiJC
VUcxIDogMS5odG1sID0gVElNRU9VVAorCisgICAgLy8gQ29tbWVudC93aGl0ZXNwYWNlIHNob3Vs
ZCBiZSByZW1vdmVkIHdoZW4gdGhlIHRlc3QgaXMuCisgICAgQlVHMiBXSU4gUkVMRUFTRSA6IDIu
aHRtbCA9IFRFWFQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFjZSBhZnRlciB0ZXN0IHNob3Vs
ZCByZW1haW4uCisKKyAgICBCVUcyIE1BQyA6IDIuaHRtbCA9IFRFWFQKKworICAgIC8vIENvbW1l
bnQvd2hpdGVzcGFjZSBhdCBlbmQgb2YgZmlsZSBzaG91bGQgcmVtYWluLgorICAgICIiIgorICAg
ICAgICBleHBlY3RlZF9yZXN1bHRzID0gIiIiQlVHMSA6IDEuaHRtbCA9IFRJTUVPVVQKKworICAg
IC8vIENvbW1lbnQvd2hpdGVzcGFjZSBhZnRlciB0ZXN0IHNob3VsZCByZW1haW4uCisKKyAgICBC
VUcyIE1BQyBERUJVRyA6IDIuaHRtbCA9IFRFWFQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFj
ZSBhdCBlbmQgb2YgZmlsZSBzaG91bGQgcmVtYWluLgorICAgICIiIgorICAgICAgICB1cGRhdGVz
ID0geyIyLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7ImV4dHJhIjogIlRF
WFQifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsiZXh0cmEiOiAiVEVYVCJ9fX0KKyAg
ICAgICAgc2VsZi51cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBl
Y3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RMZWF2ZUNvbW1lbnRzKHNlbGYpOgorICAgICAg
ICBleHBlY3RhdGlvbnMgPSAiIiJCVUcxIDogMS5odG1sID0gVElNRU9VVAorCisgICAgLy8gQ29t
bWVudC93aGl0ZXNwYWNlIHNob3VsZCByZW1haW4uCisgICAgQlVHMiA6IDIuaHRtbCA9IEZBSUwg
UEFTUworICAgICIiIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIiIiQlVHMSA6IDEuaHRt
bCA9IFRJTUVPVVQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFjZSBzaG91bGQgcmVtYWluLgor
ICAgIEJVRzIgTUFDIERFQlVHIDogMi5odG1sID0gRkFJTCBQQVNTCisgICAgQlVHMiBMSU5VWCBN
QUMgUkVMRUFTRSA6IDIuaHRtbCA9IEZBSUwgUEFTUworICAgICIiIgorICAgICAgICB1cGRhdGVz
ID0geyIyLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7ImV4dHJhIjogIkZB
SUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAg
ICAgICAgICJMSU5VWCBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51
cGRhdGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRz
KQorCisgICAgZGVmIHRlc3RMZWF2ZUNvbW1lbnRzSWZOb1doaXRlc3BhY2VBZnRlclRlc3Qoc2Vs
Zik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICIiIi8vIENvbW1lbnQvd2hpdGVzcGFjZSBzaG91
bGQgcmVtYWluLgorICAgIEJVRzIgV0lOIFJFTEVBU0UgOiAyLmh0bWwgPSBURVhUCisgICAgQlVH
MiA6IDEuaHRtbCA9IElNQUdFCisgICAgIiIiCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAi
IiIvLyBDb21tZW50L3doaXRlc3BhY2Ugc2hvdWxkIHJlbWFpbi4KKyAgICBCVUcyIDogMS5odG1s
ID0gSU1BR0UKKyAgICAiIiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMi5odG1sIjogeyJXSU4gUkVM
RUFTRSI6IHsiZXh0cmEiOiAiVEVYVCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVFeHBlY3RhdGlv
bnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRl
c3RMZWF2ZXNVbm1vZGlmaWVkRXhwZWN0YXRpb25zVW50b3VjaGVkKHNlbGYpOgorICAgICAgICAj
IEVuc3VyZXMgdGVzdHMgdGhhdCB3b3VsZCBqdXN0IGNoYW5nZSBzb3J0IG9yZGVyIG9mIGEgbGlu
ZSBhcmUgbm9vcHMuCisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIFdJTiBMSU5VWCA6IDEu
aHRtbCA9IFRJTUVPVVRcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIFdJTiBM
SU5VWCA6IDEuaHRtbCA9IFRJTUVPVVRcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjog
eyJNQUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJTTE9XIn19fQorICAgICAgICBzZWxmLnVwZGF0
ZUV4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisK
KyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIEhlbHBlciBmdW5jdGlvbnMKKworICAgIGRl
ZiB1cGRhdGVFeHBlY3RhdGlvbnMoc2VsZiwgZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3Rl
ZF9yZXN1bHRzKToKKyAgICAgICAgcmVzdWx0cyA9IHVwZGF0ZV9leHBlY3RhdGlvbnNfZnJvbV9k
YXNoYm9hcmQuVXBkYXRlRXhwZWN0YXRpb25zKAorICAgICAgICAgICAgZXhwZWN0YXRpb25zLCB1
cGRhdGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Jlc3VsdHMsIHJlc3Vs
dHMpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgdW5pdHRlc3QubWFpbigpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9zaW1wbGVqc29uL1JFQURNRS53ZWJraXQgYi9XZWJLaXRU
b29scy9zaW1wbGVqc29uL1JFQURNRS53ZWJraXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2Y3MjZjZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3NpbXBsZWpz
b24vUkVBRE1FLndlYmtpdApAQCAtMCwwICsxLDExIEBACitVUkw6IGh0dHA6Ly91bmRlZmluZWQu
b3JnL3B5dGhvbi8jc2ltcGxlanNvbgorVmVyc2lvbjogMS43LjMKK0xpY2Vuc2U6IE1JVAorTGlj
ZW5zZSBGaWxlOiBMSUNFTlNFLnR4dAorCitEZXNjcmlwdGlvbjoKK3NpbXBsZWpzb24gaXMgYSBK
U09OIGVuY29kZXIgYW5kIGRlY29kZXIgZm9yIFB5dGhvbi4KKworCitMb2NhbCBNb2RpZmljYXRp
b25zOgorUmVtb3ZlZCB1bml0IHRlc3RzIGZyb20gY3VycmVudCBkaXN0cmlidXRpb24uCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9zaW1wbGVqc29uL19faW5pdF9fLnB5IGIvV2ViS2l0VG9vbHMv
c2ltcGxlanNvbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zOGQ2MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9fX2lu
aXRfXy5weQpAQCAtMCwwICsxLDI4NyBAQAorciIiIgorQSBzaW1wbGUsIGZhc3QsIGV4dGVuc2li
bGUgSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyCisKK0pTT04gKEphdmFTY3JpcHQgT2JqZWN0IE5v
dGF0aW9uKSA8aHR0cDovL2pzb24ub3JnPiBpcyBhIHN1YnNldCBvZgorSmF2YVNjcmlwdCBzeW50
YXggKEVDTUEtMjYyIDNyZCBlZGl0aW9uKSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgZGF0YQoraW50
ZXJjaGFuZ2UgZm9ybWF0LgorCitzaW1wbGVqc29uIGV4cG9zZXMgYW4gQVBJIGZhbWlsaWFyIHRv
IHVzZXMgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKK21hcnNoYWwgYW5kIHBpY2tsZSBtb2R1bGVz
LgorCitFbmNvZGluZyBiYXNpYyBQeXRob24gb2JqZWN0IGhpZXJhcmNoaWVzOjoKKyAgICAKKyAg
ICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gc2ltcGxlanNvbi5kdW1wcyhbJ2Zvbycs
IHsnYmFyJzogKCdiYXonLCBOb25lLCAxLjAsIDIpfV0pCisgICAgJ1siZm9vIiwgeyJiYXIiOiBb
ImJheiIsIG51bGwsIDEuMCwgMl19XScKKyAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcygi
XCJmb29cYmFyIikKKyAgICAiXCJmb29cYmFyIgorICAgID4+PiBwcmludCBzaW1wbGVqc29uLmR1
bXBzKHUnXHUxMjM0JykKKyAgICAiXHUxMjM0IgorICAgID4+PiBwcmludCBzaW1wbGVqc29uLmR1
bXBzKCdcXCcpCisgICAgIlxcIgorICAgID4+PiBwcmludCBzaW1wbGVqc29uLmR1bXBzKHsiYyI6
IDAsICJiIjogMCwgImEiOiAwfSwgc29ydF9rZXlzPVRydWUpCisgICAgeyJhIjogMCwgImIiOiAw
LCAiYyI6IDB9CisgICAgPj4+IGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisgICAgPj4+
IGlvID0gU3RyaW5nSU8oKQorICAgID4+PiBzaW1wbGVqc29uLmR1bXAoWydzdHJlYW1pbmcgQVBJ
J10sIGlvKQorICAgID4+PiBpby5nZXR2YWx1ZSgpCisgICAgJ1sic3RyZWFtaW5nIEFQSSJdJwor
CitDb21wYWN0IGVuY29kaW5nOjoKKworICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+
PiBzaW1wbGVqc29uLmR1bXBzKFsxLDIsMyx7JzQnOiA1LCAnNic6IDd9XSwgc2VwYXJhdG9ycz0o
JywnLCc6JykpCisgICAgJ1sxLDIsMyx7IjQiOjUsIjYiOjd9XScKKworUHJldHR5IHByaW50aW5n
OjoKKworICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBwcmludCBzaW1wbGVqc29u
LmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkKKyAgICB7
CisgICAgICAgICI0IjogNSwgCisgICAgICAgICI2IjogNworICAgIH0KKworRGVjb2RpbmcgSlNP
Tjo6CisgICAgCisgICAgPj4+IGltcG9ydCBzaW1wbGVqc29uCisgICAgPj4+IHNpbXBsZWpzb24u
bG9hZHMoJ1siZm9vIiwgeyJiYXIiOlsiYmF6IiwgbnVsbCwgMS4wLCAyXX1dJykKKyAgICBbdSdm
b28nLCB7dSdiYXInOiBbdSdiYXonLCBOb25lLCAxLjAsIDJdfV0KKyAgICA+Pj4gc2ltcGxlanNv
bi5sb2FkcygnIlxcImZvb1xcYmFyIicpCisgICAgdSciZm9vXHgwOGFyJworICAgID4+PiBmcm9t
IFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgID4+PiBpbyA9IFN0cmluZ0lPKCdbInN0cmVh
bWluZyBBUEkiXScpCisgICAgPj4+IHNpbXBsZWpzb24ubG9hZChpbykKKyAgICBbdSdzdHJlYW1p
bmcgQVBJJ10KKworU3BlY2lhbGl6aW5nIEpTT04gb2JqZWN0IGRlY29kaW5nOjoKKworICAgID4+
PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBkZWYgYXNfY29tcGxleChkY3QpOgorICAgIC4u
LiAgICAgaWYgJ19fY29tcGxleF9fJyBpbiBkY3Q6CisgICAgLi4uICAgICAgICAgcmV0dXJuIGNv
bXBsZXgoZGN0WydyZWFsJ10sIGRjdFsnaW1hZyddKQorICAgIC4uLiAgICAgcmV0dXJuIGRjdAor
ICAgIC4uLiAKKyAgICA+Pj4gc2ltcGxlanNvbi5sb2FkcygneyJfX2NvbXBsZXhfXyI6IHRydWUs
ICJyZWFsIjogMSwgImltYWciOiAyfScsCisgICAgLi4uICAgICBvYmplY3RfaG9vaz1hc19jb21w
bGV4KQorICAgICgxKzJqKQorCitFeHRlbmRpbmcgSlNPTkVuY29kZXI6OgorICAgIAorICAgID4+
PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBjbGFzcyBDb21wbGV4RW5jb2RlcihzaW1wbGVq
c29uLkpTT05FbmNvZGVyKToKKyAgICAuLi4gICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9iaik6Cisg
ICAgLi4uICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNvbXBsZXgpOgorICAgIC4uLiAgICAg
ICAgICAgICByZXR1cm4gW29iai5yZWFsLCBvYmouaW1hZ10KKyAgICAuLi4gICAgICAgICByZXR1
cm4gc2ltcGxlanNvbi5KU09ORW5jb2Rlci5kZWZhdWx0KHNlbGYsIG9iaikKKyAgICAuLi4gCisg
ICAgPj4+IGR1bXBzKDIgKyAxaiwgY2xzPUNvbXBsZXhFbmNvZGVyKQorICAgICdbMi4wLCAxLjBd
JworICAgID4+PiBDb21wbGV4RW5jb2RlcigpLmVuY29kZSgyICsgMWopCisgICAgJ1syLjAsIDEu
MF0nCisgICAgPj4+IGxpc3QoQ29tcGxleEVuY29kZXIoKS5pdGVyZW5jb2RlKDIgKyAxaikpCisg
ICAgWydbJywgJzIuMCcsICcsICcsICcxLjAnLCAnXSddCisgICAgCisKK05vdGUgdGhhdCB0aGUg
SlNPTiBwcm9kdWNlZCBieSB0aGlzIG1vZHVsZSdzIGRlZmF1bHQgc2V0dGluZ3MKK2lzIGEgc3Vi
c2V0IG9mIFlBTUwsIHNvIGl0IG1heSBiZSB1c2VkIGFzIGEgc2VyaWFsaXplciBmb3IgdGhhdCBh
cyB3ZWxsLgorIiIiCitfX3ZlcnNpb25fXyA9ICcxLjcuMycKK19fYWxsX18gPSBbCisgICAgJ2R1
bXAnLCAnZHVtcHMnLCAnbG9hZCcsICdsb2FkcycsCisgICAgJ0pTT05EZWNvZGVyJywgJ0pTT05F
bmNvZGVyJywKK10KKworZnJvbSBkZWNvZGVyIGltcG9ydCBKU09ORGVjb2RlcgorZnJvbSBlbmNv
ZGVyIGltcG9ydCBKU09ORW5jb2RlcgorCitfZGVmYXVsdF9lbmNvZGVyID0gSlNPTkVuY29kZXIo
CisgICAgc2tpcGtleXM9RmFsc2UsCisgICAgZW5zdXJlX2FzY2lpPVRydWUsCisgICAgY2hlY2tf
Y2lyY3VsYXI9VHJ1ZSwKKyAgICBhbGxvd19uYW49VHJ1ZSwKKyAgICBpbmRlbnQ9Tm9uZSwKKyAg
ICBzZXBhcmF0b3JzPU5vbmUsCisgICAgZW5jb2Rpbmc9J3V0Zi04JworKQorCitkZWYgZHVtcChv
YmosIGZwLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lpPVRydWUsIGNoZWNrX2NpcmN1bGFy
PVRydWUsCisgICAgICAgIGFsbG93X25hbj1UcnVlLCBjbHM9Tm9uZSwgaW5kZW50PU5vbmUsIHNl
cGFyYXRvcnM9Tm9uZSwKKyAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JywgKiprdyk6CisgICAgIiIi
CisgICAgU2VyaWFsaXplIGBgb2JqYGAgYXMgYSBKU09OIGZvcm1hdHRlZCBzdHJlYW0gdG8gYGBm
cGBgIChhCisgICAgYGAud3JpdGUoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCkuCisK
KyAgICBJZiBgYHNraXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQg
YXJlIG5vdCBiYXNpYyB0eXBlcworICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwg
YGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKSAKKyAgICB3aWxsIGJlIHNr
aXBwZWQgaW5zdGVhZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJyb3JgYC4KKworICAgIElmIGBgZW5z
dXJlX2FzY2lpYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBzb21lIGNodW5rcyB3cml0dGVuIHRv
IGBgZnBgYAorICAgIG1heSBiZSBgYHVuaWNvZGVgYCBpbnN0YW5jZXMsIHN1YmplY3QgdG8gbm9y
bWFsIFB5dGhvbiBgYHN0cmBgIHRvCisgICAgYGB1bmljb2RlYGAgY29lcmNpb24gcnVsZXMuIFVu
bGVzcyBgYGZwLndyaXRlKClgYCBleHBsaWNpdGx5CisgICAgdW5kZXJzdGFuZHMgYGB1bmljb2Rl
YGAgKGFzIGluIGBgY29kZWNzLmdldHdyaXRlcigpYGApIHRoaXMgaXMgbGlrZWx5CisgICAgdG8g
Y2F1c2UgYW4gZXJyb3IuCisKKyAgICBJZiBgYGNoZWNrX2NpcmN1bGFyYGAgaXMgYGBGYWxzZWBg
LCB0aGVuIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY2hlY2sKKyAgICBmb3IgY29udGFpbmVyIHR5
cGVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgYSBjaXJjdWxhciByZWZlcmVuY2Ugd2lsbAorICAgIHJl
c3VsdCBpbiBhbiBgYE92ZXJmbG93RXJyb3JgYCAob3Igd29yc2UpLgorCisgICAgSWYgYGBhbGxv
d19uYW5gYCBpcyBgYEZhbHNlYGAsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRv
CisgICAgc2VyaWFsaXplIG91dCBvZiByYW5nZSBgYGZsb2F0YGAgdmFsdWVzIChgYG5hbmBgLCBg
YGluZmBgLCBgYC1pbmZgYCkKKyAgICBpbiBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBz
cGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZQorICAgIEphdmFTY3JpcHQgZXF1aXZh
bGVudHMgKGBgTmFOYGAsIGBgSW5maW5pdHlgYCwgYGAtSW5maW5pdHlgYCkuCisKKyAgICBJZiBg
YGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVt
ZW50cyBhbmQgb2JqZWN0CisgICAgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGgg
dGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudCBsZXZlbAorICAgIG9mIDAgd2lsbCBvbmx5IGlu
c2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlv
bi4KKworICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0
X3NlcGFyYXRvcilgYCB0dXBsZQorICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2Yg
dGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgorICAgIGBgKCcsJywgJzon
KWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKworICAgIGBgZW5j
b2RpbmdgYCBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBzdHIgaW5zdGFuY2VzLCBkZWZh
dWx0IGlzIFVURi04LgorCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkVuY29kZXJgYCBzdWJj
bGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCisgICAgYGAuZGVmYXVsdCgpYGAgbWV0
aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lmeSBpdCB3aXRoCisgICAg
dGhlIGBgY2xzYGAga3dhcmcuCisgICAgIiIiCisgICAgIyBjYWNoZWQgZW5jb2RlcgorICAgIGlm
IChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRydWUgYW5kCisgICAgICAg
IGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25hbiBpcyBUcnVlIGFuZAorICAgICAg
ICBjbHMgaXMgTm9uZSBhbmQgaW5kZW50IGlzIE5vbmUgYW5kIHNlcGFyYXRvcnMgaXMgTm9uZSBh
bmQKKyAgICAgICAgZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQgbm90IGt3KToKKyAgICAgICAgaXRl
cmFibGUgPSBfZGVmYXVsdF9lbmNvZGVyLml0ZXJlbmNvZGUob2JqKQorICAgIGVsc2U6CisgICAg
ICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICAgICAgY2xzID0gSlNPTkVuY29kZXIKKyAgICAg
ICAgaXRlcmFibGUgPSBjbHMoc2tpcGtleXM9c2tpcGtleXMsIGVuc3VyZV9hc2NpaT1lbnN1cmVf
YXNjaWksCisgICAgICAgICAgICBjaGVja19jaXJjdWxhcj1jaGVja19jaXJjdWxhciwgYWxsb3df
bmFuPWFsbG93X25hbiwgaW5kZW50PWluZGVudCwKKyAgICAgICAgICAgIHNlcGFyYXRvcnM9c2Vw
YXJhdG9ycywgZW5jb2Rpbmc9ZW5jb2RpbmcsICoqa3cpLml0ZXJlbmNvZGUob2JqKQorICAgICMg
Y291bGQgYWNjZWxlcmF0ZSB3aXRoIHdyaXRlbGluZXMgaW4gc29tZSB2ZXJzaW9ucyBvZiBQeXRo
b24sIGF0CisgICAgIyBhIGRlYnVnZ2FiaWxpdHkgY29zdAorICAgIGZvciBjaHVuayBpbiBpdGVy
YWJsZToKKyAgICAgICAgZnAud3JpdGUoY2h1bmspCisKKworZGVmIGR1bXBzKG9iaiwgc2tpcGtl
eXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLCBjaGVja19jaXJjdWxhcj1UcnVlLAorICAgICAg
ICBhbGxvd19uYW49VHJ1ZSwgY2xzPU5vbmUsIGluZGVudD1Ob25lLCBzZXBhcmF0b3JzPU5vbmUs
CisgICAgICAgIGVuY29kaW5nPSd1dGYtOCcsICoqa3cpOgorICAgICIiIgorICAgIFNlcmlhbGl6
ZSBgYG9iamBgIHRvIGEgSlNPTiBmb3JtYXR0ZWQgYGBzdHJgYC4KKworICAgIElmIGBgc2tpcGtl
eXNgYCBpcyBgYFRydWVgYCB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5
cGVzCisgICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGludGBgLCBgYGxvbmdgYCwgYGBmbG9h
dGBgLCBgYGJvb2xgYCwgYGBOb25lYGApIAorICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9m
IHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBg
YEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKKyAgICBgYHVuaWNvZGVg
YCBpbnN0YW5jZSBzdWJqZWN0IHRvIG5vcm1hbCBQeXRob24gYGBzdHJgYCB0byBgYHVuaWNvZGVg
YAorICAgIGNvZXJjaW9uIHJ1bGVzIGluc3RlYWQgb2YgYmVpbmcgZXNjYXBlZCB0byBhbiBBU0NJ
SSBgYHN0cmBgLgorCisgICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGBgRmFsc2VgYCwgdGhl
biB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAgZm9yIGNvbnRhaW5lciB0eXBlcyB3
aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdpbGwKKyAgICByZXN1bHQg
aW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KKworICAgIElmIGBgYWxsb3dfbmFu
YGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVlRXJyb3JgYCB0bworICAg
IHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9hdGBgIHZhbHVlcyAoYGBuYW5gYCwgYGBpbmZg
YCwgYGAtaW5mYGApIGluCisgICAgc3RyaWN0IGNvbXBsaWFuY2Ugb2YgdGhlIEpTT04gc3BlY2lm
aWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUKKyAgICBKYXZhU2NyaXB0IGVxdWl2YWxlbnRz
IChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5YGApLgorCisgICAgSWYgYGBpbmRl
bnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMg
YW5kCisgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQg
aW5kZW50IGxldmVsLiBBbiBpbmRlbnQKKyAgICBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQg
bmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKKyAgICByZXByZXNlbnRhdGlv
bi4KKworICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0
X3NlcGFyYXRvcilgYCB0dXBsZQorICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2Yg
dGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgorICAgIGBgKCcsJywgJzon
KWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKworICAgIGBgZW5j
b2RpbmdgYCBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBzdHIgaW5zdGFuY2VzLCBkZWZh
dWx0IGlzIFVURi04LgorCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkVuY29kZXJgYCBzdWJj
bGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCisgICAgYGAuZGVmYXVsdCgpYGAgbWV0
aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lmeSBpdCB3aXRoCisgICAg
dGhlIGBgY2xzYGAga3dhcmcuCisgICAgIiIiCisgICAgIyBjYWNoZWQgZW5jb2RlcgorICAgIGlm
IChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lpIGlzIFRydWUgYW5kCisgICAgICAg
IGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25hbiBpcyBUcnVlIGFuZAorICAgICAg
ICBjbHMgaXMgTm9uZSBhbmQgaW5kZW50IGlzIE5vbmUgYW5kIHNlcGFyYXRvcnMgaXMgTm9uZSBh
bmQKKyAgICAgICAgZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQgbm90IGt3KToKKyAgICAgICAgcmV0
dXJuIF9kZWZhdWx0X2VuY29kZXIuZW5jb2RlKG9iaikKKyAgICBpZiBjbHMgaXMgTm9uZToKKyAg
ICAgICAgY2xzID0gSlNPTkVuY29kZXIKKyAgICByZXR1cm4gY2xzKAorICAgICAgICBza2lwa2V5
cz1za2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9hc2NpaSwKKyAgICAgICAgY2hlY2tfY2ly
Y3VsYXI9Y2hlY2tfY2lyY3VsYXIsIGFsbG93X25hbj1hbGxvd19uYW4sIGluZGVudD1pbmRlbnQs
CisgICAgICAgIHNlcGFyYXRvcnM9c2VwYXJhdG9ycywgZW5jb2Rpbmc9ZW5jb2RpbmcsCisgICAg
ICAgICoqa3cpLmVuY29kZShvYmopCisKK19kZWZhdWx0X2RlY29kZXIgPSBKU09ORGVjb2Rlcihl
bmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lKQorCitkZWYgbG9hZChmcCwgZW5jb2Rpbmc9
Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsICoqa3cpOgorICAgICIiIgorICAgIERl
c2VyaWFsaXplIGBgZnBgYCAoYSBgYC5yZWFkKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmpl
Y3QgY29udGFpbmluZworICAgIGEgSlNPTiBkb2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0Lgor
CisgICAgSWYgdGhlIGNvbnRlbnRzIG9mIGBgZnBgYCBpcyBlbmNvZGVkIHdpdGggYW4gQVNDSUkg
YmFzZWQgZW5jb2Rpbmcgb3RoZXIKKyAgICB0aGFuIHV0Zi04IChlLmcuIGxhdGluLTEpLCB0aGVu
IGFuIGFwcHJvcHJpYXRlIGBgZW5jb2RpbmdgYCBuYW1lIG11c3QKKyAgICBiZSBzcGVjaWZpZWQu
IEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1Y2ggYXMgVUNTLTIpIGFyZQor
ICAgIG5vdCBhbGxvd2VkLCBhbmQgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aAorICAgIGBgY29kZWNz
LmdldHJlYWRlcihmcCkoZW5jb2RpbmcpYGAsIG9yIHNpbXBseSBkZWNvZGVkIHRvIGEgYGB1bmlj
b2RlYGAKKyAgICBvYmplY3QgYW5kIHBhc3NlZCB0byBgYGxvYWRzKClgYAorCisgICAgYGBvYmpl
Y3RfaG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0
aCB0aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZSAoYSBgYGRpY3Rg
YCkuIFRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICBgYG9iamVjdF9ob29rYGAgd2lsbCBiZSB1c2Vk
IGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLiBUaGlzIGZlYXR1cmUKKyAgICBjYW4gYmUgdXNlZCB0
byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBDIGNsYXNzIGhpbnRpbmcp
LgorICAgIAorICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05EZWNvZGVyYGAgc3ViY2xhc3MsIHNw
ZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAorICAgIGt3YXJnLgorICAgICIiIgorICAgIHJldHVy
biBsb2FkcyhmcC5yZWFkKCksCisgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBjbHM9Y2xzLCBv
YmplY3RfaG9vaz1vYmplY3RfaG9vaywgKiprdykKKworZGVmIGxvYWRzKHMsIGVuY29kaW5nPU5v
bmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCAqKmt3KToKKyAgICAiIiIKKyAgICBEZXNl
cmlhbGl6ZSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgIGluc3RhbmNlIGNvbnRhaW5p
bmcgYSBKU09OCisgICAgZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVjdC4KKworICAgIElmIGBg
c2BgIGlzIGEgYGBzdHJgYCBpbnN0YW5jZSBhbmQgaXMgZW5jb2RlZCB3aXRoIGFuIEFTQ0lJIGJh
c2VkIGVuY29kaW5nCisgICAgb3RoZXIgdGhhbiB1dGYtOCAoZS5nLiBsYXRpbi0xKSB0aGVuIGFu
IGFwcHJvcHJpYXRlIGBgZW5jb2RpbmdgYCBuYW1lCisgICAgbXVzdCBiZSBzcGVjaWZpZWQuIEVu
Y29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1Y2ggYXMgVUNTLTIpCisgICAgYXJl
IG5vdCBhbGxvd2VkIGFuZCBzaG91bGQgYmUgZGVjb2RlZCB0byBgYHVuaWNvZGVgYCBmaXJzdC4K
KworICAgIGBgb2JqZWN0X2hvb2tgYCBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwg
YmUgY2FsbGVkIHdpdGggdGhlCisgICAgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNv
ZGUgKGEgYGBkaWN0YGApLiBUaGUgcmV0dXJuIHZhbHVlIG9mCisgICAgYGBvYmplY3RfaG9va2Bg
IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4gVGhpcyBmZWF0dXJlCisgICAg
Y2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyAoZS5nLiBKU09OLVJQQyBj
bGFzcyBoaW50aW5nKS4KKworICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05EZWNvZGVyYGAgc3Vi
Y2xhc3MsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAorICAgIGt3YXJnLgorICAgICIiIgor
ICAgIGlmIGNscyBpcyBOb25lIGFuZCBlbmNvZGluZyBpcyBOb25lIGFuZCBvYmplY3RfaG9vayBp
cyBOb25lIGFuZCBub3Qga3c6CisgICAgICAgIHJldHVybiBfZGVmYXVsdF9kZWNvZGVyLmRlY29k
ZShzKQorICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICBjbHMgPSBKU09ORGVjb2RlcgorICAg
IGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOgorICAgICAgICBrd1snb2JqZWN0X2hvb2snXSA9
IG9iamVjdF9ob29rCisgICAgcmV0dXJuIGNscyhlbmNvZGluZz1lbmNvZGluZywgKiprdykuZGVj
b2RlKHMpCisKK2RlZiByZWFkKHMpOgorICAgICIiIgorICAgIGpzb24tcHkgQVBJIGNvbXBhdGli
aWxpdHkgaG9vay4gVXNlIGxvYWRzKHMpIGluc3RlYWQuCisgICAgIiIiCisgICAgaW1wb3J0IHdh
cm5pbmdzCisgICAgd2FybmluZ3Mud2Fybigic2ltcGxlanNvbi5sb2FkcyhzKSBzaG91bGQgYmUg
dXNlZCBpbnN0ZWFkIG9mIHJlYWQocykiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisg
ICAgcmV0dXJuIGxvYWRzKHMpCisKK2RlZiB3cml0ZShvYmopOgorICAgICIiIgorICAgIGpzb24t
cHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gVXNlIGR1bXBzKHMpIGluc3RlYWQuCisgICAgIiIi
CisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mud2Fybigic2ltcGxlanNvbi5kdW1w
cyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHdyaXRlKHMpIiwKKyAgICAgICAgRGVwcmVj
YXRpb25XYXJuaW5nKQorICAgIHJldHVybiBkdW1wcyhvYmopCisKKwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvc2ltcGxlanNvbi9fc3BlZWR1cHMuYyBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24v
X3NwZWVkdXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyOTBiYgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vX3NwZWVkdXBzLmMKQEAg
LTAsMCArMSwyMTUgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpZiBQWV9WRVJTSU9OX0hFWCA8
IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlfU1NJWkVfVF9NSU4pCit0eXBlZGVmIGludCBQeV9z
c2l6ZV90OworI2RlZmluZSBQWV9TU0laRV9UX01BWCBJTlRfTUFYCisjZGVmaW5lIFBZX1NTSVpF
X1RfTUlOIElOVF9NSU4KKyNlbmRpZgorCitzdGF0aWMgUHlfc3NpemVfdAorYXNjaWlfZXNjYXBl
X2NoYXIoUHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpOworc3Rh
dGljIFB5T2JqZWN0ICoKK2FzY2lpX2VzY2FwZV91bmljb2RlKFB5T2JqZWN0ICpweXN0cik7Citz
dGF0aWMgUHlPYmplY3QgKgorYXNjaWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlzdHIpOworc3Rh
dGljIFB5T2JqZWN0ICoKK3B5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKFB5T2JqZWN0KiBzZWxm
IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSwgUHlPYmplY3QgKnB5c3RyKTsKK3ZvaWQgaW5p
dF9zcGVlZHVwcyh2b2lkKTsKKworI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0g
J34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICcvJyAmJiBjICE9ICciJykKKworI2RlZmluZSBNSU5f
RVhQQU5TSU9OIDYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyNkZWZpbmUgTUFYX0VYUEFOU0lP
TiAoMiAqIE1JTl9FWFBBTlNJT04pCisjZWxzZQorI2RlZmluZSBNQVhfRVhQQU5TSU9OIE1JTl9F
WFBBTlNJT04KKyNlbmRpZgorCitzdGF0aWMgUHlfc3NpemVfdAorYXNjaWlfZXNjYXBlX2NoYXIo
UHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpIHsKKyAgICBQeV9V
TklDT0RFIHg7CisgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKKyAgICBzd2l0Y2ggKGMpIHsK
KyAgICAgICAgY2FzZSAnLyc6IG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7IGJyZWFrOworICAg
ICAgICBjYXNlICdcXCc6IG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7IGJyZWFrOworICAgICAg
ICBjYXNlICciJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1xiJzogb3V0cHV0W2NoYXJzKytdID0gJ2InOyBicmVhazsKKyAgICAgICAgY2FzZSAnXGYn
OiBvdXRwdXRbY2hhcnMrK10gPSAnZic7IGJyZWFrOworICAgICAgICBjYXNlICdcbic6IG91dHB1
dFtjaGFycysrXSA9ICduJzsgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xyJzogb3V0cHV0W2NoYXJz
KytdID0gJ3InOyBicmVhazsKKyAgICAgICAgY2FzZSAnXHQnOiBvdXRwdXRbY2hhcnMrK10gPSAn
dCc7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAg
ICAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgICAgIC8qIFVURi0xNiBz
dXJyb2dhdGUgcGFpciAqLworICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgdiA9IGMgLSAweDEw
MDAwOworICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYgMHgzZmYpOwor
ICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKKyAgICAgICAgICAgICAgICB4
ID0gKGMgJiAweGYwMDApID4+IDEyOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9
ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgICAgIHgg
PSAoYyAmIDB4MGYwMCkgPj4gODsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAo
eCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgICAgICB4ID0g
KGMgJiAweDAwZjApID4+IDQ7CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHgg
PCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7CisgICAgICAgICAgICAgICAgeCA9IChj
ICYgMHgwMDBmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/
ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgICAgICBjID0gMHhkYzAwIHwg
KHYgJiAweDNmZik7CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKKyAg
ICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwor
ICAgICAgICAgICAgeCA9IChjICYgMHhmMDAwKSA+PiAxMjsKKyAgICAgICAgICAgIG91dHB1dFtj
aGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAg
ICAgeCA9IChjICYgMHgwZjAwKSA+PiA4OworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0g
KHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7CisgICAgICAgICAgICB4ID0gKGMg
JiAweDAwZjApID4+IDQ7CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/
ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgIHggPSAoYyAmIDB4MDAwZik7
CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScg
KyAoeCAtIDEwKTsKKyAgICB9CisgICAgcmV0dXJuIGNoYXJzOworfQorCitzdGF0aWMgUHlPYmpl
Y3QgKgorYXNjaWlfZXNjYXBlX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyKSB7CisgICAgUHlfc3Np
emVfdCBpOworICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7CisgICAgUHlfc3NpemVfdCBvdXRw
dXRfc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGNoYXJzOworICAgIFB5T2JqZWN0ICpydmFsOworICAg
IGNoYXIgKm91dHB1dDsKKyAgICBQeV9VTklDT0RFICppbnB1dF91bmljb2RlOworCisgICAgaW5w
dXRfY2hhcnMgPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpOworICAgIGlucHV0X3VuaWNvZGUg
PSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7CisgICAgLyogT25lIGNoYXIgaW5wdXQgY2Fu
IGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0IG9mIHRoZXNlICovCisgICAgb3V0
cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOworICAgIHJ2
YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRwdXRfc2l6ZSk7CisgICAg
aWYgKHJ2YWwgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb3V0
cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOworICAgIGNoYXJzID0gMDsKKyAgICBvdXRw
dXRbY2hhcnMrK10gPSAnIic7CisgICAgZm9yIChpID0gMDsgaSA8IGlucHV0X2NoYXJzOyBpKysp
IHsKKyAgICAgICAgUHlfVU5JQ09ERSBjID0gaW5wdXRfdW5pY29kZVtpXTsKKyAgICAgICAgaWYg
KFNfQ0hBUihjKSkgeworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJzID0gYXNjaWlfZXNjYXBlX2NoYXIoYywg
b3V0cHV0LCBjaGFycyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG91dHB1dF9zaXplIC0gY2hh
cnMgPCAoMSArIE1BWF9FWFBBTlNJT04pKSB7CisgICAgICAgICAgICAvKiBUaGVyZSdzIG1vcmUg
dGhhbiBmb3VyLCBzbyBsZXQncyByZXNpemUgYnkgYSBsb3QgKi8KKyAgICAgICAgICAgIG91dHB1
dF9zaXplICo9IDI7CisgICAgICAgICAgICAvKiBUaGlzIGlzIGFuIHVwcGVyIGJvdW5kICovCisg
ICAgICAgICAgICBpZiAob3V0cHV0X3NpemUgPiAyICsgKGlucHV0X2NoYXJzICogTUFYX0VYUEFO
U0lPTikpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IDIgKyAoaW5wdXRfY2hhcnMg
KiBNQVhfRVhQQU5TSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlTdHJp
bmdfUmVzaXplKCZydmFsLCBvdXRwdXRfc2l6ZSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHB1dCA9IFB5U3RyaW5n
X0FTX1NUUklORyhydmFsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBvdXRwdXRbY2hhcnMrK10g
PSAnIic7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2YWwsIGNoYXJzKSA9PSAtMSkgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRp
YyBQeU9iamVjdCAqCithc2NpaV9lc2NhcGVfc3RyKFB5T2JqZWN0ICpweXN0cikgeworICAgIFB5
X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGlucHV0X2NoYXJzOworICAgIFB5X3NzaXplX3Qg
b3V0cHV0X3NpemU7CisgICAgUHlfc3NpemVfdCBjaGFyczsKKyAgICBQeU9iamVjdCAqcnZhbDsK
KyAgICBjaGFyICpvdXRwdXQ7CisgICAgY2hhciAqaW5wdXRfc3RyOworCisgICAgaW5wdXRfY2hh
cnMgPSBQeVN0cmluZ19HRVRfU0laRShweXN0cik7CisgICAgaW5wdXRfc3RyID0gUHlTdHJpbmdf
QVNfU1RSSU5HKHB5c3RyKTsKKyAgICAvKiBPbmUgY2hhciBpbnB1dCBjYW4gYmUgdXAgdG8gNiBj
aGFycyBvdXRwdXQsIGVzdGltYXRlIDQgb2YgdGhlc2UgKi8KKyAgICBvdXRwdXRfc2l6ZSA9IDIg
KyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7CisgICAgcnZhbCA9IFB5U3RyaW5n
X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dHB1dF9zaXplKTsKKyAgICBpZiAocnZhbCA9PSBO
VUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvdXRwdXQgPSBQeVN0cmlu
Z19BU19TVFJJTkcocnZhbCk7CisgICAgY2hhcnMgPSAwOworICAgIG91dHB1dFtjaGFycysrXSA9
ICciJzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hhcnM7IGkrKykgeworICAgICAgICBQ
eV9VTklDT0RFIGMgPSAoUHlfVU5JQ09ERSlpbnB1dF9zdHJbaV07CisgICAgICAgIGlmIChTX0NI
QVIoYykpIHsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7CisgICAgICAg
IH0gZWxzZSBpZiAoYyA+IDB4N0YpIHsKKyAgICAgICAgICAgIC8qIFdlIGhpdCBhIG5vbi1BU0NJ
SSBjaGFyYWN0ZXIsIGJhaWwgdG8gdW5pY29kZSBtb2RlICovCisgICAgICAgICAgICBQeU9iamVj
dCAqdW5pOworICAgICAgICAgICAgUHlfREVDUkVGKHJ2YWwpOworICAgICAgICAgICAgdW5pID0g
UHlVbmljb2RlX0RlY29kZVVURjgoaW5wdXRfc3RyLCBpbnB1dF9jaGFycywgInN0cmljdCIpOwor
ICAgICAgICAgICAgaWYgKHVuaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydmFsID0gYXNjaWlfZXNjYXBlX3VuaWNv
ZGUodW5pKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1bmkpOworICAgICAgICAgICAgcmV0dXJu
IHJ2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFycyA9IGFzY2lpX2VzY2Fw
ZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOworICAgICAgICB9CisgICAgICAgIC8qIEFuIEFTQ0lJ
IGNoYXIgY2FuJ3QgcG9zc2libHkgZXhwYW5kIHRvIGEgc3Vycm9nYXRlISAqLworICAgICAgICBp
ZiAob3V0cHV0X3NpemUgLSBjaGFycyA8ICgxICsgTUlOX0VYUEFOU0lPTikpIHsKKyAgICAgICAg
ICAgIC8qIFRoZXJlJ3MgbW9yZSB0aGFuIGZvdXIsIHNvIGxldCdzIHJlc2l6ZSBieSBhIGxvdCAq
LworICAgICAgICAgICAgb3V0cHV0X3NpemUgKj0gMjsKKyAgICAgICAgICAgIGlmIChvdXRwdXRf
c2l6ZSA+IDIgKyAoaW5wdXRfY2hhcnMgKiBNSU5fRVhQQU5TSU9OKSkgeworICAgICAgICAgICAg
ICAgIG91dHB1dF9zaXplID0gMiArIChpbnB1dF9jaGFycyAqIE1JTl9FWFBBTlNJT04pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2YWwsIG91dHB1
dF9zaXplKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOworICAg
ICAgICB9CisgICAgfQorICAgIG91dHB1dFtjaGFycysrXSA9ICciJzsKKyAgICBpZiAoX1B5U3Ry
aW5nX1Jlc2l6ZSgmcnZhbCwgY2hhcnMpID09IC0xKSB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKyAgICByZXR1cm4gcnZhbDsKK30KKworUHlEb2NfU1RSVkFSKHB5ZG9jX2VuY29kZV9i
YXNlc3RyaW5nX2FzY2lpLAorICAgICJlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShiYXNlc3RyaW5n
KSAtPiBzdHJcbiIKKyAgICAiXG4iCisgICAgIi4uLiIKKyk7CisKK3N0YXRpYyBQeU9iamVjdCAq
CitweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShQeU9iamVjdCogc2VsZiBfX2F0dHJpYnV0ZV9f
KChfX3VudXNlZF9fKSksIFB5T2JqZWN0ICpweXN0cikgeworICAgIC8qIE1FVEhfTyAqLworICAg
IGlmIChQeVN0cmluZ19DaGVjayhweXN0cikpIHsKKyAgICAgICAgcmV0dXJuIGFzY2lpX2VzY2Fw
ZV9zdHIocHlzdHIpOworICAgIH0gZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgewor
ICAgICAgICByZXR1cm4gYXNjaWlfZXNjYXBlX3VuaWNvZGUocHlzdHIpOworICAgIH0KKyAgICBQ
eUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBh
IHN0cmluZyIpOworICAgIHJldHVybiBOVUxMOworfQorCisjZGVmaW5lIERFRk4obiwgaykgXAor
ICAgIHsgIFwKKyAgICAgICAgI24sIFwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5XyAjI24sIFwK
KyAgICAgICAgaywgXAorICAgICAgICBweWRvY18gIyNuIFwKKyAgICB9CitzdGF0aWMgUHlNZXRo
b2REZWYgc3BlZWR1cHNfbWV0aG9kc1tdID0geworICAgIERFRk4oZW5jb2RlX2Jhc2VzdHJpbmdf
YXNjaWksIE1FVEhfTyksCisgICAge30KK307CisjdW5kZWYgREVGTgorCit2b2lkCitpbml0X3Nw
ZWVkdXBzKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07CisgICAgbSA9IFB5X0luaXRNb2R1bGU0
KCJfc3BlZWR1cHMiLCBzcGVlZHVwc19tZXRob2RzLCBOVUxMLCBOVUxMLCBQWVRIT05fQVBJX1ZF
UlNJT04pOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9kZWNvZGVyLnB5
IGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9kZWNvZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmExYjUzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9z
aW1wbGVqc29uL2RlY29kZXIucHkKQEAgLTAsMCArMSwyNzMgQEAKKyIiIgorSW1wbGVtZW50YXRp
b24gb2YgSlNPTkRlY29kZXIKKyIiIgoraW1wb3J0IHJlCisKK2Zyb20gc2ltcGxlanNvbi5zY2Fu
bmVyIGltcG9ydCBTY2FubmVyLCBwYXR0ZXJuCisKK0ZMQUdTID0gcmUuVkVSQk9TRSB8IHJlLk1V
TFRJTElORSB8IHJlLkRPVEFMTAorCitkZWYgX2Zsb2F0Y29uc3RhbnRzKCk6CisgICAgaW1wb3J0
IHN0cnVjdAorICAgIGltcG9ydCBzeXMKKyAgICBfQllURVMgPSAnN0ZGODAwMDAwMDAwMDAwMDdG
RjAwMDAwMDAwMDAwMDAnLmRlY29kZSgnaGV4JykKKyAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdi
aWcnOgorICAgICAgICBfQllURVMgPSBfQllURVNbOjhdWzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0x
XQorICAgIG5hbiwgaW5mID0gc3RydWN0LnVucGFjaygnZGQnLCBfQllURVMpCisgICAgcmV0dXJu
IG5hbiwgaW5mLCAtaW5mCisKK05hTiwgUG9zSW5mLCBOZWdJbmYgPSBfZmxvYXRjb25zdGFudHMo
KQorCitkZWYgbGluZWNvbChkb2MsIHBvcyk6CisgICAgbGluZW5vID0gZG9jLmNvdW50KCdcbics
IDAsIHBvcykgKyAxCisgICAgaWYgbGluZW5vID09IDE6CisgICAgICAgIGNvbG5vID0gcG9zCisg
ICAgZWxzZToKKyAgICAgICAgY29sbm8gPSBwb3MgLSBkb2MucmluZGV4KCdcbicsIDAsIHBvcykK
KyAgICByZXR1cm4gbGluZW5vLCBjb2xubworCitkZWYgZXJybXNnKG1zZywgZG9jLCBwb3MsIGVu
ZD1Ob25lKToKKyAgICBsaW5lbm8sIGNvbG5vID0gbGluZWNvbChkb2MsIHBvcykKKyAgICBpZiBl
bmQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuICclczogbGluZSAlZCBjb2x1bW4gJWQgKGNoYXIg
JWQpJyAlIChtc2csIGxpbmVubywgY29sbm8sIHBvcykKKyAgICBlbmRsaW5lbm8sIGVuZGNvbG5v
ID0gbGluZWNvbChkb2MsIGVuZCkKKyAgICByZXR1cm4gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAt
IGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkIC0gJWQpJyAlICgKKyAgICAgICAgbXNnLCBsaW5l
bm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBwb3MsIGVuZCkKKworX0NPTlNUQU5UUyA9
IHsKKyAgICAnLUluZmluaXR5JzogTmVnSW5mLAorICAgICdJbmZpbml0eSc6IFBvc0luZiwKKyAg
ICAnTmFOJzogTmFOLAorICAgICd0cnVlJzogVHJ1ZSwKKyAgICAnZmFsc2UnOiBGYWxzZSwKKyAg
ICAnbnVsbCc6IE5vbmUsCit9CisKK2RlZiBKU09OQ29uc3RhbnQobWF0Y2gsIGNvbnRleHQsIGM9
X0NPTlNUQU5UUyk6CisgICAgcmV0dXJuIGNbbWF0Y2guZ3JvdXAoMCldLCBOb25lCitwYXR0ZXJu
KCcoLT9JbmZpbml0eXxOYU58dHJ1ZXxmYWxzZXxudWxsKScpKEpTT05Db25zdGFudCkKKworZGVm
IEpTT05OdW1iZXIobWF0Y2gsIGNvbnRleHQpOgorICAgIG1hdGNoID0gSlNPTk51bWJlci5yZWdl
eC5tYXRjaChtYXRjaC5zdHJpbmcsICptYXRjaC5zcGFuKCkpCisgICAgaW50ZWdlciwgZnJhYywg
ZXhwID0gbWF0Y2guZ3JvdXBzKCkKKyAgICBpZiBmcmFjIG9yIGV4cDoKKyAgICAgICAgcmVzID0g
ZmxvYXQoaW50ZWdlciArIChmcmFjIG9yICcnKSArIChleHAgb3IgJycpKQorICAgIGVsc2U6Cisg
ICAgICAgIHJlcyA9IGludChpbnRlZ2VyKQorICAgIHJldHVybiByZXMsIE5vbmUKK3BhdHRlcm4o
cicoLT8oPzowfFsxLTldXGQqKSkoXC5cZCspPyhbZUVdWy0rXT9cZCspPycpKEpTT05OdW1iZXIp
CisKK1NUUklOR0NIVU5LID0gcmUuY29tcGlsZShyJyguKj8pKFsiXFxdKScsIEZMQUdTKQorQkFD
S1NMQVNIID0geworICAgICciJzogdSciJywgJ1xcJzogdSdcXCcsICcvJzogdScvJywKKyAgICAn
Yic6IHUnXGInLCAnZic6IHUnXGYnLCAnbic6IHUnXG4nLCAncic6IHUnXHInLCAndCc6IHUnXHQn
LAorfQorCitERUZBVUxUX0VOQ09ESU5HID0gInV0Zi04IgorCitkZWYgc2NhbnN0cmluZyhzLCBl
bmQsIGVuY29kaW5nPU5vbmUsIF9iPUJBQ0tTTEFTSCwgX209U1RSSU5HQ0hVTksubWF0Y2gpOgor
ICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgIGVuY29kaW5nID0gREVGQVVMVF9FTkNP
RElORworICAgIGNodW5rcyA9IFtdCisgICAgX2FwcGVuZCA9IGNodW5rcy5hcHBlbmQKKyAgICBi
ZWdpbiA9IGVuZCAtIDEKKyAgICB3aGlsZSAxOgorICAgICAgICBjaHVuayA9IF9tKHMsIGVuZCkK
KyAgICAgICAgaWYgY2h1bmsgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
CisgICAgICAgICAgICAgICAgZXJybXNnKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0
IiwgcywgYmVnaW4pKQorICAgICAgICBlbmQgPSBjaHVuay5lbmQoKQorICAgICAgICBjb250ZW50
LCB0ZXJtaW5hdG9yID0gY2h1bmsuZ3JvdXBzKCkKKyAgICAgICAgaWYgY29udGVudDoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbnRlbnQsIHVuaWNvZGUpOgorICAgICAgICAgICAg
ICAgIGNvbnRlbnQgPSB1bmljb2RlKGNvbnRlbnQsIGVuY29kaW5nKQorICAgICAgICAgICAgX2Fw
cGVuZChjb250ZW50KQorICAgICAgICBpZiB0ZXJtaW5hdG9yID09ICciJzoKKyAgICAgICAgICAg
IGJyZWFrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVzYyA9IHNbZW5kXQorICAgICAgICBl
eGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAg
ICAgICAgICAgZXJybXNnKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0IiwgcywgYmVn
aW4pKQorICAgICAgICBpZiBlc2MgIT0gJ3UnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIG0gPSBfYltlc2NdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgZXJybXNnKCJJ
bnZhbGlkIFxcZXNjYXBlOiAlciIgJSAoZXNjLCksIHMsIGVuZCkpCisgICAgICAgICAgICBlbmQg
Kz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXNjID0gc1tlbmQgKyAxOmVuZCArIDVd
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbSA9IHVuaWNocihpbnQoZXNjLCAx
NikpCisgICAgICAgICAgICAgICAgaWYgbGVuKGVzYykgIT0gNCBvciBub3QgZXNjLmlzYWxudW0o
KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2co
IkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBzLCBlbmQpKQorICAgICAgICAgICAgZW5kICs9IDUK
KyAgICAgICAgX2FwcGVuZChtKQorICAgIHJldHVybiB1Jycuam9pbihjaHVua3MpLCBlbmQKKwor
ZGVmIEpTT05TdHJpbmcobWF0Y2gsIGNvbnRleHQpOgorICAgIGVuY29kaW5nID0gZ2V0YXR0cihj
b250ZXh0LCAnZW5jb2RpbmcnLCBOb25lKQorICAgIHJldHVybiBzY2Fuc3RyaW5nKG1hdGNoLnN0
cmluZywgbWF0Y2guZW5kKCksIGVuY29kaW5nKQorcGF0dGVybihyJyInKShKU09OU3RyaW5nKQor
CitXSElURVNQQUNFID0gcmUuY29tcGlsZShyJ1xzKicsIEZMQUdTKQorCitkZWYgSlNPTk9iamVj
dChtYXRjaCwgY29udGV4dCwgX3c9V0hJVEVTUEFDRS5tYXRjaCk6CisgICAgcGFpcnMgPSB7fQor
ICAgIHMgPSBtYXRjaC5zdHJpbmcKKyAgICBlbmQgPSBfdyhzLCBtYXRjaC5lbmQoKSkuZW5kKCkK
KyAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgIyB0cml2aWFsIGVtcHR5IG9iamVj
dAorICAgIGlmIG5leHRjaGFyID09ICd9JzoKKyAgICAgICAgcmV0dXJuIHBhaXJzLCBlbmQgKyAx
CisgICAgaWYgbmV4dGNoYXIgIT0gJyInOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1z
ZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQpKQorICAgIGVuZCArPSAxCisgICAg
ZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNvZGluZycsIE5vbmUpCisgICAgaXRlcnNj
YW4gPSBKU09OU2Nhbm5lci5pdGVyc2NhbgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGtleSwg
ZW5kID0gc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nKQorICAgICAgICBlbmQgPSBfdyhzLCBl
bmQpLmVuZCgpCisgICAgICAgIGlmIHNbZW5kOmVuZCArIDFdICE9ICc6JzoKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBzLCBlbmQp
KQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQoKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICB2YWx1ZSwgZW5kID0gaXRlcnNjYW4ocywgaWR4PWVuZCwgY29udGV4dD1jb250ZXh0
KS5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAg
IHBhaXJzW2tleV0gPSB2YWx1ZQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAg
ICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAgICAgZW5kICs9IDEKKyAgICAgICAg
aWYgbmV4dGNoYXIgPT0gJ30nOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbmV4dGNo
YXIgIT0gJywnOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGlu
ZyAsIGRlbGltaXRlciIsIHMsIGVuZCAtIDEpKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVu
ZCgpCisgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAgICAgZW5kICs9IDEK
KyAgICAgICAgaWYgbmV4dGNoYXIgIT0gJyInOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kIC0gMSkpCisgICAgb2Jq
ZWN0X2hvb2sgPSBnZXRhdHRyKGNvbnRleHQsICdvYmplY3RfaG9vaycsIE5vbmUpCisgICAgaWYg
b2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIHBhaXJzID0gb2JqZWN0X2hvb2socGFp
cnMpCisgICAgcmV0dXJuIHBhaXJzLCBlbmQKK3BhdHRlcm4ocid7JykoSlNPTk9iamVjdCkKKyAg
ICAgICAgICAgIAorZGVmIEpTT05BcnJheShtYXRjaCwgY29udGV4dCwgX3c9V0hJVEVTUEFDRS5t
YXRjaCk6CisgICAgdmFsdWVzID0gW10KKyAgICBzID0gbWF0Y2guc3RyaW5nCisgICAgZW5kID0g
X3cocywgbWF0Y2guZW5kKCkpLmVuZCgpCisgICAgIyBsb29rLWFoZWFkIGZvciB0cml2aWFsIGVt
cHR5IGFycmF5CisgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgIGlmIG5leHRjaGFy
ID09ICddJzoKKyAgICAgICAgcmV0dXJuIHZhbHVlcywgZW5kICsgMQorICAgIGl0ZXJzY2FuID0g
SlNPTlNjYW5uZXIuaXRlcnNjYW4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICB2YWx1ZSwgZW5kID0gaXRlcnNjYW4ocywgaWR4PWVuZCwgY29udGV4dD1jb250ZXh0
KS5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAg
IHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAg
ICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICBlbmQgKz0gMQorICAgICAg
ICBpZiBuZXh0Y2hhciA9PSAnXSc6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuZXh0
Y2hhciAhPSAnLCc6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0
aW5nICwgZGVsaW1pdGVyIiwgcywgZW5kKSkKKyAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQo
KQorICAgIHJldHVybiB2YWx1ZXMsIGVuZAorcGF0dGVybihyJ1xbJykoSlNPTkFycmF5KQorIAor
QU5ZVEhJTkcgPSBbCisgICAgSlNPTk9iamVjdCwKKyAgICBKU09OQXJyYXksCisgICAgSlNPTlN0
cmluZywKKyAgICBKU09OQ29uc3RhbnQsCisgICAgSlNPTk51bWJlciwKK10KKworSlNPTlNjYW5u
ZXIgPSBTY2FubmVyKEFOWVRISU5HKQorCitjbGFzcyBKU09ORGVjb2RlcihvYmplY3QpOgorICAg
ICIiIgorICAgIFNpbXBsZSBKU09OIDxodHRwOi8vanNvbi5vcmc+IGRlY29kZXIKKworICAgIFBl
cmZvcm1zIHRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb25zIGluIGRlY29kaW5nOgorICAgIAorICAg
ICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IEpTT04gICAgICAg
ICAgfCBQeXRob24gICAgICAgICAgICB8CisgICAgKz09PT09PT09PT09PT09PSs9PT09PT09PT09
PT09PT09PT09KworICAgIHwgb2JqZWN0ICAgICAgICB8IGRpY3QgICAgICAgICAgICAgIHwKKyAg
ICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBhcnJheSAgICAg
ICAgIHwgbGlzdCAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t
LS0tLS0tLS0tLSsKKyAgICB8IHN0cmluZyAgICAgICAgfCB1bmljb2RlICAgICAgICAgICB8Cisg
ICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgbnVtYmVyIChp
bnQpICB8IGludCwgbG9uZyAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t
LS0tLS0tLS0tLS0rCisgICAgfCBudW1iZXIgKHJlYWwpIHwgZmxvYXQgICAgICAgICAgICAgfAor
ICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IHRydWUgICAg
ICAgICAgfCBUcnVlICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t
LS0tLS0tLS0tLS0tKworICAgIHwgZmFsc2UgICAgICAgICB8IEZhbHNlICAgICAgICAgICAgIHwK
KyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBudWxsICAg
ICAgICAgIHwgTm9uZSAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0t
LS0tLS0tLS0tLS0tLSsKKworICAgIEl0IGFsc28gdW5kZXJzdGFuZHMgYGBOYU5gYCwgYGBJbmZp
bml0eWBgLCBhbmQgYGAtSW5maW5pdHlgYCBhcworICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYGBm
bG9hdGBgIHZhbHVlcywgd2hpY2ggaXMgb3V0c2lkZSB0aGUgSlNPTiBzcGVjLgorICAgICIiIgor
CisgICAgX3NjYW5uZXIgPSBTY2FubmVyKEFOWVRISU5HKQorICAgIF9fYWxsX18gPSBbJ19faW5p
dF9fJywgJ2RlY29kZScsICdyYXdfZGVjb2RlJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBl
bmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIGBg
ZW5jb2RpbmdgYCBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGludGVycHJldCBhbnkg
YGBzdHJgYAorICAgICAgICBvYmplY3RzIGRlY29kZWQgYnkgdGhpcyBpbnN0YW5jZSAodXRmLTgg
YnkgZGVmYXVsdCkuICBJdCBoYXMgbm8KKyAgICAgICAgZWZmZWN0IHdoZW4gZGVjb2RpbmcgYGB1
bmljb2RlYGAgb2JqZWN0cy4KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhhdCBjdXJyZW50bHkg
b25seSBlbmNvZGluZ3MgdGhhdCBhcmUgYSBzdXBlcnNldCBvZiBBU0NJSSB3b3JrLAorICAgICAg
ICBzdHJpbmdzIG9mIG90aGVyIGVuY29kaW5ncyBzaG91bGQgYmUgcGFzc2VkIGluIGFzIGBgdW5p
Y29kZWBgLgorCisgICAgICAgIGBgb2JqZWN0X2hvb2tgYCwgaWYgc3BlY2lmaWVkLCB3aWxsIGJl
IGNhbGxlZCB3aXRoIHRoZSByZXN1bHQKKyAgICAgICAgb2YgZXZlcnkgSlNPTiBvYmplY3QgZGVj
b2RlZCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWQgaW4KKyAgICAgICAgcGxhY2Ug
b2YgdGhlIGdpdmVuIGBgZGljdGBgLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGN1c3Rv
bQorICAgICAgICBkZXNlcmlhbGl6YXRpb25zIChlLmcuIHRvIHN1cHBvcnQgSlNPTi1SUEMgY2xh
c3MgaGludGluZykuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2Rp
bmcKKyAgICAgICAgc2VsZi5vYmplY3RfaG9vayA9IG9iamVjdF9ob29rCisKKyAgICBkZWYgZGVj
b2RlKHNlbGYsIHMsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgorICAgICAgICAiIiIKKyAgICAgICAg
UmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgYGBzYGAgKGEgYGBzdHJgYCBvciBg
YHVuaWNvZGVgYAorICAgICAgICBpbnN0YW5jZSBjb250YWluaW5nIGEgSlNPTiBkb2N1bWVudCkK
KyAgICAgICAgIiIiCisgICAgICAgIG9iaiwgZW5kID0gc2VsZi5yYXdfZGVjb2RlKHMsIGlkeD1f
dyhzLCAwKS5lbmQoKSkKKyAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQorICAgICAgICBp
ZiBlbmQgIT0gbGVuKHMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4
dHJhIGRhdGEiLCBzLCBlbmQsIGxlbihzKSkpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRl
ZiByYXdfZGVjb2RlKHNlbGYsIHMsICoqa3cpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVjb2Rl
IGEgSlNPTiBkb2N1bWVudCBmcm9tIGBgc2BgIChhIGBgc3RyYGAgb3IgYGB1bmljb2RlYGAgYmVn
aW5uaW5nCisgICAgICAgIHdpdGggYSBKU09OIGRvY3VtZW50KSBhbmQgcmV0dXJuIGEgMi10dXBs
ZSBvZiB0aGUgUHl0aG9uCisgICAgICAgIHJlcHJlc2VudGF0aW9uIGFuZCB0aGUgaW5kZXggaW4g
YGBzYGAgd2hlcmUgdGhlIGRvY3VtZW50IGVuZGVkLgorCisgICAgICAgIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gZGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIHRoYXQgbWF5CisgICAg
ICAgIGhhdmUgZXh0cmFuZW91cyBkYXRhIGF0IHRoZSBlbmQuCisgICAgICAgICIiIgorICAgICAg
ICBrdy5zZXRkZWZhdWx0KCdjb250ZXh0Jywgc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgb2JqLCBlbmQgPSBzZWxmLl9zY2FubmVyLml0ZXJzY2FuKHMsICoqa3cpLm5leHQoKQorICAg
ICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
Ik5vIEpTT04gb2JqZWN0IGNvdWxkIGJlIGRlY29kZWQiKQorICAgICAgICByZXR1cm4gb2JqLCBl
bmQKKworX19hbGxfXyA9IFsnSlNPTkRlY29kZXInXQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
c2ltcGxlanNvbi9lbmNvZGVyLnB5IGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9lbmNvZGVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOTkxOWEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL2VuY29kZXIucHkKQEAgLTAsMCArMSwzNzEg
QEAKKyIiIgorSW1wbGVtZW50YXRpb24gb2YgSlNPTkVuY29kZXIKKyIiIgoraW1wb3J0IHJlCit0
cnk6CisgICAgZnJvbSBzaW1wbGVqc29uIGltcG9ydCBfc3BlZWR1cHMKK2V4Y2VwdCBJbXBvcnRF
cnJvcjoKKyAgICBfc3BlZWR1cHMgPSBOb25lCisKK0VTQ0FQRSA9IHJlLmNvbXBpbGUocidbXHgw
MC1ceDE5XFwiXGJcZlxuXHJcdF0nKQorRVNDQVBFX0FTQ0lJID0gcmUuY29tcGlsZShyJyhbXFwi
L118W15cIC1+XSknKQorRVNDQVBFX0RDVCA9IHsKKyAgICAjIGVzY2FwZSBhbGwgZm9yd2FyZCBz
bGFzaGVzIHRvIHByZXZlbnQgPC9zY3JpcHQ+IGF0dGFjaworICAgICcvJzogJ1xcLycsCisgICAg
J1xcJzogJ1xcXFwnLAorICAgICciJzogJ1xcIicsCisgICAgJ1xiJzogJ1xcYicsCisgICAgJ1xm
JzogJ1xcZicsCisgICAgJ1xuJzogJ1xcbicsCisgICAgJ1xyJzogJ1xccicsCisgICAgJ1x0Jzog
J1xcdCcsCit9Citmb3IgaSBpbiByYW5nZSgweDIwKToKKyAgICBFU0NBUEVfRENULnNldGRlZmF1
bHQoY2hyKGkpLCAnXFx1JTA0eCcgJSAoaSwpKQorCisjIGFzc3VtZSB0aGlzIHByb2R1Y2VzIGFu
IGluZmluaXR5IG9uIGFsbCBtYWNoaW5lcyAocHJvYmFibHkgbm90IGd1YXJhbnRlZWQpCitJTkZJ
TklUWSA9IGZsb2F0KCcxZTY2NjY2JykKKworZGVmIGZsb2F0c3RyKG8sIGFsbG93X25hbj1UcnVl
KToKKyAgICAjIENoZWNrIGZvciBzcGVjaWFscy4gIE5vdGUgdGhhdCB0aGlzIHR5cGUgb2YgdGVz
dCBpcyBwcm9jZXNzb3ItIGFuZC9vcgorICAgICMgcGxhdGZvcm0tc3BlY2lmaWMsIHNvIGRvIHRl
c3RzIHdoaWNoIGRvbid0IGRlcGVuZCBvbiB0aGUgaW50ZXJuYWxzLgorCisgICAgaWYgbyAhPSBv
OgorICAgICAgICB0ZXh0ID0gJ05hTicKKyAgICBlbGlmIG8gPT0gSU5GSU5JVFk6CisgICAgICAg
IHRleHQgPSAnSW5maW5pdHknCisgICAgZWxpZiBvID09IC1JTkZJTklUWToKKyAgICAgICAgdGV4
dCA9ICctSW5maW5pdHknCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHJlcHIobykKKworICAg
IGlmIG5vdCBhbGxvd19uYW46CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk91dCBvZiByYW5n
ZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudDogJXIiCisgICAgICAgICAgICAl
IChvLCkpCisKKyAgICByZXR1cm4gdGV4dAorCisKK2RlZiBlbmNvZGVfYmFzZXN0cmluZyhzKToK
KyAgICAiIiIKKyAgICBSZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIHN0
cmluZworICAgICIiIgorICAgIGRlZiByZXBsYWNlKG1hdGNoKToKKyAgICAgICAgcmV0dXJuIEVT
Q0FQRV9EQ1RbbWF0Y2guZ3JvdXAoMCldCisgICAgcmV0dXJuICciJyArIEVTQ0FQRS5zdWIocmVw
bGFjZSwgcykgKyAnIicKKworZGVmIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHMpOgorICAgIGRl
ZiByZXBsYWNlKG1hdGNoKToKKyAgICAgICAgcyA9IG1hdGNoLmdyb3VwKDApCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJldHVybiBFU0NBUEVfRENUW3NdCisgICAgICAgIGV4Y2VwdCBLZXlF
cnJvcjoKKyAgICAgICAgICAgIG4gPSBvcmQocykKKyAgICAgICAgICAgIGlmIG4gPCAweDEwMDAw
OgorICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JTA0eCcgJSAobiwpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICMgc3Vycm9nYXRlIHBhaXIKKyAgICAgICAgICAgICAgICBu
IC09IDB4MTAwMDAKKyAgICAgICAgICAgICAgICBzMSA9IDB4ZDgwMCB8ICgobiA+PiAxMCkgJiAw
eDNmZikKKyAgICAgICAgICAgICAgICBzMiA9IDB4ZGMwMCB8IChuICYgMHgzZmYpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICdcXHUlMDR4XFx1JTA0eCcgJSAoczEsIHMyKQorICAgIHJldHVybiAn
IicgKyBzdHIoRVNDQVBFX0FTQ0lJLnN1YihyZXBsYWNlLCBzKSkgKyAnIicKKyAgICAgICAgCit0
cnk6CisgICAgZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgPSBfc3BlZWR1cHMuZW5jb2RlX2Jhc2Vz
dHJpbmdfYXNjaWkKKyAgICBfbmVlZF91dGY4ID0gVHJ1ZQorZXhjZXB0IEF0dHJpYnV0ZUVycm9y
OgorICAgIF9uZWVkX3V0ZjggPSBGYWxzZQorCitjbGFzcyBKU09ORW5jb2RlcihvYmplY3QpOgor
ICAgICIiIgorICAgIEV4dGVuc2libGUgSlNPTiA8aHR0cDovL2pzb24ub3JnPiBlbmNvZGVyIGZv
ciBQeXRob24gZGF0YSBzdHJ1Y3R1cmVzLgorCisgICAgU3VwcG9ydHMgdGhlIGZvbGxvd2luZyBv
YmplY3RzIGFuZCB0eXBlcyBieSBkZWZhdWx0OgorICAgIAorICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFB5dGhvbiAgICAgICAgICAgIHwgSlNPTiAgICAg
ICAgICB8CisgICAgKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KworICAgIHwg
ZGljdCAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBsaXN0LCB0dXBsZSAgICAgICB8IGFycmF5ICAg
ICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8
IHN0ciwgdW5pY29kZSAgICAgIHwgc3RyaW5nICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgIHwgaW50LCBsb25nLCBmbG9hdCAgfCBudW1iZXIg
ICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAg
fCBUcnVlICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0t
LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IEZhbHNlICAgICAgICAgICAgIHwgZmFsc2Ug
ICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAg
IHwgTm9uZSAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisKKyAgICBUbyBleHRlbmQgdGhpcyB0byByZWNvZ25p
emUgb3RoZXIgb2JqZWN0cywgc3ViY2xhc3MgYW5kIGltcGxlbWVudCBhCisgICAgYGAuZGVmYXVs
dCgpYGAgbWV0aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXph
YmxlCisgICAgb2JqZWN0IGZvciBgYG9gYCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0IHNob3Vs
ZCBjYWxsIHRoZSBzdXBlcmNsYXNzCisgICAgaW1wbGVtZW50YXRpb24gKHRvIHJhaXNlIGBgVHlw
ZUVycm9yYGApLgorICAgICIiIgorICAgIF9fYWxsX18gPSBbJ19faW5pdF9fJywgJ2RlZmF1bHQn
LCAnZW5jb2RlJywgJ2l0ZXJlbmNvZGUnXQorICAgIGl0ZW1fc2VwYXJhdG9yID0gJywgJworICAg
IGtleV9zZXBhcmF0b3IgPSAnOiAnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNraXBrZXlzPUZh
bHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwKKyAgICAgICAgICAgIGNoZWNrX2NpcmN1bGFyPVRydWUs
IGFsbG93X25hbj1UcnVlLCBzb3J0X2tleXM9RmFsc2UsCisgICAgICAgICAgICBpbmRlbnQ9Tm9u
ZSwgc2VwYXJhdG9ycz1Ob25lLCBlbmNvZGluZz0ndXRmLTgnKToKKyAgICAgICAgIiIiCisgICAg
ICAgIENvbnN0cnVjdG9yIGZvciBKU09ORW5jb2Rlciwgd2l0aCBzZW5zaWJsZSBkZWZhdWx0cy4K
KworICAgICAgICBJZiBza2lwa2V5cyBpcyBGYWxzZSwgdGhlbiBpdCBpcyBhIFR5cGVFcnJvciB0
byBhdHRlbXB0CisgICAgICAgIGVuY29kaW5nIG9mIGtleXMgdGhhdCBhcmUgbm90IHN0ciwgaW50
LCBsb25nLCBmbG9hdCBvciBOb25lLiAgSWYKKyAgICAgICAgc2tpcGtleXMgaXMgVHJ1ZSwgc3Vj
aCBpdGVtcyBhcmUgc2ltcGx5IHNraXBwZWQuCisKKyAgICAgICAgSWYgZW5zdXJlX2FzY2lpIGlz
IFRydWUsIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHIKKyAgICAgICAgb2JqZWN0
cyB3aXRoIGFsbCBpbmNvbWluZyB1bmljb2RlIGNoYXJhY3RlcnMgZXNjYXBlZC4gIElmCisgICAg
ICAgIGVuc3VyZV9hc2NpaSBpcyBmYWxzZSwgdGhlIG91dHB1dCB3aWxsIGJlIHVuaWNvZGUgb2Jq
ZWN0LgorCisgICAgICAgIElmIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUsIHRoZW4gbGlzdHMsIGRp
Y3RzLCBhbmQgY3VzdG9tIGVuY29kZWQKKyAgICAgICAgb2JqZWN0cyB3aWxsIGJlIGNoZWNrZWQg
Zm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgZHVyaW5nIGVuY29kaW5nIHRvCisgICAgICAgIHByZXZl
bnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uICh3aGljaCB3b3VsZCBjYXVzZSBhbiBPdmVyZmxvd0Vy
cm9yKS4KKyAgICAgICAgT3RoZXJ3aXNlLCBubyBzdWNoIGNoZWNrIHRha2VzIHBsYWNlLgorCisg
ICAgICAgIElmIGFsbG93X25hbiBpcyBUcnVlLCB0aGVuIE5hTiwgSW5maW5pdHksIGFuZCAtSW5m
aW5pdHkgd2lsbCBiZQorICAgICAgICBlbmNvZGVkIGFzIHN1Y2guICBUaGlzIGJlaGF2aW9yIGlz
IG5vdCBKU09OIHNwZWNpZmljYXRpb24gY29tcGxpYW50LAorICAgICAgICBidXQgaXMgY29uc2lz
dGVudCB3aXRoIG1vc3QgSmF2YVNjcmlwdCBiYXNlZCBlbmNvZGVycyBhbmQgZGVjb2RlcnMuCisg
ICAgICAgIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhIFZhbHVlRXJyb3IgdG8gZW5jb2RlIHN1Y2gg
ZmxvYXRzLgorCisgICAgICAgIElmIHNvcnRfa2V5cyBpcyBUcnVlLCB0aGVuIHRoZSBvdXRwdXQg
b2YgZGljdGlvbmFyaWVzIHdpbGwgYmUKKyAgICAgICAgc29ydGVkIGJ5IGtleTsgdGhpcyBpcyB1
c2VmdWwgZm9yIHJlZ3Jlc3Npb24gdGVzdHMgdG8gZW5zdXJlCisgICAgICAgIHRoYXQgSlNPTiBz
ZXJpYWxpemF0aW9ucyBjYW4gYmUgY29tcGFyZWQgb24gYSBkYXktdG8tZGF5IGJhc2lzLgorCisg
ICAgICAgIElmIGluZGVudCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJy
YXkKKyAgICAgICAgZWxlbWVudHMgYW5kIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXBy
aW50ZWQgd2l0aCB0aGF0CisgICAgICAgIGluZGVudCBsZXZlbC4gIEFuIGluZGVudCBsZXZlbCBv
ZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuCisgICAgICAgIE5vbmUgaXMgdGhlIG1vc3Qg
Y29tcGFjdCByZXByZXNlbnRhdGlvbi4KKworICAgICAgICBJZiBzcGVjaWZpZWQsIHNlcGFyYXRv
cnMgc2hvdWxkIGJlIGEgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKQorICAgICAgICB0
dXBsZS4gVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiBUbyBnZXQgdGhlIG1vc3QgY29tcGFj
dCBKU09OCisgICAgICAgIHJlcHJlc2VudGF0aW9uIHlvdSBzaG91bGQgc3BlY2lmeSAoJywnLCAn
OicpIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorCisgICAgICAgIElmIGVuY29kaW5nIGlzIG5v
dCBOb25lLCB0aGVuIGFsbCBpbnB1dCBzdHJpbmdzIHdpbGwgYmUKKyAgICAgICAgdHJhbnNmb3Jt
ZWQgaW50byB1bmljb2RlIHVzaW5nIHRoYXQgZW5jb2RpbmcgcHJpb3IgdG8gSlNPTi1lbmNvZGlu
Zy4gCisgICAgICAgIFRoZSBkZWZhdWx0IGlzIFVURi04LgorICAgICAgICAiIiIKKworICAgICAg
ICBzZWxmLnNraXBrZXlzID0gc2tpcGtleXMKKyAgICAgICAgc2VsZi5lbnN1cmVfYXNjaWkgPSBl
bnN1cmVfYXNjaWkKKyAgICAgICAgc2VsZi5jaGVja19jaXJjdWxhciA9IGNoZWNrX2NpcmN1bGFy
CisgICAgICAgIHNlbGYuYWxsb3dfbmFuID0gYWxsb3dfbmFuCisgICAgICAgIHNlbGYuc29ydF9r
ZXlzID0gc29ydF9rZXlzCisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisgICAgICAgIHNl
bGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgPSAwCisgICAgICAgIGlmIHNlcGFyYXRvcnMgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yLCBzZWxmLmtleV9zZXBhcmF0
b3IgPSBzZXBhcmF0b3JzCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworCisgICAg
ZGVmIF9uZXdsaW5lX2luZGVudChzZWxmKToKKyAgICAgICAgcmV0dXJuICdcbicgKyAoJyAnICog
KHNlbGYuaW5kZW50ICogc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCkpCisKKyAgICBkZWYgX2l0
ZXJlbmNvZGVfbGlzdChzZWxmLCBsc3QsIG1hcmtlcnM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBs
c3Q6CisgICAgICAgICAgICB5aWVsZCAnW10nCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
aWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobHN0KQor
ICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAgICAgICAg
bWFya2Vyc1ttYXJrZXJpZF0gPSBsc3QKKyAgICAgICAgeWllbGQgJ1snCisgICAgICAgIGlmIHNl
bGYuaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9s
ZXZlbCArPSAxCisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IHNlbGYuX25ld2xpbmVfaW5k
ZW50KCkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXds
aW5lX2luZGVudAorICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQorICAgICAgICAgICAgc2VwYXJh
dG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvcgorICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAgICAg
Zm9yIHZhbHVlIGluIGxzdDoKKyAgICAgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgICAg
IGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQg
c2VwYXJhdG9yCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1
ZSwgbWFya2Vycyk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3
bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50
X2xldmVsIC09IDEKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAg
ICAgICAgeWllbGQgJ10nCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZV9kaWN0KHNl
bGYsIGRjdCwgbWFya2Vycz1Ob25lKToKKyAgICAgICAgaWYgbm90IGRjdDoKKyAgICAgICAgICAg
IHlpZWxkICd7fScKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXJrZXJzIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgbWFya2VyaWQgPSBpZChkY3QpCisgICAgICAgICAgICBpZiBt
YXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNp
cmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlk
XSA9IGRjdAorICAgICAgICB5aWVsZCAneycKKyAgICAgICAga2V5X3NlcGFyYXRvciA9IHNlbGYu
a2V5X3NlcGFyYXRvcgorICAgICAgICBpZiBzZWxmLmluZGVudCBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICAgICAgbmV3bGlu
ZV9pbmRlbnQgPSBzZWxmLl9uZXdsaW5lX2luZGVudCgpCisgICAgICAgICAgICBpdGVtX3NlcGFy
YXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAg
eWllbGQgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld2xpbmVf
aW5kZW50ID0gTm9uZQorICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2Vw
YXJhdG9yCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2Np
aToKKyAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nCisgICAgICAg
IGFsbG93X25hbiA9IHNlbGYuYWxsb3dfbmFuCisgICAgICAgIGlmIHNlbGYuc29ydF9rZXlzOgor
ICAgICAgICAgICAga2V5cyA9IGRjdC5rZXlzKCkKKyAgICAgICAgICAgIGtleXMuc29ydCgpCisg
ICAgICAgICAgICBpdGVtcyA9IFsoaywgZGN0W2tdKSBmb3IgayBpbiBrZXlzXQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgaXRlbXMgPSBkY3QuaXRlcml0ZW1zKCkKKyAgICAgICAgX2VuY29k
aW5nID0gc2VsZi5lbmNvZGluZworICAgICAgICBfZG9fZGVjb2RlID0gKF9lbmNvZGluZyBpcyBu
b3QgTm9uZQorICAgICAgICAgICAgYW5kIG5vdCAoX25lZWRfdXRmOCBhbmQgX2VuY29kaW5nID09
ICd1dGYtOCcpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKKyAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgIGlmIF9kb19kZWNvZGU6
CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5kZWNvZGUoX2VuY29kaW5nKQorICAgICAg
ICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAg
cGFzcworICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2Us
IHNvIGl0IG1ha2VzIHNlbnNlIHRvCisgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1h
bnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgorICAgICAgICAgICAg
ZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgorICAgICAgICAgICAgICAgIGtleSA9IGZsb2F0
c3RyKGtleSwgYWxsb3dfbmFuKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgKGlu
dCwgbG9uZykpOgorICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCisgICAgICAgICAgICBl
bGlmIGtleSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIGtleSA9ICd0cnVlJworICAgICAgICAg
ICAgZWxpZiBrZXkgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAga2V5ID0gJ2ZhbHNlJworICAg
ICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcK
KyAgICAgICAgICAgIGVsaWYgc2VsZi5za2lwa2V5czoKKyAgICAgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtl
eSAlciBpcyBub3QgYSBzdHJpbmciICUgKGtleSwpKQorICAgICAgICAgICAgaWYgZmlyc3Q6Cisg
ICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICB5aWVsZCBpdGVtX3NlcGFyYXRvcgorICAgICAgICAgICAgeWllbGQgZW5jb2Rlcihr
ZXkpCisgICAgICAgICAgICB5aWVsZCBrZXlfc2VwYXJhdG9yCisgICAgICAgICAgICBmb3IgY2h1
bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vycyk6CisgICAgICAgICAgICAgICAg
eWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgICAgIHlpZWxk
IHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgeWllbGQgJ30nCisgICAgICAgIGlmIG1h
cmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKwor
ICAgIGRlZiBfaXRlcmVuY29kZShzZWxmLCBvLCBtYXJrZXJzPU5vbmUpOgorICAgICAgICBpZiBp
c2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNj
aWk6CisgICAgICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0
cmluZworICAgICAgICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZworICAgICAgICAgICAg
aWYgKF9lbmNvZGluZyBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvLCBzdHIpCisgICAgICAg
ICAgICAgICAgICAgIGFuZCBub3QgKF9uZWVkX3V0ZjggYW5kIF9lbmNvZGluZyA9PSAndXRmLTgn
KSk6CisgICAgICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9lbmNvZGluZykKKyAgICAgICAgICAg
IHlpZWxkIGVuY29kZXIobykKKyAgICAgICAgZWxpZiBvIGlzIE5vbmU6CisgICAgICAgICAgICB5
aWVsZCAnbnVsbCcKKyAgICAgICAgZWxpZiBvIGlzIFRydWU6CisgICAgICAgICAgICB5aWVsZCAn
dHJ1ZScKKyAgICAgICAgZWxpZiBvIGlzIEZhbHNlOgorICAgICAgICAgICAgeWllbGQgJ2ZhbHNl
JworICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGludCwgbG9uZykpOgorICAgICAgICAgICAg
eWllbGQgc3RyKG8pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBmbG9hdCk6CisgICAgICAg
ICAgICB5aWVsZCBmbG9hdHN0cihvLCBzZWxmLmFsbG93X25hbikKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKG8sIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYu
X2l0ZXJlbmNvZGVfbGlzdChvLCBtYXJrZXJzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBjaHVu
aworICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6CisgICAgICAgICAgICBmb3IgY2h1
bmsgaW4gc2VsZi5faXRlcmVuY29kZV9kaWN0KG8sIG1hcmtlcnMpOgorICAgICAgICAgICAgICAg
IHlpZWxkIGNodW5rCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobykKKyAgICAgICAgICAgICAg
ICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAgICAgICAgICAgIG1h
cmtlcnNbbWFya2VyaWRdID0gbworICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJl
bmNvZGVfZGVmYXVsdChvLCBtYXJrZXJzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBjaHVuawor
ICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBkZWwg
bWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZV9kZWZhdWx0KHNlbGYsIG8s
IG1hcmtlcnM9Tm9uZSk6CisgICAgICAgIG5ld29iaiA9IHNlbGYuZGVmYXVsdChvKQorICAgICAg
ICByZXR1cm4gc2VsZi5faXRlcmVuY29kZShuZXdvYmosIG1hcmtlcnMpCisKKyAgICBkZWYgZGVm
YXVsdChzZWxmLCBvKToKKyAgICAgICAgIiIiCisgICAgICAgIEltcGxlbWVudCB0aGlzIG1ldGhv
ZCBpbiBhIHN1YmNsYXNzIHN1Y2ggdGhhdCBpdCByZXR1cm5zCisgICAgICAgIGEgc2VyaWFsaXph
YmxlIG9iamVjdCBmb3IgYGBvYGAsIG9yIGNhbGxzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uCisg
ICAgICAgICh0byByYWlzZSBhIGBgVHlwZUVycm9yYGApLgorCisgICAgICAgIEZvciBleGFtcGxl
LCB0byBzdXBwb3J0IGFyYml0cmFyeSBpdGVyYXRvcnMsIHlvdSBjb3VsZAorICAgICAgICBpbXBs
ZW1lbnQgZGVmYXVsdCBsaWtlIHRoaXM6OgorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWYg
ZGVmYXVsdChzZWxmLCBvKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
ICAgIGl0ZXJhYmxlID0gaXRlcihvKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6
CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGlzdChpdGVyYWJsZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gSlNPTkVuY29kZXIuZGVmYXVsdChzZWxmLCBvKQorICAgICAgICAiIiIKKyAgICAgICAgcmFp
c2UgVHlwZUVycm9yKCIlciBpcyBub3QgSlNPTiBzZXJpYWxpemFibGUiICUgKG8sKSkKKworICAg
IGRlZiBlbmNvZGUoc2VsZiwgbyk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBKU09O
IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBkYXRhIHN0cnVjdHVyZS4KKworICAg
ICAgICA+Pj4gSlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28iOiBbImJhciIsICJiYXoiXX0pCisg
ICAgICAgICd7ImZvbyI6WyJiYXIiLCAiYmF6Il19JworICAgICAgICAiIiIKKyAgICAgICAgIyBU
aGlzIGlzIGZvciBleHRyZW1lbHkgc2ltcGxlIGNhc2VzIGFuZCBiZW5jaG1hcmtzLi4uCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UobywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKG8sIHN0cik6CisgICAgICAgICAgICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZwor
ICAgICAgICAgICAgICAgIGlmIChfZW5jb2RpbmcgaXMgbm90IE5vbmUgCisgICAgICAgICAgICAg
ICAgICAgICAgICBhbmQgbm90IChfZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQgX25lZWRfdXRmOCkp
OgorICAgICAgICAgICAgICAgICAgICBvID0gby5kZWNvZGUoX2VuY29kaW5nKQorICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKG8pCisgICAgICAgICMgVGhpcyBkb2Vz
bid0IHBhc3MgdGhlIGl0ZXJhdG9yIGRpcmVjdGx5IHRvICcnLmpvaW4oKSBiZWNhdXNlIGl0Cisg
ICAgICAgICMgc3Vja3MgYXQgcmVwb3J0aW5nIGV4Y2VwdGlvbnMuICBJdCdzIGdvaW5nIHRvIGRv
IHRoaXMgaW50ZXJuYWxseQorICAgICAgICAjIGFueXdheSBiZWNhdXNlIGl0IHVzZXMgUHlTZXF1
ZW5jZV9GYXN0IG9yIHNpbWlsYXIuCisgICAgICAgIGNodW5rcyA9IGxpc3Qoc2VsZi5pdGVyZW5j
b2RlKG8pKQorICAgICAgICByZXR1cm4gJycuam9pbihjaHVua3MpCisKKyAgICBkZWYgaXRlcmVu
Y29kZShzZWxmLCBvKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuY29kZSB0aGUgZ2l2ZW4gb2Jq
ZWN0IGFuZCB5aWVsZCBlYWNoIHN0cmluZworICAgICAgICByZXByZXNlbnRhdGlvbiBhcyBhdmFp
bGFibGUuCisgICAgICAgIAorICAgICAgICBGb3IgZXhhbXBsZTo6CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciBjaHVuayBpbiBKU09ORW5jb2RlcigpLml0ZXJlbmNvZGUoYmlnb2JqZWN0
KToKKyAgICAgICAgICAgICAgICBteXNvY2tldC53cml0ZShjaHVuaykKKyAgICAgICAgIiIiCisg
ICAgICAgIGlmIHNlbGYuY2hlY2tfY2lyY3VsYXI6CisgICAgICAgICAgICBtYXJrZXJzID0ge30K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcmtlcnMgPSBOb25lCisgICAgICAgIHJldHVy
biBzZWxmLl9pdGVyZW5jb2RlKG8sIG1hcmtlcnMpCisKK19fYWxsX18gPSBbJ0pTT05FbmNvZGVy
J10KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vanNvbmZpbHRlci5weSBiL1dl
YktpdFRvb2xzL3NpbXBsZWpzb24vanNvbmZpbHRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4wMWNhMjFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvc2lt
cGxlanNvbi9qc29uZmlsdGVyLnB5CkBAIC0wLDAgKzEsNDAgQEAKK2ltcG9ydCBzaW1wbGVqc29u
CitpbXBvcnQgY2dpCisKK2NsYXNzIEpTT05GaWx0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgYXBwLCBtaW1lX3R5cGU9J3RleHQveC1qc29uJyk6CisgICAgICAgIHNlbGYuYXBw
ID0gYXBwCisgICAgICAgIHNlbGYubWltZV90eXBlID0gbWltZV90eXBlCisKKyAgICBkZWYgX19j
YWxsX18oc2VsZiwgZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgorICAgICAgICAjIFJlYWQgSlNP
TiBQT1NUIGlucHV0IHRvIGpzb25maWx0ZXIuanNvbiBpZiBtYXRjaGluZyBtaW1lIHR5cGUKKyAg
ICAgICAgcmVzcG9uc2UgPSB7J3N0YXR1cyc6ICcyMDAgT0snLCAnaGVhZGVycyc6IFtdfQorICAg
ICAgICBkZWYganNvbl9zdGFydF9yZXNwb25zZShzdGF0dXMsIGhlYWRlcnMpOgorICAgICAgICAg
ICAgcmVzcG9uc2VbJ3N0YXR1cyddID0gc3RhdHVzCisgICAgICAgICAgICByZXNwb25zZVsnaGVh
ZGVycyddLmV4dGVuZChoZWFkZXJzKQorICAgICAgICBlbnZpcm9uWydqc29uZmlsdGVyLm1pbWVf
dHlwZSddID0gc2VsZi5taW1lX3R5cGUKKyAgICAgICAgaWYgZW52aXJvbi5nZXQoJ1JFUVVFU1Rf
TUVUSE9EJywgJycpID09ICdQT1NUJzoKKyAgICAgICAgICAgIGlmIGVudmlyb24uZ2V0KCdDT05U
RU5UX1RZUEUnLCAnJykgPT0gc2VsZi5taW1lX3R5cGU6CisgICAgICAgICAgICAgICAgYXJncyA9
IFtfIGZvciBfIGluIFtlbnZpcm9uLmdldCgnQ09OVEVOVF9MRU5HVEgnKV0gaWYgX10KKyAgICAg
ICAgICAgICAgICBkYXRhID0gZW52aXJvblsnd3NnaS5pbnB1dCddLnJlYWQoKm1hcChpbnQsIGFy
Z3MpKQorICAgICAgICAgICAgICAgIGVudmlyb25bJ2pzb25maWx0ZXIuanNvbiddID0gc2ltcGxl
anNvbi5sb2FkcyhkYXRhKQorICAgICAgICByZXMgPSBzaW1wbGVqc29uLmR1bXBzKHNlbGYuYXBw
KGVudmlyb24sIGpzb25fc3RhcnRfcmVzcG9uc2UpKQorICAgICAgICBqc29ucCA9IGNnaS5wYXJz
ZV9xcyhlbnZpcm9uLmdldCgnUVVFUllfU1RSSU5HJywgJycpKS5nZXQoJ2pzb25wJykKKyAgICAg
ICAgaWYganNvbnA6CisgICAgICAgICAgICBjb250ZW50X3R5cGUgPSAndGV4dC9qYXZhc2NyaXB0
JworICAgICAgICAgICAgcmVzID0gJycuam9pbihqc29ucCArIFsnKCcsIHJlcywgJyknXSkKKyAg
ICAgICAgZWxpZiAnT3BlcmEnIGluIGVudmlyb24uZ2V0KCdIVFRQX1VTRVJfQUdFTlQnLCAnJyk6
CisgICAgICAgICAgICAjIE9wZXJhIGhhcyBidW5rIFhNTEh0dHBSZXF1ZXN0IHN1cHBvcnQgZm9y
IG1vc3QgbWltZSB0eXBlcworICAgICAgICAgICAgY29udGVudF90eXBlID0gJ3RleHQvcGxhaW4n
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250ZW50X3R5cGUgPSBzZWxmLm1pbWVfdHlw
ZQorICAgICAgICBoZWFkZXJzID0gWworICAgICAgICAgICAgKCdDb250ZW50LXR5cGUnLCBjb250
ZW50X3R5cGUpLAorICAgICAgICAgICAgKCdDb250ZW50LWxlbmd0aCcsIGxlbihyZXMpKSwKKyAg
ICAgICAgXQorICAgICAgICBoZWFkZXJzLmV4dGVuZChyZXNwb25zZVsnaGVhZGVycyddKQorICAg
ICAgICBzdGFydF9yZXNwb25zZShyZXNwb25zZVsnc3RhdHVzJ10sIGhlYWRlcnMpCisgICAgICAg
IHJldHVybiBbcmVzXQorCitkZWYgZmFjdG9yeShhcHAsIGdsb2JhbF9jb25mLCAqKmt3KToKKyAg
ICByZXR1cm4gSlNPTkZpbHRlcihhcHAsICoqa3cpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9z
aW1wbGVqc29uL3NjYW5uZXIucHkgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL3NjYW5uZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmNDk5OQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vc2Nhbm5lci5weQpAQCAtMCwwICsxLDYzIEBA
CisiIiIKK0l0ZXJhdG9yIGJhc2VkIHNyZSB0b2tlbiBzY2FubmVyCisiIiIKK2ltcG9ydCBzcmVf
cGFyc2UsIHNyZV9jb21waWxlLCBzcmVfY29uc3RhbnRzCitmcm9tIHNyZV9jb25zdGFudHMgaW1w
b3J0IEJSQU5DSCwgU1VCUEFUVEVSTgorZnJvbSByZSBpbXBvcnQgVkVSQk9TRSwgTVVMVElMSU5F
LCBET1RBTEwKK2ltcG9ydCByZQorCitfX2FsbF9fID0gWydTY2FubmVyJywgJ3BhdHRlcm4nXQor
CitGTEFHUyA9IChWRVJCT1NFIHwgTVVMVElMSU5FIHwgRE9UQUxMKQorY2xhc3MgU2Nhbm5lcihv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZXhpY29uLCBmbGFncz1GTEFHUyk6Cisg
ICAgICAgIHNlbGYuYWN0aW9ucyA9IFtOb25lXQorICAgICAgICAjIGNvbWJpbmUgcGhyYXNlcyBp
bnRvIGEgY29tcG91bmQgcGF0dGVybgorICAgICAgICBzID0gc3JlX3BhcnNlLlBhdHRlcm4oKQor
ICAgICAgICBzLmZsYWdzID0gZmxhZ3MKKyAgICAgICAgcCA9IFtdCisgICAgICAgIGZvciBpZHgs
IHRva2VuIGluIGVudW1lcmF0ZShsZXhpY29uKToKKyAgICAgICAgICAgIHBocmFzZSA9IHRva2Vu
LnBhdHRlcm4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuID0g
c3JlX3BhcnNlLlN1YlBhdHRlcm4ocywKKyAgICAgICAgICAgICAgICAgICAgWyhTVUJQQVRURVJO
LCAoaWR4ICsgMSwgc3JlX3BhcnNlLnBhcnNlKHBocmFzZSwgZmxhZ3MpKSldKQorICAgICAgICAg
ICAgZXhjZXB0IHNyZV9jb25zdGFudHMuZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgICAgIHAuYXBwZW5kKHN1YnBhdHRlcm4pCisgICAgICAgICAgICBzZWxmLmFjdGlvbnMu
YXBwZW5kKHRva2VuKQorCisgICAgICAgIHAgPSBzcmVfcGFyc2UuU3ViUGF0dGVybihzLCBbKEJS
QU5DSCwgKE5vbmUsIHApKV0pCisgICAgICAgIHNlbGYuc2Nhbm5lciA9IHNyZV9jb21waWxlLmNv
bXBpbGUocCkKKworCisgICAgZGVmIGl0ZXJzY2FuKHNlbGYsIHN0cmluZywgaWR4PTAsIGNvbnRl
eHQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBZaWVsZCBtYXRjaCwgZW5kX2lkeCBmb3Ig
ZWFjaCBtYXRjaAorICAgICAgICAiIiIKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnNjYW5uZXIuc2Nh
bm5lcihzdHJpbmcsIGlkeCkubWF0Y2gKKyAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9ucwor
ICAgICAgICBsYXN0ZW5kID0gaWR4CisgICAgICAgIGVuZCA9IGxlbihzdHJpbmcpCisgICAgICAg
IHdoaWxlIFRydWU6CisgICAgICAgICAgICBtID0gbWF0Y2goKQorICAgICAgICAgICAgaWYgbSBp
cyBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBtYXRjaGJlZ2luLCBt
YXRjaGVuZCA9IG0uc3BhbigpCisgICAgICAgICAgICBpZiBsYXN0ZW5kID09IG1hdGNoZW5kOgor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb25zW20ubGFz
dGluZGV4XQorICAgICAgICAgICAgaWYgYWN0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
ICAgIHJ2YWwsIG5leHRfcG9zID0gYWN0aW9uKG0sIGNvbnRleHQpCisgICAgICAgICAgICAgICAg
aWYgbmV4dF9wb3MgaXMgbm90IE5vbmUgYW5kIG5leHRfcG9zICE9IG1hdGNoZW5kOgorICAgICAg
ICAgICAgICAgICAgICAjICJmYXN0IGZvcndhcmQiIHRoZSBzY2FubmVyCisgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZW5kID0gbmV4dF9wb3MKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBz
ZWxmLnNjYW5uZXIuc2Nhbm5lcihzdHJpbmcsIG1hdGNoZW5kKS5tYXRjaAorICAgICAgICAgICAg
ICAgIHlpZWxkIHJ2YWwsIG1hdGNoZW5kCisgICAgICAgICAgICBsYXN0ZW5kID0gbWF0Y2hlbmQK
KyAgICAgICAgICAgIAorZGVmIHBhdHRlcm4ocGF0dGVybiwgZmxhZ3M9RkxBR1MpOgorICAgIGRl
ZiBkZWNvcmF0b3IoZm4pOgorICAgICAgICBmbi5wYXR0ZXJuID0gcGF0dGVybgorICAgICAgICBm
bi5yZWdleCA9IHJlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpCisgICAgICAgIHJldHVybiBmbgor
ICAgIHJldHVybiBkZWNvcmF0b3IK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>47206</attachid>
            <date>2010-01-22 08:12:37 -0800</date>
            <delta_ts>2010-01-22 08:12:37 -0800</delta_ts>
            <desc>Start of described python program</desc>
            <filename>convertDefs.py</filename>
            <type>text/plain</type>
            <size>1651</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBmaWxlaW5wdXQKaW1wb3J0IHJlCgoKbmFtZV9zZWdt
ZW50X21hdGNoZXIgPSByZS5jb21waWxlKHIiXyouKChbQS1aMC05XSooPz1bQS1aX10pKXwoW2Et
ejAtOV0qKSkiKQp1bmRlcnNjb3JlX21hdGNoZXIgPSByZS5jb21waWxlKCJfKiIpCmRlZiBDYW1l
bENhc2VUb1VuZGVyc2NvcmUobmFtZSk6CiAgICB1bmRlcnNjb3JlZF9uYW1lID0gIiIKICAgIGlu
ZGV4ID0gMAogICAgbmFtZSArPSAiQSIKICAgIHdoaWxlIGluZGV4IDwgbGVuKG5hbWUpOgogICAg
ICAgIG1hdGNoZWQgPSBuYW1lX3NlZ21lbnRfbWF0Y2hlci5tYXRjaChuYW1lLCBpbmRleCkKICAg
ICAgICBpZiBub3QgbWF0Y2hlZDoKICAgICAgICAgICAgYnJlYWsKICAgICAgICB1bmRlcnNjb3Jl
ZF9uYW1lICs9ICdfJwogICAgICAgIHVuZGVyc2NvcmVkX25hbWUgKz0gbWF0Y2hlZC5ncm91cCgw
KS5sb3dlcigpCiAgICAgICAgaW5kZXggKz0gbGVuKG1hdGNoZWQuZ3JvdXAoMCkubG93ZXIoKSkK
ICAgICAgICBtYXRjaGVkID0gdW5kZXJzY29yZV9tYXRjaGVyLm1hdGNoKG5hbWUsIGluZGV4KQog
ICAgICAgIGluZGV4ICs9IGxlbihtYXRjaGVkLmdyb3VwKDApLmxvd2VyKCkpCiAgICByZXR1cm4g
dW5kZXJzY29yZWRfbmFtZVsxOi0yXSArIG5hbWVbaW5kZXg6XSAjIGdldCByaWQgb2YgdGhlIGZp
cnN0XyBhbmQgdGhlIGZpbmFsIF9hCgoKCmZ1bmN0aW9uX21hdGNoZXIgPSByZS5jb21waWxlKHIi
Xig/UDxQcmVGdW5jdGlvbk5hbWU+XHMqZGVmXHMrKSg/UDxGdW5jdGlvbk5hbWU+XHcrKSg/UDxQ
b3N0RnVuY3Rpb25OYW1lPi4qOi4qKSQiKQoKb2xkX2ZuX25hbWVfdG9fbmV3X25hbWUgPSB7IH0K
Zm9yIGxpbmUgaW4gb3BlbigidGVzdC5weSIpLnJlYWRsaW5lcygpOiAjIGZpbGVpbnB1dC5GaWxl
SW5wdXQoInRlc3QucHkiLCBpbnBsYWNlPTEpOgogICAgbWF0Y2hlZCA9IGZ1bmN0aW9uX21hdGNo
ZXIubWF0Y2gobGluZSkgICAgCiAgICBpZiBtYXRjaGVkOgogICAgICAgIG9sZF9mbl9uYW1lID0g
bWF0Y2hlZC5ncm91cCgnRnVuY3Rpb25OYW1lJykKICAgICAgICBuZXdfZm5fbmFtZSA9IENhbWVs
Q2FzZVRvVW5kZXJzY29yZShvbGRfZm5fbmFtZSkKICAgICAgICBvbGRfZm5fbmFtZV90b19uZXdf
bmFtZVtvbGRfZm5fbmFtZV0gPSBuZXdfZm5fbmFtZQogICAgICAgIGxpbmUgPSBtYXRjaGVkLmdy
b3VwKCdQcmVGdW5jdGlvbk5hbWUnKSArIG5ld19mbl9uYW1lICsgbWF0Y2hlZC5ncm91cCgnUG9z
dEZ1bmN0aW9uTmFtZScpICsgIlxuIgoKb2xkX25hbWVzID0gIiIKZm9yIG9sZF9mbl9uYW1lIGlu
IG9sZF9mbl9uYW1lX3RvX25ld19uYW1lOgogICAgb2xkX25hbWVzICs9IHJlLmVzY2FwZShvbGRf
Zm5fbmFtZSkgKyAifCIKCgpvbGRfbmFtZXNfbWF0Y2hlciA9IHJlLmNvbXBpbGUociJcYigiICsg
b2xkX25hbWVzWzotMV0gKyByIilcYiIpCmZvciBsaW5lIGluIG9wZW4oInRlc3QucHkiKS5yZWFk
bGluZXMoKTogIyBmaWxlaW5wdXQuRmlsZUlucHV0KCJ0ZXN0LnB5IiwgaW5wbGFjZT0xKToKICAg
IGxpbmUgPSBvbGRfbmFtZXNfbWF0Y2hlci5zdWIobGFtYmRhIG1hdGNoZWQ6IG9sZF9mbl9uYW1l
X3RvX25ld19uYW1lW21hdGNoZWQuZ3JvdXAoMCldLCBsaW5lKQogICAgcHJpbnQgbGluZSwKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>47389</attachid>
            <date>2010-01-26 00:15:44 -0800</date>
            <delta_ts>2010-01-26 00:15:44 -0800</delta_ts>
            <desc>file that changes any MixedCase function names to lower_case_with_underscores</desc>
            <filename>pep8_names.py</filename>
            <type>text/x-python-script</type>
            <size>6399</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9weXRob24KCiIiIlRoaXMgc2NyaXB0IHJld3JpdGVzIHB5dGhvbiBzY3JpcHRz
IHRvIGJldHRlciBjb25mb3JtIHRvIFBFUCA4LgoKQXQgdGhlIG1vbWVudCB0aGUgb25seSB0aGlu
ZyB0aGlzIHNjcmlwdCBkb2VzIGlzIGNoYW5nZSBmdW5jdGlvbiBuYW1lcwp0byBsb3dlcl9jYXNl
X3dpdGhfdW5kZXJzY29yZXMgaWYgdGhleSBhcmVuJ3QgYWxyZWFkeS4KCk5vdGUgdGhhdCBuYW1l
cyB0aGF0IG9jY3VyIGluc2lkZSBzdHJpbmdzIG9yIGNvbW1lbnRzIGFyZSBub3QgdXBkYXRlZC4i
IiIKCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHN5cwppbXBvcnQgb3B0cGFyc2UKaW1wb3J0
IHRva2VuaXplCgpOQU1FID0gciJbX2EtekEtWl1bX2EtekEtWjAtOV0qIgpGVU5DREVGID0gciJe
XHMqZGVmIiArIHIiXHMrKCIgKyBOQU1FICsgciIpXHMqIiArIHIiXCgiCgpVUFBFUiA9IHIiW0Et
Wl0iCkxPV0VSID0gciJbYS16XSIKVVBQRVJfVEhFTl9MT1dFUiA9IFVQUEVSICsgTE9XRVIKQUNS
T05ZTSA9IFVQUEVSICsgciIrIgoKZGVmIGlzX21peGVkX2Nhc2UobmFtZSk6CiAgICBpZiByZS5z
ZWFyY2gocidbQS16XScsIG5hbWUpIGFuZCByZS5zZWFyY2gocidbYS16XScsIG5hbWUpOgogICAg
ICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKZGVmIGdldF9m
dW5jdGlvbl9uYW1lcyhmaWxlbmFtZSk6CiAgICAiIiJSZXRyaWV2ZSBhbGwgZnVuY3Rpb24gbmFt
ZXMgZGVmaW5lZCBpbiB0aGUgZmlsZS4iIiIKICAgIG5hbWVzID0ge30KICAgIGRlZm4gPSByZS5j
b21waWxlKEZVTkNERUYpCiAgICBmID0gZmlsZShmaWxlbmFtZSkKICAgIGZvciBsaW5lIGluIGY6
CiAgICAgICAgbWF0Y2hlZCA9IGRlZm4ubWF0Y2gobGluZSkKICAgICAgICBpZiBtYXRjaGVkOgog
ICAgICAgICAgICBuYW1lc1ttYXRjaGVkLmdyb3VwKDEpXSA9IG1hdGNoZWQuZ3JvdXAoMSkKICAg
IHJldHVybiBuYW1lcwoKZGVmIGxvd2VyX2Nhc2VfbmFtZShuYW1lKToKICAgICIiIlJldHVybnMg
YSBsb3dlcl9jYXNlX3dpdGhfdW5kZXJzY29yZXMgZXF1aXZhbGVudCBvZiBhIG5hbWUuIiIiCiAg
ICBjYW1lbF9yZSA9IHJlLmNvbXBpbGUoVVBQRVJfVEhFTl9MT1dFUikKICAgIG5ld19uYW1lID0g
Y2FtZWxfcmUuc3ViKGxhbWJkYSBtbzogIl8iICsgbW8uZ3JvdXAoMCkubG93ZXIoKSwgbmFtZSkK
CiAgICAjIEJ5IHJ1bm5pbmcgdGhpcyBhZnRlciBjYW1lbF9yZSwgd2UgZW5zdXJlIHRoYXQgdHdv
IG9yIG1vcmUgY2FwcyBpbiBhIHJvdwogICAgIyBoYXZlIGJlZW4gc3BsaXQgaW50byBhIGdyb3Vw
IG9mIG9uZSBvciBtb3JlIGNhcHMgcGx1cyBhbiB1bmRlcnNjb3JlIHBsdXMKICAgICMgYSBsb3dl
cmNhc2VkIHdvcmQuIFdlIGNhbiB0aGVuIHNhZmVseSBkb3duY2FzZSB0aGUgdXBwZXIgY2FzZSBn
cm91cC4KICAgIGFjcm9ueW1fcmUgPSByZS5jb21waWxlKEFDUk9OWU0pCiAgICBuZXdfbmFtZSA9
IGFjcm9ueW1fcmUuc3ViKGxhbWJkYSBtbzogIl8iICsgbW8uZ3JvdXAoMCkubG93ZXIoKSwgbmV3
X25hbWUpCiAgICBpZiByZS5tYXRjaChyJ15fPycgKyBVUFBFUiwgbmFtZSk6CiAgICAgICAgcmV0
dXJuIG5ld19uYW1lWzE6XQogICAgcmV0dXJuIG5ld19uYW1lCgpkZWYgaGFuZGxlX2Fjcm9ueW1z
KG5hbWUsIGFjcm9ueW1zKToKICAgIHRtcG5hbWUgPSBuYW1lCiAgICBmb3IgYWNyIGluIGFjcm9u
eW1zOgogICAgICAgIHRtcG5hbWUgPSB0bXBuYW1lLnJlcGxhY2UoYWNyLCAiXyIgKyBhY3IubG93
ZXIoKSkKICAgIGlmIHRtcG5hbWUuc3RhcnRzd2l0aCgnXycpIGFuZCBub3QgbmFtZS5zdGFydHN3
aXRoKCdfJyk6CiAgICAgICAgdG1wbmFtZSA9IHRtcG5hbWVbMTpdCiAgICByZXR1cm4gdG1wbmFt
ZQoKZGVmIGxvd2VyX2Nhc2VfbmFtZXMoZCwgYWNyb255bXM9W10pOgogICAgIiIiUmV0dXJucyB0
aGUgbG93ZXJfY2FzZV93aXRoX3VuZGVyc2NvcmUgZXF1aXZhbGVudCBvZiBhbGwgbWl4ZWQgY2Fz
ZQogICAgbmFtZXMgaW4gdGhlIGRpY3Rpb25hcnkuIiIiCiAgICBmb3IgbmFtZSBpbiBkLmtleXMo
KToKICAgICAgICBpZiBpc19taXhlZF9jYXNlKG5hbWUpOgogICAgICAgICAgICBkW25hbWVdID0g
bG93ZXJfY2FzZV9uYW1lKGhhbmRsZV9hY3JvbnltcyhuYW1lLCBhY3JvbnltcykpCiAgICAgICAg
ZWxzZToKICAgICAgICAgICAgZFtuYW1lXSA9IG5hbWUgCiAgICByZXR1cm4gZAoKZGVmIGRlYnVn
X3Rva2VuKHNyb3csIHByb3csIHNjb2wsIHBjb2wsIHRva251bSwgdG9rdmFsLCBsd3MsIHMpOgog
ICAgIiIiUHJpbnQgYSBkZWJ1ZyBsaW5lIG9udG8gc3RkZXJyIGZvciB0aGUgY3VycmVudCB0b2tl
biBpbiB0aGUgc3RyZWFtLiIiIgogICAgcHZhbCA9IHRva3ZhbC5yZXBsYWNlKCdcbicsICdcXG4n
KQogICAgcGx3cyA9IGx3cy5yZXBsYWNlKCdcbicsICdcXG4nKQogICAgcHMgPSBzLnJlcGxhY2Uo
J1xuJywgJ1xcbicpCiAgICBwcmludCA+PnN5cy5zdGRlcnIsICgKICAgICAgICAiJTA0ZCwgJTA0
ZCwgJTAyZCwgJTAyZCwgJTAyZDogJS0yNHMgfHwgJyVzJywgJyVzJyIgJQogICAgICAgIChzcm93
LCBwcm93LCBzY29sLCBwY29sLCB0b2tudW0sCiAgICAgICAgJ1wiJyArIHB2YWwgKyAnXCInLCBw
bHdzLCBwcykpCgoKZGVmIGNvbnZlcnRfZmlsZShvcHRpb25zLCBpbnB1dCwgb3V0cHV0LCBuYW1l
cyk6CiAgICBnID0gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKGlucHV0KSAgICMgdG9rZW5pemUg
dGhlIGZpbGUKICAgIGxyb3cgPSAxCiAgICBsY29sID0gMAogICAgcmVzdWx0ID0gW10KICAgIGZv
ciB0b2tudW0sIHRva3ZhbCwgKHNyb3csIHNjb2wpLCAoZXJvdywgZWNvbCksIGxpbmVubyAgaW4g
ZzoKICAgICAgICBwcm93LCBwY29sID0gbHJvdywgbGNvbAogICAgICAgIGx3cyA9ICcnCiAgICAg
ICAgbmV3X3Rva2VuID0gJycKCiAgICAgICAgIyBIYW5kbGUgZXhwbGljaXQgbGluZSBjb250aW51
YXRpb24gKHRva2VuaXplcigpIHJlbW92ZXMgdGhlbSBzbwogICAgICAgICMgd2UgaGF2ZSB0byBw
dXQgdGhlbSBiYWNrKS4KICAgICAgICBpZiBzcm93ICE9IGxyb3c6CiAgICAgICAgICAgIGx3cyAr
PSAiIFxcIgogICAgICAgICAgICBsd3MgKz0gIlxuIiAqIChzcm93IC0gbHJvdykKICAgICAgICAg
ICAgbHJvdyA9IHNyb3cKICAgICAgICAgICAgbGNvbCA9IDAKCiAgICAgICAgIyBIYW5kbGUgY2hh
bmdlcyBpbiBpbmRlbnRhdGlvbi4KICAgICAgICBpZiBzcm93ID09IGxyb3cgYW5kIHNjb2wgIT0g
bGNvbDoKICAgICAgICAgICAgbHdzICs9ICIgIiAqIChzY29sIC0gbGNvbCkKICAgICAgICAgICAg
bGNvbCA9IHNjb2wKCiAgICAgICAgaWYgdG9rbnVtIGluICh0b2tlbml6ZS5ORVdMSU5FLCB0b2tl
bml6ZS5OTCk6CiAgICAgICAgICAgIGx3cyArPSAiXG4iCiAgICAgICAgICAgIGxyb3cgKz0gMQog
ICAgICAgICAgICBsY29sID0gMAogICAgICAgIGVsaWYgdG9rbnVtIGluICh0b2tlbml6ZS5JTkRF
TlQsIHRva2VuaXplLkRFREVOVCk6CiAgICAgICAgICAgIHBhc3MKICAgICAgICBlbHNlOgogICAg
ICAgICAgICBpZiB0b2tudW0gPT0gdG9rZW5pemUuTkFNRSBhbmQgdG9rdmFsIGluIG5hbWVzOgog
ICAgICAgICAgICAgICAgbmV3X3Rva2VuID0gdG9rZW5pemUudW50b2tlbml6ZShbKHRva251bSwg
bmFtZXNbdG9rdmFsXSldKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbmV3X3Rv
a2VuID0gdG9rZW5pemUudW50b2tlbml6ZShbKHRva251bSwgdG9rdmFsKV0pCgogICAgICAgICAg
ICBpZiBsZW4obmV3X3Rva2VuKSA+IDAgYW5kIG5ld190b2tlbltsZW4obmV3X3Rva2VuKS0xXSA9
PSAnXG4nOgogICAgICAgICAgICAgICMgVGhpcyBzaG93cyB1cCB3aXRoIG11bHRpLWxpbmUgY29t
bWVudHMuCiAgICAgICAgICAgICAgbHJvdyA9IGVyb3cgKyAxCiAgICAgICAgICAgICAgbGNvbCA9
IDAKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiB1bnRv
a2VuaXplIGFkZHMgdHJhaWxpbmcgc3BhY2VzLiBTdHJpcCB0aGVtLgogICAgICAgICAgICAgIG5l
d190b2tlbiA9IG5ld190b2tlbi5yc3RyaXAoKQogICAgICAgICAgICAgIGxyb3cgPSBlcm93CiAg
ICAgICAgICAgICAgbGNvbCA9IGVjb2wKCiAgICAgICAgaWYgb3B0aW9ucy5kZWJ1Z190b2tlbnM6
CiAgICAgICAgICAgIGRlYnVnX3Rva2VuKHNyb3csIHByb3csIHNjb2wsIHBjb2wsIHRva251bSwg
dG9rdmFsLCBsd3MsIG5ld190b2tlbikKCiAgICAgICAgaWYgbHdzOgogICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGx3cykKICAgICAgICBpZiBuZXdfdG9rZW46CiAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQobmV3X3Rva2VuKQoKICAgIG91dHB1dC53cml0ZSgiIi5qb2luKHJlc3VsdCkpCgppZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KCkKICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbCcsICctLWxvd2VyLWNhc2UtZnVuY3Rpb24tbmFt
ZXMnLAogICAgICAgIGRlZmF1bHQ9J3RydWUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAg
IGhlbHA9ImNvbnZlcnQgYW55IGZ1bmN0aW9uIG5hbWVzIHRvIGxvd2VyX2Nhc2Vfd2l0aF91bmRl
cnNjb3JlcyIpCiAgICBwYXJzZXIuYWRkX29wdGlvbignLWInLCAnLS1iYWNrdXAnLCBhY3Rpb249
J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgaGVscD0idXBkYXRlIHRoZSBmaWxl
cyBpbiBwbGFjZSIpCiAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS11c2Utc3Rkb3V0Jywg
YWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InByaW50IHJl
c3VsdHMgdG8gc3Rkb3V0IikKICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaScsICctLWluLXBsYWNl
JywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InVwZGF0
ZSB0aGUgZmlsZXMgaW4gcGxhY2UiKQogICAgcGFyc2VyLmFkZF9vcHRpb24oJycsICctLWFjcm9u
eW0nLCBhY3Rpb249ImFwcGVuZCIsIGRlZmF1bHQ9W10sCiAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJzcGVjaWZ5IGFuIGFjcnlvbnltIHRvIGJlIGxvd2VyY2FzZWQiKQogICAgcGFyc2VyLmFk
ZF9vcHRpb24oJycsICctLWRlYnVnLWRpY3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAg
ICAgICAgICAgICAgICAgaGVscD0icHJpbnQgdGhlIHJlbmFtZSBkaWN0aW9uYXJ5IG9uIHN0ZGVy
ciIpCiAgICBwYXJzZXIuYWRkX29wdGlvbignJywgJy0tZGVidWctdG9rZW5zJywgYWN0aW9uPSdz
dG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InByaW50IHRoZSB0b2tlbiBz
dHJlYW0gb24gc3RkZXJyIikKICAgIG9wdGlvbnMsIHBhcmFtcyA9IHBhcnNlci5wYXJzZV9hcmdz
KCkKICAgIG5hbWVzID0ge30KICAgIGlmIG9wdGlvbnMubG93ZXJfY2FzZV9mdW5jdGlvbl9uYW1l
czoKICAgICAgICBmb3IgZmlsZW5hbWUgaW4gcGFyYW1zOgogICAgICAgICAgICBhZGRpdGlvbmFs
X25hbWVzID0gbG93ZXJfY2FzZV9uYW1lcyhnZXRfZnVuY3Rpb25fbmFtZXMoZmlsZW5hbWUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFj
cm9ueW0pCiAgICAgICAgICAgIG5hbWVzLnVwZGF0ZShhZGRpdGlvbmFsX25hbWVzKQoKICAgIGlm
IG9wdGlvbnMuZGVidWdfZGljdDoKICAgICAgICBmb3IgaywgdiBpbiBuYW1lcy5pdGVyaXRlbXMo
KToKICAgICAgICAgICAgaWYgayAhPSB2OgogICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0
ZGVyciwgIiVzIDogJXMiICUgKGssIHYpCgogICAgZm9yIGZpbGVuYW1lIGluIHBhcmFtczoKICAg
ICAgICBpbnB1dCA9IGZpbGUoZmlsZW5hbWUpCiAgICAgICAgaWYgb3B0aW9ucy5iYWNrdXA6CiAg
ICAgICAgICAgIG91dHB1dCA9IGZpbGUoZmlsZW5hbWUgKyAnLmJhaycsICd3JykKICAgICAgICAg
ICAgb3V0cHV0LndyaXRlKGlucHV0LnJlYWQoKSkKICAgICAgICAgICAgb3V0cHV0LmNsb3NlKCkK
ICAgICAgICAgICAgaW5wdXQgPSBmaWxlKGZpbGVuYW1lKQogICAgICAgIGlmIG9wdGlvbnMudXNl
X3N0ZG91dCBhbmQgbm90IG9wdGlvbnMuaW5fcGxhY2U6CiAgICAgICAgICBvdXRwdXQgPSBzeXMu
c3Rkb3V0CiAgICAgICAgZWxzZToKICAgICAgICAgIG91dHB1dCA9IGZpbGUoZmlsZW5hbWUgKyAn
Lm5ldycsICd3JykKICAgICAgICBjb252ZXJ0X2ZpbGUob3B0aW9ucywgbGFtYmRhOiBpbnB1dC5y
ZWFkbGluZSgpLCBvdXRwdXQsIG5hbWVzKQogICAgICAgIGlmIG9wdGlvbnMuaW5fcGxhY2U6CiAg
ICAgICAgICBvdXRwdXQuY2xvc2UoKQogICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lICsgJy5u
ZXcnLCBmaWxlbmFtZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47645</attachid>
            <date>2010-01-28 13:55:45 -0800</date>
            <delta_ts>2010-01-28 14:44:20 -0800</delta_ts>
            <desc>revised patch with pep-8 compliant function names and an initial pass at the licenses. Only for review - do not commit</desc>
            <filename>bug-31498-20100128135544.patch</filename>
            <type>text/plain</type>
            <size>524699</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1OGQ1M2Q4Li5hNjNjYTIzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTAtMDEt
MjggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBzdHJlYW0gY2hyb21pdW0ub3JnJ3Mg
aW1wbGVtZW50YXRpb24gb2YgcnVuLXdlYmtpdC10ZXN0cywKKyAgICAgICAgV2hpY2ggaXMgd3Jp
dHRlbiBpbiBQeXRob24gYW5kIGhhcyB0aGUgcHJpbWFyeSBhZHZhbnRhZ2VzIG9mCisgICAgICAg
IGJlaW5nIGFibGUgdG8gcnVuIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBtdWx0aXBsZSBwcm9j
ZXNzb3JzCisgICAgICAgIGFuZCBoYXMgYSBtb3JlIGZsZXhpYmxlIHN5c3RlbSBmb3IgaW5kaWNh
dGluZyBleHBlY3RlZCBmYWlsdXJlcworICAgICAgICBmb3Igc2NyaXB0cy4gQ3VycmVudGx5IHRo
ZXNlIHNjcmlwdHMgY2FuIG9ubHkgYmUgdXNlZCB0byB0ZXN0IHRoZQorICAgICAgICBjaHJvbWl1
bSBwb3J0cywgYnV0IGl0IHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGV4dGVuZCB0aGVtIHRv
CisgICAgICAgIHJ1biB0aGUgYmFzZSB3ZWJraXQgcG9ydHMgYW5kIGZvciBvdGhlcnMgdG8gdXNl
IGFzIHdlbGwuCisKKyAgICAgICAgQWxzbyB0aGlzIGFkZHMgYSBjb3B5IG9mIHRoZSBweXRob24g
c2ltcGxlanNvbiBleHRlbnNpb24gdG8KKyAgICAgICAgV2ViS2l0VG9vbHMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDk4CisKKyAgICAgICAg
KiBTY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHM6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RlZHVwLXRlc3RzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9fX2lu
aXRfXy5weTogQ29waWVkIGZyb20gQnVnc1NpdGUvZGF0YS9tYWlsLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZl
ci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvZmFpbHVyZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXIucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2Zh
aWx1cmVfZmluZGVyX3Rlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRw
X3NlcnZlci5iYXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5zaDog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBlbTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9s
YXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3Iu
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2xpZ2h0dHBkLmNvbmY6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
YXRoX3V0aWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlscy5weTogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRp
bHNfbGludXgucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX21hYy5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1f
dXRpbHNfd2luLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9mYWls
dXJlcy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9maWxlcy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21p
dW1fd2Via2l0X3Rlc3RzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X291dHB1dF9mb3JtYXR0ZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0cHV0X3htbF90b19qc29uLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L19faW5pdF9fLnB5OiBDb3BpZWQgZnJvbSBCdWdzU2l0ZS9kYXRhL21haWwuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZm
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0
X3R5cGVzL2ltYWdlX2RpZmYucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHk6IEFkZGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy91cGRhdGVf
ZXhwZWN0YXRpb25zX2Zyb21fZGFzaGJvYXJkLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy91cGRhdGVfZXhwZWN0YXRpb25zX2Zyb21fZGFzaGJvYXJk
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBzaW1wbGVqc29uL0xJQ0VOU0UudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBzaW1wbGVqc29uL1JFQURNRS5nb29nbGU6IEFkZGVkLgorICAgICAg
ICAqIHNpbXBsZWpzb24vX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIHNpbXBsZWpzb24v
X3NwZWVkdXBzLmM6IEFkZGVkLgorICAgICAgICAoYXNjaWlfZXNjYXBlX2NoYXIpOgorICAgICAg
ICAoYXNjaWlfZXNjYXBlX3VuaWNvZGUpOgorICAgICAgICAoYXNjaWlfZXNjYXBlX3N0cik6Cisg
ICAgICAgIChweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSk6CisgICAgICAgIChpbml0X3NwZWVk
dXBzKToKKyAgICAgICAgKiBzaW1wbGVqc29uL2RlY29kZXIucHk6IEFkZGVkLgorICAgICAgICAq
IHNpbXBsZWpzb24vZW5jb2Rlci5weTogQWRkZWQuCisgICAgICAgICogc2ltcGxlanNvbi9qc29u
ZmlsdGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBzaW1wbGVqc29uL3NjYW5uZXIucHk6IEFkZGVk
LgorCiAyMDEwLTAxLTI3ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSdWJiZXJzdGFtcGVkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10
ZXN0cyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVz
dHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzllYzljZQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQt
dGVzdHMKQEAgLTAsMCArMSw0MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCisiIiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNl
bGluZS5weSIiIgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5w
YXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0cHkiLCAibGF5b3V0X3Rlc3RzIikp
CisKK2ltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cworCitpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgorICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLm1h
aW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0
LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjNTA3ZjgKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMKQEAgLTAs
MCArMSw0MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
V3JhcHBlciBhcm91bmQgd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bi1jaHJvbWl1bS13ZWJraXQt
dGVzdHMucHkiIiIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3Mu
cGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdHB5IiwgImxheW91dF90ZXN0cyIp
KQoraW1wb3J0IHJ1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICBvcHRpb25zLCBhcmdzID0gcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5w
YXJzZV9hcmdzKCkKKyAgICBydW5fY2hyb21pdW1fd2Via2l0X3Rlc3RzLm1haW4ob3B0aW9ucywg
YXJncykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2RlZHVwLXRlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvZGVkdXAtdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
MDNhN2RkZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2RlZHVwLXRlc3RzLnB5CkBAIC0wLDAgKzEsNzMgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiImRlZHVwLXRlc3RzIC0tIHByaW50IHRl
c3QgcmVzdWx0cyBkdXBsaWNhdGVkIGJldHdlZW4gd2luIGFuZCBsaW51eC4KKworQmVjYXVzZSB0
aGUgb3V0cHV0cyBhcmUgdmVyeSBzaW1pbGFyLCB3ZSBmYWxsIGJhY2sgb24gV2luZG93cyBvdXRw
dXRzCitpZiB0aGVyZSBpc24ndCBhbiBleHBlY3RlZCBvdXRwdXQgZm9yIExpbnV4IGxheW91dCB0
ZXN0cy4gIFRoaXMgbWVhbnMKK3RoYXQgYW55IGZpbGUgdGhhdCBpcyBkdXBsaWNhdGVkIGJldHdl
ZW4gdGhlIExpbnV4IGFuZCBXaW5kb3dzIGRpcmVjdG9yaWVzCitpcyByZWR1bmRhbnQuCisKK1Ro
aXMgY29tbWFuZCBkdW1wcyBvdXQgYWxsIHN1Y2ggZmlsZXMuICBZb3UgY2FuIHVzZSBpdCBsaWtl
OgorICBkZWR1cC10ZXN0cy5weSAgICMgcHJpbnQgb3V0IHRoZSBiYWQgZmlsZXMKKyAgZGVkdXAt
dGVzdHMucHkgfCB4YXJncyBnaXQgcm0gICAjIGRlbGV0ZSB0aGUgYmFkIGZpbGVzCisiIiIKKwor
aW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN1YnByb2Nlc3MKK2lt
cG9ydCBzeXMKKworIyBBIG1hcCBvZiBmaWxlIGhhc2ggPT4gc2V0IG9mIGFsbCBmaWxlcyB3aXRo
IHRoYXQgaGFzaC4KK2hhc2hlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KHNldCkKKworIyBG
aWxsIGluIHRoZSBtYXAuCitjbWQgPSBbJ2dpdCcsICdscy10cmVlJywgJy1yJywgJ0hFQUQnLCAn
d2Via2l0L2RhdGEvbGF5b3V0X3Rlc3RzLyddCit0cnk6CisgICAgZ2l0ID0gc3VicHJvY2Vzcy5Q
b3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCitleGNlcHQgT1NFcnJvciwgZToKKyAg
ICBpZiBlLmVycm5vID09IDI6ICAjIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkuCisgICAgICAg
IHByaW50ID4+IHN5cy5zdGRlcnIsICJFcnJvcjogJ05vIHN1Y2ggZmlsZScgd2hlbiBydW5uaW5n
IGdpdC4iCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJUaGlzIHNjcmlwdCByZXF1aXJl
cyBnaXQuIgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHJhaXNlIGUKKworZm9yIGxpbmUgaW4g
Z2l0LnN0ZG91dDoKKyAgICBhdHRycywgZmlsZSA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnXHQnKQor
ICAgIF8sIF8sIGhhc2ggPSBhdHRycy5zcGxpdCgnICcpCisgICAgaGFzaGVzW2hhc2hdLmFkZChm
aWxlKQorCisjIER1bXAgb3V0IGR1cGxpY2F0ZWQgZmlsZXMuCitmb3IgY2x1c3RlciBpbiBoYXNo
ZXMudmFsdWVzKCk6CisgICAgaWYgbGVuKGNsdXN0ZXIpIDwgMjoKKyAgICAgICAgY29udGludWUK
KyAgICBmb3IgZmlsZSBpbiBjbHVzdGVyOgorICAgICAgICBpZiAnL2Nocm9taXVtLWxpbnV4Lycg
aW4gZmlsZToKKyAgICAgICAgICAgIGlmIGZpbGUucmVwbGFjZSgnL2Nocm9taXVtLWxpbnV4Lycs
ICcvY2hyb21pdW0td2luLycpIGluIGNsdXN0ZXI6CisgICAgICAgICAgICAgICAgcHJpbnQgZmls
ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9hcGFjaGVfaHR0cF9zZXJ2
ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uY2IyMDU2MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5w
eQpAQCAtMCwwICsxLDIyOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiQSBjbGFzcyB0byBzdGFydC9zdG9wIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIgdXNl
ZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCitp
bXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQoraW1wb3J0IHBhdGhfdXRpbHMKK2ltcG9ydCBwbGF0Zm9y
bV91dGlscworCisKK2NsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl9iYXNl
Lkh0dHBTZXJ2ZXJCYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyKToK
KyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0
aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5faHR0cGRfcHJv
YyA9IE5vbmUKKyAgICAgICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRf
ZGlyKQorCisgICAgICAgIHNlbGYubWFwcGluZ3MgPSBbeydwb3J0JzogODAwMH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgeydwb3J0JzogODA4MX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODQ0
MywgJ3NzbGNlcnQnOiBUcnVlfV0KKworICAgICAgICAjIFRoZSB1cHN0cmVhbSAuY29uZiBmaWxl
IGFzc3VtZWQgdGhlIGV4aXN0ZW5jZSBvZiAvdG1wL1dlYktpdCBmb3IKKyAgICAgICAgIyBwbGFj
aW5nIGFwYWNoZSBmaWxlcyBsaWtlIHRoZSBsb2NrIGZpbGUgdGhlcmUuCisgICAgICAgIHNlbGYu
X3J1bnRpbWVfcGF0aCA9IG9zLnBhdGguam9pbigiL3RtcCIsICJXZWJLaXQiKQorICAgICAgICBw
YXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX3J1bnRpbWVfcGF0aCkKKworICAg
ICAgICAjIFRoZSBQSUQgcmV0dXJuZWQgd2hlbiBBcGFjaGUgaXMgc3RhcnRlZCBnb2VzIGF3YXkg
KGR1ZSB0byBkcm9wcGluZworICAgICAgICAjIHByaXZpbGVnZXM/KS4gVGhlIHByb3BlciBjb250
cm9sbGluZyBQSUQgaXMgd3JpdHRlbiB0byBhIGZpbGUgaW4gdGhlCisgICAgICAgICMgYXBhY2hl
IHJ1bnRpbWUgZGlyZWN0b3J5LgorICAgICAgICBzZWxmLl9waWRfZmlsZSA9IG9zLnBhdGguam9p
bihzZWxmLl9ydW50aW1lX3BhdGgsICdodHRwZC5waWQnKQorCisgICAgICAgIHRlc3RfZGlyID0g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKKyAgICAg
ICAgICAgICdMYXlvdXRUZXN0cycpCisgICAgICAgIGpzX3Rlc3RfcmVzb3VyY2VzX2RpciA9IHNl
bGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJmYXN0IiwgImpzIiwKKyAgICAgICAgICAg
ICJyZXNvdXJjZXMiKQorICAgICAgICBtaW1lX3R5cGVzX3BhdGggPSBzZWxmLl9jeWd3aW5fc2Fm
ZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJjb25mIiwKKyAgICAgICAgICAgICJtaW1lLnR5cGVz
IikKKyAgICAgICAgY2VydF9maWxlID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2Rpciwg
Imh0dHAiLCAiY29uZiIsCisgICAgICAgICAgICAid2Via2l0LWh0dHBkLnBlbSIpCisgICAgICAg
IGFjY2Vzc19sb2cgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKG91dHB1dF9kaXIsICJhY2Nlc3Nf
bG9nLnR4dCIpCisgICAgICAgIGVycm9yX2xvZyA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4ob3V0
cHV0X2RpciwgImVycm9yX2xvZy50eHQiKQorICAgICAgICBkb2N1bWVudF9yb290ID0gc2VsZi5f
Y3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImh0dHAiLCAidGVzdHMiKQorCisgICAgICAgIGV4
ZWN1dGFibGUgPSBwbGF0Zm9ybV91dGlscy5hcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCkKKyAgICAg
ICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5f
Z2V0X2N5Z3dpbl9wYXRoKGV4ZWN1dGFibGUpCisKKyAgICAgICAgY21kID0gW2V4ZWN1dGFibGUs
CisgICAgICAgICAgICAnLWYnLCBzZWxmLl9nZXRfYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgodGVz
dF9kaXIsIG91dHB1dF9kaXIpLAorICAgICAgICAgICAgJy1DJywgIlwnRG9jdW1lbnRSb290ICVz
XCciICUgZG9jdW1lbnRfcm9vdCwKKyAgICAgICAgICAgICctYycsICJcJ0FsaWFzIC9qcy10ZXN0
LXJlc291cmNlcyAlc1wnIiAlIGpzX3Rlc3RfcmVzb3VyY2VzX2RpciwKKyAgICAgICAgICAgICct
QycsICJcJ0xpc3RlbiAlc1wnIiAlICIxMjcuMC4wLjE6ODAwMCIsCisgICAgICAgICAgICAnLUMn
LCAiXCdMaXN0ZW4gJXNcJyIgJSAiMTI3LjAuMC4xOjgwODEiLAorICAgICAgICAgICAgJy1jJywg
IlwnVHlwZXNDb25maWcgXCIlc1wiXCciICUgbWltZV90eXBlc19wYXRoLAorICAgICAgICAgICAg
Jy1jJywgIlwnQ3VzdG9tTG9nIFwiJXNcIiBjb21tb25cJyIgJSBhY2Nlc3NfbG9nLAorICAgICAg
ICAgICAgJy1jJywgIlwnRXJyb3JMb2cgXCIlc1wiXCciICUgZXJyb3JfbG9nLAorICAgICAgICAg
ICAgJy1DJywgIlwnVXNlciBcIiVzXCJcJyIgJSBvcy5lbnZpcm9uLmdldCgiVVNFUk5BTUUiLAor
ICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KCJVU0VSIiwgIiIpKV0KKworICAgICAgICBp
ZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAgIGN5Z2JpbiA9IHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKQorICAgICAgICAgICAg
IyBOb3QgZW50aXJlbHkgc3VyZSB3aHksIGJ1dCBmcm9tIGN5Z3dpbiB3ZSBuZWVkIHRvIHJ1biB0
aGUKKyAgICAgICAgICAgICMgaHR0cGQgY29tbWFuZCB0aHJvdWdoIGJhc2guCisgICAgICAgICAg
ICBzZWxmLl9zdGFydF9jbWQgPSBbCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGN5Z2Jp
biwgJ2Jhc2guZXhlJyksCisgICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAgICAn
UEFUSD0lcyAlcycgJSAoc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z2JpbiksICIgIi5qb2luKGNt
ZCkpLAorICAgICAgICAgICAgICBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRPRE8o
b2phbik6IFdoZW4gd2UgZ2V0IGN5Z3dpbiB1c2luZyBBcGFjaGUgMiwgdXNlIHNldCB0aGUKKyAg
ICAgICAgICAgICMgY2VydCBmaWxlIGZvciBjeWd3aW4gYXMgd2VsbC4KKyAgICAgICAgICAgIGNt
ZC5leHRlbmQoWyctYycsICJcJ1NTTENlcnRpZmljYXRlRmlsZSAlc1wnIiAlIGNlcnRfZmlsZV0p
CisgICAgICAgICAgICAjIEpvaW4gdGhlIHN0cmluZyBoZXJlIHNvIHRoYXQgQ3lnd2luL1dpbmRv
d3MgYW5kIE1hYy9MaW51eAorICAgICAgICAgICAgIyBjYW4gdXNlIHRoZSBzYW1lIGNvZGUuIE90
aGVyd2lzZSwgd2UgY291bGQgcmVtb3ZlIHRoZSBzaW5nbGUKKyAgICAgICAgICAgICMgcXVvdGVz
IGFib3ZlIGFuZCBrZWVwIGNtZCBhcyBhIHNlcXVlbmNlLgorICAgICAgICAgICAgc2VsZi5fc3Rh
cnRfY21kID0gIiAiLmpvaW4oY21kKQorCisgICAgZGVmIF9pc19jeWd3aW4oc2VsZik6CisgICAg
ICAgIHJldHVybiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKQorCisgICAgZGVm
IF9jeWd3aW5fc2FmZV9qb2luKHNlbGYsICpwYXJ0cyk6CisgICAgICAgICIiIlJldHVybnMgYSBw
bGF0Zm9ybSBhcHByb3ByaWF0ZSBwYXRoLiIiIgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2lu
KCpwYXJ0cykKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAg
ICBkZWYgX2dldF9jeWd3aW5fcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiQ29udmVydCBh
IFdpbmRvd3MgcGF0aCB0byBhIGN5Z3dpbiBwYXRoLgorCisgICAgICAgIFRoZSBjeWdwYXRoIHV0
aWxpdHkgaW5zaXN0cyBvbiBjb252ZXJ0aW5nIHBhdGhzIHRoYXQgaXQgdGhpbmtzIGFyZQorICAg
ICAgICBDeWd3aW4gcm9vdCBwYXRocyB0byB3aGF0IGl0IHRoaW5rcyB0aGUgY29ycmVjdCByb290
cyBhcmUuICBTbyBwYXRocworICAgICAgICBzdWNoIGFzICJDOlxiXHNsYXZlXHdlYmtpdC1yZWxl
YXNlXGJ1aWxkXHRoaXJkX3BhcnR5XGN5Z3dpblxiaW4iCisgICAgICAgIGFyZSBjb252ZXJ0ZWQg
dG8gcGxhaW4gIi91c3IvYmluIi4gIFRvIGF2b2lkIHRoaXMsIHdlCisgICAgICAgIGRvIHRoZSBj
b252ZXJzaW9uIG1hbnVhbGx5LgorCisgICAgICAgIFRoZSBwYXRoIGlzIGV4cGVjdGVkIHRvIGJl
IGFuIGFic29sdXRlIHBhdGgsIG9uIGFueSBkcml2ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGRy
aXZlX3JlZ2V4cCA9IHJlLmNvbXBpbGUocicoW2Etel0pOlsvXFxdJywgcmUuSUdOT1JFQ0FTRSkK
KworICAgICAgICBkZWYgbG93ZXJfZHJpdmUobWF0Y2hvYmopOgorICAgICAgICAgICAgcmV0dXJu
ICcvY3lnZHJpdmUvJXMvJyAlIG1hdGNob2JqLmdyb3VwKDEpLmxvd2VyKCkKKyAgICAgICAgcGF0
aCA9IGRyaXZlX3JlZ2V4cC5zdWIobG93ZXJfZHJpdmUsIHBhdGgpCisgICAgICAgIHJldHVybiBw
YXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorCisgICAgZGVmIF9nZXRfYXBhY2hlX2NvbmZpZ19maWxl
X3BhdGgoc2VsZiwgdGVzdF9kaXIsIG91dHB1dF9kaXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBwYXRoIHRvIHRoZSBhcGFjaGUgY29uZmlnIGZpbGUgdG8gdXNlLgorICAgICAgICBBcmdzOgor
ICAgICAgICAgIHRlc3RfZGlyOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBMYXlvdXRUZXN0cyBkaXJl
Y3RvcnkuCisgICAgICAgICAgb3V0cHV0X2RpcjogYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0
IHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAgICBodHRwZF9jb25m
aWcgPSBwbGF0Zm9ybV91dGlscy5hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCgpCisgICAgICAgIGh0
dHBkX2NvbmZpZ19jb3B5ID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsICJodHRwZC5jb25mIikK
KyAgICAgICAgaHR0cGRfY29uZiA9IG9wZW4oaHR0cGRfY29uZmlnKS5yZWFkKCkKKyAgICAgICAg
aWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICAjIFRoaXMgaXMgYSBncm9zcyBoYWNr
LCBidXQgaXQgbGV0cyB1cyB1c2UgdGhlIHVwc3RyZWFtIC5jb25mIGZpbGUKKyAgICAgICAgICAg
ICMgYW5kIG91ciBjaGVja2VkIGluIGN5Z3dpbi4gVGhpcyB0ZWxscyB0aGUgc2VydmVyIHRoZSBy
b290CisgICAgICAgICAgICAjIGRpcmVjdG9yeSB0byBsb29rIGluIGZvciAuc28gbW9kdWxlcy4g
SXQgd2lsbCB1c2UgdGhpcyBwYXRoCisgICAgICAgICAgICAjIHBsdXMgdGhlIHJlbGF0aXZlIHBh
dGhzIHRvIHRoZSAuc28gZmlsZXMgbGlzdGVkIGluIHRoZSAuY29uZgorICAgICAgICAgICAgIyBm
aWxlLiBXZSBoYXZlIGFwYWNoZS9jeWd3aW4gY2hlY2tlZCBpbnRvIG91ciB0cmVlIHNvCisgICAg
ICAgICAgICAjIHBlb3BsZSBkb24ndCBoYXZlIHRvIGluc3RhbGwgaXQgaW50byB0aGVpciBjeWd3
aW4uCisgICAgICAgICAgICBjeWd1c3IgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGly
ZF9wYXJ0eScsICdjeWd3aW4nLCAndXNyJykKKyAgICAgICAgICAgIGh0dHBkX2NvbmYgPSBodHRw
ZF9jb25mLnJlcGxhY2UoJ1NlcnZlclJvb3QgIi91c3IiJywKKyAgICAgICAgICAgICAgICAnU2Vy
dmVyUm9vdCAiJXMiJyAlIHNlbGYuX2dldF9jeWd3aW5fcGF0aChjeWd1c3IpKQorCisgICAgICAg
ICMgVE9ETyhvamFuKTogSW5zdGVhZCBvZiB3cml0aW5nIGFuIGV4dHJhIGZpbGUsIGNoZWNraW4g
YSBjb25mIGZpbGUKKyAgICAgICAgIyB1cHN0cmVhbS4gT3IsIGV2ZW4gYmV0dGVyLCB1cHN0cmVh
bS9kZWxldGUgYWxsIG91ciBjaHJvbWUgaHR0cAorICAgICAgICAjIHRlc3RzIHNvIHdlIGRvbid0
IG5lZWQgdGhpcyBzcGVjaWFsLWNhc2VkIERvY3VtZW50Um9vdCBhbmQgdGhlbgorICAgICAgICAj
IGp1c3QgdXNlIHRoZSB1cHN0cmVhbQorICAgICAgICAjIGNvbmYgZmlsZS4KKyAgICAgICAgY2hy
b21lX2RvY3VtZW50X3Jvb3QgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAn
ZGF0YScsCisgICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKKyAgICAgICAgaWYgc2VsZi5faXNf
Y3lnd2luKCk6CisgICAgICAgICAgICBjaHJvbWVfZG9jdW1lbnRfcm9vdCA9IHNlbGYuX2dldF9j
eWd3aW5fcGF0aChjaHJvbWVfZG9jdW1lbnRfcm9vdCkKKyAgICAgICAgaHR0cGRfY29uZiA9ICho
dHRwZF9jb25mICsKKyAgICAgICAgICAgIHNlbGYuX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKGNo
cm9tZV9kb2N1bWVudF9yb290LCA4MDgxKSkKKworICAgICAgICBmID0gb3BlbihodHRwZF9jb25m
aWdfY29weSwgJ3diJykKKyAgICAgICAgZi53cml0ZShodHRwZF9jb25mKQorICAgICAgICBmLmNs
b3NlKCkKKworICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl9nZXRfY3lnd2luX3BhdGgoaHR0cGRfY29uZmlnX2NvcHkpCisgICAgICAgIHJldHVy
biBodHRwZF9jb25maWdfY29weQorCisgICAgZGVmIF9nZXRfdmlydHVhbF9ob3N0X2NvbmZpZyhz
ZWxmLCBkb2N1bWVudF9yb290LCBwb3J0LCBzc2w9RmFsc2UpOgorICAgICAgICAiIiJSZXR1cm5z
IGEgPFZpcnR1YWxIb3N0PiBkaXJlY3RpdmUgYmxvY2sgZm9yIGFuIGh0dHBkLmNvbmYgZmlsZS4K
KyAgICAgICAgSXQgd2lsbCBsaXN0ZW4gdG8gMTI3LjAuMC4xIG9uIGVhY2ggb2YgdGhlIGdpdmVu
IHBvcnQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKCgnPFZpcnR1YWxI
b3N0IDEyNy4wLjAuMTolcz4nICUgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rv
Y3VtZW50Um9vdCAlcycgJSBkb2N1bWVudF9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBzc2wgYW5kICdTU0xFbmdpbmUgT24nIG9yICcnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAnPC9WaXJ0dWFsSG9zdD4nLCAnJykpCisKKyAgICBkZWYgX3N0YXJ0X2h0dHBkX3Byb2Nlc3Mo
c2VsZik6CisgICAgICAgICIiIlN0YXJ0cyB0aGUgaHR0cGQgcHJvY2VzcyBhbmQgcmV0dXJucyB3
aGV0aGVyIHRoZXJlIHdlcmUgZXJyb3JzLiIiIgorICAgICAgICAjIFVzZSBzaGVsbD1UcnVlIGJl
Y2F1c2Ugd2Ugam9pbiB0aGUgYXJndW1lbnRzIGludG8gYSBzdHJpbmcgZm9yCisgICAgICAgICMg
dGhlIHNha2Ugb2YgV2luZG93L0N5Z3dpbiBhbmQgaXQgbmVlZHMgcXVvdGluZyB0aGF0IGJyZWFr
cworICAgICAgICAjIHNoZWxsPUZhbHNlLgorICAgICAgICBzZWxmLl9odHRwZF9wcm9jID0gc3Vi
cHJvY2Vzcy5Qb3BlbihzZWxmLl9zdGFydF9jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBz
aGVsbD1UcnVlKQorICAgICAgICBlcnIgPSBzZWxmLl9odHRwZF9wcm9jLnN0ZGVyci5yZWFkKCkK
KyAgICAgICAgaWYgbGVuKGVycik6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGVycikKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHN0
YXJ0KHNlbGYpOgorICAgICAgICAiIiJTdGFydHMgdGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIK
KyAgICAgICAgIyBTdG9wIGFueSBjdXJyZW50bHkgcnVubmluZyBzZXJ2ZXJzLgorICAgICAgICBz
ZWxmLnN0b3AoKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YXJ0aW5nIGFwYWNoZSBodHRw
IHNlcnZlciIpCisgICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24o
c2VsZi5fc3RhcnRfaHR0cGRfcHJvY2VzcykKKyAgICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6Cisg
ICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJBcGFjaGUgc3RhcnRlZC4gVGVzdGluZyBwb3J0cyIp
CisgICAgICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9uKAorICAg
ICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKQorCisgICAg
ICAgIGlmIHNlcnZlcl9zdGFydGVkOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVy
IHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbignRmFpbGVkIHRvIHN0YXJ0IGh0dHAgc2VydmVyJykKKworICAgIGRlZiBzdG9w
KHNlbGYpOgorICAgICAgICAiIiJTdG9wcyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgorICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5uaW5nIGh0dHAgc2VydmVy
cyIpCisgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMo
c2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICAgICAgaHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5f
cGlkX2ZpbGUpLnJlYWRsaW5lKCkpCisgICAgICAgIHBhdGhfdXRpbHMuc2h1dF9kb3duX2h0dHBf
c2VydmVyKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1cmUucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmI2YzMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9mYWlsdXJlLnB5CkBAIC0wLDAgKzEsMjI3IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitDSFJPTUlVTV9XSU4gPSAiY2hyb21pdW0td2luIgorQ0hST01J
VU1fTUFDID0gImNocm9taXVtLW1hYyIKK0NIUk9NSVVNX0xJTlVYID0gImNocm9taXVtLWxpbnV4
IgorV0VCS0lUX1dJTl9USVRMRSA9ICJXZWJLaXQgV2luIgorV0VCS0lUX01BQ19USVRMRSA9ICJX
ZWJLaXQgTWFjIgorV0VCS0lUX1RJVExFID0gIldlYktpdCIKK1VOS05PV04gPSAiVW5rbm93biIK
KworRVhQRUNURURfSU1BR0VfRklMRV9FTkRJTkcgPSAiLWV4cGVjdGVkLnBuZyIKK0FDVFVBTF9J
TUFHRV9GSUxFX0VORElORyA9ICItYWN0dWFsLnBuZyIKK1VQU1RSRUFNX0lNQUdFX0ZJTEVfRU5E
SU5HID0gIi1leHBlY3RlZC11cHN0cmVhbS5wbmciCitFWFBFQ1RFRF9URVhUX0ZJTEVfRU5ESU5H
ID0gIi1leHBlY3RlZC50eHQiCitBQ1RVQUxfVEVYVF9GSUxFX0VORElORyA9ICItYWN0dWFsLnR4
dCIKK0RJRkZfSU1BR0VfRklMRV9FTkRJTkcgPSAiLWRpZmYucG5nIgorRElGRl9URVhUX0ZJTEVf
RU5ESU5HID0gIi1kaWZmLnR4dCIKKworQ0hST01JVU1fU1JDX0hPTUUgPSAiaHR0cDovL3NyYy5j
aHJvbWl1bS5vcmcvdmlld3ZjL2Nocm9tZS90cnVuay9zcmMvd2Via2l0LyIKK0NIUk9NSVVNX1RS
QUNfSE9NRSA9IENIUk9NSVVNX1NSQ19IT01FICsgImRhdGEvbGF5b3V0X3Rlc3RzLyIKK1dFQktJ
VF9UUkFDX0hPTUUgPSAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL0xheW91
dFRlc3RzLyIKK1dFQktJVF9TVk5fSE9TVE5BTUUgPSAic3ZuLndlYmtpdC5vcmciCitUSElSRF9Q
QVJUWSA9ICJ0aGlyZF9wYXJ0eSIKKworV0VCS0lUX1BMQVRGT1JNX1VSTF9CQVNFID0gV0VCS0lU
X1RSQUNfSE9NRSArICJwbGF0Zm9ybSIKK1dFQktJVF9MQVlPVVRfVEVTVF9CQVNFX1VSTCA9ICJo
dHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvIgorV0VCS0lUX0lN
QUdFX0JBU0VMSU5FX0JBU0VfVVJMX1dJTiA9IChXRUJLSVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luLyIpCitXRUJLSVRfSU1BR0VfQkFTRUxJTkVfQkFTRV9VUkxfTUFDID0gKFdFQktJ
VF9MQVlPVVRfVEVTVF9CQVNFX1VSTCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvIikKK1dFQktJVF9UUkFDX0lNQUdFX0JB
U0VMSU5FX0JBU0VfVVJMX01BQyA9IFdFQktJVF9QTEFURk9STV9VUkxfQkFTRSArICIvbWFjLyIK
K1dFQktJVF9UUkFDX0lNQUdFX0JBU0VMSU5FX0JBU0VfVVJMX1dJTiA9IFdFQktJVF9QTEFURk9S
TV9VUkxfQkFTRSArICIvd2luLyIKKworTEFZT1VUX1RFU1RfUkVTVUxUU19ESVIgPSAibGF5b3V0
LXRlc3QtcmVzdWx0cyIKKworRkFJTCA9ICJGQUlMIgorVElNRU9VVCA9ICJUSU1FT1VUIgorQ1JB
U0ggPSAiQ1JBU0giCitQQVNTID0gIlBBU1MiCitXT05URklYID0gIldPTlRGSVgiCisKKworY2xh
c3MgRmFpbHVyZShvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBh
IGZhaWx1cmUgaW4gdGhlIHRlc3Qgb3V0cHV0LCBhbmQgaXMKKyAgICBpbnRlbmRlZCBhcyBhIGRh
dGEgbW9kZWwgb2JqZWN0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg
ICAgICBzZWxmLnBsYXRmb3JtID0gIiIKKyAgICAgICAgc2VsZi50ZXN0X3BhdGggPSAiIgorICAg
ICAgICBzZWxmLnRleHRfZGlmZl9taXNtYXRjaCA9IEZhbHNlCisgICAgICAgIHNlbGYuaW1hZ2Vf
bWlzbWF0Y2ggPSBGYWxzZQorICAgICAgICBzZWxmLnRpbWVvdXQgPSBGYWxzZQorICAgICAgICBz
ZWxmLmNyYXNoZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnRleHRfYmFzZWxpbmVfdXJsID0gIiIK
KyAgICAgICAgc2VsZi5pbWFnZV9iYXNlbGluZV91cmwgPSAiIgorICAgICAgICBzZWxmLnRleHRf
YmFzZWxpbmVfYWdlID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9iYXNlbGluZV9hZ2UgPSAiIgor
ICAgICAgICBzZWxmLnRlc3RfYWdlID0gIiIKKyAgICAgICAgc2VsZi50ZXh0X2Jhc2VsaW5lX2xv
Y2FsID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9iYXNlbGluZV9sb2NhbCA9ICIiCisgICAgICAg
IHNlbGYudGV4dF9hY3R1YWxfbG9jYWwgPSAiIgorICAgICAgICBzZWxmLmltYWdlX2FjdHVhbF9s
b2NhbCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXBzdHJlYW1fdXJsID0gIiIK
KyAgICAgICAgc2VsZi5pbWFnZV9iYXNlbGluZV91cHN0cmVhbV9sb2NhbCA9ICIiCisgICAgICAg
IHNlbGYudGVzdF9leHBlY3RhdGlvbnNfbGluZSA9ICIiCisgICAgICAgIHNlbGYuZmxha2luZXNz
ID0gMAorCisgICAgZGVmIGdldF9leHBlY3RlZF9pbWFnZV9maWxlbmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3JlbmFtZV9lbmRfb2ZfdGVzdF9wYXRoKEVYUEVDVEVEX0lNQUdFX0ZJ
TEVfRU5ESU5HKQorCisgICAgZGVmIGdldF9hY3R1YWxfaW1hZ2VfZmlsZW5hbWUoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9yZW5hbWVfZW5kX29mX3Rlc3RfcGF0aChBQ1RVQUxfSU1BR0Vf
RklMRV9FTkRJTkcpCisKKyAgICBkZWYgZ2V0X2V4cGVjdGVkX3RleHRfZmlsZW5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9yZW5hbWVfZW5kX29mX3Rlc3RfcGF0aChFWFBFQ1RFRF9U
RVhUX0ZJTEVfRU5ESU5HKQorCisgICAgZGVmIGdldF9hY3R1YWxfdGV4dF9maWxlbmFtZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlbmFtZV9lbmRfb2ZfdGVzdF9wYXRoKEFDVFVBTF9U
RVhUX0ZJTEVfRU5ESU5HKQorCisgICAgZGVmIGdldF9pbWFnZV9kaWZmX2ZpbGVuYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcmVuYW1lX2VuZF9vZl90ZXN0X3BhdGgoRElGRl9JTUFH
RV9GSUxFX0VORElORykKKworICAgIGRlZiBnZXRfdGV4dF9kaWZmX2ZpbGVuYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fcmVuYW1lX2VuZF9vZl90ZXN0X3BhdGgoRElGRl9URVhUX0ZJ
TEVfRU5ESU5HKQorCisgICAgZGVmIGdldF9pbWFnZV91cHN0cmVhbV9maWxlbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3JlbmFtZV9lbmRfb2ZfdGVzdF9wYXRoKFVQU1RSRUFNX0lN
QUdFX0ZJTEVfRU5ESU5HKQorCisgICAgZGVmIF9yZW5hbWVfZW5kX29mX3Rlc3RfcGF0aChzZWxm
LCBzdWZmaXgpOgorICAgICAgICBsYXN0X2luZGV4ID0gc2VsZi50ZXN0X3BhdGgucmZpbmQoIi4i
KQorICAgICAgICBpZiBsYXN0X2luZGV4ID09IC0xOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
dGVzdF9wYXRoCisgICAgICAgIHJldHVybiBzZWxmLnRlc3RfcGF0aFswOmxhc3RfaW5kZXhdICsg
c3VmZml4CisKKyAgICBkZWYgZ2V0X3Rlc3RfaG9tZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50
ZXN0X3BhdGguc3RhcnRzd2l0aCgiY2hyb21lIik6CisgICAgICAgICAgICByZXR1cm4gQ0hST01J
VU1fVFJBQ19IT01FICsgc2VsZi50ZXN0X3BhdGgKKyAgICAgICAgcmV0dXJuIFdFQktJVF9UUkFD
X0hPTUUgKyBzZWxmLnRlc3RfcGF0aAorCisgICAgZGVmIGdldF9pbWFnZV9iYXNlbGluZV90cmFj
X2hvbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfaW1hZ2VfYmFzZWxpbmVfaW5fd2Via2l0
KCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3RyYWNfaG9tZShzZWxmLmltYWdlX2Jh
c2VsaW5lX3VybCkKKyAgICAgICAgcmV0dXJuIHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXJsCisKKyAg
ICBkZWYgZ2V0X3RleHRfYmFzZWxpbmVfdHJhY19ob21lKHNlbGYpOgorICAgICAgICBpZiBzZWxm
LnRleHRfYmFzZWxpbmVfdXJsIGFuZCBzZWxmLmlzX3RleHRfYmFzZWxpbmVfaW5fd2Via2l0KCk6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3RyYWNfaG9tZShzZWxmLnRleHRfYmFzZWxp
bmVfdXJsKQorICAgICAgICByZXR1cm4gc2VsZi50ZXh0X2Jhc2VsaW5lX3VybAorCisgICAgZGVm
IF9nZXRfdHJhY19ob21lKHNlbGYsIGZpbGUpOgorICAgICAgICByZXR1cm4gV0VCS0lUX1RSQUNf
SE9NRSArIGZpbGVbZmlsZS5maW5kKCJMYXlvdXRUZXN0cyIpOl0KKworICAgIGRlZiBnZXRfdGV4
dF9iYXNlbGluZV9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9maWxl
X2xvY2F0aW9uKHNlbGYudGV4dF9iYXNlbGluZV91cmwpCisKKyAgICBkZWYgZ2V0X2ltYWdlX2Jh
c2VsaW5lX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2ZpbGVfbG9j
YXRpb24oc2VsZi5pbWFnZV9iYXNlbGluZV91cmwpCisKKyAgICAjIFRPRE8oZ3dpbHNvbik6IFJl
ZmFjdG9yIHRoaXMgbG9naWMgc28gaXQgY2FuIGJlIHVzZWQgYnkgbXVsdGlwbGUgc2NyaXB0cy4K
KyAgICAjIFRPRE8oZ3dpbHNvbik6IENoYW5nZSB0aGlzIHNvIHRoYXQgaXQgcmVzcGVjdHMgdGhl
IGZhbGxiYWNrIG9yZGVyIG9mCisgICAgIyBkaWZmZXJlbnQgcGxhdGZvcm1zLiAoSWYgcGxhdGZv
cm0gaXMgbWFjLCB0aGUgZmFsbGJhY2sgc2hvdWxkIGJlCisgICAgIyBkaWZmZXJlbnQuKQorCisg
ICAgZGVmIF9nZXRfZmlsZV9sb2NhdGlvbihzZWxmLCBmaWxlKToKKyAgICAgICAgaWYgbm90IGZp
bGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBmaWxlLmZpbmQoQ0hST01J
VU1fV0lOKSA+IC0xOgorICAgICAgICAgICAgcmV0dXJuIENIUk9NSVVNX1dJTgorICAgICAgICBp
ZiBmaWxlLmZpbmQoQ0hST01JVU1fTUFDKSA+IC0xOgorICAgICAgICAgICAgcmV0dXJuIENIUk9N
SVVNX01BQworICAgICAgICBpZiBmaWxlLmZpbmQoQ0hST01JVU1fTElOVVgpID4gLTE6CisgICAg
ICAgICAgICByZXR1cm4gQ0hST01JVU1fTElOVVgKKyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRo
KFdFQktJVF9JTUFHRV9CQVNFTElORV9CQVNFX1VSTF9XSU4pOgorICAgICAgICAgICAgcmV0dXJu
IFdFQktJVF9XSU5fVElUTEUKKyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKFdFQktJVF9JTUFH
RV9CQVNFTElORV9CQVNFX1VSTF9NQUMpOgorICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9NQUNf
VElUTEUKKyAgICAgICAgIyBUT0RPKGd3aWxzb24pOiBBZGQgbWFjLXNub3dsZW9wYXJkLCBtYWMt
bGVvcGFyZCwgbWFjLXRpZ2VyIGhlcmUuCisgICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChXRUJL
SVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwpOgorICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9USVRM
RQorICAgICAgICByZXR1cm4gVU5LTk9XTgorCisgICAgZGVmIF9pc19maWxlX2luX3dlYmtpdChz
ZWxmLCBmaWxlKToKKyAgICAgICAgcmV0dXJuIGZpbGUgIT0gTm9uZSBhbmQgKGZpbGUuZmluZChX
RUJLSVRfU1ZOX0hPU1ROQU1FKSA+IC0xIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWxlLmZpbmQoVEhJUkRfUEFSVFkpID4gLTEpCisKKyAgICBkZWYgaXNfaW1hZ2VfYmFz
ZWxpbmVfaW5fY2hyb21pdW0oc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc19pbWFn
ZV9iYXNlbGluZV9pbl93ZWJraXQoKQorCisgICAgZGVmIGlzX2ltYWdlX2Jhc2VsaW5lX2luX3dl
YmtpdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lzX2ZpbGVfaW5fd2Via2l0KHNlbGYu
aW1hZ2VfYmFzZWxpbmVfdXJsKQorCisgICAgZGVmIGlzX3RleHRfYmFzZWxpbmVfaW5fY2hyb21p
dW0oc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc190ZXh0X2Jhc2VsaW5lX2luX3dl
YmtpdCgpCisKKyAgICBkZWYgaXNfdGV4dF9iYXNlbGluZV9pbl93ZWJraXQoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9pc19maWxlX2luX3dlYmtpdChzZWxmLnRleHRfYmFzZWxpbmVfdXJs
KQorCisgICAgZGVmIGdldF90ZXh0X3Jlc3VsdF9sb2NhdGlvbl9pbl96aXBfZmlsZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9maWxlX2xvY2F0aW9uX2luX3ppcF9maWxlKAorICAg
ICAgICAgICAgc2VsZi5nZXRfYWN0dWFsX3RleHRfZmlsZW5hbWUoKSkKKworICAgIGRlZiBnZXRf
aW1hZ2VfcmVzdWx0X2xvY2F0aW9uX2luX3ppcF9maWxlKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fZ2V0X2ZpbGVfbG9jYXRpb25faW5femlwX2ZpbGUoCisgICAgICAgICAgICBzZWxmLmdl
dF9hY3R1YWxfaW1hZ2VfZmlsZW5hbWUoKSkKKworICAgIGRlZiBfZ2V0X2ZpbGVfbG9jYXRpb25f
aW5femlwX2ZpbGUoc2VsZiwgZmlsZSk6CisgICAgICAgIHJldHVybiAiJXMvJXMiICUgKExBWU9V
VF9URVNUX1JFU1VMVFNfRElSLCBmaWxlKQorCisgICAgIyBUT0RPKGd3aWxzb24pOiBpbXBsZW1l
bnQgdGhpcyBtZXRob2QuCisgICAgZGVmIGdldF9hbGxfYmFzZWxpbmVfbG9jYXRpb25zKHNlbGYp
OgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdo
ZXRoZXIgdGhlIHRlc3QgaXMgYWN0dWFsbHkgZXhwZWN0ZWQgdG8gZmFpbCwKKyAgICAjIGluIG9y
ZGVyIHRvIGtub3cgd2hldGhlciB0byByZXRyaWV2ZSBleHBlY3RlZCB0ZXN0IHJlc3VsdHMgZm9y
IGl0LgorICAgICMgKHRlc3QgcmVzdWx0cyBkb250IGV4aXN0IGZvciB0ZXN0cyBleHBlY3RlZCB0
byBmYWlsL2NyYXNoLikKKworICAgIGRlZiBpc19leHBlY3RlZF90b19mYWlsKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZmluZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhGQUlMKQorCisg
ICAgZGVmIGlzX2V4cGVjdGVkX3RvX3RpbWVvdXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9maW5kX2tleXdvcmRfaW5fZXhwZWN0YXRpb25zKFRJTUVPVVQpCisKKyAgICBkZWYgaXNfZXhw
ZWN0ZWRfdG9fY3Jhc2goc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2tleXdvcmRf
aW5fZXhwZWN0YXRpb25zKENSQVNIKQorCisgICAgZGVmIGlzX2V4cGVjdGVkX3RvX3Bhc3Moc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2tleXdvcmRfaW5fZXhwZWN0YXRpb25zKFBB
U1MpCisKKyAgICBkZWYgaXNfd29udF9maXgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9m
aW5kX2tleXdvcmRfaW5fZXhwZWN0YXRpb25zKFdPTlRGSVgpCisKKyAgICBkZWYgX2ZpbmRfa2V5
d29yZF9pbl9leHBlY3RhdGlvbnMoc2VsZiwga2V5d29yZCk6CisgICAgICAgIGlmIChub3Qgc2Vs
Zi50ZXN0X2V4cGVjdGF0aW9uc19saW5lIG9yCisgICAgICAgICAgICBsZW4oc2VsZi50ZXN0X2V4
cGVjdGF0aW9uc19saW5lKSA9PSAwKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAg
ICBpZiBzZWxmLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUuZmluZChrZXl3b3JkKSA+IC0xOgorICAg
ICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9m
YWlsdXJlX2ZpbmRlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1cmVfZmluZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRlODVlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRl
ci5weQpAQCAtMCwwICsxLDkyMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworIyBUT0RPKGd3aWxzb24pOiAxLiAgQ2hhbmdlIHRleHQgZGlmZmVycyB0byB1c2Ug
ZXh0ZXJuYWwgdXRpbHMuCisjICAgICAgICAgICAgICAgIDIuICBDaGFuZ2UgdGV4dF9leHBlY3Rh
dGlvbnMgcGFyc2luZyB0byBleGlzdGluZworIyAgICAgICAgICAgICAgICAgICAgbG9naWMgaW4g
bGF5b3V0X3BhZ2NrYWdlLnRlc3RfZXhwZWN0YXRpb25zLgorCitpbXBvcnQgZGlmZmxpYgoraW1w
b3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRoX3V0aWxzCitpbXBvcnQgcGxhdGZvcm1f
dXRpbHMKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9y
dCBzeXMKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgemlwZmlsZQorCitmcm9tIGZhaWx1cmUgaW1w
b3J0IEZhaWx1cmUKKworV0VCS0lUX1RSQUNfSE9TVE5BTUUgPSAidHJhYy53ZWJraXQub3JnIgor
V0VCS0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMID0gKCJodHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVw
b3NpdG9yeS8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdC90cnVuay9M
YXlvdXRUZXN0cy8iKQorV0VCS0lUX1BMQVRGT1JNX0JBU0VMSU5FX1VSTCA9IChXRUJLSVRfTEFZ
T1VUX1RFU1RfQkFTRV9VUkwgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxh
dGZvcm0vJXMvIikKKworQlVJTERCT1RfQkFTRSA9ICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3Jn
L2J1aWxkYm90LyIKK1dFQktJVF9CVUlMREVSX0JBU0UgPSBCVUlMREJPVF9CQVNFICsgIndhdGVy
ZmFsbC9idWlsZGVycy8lcyIKK0ZZSV9CVUlMREVSX0JBU0UgPSBCVUlMREJPVF9CQVNFICsgIndh
dGVyZmFsbC5meWkvYnVpbGRlcnMvJXMiCitSRVNVTFRTX1VSTF9CQVNFID0gIi9idWlsZHMvJXMv
c3RlcHMvd2Via2l0X3Rlc3RzL2xvZ3Mvc3RkaW8iCitBUkNISVZFX1VSTF9CQVNFID0gIi9idWls
ZHMvJXMvc3RlcHMvYXJjaGl2ZV93ZWJraXRfdGVzdHNfcmVzdWx0cy9sb2dzL3N0ZGlvIgorWklQ
X0ZJTEVfVVJMX0JBU0UgPSAoQlVJTERCT1RfQkFTRSArCisgICAgICAgICAgICAgICAgICAgICAi
bGF5b3V0X3Rlc3RfcmVzdWx0cy8lcy8lcy9sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCIpCitDSFJP
TUlVTV9TUkNfSE9NRSA9ICJodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3Ry
dW5rL3NyYy93ZWJraXQvIgorTEFZT1VUX1RFU1RfUkVQT19CQVNFX1VSTCA9IENIUk9NSVVNX1NS
Q19IT01FICsgImRhdGEvbGF5b3V0X3Rlc3RzLyIKKworIyBUT0RPKGd3aWxzb24pOiBQdXQgZmxh
a3kgdGVzdCBkYXNoYm9hcmQgVVJMIGhlcmUgd2hlbiByZWFkeS4KK0ZMQUtZX1RFU1RfVVJMID0g
IiIKK0ZMQUtZX1RFU1RfUkVHRVggPSAiJXM8L2E+PC90ZD48dGQgYWxpZ249cmlnaHQ+KFxkKyk8
L3RkPiIKKworVEVTVF9FWFBFQ1RBVElPTlNfVVJMID0gKENIUk9NSVVNX1NSQ19IT01FICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAidG9vbHMvbGF5b3V0X3Rlc3RzL3Rlc3RfZXhwZWN0YXRp
b25zLnR4dCIpCisKKyMgRmFpbHVyZSB0eXBlcyBhcyBmb3VuZCBpbiBidWlsZGVyIHN0ZGlvLgor
VEVYVF9ESUZGX01JU01BVENIID0gIlRleHQgZGlmZiBtaXNtYXRjaCIKK0lNQUdFX01JU01BVENI
ID0gIkltYWdlIG1pc21hdGNoIgorVEVTVF9USU1FRF9PVVQgPSAiVGVzdCB0aW1lZCBvdXQiCitU
RVNUX1NIRUxMX0NSQVNIRUQgPSAiVGVzdCBzaGVsbCBjcmFzaGVkIgorCitDSFJPTUlVTV9XSU4g
PSAiY2hyb21pdW0td2luIgorQ0hST01JVU1fV0lOX1hQID0gImNocm9taXVtLXdpbi14cCIKK0NI
Uk9NSVVNX1dJTl9WSVNUQSA9ICJjaHJvbWl1bS13aW4tdmlzdGEiCitDSFJPTUlVTV9XSU5fNyA9
ICJjaHJvbWl1bS13aW4tNyIKK0NIUk9NSVVNX01BQyA9ICJjaHJvbWl1bS1tYWMiCitDSFJPTUlV
TV9MSU5VWCA9ICJjaHJvbWl1bS1saW51eCIKK1BMQVRGT1JNID0gInBsYXRmb3JtIgorTEFZT1VU
VEVTVFMgPSAiTGF5b3V0VGVzdHMiCisKKyMgVGhlc2UgcGxhdGZvcm0gZGlycyBtdXN0IGJlIGlu
IG9yZGVyIG9mIHRoZWlyIHByZWNlZGVuY2UuCisjIFRPRE8oZ3dpbHNvbik6IFRoaXMgaXMgbm90
IHRoZSBzYW1lIGZhbGxiYWNrIG9yZGVyIGFzIHRlc3Rfc2hlbGwuICBUaGlzIGxpc3QKKyMgc2hv
dWxkIGJlIHJldmVyc2VkLCBhbmQgd2UgbmVlZCB0byBhZGQgZGV0ZWN0aW9uIGZvciB0aGUgdHlw
ZSBvZiBPUyB0aGF0CisjIHRoZSBnaXZlbiBidWlsZGVyIGlzIHJ1bm5pbmcuCitXRUJLSVRfTUFD
X1BMQVRGT1JNX0RJUlMgPSBbIm1hYy1sZW9wYXJkIiwgIm1hYy1zbm93bGVvcGFyZCIsICJtYWMi
XQorV0VCS0lUX1dJTl9QTEFURk9STV9ESVJTID0gWyJ3aW4iLCAibWFjIl0KK0NIUk9NSVVNX01B
Q19QTEFURk9STV9ESVJTID0gW0NIUk9NSVVNX01BQ10KK0NIUk9NSVVNX1dJTl9QTEFURk9STV9E
SVJTID0gW0NIUk9NSVVNX1dJTl9YUCwgQ0hST01JVU1fV0lOX1ZJU1RBLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0hST01JVU1fV0lOXzcsIENIUk9NSVVNX1dJTl0KK0NIUk9NSVVN
X0xJTlVYX1BMQVRGT1JNX0RJUlMgPSBbQ0hST01JVU1fTElOVVgsIENIUk9NSVVNX1dJTl0KKwor
QVJDSElWRV9VUkxfUkVHRVggPSAibGFzdC4qY2hhbmdlOiAoXGQrKSIKK0JVSUxEX05BTUVfUkVH
RVggPSAiYnVpbGQgbmFtZTogKFteXHNdKikiCitDSFJPTUlVTV9GSUxFX0FHRV9SRUdFWCA9ICc8
YnIgLz5ccypNb2RpZmllZFxzKjxlbT4uKjwvZW0+IFwoKC4qKVwpIGJ5JworVEhSRUFEX05BTUVf
UkVHRVggPSAiW1xTXSs/IgorVEVTVF9QQVRIX1JFR0VYID0gIltcU10rPyIKK0ZBSUxFRF9SRUdF
WCA9ICgiREVCVUcgIiArIFRIUkVBRF9OQU1FX1JFR0VYICsgIiAiICsKKyAgICAgICAgICAgICAg
ICAiKCIgKyBURVNUX1BBVEhfUkVHRVggKyAiKSBmYWlsZWQ6XHMqIgorICAgICAgICAgICAgICAg
ICIoIiArIFRFWFRfRElGRl9NSVNNQVRDSCArICIpP1xzKiIKKyAgICAgICAgICAgICAgICAiKCIg
KyBJTUFHRV9NSVNNQVRDSCArICIpP1xzKiIKKyAgICAgICAgICAgICAgICAiKCIgKyBURVNUX1RJ
TUVEX09VVCArICIpP1xzKiIKKyAgICAgICAgICAgICAgICAiKCIgKyBURVNUX1NIRUxMX0NSQVNI
RUQgKyAiKT8iKQorRkFJTEVEX1VORVhQRUNURURfUkVHRVggPSAiICBbXlxzXSsoPzogPSAuKj8p
P1xuIgorTEFTVF9CVUlMRF9SRUdFWCA9ICgiPGgyPlJlY2VudCBCdWlsZHM6PC9oMj4iCisgICAg
ICAgICAgICAgICAgICAgICJbXHNcU10qPzxhIGhyZWY9XCIuLi9idWlsZGVycy8uKj8vYnVpbGRz
LyhcZCspXCI+IikKKyMgU29tZXRpbWVzIHRoZSBsaW5lcyBvZiBoeXBoZW5zIGdldHMgaW50ZXJy
dXB0ZWQgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMKKyMgb3V0cHV0dGluZyB0byBzdGRpbywgc28g
ZG9uJ3QgcmVseSBvbiB0aGVtIGJlaW5nIGNvbnRpZ3VvdXMuCitTVU1NQVJZX1JFR0VYID0gKCJc
ZCsgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAiCisgICAgICAgICAgICAgICAgICJcZCsgZGlkbid0
OiguKj8pLXs3OH0iKSAgIyAtezc4fSAtLT4gNzggZGFzaGVzIGluIGEgcm93LgorU1VNTUFSWV9S
RUdSRVNTSU9OUyA9ICJSZWdyZXNzaW9uczouKj9cbigoPzogIFteXHNdKyg/OiA9IC4qPyk/XG4p
KykiCitURVNUX0VYUEVDVEFUSU9OU19QTEFURk9STV9SRUdFWCA9ICIoKFdPTlRGSVggfEJVRy4q
ICkrLiogJXMuKiA6ICVzID0gW15cbl0qKSIKK1RFU1RfRVhQRUNUQVRJT05TX05PX1BMQVRGT1JN
X1JFR0VYID0gKCIoKFdPTlRGSVggfEJVRy4qICkrLioiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiKD8hV0lOKSg/IUxJTlVYKSg/IU1BQykuKiA6IgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAlcyA9IFteXG5dKikiKQorCitXRUJLSVRf
RklMRV9BR0VfUkVHRVggPSAoJzxhIGNsYXNzPSJmaWxlIiB0aXRsZT0iVmlldyBGaWxlIiBocmVm
PSIlcyI+Lio/PC9hPi4nCisgICAnKj88dGQgY2xhc3M9ImFnZSIgLio/PlxzKicKKyAgICc8YSBj
bGFzcz0idGltZWxpbmUiIGhyZWY9Ii4qPyIgdGl0bGU9Ii4qPyI+KC4qPyk8L2E+JykKKworTE9D
QUxfQkFTRUxJTkVfUkVHRVhFUyA9IFsKKyAgIi4qL3RoaXJkX3BhcnR5L1dlYmtpdC9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS8uKj8oLy4qKSIsCisgICIuKi90aGlyZF9wYXJ0eS9XZWJraXQvTGF5b3V0
VGVzdHMoLy4qKSIsCisgICIuKi93ZWJraXQvZGF0YS9sYXlvdXRfdGVzdHMvcGxhdGZvcm0vLio/
L0xheW91dFRlc3RzKC8uKikiLAorICAiLiovd2Via2l0L2RhdGEvbGF5b3V0X3Rlc3RzL3BsYXRm
b3JtLy4qPygvLiopIiwKKyAgIi4qL3dlYmtpdC9kYXRhL2xheW91dF90ZXN0cygvLiopIiwKKyAg
IigvLiopIl0KKworVVBTVFJFQU1fSU1BR0VfRklMRV9FTkRJTkcgPSAiLXVwc3RyZWFtLnBuZyIK
KworVEVTVF9FWFBFQ1RBVElPTlNfV09OVEZJWCA9ICJXT05URklYIgorCitURU1QX1pJUF9ESVIg
PSAidGVtcC16aXAtZGlyIgorCitUQVJHRVRTID0gWyJSZWxlYXNlIiwgIkRlYnVnIl0KKworCitk
ZWYgZ2V0X3VybF9iYXNlKHVzZV9meWkpOgorICAgIGlmIHVzZV9meWk6CisgICAgICAgIHJldHVy
biBGWUlfQlVJTERFUl9CQVNFCisgICAgcmV0dXJuIFdFQktJVF9CVUlMREVSX0JBU0UKKworCitk
ZWYgZ2V0X3Jlc3VsdHNfdXJsKGJ1aWxkLCBwbGF0Zm9ybSwgdXNlX2Z5aT1GYWxzZSk6CisgICAg
cmV0dXJuIChnZXRfdXJsX2Jhc2UodXNlX2Z5aSkgKyBSRVNVTFRTX1VSTF9CQVNFKSAlIChwbGF0
Zm9ybSwgYnVpbGQpCisKKworZGVmIGdldF9hcmNoaXZlX3VybChidWlsZCwgcGxhdGZvcm0sIHVz
ZV9meWk9RmFsc2UpOgorICAgIHJldHVybiAoZ2V0X3VybF9iYXNlKHVzZV9meWkpICsgQVJDSElW
RV9VUkxfQkFTRSkgJSAocGxhdGZvcm0sIGJ1aWxkKQorCisKK2RlZiBnZXRfemlwX2ZpbGVfdXJs
KGJ1aWxkLCBwbGF0Zm9ybSk6CisgICAgcmV0dXJuIFpJUF9GSUxFX1VSTF9CQVNFICUgKHBsYXRm
b3JtLCBidWlsZCkKKworCitkZWYgZ2V0X2J1aWxkZXJfdXJsKHBsYXRmb3JtLCB1c2VfZnlpPUZh
bHNlKToKKyAgICByZXR1cm4gZ2V0X3VybF9iYXNlKHVzZV9meWkpICUgcGxhdGZvcm0KKworCisj
IFRPRE8oZ3dpbHNvbik6IE9uY2UgdGhlIG5ldyBmbGFraW5lc3MgZGFzaGJvYXJkIGlzIGRvbmUs
IGNvbm5lY3QgaXQgaGVyZS4KK2RlZiBnZXRfZmxha3lfdGVzdF91cmwocGxhdGZvcm0pOgorICAg
IHJldHVybiAiIgorCisKKyMgVE9ETyhnd2lsc29uKTogY2FuIHdlIHJlZmFjdG9yIHRoZXNlIGlu
dG8gdGhlIHJlc291cmNlZ2F0aGVyZXI/CitkZWYgaXNfbGludXhfcGxhdGZvcm0ocGxhdGZvcm0p
OgorICAgIHJldHVybiAocGxhdGZvcm0gYW5kIHBsYXRmb3JtLmZpbmQoIkxpbnV4IikgPiAtMSkK
KworCitkZWYgaXNfbWFjX3BsYXRmb3JtKHBsYXRmb3JtKToKKyAgICByZXR1cm4gKHBsYXRmb3Jt
IGFuZCBwbGF0Zm9ybS5maW5kKCJNYWMiKSA+IC0xKQorCisKK2RlZiBjcmVhdGVfZGlyZWN0b3J5
KGRpcik6CisgICAgIiIiCisgICAgTWV0aG9kIHRoYXQgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IHN0
cnVjdHVyZSBnaXZlbi4KKyAgICBUaGlzIHdpbGwgY3JlYXRlIGRpcmVjdG9yaWVzIHJlY3Vyc2l2
ZWx5IHVudGlsIHRoZSBnaXZlbiBkaXIgZXhpc3RzLgorICAgICIiIgorICAgIGlmIG5vdCBvcy5w
YXRoLmV4aXN0cyhkaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhkaXIsIDA3NzcpCisKKworZGVm
IGV4dHJhY3RfZmlyc3RfdmFsdWUoc3RyaW5nLCByZWdleCk6CisgICAgbSA9IHJlLnNlYXJjaChy
ZWdleCwgc3RyaW5nKQorICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSk6CisgICAgICAgIHJldHVybiBt
Lmdyb3VwKDEpCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZXh0cmFjdF9zaW5nbGVfcmVnZXhf
YXRfdXJsKHVybCwgcmVnZXgpOgorICAgIGNvbnRlbnQgPSBzY3JhcGVfdXJsKHVybCkKKyAgICBt
ID0gcmUuc2VhcmNoKHJlZ2V4LCBjb250ZW50LCByZS5ET1RBTEwpCisgICAgaWYgbSBhbmQgbS5n
cm91cCgxKToKKyAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKKyAgICByZXR1cm4gTm9uZQorCisK
K2RlZiBzY3JhcGVfdXJsKHVybCk6CisgICAgcmV0dXJuIHVybGxpYjIudXJsb3Blbih1cmxsaWIy
LlJlcXVlc3QodXJsKSkucmVhZCgpCisKKworZGVmIGdldF9pbWFnZV9kaWZmX2V4ZWN1dGFibGUo
KToKKyAgICBmb3IgdGFyZ2V0IGluIFRBUkdFVFM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHJldHVybiBwYXRoX3V0aWxzLmltYWdlX2RpZmZfcGF0aCh0YXJnZXQpCisgICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBUaGlz
IGJ1aWxkIHRhcmdldCBkaWQgbm90IGV4aXN0LCB0cnkgdGhlIG5leHQgb25lLgorICAgIHJhaXNl
IEV4Y2VwdGlvbigiTm8gaW1hZ2UgZGlmZiBleGVjdXRhYmxlIGNvdWxkIGJlIGZvdW5kLiAgWW91
IG1heSBuZWVkICIKKyAgICAgICAgICAgICAgICAgICAgInRvIGJ1aWxkIHRoZSBpbWFnZSBkaWZm
IHByb2plY3QgdW5kZXIgYXQgbGVhc3Qgb25lIGJ1aWxkICIKKyAgICAgICAgICAgICAgICAgICAg
InRhcmdldCB0byBjcmVhdGUgaW1hZ2UgZGlmZnMuIikKKworCitkZWYgZ2VuZXJhdGVfcG5nX2Rp
ZmYoZmlsZTEsIGZpbGUyLCBvdXRwdXRfZmlsZSk6CisgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0g
RmFsc2UKKyAgICB0cnk6CisgICAgICAgIGV4ZWN1dGFibGUgPSBnZXRfaW1hZ2VfZGlmZl9leGVj
dXRhYmxlKCkKKyAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsICctLWRpZmYnLCBmaWxlMSwgZmls
ZTIsIG91dHB1dF9maWxlXQorICAgICAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBUcnVlCisgICAg
ZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgIk5vIGNvbW1hbmQgbGluZSB0byBj
b21wYXJlICVzIGFuZCAlcyA6ICVzIiAlIChmaWxlMSwgZmlsZTIsIGUpCisKKyAgICByZXN1bHQg
PSAxCisgICAgaWYgX2NvbXBhcmVfYXZhaWxhYmxlOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQorICAgICAgICBleGNlcHQgT1NFcnJvciwg
ZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UIG9yIGUuZXJybm8gPT0g
ZXJybm8uRUFDQ0VTOgorICAgICAgICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNl
CisgICAgICAgICAgICAgICAgcHJpbnQgIk5vIHBvc3NpYmxlIGNvbXBhcmlzb24gYmV0d2VlbiAl
cyBhbmQgJXMuIiAlICgKKyAgICAgICAgICAgICAgICAgICAgZmlsZTEsIGZpbGUyKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBlCisgICAgaWYgbm90IHJlc3VsdDoK
KyAgICAgICAgcHJpbnQgIlRoZSBnaXZlbiBQTkcgaW1hZ2VzIHdlcmUgdGhlIHNhbWUhIgorICAg
IHJldHVybiBfY29tcGFyZV9hdmFpbGFibGUKKworCisjIFRPRE8oZ3dpbHNvbik6IENoYW5nZSB0
aGlzIHRvIHVzZSB0aGUgcHJldHR5IHByaW50IGRpZmZlcnMuCitkZWYgZ2VuZXJhdGVfdGV4dF9k
aWZmKGZpbGUxLCBmaWxlMiwgb3V0cHV0X2ZpbGUpOgorICAgICMgT3BlbiB1cCBleHBlY3RlZCBh
bmQgYWN0dWFsIHRleHQgZmlsZXMgYW5kIHVzZSBkaWZmbGliIHRvIGNvbXBhcmUgdGhlbS4KKyAg
ICBkYXRhQSA9IG9wZW4oZmlsZTEsICdyJykucmVhZCgpCisgICAgZGF0YUIgPSBvcGVuKGZpbGUy
LCAncicpLnJlYWQoKQorICAgIGQgPSBkaWZmbGliLkRpZmZlcigpCisgICAgZGlmZnMgPSBsaXN0
KGQuY29tcGFyZShkYXRhQS5zcGxpdCgiXG4iKSwgZGF0YUIuc3BsaXQoIlxuIikpKQorICAgIG91
dHB1dCA9IG9wZW4ob3V0cHV0X2ZpbGUsICd3JykKKyAgICBvdXRwdXQud3JpdGUoIlxuIi5qb2lu
KGRpZmZzKSkKKyAgICBvdXRwdXQuY2xvc2UoKQorCisKK2NsYXNzIEJhc2VsaW5lQ2FuZGlkYXRl
KG9iamVjdCk6CisgICAgIiIiU2ltcGxlIGRhdGEgb2JqZWN0IGZvciBob2xkaW5nIHRoZSBVUkwg
YW5kIGxvY2FsIGZpbGUgcGF0aCBvZiBhCisgICAgcG9zc2libGUgYmFzZWxpbmUuICBUaGUgbG9j
YWwgZmlsZSBwYXRoIGlzIG1lYW50IHRvIHJlZmVyIHRvIHRoZSBsb2NhbGx5LQorICAgIGNhY2hl
ZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGF0IHRoZSBVUkwuIiIiCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbG9jYWwsIHVybCk6CisgICAgICAgIHNlbGYubG9jYWxfZmlsZSA9IGxvY2FsCisgICAg
ICAgIHNlbGYuYmFzZWxpbmVfdXJsID0gdXJsCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLmxvY2FsX2ZpbGUgIT0gTm9uZSBhbmQgc2VsZi5iYXNlbGluZV91
cmwgIT0gTm9uZQorCisKK2NsYXNzIEZhaWx1cmVGaW5kZXIob2JqZWN0KToKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBidWlsZCwKKyAgICAgICAgICAgICAgICAg
YnVpbGRlcl9uYW1lLAorICAgICAgICAgICAgICAgICBleGNsdWRlX2tub3duX2ZhaWx1cmVzLAor
ICAgICAgICAgICAgICAgICB0ZXN0X3JlZ2V4LAorICAgICAgICAgICAgICAgICBvdXRwdXRfZGly
LAorICAgICAgICAgICAgICAgICBtYXhfZmFpbHVyZXMsCisgICAgICAgICAgICAgICAgIHZlcmJv
c2UsCisgICAgICAgICAgICAgICAgIGJ1aWxkZXJfb3V0cHV0X2xvZ19maWxlPU5vbmUsCisgICAg
ICAgICAgICAgICAgIGFyY2hpdmVfc3RlcF9sb2dfZmlsZT1Ob25lLAorICAgICAgICAgICAgICAg
ICB6aXBfZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9uc19maWxl
PU5vbmUpOgorICAgICAgICBzZWxmLmJ1aWxkID0gYnVpbGQKKyAgICAgICAgIyBUT0RPKGd3aWxz
b24pOiBhZGQgZnVsbCB1cmwtZW5jb2RpbmcgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICAgICAgc2Vs
Zi5zZXRfcGxhdGZvcm0oYnVpbGRlcl9uYW1lKQorICAgICAgICBzZWxmLmV4Y2x1ZGVfa25vd25f
ZmFpbHVyZXMgPSBleGNsdWRlX2tub3duX2ZhaWx1cmVzCisgICAgICAgIHNlbGYuZXhjbHVkZV93
b250Zml4ID0gVHJ1ZQorICAgICAgICBzZWxmLnRlc3RfcmVnZXggPSB0ZXN0X3JlZ2V4CisgICAg
ICAgIHNlbGYub3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5tYXhfZmFpbHVy
ZXMgPSBtYXhfZmFpbHVyZXMKKyAgICAgICAgc2VsZi52ZXJib3NlID0gdmVyYm9zZQorICAgICAg
ICBzZWxmLmZ5aV9idWlsZGVyID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZmxha3lfdGVzdF9jYWNo
ZSA9IHt9CisgICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zX2NhY2hlID0gTm9uZQorICAg
ICAgICAjIElmIHRydWUsIHNjcmFwaW5nIHdpbGwgc3RpbGwgaGFwcGVuIGJ1dCBubyBmaWxlcyB3
aWxsIGJlIGRvd25sb2FkZWQuCisgICAgICAgIHNlbGYuZG9udF9kb3dubG9hZCA9IEZhbHNlCisg
ICAgICAgICMgTG9jYWwgY2FjaGVzIG9mIGxvZyBmaWxlcy4gIElmIHNldCwgdGhlIGZpbmRlciB3
aWxsIHVzZSB0aGVzZSBmaWxlcworICAgICAgICAjIHJhdGhlciB0aGFuIHNjcmFwaW5nIHRoZW0g
ZnJvbSB0aGUgYnVpbGRib3QuCisgICAgICAgIHNlbGYuYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGUg
PSBidWlsZGVyX291dHB1dF9sb2dfZmlsZQorICAgICAgICBzZWxmLmFyY2hpdmVfc3RlcF9sb2df
ZmlsZSA9IGFyY2hpdmVfc3RlcF9sb2dfZmlsZQorICAgICAgICBzZWxmLnppcF9maWxlID0gemlw
X2ZpbGUKKyAgICAgICAgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19maWxlID0gdGVzdF9leHBlY3Rh
dGlvbnNfZmlsZQorICAgICAgICBzZWxmLmRlbGV0ZV96aXBfZmlsZSA9IFRydWUKKyAgICAgICAg
IyBEZXRlcm1pbmVzIGlmIHRoZSBzY3JpcHQgc2hvdWxkIHNjcmFwZSB0aGUgYmFzZWxpbmVzIGZy
b20gd2Via2l0Lm9yZworICAgICAgICAjIGFuZCBjaHJvbWl1bS5vcmcsIG9yIGlmIGl0IHNob3Vs
ZCB1c2UgbG9jYWwgYmFzZWxpbmVzIGluIHRoZSBjdXJyZW50CisgICAgICAgICMgY2hlY2tvdXQu
CisgICAgICAgIHNlbGYudXNlX2xvY2FsX2Jhc2VsaW5lcyA9IEZhbHNlCisKKyAgICBkZWYgc2V0
X3BsYXRmb3JtKHNlbGYsIHBsYXRmb3JtKToKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRm
b3JtLnJlcGxhY2UoIiAiLCAiJTIwIikKKworICAgICMgVE9ETyhnd2lsc29uKTogQ2hhbmdlIHRo
aXMgdG8gZ2V0IHRoZSBsYXN0IGJ1aWxkIHRoYXQgZmluaXNoZWQKKyAgICAjIHN1Y2Nlc3NmdWxs
eS4KKworICAgIGRlZiBnZXRfbGFzdF9idWlsZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAg
IFJldHVybnMgdGhlIGxhc3QgYnVpbGQgbnVtYmVyIGZvciB0aGlzIHBsYXRmb3JtLgorICAgICAg
ICBJZiB1c2VfZnlpIGlzIHRydWUsIHRoaXMgb25seSBsb29rcyBhdCB0aGUgZnlpIGJ1aWxkZXIu
CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZXh0cmFjdF9z
aW5nbGVfcmVnZXhfYXRfdXJsKGdldF9idWlsZGVyX3VybChzZWxmLnBsYXRmb3JtLAorICAgICAg
ICAgICAgICAgIHNlbGYuZnlpX2J1aWxkZXIpLCBMQVNUX0JVSUxEX1JFR0VYKQorICAgICAgICBl
eGNlcHQgdXJsbGliMi5IVFRQRXJyb3I6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5meWlfYnVp
bGRlcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZ5aV9idWlsZGVyID0gVHJ1ZQorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLmdldF9sYXN0X2J1aWxkKCkKKworICAgIGRlZiBnZXRfZmFpbHVy
ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkOgorICAgICAgICAgICAgc2VsZi5i
dWlsZCA9IHNlbGYuZ2V0X2xhc3RfYnVpbGQoKQorICAgICAgICBpZiBzZWxmLnZlcmJvc2U6Cisg
ICAgICAgICAgICBwcmludCAiVXNpbmcgYnVpbGQgbnVtYmVyICVzIiAlIHNlbGYuYnVpbGQKKwor
ICAgICAgICBpZiBzZWxmLnVzZV9sb2NhbF9iYXNlbGluZXM6CisgICAgICAgICAgICBzZWxmLl9i
dWlsZF9iYXNlbGluZV9pbmRleGVzKCkKKyAgICAgICAgc2VsZi5mYWlsdXJlcyA9IHNlbGYuX2dl
dF9mYWlsdXJlc19mcm9tX2J1aWxkZXIoKQorICAgICAgICBpZiAoc2VsZi5mYWlsdXJlcyBhbmQK
KyAgICAgICAgICAgIChzZWxmLl9kb3dubG9hZF9yZXN1bHRfcmVzb3VyY2VzKCkgb3Igc2VsZi5k
b250X2Rvd25sb2FkKSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mYWlsdXJlcworICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9nZXRfZmFpbHVyZXNfZnJvbV9idWlsZGVyKHNlbGYp
OgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVyZXMgZm9yIHRo
ZSBnaXZlbiBidWlsZCBhbmQgcGxhdGZvcm0gYnkgc2NyYXBpbmcKKyAgICAgICAgdGhlIGJ1aWxk
Ym90cyBhbmQgcGFyc2luZyB0aGVpciByZXN1bHRzLgorICAgICAgICBUaGUgbGlzdCByZXR1cm5l
ZCBjb250YWlucyBGYWlsdXJlIGNsYXNzIG9iamVjdHMuCisgICAgICAgICIiIgorICAgICAgICBp
ZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiRmV0Y2hpbmcgZmFpbHVyZXMgZnJv
bSBidWlsZGJvdC4uLiIKKworICAgICAgICBjb250ZW50ID0gc2VsZi5fc2NyYXBlX2J1aWxkZXJf
b3V0cHV0KCkKKyAgICAgICAgaWYgbm90IGNvbnRlbnQ6CisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICBtYXRjaGVzID0gc2VsZi5fZmluZF9tYXRjaGVzX2luX2J1aWxkZXJfb3V0cHV0
KGNvbnRlbnQpCisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQg
IiVzIGZhaWx1cmVzIGZvdW5kLiIgJSBsZW4obWF0Y2hlcykKKworICAgICAgICBmYWlsdXJlcyA9
IFtdCisgICAgICAgIG1hdGNoZXMuc29ydCgpCisgICAgICAgIGZvciBtYXRjaCBpbiBtYXRjaGVz
OgorICAgICAgICAgICAgaWYgKGxlbihmYWlsdXJlcykgPCBzZWxmLm1heF9mYWlsdXJlcyBhbmQK
KyAgICAgICAgICAgICAgICAobm90IHNlbGYudGVzdF9yZWdleCBvciBtYXRjaFswXS5maW5kKHNl
bGYudGVzdF9yZWdleCkgPiAtMSkpOgorICAgICAgICAgICAgICAgIGZhaWx1cmUgPSBzZWxmLl9j
cmVhdGVfZmFpbHVyZV9mcm9tX21hdGNoKG1hdGNoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYu
dmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgZmFpbHVyZS50ZXN0X3BhdGgKKyAg
ICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoZmFpbHVyZSkKKworICAgICAgICByZXR1cm4g
ZmFpbHVyZXMKKworICAgIGRlZiBfc2NyYXBlX2J1aWxkZXJfb3V0cHV0KHNlbGYpOgorICAgICAg
ICAjIElmIHRoZSBidWlsZCBsb2cgZmlsZSBpcyBzcGVjaWZpZWQsIHVzZSB0aGF0IGluc3RlYWQg
b2Ygc2NyYXBpbmcuCisgICAgICAgIGlmIHNlbGYuYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGU6Cisg
ICAgICAgICAgICBsb2cgPSBvcGVuKHNlbGYuYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGUsICdyJykK
KyAgICAgICAgICAgIHJldHVybiAiIi5qb2luKGxvZy5yZWFkbGluZXMoKSkKKworICAgICAgICAj
IFNjcmFwZSB0aGUgZmFpbHVyZXMgZnJvbSB0aGUgYnVpbGRib3QgZm9yIHRoaXMgcmV2aXNpb24u
CisgICAgICAgIHRyeToKKworICAgICAgICAgICAgcmV0dXJuIHNjcmFwZV91cmwoZ2V0X3Jlc3Vs
dHNfdXJsKHNlbGYuYnVpbGQsIHNlbGYucGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5meWlfYnVpbGRlcikpCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgICMgSWYgd2UgaGl0IGEgcHJvYmxlbSwgYW5kIHdlJ3JlIG5vdCBvbiB0
aGUgRllJIGJ1aWxkZXIsIHRyeSBpdAorICAgICAgICAgICAgIyBhZ2FpbiBvbiB0aGUgRllJIGJ1
aWxkZXIuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5meWlfYnVpbGRlcjoKKyAgICAgICAgICAg
ICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICgiQ291bGQg
bm90IGZpbmQgYnVpbGRlciBvbiB3YXRlcmZhbGwsIHRyeWluZyBmeWkgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAid2F0ZXJmYWxsLi4uIikKKyAgICAgICAgICAgICAgICBzZWxmLmZ5aV9i
dWlsZGVyID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zY3JhcGVfYnVpbGRl
cl9vdXRwdXQoKQorICAgICAgICAgICAgcHJpbnQgIkkgY291bGQgbm90IGZpbmQgdGhhdCBidWls
ZGVyLCBvciBidWlsZCBkaWQgbm90IGNvbXBpbGUuIgorICAgICAgICAgICAgcHJpbnQgIkNoZWNr
IHRoYXQgdGhlIGJ1aWxkZXIgbmFtZSBtYXRjaGVzIGV4YWN0bHkgIgorICAgICAgICAgICAgcHJp
bnQgIihjYXNlIHNlbnNpdGl2ZSksIGFuZCB3cmFwIHF1b3RlcyBhcm91bmQgYnVpbGRlciBuYW1l
cyAiCisgICAgICAgICAgICBwcmludCAidGhhdCBoYXZlIHNwYWNlcy4iCisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgIyBUT0RPKGd3aWxzb24pOiBUaGUgdHlwZSBvZiBmYWlsdXJlIGlz
IG5vdyBvdXRwdXQgaW4gdGhlIHN1bW1hcnksIHNvIG5vCisgICAgIyBtYXRjaGluZyBiZXR3ZWVu
IHRoZSBzdW1tYXJ5IGFuZCB0aGUgZWFybGllciBvdXRwdXQgaXMgbmVjZXNzYXJ5LgorICAgICMg
Q2hhbmdlIHRoaXMgbWV0aG9kIGFuZCBvdGhlcnMgdG8gZGVyaXZlIGZhaWx1cmUgdHlwZXMgZnJv
bSBzdW1tYXJ5IG9ubHkuCisKKyAgICBkZWYgX2ZpbmRfbWF0Y2hlc19pbl9idWlsZGVyX291dHB1
dChzZWxmLCBvdXRwdXQpOgorICAgICAgICBtYXRjaGVzID0gW10KKyAgICAgICAgbWF0Y2hlcyA9
IHJlLmZpbmRhbGwoRkFJTEVEX1JFR0VYLCBvdXRwdXQsIHJlLk1VTFRJTElORSkKKyAgICAgICAg
aWYgc2VsZi5leGNsdWRlX2tub3duX2ZhaWx1cmVzOgorICAgICAgICAgICAgc3VtbWFyeSA9IHJl
LnNlYXJjaChTVU1NQVJZX1JFR0VYLCBvdXRwdXQsIHJlLkRPVEFMTCkKKyAgICAgICAgICAgIHJl
Z3Jlc3Npb25zID0gW10KKyAgICAgICAgICAgIGlmIHN1bW1hcnk6CisgICAgICAgICAgICAgICAg
cmVncmVzc2lvbnMgPSBzZWxmLl9maW5kX3JlZ3Jlc3Npb25zX2luX3N1bW1hcnkoCisgICAgICAg
ICAgICAgICAgICAgIHN1bW1hcnkuZ3JvdXAoMSkpCisgICAgICAgICAgICBtYXRjaGVzID0gc2Vs
Zi5fbWF0Y2hfcmVncmVzc2lvbnNfdG9fZmFpbHVyZXMocmVncmVzc2lvbnMsIG1hdGNoZXMpCisg
ICAgICAgIHJldHVybiBtYXRjaGVzCisKKyAgICBkZWYgX2NyZWF0ZV9mYWlsdXJlX2Zyb21fbWF0
Y2goc2VsZiwgbWF0Y2gpOgorICAgICAgICBmYWlsdXJlID0gRmFpbHVyZSgpCisgICAgICAgIGZh
aWx1cmUudGV4dF9kaWZmX21pc21hdGNoID0gbWF0Y2hbMV0gIT0gJycKKyAgICAgICAgZmFpbHVy
ZS5pbWFnZV9taXNtYXRjaCA9IG1hdGNoWzJdICE9ICcnCisgICAgICAgIGZhaWx1cmUuY3Jhc2hl
ZCA9IG1hdGNoWzRdICE9ICcnCisgICAgICAgIGZhaWx1cmUudGltZW91dCA9IG1hdGNoWzNdICE9
ICcnCisgICAgICAgIGZhaWx1cmUudGVzdF9wYXRoID0gbWF0Y2hbMF0KKyAgICAgICAgZmFpbHVy
ZS5wbGF0Zm9ybSA9IHNlbGYucGxhdGZvcm0KKyAgICAgICAgcmV0dXJuIGZhaWx1cmUKKworICAg
IGRlZiBfZmluZF9yZWdyZXNzaW9uc19pbl9zdW1tYXJ5KHNlbGYsIHN1bW1hcnkpOgorICAgICAg
ICByZWdyZXNzaW9ucyA9IFtdCisgICAgICAgIGlmIG5vdCBzdW1tYXJ5IG9yIG5vdCBsZW4oc3Vt
bWFyeSk6CisgICAgICAgICAgICByZXR1cm4gcmVncmVzc2lvbnMKKyAgICAgICAgbWF0Y2hlcyA9
IHJlLmZpbmRhbGwoU1VNTUFSWV9SRUdSRVNTSU9OUywgc3VtbWFyeSwgcmUuRE9UQUxMKQorICAg
ICAgICBmb3IgbWF0Y2ggaW4gbWF0Y2hlczoKKyAgICAgICAgICAgIGxpbmVzID0gcmUuZmluZGFs
bChGQUlMRURfVU5FWFBFQ1RFRF9SRUdFWCwgbWF0Y2gsIHJlLkRPVEFMTCkKKyAgICAgICAgICAg
IGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIGNsaXBwZWQgPSBsaW5lLnN0cmlw
KCkKKyAgICAgICAgICAgICAgICBpZiBjbGlwcGVkLmZpbmQoIj0iKSA+IC0xOgorICAgICAgICAg
ICAgICAgICAgICBjbGlwcGVkID0gY2xpcHBlZFs6Y2xpcHBlZC5maW5kKCI9IikgLSAxXQorICAg
ICAgICAgICAgICAgIHJlZ3Jlc3Npb25zLmFwcGVuZChjbGlwcGVkKQorICAgICAgICByZXR1cm4g
cmVncmVzc2lvbnMKKworICAgIGRlZiBfbWF0Y2hfcmVncmVzc2lvbnNfdG9fZmFpbHVyZXMoc2Vs
ZiwgcmVncmVzc2lvbnMsIGZhaWx1cmVzKToKKyAgICAgICAgbWF0Y2hlcyA9IFtdCisgICAgICAg
IGZvciByZWdyZXNzaW9uIGluIHJlZ3Jlc3Npb25zOgorICAgICAgICAgICAgZm9yIGZhaWx1cmUg
aW4gZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgaWYgZmFpbHVyZVswXS5maW5kKHJlZ3Jlc3Np
b24pID4gLTE6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGZhaWx1cmUpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBtYXRjaGVzCisKKyAgICAj
IFRPRE8oZ3dpbHNvbik6IGFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBjb25mbGljdGluZyBidWls
ZCBudW1iZXJzIGJ5CisgICAgIyByZW5hbWluZyB0aGUgemlwIGZpbGUgYW5kIG5hbWluZyB0aGUg
ZGlyZWN0b3J5IGFwcHJvcHJpYXRlbHkuCisKKyAgICBkZWYgX2Rvd25sb2FkX3Jlc3VsdF9yZXNv
dXJjZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBGaW5kcyBhbmQgZG93bmxvYWRzL2V4
dHJhY3RzIGFsbCBvZiB0aGUgdGVzdCByZXN1bHRzIChwaXhlbC90ZXh0CisgICAgICAgIG91dHB1
dCkgZm9yIGFsbCBvZiB0aGUgZ2l2ZW4gZmFpbHVyZXMuCisgICAgICAgICIiIgorCisgICAgICAg
IHRhcmdldF96aXAgPSAiJXMvbGF5b3V0LXRlc3QtcmVzdWx0cy0lcy56aXAiICUgKHNlbGYub3V0
cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5idWlsZCkKKyAgICAgICAgaWYgc2VsZi56aXBfZmlsZToKKyAgICAgICAg
ICAgIGZpbGVuYW1lID0gc2VsZi56aXBfZmlsZQorICAgICAgICAgICAgc2VsZi5kZWxldGVfemlw
X2ZpbGUgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV2aXNpb24sIGJ1aWxk
X25hbWUgPSBcCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3JldmlzaW9uX2FuZF9idWlsZF9m
cm9tX2FyY2hpdmVfc3RlcCgpCisgICAgICAgICAgICB6aXBfdXJsID0gZ2V0X3ppcF9maWxlX3Vy
bChyZXZpc2lvbiwgYnVpbGRfbmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAg
ICAgICAgICAgICAgICBwcmludCAiRG93bmxvYWRpbmcgemlwIGZpbGUgZnJvbSAlcyB0byAlcyIg
JSAoemlwX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGFyZ2V0X3ppcCkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc2Vs
Zi5fZG93bmxvYWRfZmlsZSh6aXBfdXJsLCB0YXJnZXRfemlwLCAiYiIpCisgICAgICAgICAgICBp
ZiBub3QgZmlsZW5hbWU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAg
ICAgICAgICAgICAgICBwcmludCAoIkNvdWxkIG5vdCBkb3dubG9hZCB6aXAgZmlsZSBmcm9tICVz
LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9lcyBpdCBleGlzdD8iICUgemlwX3Vy
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB6aXBmaWxlLmlz
X3ppcGZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgemlwID0gemlwZmlsZS5aaXBGaWxlKGZp
bGVuYW1lKQorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHBy
aW50ICdFeHRyYWN0aW5nIGZpbGVzLi4uJworICAgICAgICAgICAgZGlyZWN0b3J5ID0gIiVzL2xh
eW91dC10ZXN0LXJlc3VsdHMtJXMiICUgKHNlbGYub3V0cHV0X2RpciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkKQorICAg
ICAgICAgICAgY3JlYXRlX2RpcmVjdG9yeShkaXJlY3RvcnkpCisgICAgICAgICAgICBzZWxmLl91
bnppcF96aXBmaWxlKHppcCwgVEVNUF9aSVBfRElSKQorCisgICAgICAgICAgICBmb3IgZmFpbHVy
ZSBpbiBzZWxmLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIGZhaWx1cmUudGVzdF9leHBlY3Rh
dGlvbnNfbGluZSA9ICgKKyAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF90ZXN0X2V4cGVjdGF0
aW9uc19saW5lKGZhaWx1cmUudGVzdF9wYXRoKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmV4
Y2x1ZGVfd29udGZpeCBhbmQgZmFpbHVyZS5pc193b250X2ZpeCgpOgorICAgICAgICAgICAgICAg
ICAgICBzZWxmLmZhaWx1cmVzLnJlbW92ZShmYWlsdXJlKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgICAgIGlmIGZhaWx1cmUudGV4dF9kaWZmX21pc21hdGNoOgor
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3B1bGF0ZV90ZXh0X2ZhaWx1cmUoZmFpbHVyZSwg
ZGlyZWN0b3J5LCB6aXApCisgICAgICAgICAgICAgICAgaWYgZmFpbHVyZS5pbWFnZV9taXNtYXRj
aDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVfaW1hZ2VfZmFpbHVyZShmYWls
dXJlLCBkaXJlY3RvcnksIHppcCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi51c2VfbG9j
YWxfYmFzZWxpbmVzOgorICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLnRlc3RfYWdlID0gc2Vs
Zi5fZ2V0X2ZpbGVfYWdlKAorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS5nZXRfdGVz
dF9ob21lKCkpCisgICAgICAgICAgICAgICAgZmFpbHVyZS5mbGFraW5lc3MgPSBzZWxmLl9nZXRf
Zmxha2luZXNzKGZhaWx1cmUudGVzdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtKQorICAgICAgICAgICAg
emlwLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAg
ICBwcmludCAiRmlsZXMgZXh0cmFjdGVkLiIKKyAgICAgICAgICAgIGlmIHNlbGYuZGVsZXRlX3pp
cF9maWxlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQgIkNsZWFuaW5nIHVwIHppcCBmaWxlLi4uIgorICAgICAgICAgICAgICAgIHBh
dGhfdXRpbHMucmVtb3ZlX2RpcmVjdG9yeShURU1QX1pJUF9ESVIpCisgICAgICAgICAgICAgICAg
b3MucmVtb3ZlKGZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAo
IkRvd25sb2FkZWQgZmlsZSAnJXMnIGRvZXNuJ3QgbG9vayBsaWtlIGEgemlwIGZpbGUuIgorICAg
ICAgICAgICAgICAgICAgICAgICAlIGZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisKKyAgICBkZWYgX3VuemlwX3ppcGZpbGUoc2VsZiwgemlwLCBiYXNlX2Rpcik6CisgICAgICAg
IGZvciBpLCBuYW1lIGluIGVudW1lcmF0ZSh6aXAubmFtZWxpc3QoKSk6CisgICAgICAgICAgICBp
ZiBub3QgbmFtZS5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgIGV4dHJhY3RlZF9maWxl
X3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXIsIG5hbWUpCisgICAgICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgICAgICAocGF0aCwgZmlsZW5hbWUpID0gb3MucGF0aC5zcGxpdChl
eHRyYWN0ZWRfZmlsZV9wYXRoKQorICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhwYXRo
LCAwNzc3KQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFz
cworICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcGVuKGV4dHJhY3RlZF9maWxlX3BhdGgsICd3
YicpCisgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSh6aXAucmVhZChuYW1lKSkKKyAgICAg
ICAgICAgICAgICBvdXRmaWxlLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBvdXRmaWxlLmNsb3Nl
KCkKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChleHRyYWN0ZWRfZmlsZV9wYXRoLCAwNzc3KQor
CisgICAgZGVmIF9nZXRfcmV2aXNpb25fYW5kX2J1aWxkX2Zyb21fYXJjaGl2ZV9zdGVwKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLmFyY2hpdmVfc3RlcF9sb2dfZmlsZToKKyAgICAgICAgICAgIGxv
ZyA9IG9wZW4oc2VsZi5hcmNoaXZlX3N0ZXBfbG9nX2ZpbGUsICdyJykKKyAgICAgICAgICAgIGNv
bnRlbnQgPSAiIi5qb2luKGxvZy5yZWFkbGluZXMoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGNvbnRlbnQgPSBzY3JhcGVfdXJsKGdldF9hcmNoaXZlX3VybChzZWxmLmJ1aWxkLCBzZWxm
LnBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuZnlpX2J1aWxkZXIpKQorICAgICAgICByZXZpc2lvbiA9IGV4dHJhY3RfZmlyc3Rf
dmFsdWUoY29udGVudCwgQVJDSElWRV9VUkxfUkVHRVgpCisgICAgICAgIGJ1aWxkX25hbWUgPSBl
eHRyYWN0X2ZpcnN0X3ZhbHVlKGNvbnRlbnQsIEJVSUxEX05BTUVfUkVHRVgpCisgICAgICAgIHJl
dHVybiAocmV2aXNpb24sIGJ1aWxkX25hbWUpCisKKyAgICBkZWYgX3BvcHVsYXRlX3RleHRfZmFp
bHVyZShzZWxmLCBmYWlsdXJlLCBkaXJlY3RvcnksIHppcCk6CisgICAgICAgIGJhc2VsaW5lID0g
c2VsZi5fZ2V0X2Jhc2VsaW5lKGZhaWx1cmUuZ2V0X2V4cGVjdGVkX3RleHRfZmlsZW5hbWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5KQorICAgICAg
ICBmYWlsdXJlLnRleHRfYmFzZWxpbmVfbG9jYWwgPSBiYXNlbGluZS5sb2NhbF9maWxlCisgICAg
ICAgIGZhaWx1cmUudGV4dF9iYXNlbGluZV91cmwgPSBiYXNlbGluZS5iYXNlbGluZV91cmwKKyAg
ICAgICAgZmFpbHVyZS50ZXh0X2Jhc2VsaW5lX2FnZSA9ICgKKyAgICAgICAgICAgIHNlbGYuX2dl
dF9maWxlX2FnZShmYWlsdXJlLmdldF90ZXh0X2Jhc2VsaW5lX3RyYWNfaG9tZSgpKSkKKyAgICAg
ICAgZmFpbHVyZS50ZXh0X2FjdHVhbF9sb2NhbCA9ICIlcy8lcyIgJSAoCisgICAgICAgICAgICBk
aXJlY3RvcnksIGZhaWx1cmUuZ2V0X2FjdHVhbF90ZXh0X2ZpbGVuYW1lKCkpCisgICAgICAgIGlm
IChiYXNlbGluZSBhbmQgYmFzZWxpbmUuaXNfdmFsaWQoKSBhbmQgbm90IHNlbGYuZG9udF9kb3du
bG9hZCk6CisgICAgICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfZnJvbV96aXBfZGlyKAorICAgICAg
ICAgICAgICAgIGZhaWx1cmUuZ2V0X3RleHRfcmVzdWx0X2xvY2F0aW9uX2luX3ppcF9maWxlKCks
CisgICAgICAgICAgICAgICAgZmFpbHVyZS50ZXh0X2FjdHVhbF9sb2NhbCkKKyAgICAgICAgICAg
IGdlbmVyYXRlX3RleHRfZGlmZihmYWlsdXJlLnRleHRfYmFzZWxpbmVfbG9jYWwsCisgICAgICAg
ICAgICAgICAgZmFpbHVyZS50ZXh0X2FjdHVhbF9sb2NhbCwKKyAgICAgICAgICAgICAgICBkaXJl
Y3RvcnkgKyAiLyIgKyBmYWlsdXJlLmdldF90ZXh0X2RpZmZfZmlsZW5hbWUoKSkKKworICAgIGRl
ZiBfcG9wdWxhdGVfaW1hZ2VfZmFpbHVyZShzZWxmLCBmYWlsdXJlLCBkaXJlY3RvcnksIHppcCk6
CisgICAgICAgIGJhc2VsaW5lID0gc2VsZi5fZ2V0X2Jhc2VsaW5lKGZhaWx1cmUuZ2V0X2V4cGVj
dGVkX2ltYWdlX2ZpbGVuYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpcmVjdG9yeSkKKyAgICAgICAgZmFpbHVyZS5pbWFnZV9iYXNlbGluZV9sb2NhbCA9IGJh
c2VsaW5lLmxvY2FsX2ZpbGUKKyAgICAgICAgZmFpbHVyZS5pbWFnZV9iYXNlbGluZV91cmwgPSBi
YXNlbGluZS5iYXNlbGluZV91cmwKKyAgICAgICAgaWYgYmFzZWxpbmUgYW5kIGJhc2VsaW5lLmlz
X3ZhbGlkKCk6CisgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX2FnZSA9ICgKKyAg
ICAgICAgICAgICAgICBzZWxmLl9nZXRfZmlsZV9hZ2UoZmFpbHVyZS5nZXRfaW1hZ2VfYmFzZWxp
bmVfdHJhY19ob21lKCkpKQorICAgICAgICAgICAgZmFpbHVyZS5pbWFnZV9hY3R1YWxfbG9jYWwg
PSAiJXMvJXMiICUgKGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFpbHVyZS5nZXRfYWN0dWFsX2ltYWdlX2ZpbGVuYW1lKCkpCisgICAgICAgICAg
ICBzZWxmLl9jb3B5X2ZpbGVfZnJvbV96aXBfZGlyKAorICAgICAgICAgICAgICAgIGZhaWx1cmUu
Z2V0X2ltYWdlX3Jlc3VsdF9sb2NhdGlvbl9pbl96aXBfZmlsZSgpLAorICAgICAgICAgICAgICAg
IGZhaWx1cmUuaW1hZ2VfYWN0dWFsX2xvY2FsKQorICAgICAgICAgICAgaWYgKG5vdCBnZW5lcmF0
ZV9wbmdfZGlmZihmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX2xvY2FsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2FjdHVhbF9sb2NhbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLyVzIiAlIChkaXJlY3RvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0X2ltYWdlX2Rp
ZmZfZmlsZW5hbWUoKSkpCisgICAgICAgICAgICAgICAgYW5kIHNlbGYudmVyYm9zZSk6CisgICAg
ICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBnZW5lcmF0ZSBQTkcgZGlmZiBmb3IgJXMiICUg
ZmFpbHVyZS50ZXN0X3BhdGgKKyAgICAgICAgICAgIGlmIChmYWlsdXJlLmlzX2ltYWdlX2Jhc2Vs
aW5lX2luX2Nocm9taXVtKCkgb3IKKyAgICAgICAgICAgICAgICBzZWxmLnVzZV9sb2NhbF9iYXNl
bGluZXMpOgorICAgICAgICAgICAgICAgIHVwc3RyZWFtX2Jhc2VsaW5lID0gKHNlbGYuX2dldF91
cHN0cmVhbV9iYXNlbGluZSgKKyAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS5nZXRfZXhwZWN0
ZWRfaW1hZ2VfZmlsZW5hbWUoKSwgZGlyZWN0b3J5KSkKKyAgICAgICAgICAgICAgICBmYWlsdXJl
LmltYWdlX2Jhc2VsaW5lX3Vwc3RyZWFtX2xvY2FsID0gXAorICAgICAgICAgICAgICAgICAgICB1
cHN0cmVhbV9iYXNlbGluZS5sb2NhbF9maWxlCisgICAgICAgICAgICAgICAgZmFpbHVyZS5pbWFn
ZV9iYXNlbGluZV91cHN0cmVhbV91cmwgPSBcCisgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFt
X2Jhc2VsaW5lLmJhc2VsaW5lX3VybAorCisgICAgZGVmIF9nZXRfYmFzZWxpbmUoc2VsZiwgZmls
ZW5hbWUsIGRpcmVjdG9yeSwgdXBzdHJlYW1fb25seT1GYWxzZSk6CisgICAgICAgICIiIiBTZWFy
Y2ggYW5kIGRvd25sb2FkIHRoZSBiYXNlbGluZSBmb3IgdGhlIGdpdmVuIHRlc3QgKHB1dCBpdCBp
biB0aGUKKyAgICAgICAgZGlyZWN0b3J5IGdpdmVuLikiIiIKKworICAgICAgICBsb2NhbF9maWxl
bmFtZSA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksIGZpbGVuYW1lKQorICAgICAgICBsb2NhbF9k
aXJlY3RvcnkgPSBsb2NhbF9maWxlbmFtZVs6bG9jYWxfZmlsZW5hbWUucmZpbmQoIi8iKV0KKyAg
ICAgICAgaWYgdXBzdHJlYW1fb25seToKKyAgICAgICAgICAgIGxhc3RfaW5kZXggPSBsb2NhbF9m
aWxlbmFtZS5yZmluZCgiLiIpCisgICAgICAgICAgICBpZiBsYXN0X2luZGV4ID4gLTE6CisgICAg
ICAgICAgICAgICAgbG9jYWxfZmlsZW5hbWUgPSAobG9jYWxfZmlsZW5hbWVbOmxhc3RfaW5kZXhd
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUFNUUkVBTV9JTUFHRV9GSUxF
X0VORElORykKKworICAgICAgICBkb3dubG9hZF9maWxlX21vZGlmaWVycyA9ICIiCisgICAgICAg
IGlmIGxvY2FsX2ZpbGVuYW1lLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBkb3dubG9h
ZF9maWxlX21vZGlmaWVycyA9ICJiIiAgIyBiaW5hcnkgZmlsZQorCisgICAgICAgIGlmIG5vdCBz
ZWxmLmRvbnRfZG93bmxvYWQ6CisgICAgICAgICAgICBjcmVhdGVfZGlyZWN0b3J5KGxvY2FsX2Rp
cmVjdG9yeSkKKworICAgICAgICBsb2NhbF9iYXNlbGluZSA9IE5vbmUKKyAgICAgICAgdXJsX29m
X2Jhc2VsaW5lID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYudXNlX2xvY2FsX2Jhc2VsaW5lczoK
KyAgICAgICAgICAgIHRlc3RfcGF0aF9rZXkgPSBzZWxmLl9ub3JtYWxpemVfYmFzZWxpbmVfaWRl
bnRpZmllcihmaWxlbmFtZSkKKyAgICAgICAgICAgIGRpY3QgPSBzZWxmLmJhc2VsaW5lX2RpY3QK
KyAgICAgICAgICAgIGlmIHVwc3RyZWFtX29ubHk6CisgICAgICAgICAgICAgICAgZGljdCA9IHNl
bGYud2Via2l0X2Jhc2VsaW5lX2RpY3QKKyAgICAgICAgICAgIGlmIHRlc3RfcGF0aF9rZXkgaW4g
ZGljdDoKKyAgICAgICAgICAgICAgICBsb2NhbF9iYXNlbGluZSA9IGRpY3RbdGVzdF9wYXRoX2tl
eV0KKyAgICAgICAgICAgICAgICB1cmxfb2ZfYmFzZWxpbmUgPSBsb2NhbF9iYXNlbGluZQorICAg
ICAgICAgICAgICAgIHNodXRpbC5jb3B5KGxvY2FsX2Jhc2VsaW5lLCBsb2NhbF9kaXJlY3Rvcnkp
CisgICAgICAgICAgICBlbGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAo
IkJhc2VsaW5lICVzIGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleC4iICUKKyAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9wYXRoX2tleSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlu
ZGV4ID0gMAorICAgICAgICAgICAgcG9zc2libGVfZmlsZXMgPSBzZWxmLl9nZXRfcG9zc2libGVf
ZmlsZV9saXN0KGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtX29ubHkpCisgICAgICAgICAgICAjIERvd25s
b2FkIHRoZSBiYXNlbGluZXMgZnJvbSB0aGUgd2Via2l0Lm9yZyBzaXRlLgorICAgICAgICAgICAg
d2hpbGUgbG9jYWxfYmFzZWxpbmUgPT0gTm9uZSBhbmQgaW5kZXggPCBsZW4ocG9zc2libGVfZmls
ZXMpOgorICAgICAgICAgICAgICAgIGxvY2FsX2Jhc2VsaW5lID0gc2VsZi5fZG93bmxvYWRfZmls
ZShwb3NzaWJsZV9maWxlc1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRfZmlsZV9tb2RpZmllcnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1
ZSkKKyAgICAgICAgICAgICAgICBpZiBsb2NhbF9iYXNlbGluZToKKyAgICAgICAgICAgICAgICAg
ICAgdXJsX29mX2Jhc2VsaW5lID0gcG9zc2libGVfZmlsZXNbaW5kZXhdCisgICAgICAgICAgICAg
ICAgaW5kZXggKz0gMQorCisgICAgICAgIGlmIG5vdCBsb2NhbF9iYXNlbGluZToKKyAgICAgICAg
ICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiQ291bGQgbm90IGZp
bmQgYW55IGJhc2VsaW5lIGZvciAlcyIgJSBmaWxlbmFtZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgbG9jYWxfYmFzZWxpbmUgPSBvcy5wYXRoLm5vcm1wYXRoKGxvY2FsX2Jhc2VsaW5lKQor
ICAgICAgICBpZiBsb2NhbF9iYXNlbGluZSBhbmQgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAg
cHJpbnQgIkZvdW5kIGJhc2VsaW5lOiAlcyIgJSB1cmxfb2ZfYmFzZWxpbmUKKworICAgICAgICBy
ZXR1cm4gQmFzZWxpbmVDYW5kaWRhdGUobG9jYWxfYmFzZWxpbmUsIHVybF9vZl9iYXNlbGluZSkK
KworICAgIGRlZiBfYWRkX2Jhc2VsaW5lX3BhdGhzKHNlbGYsIGxpc3QsIGJhc2VfcGF0aCwgZGly
ZWN0b3JpZXMpOgorICAgICAgICBmb3IgZGlyIGluIGRpcmVjdG9yaWVzOgorICAgICAgICAgICAg
bGlzdC5hcHBlbmQob3MucGF0aC5qb2luKGJhc2VfcGF0aCwgZGlyKSkKKworICAgICMgVE9ETyhn
d2lsc29uKTogUmVmYWN0b3IgdGhpcyBtZXRob2QgdG8gdXNlCisgICAgIyBwbGF0Zm9ybV91dGls
c18qLkJhc2VsaW5lU2VhcmNoUGF0aCBpbnN0ZWFkIG9mIGN1c3RvbSBsb2dpYy4KKworICAgIGRl
ZiBfYnVpbGRfYmFzZWxpbmVfaW5kZXhlcyhzZWxmKToKKyAgICAgICAgIiIiIEJ1aWxkcyBhbiBp
bmRleCBvZiBhbGwgdGhlIGtub3duIGxvY2FsIGJhc2VsaW5lcyBpbiBib3RoIGNocm9taXVtCisg
ICAgICAgIGFuZCB3ZWJraXQuIFR3byBiYXNlbGluZXMgYXJlIGNyZWF0ZWQsIGEgd2Via2l0LXNw
ZWNpZmljIChubyBjaHJvbWl1bQorICAgICAgICBiYXNlbGluZSkgZGljdGlvbmFyeSBhbmQgYW4g
b3ZlcmFsbCAoYm90aCkgZGljdGlvbmFyeS4gRWFjaCBvbmUgaGFzIGEKKyAgICAgICAgc3RydWN0
dXJlIGxpa2U6ICIvZmFzdC9kb20vb25lLWV4cGVjdGVkLnR4dCIgLT4KKyAgICAgICAgIkM6XFxw
YXRoXFx0b1xcZmFzdFxcZG9tXFxvbmUtZXhwZWN0ZWQudHh0IgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIkJ1aWxkaW5nIGluZGV4IG9m
IGFsbCBsb2NhbCBiYXNlbGluZXMuLi4iCisKKyAgICAgICAgc2VsZi5iYXNlbGluZV9kaWN0ID0g
e30KKyAgICAgICAgc2VsZi53ZWJraXRfYmFzZWxpbmVfZGljdCA9IHt9CisKKyAgICAgICAgYmFz
ZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmN1cmRpcikKKyAgICAgICAgd2Via2l0X2Jhc2Ug
PSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJraXQnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3Rz
JykKKyAgICAgICAgY2hyb21pdW1fYmFzZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dl
YmtpdCcsICdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2xheW91dF90ZXN0cycpCisgICAgICAgIGNocm9taXVtX2Jhc2VfcGxhdGZvcm0g
PSBvcy5wYXRoLmpvaW4oY2hyb21pdW1fYmFzZSwgUExBVEZPUk0pCisgICAgICAgIHdlYmtpdF9i
YXNlX3BsYXRmb3JtID0gb3MucGF0aC5qb2luKHdlYmtpdF9iYXNlLCBQTEFURk9STSkKKworICAg
ICAgICBwb3NzaWJsZV9jaHJvbWl1bV9maWxlcyA9IFtdCisgICAgICAgIHBvc3NpYmxlX3dlYmtp
dF9maWxlcyA9IFtdCisKKyAgICAgICAgaWYgaXNfbWFjX3BsYXRmb3JtKHNlbGYucGxhdGZvcm0p
OgorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3BhdGhzKHBvc3NpYmxlX2Nocm9taXVt
X2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX2Jh
c2VfcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hST01J
VU1fTUFDX1BMQVRGT1JNX0RJUlMpCisgICAgICAgICAgICBzZWxmLl9hZGRfYmFzZWxpbmVfcGF0
aHMocG9zc2libGVfY2hyb21pdW1fZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0X2Jhc2VfcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX01BQ19QTEFURk9STV9ESVJTKQorICAgICAgICAgICAgc2VsZi5f
YWRkX2Jhc2VsaW5lX3BhdGhzKHBvc3NpYmxlX3dlYmtpdF9maWxlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfYmFzZV9wbGF0Zm9ybSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfTUFDX1BMQVRGT1JNX0RJUlMpCisgICAg
ICAgIGVsaWYgaXNfbGludXhfcGxhdGZvcm0oc2VsZi5wbGF0Zm9ybSk6CisgICAgICAgICAgICBz
ZWxmLl9hZGRfYmFzZWxpbmVfcGF0aHMocG9zc2libGVfY2hyb21pdW1fZmlsZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fYmFzZV9wbGF0Zm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSFJPTUlVTV9MSU5VWF9QTEFURk9S
TV9ESVJTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3Bh
dGhzKHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNocm9taXVtX2Jhc2VfcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0hST01JVU1fV0lOX1BMQVRGT1JNX0RJUlMpCisKKyAgICAgICAgaWYg
bm90IGlzX21hY19wbGF0Zm9ybShzZWxmLnBsYXRmb3JtKToKKyAgICAgICAgICAgIHNlbGYuX2Fk
ZF9iYXNlbGluZV9wYXRocyhwb3NzaWJsZV93ZWJraXRfZmlsZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2Via2l0X2Jhc2VfcGxhdGZvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1dJTl9QTEFURk9STV9ESVJTKQorCisgICAg
ICAgIHBvc3NpYmxlX3dlYmtpdF9maWxlcy5hcHBlbmQod2Via2l0X2Jhc2UpCisKKyAgICAgICAg
c2VsZi5fcG9wdWxhdGVfYmFzZWxpbmVfZGljdChwb3NzaWJsZV93ZWJraXRfZmlsZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53ZWJraXRfYmFzZWxpbmVfZGlj
dCkKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfYmFzZWxpbmVfZGljdChwb3NzaWJsZV9jaHJvbWl1
bV9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJhc2Vs
aW5lX2RpY3QpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi53ZWJraXRfYmFzZWxpbmVfZGljdC5r
ZXlzKCk6CisgICAgICAgICAgICBpZiBub3Qga2V5IGluIHNlbGYuYmFzZWxpbmVfZGljdDoKKyAg
ICAgICAgICAgICAgICBzZWxmLmJhc2VsaW5lX2RpY3Rba2V5XSA9IHNlbGYud2Via2l0X2Jhc2Vs
aW5lX2RpY3Rba2V5XQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3BvcHVsYXRl
X2Jhc2VsaW5lX2RpY3Qoc2VsZiwgZGlyZWN0b3JpZXMsIGRpY3Rpb25hcnkpOgorICAgICAgICBm
b3IgZGlyIGluIGRpcmVjdG9yaWVzOgorICAgICAgICAgICAgb3MucGF0aC53YWxrKGRpciwgc2Vs
Zi5fdmlzaXRfYmFzZWxpbmVfZGlyLCBkaWN0aW9uYXJ5KQorCisgICAgZGVmIF92aXNpdF9iYXNl
bGluZV9kaXIoc2VsZiwgZGljdCwgZGlybmFtZSwgbmFtZXMpOgorICAgICAgICAiIiIgTWV0aG9k
IGludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBvcy5wYXRoLndhbGsgdG8gYnVpbGQgdXAgYW4gaW5k
ZXgKKyAgICAgICAgb2Ygd2hlcmUgYWxsIHRoZSB0ZXN0IGJhc2VsaW5lcyBleGlzdC4gIiIiCisg
ICAgICAgICMgRXhjbHVkZSAuc3ZuIGZyb20gdGhlIHdhbGssIHNpbmNlIHdlIGRvbid0IGNhcmUg
d2hhdCBpcyBpbiB0aGVzZQorICAgICAgICAjIGRpcnMuCisgICAgICAgIGlmICcuc3ZuJyBpbiBu
YW1lczoKKyAgICAgICAgICAgIG5hbWVzLnJlbW92ZSgnLnN2bicpCisgICAgICAgIGZvciBuYW1l
IGluIG5hbWVzOgorICAgICAgICAgICAgaWYgbmFtZS5maW5kKCItZXhwZWN0ZWQuIikgPiAtMToK
KyAgICAgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5ID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIG5h
bWUpCisgICAgICAgICAgICAgICAgIyBGaXggcGF0aCBzZXBhcmF0b3JzIHRvIG1hdGNoIHRoZSBz
ZXBhcmF0b3JzIHVzZWQgb24KKyAgICAgICAgICAgICAgICAjIHRoZSBidWlsZGJvdHMuCisgICAg
ICAgICAgICAgICAgdGVzdF9wYXRoX2tleSA9IHRlc3RfcGF0aF9rZXkucmVwbGFjZSgiXFwiLCAi
LyIpCisgICAgICAgICAgICAgICAgdGVzdF9wYXRoX2tleSA9IHNlbGYuX25vcm1hbGl6ZV9iYXNl
bGluZV9pZGVudGlmaWVyKAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5KQorICAg
ICAgICAgICAgICAgIGlmIG5vdCB0ZXN0X3BhdGhfa2V5IGluIGRpY3Q6CisgICAgICAgICAgICAg
ICAgICAgIGRpY3RbdGVzdF9wYXRoX2tleV0gPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgbmFtZSkK
KworICAgICMgVE9ETyhnd2lsc29uKTogU2ltcGxpZnkgaWRlbnRpZmllciBjcmVhdGlvbiB0byBu
b3QgcmVseSBzbyBoZWF2aWx5IG9uCisgICAgIyBkaXJlY3RvcnkgYW5kIHBhdGggbmFtZXMuCisK
KyAgICBkZWYgX25vcm1hbGl6ZV9iYXNlbGluZV9pZGVudGlmaWVyKHNlbGYsIHRlc3RfcGF0aCk6
CisgICAgICAgICIiIiBHaXZlbiBlaXRoZXIgYSBiYXNlbGluZSBwYXRoIChpLmUuIC9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvLi4uKQorICAgICAgICBvciBhIHRlc3QgcGF0aCAoaS5lLiAvTGF5
b3V0VGVzdHMvZmFzdC9kb20vLi4uLikgd2lsbCBub3JtYWxpemUKKyAgICAgICAgdG8gYSB1bmlx
dWUgaWRlbnRpZmllci4gVGhpcyBpcyBiYXNpY2FsbHkgYSBoYXNoaW5nIGZ1bmN0aW9uIGZvcgor
ICAgICAgICBsYXlvdXQgdGVzdCBwYXRocy4iIiIKKworICAgICAgICBmb3IgcmVnZXggaW4gTE9D
QUxfQkFTRUxJTkVfUkVHRVhFUzoKKyAgICAgICAgICAgIHZhbHVlID0gZXh0cmFjdF9maXJzdF92
YWx1ZSh0ZXN0X3BhdGgsIHJlZ2V4KQorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHJldHVybiB0ZXN0X3BhdGgKKworICAgIGRlZiBf
YWRkX2Jhc2VsaW5lX3VyX2xzKHNlbGYsIGxpc3QsIGJhc2VfdXJsLCBwbGF0Zm9ybXMpOgorICAg
ICAgICAjIElmIHRoZSBiYXNlIFVSTCBkb2Vzbid0IGNvbnRhaW4gYW55IHBsYXRmb3JtIGluIGl0
cyBwYXRoLCBvbmx5IGFkZAorICAgICAgICAjIHRoZSBiYXNlIFVSTCB0byB0aGUgbGlzdC4gIFRo
aXMgaGFwcGVucyB3aXRoIHRoZSBjaHJvbWUvIGRpci4KKyAgICAgICAgaWYgYmFzZV91cmwuZmlu
ZCgiJXMiKSA9PSAtMToKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGJhc2VfdXJsKQorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgIGZvciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6CisgICAgICAg
ICAgICBsaXN0LmFwcGVuZChiYXNlX3VybCAlIHBsYXRmb3JtKQorCisgICAgIyBUT0RPKGd3aWxz
b24pOiBSZWZhY3RvciB0aGlzIG1ldGhvZCB0byB1c2UKKyAgICAjIHBsYXRmb3JtX3V0aWxzXyou
QmFzZWxpbmVTZWFyY2hQYXRoIGluc3RlYWQgb2YgY3VzdG9tIGxvZ2ljLiAgVGhpcyBtYXkKKyAg
ICAjIHJlcXVpcmUgc29tZSBraW5kIG9mIHdyYXBwZXIgc2luY2UgdGhpcyBtZXRob2QgbG9va3Mg
Zm9yIFVSTHMgaW5zdGVhZAorICAgICMgb2YgbG9jYWwgcGF0aHMuCisKKyAgICBkZWYgX2dldF9w
b3NzaWJsZV9maWxlX2xpc3Qoc2VsZiwgZmlsZW5hbWUsIG9ubHlfd2Via2l0KToKKyAgICAgICAg
IiIiIFJldHVybnMgYSBsaXN0IG9mIHBvc3NpYmxlIGZpbGVuYW1lIGxvY2F0aW9ucyBmb3IgdGhl
IGdpdmVuIGZpbGUuCisgICAgICAgIFVzZXMgdGhlIHBsYXRmb3JtIG9mIHRoZSBjbGFzcyB0byBk
ZXRlcm1pbmUgdGhlIG9yZGVyLgorICAgICAgICAiIiIKKworICAgICAgICBwb3NzaWJsZV9jaHJv
bWl1bV9maWxlcyA9IFtdCisgICAgICAgIHBvc3NpYmxlX3dlYmtpdF9maWxlcyA9IFtdCisKKyAg
ICAgICAgY2hyb21pdW1fcGxhdGZvcm1fdXJsID0gTEFZT1VUX1RFU1RfUkVQT19CQVNFX1VSTAor
ICAgICAgICBpZiBub3QgZmlsZW5hbWUuc3RhcnRzd2l0aCgiY2hyb21lIik6CisgICAgICAgICAg
ICBjaHJvbWl1bV9wbGF0Zm9ybV91cmwgKz0gInBsYXRmb3JtLyVzLyIKKyAgICAgICAgY2hyb21p
dW1fcGxhdGZvcm1fdXJsICs9IGZpbGVuYW1lCisKKyAgICAgICAgd2Via2l0X3BsYXRmb3JtX3Vy
bCA9IFdFQktJVF9QTEFURk9STV9CQVNFTElORV9VUkwgKyBmaWxlbmFtZQorCisgICAgICAgIGlm
IGlzX21hY19wbGF0Zm9ybShzZWxmLnBsYXRmb3JtKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9i
YXNlbGluZV91cl9scyhwb3NzaWJsZV9jaHJvbWl1bV9maWxlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaHJvbWl1bV9wbGF0Zm9ybV91cmwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0hST01JVU1fTUFDX1BMQVRGT1JNX0RJUlMpCisgICAgICAgICAg
ICBzZWxmLl9hZGRfYmFzZWxpbmVfdXJfbHMocG9zc2libGVfd2Via2l0X2ZpbGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9wbGF0Zm9ybV91cmwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX01BQ19QTEFURk9STV9ESVJTKQorICAg
ICAgICBlbGlmIGlzX2xpbnV4X3BsYXRmb3JtKHNlbGYucGxhdGZvcm0pOgorICAgICAgICAgICAg
c2VsZi5fYWRkX2Jhc2VsaW5lX3VyX2xzKHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX3BsYXRmb3JtX3VybCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSFJPTUlVTV9MSU5VWF9QTEFURk9STV9ESVJT
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3VyX2xzKHBv
c3NpYmxlX2Nocm9taXVtX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNocm9taXVtX3BsYXRmb3JtX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDSFJPTUlVTV9XSU5fUExBVEZPUk1fRElSUykKKworICAgICAgICBpZiBub3QgaXNfbWFjX3Bs
YXRmb3JtKHNlbGYucGxhdGZvcm0pOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3Vy
X2xzKHBvc3NpYmxlX3dlYmtpdF9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3ZWJraXRfcGxhdGZvcm1fdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9XSU5fUExBVEZPUk1fRElSUykKKyAgICAgICAgcG9zc2libGVfd2Via2l0X2Zp
bGVzLmFwcGVuZChXRUJLSVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwgKyBmaWxlbmFtZSkKKworICAg
ICAgICBpZiBvbmx5X3dlYmtpdDoKKyAgICAgICAgICAgIHJldHVybiBwb3NzaWJsZV93ZWJraXRf
ZmlsZXMKKyAgICAgICAgcmV0dXJuIHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVzICsgcG9zc2libGVf
d2Via2l0X2ZpbGVzCisKKyAgICAjIExpa2UgX0dldEJhc2VsaW5lLCBidXQgb25seSByZXRyaWV2
ZXMgdGhlIGJhc2VsaW5lIGZyb20gdXBzdHJlYW0gKHNraXAKKyAgICAjIGxvb2tpbmcgaW4gY2hy
b21pdW0pLgorCisgICAgZGVmIF9nZXRfdXBzdHJlYW1fYmFzZWxpbmUoc2VsZiwgZmlsZW5hbWUs
IGRpcmVjdG9yeSk6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfYmFzZWxpbmUoZmlsZW5hbWUs
IGRpcmVjdG9yeSwgdXBzdHJlYW1fb25seT1UcnVlKQorCisgICAgZGVmIF9nZXRfZmlsZV9hZ2Uo
c2VsZiwgdXJsKToKKyAgICAgICAgIyBDaGVjayBpZiB0aGUgZ2l2ZW4gVVJMIGlzIHJlYWxseSBh
IGxvY2FsIGZpbGUgcGF0aC4KKyAgICAgICAgaWYgbm90IHVybCBvciBub3QgdXJsLnN0YXJ0c3dp
dGgoImh0dHAiKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGlmIHVybC5maW5kKFdFQktJVF9UUkFDX0hPU1ROQU1FKSA+IC0xOgorICAgICAgICAg
ICAgICAgIHJldHVybiBleHRyYWN0X3NpbmdsZV9yZWdleF9hdF91cmwodXJsWzp1cmwucmZpbmQo
Ii8iKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfRklMRV9BR0VfUkVHRVggJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsW3VybC5maW5kKCIvYnJvd3NlciIpOl0pCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBleHRyYWN0X3NpbmdsZV9yZWdleF9h
dF91cmwodXJsICsgIj92aWV3PWxvZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDSFJPTUlVTV9GSUxFX0FHRV9SRUdFWCkKKyAgICAgICAgZXhj
ZXB0OgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50
ICJDb3VsZCBub3QgZmluZCBhZ2UgZm9yICVzLiBEb2VzIHRoZSBmaWxlIGV4aXN0PyIgJSB1cmwK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIFJldHVybnMgYSBmbGFraW5lc3Mgb24g
YSBzY2FsZSBvZiAxLTUwLgorICAgICMgVE9ETyhnd2lsc29uKTogbW9kaWZ5IHRoaXMgdG8gYWxz
byByZXR1cm4gd2hpY2ggb2YgdGhlIGxhc3QgMTAKKyAgICAjIGJ1aWxkcyBmYWlsZWQgZm9yIHRo
aXMgdGVzdC4KKworICAgIGRlZiBfZ2V0X2ZsYWtpbmVzcyhzZWxmLCB0ZXN0X3BhdGgsIHRhcmdl
dF9wbGF0Zm9ybSk6CisgICAgICAgIHVybCA9IGdldF9mbGFreV90ZXN0X3VybCh0YXJnZXRfcGxh
dGZvcm0pCisgICAgICAgIGlmIHVybCA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgaWYgdXJsIGluIHNlbGYuX2ZsYWt5X3Rlc3RfY2FjaGU6CisgICAgICAgICAgICBj
b250ZW50ID0gc2VsZi5fZmxha3lfdGVzdF9jYWNoZVt1cmxdCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBjb250ZW50ID0gdXJsbGliMi51cmxvcGVuKHVybGxpYjIuUmVxdWVzdCh1cmwpKS5y
ZWFkKCkKKyAgICAgICAgICAgIHNlbGYuX2ZsYWt5X3Rlc3RfY2FjaGVbdXJsXSA9IGNvbnRlbnQK
KworICAgICAgICBmbGFraW5lc3MgPSBleHRyYWN0X2ZpcnN0X3ZhbHVlKGNvbnRlbnQsIEZMQUtZ
X1RFU1RfUkVHRVggJSB0ZXN0X3BhdGgpCisgICAgICAgIHJldHVybiBmbGFraW5lc3MKKworICAg
IGRlZiBfZ2V0X3Rlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5f
dGVzdF9leHBlY3RhdGlvbnNfY2FjaGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgaWYgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19maWxlOgorICAgICAgICAgICAgICAgICAgICBs
b2cgPSBvcGVuKHNlbGYudGVzdF9leHBlY3RhdGlvbnNfZmlsZSwgJ3InKQorICAgICAgICAgICAg
ICAgICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0aW9uc19jYWNoZSA9ICJcbiIuam9pbihsb2cucmVh
ZGxpbmVzKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9leHBlY3RhdGlvbnNfY2FjaGUgPSBzY3JhcGVfdXJsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgVEVTVF9FWFBFQ1RBVElPTlNfVVJMKQorICAgICAgICAgICAgZXhjZXB0IEhUVFBF
cnJvcjoKKyAgICAgICAgICAgICAgICBwcmludCAoIkNvdWxkIG5vdCBmaW5kIHRlc3RfZXhwZWN0
YXRpb25zLnR4dCBhdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICBURVNUX0VYUEVDVEFU
SU9OU19VUkwpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zX2NhY2hl
CisKKyAgICBkZWYgX2dldF90ZXN0X2V4cGVjdGF0aW9uc19saW5lKHNlbGYsIHRlc3RfcGF0aCk6
CisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9nZXRfdGVzdF9leHBlY3RhdGlvbnMoKQorCisgICAg
ICAgIGlmIG5vdCBjb250ZW50OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBm
b3IgbWF0Y2ggaW4gY29udGVudC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBsaW5lID0gcmUu
c2VhcmNoKCIuKj8gOiAoLio/KSA9IC4qIiwgbWF0Y2gpCisgICAgICAgICAgICBpZiBsaW5lIGFu
ZCB0ZXN0X3BhdGguZmluZChsaW5lLmdyb3VwKDEpKSA+IC0xOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtYXRjaAorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2NvcHlfZmlsZV9m
cm9tX3ppcF9kaXIoc2VsZiwgZmlsZV9pbl96aXAsIGZpbGVfdG9fY3JlYXRlKToKKyAgICAgICAg
bW9kaWZpZXJzID0gIiIKKyAgICAgICAgaWYgZmlsZV90b19jcmVhdGUuZW5kc3dpdGgoIi5wbmci
KToKKyAgICAgICAgICAgIG1vZGlmaWVycyA9ICJiIgorICAgICAgICBkaXIgPSBvcy5wYXRoLmpv
aW4ob3MucGF0aC5zcGxpdChmaWxlX3RvX2NyZWF0ZSlbMDotMV0pWzBdCisgICAgICAgIGNyZWF0
ZV9kaXJlY3RvcnkoZGlyKQorICAgICAgICBmaWxlID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRo
LmpvaW4oVEVNUF9aSVBfRElSLCBmaWxlX2luX3ppcCkpCisgICAgICAgIHNodXRpbC5jb3B5KGZp
bGUsIGRpcikKKworICAgIGRlZiBfZXh0cmFjdF9maWxlX2Zyb21femlwKHNlbGYsIHppcCwgZmls
ZV9pbl96aXAsIGZpbGVfdG9fY3JlYXRlKToKKyAgICAgICAgbW9kaWZpZXJzID0gIiIKKyAgICAg
ICAgaWYgZmlsZV90b19jcmVhdGUuZW5kc3dpdGgoIi5wbmciKToKKyAgICAgICAgICAgIG1vZGlm
aWVycyA9ICJiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjcmVhdGVfZGlyZWN0b3J5KGZp
bGVfdG9fY3JlYXRlWzA6ZmlsZV90b19jcmVhdGUucmZpbmQoIi8iKV0pCisgICAgICAgICAgICBs
b2NhbEZpbGUgPSBvcGVuKGZpbGVfdG9fY3JlYXRlLCAidyVzIiAlIG1vZGlmaWVycykKKyAgICAg
ICAgICAgIGxvY2FsRmlsZS53cml0ZSh6aXAucmVhZChmaWxlX2luX3ppcCkpCisgICAgICAgICAg
ICBsb2NhbEZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2QoZmlsZV90b19jcmVhdGUs
IDA3NzcpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6
CisgICAgICAgICAgICBwcmludCAiRmlsZSAlcyBkb2VzIG5vdCBleGlzdCBpbiB6aXAgZmlsZS4i
ICUgKGZpbGVfaW5femlwKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAg
ICAgICBwcmludCAiRmlsZSAlcyBkb2VzIG5vdCBleGlzdCBpbiB6aXAgZmlsZS4iICUgKGZpbGVf
aW5femlwKQorICAgICAgICAgICAgcHJpbnQgIklzIHRoaXMgemlwIGZpbGUgYXNzZW1ibGVkIGNv
cnJlY3RseT8iCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9kb3dubG9hZF9maWxl
KHNlbGYsIHVybCwgbG9jYWxfZmlsZW5hbWU9Tm9uZSwgbW9kaWZpZXJzPSIiLAorICAgICAgICAg
ICAgICAgICAgICAgIGZvcmNlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvcHkgdGhl
IGNvbnRlbnRzIG9mIGEgZmlsZSBmcm9tIGEgZ2l2ZW4gVVJMCisgICAgICAgIHRvIGEgbG9jYWwg
ZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGxvY2FsX2Zp
bGVuYW1lID09IE5vbmU6CisgICAgICAgICAgICAgICAgbG9jYWxfZmlsZW5hbWUgPSB1cmwuc3Bs
aXQoJy8nKVstMV0KKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGxvY2FsX2ZpbGVuYW1l
KSBhbmQgbm90IGZvcmNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnQgIkZpbGUgYXQgJXMgYWxyZWFkeSBleGlzdHMuIiAlIGxvY2Fs
X2ZpbGVuYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsX2ZpbGVuYW1lCisgICAgICAg
ICAgICBpZiBzZWxmLmRvbnRfZG93bmxvYWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2Fs
X2ZpbGVuYW1lCisgICAgICAgICAgICB3ZWJGaWxlID0gdXJsbGliMi51cmxvcGVuKHVybCkKKyAg
ICAgICAgICAgIGxvY2FsRmlsZSA9IG9wZW4obG9jYWxfZmlsZW5hbWUsICgidyVzIiAlIG1vZGlm
aWVycykpCisgICAgICAgICAgICBsb2NhbEZpbGUud3JpdGUod2ViRmlsZS5yZWFkKCkpCisgICAg
ICAgICAgICB3ZWJGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGxvY2FsRmlsZS5jbG9zZSgpCisg
ICAgICAgICAgICBvcy5jaG1vZChsb2NhbF9maWxlbmFtZSwgMDc3NykKKyAgICAgICAgZXhjZXB0
IHVybGxpYjIuSFRUUEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZXhj
ZXB0IHVybGxpYjIuVVJMRXJyb3I6CisgICAgICAgICAgICBwcmludCAiVGhlIHVybCAlcyBpcyBt
YWxmb3JtZWQuIiAlIHVybAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJu
IGxvY2FsRmlsZS5uYW1lCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRlcl90ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFp
bHVyZV9maW5kZXJfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
ZDhiZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXJfdGVzdC5weQpAQCAtMCww
ICsxLDM5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IG9zCitpbXBvcnQgemlwZmlsZQorCitmcm9tIGZhaWx1cmVfZmluZGVyIGltcG9ydCBGYWls
dXJlRmluZGVyCisKK1RFU1RfQlVJTERFUl9PVVRQVVQgPSAiIiIwOTA3MjMgMTA6Mzg6MjIgdGVz
dF9zaGVsbF90aHJlYWQucHk6Mjg5CisgICAgICAgICAgICBFUlJPUiBjaHJvbWUvZmFzdC9mb3Jt
cy90ZXh0YXJlYS1tZXRyaWNzLmh0bWwgZmFpbGVkOgorICAgICAgICAgICAgICBUZXh0IGRpZmYg
bWlzbWF0Y2gKKyAgICAgICAgICAgIDA5MDcyMyAxMDozODoyMSB0ZXN0X3NoZWxsX3RocmVhZC5w
eToyODkKKyAgICAgICAgICAgIEVSUk9SIGNocm9tZS9mYXN0L2RvbS94c3MtREVOSUVELWphdmFz
Y3JpcHQtdmFyaWF0aW9ucy5odG1sIGZhaWxlZDoKKyAgICAgICAgICAgICAgVGV4dCBkaWZmIG1p
c21hdGNoCisgICAgICAgICAgICAwOTA3MjMgMTA6Mzc6NTggdGVzdF9zaGVsbF90aHJlYWQucHk6
Mjg5CisgICAgICAgICAgICBFUlJPUiBMYXlvdXRUZXN0cy9wbHVnaW5zL2JpbmRpbmdzLXRlc3Qu
aHRtbCBmYWlsZWQ6CisgICAgICAgICAgICAgIFRleHQgZGlmZiBtaXNtYXRjaAorCistLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KK0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkICgxKToKKyAgY2hy
b21lL2Zhc3QvZm9ybXMvdGV4dGFyZWEtbWV0cmljcy5odG1sCisKK1JlZ3Jlc3Npb25zOiBVbmV4
cGVjdGVkIGZhaWx1cmVzICgyKToKKyAgY2hyb21lL2Zhc3QvZG9tL3hzcy1ERU5JRUQtamF2YXNj
cmlwdC12YXJpYXRpb25zLmh0bWwgPSBGQUlMCisgIExheW91dFRlc3RzL3BsdWdpbnMvYmluZGlu
Z3MtdGVzdC5odG1sID0gRkFJTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIiIKKworVEVTVF9G
QUlMVVJFXzEgPSAoImxheW91dC10ZXN0LXJlc3VsdHMvY2hyb21lL2Zhc3QvZm9ybXMvIgorICAg
ICAgICAgICAgICAgICAgInRleHRhcmVhLW1ldHJpY3MtYWN0dWFsLnR4dCIpCitURVNUX0ZBSUxV
UkVfMiA9ICgibGF5b3V0LXRlc3QtcmVzdWx0cy9jaHJvbWUvZmFzdC9kb20vIgorICAgICAgICAg
ICAgICAgICAgInhzcy1ERU5JRUQtamF2YXNjcmlwdC12YXJpYXRpb25zLWFjdHVhbC50eHQiKQor
VEVTVF9GQUlMVVJFXzMgPSAoImxheW91dC10ZXN0LXJlc3VsdHMvTGF5b3V0VGVzdHMvcGx1Z2lu
cy8iCisgICAgICAgICAgICAgICAgICAiYmluZGluZ3MtdGVzdC1hY3R1YWwudHh0IikKKworVEVT
VF9BUkNISVZFX09VVFBVVCA9ICIiIgorQWRkaW5nIGxheW91dC10ZXN0LXJlc3VsdHNccGVuZGlu
Z1xmYXN0XHJlcGFpbnRcbm90LXJlYWwtYWN0dWFsLmNoZWNrc3VtCitBZGRpbmcgbGF5b3V0LXRl
c3QtcmVzdWx0c1xwZW5kaW5nXGZhc3RccmVwYWludFxub3QtcmVhbC1hY3R1YWwucG5nCitBZGRp
bmcgbGF5b3V0LXRlc3QtcmVzdWx0c1xwZW5kaW5nXGZhc3RccmVwYWludFxub3QtcmVhbC1hY3R1
YWwudHh0CitsYXN0IGNoYW5nZTogMjIwNTcKK2J1aWxkIG5hbWU6IHdlYmtpdC1yZWwKK2hvc3Qg
bmFtZTogY29kZjEzOAorc2F2aW5nIHJlc3VsdHMgdG8gXFxteVx0ZXN0XGxvY2F0aW9uXHdlYmtp
dC1yZWxcMjIwNTcKK3Byb2dyYW0gZmluaXNoZWQgd2l0aCBleGl0IGNvZGUgMAorIiIiCisKK1RF
U1RfVEVTVF9FWFBFQ1RBVElPTlMgPSAiIiIKK0JVRzEyMzQgY2hyb21lL2Zhc3QvZm9ybXMvdGV4
dGFyZWEtbWV0cmljcy5odG1sID0gQ1JBU0gKKyIiIgorCitURVNUX0JVSUxERVJfTE9HX0ZJTEUg
PSAiVEVTVF9idWlsZGVyLmxvZyIKK1RFU1RfQVJDSElWRV9MT0dfRklMRSA9ICJURVNUX2FyY2hp
dmUubG9nIgorVEVTVF9EVU1NWV9aSVBfRklMRSA9ICJURVNUX3ppcGZpbGUuemlwIgorVEVTVF9F
WFBFQ1RBVElPTlNfRklMRSA9ICJURVNUX2V4cGVjdGF0aW9ucy50eHQiCisKK1dFQktJVF9CVUlM
REVSX05VTUJFUiA9ICI5ODAwIgorV0VCS0lUX0ZBSUxVUkVTID0gKAorICBbIkxheW91dFRlc3Rz
L2Zhc3QvYmFja2dyb3VuZHMvYW5pbWF0ZWQtc3ZnLWFzLW1hc2suaHRtbCIsCisgICAiTGF5b3V0
VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLWNsaXAtdGV4dC5odG1sIiwKKyAgICJM
YXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL21hc2stY29tcG9zaXRlLmh0bWwiLAorICAgIkxh
eW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvcmVwZWF0L21hc2stbmVnYXRpdmUtb2Zmc2V0LXJl
cGVhdC5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNr
Z3JvdW5kLTMuaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9zdmctYXMt
YmFja2dyb3VuZC02Lmh0bWwiLAorICAgIkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvc3Zn
LWFzLW1hc2suaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9mbG9hdC8wMTMuaHRt
bCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9mbG9hdC9uZXN0ZWQtY2xlYXJhbmNlLmh0
bWwiLAorICAgIkxheW91dFRlc3RzL2Zhc3QvYmxvY2svcG9zaXRpb25pbmcvMDQ3Lmh0bWwiXSkK
KworQ0hST01JVU1fQkFTRUxJTkUgPSAiY2hyb21lL2Zhc3QvZm9ybXMvYmFzaWMtYnV0dG9ucy5o
dG1sIgorRVhQRUNURURfQ0hST01JVU1fTE9DQUxfQkFTRUxJTkUgPSAiLi9jaHJvbWUvZmFzdC9m
b3Jtcy9iYXNpYy1idXR0b25zLmh0bWwiCitFWFBFQ1RFRF9DSFJPTUlVTV9VUkxfQkFTRUxJTkUg
PSAoImh0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0cnVuay9zcmMvd2Via2l0L2RhdGEvbGF5b3V0X3Rlc3Rz
L2Nocm9tZS8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhc3QvZm9ybXMv
YmFzaWMtYnV0dG9ucy5odG1sIikKKworV0VCS0lUX0JBU0VMSU5FID0gIkxheW91dFRlc3RzL2Zh
c3QvZm9ybXMvMTE0MjMuaHRtbCIKK0VYUEVDVEVEX1dFQktJVF9MT0NBTF9CQVNFTElORSA9ICIu
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvMTE0MjMuaHRtbCIKK0VYUEVDVEVEX1dFQktJVF9VUkxf
QkFTRUxJTkUgPSAoCisgICAgImh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtp
dC90cnVuay8iCisgICAgIkxheW91dFRlc3RzL2Zhc3QvZm9ybXMvMTE0MjMuaHRtbCIpCisKK1RF
U1RfWklQX0ZJTEUgPSAoImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvbGF5b3V0
X3Rlc3RfcmVzdWx0cy8iCisgICAgICAgICAgICAgICAgICJ3ZWJraXQtcmVsLzIxNDMyL2xheW91
dC10ZXN0LXJlc3VsdHMuemlwIikKKworRVhQRUNURURfUkVWSVNJT04gPSAiMjA4NjEiCitFWFBF
Q1RFRF9CVUlMRF9OQU1FID0gIndlYmtpdC1yZWwiCisKK1NWR19URVNUX0VYUEVDVEFUSU9OID0g
KAorICAgICJMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2ZvcmVpZ24tb2JqZWN0LXNrZXctZXhwZWN0
ZWQucG5nIikKK1NWR19URVNUX0VYUEVDVEFUSU9OX1VQU1RSRUFNID0gKCJMYXlvdXRUZXN0cy9z
dmcvY3VzdG9tLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JlaWduLW9i
amVjdC1za2V3LWV4cGVjdGVkLXVwc3RyZWFtLnBuZyIpCitXRUJBUkNISVZFX1RFU1RfRVhQRUNU
QVRJT04gPSAoIkxheW91dFRlc3RzL3dlYmFyY2hpdmUvYWRvcHQtYXR0cmlidXRlLSIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVkLWJvZHktd2ViYXJjaGl2ZS1leHBlY3Rl
ZC53ZWJhcmNoaXZlIikKK0RPTV9URVNUX0VYUEVDVEFUSU9OID0gKCJMYXlvdXRUZXN0cy9mYXN0
L2RvbS8iCisgICAgICAgICAgICAgICAgICAgICAgICAiYXR0cmlidXRlLWRvd25jYXN0LXJpZ2h0
LWV4cGVjdGVkLnR4dCIpCitET01fVEVTVF9FWFBFQ1RBVElPTl9VUFNUUkVBTSA9ICgiTGF5b3V0
VGVzdHMvZmFzdC9kb20vIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJp
YnV0ZS1kb3duY2FzdC1yaWdodC0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXhwZWN0ZWQtdXBzdHJlYW0ucG5nIikKKworVEVTVF9FWFBFQ1RBVElPTlMgPSAiIiIKK0JVRzEy
MzQgV09OVEZJWCA6IExheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvc3ZnLWFzLWJhY2tncm91
bmQtMy5odG1sID0gRkFJTAorQlVHMzQ1NiBXSU4gOiBMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91
bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTYuaHRtbCA9IENSQVNICitCVUc0NTY3IDogTGF5b3V0VGVz
dHMvZmFzdC9iYWNrZ3JvdW5kcy9zdmctYXMtbWFzay5odG1sID0gUEFTUworV09OVEZJWCA6IExh
eW91dFRlc3RzL2Zhc3QvYmxvY2svID0gRkFJTAorIiIiCisKK0VYUEVDVF9FWEFDVF9NQVRDSCA9
ICJMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTYuaHRtbCIK
K0VYUEVDVF9HRU5FUkFMX01BVENIID0gIkxheW91dFRlc3RzL2Zhc3QvYmxvY2svZmxvYXQvMDEz
Lmh0bWwiCitFWFBFQ1RfTk9fTUFUQ0ggPSAiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9z
dmctYXMtYmFja2dyb3VuZC05OS5odG1sIgorCitXRUJLSVRfT1JHID0gIndlYmtpdC5vcmciCitD
SFJPTUlVTV9PUkcgPSAiY2hyb21pdW0ub3JnIgorCisKK2NsYXNzIEZhaWx1cmVGaW5kZXJUZXN0
KG9iamVjdCk6CisKKyAgICBkZWYgcnVuVGVzdHMoc2VsZik6CisgICAgICAgIGFsbF90ZXN0c19w
YXNzZWQgPSBUcnVlCisKKyAgICAgICAgdGVzdHMgPSBbInRlc3RXaGl0ZXNwYWNlSW5CdWlsZGVy
TmFtZSIsCisgICAgICAgICAgICAgICAgICJ0ZXN0R2V0TGFzdEJ1aWxkIiwKKyAgICAgICAgICAg
ICAgICAgInRlc3RGaW5kTWF0Y2hlc0luQnVpbGRlck91dHB1dCIsCisgICAgICAgICAgICAgICAg
ICJ0ZXN0U2NyYXBlQnVpbGRlck91dHB1dCIsCisgICAgICAgICAgICAgICAgICJ0ZXN0R2V0Q2hy
b21pdW1CYXNlbGluZSIsCisgICAgICAgICAgICAgICAgICJ0ZXN0R2V0V2Via2l0QmFzZWxpbmUi
LAorICAgICAgICAgICAgICAgICAidGVzdFppcERvd25sb2FkIiwKKyAgICAgICAgICAgICAgICAg
InRlc3RVc2VMb2NhbE91dHB1dCIsCisgICAgICAgICAgICAgICAgICJ0ZXN0VHJhbnNsYXRlQnVp
bGRUb1ppcCIsCisgICAgICAgICAgICAgICAgICJ0ZXN0R2V0QmFzZWxpbmUiLAorICAgICAgICAg
ICAgICAgICAidGVzdEZpbmRUZXN0RXhwZWN0YXRpb25zIiwKKyAgICAgICAgICAgICAgICAgInRl
c3RGdWxsIl0KKworICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBldmFsKHRlc3QgKyAiKCkiKQorICAgICAgICAgICAg
ICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlsgT0sgICAgICBdICVz
IiAlIHRlc3QKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhbGxf
dGVzdHNfcGFzc2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlsgICAgRkFJ
TCBdICVzIiAlIHRlc3QKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmlu
dCAiWyAgRVJST1IgIF0gJXMiICUgdGVzdAorICAgICAgICByZXR1cm4gYWxsX3Rlc3RzX3Bhc3Nl
ZAorCisKK2RlZiBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCk6CisgICAgcmV0dXJuIEZhaWx1
cmVGaW5kZXIoTm9uZSwgIldlYmtpdCIsIEZhbHNlLCAiIiwgIi4iLCAxMCwgRmFsc2UpCisKKwor
ZGVmIF90ZXN0X2xhc3RfYnVpbGQoZmFpbHVyZV9maW5kZXIpOgorICAgIHRyeToKKyAgICAgICAg
bGFzdF9idWlsZCA9IGZhaWx1cmVfZmluZGVyLmdldF9sYXN0X2J1aWxkKCkKKyAgICAgICAgIyBW
ZXJpZnkgdGhhdCBsYXN0X2J1aWxkIGlzIG5vdCBlbXB0eSBhbmQgaXMgYSBudW1iZXIuCisgICAg
ICAgIGJ1aWxkID0gaW50KGxhc3RfYnVpbGQpCisgICAgICAgIHJldHVybiAoYnVpbGQgPiAwKQor
ICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHRlc3RfZ2V0X2xhc3Rf
YnVpbGQoKToKKyAgICB0ZXN0ID0gX2dldF9iYXNpY19mYWlsdXJlX2ZpbmRlcigpCisgICAgcmV0
dXJuIF90ZXN0X2xhc3RfYnVpbGQodGVzdCkKKworCitkZWYgdGVzdF93aGl0ZXNwYWNlX2luX2J1
aWxkZXJfbmFtZSgpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAg
ICB0ZXN0LnNldF9wbGF0Zm9ybSgiV2Via2l0ICh3ZWJraXQub3JnKSIpCisgICAgcmV0dXJuIF90
ZXN0X2xhc3RfYnVpbGQodGVzdCkKKworCitkZWYgdGVzdF9zY3JhcGVfYnVpbGRlcl9vdXRwdXQo
KToKKworICAgICMgVHJ5IG9uIHRoZSBkZWZhdWx0IGJ1aWxkZXIuCisgICAgdGVzdCA9IF9nZXRf
YmFzaWNfZmFpbHVyZV9maW5kZXIoKQorICAgIHRlc3QuYnVpbGQgPSAiOTgwMCIKKyAgICBvdXRw
dXQgPSB0ZXN0Ll9zY3JhcGVfYnVpbGRlcl9vdXRwdXQoKQorICAgIGlmIG5vdCBvdXRwdXQ6Cisg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBUcnkgb24gYSBjcmF6eSBidWlsZGVyIG9uIHRo
ZSBGWUkgd2F0ZXJmYWxsLgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkK
KyAgICB0ZXN0LmJ1aWxkID0gIjE3NjYiCisgICAgdGVzdC5zZXRfcGxhdGZvcm0oIldlYmtpdCBM
aW51eCAod2Via2l0Lm9yZykiKQorICAgIG91dHB1dCA9IHRlc3QuX3NjcmFwZV9idWlsZGVyX291
dHB1dCgpCisgICAgaWYgbm90IG91dHB1dDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBy
ZXR1cm4gVHJ1ZQorCisKK2RlZiB0ZXN0X2ZpbmRfbWF0Y2hlc19pbl9idWlsZGVyX291dHB1dCgp
OgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0ZXN0LmV4Y2x1
ZGVfa25vd25fZmFpbHVyZXMgPSBUcnVlCisgICAgbWF0Y2hlcyA9IHRlc3QuX2ZpbmRfbWF0Y2hl
c19pbl9idWlsZGVyX291dHB1dChURVNUX0JVSUxERVJfT1VUUFVUKQorICAgICMgVmVyaWZ5IHRo
YXQgd2UgZm91bmQgeCBtYXRjaGVzLgorICAgIGlmIGxlbihtYXRjaGVzKSAhPSAyOgorICAgICAg
ICBwcmludCAiRGlkIG5vdCBmaW5kIGFsbCB1bmV4cGVjdGVkIGZhaWx1cmVzLiIKKyAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICB0ZXN0LmV4Y2x1ZGVfa25vd25fZmFpbHVyZXMgPSBGYWxzZQor
ICAgIG1hdGNoZXMgPSB0ZXN0Ll9maW5kX21hdGNoZXNfaW5fYnVpbGRlcl9vdXRwdXQoVEVTVF9C
VUlMREVSX09VVFBVVCkKKyAgICBpZiBsZW4obWF0Y2hlcykgIT0gMzoKKyAgICAgICAgcHJpbnQg
IkRpZCBub3QgZmluZCBhbGwgZmFpbHVyZXMuIgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBy
ZXR1cm4gVHJ1ZQorCisKK2RlZiBfdGVzdF9iYXNlbGluZSh0ZXN0X25hbWUsIGV4cGVjdGVkX2xv
Y2FsLCBleHBlY3RlZF91cmwpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVy
KCkKKyAgICAjIFRlc3QgYmFzZWxpbmUgdGhhdCBpcyBvYnZpb3VzbHkgaW4gQ2hyb21pdW0ncyB0
cmVlLgorICAgIGJhc2VsaW5lID0gdGVzdC5fZ2V0X2Jhc2VsaW5lKHRlc3RfbmFtZSwgIi4iLCBG
YWxzZSkKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShiYXNlbGluZS5sb2NhbF9maWxlKQor
ICAgICAgICBpZiAoYmFzZWxpbmUubG9jYWxfZmlsZSAhPSBleHBlY3RlZF9sb2NhbCBvcgorICAg
ICAgICAgICAgYmFzZWxpbmUuYmFzZWxpbmVfdXJsICE9IGV4cGVjdGVkX3VybCk6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorICAg
IHJldHVybiBUcnVlCisKKworZGVmIHRlc3RfZ2V0X2Nocm9taXVtX2Jhc2VsaW5lKCk6CisgICAg
cmV0dXJuIF90ZXN0X2Jhc2VsaW5lKENIUk9NSVVNX0JBU0VMSU5FLCBFWFBFQ1RFRF9DSFJPTUlV
TV9MT0NBTF9CQVNFTElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9DSFJP
TUlVTV9VUkxfQkFTRUxJTkUpCisKKworZGVmIHRlc3RfZ2V0X3dlYmtpdF9iYXNlbGluZSgpOgor
ICAgIHJldHVybiBfdGVzdF9iYXNlbGluZShXRUJLSVRfQkFTRUxJTkUsIEVYUEVDVEVEX1dFQktJ
VF9MT0NBTF9CQVNFTElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9XRUJL
SVRfVVJMX0JBU0VMSU5FKQorCisKK2RlZiB0ZXN0X3VzZV9sb2NhbF9vdXRwdXQoKToKKyAgICB0
ZXN0X3Jlc3VsdCA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIF93cml0ZV9maWxlKFRFU1RfQlVJ
TERFUl9MT0dfRklMRSwgVEVTVF9CVUlMREVSX09VVFBVVCkKKyAgICAgICAgX3dyaXRlX2ZpbGUo
VEVTVF9BUkNISVZFX0xPR19GSUxFLCBURVNUX0FSQ0hJVkVfT1VUUFVUKQorICAgICAgICBfd3Jp
dGVfZmlsZShURVNUX0VYUEVDVEFUSU9OU19GSUxFLCBURVNUX1RFU1RfRVhQRUNUQVRJT05TKQor
ICAgICAgICB6aXAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVF9EVU1NWV9aSVBfRklMRSwgJ3cnKQor
ICAgICAgICB6aXAud3JpdGUoVEVTVF9CVUlMREVSX0xPR19GSUxFLCBURVNUX0ZBSUxVUkVfMSkK
KyAgICAgICAgemlwLndyaXRlKFRFU1RfQlVJTERFUl9MT0dfRklMRSwgVEVTVF9GQUlMVVJFXzIp
CisgICAgICAgIHppcC53cml0ZShURVNUX0JVSUxERVJfTE9HX0ZJTEUsIFRFU1RfRkFJTFVSRV8z
KQorICAgICAgICB6aXAuY2xvc2UoKQorICAgICAgICB0ZXN0ID0gX2dldF9iYXNpY19mYWlsdXJl
X2ZpbmRlcigpCisgICAgICAgIHRlc3QuYXJjaGl2ZV9zdGVwX2xvZ19maWxlID0gVEVTVF9BUkNI
SVZFX0xPR19GSUxFCisgICAgICAgIHRlc3QuYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGUgPSBURVNU
X0JVSUxERVJfTE9HX0ZJTEUKKyAgICAgICAgdGVzdC50ZXN0X2V4cGVjdGF0aW9uc19maWxlID0g
VEVTVF9FWFBFQ1RBVElPTlNfRklMRQorICAgICAgICB0ZXN0LnppcF9maWxlID0gVEVTVF9EVU1N
WV9aSVBfRklMRQorICAgICAgICB0ZXN0LmRvbnRfZG93bmxvYWQgPSBUcnVlCisgICAgICAgIHRl
c3QuZXhjbHVkZV9rbm93bl9mYWlsdXJlcyA9IFRydWUKKyAgICAgICAgdGVzdC5kZWxldGVfemlw
X2ZpbGUgPSBGYWxzZQorICAgICAgICBmYWlsdXJlcyA9IHRlc3QuZ2V0X2ZhaWx1cmVzKCkKKyAg
ICAgICAgaWYgbm90IGZhaWx1cmVzIG9yIGxlbihmYWlsdXJlcykgIT0gMjoKKyAgICAgICAgICAg
IHByaW50ICJEaWQgbm90IGdldCBleHBlY3RlZCBudW1iZXIgb2YgZmFpbHVyZXMgOiIKKyAgICAg
ICAgICAgIGZvciBmYWlsdXJlIGluIGZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHByaW50IGZh
aWx1cmUudGVzdF9wYXRoCisgICAgICAgICAgICB0ZXN0X3Jlc3VsdCA9IEZhbHNlCisgICAgZmlu
YWxseToKKyAgICAgICAgb3MucmVtb3ZlKFRFU1RfQlVJTERFUl9MT0dfRklMRSkKKyAgICAgICAg
b3MucmVtb3ZlKFRFU1RfQVJDSElWRV9MT0dfRklMRSkKKyAgICAgICAgb3MucmVtb3ZlKFRFU1Rf
RVhQRUNUQVRJT05TX0ZJTEUpCisgICAgICAgIG9zLnJlbW92ZShURVNUX0RVTU1ZX1pJUF9GSUxF
KQorICAgIHJldHVybiB0ZXN0X3Jlc3VsdAorCisKK2RlZiBfd3JpdGVfZmlsZShmaWxlbmFtZSwg
Y29udGVudHMpOgorICAgIG15ZmlsZSA9IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICBteWZpbGUu
d3JpdGUoY29udGVudHMpCisgICAgbXlmaWxlLmNsb3NlKCkKKworCitkZWYgdGVzdF96aXBfZG93
bmxvYWQoKToKKyAgICB0ZXN0ID0gX2dldF9iYXNpY19mYWlsdXJlX2ZpbmRlcigpCisgICAgdHJ5
OgorICAgICAgICB0ZXN0Ll9kb3dubG9hZF9maWxlKFRFU1RfWklQX0ZJTEUsICJ0ZXN0LnppcCIs
ICJiIikgIyAiYiIgLT4gYmluYXJ5CisgICAgICAgIG9zLnJlbW92ZSgidGVzdC56aXAiKQorICAg
ICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKwor
ZGVmIHRlc3RfdHJhbnNsYXRlX2J1aWxkX3RvX3ppcCgpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2lj
X2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0ZXN0LmJ1aWxkID0gV0VCS0lUX0JVSUxERVJfTlVNQkVS
CisgICAgcmV2aXNpb24sIGJ1aWxkX25hbWUgPSB0ZXN0Ll9nZXRfcmV2aXNpb25fYW5kX2J1aWxk
X2Zyb21fYXJjaGl2ZV9zdGVwKCkKKyAgICBpZiByZXZpc2lvbiAhPSBFWFBFQ1RFRF9SRVZJU0lP
TiBvciBidWlsZF9uYW1lICE9IEVYUEVDVEVEX0JVSUxEX05BTUU6CisgICAgICAgIHJldHVybiBG
YWxzZQorICAgIHJldHVybiBUcnVlCisKKworZGVmIHRlc3RfZ2V0X2Jhc2VsaW5lKCk6CisgICAg
dGVzdCA9IF9nZXRfYmFzaWNfZmFpbHVyZV9maW5kZXIoKQorICAgIHJlc3VsdCA9IFRydWUKKyAg
ICB0ZXN0LnBsYXRmb3JtID0gImNocm9taXVtLW1hYyIKKyAgICBiYXNlbGluZSA9IHRlc3QuX2dl
dF9iYXNlbGluZShXRUJBUkNISVZFX1RFU1RfRVhQRUNUQVRJT04sICIuIikKKyAgICBpZiBub3Qg
YmFzZWxpbmUubG9jYWxfZmlsZSBvciBiYXNlbGluZS5iYXNlbGluZV91cmwuZmluZChXRUJLSVRf
T1JHKSA9PSAtMToKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgcHJpbnQgIldlYmFy
Y2hpdmUgbGF5b3V0IHRlc3Qgbm90IGZvdW5kIGF0IHdlYmtpdC5vcmc6ICVzIiAlIHVybAorICAg
IHRlc3QucGxhdGZvcm0gPSAiY2hyb21pdW0td2luIgorICAgIGJhc2VsaW5lID0gdGVzdC5fZ2V0
X2Jhc2VsaW5lKFNWR19URVNUX0VYUEVDVEFUSU9OLCAiLiIpCisgICAgaWYgKG5vdCBiYXNlbGlu
ZS5sb2NhbF9maWxlIG9yCisgICAgICAgIGJhc2VsaW5lLmJhc2VsaW5lX3VybC5maW5kKENIUk9N
SVVNX09SRykgPT0gLTEpOgorICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBwcmludCAi
U1ZHIGxheW91dCB0ZXN0IGZvdW5kIGF0ICVzLCBub3QgY2hyb21pdW0ub3JnIiAlIHVybAorICAg
IGJhc2VsaW5lID0gdGVzdC5fZ2V0X2Jhc2VsaW5lKFNWR19URVNUX0VYUEVDVEFUSU9OLCAiLiIs
IFRydWUpCisgICAgaWYgbm90IGJhc2VsaW5lLmxvY2FsX2ZpbGUgb3IgYmFzZWxpbmUuYmFzZWxp
bmVfdXJsLmZpbmQoV0VCS0lUX09SRykgPT0gLTE6CisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisg
ICAgICAgIHByaW50ICJVcHN0cmVhbSBTVkcgbGF5b3V0IHRlc3QgTk9UIGZvdW5kIGF0IHdlYmtp
dC5vcmchIgorICAgIGJhc2VsaW5lID0gdGVzdC5fZ2V0X2Jhc2VsaW5lKERPTV9URVNUX0VYUEVD
VEFUSU9OLCAiLiIsIFRydWUpCisgICAgaWYgKG5vdCBiYXNlbGluZS5sb2NhbF9maWxlIG9yCisg
ICAgICAgIGJhc2VsaW5lLmJhc2VsaW5lX3VybC5maW5kKCIvcGxhdGZvcm0vIikgPiAtMSk6Cisg
ICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIHByaW50ICgiVXBzdHJlYW0gU1ZHIGxheW91
dCB0ZXN0IGZvdW5kIGluIGEgIgorICAgICAgICAgICAgICAgInBsYXRmb3JtIGRpcmVjdG9yeTog
JXMiICUgdXJsKQorICAgIG9zLnJlbW92ZShXRUJBUkNISVZFX1RFU1RfRVhQRUNUQVRJT04pCisg
ICAgb3MucmVtb3ZlKFNWR19URVNUX0VYUEVDVEFUSU9OKQorICAgIG9zLnJlbW92ZShTVkdfVEVT
VF9FWFBFQ1RBVElPTl9VUFNUUkVBTSkKKyAgICBvcy5yZW1vdmUoRE9NX1RFU1RfRVhQRUNUQVRJ
T05fVVBTVFJFQU0pCisgICAgZGVsZXRlX2RpcigiTGF5b3V0VGVzdHMiKQorICAgIHJldHVybiBy
ZXN1bHQKKworCitkZWYgZGVsZXRlX2RpcihkaXJlY3RvcnkpOgorICAgICIiIiBSZWN1cnNpdmVs
eSBkZWxldGVzIGVtcHR5IGRpcmVjdG9yaWVzIGdpdmVuIGEgcm9vdC4KKyAgICBUaGlzIG1ldGhv
ZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZW1wdHkuICIiIgorICAg
IGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSwgdG9wZG93bj1GYWxz
ZSk6CisgICAgICAgIGZvciBkIGluIGRpcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHJvb3QsIGQpKQorICAgICAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICBvcy5ybWRpcihkaXJlY3RvcnkpCisKKworZGVm
IHRlc3RfZnVsbCgpOgorICAgICIiIiBWZXJpZmllcyB0aGF0IHRoZSBlbnRpcmUgc3lzdGVtIHdv
cmtzIGVuZC10by1lbmQuICIiIgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVy
KCkKKyAgICB0ZXN0LmJ1aWxkID0gV0VCS0lUX0JVSUxERVJfTlVNQkVSCisgICAgdGVzdC5kb250
X2Rvd25sb2FkID0gVHJ1ZSAgIyBEcnkgcnVuIG9ubHksIG5vIGRvd25sb2FkaW5nIG5lZWRlZC4K
KyAgICBmYWlsdXJlcyA9IHRlc3QuZ2V0X2ZhaWx1cmVzKCkKKyAgICAjIFZlcmlmeSB0aGF0IHRo
ZSBtYXggZmFpbHVyZXMgcGFyYW1ldGVyIHdvcmtzLgorICAgIGlmIG5vdCBmYWlsdXJlcyBvciBs
ZW4oZmFpbHVyZXMpID4gMTA6CisgICAgICAgICJHb3Qgbm8gZmFpbHVyZXMgb3IgdG9vIG1hbnkg
ZmFpbHVyZXMuIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgVmVyaWZ5IHRoZSBmYWls
dXJlcyBtYXRjaCB0aGUgbGlzdCBvZiBleHBlY3RlZCBmYWlsdXJlcy4KKyAgICBmb3IgZmFpbHVy
ZSBpbiBmYWlsdXJlczoKKyAgICAgICAgaWYgbm90IChmYWlsdXJlLnRlc3RfcGF0aCBpbiBXRUJL
SVRfRkFJTFVSRVMpOgorICAgICAgICAgICAgcHJpbnQgIkZvdW5kIGEgZmFpbHVyZSBJIGRpZCBu
b3QgZXhwZWN0IHRvIHNlZS4iCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVy
biBUcnVlCisKKworZGVmIHRlc3RfZmluZF90ZXN0X2V4cGVjdGF0aW9ucygpOgorICAgIHRlc3Qg
PSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0ZXN0Ll90ZXN0X2V4cGVjdGF0aW9u
c19jYWNoZSA9IFRFU1RfRVhQRUNUQVRJT05TCisgICAgbWF0Y2ggPSB0ZXN0Ll9nZXRfdGVzdF9l
eHBlY3RhdGlvbnNfbGluZShFWFBFQ1RfRVhBQ1RfTUFUQ0gpCisgICAgaWYgbm90IG1hdGNoOgor
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBtYXRjaCA9IHRlc3QuX2dldF90ZXN0X2V4cGVjdGF0
aW9uc19saW5lKEVYUEVDVF9HRU5FUkFMX01BVENIKQorICAgIGlmIG5vdCBtYXRjaDoKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgbWF0Y2ggPSB0ZXN0Ll9nZXRfdGVzdF9leHBlY3RhdGlvbnNf
bGluZShFWFBFQ1RfTk9fTUFUQ0gpCisgICAgcmV0dXJuIG5vdCBtYXRjaAorCisKK2lmIF9fbmFt
ZV9fID09ICJfX21haW5fXyI6CisgICAgZmZ0ID0gRmFpbHVyZUZpbmRlclRlc3QoKQorICAgIHJl
c3VsdCA9IGZmdC5ydW5UZXN0cygpCisgICAgaWYgcmVzdWx0OgorICAgICAgICBwcmludCAiQWxs
IHRlc3RzIHBhc3NlZC4iCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgIk5vdCBhbGwgdGVzdHMg
cGFzc2VkLiIKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9yLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHRtbF9nZW5lcmF0b3Iu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhNmJkMQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsMjU0IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgcmUKKworZnJvbSBmYWlsdXJl
IGltcG9ydCBGYWlsdXJlCisKK0NIUk9NSVVNX0JVR19VUkwgPSAiaHR0cDovL2NyYnVnLmNvbS8i
CisKKworZGVmIGV4dHJhY3RfZmlyc3RfdmFsdWUoc3RyaW5nLCByZWdleCk6CisgICAgbSA9IHJl
LnNlYXJjaChyZWdleCwgc3RyaW5nKQorICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSk6CisgICAgICAg
IHJldHVybiBtLmdyb3VwKDEpCisgICAgcmV0dXJuIE5vbmUKKworIyBUT0RPKGd3aWxzb24pOiBS
ZWZhY3RvciBIVE1MIGdlbmVyYXRpb24gaW50byBhIEhUTUwgdGVtcGxhdGluZyBzeXN0ZW0gbGlr
ZQorIyBEamFuZ28gdGVtcGxhdGVzLgorCisKK2NsYXNzIEhUTUxHZW5lcmF0b3Iob2JqZWN0KToK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmYWlsdXJlcywgb3V0cHV0X2RpciwgYnVpbGQsIHBs
YXRmb3JtLAorICAgICAgICAgICAgICAgICBleGNsdWRlX2tub3duX2ZhaWx1cmVzKToKKyAgICAg
ICAgc2VsZi5mYWlsdXJlcyA9IGZhaWx1cmVzCisgICAgICAgIHNlbGYub3V0cHV0X2RpciA9IG91
dHB1dF9kaXIKKyAgICAgICAgc2VsZi5idWlsZCA9IGJ1aWxkCisgICAgICAgIHNlbGYucGxhdGZv
cm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLmV4Y2x1ZGVfa25vd25fZmFpbHVyZXMgPSBleGNs
dWRlX2tub3duX2ZhaWx1cmVzCisgICAgICAgIHNlbGYuaW1hZ2Vfc2l6ZSA9ICIyMDBweCIKKwor
ICAgIGRlZiBnZW5lcmF0ZV9odG1sKHNlbGYpOgorICAgICAgICBodG1sID0gIiIKKyAgICAgICAg
aHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICA8aHRtbD4KKyAgICAgICAgICAgICAgICAgIDxo
ZWFkPgorICAgICAgICAgICAgICAgICAgICA8c3R5bGU+CisgICAgICAgICAgICAgICAgICAgICAg
Ym9keSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsK
KyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgaDIgeworICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAubWFpblRhYmxlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICM2NjY2NjY7CisgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIC5tYWluVGFibGUgdGQgLCAubWFp
blRhYmxlIHRoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwor
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAudGl0bGVsaW5r
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThwdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAuZGV0YWlsIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmdpbi1sZWZ0OiAxMHB4OworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDog
M3B4OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgPC9zdHls
ZT4KKyAgICAgICAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgICAgICAgICAgIDxib2R5Pgor
ICAgICAgICAgICAgICAgICIiIgorICAgICAgICB0aXRsZSA9ICJBbGwgZmFpbHVyZXMiCisgICAg
ICAgIGlmIHNlbGYuZXhjbHVkZV9rbm93bl9mYWlsdXJlczoKKyAgICAgICAgICAgIHRpdGxlID0g
IlJlZ3Jlc3Npb25zIgorCisgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgPGgx
PiVzIGZvciBidWlsZCAlcyAoJXMpPC9oMT4KKyAgICAgICAgICAgICAgICAiIiIgJSAodGl0bGUs
IHNlbGYuYnVpbGQsIHNlbGYucGxhdGZvcm0pCisKKyAgICAgICAgdGVzdF9udW1iZXIgPSAwCisK
KyAgICAgICAgIyBUT0RPKGd3aWxzb24pOiBSZWZhY3RvciB0aGlzIHRvIGRvIGEgam9pbigpIG9u
IGFuIGFycmF5IG9mIEhUTUwsCisgICAgICAgICMgcmF0aGVyIHRoYW4gYXBwZW5kaW5nIHN0cmlu
Z3MgaW4gYSBsb29wLgorICAgICAgICBmb3IgZmFpbHVyZSBpbiBzZWxmLmZhaWx1cmVzOgorICAg
ICAgICAgICAgdGVzdF9udW1iZXIgKz0gMQorICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAg
ICAgICAgICAgICA8dGFibGUgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyB3aWR0aDog
MTIwMHB4OworICAgICAgICAgICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsiIGNl
bGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CisgICAgICAgICAgICAgICAgICA8dHI+Cisg
ICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0NERUNERTsK
KyAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsiPgor
ICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGVsaW5rIj4lcy4mbmJzcDsmbmJz
cDslczwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+PHRkPiZuYnNwOyZu
YnNwO0xhc3QgbW9kaWZpZWQ6IDxhIGhyZWY9IiVzIj4lczwvYT4KKyAgICAgICAgICAgICAgICAi
IiIgJSAodGVzdF9udW1iZXIsIGZhaWx1cmUudGVzdF9wYXRoLCBmYWlsdXJlLmdldF90ZXN0X2hv
bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS50ZXN0X2FnZSkKKyAgICAgICAg
ICAgIGh0bWwgKz0gIjxkaXYgY2xhc3M9J2RldGFpbCc+IgorICAgICAgICAgICAgaHRtbCArPSAi
PHByZT4lczwvcHJlPiIgJSBcCisgICAgICAgICAgICAgICAgICAgIChzZWxmLl9nZW5lcmF0ZV9s
aW5raWZpZWRfdGV4dF9leHBlY3RhdGlvbnMoZmFpbHVyZSkpCisKKyAgICAgICAgICAgIGh0bWwg
Kz0gc2VsZi5fZ2VuZXJhdGVfZmxha2luZXNzX2h0bWwoZmFpbHVyZSkKKworICAgICAgICAgICAg
aWYgZmFpbHVyZS5jcmFzaGVkOgorICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxkaXY+VGVzdCA8
Yj5DUkFTSEVEPC9iPjwvZGl2PiIKKyAgICAgICAgICAgIGVsaWYgZmFpbHVyZS50aW1lb3V0Ogor
ICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxkaXY+VGVzdCA8Yj5USU1FRCBPVVQ8L2I+PC9kaXY+
IgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBodG1sICs9ICIiIgorICAgICAg
ICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJtYWluVGFibGUiIGNlbGxzcGFjaW5nPTEg
Y2VsbHBhZGRpbmc9NT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0nMjUwJz4mbmJzcDs8L3RoPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0nMjAwJz5FeHBlY3RlZDwvdGg+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPScyMDAnPkFjdHVhbDwvdGg+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPScyMDAnPkRpZmZlcmVuY2U8L3RoPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0nMjAwJz5VcHN0cmVhbTwvdGg+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgICAgICAi
IiIKKworICAgICAgICAgICAgICAgIGlmIGZhaWx1cmUudGV4dF9kaWZmX21pc21hdGNoOgorICAg
ICAgICAgICAgICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX3RleHRfZmFpbHVyZV9odG1s
KGZhaWx1cmUpCisKKyAgICAgICAgICAgICAgICBpZiBmYWlsdXJlLmltYWdlX21pc21hdGNoOgor
ICAgICAgICAgICAgICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX2ltYWdlX2ZhaWx1cmVf
aHRtbChmYWlsdXJlKQorCisgICAgICAgICAgICAgICAgaHRtbCArPSAiPC90YWJsZT4iCisgICAg
ICAgICAgICBodG1sICs9ICI8L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48YnI+IgorICAgICAgICBo
dG1sICs9ICIiIjwvYm9keT48L2h0bWw+IiIiCisKKyAgICAgICAgIyBUT0RPKGd3aWxzb24pOiBD
aGFuZ2UgdGhpcyBmaWxlbmFtZSB0byBiZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQuCisgICAg
ICAgIGh0bWxfZmlsZW5hbWUgPSAiJXMvaW5kZXgtJXMuaHRtbCIgJSAoc2VsZi5vdXRwdXRfZGly
LCBzZWxmLmJ1aWxkKQorICAgICAgICBodG1sRmlsZSA9IG9wZW4oaHRtbF9maWxlbmFtZSwgJ3cn
KQorICAgICAgICBodG1sRmlsZS53cml0ZShodG1sKQorICAgICAgICBodG1sRmlsZS5jbG9zZSgp
CisgICAgICAgIHJldHVybiBodG1sX2ZpbGVuYW1lCisKKyAgICBkZWYgX2dlbmVyYXRlX2xpbmtp
ZmllZF90ZXh0X2V4cGVjdGF0aW9ucyhzZWxmLCBmYWlsdXJlKToKKyAgICAgICAgaWYgbm90IGZh
aWx1cmUudGVzdF9leHBlY3RhdGlvbnNfbGluZToKKyAgICAgICAgICAgIHJldHVybiAiIgorICAg
ICAgICBidWdfbnVtYmVyID0gZXh0cmFjdF9maXJzdF92YWx1ZShmYWlsdXJlLnRlc3RfZXhwZWN0
YXRpb25zX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJC
VUcoXGQrKSIpCisgICAgICAgIGlmIG5vdCBidWdfbnVtYmVyIG9yIGJ1Z19udW1iZXIgPT0gIiI6
CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgcmV0dXJuIGZhaWx1cmUudGVzdF9leHBl
Y3RhdGlvbnNfbGluZS5yZXBsYWNlKCJCVUciICsgYnVnX251bWJlciwKKyAgICAgICAgICAgICI8
YSBocmVmPSclcyVzJz5CVUclczwvYT4iICUgKENIUk9NSVVNX0JVR19VUkwsIGJ1Z19udW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWdfbnVtYmVyKSkK
KworICAgICMgVE9ETyhnd2lsc29uKTogRml4IHRoaXMgc28gdGhhdCBpdCBzaG93cyB0aGUgbGFz
dCB0ZW4gcnVucworICAgICMgbm90IGp1c3QgYSAibWV0ZXIiIG9mIGZsYWtpbmVzcy4KKworICAg
IGRlZiBfZ2VuZXJhdGVfZmxha2luZXNzX2h0bWwoc2VsZiwgZmFpbHVyZSk6CisgICAgICAgIGh0
bWwgPSAiIgorICAgICAgICBpZiBub3QgZmFpbHVyZS5mbGFraW5lc3M6CisgICAgICAgICAgICBy
ZXR1cm4gaHRtbAorICAgICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgIDx0YWJsZT4K
KyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkZsYWtpbmVz
czogKCVzKTwvdGQ+CisgICAgICAgICAgICAgICAgIiIiICUgKGZhaWx1cmUuZmxha2luZXNzKQor
CisgICAgICAgIGZsYWt5X3JlZCA9IGludChyb3VuZChpbnQoZmFpbHVyZS5mbGFraW5lc3MpIC8g
NSkpCisgICAgICAgIGZsYWt5X2dyZWVuID0gMTAgLSBmbGFreV9yZWQKKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgZmxha3lfZ3JlZW4pOgorICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAg
ICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJiYWNrZ3JvdW5kOiBncmVlbiI+Jm5ic3A7Jm5ic3A7
PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgIiIiCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAs
IGZsYWt5X3JlZCk6CisgICAgICAgICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgICAg
ICA8dGQgc3R5bGU9ImJhY2tncm91bmQ6IHJlZCI+Jm5ic3A7Jm5ic3A7PC90ZD4KKyAgICAgICAg
ICAgICAgICAgICAgIiIiCisgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgICA8
L3RyPgorICAgICAgICAgICAgICAgIDwvdGFibGU+PGJyPgorICAgICAgICAgICAgICAgICIiIgor
ICAgICAgICByZXR1cm4gaHRtbAorCisgICAgZGVmIF9nZW5lcmF0ZV90ZXh0X2ZhaWx1cmVfaHRt
bChzZWxmLCBmYWlsdXJlKToKKyAgICAgICAgaHRtbCA9ICIiCisgICAgICAgIGlmIG5vdCBmYWls
dXJlLmdldF90ZXh0X2Jhc2VsaW5lX2xvY2F0aW9uKCk6CisgICAgICAgICAgICByZXR1cm4gIiIi
PHRyPjx0ZCBjb2xzcGFuPSc1Jz5UaGlzIHRlc3QgbGlrZWx5IGRvZXMgbm90IGhhdmUgYW55Cisg
ICAgICAgICAgICAgICAgICAgICAgVEVYVCBiYXNlbGluZSBmb3IgdGhpcyBwbGF0Zm9ybSwgb3Ig
b25lIGNvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICAgIGJlIGZvdW5kLjwvdGQ+PC90cj4i
IiIKKyAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAg
ICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9IiVzIj5S
ZW5kZXIgVHJlZSBEdW1wPC9hPjwvYj48YnI+CisgICAgICAgICAgICAgICAgICAgICAgPGI+JXM8
L2I+IGJhc2VsaW5lPGJyPgorICAgICAgICAgICAgICAgICAgICAgIEFnZTogJXM8YnI+CisgICAg
ICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgIiIiICUgKGZhaWx1cmUudGV4
dF9iYXNlbGluZV91cmwsCisgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0X3RleHRf
YmFzZWxpbmVfbG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS50ZXh0
X2Jhc2VsaW5lX2FnZSkKKyAgICAgICAgaHRtbCArPSBzZWxmLl9nZW5lcmF0ZV90ZXh0X2ZhaWx1
cmVfdGQoCisgICAgICAgICAgICBmYWlsdXJlLmdldF9leHBlY3RlZF90ZXh0X2ZpbGVuYW1lKCks
ICJleHBlY3RlZCB0ZXh0IikKKyAgICAgICAgaHRtbCArPSBzZWxmLl9nZW5lcmF0ZV90ZXh0X2Zh
aWx1cmVfdGQoCisgICAgICAgICAgICBmYWlsdXJlLmdldF9hY3R1YWxfdGV4dF9maWxlbmFtZSgp
LCAiYWN0dWFsIHRleHQiKQorICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX3RleHRfZmFp
bHVyZV90ZCgKKyAgICAgICAgICAgIGZhaWx1cmUuZ2V0X3RleHRfZGlmZl9maWxlbmFtZSgpLCAi
dGV4dCBkaWZmIikKKyAgICAgICAgaHRtbCArPSAiPHRkPiZuYnNwOzwvdGQ+IgorICAgICAgICBo
dG1sICs9ICI8L3RyPiIKKyAgICAgICAgcmV0dXJuIGh0bWwKKworICAgIGRlZiBfZ2VuZXJhdGVf
dGV4dF9mYWlsdXJlX3RkKHNlbGYsIGZpbGVfcGF0aCwgYW5jaG9yX3RleHQpOgorICAgICAgICBy
ZXR1cm4gKCI8dGQgYWxpZ249Y2VudGVyPiIKKyAgICAgICAgICAgICAgICAiPGEgaHJlZj0nLi9s
YXlvdXQtdGVzdC1yZXN1bHRzLSVzLyVzJz4lczwvYT48L3RkPiIpICUgKAorICAgICAgICAgICAg
ICAgIHNlbGYuYnVpbGQsIGZpbGVfcGF0aCwgYW5jaG9yX3RleHQpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2ltYWdlX2ZhaWx1cmVfaHRtbChzZWxmLCBmYWlsdXJlKToKKyAgICAgICAgaWYgbm90IGZh
aWx1cmUuZ2V0X2ltYWdlX2Jhc2VsaW5lX2xvY2F0aW9uKCk6CisgICAgICAgICAgICByZXR1cm4g
IiIiPHRyPjx0ZCBjb2xzcGFuPSc1Jz5UaGlzIHRlc3QgbGlrZWx5IGRvZXMgbm90IGhhdmUgYW55
CisgICAgICAgICAgICAgICAgICAgICAgSU1BR0UgYmFzZWxpbmUgZm9yIHRoaXMgcGxhdGZvcm0s
IG9yIG9uZSBjb3VsZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZC48L3RkPjwv
dHI+IiIiCisgICAgICAgIGh0bWwgPSAiIiIKKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8
dGQ+PGI+PGEgaHJlZj0iJXMiPlBpeGVsIER1bXA8L2E+PC9iPjxicj4KKyAgICAgICAgICAgIDxi
PiVzPC9iPiBiYXNlbGluZTxicj5BZ2U6ICVzPC90ZD4KKyAgICAgICAgICAiIiIgJSAoZmFpbHVy
ZS5pbWFnZV9iYXNlbGluZV91cmwsCisgICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0X2ltYWdl
X2Jhc2VsaW5lX2xvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgIGZhaWx1cmUuaW1hZ2VfYmFz
ZWxpbmVfYWdlKQorICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX2ltYWdlX2ZhaWx1cmVf
dGQoCisgICAgICAgICAgICBmYWlsdXJlLmdldF9leHBlY3RlZF9pbWFnZV9maWxlbmFtZSgpKQor
ICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX2ltYWdlX2ZhaWx1cmVfdGQoCisgICAgICAg
ICAgICBmYWlsdXJlLmdldF9hY3R1YWxfaW1hZ2VfZmlsZW5hbWUoKSkKKyAgICAgICAgaHRtbCAr
PSBzZWxmLl9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX3RkKAorICAgICAgICAgICAgZmFpbHVyZS5n
ZXRfaW1hZ2VfZGlmZl9maWxlbmFtZSgpKQorICAgICAgICBpZiAoZmFpbHVyZS5pbWFnZV9iYXNl
bGluZV91cHN0cmVhbV9sb2NhbCBhbmQKKyAgICAgICAgICAgIGZhaWx1cmUuaW1hZ2VfYmFzZWxp
bmVfdXBzdHJlYW1fbG9jYWwgIT0gIiIpOgorICAgICAgICAgICAgaHRtbCArPSBzZWxmLl9nZW5l
cmF0ZV9pbWFnZV9mYWlsdXJlX3RkKAorICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0X2ltYWdl
X3Vwc3RyZWFtX2ZpbGVuYW1lKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBodG1sICs9
ICIiIgorICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAg
ICAgICAgIiIiCisgICAgICAgIGh0bWwgKz0gIjwvdHI+IgorICAgICAgICByZXR1cm4gaHRtbAor
CisgICAgZGVmIF9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX3RkKHNlbGYsIGZpbGVuYW1lKToKKyAg
ICAgICAgcmV0dXJuICgiPHRkPjxhIGhyZWY9Jy4vbGF5b3V0LXRlc3QtcmVzdWx0cy0lcy8lcyc+
IgorICAgICAgICAgICAgICAgICI8aW1nIHN0eWxlPSd3aWR0aDogJXMnIHNyYz0nLi9sYXlvdXQt
dGVzdC1yZXN1bHRzLSVzLyVzJyAvPiIKKyAgICAgICAgICAgICAgICAiPC9hPjwvdGQ+IikgJSAo
c2VsZi5idWlsZCwgZmlsZW5hbWUsIHNlbGYuaW1hZ2Vfc2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5idWlsZCwgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3Nl
cnZlci5iYXQgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9odHRwX3NlcnZlci5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmZkZGQyOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLmJhdApAQCAtMCww
ICsxIEBACislfmRwMC4uXC4uXC4uXC4uXHRoaXJkX3BhcnR5XHB5dGhvbl8yNFxweXRob24uZXhl
ICV+ZHAwaHR0cF9zZXJ2ZXIucHkgJSoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0
cF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTllMmVhMQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnB5CkBAIC0wLDAgKzEsMjc5IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIGhlbHAg
c3RhcnQvc3RvcCB0aGUgbGlnaHR0cGQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgor
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHNo
dXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1w
b3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKKworaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKK2ltcG9y
dCBwYXRoX3V0aWxzCisKK2NsYXNzIEh0dHBkTm90U3RhcnRlZChFeGNlcHRpb24pOiBwYXNzCisK
K2RlZiByZW1vdmVfbG9nX2ZpbGVzKGZvbGRlciwgc3RhcnRzX3dpdGgpOgorICAgIGZpbGVzID0g
b3MubGlzdGRpcihmb2xkZXIpCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIGZp
bGUuc3RhcnRzd2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5w
YXRoLmpvaW4oZm9sZGVyLCBmaWxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkK
KworCitjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKyAg
ICAjIFdlYmtpdCB0ZXN0cworICAgIHRyeToKKyAgICAgICAgX3dlYmtpdF90ZXN0cyA9IHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cycsICdo
dHRwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzJykKKyAgICAgICAgX2pzX3Rlc3RfcmVzb3VyY2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2Zhc3QnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2pzJywg
J3Jlc291cmNlcycpCisgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAg
ICBfd2Via2l0X3Rlc3RzID0gTm9uZQorICAgICAgICBfanNfdGVzdF9yZXNvdXJjZSA9IE5vbmUK
KworICAgICMgUGF0aCB3aGVyZSB3ZSBjYW4gYWNjZXNzIGFsbCBvZiB0aGUgdGVzdHMKKyAgICBf
YWxsX3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAn
bGF5b3V0X3Rlc3RzJykKKyAgICAjIFNlbGYgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIGZvciBTU0wg
c2VydmVyIChmb3IgY2xpZW50IGNlcnQgZ2V0CisgICAgIyA8YmFzZS1wYXRoPlxjaHJvbWVcdGVz
dFxkYXRhXHNzbFxjZXJ0c1xyb290X2NhX2NlcnQuY3J0KQorICAgIF9wZW1fZmlsZSA9IHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFi
c3BhdGgoX19maWxlX18pKSwgJ2h0dHBkMi5wZW0nKQorICAgICMgT25lIG1hcHBpbmcgd2hlcmUg
d2UgY2FuIGdldCB0byBldmVyeXRoaW5nCisgICAgVklSVFVBTENPTkZJRyA9IFt7J3BvcnQnOiA4
MDgxLCAnZG9jcm9vdCc6IF9hbGxfdGVzdHN9XQorCisgICAgaWYgX3dlYmtpdF90ZXN0czoKKyAg
ICAgICAgVklSVFVBTENPTkZJRy5leHRlbmQoCisgICAgICAgICAgIyBUaHJlZSBtYXBwaW5ncyAo
b25lIHdpdGggU1NMIGVuYWJsZWQpIGZvciBMYXlvdXRUZXN0cyBodHRwIHRlc3RzCisgICAgICAg
ICAgW3sncG9ydCc6IDgwMDAsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0c30sCisgICAgICAgICAg
IHsncG9ydCc6IDgwODAsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0c30sCisgICAgICAgICAgIHsn
cG9ydCc6IDg0NDMsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0cywgJ3NzbGNlcnQnOiBfcGVtX2Zp
bGV9XSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBiYWNrZ3JvdW5kPUZh
bHNlLCBwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwgcmVnaXN0ZXJfY3ln
d2luPU5vbmUsIHJ1bl9iYWNrZ3JvdW5kPU5vbmUpOgorICAgICAgICAiIiJBcmdzOgorICAgICAg
ICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1
bHQgZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0
cHV0X2RpcgorICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorICAgICAgICBzZWxmLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLl9yZWdpc3Rl
cl9jeWd3aW4gPSByZWdpc3Rlcl9jeWd3aW4KKyAgICAgICAgc2VsZi5fcnVuX2JhY2tncm91bmQg
PSBydW5fYmFja2dyb3VuZAorICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgc2Vs
Zi5fcG9ydCA9IGludChzZWxmLl9wb3J0KQorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzICE9IE5vbmUKKworICAgIGRlZiBzdGFydChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByYWlzZSAnTGln
aHR0cGQgYWxyZWFkeSBydW5uaW5nJworCisgICAgICAgIGJhc2VfY29uZl9maWxlID0gcGF0aF91
dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLAorICAgICAgICAgICAgJ1dlYktpdFRv
b2xzJywgJ1NjcmlwdHMnLCAnd2Via2l0cHknLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAg
ICdsYXlvdXRfcGFja2FnZScsICdsaWdodHRwZC5jb25mJykKKyAgICAgICAgb3V0X2NvbmZfZmls
ZSA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpCisgICAg
ICAgIHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgiJWQlYiVZLSVIJU0lUyIpCisgICAgICAgIGFj
Y2Vzc19maWxlX25hbWUgPSAiYWNjZXNzLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKKyAgICAg
ICAgYWNjZXNzX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBhY2Nlc3NfZmls
ZV9uYW1lKQorICAgICAgICBsb2dfZmlsZV9uYW1lID0gImVycm9yLmxvZy0iICsgdGltZV9zdHIg
KyAiLnR4dCIKKyAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9k
aXIsIGxvZ19maWxlX25hbWUpCisKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ug
b25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KKyAgICAgICAgcmVtb3ZlX2xvZ19maWxl
cyhzZWxmLl9vdXRwdXRfZGlyLCAiYWNjZXNzLmxvZy0iKQorICAgICAgICByZW1vdmVfbG9nX2Zp
bGVzKHNlbGYuX291dHB1dF9kaXIsICJlcnJvci5sb2ctIikKKworICAgICAgICAjIFdyaXRlIG91
dCB0aGUgY29uZmlnCisgICAgICAgIGYgPSBmaWxlKGJhc2VfY29uZl9maWxlLCAncmInKQorICAg
ICAgICBiYXNlX2NvbmYgPSBmLnJlYWQoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBm
ID0gZmlsZShvdXRfY29uZl9maWxlLCAnd2InKQorICAgICAgICBmLndyaXRlKGJhc2VfY29uZikK
KworICAgICAgICAjIFdyaXRlIG91dCBvdXIgY2dpIGhhbmRsZXJzLiAgUnVuIHBlcmwgdGhyb3Vn
aCBlbnYgc28gdGhhdCBpdAorICAgICAgICAjIHByb2Nlc3NlcyB0aGUgIyEgbGluZSBhbmQgcnVu
cyBwZXJsIHdpdGggdGhlIHByb3BlciBjb21tYW5kCisgICAgICAgICMgbGluZSBhcmd1bWVudHMu
IEVtdWxhdGUgYXBhY2hlJ3MgbW9kX2FzaXMgd2l0aCBhIGNhdCBjZ2kgaGFuZGxlci4KKyAgICAg
ICAgZi53cml0ZSgoJ2NnaS5hc3NpZ24gPSAoICIuY2dpIiAgPT4gIi91c3IvYmluL2VudiIsXG4n
CisgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAiLnBsIiAgID0+ICIvdXNyL2Jpbi9l
bnYiLFxuJworICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5hc2lzIiA9PiAiL2Jp
bi9jYXQiLFxuJworICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5waHAiICA9PiAi
JXMiIClcblxuJykgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhf
dXRpbHMubGlnaHR0cGRfcGhwX3BhdGgoKSkKKworICAgICAgICAjIFNldHVwIGxvZyBmaWxlcwor
ICAgICAgICBmLndyaXRlKCgnc2VydmVyLmVycm9ybG9nID0gIiVzIlxuJworICAgICAgICAgICAg
ICAgICAnYWNjZXNzbG9nLmZpbGVuYW1lID0gIiVzIlxuXG4nKSAlIChlcnJvcl9sb2csIGFjY2Vz
c19sb2cpKQorCisgICAgICAgICMgU2V0dXAgdXBsb2FkIGZvbGRlcnMuIFVwbG9hZCBmb2xkZXIg
aXMgdG8gaG9sZCB0ZW1wb3JhcnkgdXBsb2FkIGZpbGVzCisgICAgICAgICMgYW5kIGFsc28gUE9T
VCBkYXRhLiBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCBYSFIgbGF5b3V0IHRlc3RzIHRoYXQKKyAg
ICAgICAgIyBkb2VzIFBPU1QuCisgICAgICAgIGYud3JpdGUoKCdzZXJ2ZXIudXBsb2FkLWRpcnMg
PSAoICIlcyIgKVxuXG4nKSAlIChzZWxmLl9vdXRwdXRfZGlyKSkKKworICAgICAgICAjIFNldHVw
IGEgbGluayB0byB3aGVyZSB0aGUganMgdGVzdCB0ZW1wbGF0ZXMgYXJlIHN0b3JlZAorICAgICAg
ICBmLndyaXRlKCgnYWxpYXMudXJsID0gKCAiL2pzLXRlc3QtcmVzb3VyY2VzIiA9PiAiJXMiIClc
blxuJykgJQorICAgICAgICAgICAgICAgICAgICAoc2VsZi5fanNfdGVzdF9yZXNvdXJjZSkpCisK
KyAgICAgICAgIyBkdW1wIG91dCBvZiB2aXJ0dWFsIGhvc3QgY29uZmlnIGF0IHRoZSBib3R0b20u
CisgICAgICAgIGlmIHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAg
ICAgICAgICAgICAgICMgSGF2ZSBib3RoIHBvcnQgYW5kIHJvb3QgZGlyLgorICAgICAgICAgICAg
ICAgIG1hcHBpbmdzID0gW3sncG9ydCc6IHNlbGYuX3BvcnQsICdkb2Nyb290Jzogc2VsZi5fcm9v
dH1dCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSGF2ZSBvbmx5IGEgcm9v
dCBkaXIgLSBzZXQgdGhlIHBvcnRzIGFzIGZvciBMYXlvdXRUZXN0cy4KKyAgICAgICAgICAgICAg
ICAjIFRoaXMgaXMgdXNlZCBpbiB1aV90ZXN0cyB0byBydW4gaHR0cCB0ZXN0cyBhZ2FpbnN0IGEg
YnJvd3Nlci4KKworICAgICAgICAgICAgICAgICMgZGVmYXVsdCBzZXQgb2YgcG9ydHMgYXMgZm9y
IExheW91dFRlc3RzIGJ1dCB3aXRoIGEKKyAgICAgICAgICAgICAgICAjIHNwZWNpZmllZCByb290
LgorICAgICAgICAgICAgICAgIG1hcHBpbmdzID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzog
c2VsZi5fcm9vdH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwg
J2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3Bv
cnQnOiA4NDQzLCAnZG9jcm9vdCc6IHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdzc2xjZXJ0JzogTGlnaHR0cGQuX3BlbV9maWxlfV0KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIG1hcHBpbmdzID0gc2VsZi5WSVJUVUFMQ09ORklHCisgICAgICAgIGZvciBtYXBw
aW5nIGluIG1hcHBpbmdzOgorICAgICAgICAgICAgc3NsX3NldHVwID0gJycKKyAgICAgICAgICAg
IGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5nOgorICAgICAgICAgICAgICAgIHNzbF9zZXR1cCA9ICgn
ICBzc2wuZW5naW5lID0gImVuYWJsZSJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyAgc3NsLnBlbWZpbGUgPSAiJXMiXG4nICUgbWFwcGluZ1snc3NsY2VydCddKQorCisgICAgICAg
ICAgICBmLndyaXRlKCgnJFNFUlZFUlsic29ja2V0Il0gPT0gIjEyNy4wLjAuMTolZCIge1xuJwor
ICAgICAgICAgICAgICAgICAgICAgJyAgc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiJXMiXG4nICsK
KyAgICAgICAgICAgICAgICAgICAgIHNzbF9zZXR1cCArCisgICAgICAgICAgICAgICAgICAgICAn
fVxuXG4nKSAlIChtYXBwaW5nWydwb3J0J10sIG1hcHBpbmdbJ2RvY3Jvb3QnXSkpCisgICAgICAg
IGYuY2xvc2UoKQorCisgICAgICAgIGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX2V4
ZWN1dGFibGVfcGF0aCgpCisgICAgICAgIG1vZHVsZV9wYXRoID0gcGF0aF91dGlscy5saWdodHRw
ZF9tb2R1bGVfcGF0aCgpCisgICAgICAgIHN0YXJ0X2NtZCA9IFtleGVjdXRhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgIyBOZXdseSB3cml0dGVuIGNvbmZpZyBmaWxlCisgICAgICAgICAgICAg
ICAgICAgICAnLWYnLCBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKHNlbGYuX291dHB1dF9kaXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICds
aWdodHRwZC5jb25mJyksCisgICAgICAgICAgICAgICAgICAgICAjIFdoZXJlIGl0IGNhbiBmaW5k
IGl0cyBtb2R1bGUgZHluYW1pYyBsaWJyYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgICctbScs
IG1vZHVsZV9wYXRoXQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9ydW5fYmFja2dyb3VuZDoKKyAg
ICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoIyBEb24ndCBiYWNrZ3JvdW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICctRCcpCisKKyAgICAgICAgIyBDb3B5IGxpYmxpZ2h0Y29tcC5k
eWxpYiB0byAvdG1wL2xpZ2h0dHBkL2xpYiB0byB3b3JrIGFyb3VuZCB0aGUKKyAgICAgICAgIyBi
dWcgdGhhdCBtb2RfYWxpYXMuc28gbG9hZHMgaXQgZnJvbSB0aGUgaGFyZCBjb2RlZCBwYXRoLgor
ICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICB0bXBfbW9k
dWxlX3BhdGggPSAnL3RtcC9saWdodHRwZC9saWInCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHModG1wX21vZHVsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0
bXBfbW9kdWxlX3BhdGgpCisgICAgICAgICAgICBsaWJfZmlsZSA9ICdsaWJsaWdodGNvbXAuZHls
aWInCisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG1vZHVsZV9wYXRo
LCBsaWJfZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRt
cF9tb2R1bGVfcGF0aCwgbGliX2ZpbGUpKQorCisgICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGly
ZWN0b3J5IGZpcnN0IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKKyAgICAgICAgZW52
ID0gb3MuZW52aXJvbgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2lu
MzInKToKKyAgICAgICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgKKyAgICAgICAgICAg
ICAgICBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAn
YmluJyksCisgICAgICAgICAgICAgICAgZW52WydQQVRIJ10pCisKKyAgICAgICAgaWYgc3lzLnBs
YXRmb3JtID09ICd3aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKKyAgICAgICAgICAg
IHNldHVwX21vdW50ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAn
Y3lnd2luJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnc2V0dXBfbW91bnQuYmF0JykKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0
dXBfbW91bnQpLndhaXQoKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nIGh0dHAg
c2VydmVyJykKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRf
Y21kLCBlbnY9ZW52KQorCisgICAgICAgICMgV2FpdCBmb3Igc2VydmVyIHRvIHN0YXJ0LgorICAg
ICAgICBzZWxmLm1hcHBpbmdzID0gbWFwcGluZ3MKKyAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBz
ZWxmLndhaXRfZm9yX2FjdGlvbigKKyAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdf
b25fYWxsX3BvcnRzKQorCisgICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5
CisgICAgICAgIGlmIG5vdCBzZXJ2ZXJfc3RhcnRlZCBvciBzZWxmLl9wcm9jZXNzLnJldHVybmNv
ZGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGdvb2dsZS5odHRwZF91dGlscy5IdHRwZE5v
dFN0YXJ0ZWQoJ0ZhaWxlZCB0byBzdGFydCBodHRwZC4nKQorCisgICAgICAgIGxvZ2dpbmcuZGVi
dWcoIlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCIpCisKKyAgICAjIFRPRE8oZGVhbm0pOiBG
aW5kIGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFubHkuICBPdXIgbG9nIGZpbGVzIGFyZQor
ICAgICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQsIGV0Yy4uLiB3aHkgZG9lc24ndCBvdXIg
cHl0aG9uIGhhdmUgb3Mua2lsbCA/CisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6
CisgICAgICAgIGlmIG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgaHR0cGRfcGlkID0gTm9uZQorICAgICAgICBpZiBzZWxm
Ll9wcm9jZXNzOgorICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKKyAg
ICAgICAgcGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQorCisgICAg
ICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQor
ICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKworaWYgJ19fbWFpbl9fJyA9PSBfX25h
bWVfXzoKKyAgICAjIFByb3ZpZGUgc29tZSBjb21tYW5kIGxpbmUgcGFyYW1zIGZvciBzdGFydGlu
Zy9zdG9wcGluZyB0aGUgaHR0cCBzZXJ2ZXIKKyAgICAjIG1hbnVhbGx5LiBBbHNvIHVzZWQgaW4g
dWlfdGVzdHMgdG8gcnVuIGh0dHAgbGF5b3V0IHRlc3RzIGluIGEgYnJvd3Nlci4KKyAgICBvcHRp
b25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJy1rJywgJy0tc2VydmVyJywKKyAgICAgICAgaGVscD0nU2VydmVyIGFjdGlvbiAo
c3RhcnR8c3RvcCknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0
JywKKyAgICAgICAgaGVscD0nUG9ydCB0byBsaXN0ZW4gb24gKG92ZXJyaWRlcyBsYXlvdXQgdGVz
dCBwb3J0cyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yb290JywK
KyAgICAgICAgaGVscD0nQWJzb2x1dGUgcGF0aCB0byBEb2N1bWVudFJvb3QgKG92ZXJyaWRlcyBs
YXlvdXQgdGVzdCByb290cyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWdp
c3Rlcl9jeWd3aW4nLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZXN0PSJyZWdpc3Rl
cl9jeWd3aW4iLCBoZWxwPSdSZWdpc3RlciBDeWd3aW4gcGF0aHMgKG9uIFdpbiB0cnkgYm90cykn
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1ydW5fYmFja2dyb3VuZCcsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlc3Q9InJ1bl9iYWNrZ3JvdW5kIiwKKyAgICAgICAg
aGVscD0nUnVuIG9uIGJhY2tncm91bmQgKGZvciBydW5uaW5nIGFzIFVJIHRlc3QpJykKKyAgICBv
cHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIG5vdCBv
cHRpb25zLnNlcnZlcjoKKyAgICAgICAgcHJpbnQgKCdVc2FnZTogJXMgLS1zZXJ2ZXIge3N0YXJ0
fHN0b3B9IFstLXJvb3Q9cm9vdF9kaXJdJworICAgICAgICAgICAgICAgJyBbLS1wb3J0PXBvcnRf
bnVtYmVyXScgJSBzeXMuYXJndlswXSkKKyAgICBlbHNlOgorICAgICAgICBpZiAob3B0aW9ucy5y
b290IGlzIE5vbmUpIGFuZCAob3B0aW9ucy5wb3J0IGlzIG5vdCBOb25lKToKKyAgICAgICAgICAg
ICMgc3BlY2lmeWluZyByb290IGJ1dCBub3QgcG9ydCBtZWFucyB3ZSB3YW50IGh0dHBkIG9uIGRl
ZmF1bHQKKyAgICAgICAgICAgICMgc2V0IG9mIHBvcnRzIHRoYXQgTGF5b3V0VGVzdCB1c2UsIGJ1
dCBwb2ludGluZyB0byBhIGRpZmZlcmVudAorICAgICAgICAgICAgIyBzb3VyY2Ugb2YgdGVzdHMu
IFNwZWNpZnlpbmcgcG9ydCBidXQgbm8gcm9vdCBkb2VzIG5vdCBzZWVtCisgICAgICAgICAgICAj
IG1lYW5pbmdmdWwuCisgICAgICAgICAgICByYWlzZSAnU3BlY2lmeWluZyBwb3J0IHJlcXVpcmVz
IGFsc28gYSByb290LicKKyAgICAgICAgaHR0cGQgPSBMaWdodHRwZCh0ZW1wZmlsZS5nZXR0ZW1w
ZGlyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1vcHRpb25zLnBvcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgcm9vdD1vcHRpb25zLnJvb3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0ZXJfY3lnd2luPW9wdGlvbnMucmVnaXN0ZXJfY3lnd2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1bl9iYWNrZ3JvdW5kPW9wdGlvbnMucnVuX2JhY2tncm91bmQp
CisgICAgICAgIGlmICdzdGFydCcgPT0gb3B0aW9ucy5zZXJ2ZXI6CisgICAgICAgICAgICBodHRw
ZC5zdGFydCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRy
dWUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5zaCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnNoCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhMWE2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9o
dHRwX3NlcnZlci5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKKworZXhlY19kaXI9JChkaXJuYW1lICQwKQorCitpZiBbICIkT1NUWVBFIiA9ICJjeWd3
aW4iIF07IHRoZW4KKyAgc3lzdGVtX3Jvb3Q9YGN5Z3BhdGggIiRTWVNURU1ST09UImAKKyAgUEFU
SD0iL3Vzci9iaW46JHN5c3RlbV9yb290L3N5c3RlbTMyOiRzeXN0ZW1fcm9vdDokc3lzdGVtX3Jv
b3Qvc3lzdGVtMzIvV0JFTSIKKyAgZXhwb3J0IFBBVEgKKyAgcHl0aG9uX3Byb2c9IiRleGVjX2Rp
ci8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9weXRob25fMjQvcHl0aG9uLmV4ZSIKK2Vsc2UKKyAg
cHl0aG9uX3Byb2c9cHl0aG9uCisgICMgV2hlbiBub3QgdXNpbmcgdGhlIGluY2x1ZGVkIHB5dGhv
biwgd2UgZG9uJ3QgZ2V0IGF1dG9tYXRpYyBzaXRlLnB5IHBhdGhzLgorICAjIFNwZWNpZmljYWxs
eSwgcnVuX3dlYmtpdF90ZXN0cyBuZWVkcyB0aGUgcGF0aHMgaW46CisgICMgdGhpcmRfcGFydHkv
cHl0aG9uXzI0L0xpYi9zaXRlLXBhY2thZ2VzL2dvb2dsZS5wdGgKKyAgUFlUSE9OUEFUSD0iJHtl
eGVjX2Rpcn0vLi4vLi4vLi4vLi4vdG9vbHMvcHl0aG9uOiRQWVRIT05QQVRIIgorICBleHBvcnQg
UFlUSE9OUEFUSAorZmkKKworIiRweXRob25fcHJvZyIgIiRleGVjX2Rpci9odHRwX3NlcnZlci5w
eSIgIiRAIgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jh
c2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2ZTA3MAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkKQEAgLTAsMCArMSw2NyBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQmFzZSBjbGFzcyB3aXRoIGNv
bW1vbiByb3V0aW5lcyBiZXR3ZWVuIHRoZSBBcGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZlcnMuIiIi
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxpYgorCisKK2NsYXNz
IEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CisKKyAgICBkZWYgd2FpdF9mb3JfYWN0aW9uKHNlbGYs
IGFjdGlvbik6CisgICAgICAgICIiIlJlcGVhdCB0aGUgYWN0aW9uIGZvciAyMCBzZWNvbmRzIG9y
IHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1cm5zCisgICAgICAgIHdoZXRoZXIgaXQgc3VjY2VlZGVk
LiIiIgorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgd2hpbGUgdGlt
ZS50aW1lKCkgLSBzdGFydF90aW1lIDwgMjA6CisgICAgICAgICAgICBpZiBhY3Rpb24oKToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9w
b3J0cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgaXMgcnVu
bmluZyBvbiBhbGwgdGhlIGRlc2lyZWQgcG9ydHMuIiIiCisgICAgICAgIGZvciBtYXBwaW5nIGlu
IHNlbGYubWFwcGluZ3M6CisgICAgICAgICAgICBpZiAnc3NsY2VydCcgaW4gbWFwcGluZzoKKyAg
ICAgICAgICAgICAgICBodHRwX3N1ZmZpeCA9ICdzJworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBodHRwX3N1ZmZpeCA9ICcnCisKKyAgICAgICAgICAgIHVybCA9ICdodHRwJXM6
Ly8xMjcuMC4wLjE6JWQvJyAlIChodHRwX3N1ZmZpeCwgbWFwcGluZ1sncG9ydCddKQorCisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1
cmwpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgYXQgJXMi
ICUgdXJsKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgbG9n
Z2luZy5kZWJ1ZygiU2VydmVyIE5PVCBydW5uaW5nIGF0ICVzIiAlIHVybCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0
cGQyLnBlbSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2h0dHBkMi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NjM0OWI3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW0KQEAgLTAsMCArMSw0MSBAQAor
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFWkRDQ0FreWdBd0lCQWdJQkFUQU5CZ2tx
aGtpRzl3MEJBUVVGQURCZ01SQXdEZ1lEVlFRREV3ZFVaWE4wCitJRU5CTVFzd0NRWURWUVFHRXdK
VlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OCitUVzkxYm5SaGFX
NGdWbWxsZHpFU01CQUdBMVVFQ2hNSlEyVnlkQ0JVWlhOME1CNFhEVEE0TURjeU9ESXlNekl5CitP
Rm9YRFRFek1EY3lOekl5TXpJeU9Gb3dTakVMTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENr
TmhiR2xtCitiM0p1YVdFeEVqQVFCZ05WQkFvVENVTmxjblFnVkdWemRERVNNQkFHQTFVRUF4TUpN
VEkzTGpBdU1DNHhNSUdmCitNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRRFFqMnRQ
V1BVZ2J1STRIMy8zZG50dHFWYm5kd1UzCiszQmRSQ2Q2N0RGTTQ0R1Jyc2pEU0g0YlkvRWJGeVg5
RDUyZC9peTZaYUFtRGVQY0N6NWsvZmdQM0RNdWp5a1lHCitxZ05pVjJ5d3hUbE1qN05sTjJDN1NS
dDY4ZlFNWnI1aUk3cnlwZHh1YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhCiszSlBKZTFUYUlhYjVH
d0lEQVFBQm80SENNSUcvTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZDWUxCdjVLCit4NXNM
TlZscExoNUZ3VHdoZERsN01JR1NCZ05WSFNNRWdZb3dnWWVBRkYzT2Y1bmoxQmxCTVUvR3o3RWw5
VnF2Cis0NWN4b1dTa1lqQmdNUkF3RGdZRFZRUURFd2RVWlhOMElFTkJNUXN3Q1FZRFZRUUdFd0pW
VXpFVE1CRUdBMVVFCitDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlRXOTFiblJoYVc0
Z1ZtbGxkekVTTUJBR0ExVUVDaE1KCitRMlZ5ZENCVVpYTjBnZ2tBMUZHVDFEL2UyVTR3RFFZSktv
WklodmNOQVFFRkJRQURnZ0lCQUV0a1ZtTE9iVWdrCitiMmNJQTJTK1FEdGlmcTFVZ1ZmQmJ5dHZS
MmxGbW5BRE9SNTVtbzBnSFFHM0hIcXE0ZzAzNExtb1ZYREhoVWs4CitHYjZhRml2NFF1Ym1WaExY
Y1VlbFRSWHdpTnZHemtXN3BDNkpycTEwNWhkUGp6WE1LVGNtaUxhb3BtNUZxZmM3CitoajVDbjFT
anNwYzhwZGVRanJiZU1kdmNhN0tsRnJHUDhZa3dDVTJ4T09YOVBpTjlHMDk2NkJXZmpuci9mWlpw
CisrT1FWdVVGSGRpQVp3dGhFTXVEcEFBWEhxWVhJc2VybWdkT3BnSmFBNTNjZjhOcUJWMlFHaHRG
Z3RzSkNSb2l1Cis3REtxaHlSV0JHeXoxOVZJSDJiN3krNnF2UVZ4dUhrMTlrS1JNMG5mdHcveU5j
Sm5tN2d0dHRlc3BNVVBzT01hCithMlNEMUcwaG0wVE5ENnZ4YUJoZ1IzY1ZxcGwvcUlwQWRGaTAw
VG03aFR5WUU3STQzelBXMDN0Ky9EcEN0M1VtCitFTVJac1E5MGNvNXErYmN4L3ZRN1lBdHdVaDMw
dU1iMHdwaWJleUN3RHA4Y3FObVNpUmtFdWMvRmpUWWVzNXQ4Cis1Z1IvL1dYMWwwK3Fqcmp1c085
Tm1vTG5xMllrNlVjaW9YK3orcTZaL2R1ZEdmcWhMZmVXRDJRMExXWUEyNDJDCitkN2ttNVkzS0F0
MVBKZFZzb2YvYWlWaFZkZGRZL09JRUtUUlFoV0VkRGJvc3kyZWgxNkJDS1hUMkZGdmhORGcxCitB
WUZ2bjZJOG5qOUlsZE1KaUljM0RkaGFjRUFFelJNZVJnUGR6QWExZ3JpS1VHa254c3lUeVJpaThy
dTBXUzZ3CitEQ05ybERPVlhkellHRVpvb0JJNzZCRFZZMFcwYWtqVgorLS0tLS1FTkQgQ0VSVElG
SUNBVEUtLS0tLQorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hRSUJBQUtC
Z1FEUWoydFBXUFVnYnVJNEgzLzNkbnR0cVZibmR3VTMzQmRSQ2Q2N0RGTTQ0R1Jyc2pEUworSDRi
WS9FYkZ5WDlENTJkL2l5NlphQW1EZVBjQ3o1ay9mZ1AzRE11anlrWUdxZ05pVjJ5d3hUbE1qN05s
TjJDNworU1J0NjhmUU1acjVpSTdyeXBkeHVhWnQ5bFNNRDNFTkJmZll0dUxUeVpkOWEzSlBKZTFU
YUlhYjVHd0lEQVFBQgorQW9HQU5IWHU4ejJZSXpsaEUrYndoR204TUdCcEtMM3FoUnVLamVyaXFN
QTM2dFdlek93OGxZNHltRUFVK1VsdgorQnNDZGF4cXlkUW9UWW91NTdtNFR5VUhFY3hxOXBxM0gw
ekIwcUw3MDlEZEhpL3Q0emJWOVhJb0F6QzV2MC9oRworOStDYTI5VHdDMDJGQ3crcUxrTnJ0d0Nw
d09jUW1jK2JQeHF2RnUxaU1pYWhVUkVDUVFEMkkvSGkyNDEzQ01aegorVEJqbDhmTWlWTzlHaEEy
SjBzYzhRaStZY2dKYWthTEQ5eGNiYWlMa1R6UFpEbEEzODlDMWI2SWErcG9BcjRZQQorVmUwRkZi
eHBBa0VBMk9vYmF5eUhFL1F0UEVxb3k2TkxSNTdqaXJtVkJObVNXV2Q0bEF5TDVVSUhJWVZ0dEpa
ZworOENMdmJ6YVUvaURHd1Ird0tzTTY2NHJLUEhFbXRseW80d0pCQU1lU3FZTzVaT0NKR3U5Tldq
ckhqTTNmZEFzRworOHpzMnpoaUx5YStmY1UwaUhJa3NCVzVUQm10NzFKdy93TWM5UjVKMUswa1l2
Rm1sOTg2NTNPNXNpMUVDUUJDaworUlY0L21FMXJtbHpaellGeUVjQjQ3RFFrY001aWN0dnhHRXNq
ZTBnbmZLeVJ0QXo2ekkwZjRRYkRSVU1KK0xXdworWEsrck1zWUhhK1NmT2IwYjlza0NRUUNMZGVv
bnNJcEZEdi9VditmbEhJU3kwV0ErQUZrTFhyUmtCS2g2Ry9PRAorZE1IYU5ldmtKZ1VucGNlVkVu
a3JkZW5wNUNjRW9GVEkxN3BkK25CZ0RtL0IKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5
b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmIzN2FkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVy
YXRvci5weQpAQCAtMCwwICsxLDE4NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworCitmcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yCitmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0
aW9ucworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworCisKK2NsYXNz
IEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJl
c3VsdHNHZW5lcmF0b3IpOgorICAgICIiIkEgSlNPTiByZXN1bHRzIGdlbmVyYXRvciBmb3IgbGF5
b3V0IHRlc3RzLiIiIgorCisgICAgTEFZT1VUX1RFU1RTX1BBVEggPSAiTGF5b3V0VGVzdHMiCisK
KyAgICAjIEFkZGl0aW9uYWwgSlNPTiBmaWVsZHMuCisgICAgV09OVEZJWCA9ICJ3b250Zml4Q291
bnRzIgorICAgIERFRkVSUkVEID0gImRlZmVycmVkQ291bnRzIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgICAgICBy
ZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAorICAgICAgICB0ZXN0X3Rp
bWluZ3MsIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIGFsbF90ZXN0cyk6CisgICAgICAg
ICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNo
aXZlIGRpcmVjdG9yeQorICAgICAgICBpZiBpdCBpcyBub3QgZm91bmQgbG9jYWxseS4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBSZXN1bHRzU3VtbWFyeSBvYmpl
Y3Qgc3RvcmluZyB0aGUgc3VtbWFyeSBvZiB0aGUgdGVzdAorICAgICAgICAgICAgICByZXN1bHRz
LgorICAgICAgICAgIChzZWUgdGhlIGNvbW1lbnQgb2YgSlNPTlJlc3VsdHNHZW5lcmF0b3IuX19p
bml0X18gZm9yIG90aGVyIEFyZ3MpCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2J1aWxk
ZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQorICAgICAgICBzZWxmLl9idWlsZF9uYW1lID0gYnVpbGRf
bmFtZQorICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1iZXIKKyAgICAgICAg
c2VsZi5fYnVpbGRlcl9iYXNlX3VybCA9IGJ1aWxkZXJfYmFzZV91cmwKKyAgICAgICAgc2VsZi5f
cmVzdWx0c19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVzdWx0c19maWxlX2Jhc2VfcGF0aCwK
KyAgICAgICAgICAgIHNlbGYuUkVTVUxUU19GSUxFTkFNRSkKKyAgICAgICAgc2VsZi5fZXhwZWN0
YXRpb25zID0gZXhwZWN0YXRpb25zCisKKyAgICAgICAgIyBXZSBkb24ndCB1c2Ugc2VsZi5fc2tp
cHBlZF90ZXN0cyBhbmQgc2VsZi5fcGFzc2VkX3Rlc3RzIGFzIHdlCisgICAgICAgICMgb3ZlcnJp
ZGUgX0luc2VydEZhaWx1cmVTdW1tYXJpZXMuCisKKyAgICAgICAgIyBXZSB3YW50IHJlbGF0aXZl
IHBhdGhzIHRvIExheW91dFRlc3Qgcm9vdCBmb3IgSlNPTiBvdXRwdXQuCisgICAgICAgIHBhdGhf
dG9fbmFtZSA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3RvX2xheW91dF90ZXN0X3Jvb3QKKyAg
ICAgICAgc2VsZi5fcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICBzZWxm
Ll9mYWlsdXJlcyA9IGRpY3QoCisgICAgICAgICAgICAocGF0aF90b19uYW1lKHRlc3QpLCB0ZXN0
X2ZhaWx1cmVzLmRldGVybWluZV9yZXN1bHRfdHlwZShmYWlsdXJlcykpCisgICAgICAgICAgICBm
b3IgKHRlc3QsIGZhaWx1cmVzKSBpbiByZXN1bHRfc3VtbWFyeS5mYWlsdXJlcy5pdGVyaXRlbXMo
KSkKKyAgICAgICAgc2VsZi5fYWxsX3Rlc3RzID0gW3BhdGhfdG9fbmFtZSh0ZXN0KSBmb3IgdGVz
dCBpbiBhbGxfdGVzdHNdCisgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IGRpY3QoCisgICAg
ICAgICAgICAocGF0aF90b19uYW1lKHRlc3RfdHVwbGUuZmlsZW5hbWUpLCB0ZXN0X3R1cGxlLnRl
c3RfcnVuX3RpbWUpCisgICAgICAgICAgICBmb3IgdGVzdF90dXBsZSBpbiB0ZXN0X3RpbWluZ3Mp
CisKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQorCisgICAgZGVmIF9nZXRf
cGF0aF9yZWxhdGl2ZV90b19sYXlvdXRfdGVzdF9yb290KHNlbGYsIHRlc3QpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IHJlbGF0aXZlIHRvIHRoZSBsYXlvdXQgdGVz
dCByb290LgorICAgICAgICBGb3IgZXhhbXBsZSwgZm9yOgorICAgICAgICAgIHNyYy90aGlyZF9w
YXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb28uaHRtbAorICAgICAgICBXZSB3
b3VsZCByZXR1cm4KKyAgICAgICAgICBmYXN0L2Zvcm1zL2Zvby5odG1sCisgICAgICAgICIiIgor
ICAgICAgICBpbmRleCA9IHRlc3QuZmluZChzZWxmLkxBWU9VVF9URVNUU19QQVRIKQorICAgICAg
ICBpZiBpbmRleCBpcyBub3QgLTE6CisgICAgICAgICAgICBpbmRleCArPSBsZW4oc2VsZi5MQVlP
VVRfVEVTVFNfUEFUSCkKKworICAgICAgICBpZiBpbmRleCBpcyAtMToKKyAgICAgICAgICAgICMg
QWxyZWFkeSBhIHJlbGF0aXZlIHBhdGguCisgICAgICAgICAgICByZWxhdGl2ZVBhdGggPSB0ZXN0
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWxhdGl2ZVBhdGggPSB0ZXN0W2luZGV4ICsg
MTpdCisKKyAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSB1bml4LXN0eWxlLgorICAg
ICAgICByZXR1cm4gcmVsYXRpdmVQYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorCisgICAgIyBvdmVy
cmlkZQorICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgorICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCisgICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCisKKyAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCisgICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKKworICAgICAgICAjIHZlcnNpb24g
Mi0+MworICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKKyAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6CisgICAgICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6CisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQorICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KKyAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQorCisgICAgIyBvdmVycmlkZQorICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgorICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKKworICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3Vs
dHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBsZW4oKHNldChzdW1tYXJ5LmZhaWx1cmVzLmtl
eXMoKSkgfAorICAgICAgICAgICAgICAgIHN1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25bdGVz
dF9leHBlY3RhdGlvbnMuU0tJUF0pICYKKyAgICAgICAgICAgICAgICBzdW1tYXJ5LnRlc3RzX2J5
X3RpbWVsaW5lW3Rlc3RfZXhwZWN0YXRpb25zLk5PV10pLAorICAgICAgICAgICAgc2VsZi5GSVhB
QkxFX0NPVU5UKQorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3Vs
dHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBzZWxmLl9nZXRfZmFpbHVyZV9zdW1tYXJ5X2Vu
dHJ5KHRlc3RfZXhwZWN0YXRpb25zLk5PVyksCisgICAgICAgICAgICBzZWxmLkZJWEFCTEUpCisg
ICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRl
ciwKKyAgICAgICAgICAgIGxlbihzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X3Rlc3RzX3dpdGhfdGlt
ZWxpbmUoCisgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTk9XKSksIHNlbGYuQUxM
X0ZJWEFCTEVfQ09VTlQpCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3Qo
cmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIHNlbGYuX2dldF9mYWlsdXJlX3N1bW1h
cnlfZW50cnkodGVzdF9leHBlY3RhdGlvbnMuREVGRVIpLAorICAgICAgICAgICAgc2VsZi5ERUZF
UlJFRCkKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zv
cl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fZ2V0X2ZhaWx1cmVfc3VtbWFyeV9lbnRyeSh0
ZXN0X2V4cGVjdGF0aW9ucy5XT05URklYKSwKKyAgICAgICAgICAgIHNlbGYuV09OVEZJWCkKKwor
ICAgICMgb3ZlcnJpZGUKKyAgICBkZWYgX25vcm1hbGl6ZV9yZXN1bHRzX2pzb24oc2VsZiwgdGVz
dCwgdGVzdF9uYW1lLCB0ZXN0cyk6CisgICAgICAgIHN1cGVyKEpTT05MYXlvdXRSZXN1bHRzR2Vu
ZXJhdG9yLCBzZWxmKS5fbm9ybWFsaXplX3Jlc3VsdHNfanNvbigKKyAgICAgICAgICAgIHRlc3Qs
IHRlc3RfbmFtZSwgdGVzdHMpCisKKyAgICAgICAgIyBSZW1vdmUgdGVzdHMgdGhhdCBkb24ndCBl
eGlzdCBhbnltb3JlLgorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGls
cy5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3RfbmFtZSkKKyAgICAgICAgZnVsbF9wYXRoID0gb3Mu
cGF0aC5ub3JtcGF0aChmdWxsX3BhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhm
dWxsX3BhdGgpOgorICAgICAgICAgICAgZGVsIHRlc3RzW3Rlc3RfbmFtZV0KKworICAgIGRlZiBf
Z2V0X2ZhaWx1cmVfc3VtbWFyeV9lbnRyeShzZWxmLCB0aW1lbGluZSk6CisgICAgICAgICIiIkNy
ZWF0ZXMgYSBzdW1tYXJ5IG9iamVjdCB0byBpbnNlcnQgaW50byB0aGUgSlNPTi4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIHN1bW1hcnkgICBSZXN1bHRTdW1tYXJ5IG9iamVjdCB3aXRoIHRl
c3QgcmVzdWx0cworICAgICAgICAgIHRpbWVsaW5lICBjdXJyZW50IHRlc3RfZXhwZWN0YXRpb25z
IHRpbWVsaW5lIHRvIGJ1aWxkIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgICAgICAoZS5nLiwg
dGVzdF9leHBlY3RhdGlvbnMuTk9XLCBldGMuKQorICAgICAgICAiIiIKKyAgICAgICAgZW50cnkg
PSB7fQorICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0X3N1bW1hcnkKKyAgICAgICAgdGlt
ZWxpbmVfdGVzdHMgPSBzdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXQorICAgICAg
ICBlbnRyeVtzZWxmLlNLSVBfUkVTVUxUXSA9IGxlbigKKyAgICAgICAgICAgIHN1bW1hcnkudGVz
dHNfYnlfZXhwZWN0YXRpb25bdGVzdF9leHBlY3RhdGlvbnMuU0tJUF0gJgorICAgICAgICAgICAg
dGltZWxpbmVfdGVzdHMpCisgICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNVTFRdID0gbGVuKAor
ICAgICAgICAgICAgc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9u
cy5QQVNTXSAmCisgICAgICAgICAgICB0aW1lbGluZV90ZXN0cykKKyAgICAgICAgZm9yIGZhaWx1
cmVfdHlwZSBpbiBzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uLmtleXMoKToKKyAgICAgICAg
ICAgIGlmIGZhaWx1cmVfdHlwZSBub3QgaW4gc2VsZi5GQUlMVVJFX1RPX0NIQVI6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50ID0gbGVuKHN1bW1hcnkudGVzdHNf
YnlfZXhwZWN0YXRpb25bZmFpbHVyZV90eXBlXSAmCisgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lbGluZV90ZXN0cykKKyAgICAgICAgICAgIGVudHJ5W3NlbGYuRkFJTFVSRV9UT19DSEFSW2Zh
aWx1cmVfdHlwZV1dID0gY291bnQKKyAgICAgICAgcmV0dXJuIGVudHJ5CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQzNjkwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtMCwwICsxLDQxOCBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJs
bGliMgoraW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9u
cworCitzeXMucGF0aC5hcHBlbmQocGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFy
dHknLCAnV2ViS2l0JywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnV2ViS2l0VG9vbHMnKSkgCitpbXBvcnQgc2ltcGxlanNvbgorCisKK2NsYXNzIEpTT05SZXN1
bHRzR2VuZXJhdG9yKG9iamVjdCk6CisKKyAgICBNQVhfTlVNQkVSX09GX0JVSUxEX1JFU1VMVFNf
VE9fTE9HID0gNzUwCisgICAgIyBNaW4gdGltZSAoc2Vjb25kcykgdGhhdCB3aWxsIGJlIGFkZGVk
IHRvIHRoZSBKU09OLgorICAgIE1JTl9USU1FID0gMQorICAgIEpTT05fUFJFRklYID0gIkFERF9S
RVNVTFRTKCIKKyAgICBKU09OX1NVRkZJWCA9ICIpOyIKKyAgICBQQVNTX1JFU1VMVCA9ICJQIgor
ICAgIFNLSVBfUkVTVUxUID0gIlgiCisgICAgTk9fREFUQV9SRVNVTFQgPSAiTiIKKyAgICBWRVJT
SU9OID0gMworICAgIFZFUlNJT05fS0VZID0gInZlcnNpb24iCisgICAgUkVTVUxUUyA9ICJyZXN1
bHRzIgorICAgIFRJTUVTID0gInRpbWVzIgorICAgIEJVSUxEX05VTUJFUlMgPSAiYnVpbGROdW1i
ZXJzIgorICAgIFdFQktJVF9TVk4gPSAid2Via2l0UmV2aXNpb24iCisgICAgQ0hST01FX1NWTiA9
ICJjaHJvbWVSZXZpc2lvbiIKKyAgICBUSU1FID0gInNlY29uZHNTaW5jZUVwb2NoIgorICAgIFRF
U1RTID0gInRlc3RzIgorCisgICAgRklYQUJMRV9DT1VOVCA9ICJmaXhhYmxlQ291bnQiCisgICAg
RklYQUJMRSA9ICJmaXhhYmxlQ291bnRzIgorICAgIEFMTF9GSVhBQkxFX0NPVU5UID0gImFsbEZp
eGFibGVDb3VudCIKKworICAgICMgTm90ZSB0aGF0IHdlIG9taXQgdGVzdF9leHBlY3RhdGlvbnMu
RkFJTCBmcm9tIHRoaXMgbGlzdCBiZWNhdXNlCisgICAgIyBpdCBzaG91bGQgbmV2ZXIgc2hvdyB1
cCAoaXQncyBhIGxlZ2FjeSBpbnB1dCBleHBlY3RhdGlvbiwgbmV2ZXIKKyAgICAjIGFuIG91dHB1
dCBleHBlY3RhdGlvbikuCisgICAgRkFJTFVSRV9UT19DSEFSID0ge3Rlc3RfZXhwZWN0YXRpb25z
LkNSQVNIOiAiQyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRJ
TUVPVVQ6ICJUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuSU1B
R0U6ICJJIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVEVYVDog
IkYiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5NSVNTSU5HOiAi
TyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFX1BMVVNf
VEVYVDogIloifQorICAgIEZBSUxVUkVfQ0hBUlMgPSBGQUlMVVJFX1RPX0NIQVIudmFsdWVzKCkK
KworICAgIFJFU1VMVFNfRklMRU5BTUUgPSAicmVzdWx0cy5qc29uIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgICAg
ICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAorICAgICAgICB0ZXN0
X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMsIGFsbF90ZXN0
cyk6CisgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQg
b2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQorICAgICAgICBpZiBpdCBpcyBub3QgZm91bmQgbG9j
YWxseS4KKworICAgICAgICBBcmdzCisgICAgICAgICAgYnVpbGRlcl9uYW1lOiB0aGUgYnVpbGRl
ciBuYW1lIChlLmcuIFdlYmtpdCkuCisgICAgICAgICAgYnVpbGRfbmFtZTogdGhlIGJ1aWxkIG5h
bWUgKGUuZy4gd2Via2l0LXJlbCkuCisgICAgICAgICAgYnVpbGRfbnVtYmVyOiB0aGUgYnVpbGQg
bnVtYmVyLgorICAgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGg6IEFic29sdXRlIHBhdGgg
dG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICAgICAgICAgICAgICByZXN1bHRzIGpz
b24gZmlsZS4KKyAgICAgICAgICBidWlsZGVyX2Jhc2VfdXJsOiB0aGUgVVJMIHdoZXJlIHdlIGhh
dmUgdGhlIGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgICB0ZXN0X3RpbWluZ3M6IE1h
cCBvZiB0ZXN0IG5hbWUgdG8gYSB0ZXN0X3J1bi10aW1lLgorICAgICAgICAgIGZhaWx1cmVzOiBN
YXAgb2YgdGVzdCBuYW1lIHRvIGEgZmFpbHVyZSB0eXBlIChvZiB0ZXN0X2V4cGVjdGF0aW9ucyku
CisgICAgICAgICAgcGFzc2VkX3Rlc3RzOiBBIHNldCBjb250YWluaW5nIGFsbCB0aGUgcGFzc2Vk
IHRlc3RzLgorICAgICAgICAgIHNraXBwZWRfdGVzdHM6IEEgc2V0IGNvbnRhaW5pbmcgYWxsIHRo
ZSBza2lwcGVkIHRlc3RzLgorICAgICAgICAgIGFsbF90ZXN0czogTGlzdCBvZiBhbGwgdGhlIHRl
c3RzIHRoYXQgd2VyZSBydW4uICBUaGlzIHNob3VsZCBub3QKKyAgICAgICAgICAgICAgaW5jbHVk
ZSBza2lwcGVkIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYnVpbGRlcl9uYW1l
ID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWlsZF9uYW1lCisg
ICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgorICAgICAgICBzZWxmLl9i
dWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAorICAgICAgICBzZWxmLl9yZXN1bHRz
X2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLAorICAgICAg
ICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3Mg
PSB0ZXN0X3RpbWluZ3MKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSBmYWlsdXJlcworICAgICAg
ICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRfdGVzdHMKKyAgICAgICAgc2VsZi5fc2tpcHBl
ZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKKyAgICAgICAgc2VsZi5fYWxsX3Rlc3RzID0gYWxsX3Rl
c3RzCisKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV9qc29uX291dHB1dChzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGVzIHRoZSBKU09O
IG91dHB1dCBmaWxlLiIiIgorICAgICAgICBqc29uID0gc2VsZi5fZ2V0X2pzb24oKQorICAgICAg
ICBpZiBqc29uOgorICAgICAgICAgICAgcmVzdWx0c19maWxlID0gb3BlbihzZWxmLl9yZXN1bHRz
X2ZpbGVfcGF0aCwgInciKQorICAgICAgICAgICAgcmVzdWx0c19maWxlLndyaXRlKGpzb24pCisg
ICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xvc2UoKQorCisgICAgZGVmIF9nZXRfc3ZuX3Jldmlz
aW9uKHNlbGYsIGluX2RpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3Zu
IHJldmlzaW9uIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgaW5fZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5IHdoZXJlIHN2biBpcyB0byBiZSBydW4u
CisgICAgICAgICIiIgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwg
ImluZm8iLCAiLS14bWwiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9
aW5fZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPShz
eXMucGxhdGZvcm0gPT0gJ3dpbjMyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICB0cnk6
CisgICAgICAgICAgICBkb20gPSB4bWwuZG9tLm1pbmlkb20ucGFyc2VTdHJpbmcob3V0cHV0KQor
ICAgICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZW50cnknKVswXS5n
ZXRBdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgJ3JldmlzaW9uJykKKyAgICAgICAgZXhjZXB0
IHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIiIKKwor
ICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKKyAgICAgICAgIiIiUmVh
ZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgUmV0dXJucyAo
YXJjaGl2ZWRfcmVzdWx0cywgZXJyb3IpIHR1cGxlIHdoZXJlIGVycm9yIGlzIE5vbmUgaWYgcmVz
dWx0cworICAgICAgICB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkLgorICAgICAgICAiIiIKKyAgICAg
ICAgcmVzdWx0c19qc29uID0ge30KKyAgICAgICAgb2xkX3Jlc3VsdHMgPSBOb25lCisgICAgICAg
IGVycm9yID0gTm9uZQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3Jlc3VsdHNf
ZmlsZV9wYXRoKToKKyAgICAgICAgICAgIG9sZF9yZXN1bHRzX2ZpbGUgPSBvcGVuKHNlbGYuX3Jl
c3VsdHNfZmlsZV9wYXRoLCAiciIpCisgICAgICAgICAgICBvbGRfcmVzdWx0cyA9IG9sZF9yZXN1
bHRzX2ZpbGUucmVhZCgpCisgICAgICAgIGVsaWYgc2VsZi5fYnVpbGRlcl9iYXNlX3VybDoKKyAg
ICAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgSlNPTiBmaWxlIG9uIHRo
ZSBidWlsZGJvdCBzZXJ2ZXIuCisgICAgICAgICAgICByZXN1bHRzX2ZpbGVfdXJsID0gKHNlbGYu
X2J1aWxkZXJfYmFzZV91cmwgKworICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgKyAi
LyIgKyBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJM
b2NhbCByZXN1bHRzLmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJpbmcgIgorICAgICAg
ICAgICAgICAgICJpdCBvZmYgdGhlIGFyY2hpdmUgYXQgIiArIHJlc3VsdHNfZmlsZV91cmwpCisK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSB1cmxsaWIy
LnVybG9wZW4ocmVzdWx0c19maWxlX3VybCkKKyAgICAgICAgICAgICAgICBpbmZvID0gcmVzdWx0
c19maWxlLmluZm8oKQorICAgICAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gcmVzdWx0c19maWxl
LnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBodHRwX2Vycm9y
OgorICAgICAgICAgICAgICAgICMgQSBub24tNHh4IHN0YXR1cyBjb2RlIG1lYW5zIHRoZSBib3Qg
aXMgaG9zZWQgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgIyBhbmQgd2UgY2FuJ3Qg
Z3JhYiB0aGUgcmVzdWx0cy5qc29uIGZpbGUgb2ZmIG9mIGl0LgorICAgICAgICAgICAgICAgIGlm
IChodHRwX2Vycm9yLmNvZGUgPCA0MDAgYW5kIGh0dHBfZXJyb3IuY29kZSA+PSA1MDApOgorICAg
ICAgICAgICAgICAgICAgICBlcnJvciA9IGh0dHBfZXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCB1
cmxsaWIyLlVSTEVycm9yLCB1cmxfZXJyb3I6CisgICAgICAgICAgICAgICAgZXJyb3IgPSB1cmxf
ZXJyb3IKKworICAgICAgICBpZiBvbGRfcmVzdWx0czoKKyAgICAgICAgICAgICMgU3RyaXAgdGhl
IHByZWZpeCBhbmQgc3VmZml4IHNvIHdlIGNhbiBnZXQgdGhlIGFjdHVhbCBKU09OIG9iamVjdC4K
KyAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gb2xkX3Jlc3VsdHNbbGVuKHNlbGYuSlNPTl9QUkVG
SVgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4ob2xkX3Jlc3Vs
dHMpIC0gbGVuKHNlbGYuSlNPTl9TVUZGSVgpXQorCisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgcmVzdWx0c19qc29uID0gc2ltcGxlanNvbi5sb2FkcyhvbGRfcmVzdWx0cykKKyAg
ICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJyZXN1bHRz
Lmpzb24gd2FzIG5vdCB2YWxpZCBKU09OLiBDbG9iYmVyaW5nLiIpCisgICAgICAgICAgICAgICAg
IyBUaGUgSlNPTiBmaWxlIGlzIG5vdCB2YWxpZCBKU09OLiBKdXN0IGNsb2JiZXIgdGhlIHJlc3Vs
dHMuCisgICAgICAgICAgICAgICAgcmVzdWx0c19qc29uID0ge30KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ09sZCBKU09OIHJlc3VsdHMgZG8gbm90IGV4aXN0LiBT
dGFydGluZyBmcmVzaC4nKQorICAgICAgICAgICAgcmVzdWx0c19qc29uID0ge30KKworICAgICAg
ICByZXR1cm4gcmVzdWx0c19qc29uLCBlcnJvcgorCisgICAgZGVmIF9nZXRfanNvbihzZWxmKToK
KyAgICAgICAgIiIiR2V0cyB0aGUgcmVzdWx0cyBmb3IgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiIi
IgorICAgICAgICByZXN1bHRzX2pzb24sIGVycm9yID0gc2VsZi5fZ2V0X2FyY2hpdmVkX2pzb25f
cmVzdWx0cygpCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgIyBJZiB0aGVyZSB3YXMg
YW4gZXJyb3IgZG9uJ3Qgd3JpdGUgYSByZXN1bHRzLmpzb24KKyAgICAgICAgICAgICMgZmlsZSBh
dCBhbGwgYXMgaXQgd291bGQgbG9zZSBhbGwgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBib3QuCisg
ICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJBcmNoaXZlIGRpcmVjdG9yeSBpcyBpbmFjY2Vzc2li
bGUuIE5vdCBtb2RpZnlpbmcgIgorICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSBy
ZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQorICAgICAgICBp
ZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAg
ICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSBy
ZXN1bHRzLmpzb24gZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9u
YW1lKQorCisgICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVz
dWx0c19qc29uKQorCisgICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29u
OgorICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCisgICAgICAgICAg
ICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQorCisgICAgICAg
IHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQorCisgICAg
ICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisK
KyAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxk
ZXIpCisKKyAgICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0
IHR5cGUgYW5kIHRpbWUuCisgICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxm
LlRFU1RTXQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5p
dGVya2V5cygpKQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtl
eXMoKSkKKyAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6CisgICAgICAgICAg
ICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCisKKyAgICAg
ICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2Rpbmcu
CisgICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNl
cGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyBy
ZXN1bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgKKworICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVf
c3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgorICAgICAgICAiIiJJbnNlcnRz
IGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgorICAgICAg
ICBUaGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVz
dHMgYW5kCisgICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFC
TEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UCisgICAgICAgIGVudHJpZXMuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRh
aW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRl
ci4KKyAgICAgICAgIiIiCisgICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhh
dCBmYWlsZWQuCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0
c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygp
KSB8IHNlbGYuX3NraXBwZWRfdGVzdHMpLAorICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5U
KQorCisgICAgICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9u
YXJ5LgorICAgICAgICBlbnRyeSA9IHt9CisgICAgICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRd
ID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCisgICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNV
TFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykKKyAgICAgICAgZ2V0ID0gZW50cnkuZ2V0Cisg
ICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFsdWVzKCk6CisgICAg
ICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVd
CisgICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkg
KyAxCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGlj
dGlvbmFyeS4KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRz
X2Zvcl9idWlsZGVyLCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLkZJWEFCTEUpCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwg
dGhlIHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCisgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxl
bihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKKyAgICAgICAgICAgIHNl
bGYuQUxMX0ZJWEFCTEVfQ09VTlQpCisKKyAgICBkZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwga2V5KToKKyAgICAgICAgIiIiSW5z
ZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVz
dWx0cyBmb3IKKyAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1
Y2ggbGlzdCBleGlzdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9i
dWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAg
ICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3Ry
aW5nIHRvIGluc2VydCBpbnRvIHRoZSBsaXN0LgorICAgICAgICAgIGtleTogS2V5IGluIHJlc3Vs
dHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgorICAgICAgICAiIiIK
KyAgICAgICAgaWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6CisgICAgICAgICAgICByYXdf
bGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmF3X2xpc3QgPSBbXQorCisgICAgICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQorICAg
ICAgICByYXdfbGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxU
U19UT19MT0ddCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0CisK
KyAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNv
ZGVkX3Jlc3VsdHMpOgorICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1s
ZW5ndGggZW5jb2RlZCByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgaXRlbTog
U3RyaW5nIG9yIG51bWJlciB0byBpbnNlcnQuCisgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBy
dW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCisgICAg
ICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KKyAgICAgICAgIiIiCisg
ICAgICAgIGlmIGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0
c1swXVsxXToKKyAgICAgICAgICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBd
CisgICAgICAgICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERf
UkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0g
bnVtX3Jlc3VsdHMgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFVzZSBhIGxpc3Qg
aW5zdGVhZCBvZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZyBzaW5jZQorICAg
ICAgICAgICAgIyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUgY29uY2lzZS4KKyAg
ICAgICAgICAgIGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1dKQorCisgICAgZGVm
IF9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKKyAg
ICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJl
ciwgY3VycmVudCB0aW1lIGV0YykKKyAgICAgICAgaW50byB0aGUgSlNPTi4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmlu
ZyB0aGUgdGVzdCByZXN1bHRzIGZvcgorICAgICAgICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJV
SUxEX05VTUJFUlMpCisKKyAgICAgICAgcGF0aF90b193ZWJraXQgPSBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dlYkNvcmUnKQorICAgICAgICBzZWxmLl9p
bnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAg
ICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fd2Via2l0KSwKKyAgICAgICAgICAgIHNl
bGYuV0VCS0lUX1NWTikKKworICAgICAgICBwYXRoX3RvX2Nocm9tZV9iYXNlID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgpCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNp
b24ocGF0aF90b19jaHJvbWVfYmFzZSksCisgICAgICAgICAgICBzZWxmLkNIUk9NRV9TVk4pCisK
KyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWls
ZGVyLAorICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKKyAgICAgICAgICAgIHNlbGYuVElN
RSkKKworICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNlbGYsIHRlc3RfbmFt
ZSwgdGVzdHMpOgorICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGggaXRzIHJlc3Vs
dHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRlc3QgcmVzdWx0IGVudHJpZXMuCisg
ICAgICAgICIiIgorCisgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJhdG9yLlBBU1Nf
UkVTVUxUCisgICAgICAgIHRpbWUgPSAwCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiBz
ZWxmLl9hbGxfdGVzdHM6CisgICAgICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0c0dlbmVyYXRv
ci5OT19EQVRBX1JFU1VMVAorCisgICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl9mYWlsdXJl
czoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW3NlbGYuX2ZhaWx1
cmVzW3Rlc3RfbmFtZV1dCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RfdGlt
aW5nczoKKyAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0byBnZXQgdGltZSBpbiBzZWNvbmRz
LgorICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0X3RpbWluZ3NbdGVzdF9uYW1lXSkK
KworICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgorICAgICAgICAgICAgdGVzdHNb
dGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKCkKKworICAg
ICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0
ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5SRVNVTFRTXSkKKyAg
ICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHRpbWUsIHRoaXNUZXN0
W3NlbGYuVElNRVNdKQorICAgICAgICBzZWxmLl9ub3JtYWxpemVfcmVzdWx0c19qc29uKHRoaXNU
ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQorCisgICAgZGVmIF9jb252ZXJ0X2pzb25fdG9fY3VycmVu
dF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6CisgICAgICAgICIiIklmIHRoZSBKU09OIGRv
ZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRvIHRoZQorICAg
ICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9uIG51bWJlci4K
KyAgICAgICAgIiIiCisgICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJlc3VsdHNfanNv
biBhbmQKKyAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9PSBzZWxm
LlZFUlNJT04pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVzdWx0c19qc29uW3Nl
bGYuVkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCisKKyAgICBkZWYgX2NyZWF0ZV9yZXN1bHRz
X2FuZF90aW1lc19qc29uKHNlbGYpOgorICAgICAgICByZXN1bHRzX2FuZF90aW1lcyA9IHt9Cisg
ICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQorICAgICAgICByZXN1
bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCisgICAgICAgIHJldHVybiByZXN1bHRzX2Fu
ZF90aW1lcworCisgICAgZGVmIF9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9qc29uKHNlbGYp
OgorICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0ge30KKyAgICAgICAgcmVzdWx0c19mb3Jf
YnVpbGRlcltzZWxmLlRFU1RTXSA9IHt9CisgICAgICAgIHJldHVybiByZXN1bHRzX2Zvcl9idWls
ZGVyCisKKyAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKHNl
bGYsIGVuY29kZWRfbGlzdCk6CisgICAgICAgICIiIlJlbW92ZXMgaXRlbXMgZnJvbSB0aGUgcnVu
LWxlbmd0aCBlbmNvZGVkIGxpc3QgYWZ0ZXIgdGhlIGZpbmFsCisgICAgICAgIGl0ZW0gdGhhdCBl
eGNlZWRzIHRoZSBtYXggbnVtYmVyIG9mIGJ1aWxkcyB0byB0cmFjay4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMu
IEFuIGFycmF5IG9mIGFycmF5cywgZS5nLgorICAgICAgICAgICAgICBbWzMsJ0EnXSxbMSwnUSdd
XSBlbmNvZGVzIEFBQVEuCisgICAgICAgICIiIgorICAgICAgICBudW1fYnVpbGRzID0gMAorICAg
ICAgICBpbmRleCA9IDAKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBlbmNvZGVkX2xpc3Q6CisgICAg
ICAgICAgICBudW1fYnVpbGRzID0gbnVtX2J1aWxkcyArIHJlc3VsdFswXQorICAgICAgICAgICAg
aW5kZXggPSBpbmRleCArIDEKKyAgICAgICAgICAgIGlmIG51bV9idWlsZHMgPiBzZWxmLk1BWF9O
VU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZWRfbGlzdFs6aW5kZXhdCisgICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3QKKworICAgIGRl
ZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKToK
KyAgICAgICAgIiIiIFBydW5lIHRlc3RzIHdoZXJlIGFsbCBydW5zIHBhc3Mgb3IgdGVzdHMgdGhh
dCBubyBsb25nZXIgZXhpc3QgYW5kCisgICAgICAgIHRydW5jYXRlIGFsbCByZXN1bHRzIHRvIG1h
eE51bWJlck9mQnVpbGRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdDogUmVzdWx0
c0FuZFRpbWVzIG9iamVjdCBmb3IgdGhpcyB0ZXN0LgorICAgICAgICAgIHRlc3RfbmFtZTogTmFt
ZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgICB0ZXN0czogVGhlIEpTT04gb2JqZWN0IHdpdGggYWxs
IHRoZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAg
IHRlc3Rbc2VsZi5SRVNVTFRTXSA9IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJf
b2ZfYnVpbGRzKAorICAgICAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdKQorICAgICAgICB0ZXN0
W3NlbGYuVElNRVNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWls
ZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYuVElNRVNdKQorCisgICAgICAgIGlzX2FsbF9wYXNz
ID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYuUkVTVUxUU10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlBBU1Nf
UkVTVUxUKQorICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNlbGYuX2lzX3Jlc3VsdHNfYWxsX29m
X3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAorICAgICAgICAgICAgc2VsZi5OT19EQVRBX1JFU1VM
VCkKKyAgICAgICAgbWF4X3RpbWUgPSBtYXgoW3RpbWVbMV0gZm9yIHRpbWUgaW4gdGVzdFtzZWxm
LlRJTUVTXV0pCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIHBhc3Nlcy9uby1kYXRhIGZyb20gdGhl
IHJlc3VsdHMgdG8gcmVkdWNlIG5vaXNlIGFuZAorICAgICAgICAjIGZpbGVzaXplLiBJZiBhIHRl
c3QgcGFzc2VzIGV2ZXJ5IHJ1biwgYnV0IHRha2VzID4gTUlOX1RJTUUgdG8gcnVuLAorICAgICAg
ICAjIGRvbid0IHRocm93IGF3YXkgdGhlIGRhdGEuCisgICAgICAgIGlmIGlzX2FsbF9ub19kYXRh
IG9yIChpc19hbGxfcGFzcyBhbmQgbWF4X3RpbWUgPD0gc2VsZi5NSU5fVElNRSk6CisgICAgICAg
ICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQorCisgICAgZGVmIF9pc19yZXN1bHRzX2FsbF9vZl90
eXBlKHNlbGYsIHJlc3VsdHMsIHR5cGUpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgYWxs
IHRoZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZQorICAgICAgICAoZS5nLiBhbGwgcGFz
c2VzKS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihyZXN1bHRzKSA9PSAxIGFuZCByZXN1bHRzWzBd
WzFdID09IHR5cGUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2xpZ2h0dHBkLmNvbmYgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMTUwZGQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9saWdodHRwZC5jb25mCkBAIC0wLDAgKzEsODkgQEAKK3NlcnZlci50YWcgICAgICAgICAg
ICAgICAgICA9ICJMaWdodFRQRC8xLjQuMTkgKFdpbjMyKSIKK3NlcnZlci5tb2R1bGVzICAgICAg
ICAgICAgICA9ICggIm1vZF9hY2Nlc3Nsb2ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibW9kX2FsaWFzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9j
Z2kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3Jld3JpdGUiICkKKwor
IyBkZWZhdWx0IGRvY3VtZW50IHJvb3QgcmVxdWlyZWQKK3NlcnZlci5kb2N1bWVudC1yb290ID0g
Ii4iCisKKyMgZmlsZXMgdG8gY2hlY2sgZm9yIGlmIC4uLi8gaXMgcmVxdWVzdGVkCitpbmRleC1m
aWxlLm5hbWVzICAgICAgICAgICAgPSAoICJpbmRleC5waHAiLCAiaW5kZXgucGwiLCAiaW5kZXgu
Y2dpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4Lmh0bWwiLCAiaW5k
ZXguaHRtIiwgImRlZmF1bHQuaHRtIiApCisjIG1pbWV0eXBlIG1hcHBpbmcKK21pbWV0eXBlLmFz
c2lnbiAgICAgICAgICAgICA9ICgKKyAgIi5naWYiICAgICAgICAgID0+ICAgICAgImltYWdlL2dp
ZiIsCisgICIuanBnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5qcGVnIiAg
ICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLnBuZyIgICAgICAgICAgPT4gICAgICAi
aW1hZ2UvcG5nIiwKKyAgIi5zdmciICAgICAgICAgID0+ICAgICAgImltYWdlL3N2Zyt4bWwiLAor
ICAiLmNzcyIgICAgICAgICAgPT4gICAgICAidGV4dC9jc3MiLAorICAiLmh0bWwiICAgICAgICAg
PT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5odG0iICAgICAgICAgID0+ICAgICAgInRleHQvaHRt
bCIsCisgICIueGh0bWwiICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAor
ICAiLmpzIiAgICAgICAgICAgPT4gICAgICAidGV4dC9qYXZhc2NyaXB0IiwKKyAgIi5sb2ciICAg
ICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNvbmYiICAgICAgICAgPT4gICAgICAi
dGV4dC9wbGFpbiIsCisgICIudGV4dCIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAg
Ii50eHQiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmR0ZCIgICAgICAgICAg
PT4gICAgICAidGV4dC94bWwiLAorICAiLnhtbCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwi
LAorICAiLm1hbmlmZXN0IiAgICAgPT4gICAgICAidGV4dC9jYWNoZS1tYW5pZmVzdCIsCisgKQor
CisjIFVzZSB0aGUgIkNvbnRlbnQtVHlwZSIgZXh0ZW5kZWQgYXR0cmlidXRlIHRvIG9idGFpbiBt
aW1lIHR5cGUgaWYgcG9zc2libGUKK21pbWV0eXBlLnVzZS14YXR0ciAgICAgICAgICA9ICJlbmFi
bGUiCisKKyMjCisjIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIG5vdCBiZSBoYW5kbGUgdmlhIHN0
YXRpYy1maWxlIHRyYW5zZmVyCisjCisjIC5waHAsIC5wbCwgLmZjZ2kgYXJlIG1vc3Qgb2Z0ZW4g
aGFuZGxlZCBieSBtb2RfZmFzdGNnaSBvciBtb2RfY2dpCitzdGF0aWMtZmlsZS5leGNsdWRlLWV4
dGVuc2lvbnMgPSAoICIucGhwIiwgIi5wbCIsICIuY2dpIiApCisKK3NlcnZlci5iaW5kID0gImxv
Y2FsaG9zdCIKK3NlcnZlci5wb3J0ID0gODAwMQorCisjIyB2aXJ0dWFsIGRpcmVjdG9yeSBsaXN0
aW5ncworZGlyLWxpc3RpbmcuYWN0aXZhdGUgICAgICAgID0gImVuYWJsZSIKKyNkaXItbGlzdGlu
Zy5lbmNvZGluZyAgICAgICA9ICJpc28tODg1OS0yIgorI2Rpci1saXN0aW5nLmV4dGVybmFsLWNz
cyAgID0gInN0eWxlL29sZHN0eWxlLmNzcyIKKworIyMgZW5hYmxlIGRlYnVnZ2luZworI2RlYnVn
LmxvZy1yZXF1ZXN0LWhlYWRlciAgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVzcG9uc2UtaGVh
ZGVyICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlcXVlc3QtaGFuZGxpbmcgPSAiZW5hYmxlIgor
I2RlYnVnLmxvZy1maWxlLW5vdC1mb3VuZCAgID0gImVuYWJsZSIKKworIyMjIyBTU0wgZW5naW5l
Cisjc3NsLmVuZ2luZSAgICAgICAgICAgICAgICAgPSAiZW5hYmxlIgorI3NzbC5wZW1maWxlICAg
ICAgICAgICAgICAgID0gInNlcnZlci5wZW0iCisKKyMgUmV3cml0ZSBydWxlIGZvciB1dGYtOCBw
YXRoIHRlc3QgKExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL3V0ZjgtcGF0aC5odG1sKQorIyBT
ZWUgdGhlIGFwYWNoZSByZXdyaXRlIHJ1bGUgYXQgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkv
aW50ZXJjZXB0Ly5odGFjY2VzcworIyBSZXdyaXRlIHJ1bGUgZm9yIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvYXBwY2FjaGUvY3lyaWxsaWMtdXJpLmh0bWwuCisjIFNlZSB0aGUgYXBhY2hlIHJld3Jp
dGUgcnVsZSBhdAorIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9p
bnRlcmNlcHQvLmh0YWNjZXNzCit1cmwucmV3cml0ZS1vbmNlID0gKAorICAiXi91cmkvaW50ZXJj
ZXB0LyguKikiID0+ICIvdXJpL3Jlc291cmNlcy9wcmludC11cmkucGhwIiwKKyAgIl4vYXBwY2Fj
aGUvcmVzb3VyY2VzL2ludGVyY2VwdC8oLiopIiA9PiAiL2FwcGNhY2hlL3Jlc291cmNlcy9wcmlu
dC11cmkucGhwIgorKQorCisjIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
cmVzcG9uc2UtZW5jb2RpbmcuaHRtbCB1c2VzIGFuIGh0YWNjZXNzCisjIHRvIG92ZXJyaWRlIGNo
YXJzZXQgZm9yIHJlcGx5Mi50eHQsIHJlcGx5Mi54bWwsIGFuZCByZXBseTQudHh0LgorJEhUVFBb
InVybCJdID1+ICJeL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZXBseTIuKHR4dHx4bWwpIiB7
CisgIG1pbWV0eXBlLmFzc2lnbiA9ICgKKyAgICAiLnR4dCIgPT4gInRleHQvcGxhaW47IGNoYXJz
ZXQ9d2luZG93cy0xMjUxIiwKKyAgICAiLnhtbCIgPT4gInRleHQveG1sOyBjaGFyc2V0PXdpbmRv
d3MtMTI1MSIKKyAgKQorfQorJEhUVFBbInVybCJdID1+ICJeL3htbGh0dHByZXF1ZXN0L3Jlc291
cmNlcy9yZXBseTQudHh0IiB7CisgIG1pbWV0eXBlLmFzc2lnbiA9ICggIi50eHQiID0+ICJ0ZXh0
L3BsYWluOyBjaGFyc2V0PWtvaTgtciIgKQorfQorCisjIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
YXBwY2FjaGUvd3JvbmctY29udGVudC10eXBlLmh0bWwgdXNlcyBhbiBodGFjY2VzcworIyB0byBv
dmVycmlkZSBtaW1lIHR5cGUgZm9yIHdyb25nLWNvbnRlbnQtdHlwZS5tYW5pZmVzdC4KKyRIVFRQ
WyJ1cmwiXSA9fiAiXi9hcHBjYWNoZS9yZXNvdXJjZXMvd3JvbmctY29udGVudC10eXBlLm1hbmlm
ZXN0IiB7CisgIG1pbWV0eXBlLmFzc2lnbiA9ICggIi5tYW5pZmVzdCIgPT4gInRleHQvcGxhaW4i
ICkKK30KKworIyBBdXRvZ2VuZXJhdGVkIHRlc3Qtc3BlY2lmaWMgY29uZmlnIGZvbGxvd3MuCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYjMwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXRlcmVkX3N0cmVhbS5weQpAQCAtMCwwICsxLDk2IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisiIiIKK1BhY2thZ2UgdGhhdCBpbXBsZW1lbnRzIGEgc3RyZWFt
IHdyYXBwZXIgdGhhdCBoYXMgJ21ldGVycycgYXMgd2VsbCBhcworcmVndWxhciBvdXRwdXQuIEEg
J21ldGVyJyBpcyBhIHNpbmdsZSBsaW5lIG9mIHRleHQgdGhhdCBjYW4gYmUgZXJhc2VkCithbmQg
cmV3cml0dGVuIHJlcGVhdGVkbHksIHdpdGhvdXQgcHJvZHVjaW5nIG11bHRpcGxlIGxpbmVzIG9m
IG91dHB1dC4gSXQKK2NhbiBiZSB1c2VkIHRvIHByb2R1Y2UgZWZmZWN0cyBsaWtlIHByb2dyZXNz
IGJhcnMuCisiIiIKKworCitjbGFzcyBNZXRlcmVkU3RyZWFtOgorICAgICIiIlRoaXMgY2xhc3Mg
aXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN0cmVhbSB0aGF0IGFsbG93cyB5b3UgdG8gaW1wbGVtZW50
CisgICAgbWV0ZXJzLgorCisgICAgSXQgY2FuIGJlIHVzZWQgbGlrZSBhIHN0cmVhbSwgYnV0IGNh
bGxpbmcgdXBkYXRlKCkgd2lsbCBwcmludAorICAgIHRoZSBzdHJpbmcgZm9sbG93ZWQgYnkgb25s
eSBhIGNhcnJpYWdlIHJldHVybiAoaW5zdGVhZCBvZiBhIGNhcnJpYWdlCisgICAgcmV0dXJuIGFu
ZCBhIGxpbmUgZmVlZCkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHByb2dyZXNzIGJh
cnMgYW5kCisgICAgb3RoZXIgc29ydHMgb2YgbWV0ZXJzLiBOb3RlIHRoYXQgYW55dGhpbmcgd3Jp
dHRlbiBieSB1cGRhdGUoKSB3aWxsIGJlCisgICAgZXJhc2VkIGJ5IGEgc3Vic2VxdWVudCB1cGRh
dGUoKSwgd3JpdGUoKSwgb3IgZmx1c2goKS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2
ZXJib3NlLCBzdHJlYW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB2
ZXJib3NlOiB3aGV0aGVyIHVwZGF0ZSBpcyBhIG5vLW9wCisgICAgICAgICAgc3RyZWFtOiBvdXRw
dXQgc3RyZWFtIHRvIHdyaXRlIHRvCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9kaXJ0eSA9
IEZhbHNlCisgICAgICAgIHNlbGYuX3ZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgIHNlbGYuX3N0
cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxmLl9sYXN0X3VwZGF0ZSA9ICIiCisKKyAgICBkZWYg
d3JpdGUoc2VsZiwgdHh0KToKKyAgICAgICAgIiIiV3JpdGUgdGV4dCBkaXJlY3RseSB0byB0aGUg
c3RyZWFtLCBvdmVyd3JpdGluZyBhbmQgcmVzZXR0aW5nIHRoZQorICAgICAgICBtZXRlci4iIiIK
KyAgICAgICAgaWYgc2VsZi5fZGlydHk6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZSgiIikKKyAg
ICAgICAgICAgIHNlbGYuX2RpcnR5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRl
KHR4dCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgIiIiRmx1c2ggYW55IGJ1ZmZl
cmVkIG91dHB1dC4iIiIKKyAgICAgICAgc2VsZi5fc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiB1
cGRhdGUoc2VsZiwgc3RyKToKKyAgICAgICAgIiIiV3JpdGUgYW4gdXBkYXRlIHRvIHRoZSBzdHJl
YW0gdGhhdCB3aWxsIGdldCBvdmVyd3JpdHRlbiBieSB0aGUgbmV4dAorICAgICAgICB1cGRhdGUo
KSBvciBieSBhIHdyaXRlKCkuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIGZvciBwcm9ncmVzcyB1
cGRhdGVzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgaW4KKyAgICAgICAgdGhlIGxv
Zy4gTm90ZSB0aGF0IHZlcmJvc2UgZGlzYWJsZXMgdGhpcyByb3V0aW5lOyB3ZSBoYXZlIHRoaXMg
aW4KKyAgICAgICAgY2FzZSB3ZSBhcmUgbG9nZ2luZyBsb3RzIG9mIG91dHB1dCBhbmQgdGhlIHVw
ZGF0ZSgpcyB3aWxsIGdldCBsb3N0CisgICAgICAgIG9yIHdvbid0IHdvcmsgcHJvcGVybHkgKHR5
cGljYWxseSBiZWNhdXNlIHZlcmJvc2Ugc3RyZWFtcyBhcmUKKyAgICAgICAgcmVkaXJlY3RlZCB0
byBmaWxlcy4KKworICAgICAgICBUT0RPKGRwcmFua2UpOiBmaWd1cmUgb3V0IGlmIHRoZXJlIGlz
IGEgd2F5IHRvIGRldGVjdCBpZiB3ZSdyZSB3cml0aW5nCisgICAgICAgIHRvIGEgc3RyZWFtIHRo
YXQgaGFuZGxlcyBDUnMgY29ycmVjdGx5IChlLmcuLCB0ZXJtaW5hbHMpLiBUaGF0IG1pZ2h0Cisg
ICAgICAgIGJlIGEgY2xlYW5lciB3YXkgb2YgaGFuZGxpbmcgdGhpcy4KKyAgICAgICAgIiIiCisg
ICAgICAgIGlmIHNlbGYuX3ZlcmJvc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAj
IFByaW50IHRoZSBuZWNlc3NhcnkgbnVtYmVyIG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHBy
ZXZpb3VzCisgICAgICAgICMgbWVzc2FnZS4KKyAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJc
YiIgKiBsZW4oc2VsZi5fbGFzdF91cGRhdGUpKQorICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUo
c3RyKQorICAgICAgICBudW1fcmVtYWluaW5nID0gbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSAtIGxl
bihzdHIpCisgICAgICAgIGlmIG51bV9yZW1haW5pbmcgPiAwOgorICAgICAgICAgICAgc2VsZi5f
c3RyZWFtLndyaXRlKCIgIiAqIG51bV9yZW1haW5pbmcgKyAiXGIiICogbnVtX3JlbWFpbmluZykK
KyAgICAgICAgc2VsZi5fbGFzdF91cGRhdGUgPSBzdHIKKyAgICAgICAgc2VsZi5fZGlydHkgPSBU
cnVlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9wYXRoX3V0aWxzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGF0aF91dGlscy5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdlZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGF0
aF91dGlscy5weQpAQCAtMCwwICsxLDM5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIiIiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHV0aWxpdHkgbWV0aG9kcyBm
b3IgbWFuaXB1bGF0aW5nIHBhdGhzIGFuZAorZmlsZW5hbWVzIGZvciB0ZXN0IHJlc3VsdHMgYW5k
IGJhc2VsaW5lcy4gSXQgYWxzbyBjb250YWlucyB3cmFwcGVycworb2YgYSBmZXcgcm91dGluZXMg
aW4gcGxhdGZvcm1fdXRpbHMucHkgc28gdGhhdCBwbGF0Zm9ybV91dGlscy5weSBjYW4KK2JlIGNv
bnNpZGVyZWQgYSAncHJvdGVjdGVkJyBwYWNrYWdlIC0gaS5lLiwgdGhpcyBmaWxlIHNob3VsZCBi
ZQordGhlIG9ubHkgZmlsZSB0aGF0IGV2ZXIgaW5jbHVkZXMgcGxhdGZvcm1fdXRpbHMuIFRoaXMg
bGVhZHMgdG8KK3VzIGluY2x1ZGluZyBhIGZldyB0aGluZ3MgdGhhdCBkb24ndCByZWFsbHkgaGF2
ZSBhbnl0aGluZyB0byBkbworIHdpdGggcGF0aHMsIHVuZm9ydHVuYXRlbHkuIiIiCisKK2ltcG9y
dCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworCitpbXBvcnQgcGxh
dGZvcm1fdXRpbHMKK2ltcG9ydCBwbGF0Zm9ybV91dGlsc193aW4KK2ltcG9ydCBwbGF0Zm9ybV91
dGlsc19tYWMKK2ltcG9ydCBwbGF0Zm9ybV91dGlsc19saW51eAorCisjIENhY2hlIHNvbWUgdmFs
dWVzIHNvIHdlIGRvbid0IGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhlbS4gX2Jhc2VkaXIgaXMKKyMg
dXNlZCBieSBQYXRoRnJvbUJhc2UoKSBhbmQgY2FjaGVzIHRoZSBmdWxsIChuYXRpdmUpIHBhdGgg
dG8gdGhlIHRvcAorIyBvZiB0aGUgc291cmNlIHRyZWUgKC9zcmMpLiBfYmFzZWxpbmVfc2VhcmNo
X3BhdGggaXMgdXNlZCBieQorIyBFeHBlY3RlZEJhc2VsaW5lcygpIGFuZCBjYWNoZXMgdGhlIGxp
c3Qgb2YgbmF0aXZlIHBhdGhzIHRvIHNlYXJjaAorIyBmb3IgYmFzZWxpbmUgcmVzdWx0cy4KK19i
YXNlZGlyID0gTm9uZQorX2Jhc2VsaW5lX3NlYXJjaF9wYXRoID0gTm9uZQorCisKK2NsYXNzIFBh
dGhOb3RGb3VuZChFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitkZWYgbGF5b3V0X3Rlc3RzX2Rp
cigpOgorICAgICIiIlJldHVybnMgdGhlIGZ1bGx5LXF1YWxpZmllZCBwYXRoIHRvIHRoZSBkaXJl
Y3RvcnkgY29udGFpbmluZyB0aGUgaW5wdXQKKyAgICBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGxh
eW91dCB0ZXN0LiIiIgorICAgIHJldHVybiBwYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAn
V2ViS2l0JywgJ0xheW91dFRlc3RzJykKKworCitkZWYgY2hyb21pdW1fYmFzZWxpbmVfcGF0aChw
bGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVj
dG9yeSBjb250YWluaW5nIGV4cGVjdGVkCisgICAgYmFzZWxpbmUgcmVzdWx0cyBmcm9tIGNocm9t
aXVtIHBvcnRzLiBJZiB8cGxhdGZvcm18IGlzIE5vbmUsIHRoZQorICAgIGN1cnJlbnRseSBleGVj
dXRpbmcgcGxhdGZvcm0gaXMgdXNlZC4KKworICAgIE5vdGU6IGFsdGhvdWdoIGRpcmVjdGx5IHJl
ZmVyZW5jaW5nIGluZGl2aWR1YWwgcGxhdGZvcm1fdXRpbHNfKiBmaWxlcyBpcworICAgIHVzdWFs
bHkgZGlzY291cmFnZWQsIHdlIGFsbG93IGl0IGhlcmUgc28gdGhhdCB0aGUgcmViYXNlbGluaW5n
IHRvb2wgY2FuCisgICAgcHVsbCBiYXNlbGluZXMgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFuIHRo
ZSBob3N0IHBsYXRmb3JtLiIiIgorCisgICAgIyBOb3JtYWxpemUgdGhlIHBsYXRmb3JtIHN0cmlu
Zy4KKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUocGxhdGZvcm0pCisgICAgaWYgcGxhdGZv
cm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6CisgICAgICAgIHJldHVybiBwbGF0Zm9ybV91
dGlsc19tYWMuYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKKyAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0
c3dpdGgoJ2Nocm9taXVtLXdpbicpOgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfd2lu
LmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCisgICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdj
aHJvbWl1bS1saW51eCcpOgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbGludXguYmFz
ZWxpbmVfcGF0aChwbGF0Zm9ybSkKKworICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5iYXNlbGlu
ZV9wYXRoKCkKKworCitkZWYgd2Via2l0X2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pOgorICAgICIi
IlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZXhwZWN0
ZWQKKyAgICBiYXNlbGluZSByZXN1bHRzIGZyb20gV2ViS2l0IHBvcnRzLiIiIgorICAgIHJldHVy
biBwYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3RzJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0pCisKKworZGVm
IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhl
IGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0cyBmb3Ig
YQorICAgIGdpdmVuIHBsYXRmb3JtLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUg
cmVsYXRpdmUgdG8gdGhlIHRvcCBvZgorICAgIHRoZSBzb3VyY2UgdHJlZS4gSWYgcGFyYW1ldGVy
IHBsYXRmb3JtIGlzIE5vbmUsIHJldHVybnMgdGhlIGxpc3QgZm9yIHRoZQorICAgIGN1cnJlbnQg
cGxhdGZvcm0gdGhhdCB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24uCisKKyAgICBOb3RlOiBhbHRo
b3VnaCBkaXJlY3RseSByZWZlcmVuY2luZyBpbmRpdmlkdWFsIHBsYXRmb3JtX3V0aWxzXyogZmls
ZXMgaXMKKyAgICB1c3VhbGx5IGRpc2NvdXJhZ2VkLCB3ZSBhbGxvdyBpdCBoZXJlIHNvIHRoYXQg
dGhlIHJlYmFzZWxpbmluZyB0b29sIGNhbgorICAgIHB1bGwgYmFzZWxpbmVzIGZvciBwbGF0Zm9y
bXMgb3RoZXIgdGhhbiB0aGUgaG9zdCBwbGF0Zm9ybS4iIiIKKworICAgICMgTm9ybWFsaXplIHRo
ZSBwbGF0Zm9ybSBuYW1lLgorICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZShwbGF0Zm9ybSkK
KyAgICBpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS1tYWMnKToKKyAgICAgICAgcmV0
dXJuIHBsYXRmb3JtX3V0aWxzX21hYy5iYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKKyAg
ICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdpbicpOgorICAgICAgICByZXR1
cm4gcGxhdGZvcm1fdXRpbHNfd2luLmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQorICAg
IGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKKyAgICAgICAgcmV0
dXJuIHBsYXRmb3JtX3V0aWxzX2xpbnV4LmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQor
ICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5iYXNlbGluZV9zZWFyY2hfcGF0aCgpCisKKworZGVm
IGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybT1Ob25lLCBhbGxf
YmFzZWxpbmVzPUZhbHNlKToKKyAgICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgZmluZHMgd2hlcmUg
dGhlIGJhc2VsaW5lIHJlc3VsdHMgYXJlIGxvY2F0ZWQuCisKKyAgICBBcmdzOgorICAgICAgIGZp
bGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICBzdWZmaXg6IGZp
bGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90OyBlLmcuICcu
dHh0JworICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUgTm9uZSwgYnV0
IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgcGxhdGZvcm06IGxheW91dCB0ZXN0IHBs
YXRmb3JtOiAnd2luJywgJ2xpbnV4JyBvciAnbWFjJy4gRGVmYXVsdHMgdG8KKyAgICAgICAgICAg
ICAgICAgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisgICAgICAgYWxsX2Jhc2VsaW5lczogSWYgVHJ1
ZSwgcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiBhbGwgYmFzZWxpbmUgcGF0aHMKKyAgICAgICAg
ICAgICAgICAgICAgICBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtLiBJZiBGYWxzZSwgcmV0dXJuIG9u
bHkgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgb25lLgorICAgIFJldHVybnMKKyAg
ICAgICBhIGxpc3Qgb2YgKCBwbGF0Zm9ybV9kaXIsIHJlc3VsdHNfZmlsZW5hbWUgKSwgd2hlcmUK
KyAgICAgICAgIHBsYXRmb3JtX2RpciAtIGFicyBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIHJlc3Vs
dHMgdHJlZSAob3IgdGVzdCB0cmVlKQorICAgICAgICAgcmVzdWx0c19maWxlbmFtZSAtIHJlbGF0
aXZlIHBhdGggZnJvbSB0b3Agb2YgdHJlZSB0byB0aGUgcmVzdWx0cyBmaWxlCisgICAgICAgICAg
IChvcy5wYXRoLmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3UgdGhlIGZ1bGwgcGF0aCB0byB0aGUg
ZmlsZSwKKyAgICAgICAgICAgIHVubGVzcyBOb25lIHdhcyByZXR1cm5lZC4pCisgICAgICBSZXR1
cm4gdmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJl
bnQgcGxhdGZvcm0KKyAgICAgIChlLmcuLCAiXFwiIGZvciBwYXRoIHNlcGFyYXRvcnMgb24gV2lu
ZG93cykuIElmIHRoZSByZXN1bHRzIGZpbGUgaXMgbm90CisgICAgICBmb3VuZCwgdGhlbiBOb25l
IHdpbGwgYmUgcmV0dXJuZWQgZm9yIHRoZSBkaXJlY3RvcnksIGJ1dCB0aGUgZXhwZWN0ZWQKKyAg
ICAgIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCisgICAgIiIiCisg
ICAgZ2xvYmFsIF9iYXNlbGluZV9zZWFyY2hfcGF0aAorICAgIGdsb2JhbCBfc2VhcmNoX3BhdGhf
cGxhdGZvcm0KKyAgICB0ZXN0bmFtZSA9IG9zLnBhdGguc3BsaXRleHQocmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmaWxlbmFtZSkpWzBdCisKKyAgICBiYXNlbGluZV9maWxlbmFtZSA9IHRlc3RuYW1l
ICsgJy1leHBlY3RlZCcgKyBzdWZmaXgKKworICAgIGlmIChfYmFzZWxpbmVfc2VhcmNoX3BhdGgg
aXMgTm9uZSkgb3IgKF9zZWFyY2hfcGF0aF9wbGF0Zm9ybSAhPSBwbGF0Zm9ybSk6CisgICAgICAg
IF9iYXNlbGluZV9zZWFyY2hfcGF0aCA9IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQor
ICAgICAgICBfc2VhcmNoX3BhdGhfcGxhdGZvcm0gPSBwbGF0Zm9ybQorCisgICAgYmFzZWxpbmVz
ID0gW10KKyAgICBmb3IgcGxhdGZvcm1fZGlyIGluIF9iYXNlbGluZV9zZWFyY2hfcGF0aDoKKyAg
ICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxp
bmVfZmlsZW5hbWUpKToKKyAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2Rp
ciwgYmFzZWxpbmVfZmlsZW5hbWUpKQorCisgICAgICAgIGlmIG5vdCBhbGxfYmFzZWxpbmVzIGFu
ZCBiYXNlbGluZXM6CisgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVzCisKKyAgICAjIElmIGl0
IHdhc24ndCBmb3VuZCBpbiBhIHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRoZSBleHBlY3Rl
ZCByZXN1bHQKKyAgICAjIGluIHRoZSB0ZXN0IGRpcmVjdG9yeSwgZXZlbiBpZiBubyBzdWNoIGZp
bGUgYWN0dWFsbHkgZXhpc3RzLgorICAgIHBsYXRmb3JtX2RpciA9IGxheW91dF90ZXN0c19kaXIo
KQorICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2Vs
aW5lX2ZpbGVuYW1lKSk6CisgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2Rpciwg
YmFzZWxpbmVfZmlsZW5hbWUpKQorCisgICAgaWYgYmFzZWxpbmVzOgorICAgICAgICByZXR1cm4g
YmFzZWxpbmVzCisKKyAgICByZXR1cm4gWyhOb25lLCBiYXNlbGluZV9maWxlbmFtZSldCisKKwor
ZGVmIGV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCBzdWZmaXgpOgorICAgICIiIkdpdmVuIGEg
dGVzdCBuYW1lLCByZXR1cm5zIGFuIGFic29sdXRlIHBhdGggdG8gaXRzIGV4cGVjdGVkIHJlc3Vs
dHMuCisKKyAgICBJZiBubyBleHBlY3RlZCByZXN1bHRzIGFyZSBmb3VuZCBpbiBhbnkgb2YgdGhl
IHNlYXJjaGVkIGRpcmVjdG9yaWVzLCB0aGUKKyAgICBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHRl
c3QgaXRzZWxmIGlzIGxvY2F0ZWQgd2lsbCBiZSByZXR1cm5lZC4gVGhlIHJldHVybgorICAgIHZh
bHVlIGlzIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybSAoZS5nLiwg
IlxcIiBmb3IKKyAgICBwYXRoIHNlcGFyYXRvcnMgb24gd2luZG93cykuCisKKyAgICBBcmdzOgor
ICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICBz
dWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90
OyBlLmcuICcudHh0JworICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUg
Tm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgcGxhdGZvcm06IHRoZSBt
b3N0LXNwZWNpZmljIGRpcmVjdG9yeSBuYW1lIHRvIHVzZSB0byBidWlsZCB0aGUKKyAgICAgICAg
ICAgc2VhcmNoIGxpc3Qgb2YgZGlyZWN0b3JpZXMsIGUuZy4sICdjaHJvbWl1bS13aW4nLCBvcgor
ICAgICAgICAgICAnY2hyb21pdW0tbWFjLWxlb3BhcmQnICh3ZSBmb2xsb3cgdGhlIFdlYktpdCBm
b3JtYXQpCisgICAgIiIiCisgICAgcGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSA9IGV4
cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4KVswXQorICAgIGlmIHBsYXRmb3JtX2Rp
cjoKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2Zp
bGVuYW1lKQorICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNl
bGluZV9maWxlbmFtZSkKKworCitkZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSk6
CisgICAgIiIiUHJvdmlkZSB0aGUgZmlsZW5hbWUgb2YgdGhlIHRlc3QgcmVsYXRpdmUgdG8gdGhl
IGxheW91dCB0ZXN0cworICAgIGRpcmVjdG9yeSBhcyBhIHVuaXggc3R5bGUgcGF0aCAoYS9iL2Mp
LiIiIgorICAgIHJldHVybiBfd2luX3BhdGhfdG9fdW5peChmaWxlbmFtZVtsZW4obGF5b3V0X3Rl
c3RzX2RpcigpKSArIDE6XSkKKworCitkZWYgX3dpbl9wYXRoX3RvX3VuaXgocGF0aCk6CisgICAg
IiIiQ29udmVydCBhIHdpbmRvd3MgcGF0aCB0byB1c2UgdW5peC1zdHlsZSBwYXRoIHNlcGFyYXRv
cnMgKGEvYi9jKS4iIiIKKyAgICByZXR1cm4gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKKworIwor
IyBSb3V0aW5lcyB0aGF0IGFyZSBhcmd1YWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBidXQgaGF2ZSBi
ZWVuIG1hZGUKKyMgZ2VuZXJpYyBmb3Igbm93ICh0aGV5IHVzZWQgdG8gYmUgaW4gcGxhdGZvcm1f
dXRpbHNfKikKKyMKKworCitkZWYgZmlsZW5hbWVfdG9fdXJpKGZ1bGxfcGF0aCk6CisgICAgIiIi
Q29udmVydCBhIHRlc3QgZmlsZSB0byBhIFVSSS4iIiIKKyAgICBMQVlPVVRURVNUX0hUVFBfRElS
ID0gImh0dHAvdGVzdHMvIgorICAgIExBWU9VVFRFU1RfV0VCU09DS0VUX0RJUiA9ICJ3ZWJzb2Nr
ZXQvdGVzdHMvIgorCisgICAgcmVsYXRpdmVfcGF0aCA9IF93aW5fcGF0aF90b191bml4KHJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUoZnVsbF9wYXRoKSkKKyAgICBwb3J0ID0gTm9uZQorICAgIHVzZV9z
c2wgPSBGYWxzZQorCisgICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1Rf
SFRUUF9ESVIpOgorICAgICAgICAjIGh0dHAvdGVzdHMvIHJ1biBvZmYgcG9ydCA4MDAwIGFuZCBz
c2wvIG9mZiA4NDQzCisgICAgICAgIHJlbGF0aXZlX3BhdGggPSByZWxhdGl2ZV9wYXRoW2xlbihM
QVlPVVRURVNUX0hUVFBfRElSKTpdCisgICAgICAgIHBvcnQgPSA4MDAwCisgICAgZWxpZiByZWxh
dGl2ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSKToKKyAgICAgICAg
IyB3ZWJzb2NrZXQvdGVzdHMvIHJ1biBvZmYgcG9ydCA4ODgwIGFuZCA5MzIzCisgICAgICAgICMg
Tm90ZTogdGhlIHJvb3QgaXMgLywgbm90IHdlYnNvY2tldC90ZXN0cy8KKyAgICAgICAgcG9ydCA9
IDg4ODAKKworICAgICMgTWFrZSBodHRwL3Rlc3RzL2xvY2FsIHJ1biBhcyBsb2NhbCBmaWxlcy4g
VGhpcyBpcyB0byBtaW1pYyB0aGUKKyAgICAjIGxvZ2ljIGluIHJ1bi13ZWJraXQtdGVzdHMuCisg
ICAgIyBUT0RPKGppYW5saSk6IENvbnNpZGVyIGV4dGVuZGluZyB0aGlzIHRvICJtZWRpYS8iLgor
ICAgIGlmIHBvcnQgYW5kIG5vdCByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoImxvY2FsLyIpOgor
ICAgICAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoInNzbC8iKToKKyAgICAgICAgICAg
IHBvcnQgKz0gNDQzCisgICAgICAgICAgICBwcm90b2NvbCA9ICJodHRwcyIKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHByb3RvY29sID0gImh0dHAiCisgICAgICAgIHJldHVybiAiJXM6Ly8x
MjcuMC4wLjE6JXUvJXMiICUgKHByb3RvY29sLCBwb3J0LCByZWxhdGl2ZV9wYXRoKQorCisgICAg
aWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgIHJldHVybiAi
ZmlsZTovLy8iICsgZ2V0X2Fic29sdXRlX3BhdGgoZnVsbF9wYXRoKQorICAgIHJldHVybiAiZmls
ZTovLyIgKyBnZXRfYWJzb2x1dGVfcGF0aChmdWxsX3BhdGgpCisKKworZGVmIGdldF9hYnNvbHV0
ZV9wYXRoKHBhdGgpOgorICAgICIiIlJldHVybnMgYW4gYWJzb2x1dGUgVU5JWCBwYXRoLiIiIgor
ICAgIHJldHVybiBfd2luX3BhdGhfdG9fdW5peChvcy5wYXRoLmFic3BhdGgocGF0aCkpCisKKwor
ZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KCpwYXRoKToKKyAgICAiIiJDcmVhdGVzIHRoZSBzcGVj
aWZpZWQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIKKyAgICB0cnk6
CisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbigqcGF0aCkpCisgICAgZXhjZXB0IE9T
RXJyb3IsIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAg
ICAgcmFpc2UKKworCitkZWYgcGF0aF9mcm9tX2Jhc2UoKmNvbXBzKToKKyAgICAiIiJSZXR1cm5z
IGFuIGFic29sdXRlIGZpbGVuYW1lIGZyb20gYSBzZXQgb2YgY29tcG9uZW50cyBzcGVjaWZpZWQK
KyAgICByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4gSWYgdGhlIHBhdGgg
ZG9lcyBub3QgZXhpc3QsCisgICAgdGhlIGV4Y2VwdGlvbiBQYXRoTm90Rm91bmQgaXMgcmFpc2Vk
LiIiIgorICAgIGdsb2JhbCBfYmFzZWRpcgorICAgIGlmIF9iYXNlZGlyID09IE5vbmU6CisgICAg
ICAgICMgV2UgY29tcHV0ZSB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBieSBmaW5kaW5nIHRo
ZSBhYnNvbHV0ZQorICAgICAgICAjIHBhdGggb2YgdGhpcyBzb3VyY2UgZmlsZSwgYW5kIHRoZW4g
Y2xpbWJpbmcgdXAgdGhyZWUgZGlyZWN0b3JpZXMKKyAgICAgICAgIyBhcyBnaXZlbiBpbiBzdWJw
YXRoLiBJZiB3ZSBtb3ZlIHRoaXMgZmlsZSwgc3VicGF0aCBuZWVkcyB0byBiZQorICAgICAgICAj
IHVwZGF0ZWQuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisgICAg
ICAgIHN1YnBhdGggPSBvcy5wYXRoLmpvaW4oJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcpCisgICAg
ICAgIF9iYXNlZGlyID0gcGF0aFs6cGF0aC5pbmRleChzdWJwYXRoKV0KKyAgICBwYXRoID0gb3Mu
cGF0aC5qb2luKF9iYXNlZGlyLCAqY29tcHMpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBh
dGgpOgorICAgICAgICByYWlzZSBQYXRoTm90Rm91bmQoJ2NvdWxkIG5vdCBmaW5kICVzJyAlIChw
YXRoKSkKKyAgICByZXR1cm4gcGF0aAorCisKK2RlZiByZW1vdmVfZGlyZWN0b3J5KCpwYXRoKToK
KyAgICAiIiJSZWN1cnNpdmVseSByZW1vdmVzIGEgZGlyZWN0b3J5LCBldmVuIGlmIGl0J3MgbWFy
a2VkIHJlYWQtb25seS4KKworICAgIFJlbW92ZSB0aGUgZGlyZWN0b3J5IGxvY2F0ZWQgYXQgKnBh
dGgsIGlmIGl0IGV4aXN0cy4KKworICAgIHNodXRpbC5ybXRyZWUoKSBkb2Vzbid0IHdvcmsgb24g
V2luZG93cyBpZiBhbnkgb2YgdGhlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisgICAgYXJlIHJlYWQt
b25seSwgd2hpY2ggc3ZuIHJlcG9zaXRvcmllcyBhbmQgc29tZSAuc3ZuIGZpbGVzIGFyZS4gIFdl
IG5lZWQgdG8KKyAgICBiZSBhYmxlIHRvIGZvcmNlIHRoZSBmaWxlcyB0byBiZSB3cml0YWJsZSAo
aS5lLiwgZGVsZXRhYmxlKSBhcyB3ZSB0cmF2ZXJzZQorICAgIHRoZSB0cmVlLgorCisgICAgRXZl
biB3aXRoIGFsbCB0aGlzLCBXaW5kb3dzIHN0aWxsIHNvbWV0aW1lcyBmYWlscyB0byBkZWxldGUg
YSBmaWxlLCBjaXRpbmcKKyAgICBhIHBlcm1pc3Npb24gZXJyb3IgKG1heWJlIHNvbWV0aGluZyB0
byBkbyB3aXRoIGFudGl2aXJ1cyBzY2FucyBvciBkaXNrCisgICAgaW5kZXhpbmcpLiAgVGhlIGJl
c3Qgc3VnZ2VzdGlvbiBhbnkgb2YgdGhlIHVzZXIgZm9ydW1zIGhhZCB3YXMgdG8gd2FpdCBhCisg
ICAgYml0IGFuZCB0cnkgYWdhaW4sIHNvIHdlIGRvIHRoYXQgdG9vLiAgSXQncyBoYW5kLXdhdmlu
ZywgYnV0IHNvbWV0aW1lcyBpdAorICAgIHdvcmtzLiA6LworICAgICIiIgorICAgIGZpbGVfcGF0
aCA9IG9zLnBhdGguam9pbigqcGF0aCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9w
YXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICB3aW4zMiA9IEZhbHNlCisgICAgaWYgc3lzLnBs
YXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIHdpbjMyID0gVHJ1ZQorICAgICAgICAjIFNvbWUg
cGVvcGxlIGRvbid0IGhhdmUgdGhlIEFQSXMgaW5zdGFsbGVkLiBJbiB0aGF0IGNhc2Ugd2UnbGwg
ZG8KKyAgICAgICAgIyB3aXRob3V0LgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aW4zMmFw
aSA9IF9faW1wb3J0X18oJ3dpbjMyYXBpJykKKyAgICAgICAgICAgIHdpbjMyY29uID0gX19pbXBv
cnRfXygnd2luMzJjb24nKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAg
ICB3aW4zMiA9IEZhbHNlCisKKyAgICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywg
cGF0aCk6CisgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVdSSVRFKQorICAgICAg
ICAgICAgaWYgd2luMzI6CisgICAgICAgICAgICAgICAgd2luMzJhcGkuU2V0RmlsZUF0dHJpYnV0
ZXMocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW4z
MmNvbi5GSUxFX0FUVFJJQlVURV9OT1JNQUwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50
RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUNDRVM6Cisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgcHJpbnQgJ0ZhaWxlZCB0
byBkZWxldGUgJXM6IHRyeWluZyBhZ2FpbicgJSByZXByKHBhdGgpCisgICAgICAgICAgICAgICAg
dGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQorICAg
IGVsc2U6CisKKyAgICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywgcGF0aCk6Cisg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3MucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBybWZ1bmMocGF0aCkKKworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxr
KGZpbGVfcGF0aCwgdG9wZG93bj1GYWxzZSk6CisgICAgICAgICMgRm9yIFBPU0lYOiAgbWFraW5n
IHRoZSBkaXJlY3Rvcnkgd3JpdGFibGUgZ3VhcmFudGVlcyByZW1vdmFiaWxpdHkuCisgICAgICAg
ICMgV2luZG93cyB3aWxsIGlnbm9yZSB0aGUgbm9uLXJlYWQtb25seSBiaXRzIGluIHRoZSBjaG1v
ZCB2YWx1ZS4KKyAgICAgICAgb3MuY2htb2Qocm9vdCwgMDc3MCkKKyAgICAgICAgZm9yIG5hbWUg
aW4gZmlsZXM6CisgICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5yZW1vdmUsIG9zLnBh
dGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAg
ICAgIHJlbW92ZV93aXRoX3JldHJ5KG9zLnJtZGlyLCBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkp
CisKKyAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5ybWRpciwgZmlsZV9wYXRoKQorCisjCisjIFdy
YXBwZXJzIGFyb3VuZCBwbGF0Zm9ybV91dGlscworIworCisKK2RlZiBwbGF0Zm9ybV9uYW1lKHBs
YXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNocm9taXVtIHBs
YXRmb3JtIG5hbWUgZm9yIHxwbGF0Zm9ybXwuIElmCisgICAgICAgfHBsYXRmb3JtfCBpcyBOb25l
LCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjaHJvbWl1bSBwbGF0Zm9ybSBvbiB0aGUKKyAgICAg
ICBjdXJyZW50bHkgcnVubmluZyBzeXN0ZW0uIElmIHxwbGF0Zm9ybXwgaXMgb2YgdGhlIGZvcm0g
J2Nocm9taXVtLSonLAorICAgICAgIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZCwgb3RoZXJ3aXNl
ICdjaHJvbWl1bS0nIGlzIHByZXBlbmRlZC4iIiIKKyAgICBpZiBwbGF0Zm9ybSA9PSBOb25lOgor
ICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMucGxhdGZvcm1fbmFtZSgpCisgICAgaWYgbm90
IHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLScpOgorICAgICAgICBwbGF0Zm9ybSA9ICJj
aHJvbWl1bS0iICsgcGxhdGZvcm0KKyAgICByZXR1cm4gcGxhdGZvcm0KKworCitkZWYgcGxhdGZv
cm1fdmVyc2lvbigpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5wbGF0Zm9ybV92ZXJzaW9u
KCkKKworCitkZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgcmV0dXJuIHBsYXRm
b3JtX3V0aWxzLmxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpCisKKworZGVmIGxpZ2h0dHBkX21v
ZHVsZV9wYXRoKCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmxpZ2h0dHBkX21vZHVsZV9w
YXRoKCkKKworCitkZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKKyAgICByZXR1cm4gcGxhdGZvcm1f
dXRpbHMubGlnaHR0cGRfcGhwX3BhdGgoKQorCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgcmV0
dXJuIHBsYXRmb3JtX3V0aWxzLndkaWZmX3BhdGgoKQorCisKK2RlZiB0ZXN0X3NoZWxsX3BhdGgo
dGFyZ2V0KToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMudGVzdF9zaGVsbF9wYXRoKHRhcmdl
dCkKKworCitkZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6CisgICAgcmV0dXJuIHBsYXRmb3Jt
X3V0aWxzLmltYWdlX2RpZmZfcGF0aCh0YXJnZXQpCisKKworZGVmIGxheW91dF90ZXN0X2hlbHBl
cl9wYXRoKHRhcmdldCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmxheW91dF90ZXN0X2hl
bHBlcl9wYXRoKHRhcmdldCkKKworCitkZWYgZnV6enlfbWF0Y2hfcGF0aCgpOgorICAgIHJldHVy
biBwbGF0Zm9ybV91dGlscy5mdXp6eV9tYXRjaF9wYXRoKCkKKworCitkZWYgc2h1dF9kb3duX2h0
dHBfc2VydmVyKHNlcnZlcl9waWQpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5zaHV0X2Rv
d25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCkKKworCitkZWYga2lsbF9hbGxfdGVzdF9zaGVsbHMo
KToKKyAgICBwbGF0Zm9ybV91dGlscy5raWxsX2FsbF90ZXN0X3NoZWxscygpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wbGF0Zm9ybV91dGlscy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZlZmJjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91
dGlscy5weQpAQCAtMCwwICsxLDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiJQbGF0Zm9ybS1zcGVjaWZpYyB1dGlsaXRpZXMgYW5kIHBzZXVkby1jb25z
dGFudHMKKworQW55IGZ1bmN0aW9ucyB3aG9zZSBpbXBsZW1lbnRhdGlvbnMgb3IgdmFsdWVzIGRp
ZmZlciBmcm9tIG9uZSBwbGF0Zm9ybSB0bworYW5vdGhlciBzaG91bGQgYmUgZGVmaW5lZCBpbiB0
aGVpciByZXNwZWN0aXZlIHBsYXRmb3JtX3V0aWxzXzxwbGF0Zm9ybT4ucHkKK21vZHVsZXMuIFRo
ZSBhcHByb3ByaWF0ZSBvbmUgb2YgdGhvc2Ugd2lsbCBiZSBpbXBvcnRlZCBpbnRvIHRoaXMgbW9k
dWxlIHRvCitwcm92aWRlIGNhbGxlcnMgd2l0aCBhIGNvbW1vbiwgcGxhdGZvcm0taW5kZXBlbmRl
bnQgaW50ZXJmYWNlLgorCitUaGlzIGZpbGUgc2hvdWxkIG9ubHkgZXZlciBiZSBpbXBvcnRlZCBi
eSBsYXlvdXRfcGFja2FnZS5wYXRoX3V0aWxzLgorIiIiCisKK2ltcG9ydCBzeXMKKworIyBXZSBt
YXkgbm90IHN1cHBvcnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgYSB1c2VyIGhhcyBpbnN0
YWxsZWQgKEN5Z3dpbgorIyBlc3BlY2lhbGx5IGhhcyBoYWQgcHJvYmxlbXMpLCBidXQgd2UnbGwg
YWxsb3cgdGhlIHBsYXRmb3JtIHV0aWxzIHRvIGJlCisjIGluY2x1ZGVkIGluIGFueSBjYXNlIHNv
IHdlIGRvbid0IGdldCBhbiBpbXBvcnQgZXJyb3IuCitpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3
aW4nLCAnd2luMzInKToKKyAgICBmcm9tIHBsYXRmb3JtX3V0aWxzX3dpbiBpbXBvcnQgKgorZWxp
ZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgZnJvbSBwbGF0Zm9ybV91dGlsc19tYWMg
aW1wb3J0ICoKK2VsaWYgc3lzLnBsYXRmb3JtIGluICgnbGludXgnLCAnbGludXgyJywgJ2ZyZWVi
c2Q3JywgJ29wZW5ic2Q0Jyk6CisgICAgZnJvbSBwbGF0Zm9ybV91dGlsc19saW51eCBpbXBvcnQg
KgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19s
aW51eC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTVhMDM5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkKQEAgLTAsMCArMSwyNDggQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlRoaXMgaXMgdGhl
IExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBsYXlvdXRfcGFja2FnZS5wbGF0Zm9ybV91dGls
cworICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQg
cGFja2FnZS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworaW1wb3J0IHBhdGhfdXRpbHMKK2ltcG9y
dCBwbGF0Zm9ybV91dGlsc193aW4KKworCitkZWYgcGxhdGZvcm1fbmFtZSgpOgorICAgICIiIlJl
dHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9u
LiIiIgorICAgIHJldHVybiAnY2hyb21pdW0tbGludXgnICsgcGxhdGZvcm1fdmVyc2lvbigpCisK
KworZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKKyAgICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0
cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBlLmcuICctdmlzdGEnIG9yCisgICAgJy1zbm93bGVvcGFy
ZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgICAgbWlu
b3IgdmVyc2lvbnMsIGl0IHJldHVybnMgJycuIiIiCisgICAgcmV0dXJuICcnCisKKworZGVmIGdl
dF9udW1fY29yZXMoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhl
IG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVkIG1hY2hpbmVzLAorICAgIHRoaXMgd2lsbCBiZSBk
b3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwgcHJvY2Vzc29ycy4iIiIKKyAgICBudW1fY29yZXMg
PSBvcy5zeXNjb25mKCJTQ19OUFJPQ0VTU09SU19PTkxOIikKKyAgICBpZiBpc2luc3RhbmNlKG51
bV9jb3JlcywgaW50KSBhbmQgbnVtX2NvcmVzID4gMDoKKyAgICAgICAgcmV0dXJuIG51bV9jb3Jl
cworICAgIHJldHVybiAxCisKKworZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6Cisg
ICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2Ug
dHJlZSBmb3IgdGhlCisgICAgYmFzZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIHZl
cnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKKyAgICB0aGVuIHRoZSB2ZXJzaW9uIGN1cnJl
bnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKKyAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAg
ICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVz
dHMnKQorCisKK2RlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAi
IiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVz
L3Jlc3VsdHMsIGluCisgICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZl
IHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIiIgorICAgIHJldHVybiBbYmFzZWxpbmVf
cGF0aChwbGF0Zm9ybSksCisgICAgICAgICAgICBwbGF0Zm9ybV91dGlsc193aW4uYmFzZWxpbmVf
cGF0aCgnY2hyb21pdW0td2luJyksCisgICAgICAgICAgICBwYXRoX3V0aWxzLndlYmtpdF9iYXNl
bGluZV9wYXRoKCd3aW4nKSwKKyAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5l
X3BhdGgoJ21hYycpXQorCisKK2RlZiBhcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgIiIi
UmV0dXJucyB0aGUgZXhlY3V0YWJsZSBwYXRoIHRvIHN0YXJ0IEFwYWNoZSIiIgorICAgIHBhdGgg
PSBvcy5wYXRoLmpvaW4oIi91c3IiLCAic2JpbiIsICJhcGFjaGUyIikKKyAgICBpZiBvcy5wYXRo
LmV4aXN0cyhwYXRoKToKKyAgICAgICAgcmV0dXJuIHBhdGgKKyAgICBwcmludCAiVW5hYmxlIHRv
IGZpbmUgQXBhY2hlIGV4ZWN1dGFibGUgJXMiICUgcGF0aAorICAgIF9taXNzaW5nX2FwYWNoZSgp
CisKKworZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUg
cGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxheW91dFRlc3RzIiwKKyAgICAg
ICAgImh0dHAiLCAiY29uZiIsICJhcGFjaGUyLWRlYmlhbi1odHRwZC5jb25mIikKKworCitkZWYg
bGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0YWJs
ZSBwYXRoIHRvIHN0YXJ0IExpZ0hUVFBkIiIiCisgICAgYmlucGF0aCA9ICIvdXNyL3NiaW4vbGln
aHR0cGQiCisgICAgaWYgb3MucGF0aC5leGlzdHMoYmlucGF0aCk6CisgICAgICAgIHJldHVybiBi
aW5wYXRoCisgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIExpZ0hUVFBkIGV4ZWN1dGFibGUgJXMi
ICUgYmlucGF0aAorICAgIF9taXNzaW5nX2xpZ2h0dHBkKCkKKworCitkZWYgbGlnaHR0cGRfbW9k
dWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaWJyYXJ5IG1vZHVsZSBwYXRoIGZvciBM
aWdIVFRQZCIiIgorICAgIG1vZHBhdGggPSAiL3Vzci9saWIvbGlnaHR0cGQiCisgICAgaWYgb3Mu
cGF0aC5leGlzdHMobW9kcGF0aCk6CisgICAgICAgIHJldHVybiBtb2RwYXRoCisgICAgcHJpbnQg
IlVuYWJsZSB0byBmaW5kIExpZ0hUVFBkIG1vZHVsZXMgJXMiICUgbW9kcGF0aAorICAgIF9taXNz
aW5nX2xpZ2h0dHBkKCkKKworCitkZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKKyAgICAiIiJSZXR1
cm5zIHRoZSBQSFAgZXhlY3V0YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIGJpbnBhdGgg
PSAiL3Vzci9iaW4vcGhwLWNnaSIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhiaW5wYXRoKToKKyAg
ICAgICAgcmV0dXJuIGJpbnBhdGgKKyAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgUEhQIENHSSBl
eGVjdXRhYmxlICVzIiAlIGJpbnBhdGgKKyAgICBfbWlzc2luZ19saWdodHRwZCgpCisKKworZGVm
IHdkaWZmX3BhdGgoKToKKyAgICAiIiJQYXRoIHRvIHRoZSBXRGlmZiBleGVjdXRhYmxlLCB3aGlj
aCB3ZSBhc3N1bWUgaXMgYWxyZWFkeSBpbnN0YWxsZWQgYW5kCisgICAgaW4gdGhlIHVzZXIncyAk
UEFUSC4iIiIKKyAgICByZXR1cm4gJ3dkaWZmJworCisKK2RlZiBpbWFnZV9kaWZmX3BhdGgodGFy
Z2V0KToKKyAgICAiIiJQYXRoIHRvIHRoZSBpbWFnZV9kaWZmIGJpbmFyeS4KKworICAgIEFyZ3M6
CisgICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdldCBtb2RlIChkZWJ1ZyBvciByZWxlYXNlKSIiIgor
ICAgIHJldHVybiBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHModGFyZ2V0LCAnaW1hZ2VfZGlmZicp
CisKKworZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6CisgICAgIiIiUGF0aCB0
byB0aGUgbGF5b3V0X3Rlc3QgaGVscGVyIGJpbmFyeSwgaWYgbmVlZGVkLCBlbXB0eSBvdGhlcndp
c2UiIiIKKyAgICByZXR1cm4gJycKKworCitkZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6Cisg
ICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3Igb3VyIFRl
c3RTaGVsbC4KKworICAgIEFyZ3M6CisgICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdldCBtb2RlIChk
ZWJ1ZyBvciByZWxlYXNlKSAiIiIKKyAgICBpZiB0YXJnZXQgaW4gKCdEZWJ1ZycsICdSZWxlYXNl
Jyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlYnVnX3BhdGggPSBfcGF0aF9mcm9tX2J1
aWxkX3Jlc3VsdHMoJ0RlYnVnJywgJ3Rlc3Rfc2hlbGwnKQorICAgICAgICAgICAgcmVsZWFzZV9w
YXRoID0gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCdSZWxlYXNlJywgJ3Rlc3Rfc2hlbGwnKQor
CisgICAgICAgICAgICBkZWJ1Z19tdGltZSA9IG9zLnN0YXQoZGVidWdfcGF0aCkuc3RfbXRpbWUK
KyAgICAgICAgICAgIHJlbGVhc2VfbXRpbWUgPSBvcy5zdGF0KHJlbGVhc2VfcGF0aCkuc3RfbXRp
bWUKKworICAgICAgICAgICAgaWYgZGVidWdfbXRpbWUgPiByZWxlYXNlX210aW1lIGFuZCB0YXJn
ZXQgPT0gJ1JlbGVhc2UnIG9yIFwKKyAgICAgICAgICAgICAgIHJlbGVhc2VfbXRpbWUgPiBkZWJ1
Z19tdGltZSBhbmQgdGFyZ2V0ID09ICdEZWJ1Zyc6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCdceDFiWzMxbVdhcm5pbmc6IHlvdSBhcmUgbm90IHJ1bm5pbmcgdGhlIG1vc3QgJworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjZW50IHRlc3Rfc2hlbGwgYmluYXJ5LiBZb3Ug
bmVlZCB0byBwYXNzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tZGVidWcgb3Ig
bm90IHRvIHNlbGVjdCBiZXR3ZWVuIERlYnVnIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdSZWxlYXNlLlx4MWJbMG0nKQorICAgICAgICAjIFRoaXMgd2lsbCBmYWlsIGlmIHdl
IGRvbid0IGhhdmUgYm90aCBhIGRlYnVnIGFuZCByZWxlYXNlIGJpbmFyeS4KKyAgICAgICAgIyBU
aGF0J3MgZmluZSBiZWNhdXNlLCBpbiB0aGlzIGNhc2UsIHdlIG11c3QgYWxyZWFkeSBiZSBydW5u
aW5nIHRoZQorICAgICAgICAjIG1vc3QgdXAtdG8tZGF0ZSBvbmUuCisgICAgICAgIGV4Y2VwdCBw
YXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiBf
cGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHModGFyZ2V0LCAndGVzdF9zaGVsbCcpCisKKworZGVmIGZ1
enp5X21hdGNoX3BhdGgoKToKKyAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIGZ1enp5IG1h
dGNoZXIgYmluYXJ5LiIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0
aGlyZF9wYXJ0eScsICdmdXp6eW1hdGNoJywgJ2Z1enp5bWF0Y2gnKQorCisKK2RlZiBzaHV0X2Rv
d25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6CisgICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRw
ZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBmdWxseSBzaHV0IGRvd24uCisKKyAgICBB
cmdzOgorICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2Vy
dmVyLgorICAgICIiIgorICAgICMgc2VydmVyX3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0dHBfc2Vy
dmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxseS4KKyAgICBpZiBzZXJ2ZXJfcGlkIGlzIE5vbmU6
CisgICAgICAgICMgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qgd2l0
aCB3ZWIgc2VydmVyIHByb2Nlc3NlcworICAgICAgICAjIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2Vy
dmVyLnB5LCBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICAgICAga2lsbF9hbGxfcHJvY2Vz
cygnbGlnaHR0cGQnKQorICAgICAgICBraWxsX2FsbF9wcm9jZXNzKCdhcGFjaGUyJykKKyAgICBl
bHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5raWxsKHNlcnZlcl9waWQsIHNpZ25h
bC5TSUdURVJNKQorICAgICAgICAgICAgI1RPRE8obW1vc3MpIE1heWJlIHRocm93IGluIGEgU0lH
S0lMTCBqdXN0IHRvIGJlIHN1cmU/CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAg
ICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQu
cGlkIGZpbGUpLAorICAgICAgICAgICAgIyBzbyBpZiBraWxsIGZhaWxzIG9uIHRoZSBnaXZlbiBQ
SUQsIGp1c3QgdHJ5IHRvICdraWxsYWxsJyB3ZWIKKyAgICAgICAgICAgICMgc2VydmVycy4KKyAg
ICAgICAgICAgIHNodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQorCisKK2RlZiBraWxsX3Byb2Nl
c3MocGlkKToKKyAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCisKKyAgICBBcmdz
OgorICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgorICAgICIi
IgorICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKworCitkZWYga2lsbF9hbGxfcHJv
Y2Vzcyhwcm9jZXNzX25hbWUpOgorICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAgc3Vi
cHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcsICctVEVSTScsICctdScsIG9zLmdldGVudignVVNFUicp
LAorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX25hbWVdLCBzdGRlcnI9bnVsbCkKKyAgICBu
dWxsLmNsb3NlKCkKKworCitkZWYga2lsbF9hbGxfdGVzdF9zaGVsbHMoKToKKyAgICAiIiJLaWxs
cyBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFyeSBjdXJyZW50bHkgcnVubmlu
Zy4iIiIKKyAgICBraWxsX2FsbF9wcm9jZXNzKCd0ZXN0X3NoZWxsJykKKworIworIyBQcml2YXRl
IGhlbHBlciBmdW5jdGlvbnMKKyMKKworCitkZWYgX21pc3NpbmdfbGlnaHR0cGQoKToKKyAgICBw
cmludCAnUGxlYXNlIGluc3RhbGwgdXNpbmc6ICJzdWRvIGFwdC1nZXQgaW5zdGFsbCBsaWdodHRw
ZCBwaHA1LWNnaSInCisgICAgcHJpbnQgJ0ZvciBjb21wbGV0ZSBMaW51eCBidWlsZCByZXF1aXJl
bWVudHMsIHBsZWFzZSBzZWU6JworICAgIHByaW50ICdodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
Y2hyb21pdW0vd2lraS9MaW51eEJ1aWxkSW5zdHJ1Y3Rpb25zJworICAgIHN5cy5leGl0KDEpCisK
KworZGVmIF9taXNzaW5nX2FwYWNoZSgpOgorICAgIHByaW50ICgnUGxlYXNlIGluc3RhbGwgdXNp
bmc6ICJzdWRvIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyICcKKyAgICAgICAgJ2xpYmFwYWNoZTIt
bW9kLXBocDUiJykKKyAgICBwcmludCAnRm9yIGNvbXBsZXRlIExpbnV4IGJ1aWxkIHJlcXVpcmVt
ZW50cywgcGxlYXNlIHNlZTonCisgICAgcHJpbnQgJ2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9j
aHJvbWl1bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlvbnMnCisgICAgc3lzLmV4aXQoMSkKKwor
CitkZWYgX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCpwYXRoaWVzKToKKyAgICAjIEZJWE1FKGRr
ZWdlbCk6IHVzZSBsYXRlc3Qgb3Igd2FybiBpZiBtb3JlIHRoYW4gb25lIGZvdW5kPworICAgIGZv
ciBkaXIgaW4gWyJzY29uc2J1aWxkIiwgIm91dCIsICJ4Y29kZWJ1aWxkIl06CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKGRpciwgKnBh
dGhpZXMpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICByYWlzZSBwYXRo
X3V0aWxzLlBhdGhOb3RGb3VuZCgiVW5hYmxlIHRvIGZpbmQgJXMgaW4gYnVpbGQgdHJlZSIgJQor
ICAgICAgICAob3MucGF0aC5qb2luKCpwYXRoaWVzKSkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91
dGlsc19tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjM4YWI3NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxz
X21hYy5weQpAQCAtMCwwICsxLDIwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiVGhpcyBpcyB0aGUgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsYXlv
dXRfcGFja2FnZS5wbGF0Zm9ybV91dGlscworICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3VsZCBv
bmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQg
cGxhdGZvcm0KK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2ltcG9ydCBwYXRo
X3V0aWxzCisKKworZGVmIHBsYXRmb3JtX25hbWUoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1l
IG9mIHRoZSBwbGF0Zm9ybSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKKyAgICAjIEF0
IHRoZSBtb21lbnQgYWxsIGNocm9taXVtIG1hYyByZXN1bHRzIGFyZSB2ZXJzaW9uLWluZGVwZW5k
ZW50LiBBdCBzb21lCisgICAgIyBwb2ludCB3ZSBtYXkgbmVlZCB0byByZXR1cm4gJ2Nocm9taXVt
LW1hYycgKyBQbGF0Zm9ybVZlcnNpb24oKQorICAgIHJldHVybiAnY2hyb21pdW0tbWFjJworCisK
K2RlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6CisgICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJp
bmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgorICAgICctc25vd2xlb3BhcmQn
LiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICAgIG1pbm9y
IHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgorICAgIG9zX3ZlcnNpb25fc3RyaW5nID0gcGxh
dGZvcm0ubWFjX3ZlcigpWzBdICAjIGUuZy4gIjEwLjUuNiIKKyAgICBpZiBub3Qgb3NfdmVyc2lv
bl9zdHJpbmc6CisgICAgICAgIHJldHVybiAnLWxlb3BhcmQnCisKKyAgICByZWxlYXNlX3ZlcnNp
b24gPSBpbnQob3NfdmVyc2lvbl9zdHJpbmcuc3BsaXQoJy4nKVsxXSkKKworICAgICMgd2UgZG9u
J3Qgc3VwcG9ydCAndGlnZXInIG9yIGVhcmxpZXIgcmVsZWFzZXMKKyAgICBpZiByZWxlYXNlX3Zl
cnNpb24gPT0gNToKKyAgICAgICAgcmV0dXJuICctbGVvcGFyZCcKKyAgICBlbGlmIHJlbGVhc2Vf
dmVyc2lvbiA9PSA2OgorICAgICAgICByZXR1cm4gJy1zbm93bGVvcGFyZCcKKworICAgIHJldHVy
biAnJworCisKK2RlZiBnZXRfbnVtX2NvcmVzKCk6CisgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVy
IG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRlZCBtYWNoaW5lcywKKyAg
ICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHByb2Nlc3NvcnMuIiIi
CisgICAgcmV0dXJuIGludChvcy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1IilbMV0ucmVhZCgp
KQorCisKK2RlZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMg
dGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQor
ICAgIGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxh
dGZvcm18IGlzIE5vbmUsCisgICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlz
IHVzZWQuIiIiCisgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgcGxhdGZvcm0gPSBw
bGF0Zm9ybV9uYW1lKCkKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Vi
a2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKworIyBUT0RP
OiBXZSBzaG91bGQgYWRkIGxlb3BhcmQgYW5kIHNub3dsZW9wYXJkIHRvIHRoZSBsaXN0IG9mIHBh
dGhzIHRvIGNoZWNrCisjIG9uY2Ugd2Ugc3RhcnQgcnVubmluZyB0aGUgdGVzdHMgZnJvbSBzbm93
bGVvcGFyZC4KKworCitkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6Cisg
ICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2Vs
aW5lcy9yZXN1bHRzLCBpbgorICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxh
dGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKKyAgICByZXR1cm4gW2Jhc2Vs
aW5lX3BhdGgocGxhdGZvcm0pLAorICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxp
bmVfcGF0aCgnbWFjJyArIHBsYXRmb3JtX3ZlcnNpb24oKSksCisgICAgICAgICAgICBwYXRoX3V0
aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KKworCitkZWYgd2RpZmZfcGF0aCgpOgor
ICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFzc3VtZSBpcyBh
bHJlYWR5IGluc3RhbGxlZCBhbmQKKyAgICBpbiB0aGUgdXNlcidzICRQQVRILiIiIgorICAgIHJl
dHVybiAnd2RpZmYnCisKKworZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgorICAgICIiIlBh
dGggdG8gdGhlIGltYWdlX2RpZmYgZXhlY3V0YWJsZQorCisgICAgQXJnczoKKyAgICAgIHRhcmdl
dDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKKyAgICByZXR1cm4gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgneGNvZGVidWlsZCcsIHRhcmdldCwgJ2ltYWdlX2RpZmYn
KQorCisKK2RlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQpOgorICAgICIiIlBhdGgg
dG8gdGhlIGxheW91dF90ZXN0X2hlbHBlciBleGVjdXRhYmxlLCBpZiBuZWVkZWQsIGVtcHR5IG90
aGVyd2lzZQorCisgICAgQXJnczoKKyAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1Zycs
J1JlbGVhc2UnLGV0Yy4iIiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
eGNvZGVidWlsZCcsIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnbGF5b3V0X3Rlc3RfaGVscGVyJykKKworCitkZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6
CisgICAgIiIiUGF0aCB0byB0aGUgdGVzdF9zaGVsbCBleGVjdXRhYmxlLgorCisgICAgQXJnczoK
KyAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKKyAg
ICAjIFRPRE8ocGlua2VydG9uKTogbWFrZSB8dGFyZ2V0fCBoYXBweSB3aXRoIGNhc2Utc2Vuc2l0
aXZlIGZpbGUgc3lzdGVtcy4KKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
eGNvZGVidWlsZCcsIHRhcmdldCwgJ1Rlc3RTaGVsbC5hcHAnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdDb250ZW50cycsICdNYWNPUycsICdUZXN0U2hlbGwnKQorCisK
K2RlZiBhcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0
YWJsZSBwYXRoIHRvIHN0YXJ0IEFwYWNoZSIiIgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oIi91
c3IiLCAic2JpbiIsICJodHRwZCIpCisKKworZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6
CisgICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKKyAgICBy
ZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0Iiwg
IkxheW91dFRlc3RzIiwKKyAgICAgICAgImh0dHAiLCAiY29uZiIsICJhcGFjaGUyLWh0dHBkLmNv
bmYiKQorCisKK2RlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKKyAgICByZXR1cm4gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmluJywgJ2xpZ2h0dHBkJykK
KworCitkZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaWJy
YXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBh
dGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnbGliJykKKwor
CitkZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBQSFAgZXhlY3V0
YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnYmluJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhwLWNnaScpCisKKworZGVmIHNodXRfZG93
bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToKKyAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBk
IHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KKworICAgICAg
QXJnczoKKyAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcg
c2VydmVyLgorICAgICIiIgorICAgICMgc2VydmVyX3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0dHBf
c2VydmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxseS4KKyAgICBpZiBzZXJ2ZXJfcGlkIGlzIE5v
bmU6CisgICAgICAgICMgVE9ETyhtbW9zcykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291
bGQgY29uZmxpY3Qgd2l0aCBsaWdodHRwZAorICAgICAgICAjIHByb2Nlc3NlcyBub3Qgc3RhcnRl
ZCBieSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCisgICAgICAgIGtp
bGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKKyAgICAgICAga2lsbF9hbGxfcHJvY2VzcygnaHR0
cGQnKQorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmtpbGwoc2VydmVy
X3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJlIHRo
cm93IGluIGEgU0lHS0lMTCBqdXN0IHRvIGJlIHN1cmU/CisgICAgICAgIGV4Y2VwdCBPU0Vycm9y
OgorICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEg
c3RhbGUgaHR0cGQucGlkIGZpbGUpLAorICAgICAgICAgICAgIyBzbyBpZiBraWxsIGZhaWxzIG9u
IHRoZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvICdraWxsYWxsJyB3ZWIKKyAgICAgICAgICAgICMg
c2VydmVycy4KKyAgICAgICAgICAgIHNodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQorCisKK2Rl
ZiBraWxsX3Byb2Nlc3MocGlkKToKKyAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3Mu
CisKKyAgICBBcmdzOgorICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2ls
bGVkLgorICAgICIiIgorICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKworCitkZWYg
a2lsbF9hbGxfcHJvY2Vzcyhwcm9jZXNzX25hbWUpOgorICAgICMgT24gTWFjIE9TIFggMTAuNiwg
a2lsbGFsbCBoYXMgYSBuZXcgY29uc3RyYWludDogLVNJR05BTE5BTUUgb3IKKyAgICAjIC1TSUdO
QUxOVU1CRVIgbXVzdCBjb21lIGZpcnN0LiAgRXhhbXBsZSBwcm9ibGVtOgorICAgICMgICAkIGtp
bGxhbGwgLXUgJFVTRVIgLVRFUk0gbGlnaHR0cGQKKyAgICAjICAga2lsbGFsbDogaWxsZWdhbCBv
cHRpb24gLS0gVAorICAgICMgVXNlIG9mIHRoZSBlYXJsaWVyIC1URVJNIHBsYWNlbWVudCBpcyBq
dXN0IGZpbmUgb24gMTAuNS4KKyAgICBudWxsID0gb3Blbihvcy5kZXZudWxsKQorICAgIHN1YnBy
b2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwK
KyAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAgIG51
bGwuY2xvc2UoKQorCisKK2RlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgorICAgICIiIktpbGxz
IGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5n
LiIiIgorICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ1Rlc3RTaGVsbCcpCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0
Zm9ybV91dGlsc193aW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxODZiOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3Jt
X3V0aWxzX3dpbi5weQpAQCAtMCwwICsxLDIxMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiVGhpcyBpcyB0aGUgTGludXggaW1wbGVtZW50YXRpb24gb2Yg
dGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCisgICBwYWNrYWdlLiBUaGlzIGZpbGUg
c2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgorCitpbXBvcnQgb3MK
K2ltcG9ydCBwYXRoX3V0aWxzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCisKK2Rl
ZiBwbGF0Zm9ybV9uYW1lKCk6CisgICAgIiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZv
cm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCisgICAgIyBXZSdyZSBub3QgcmVhZHkg
Zm9yIHZlcnNpb24tc3BlY2lmaWMgcmVzdWx0cyB5ZXQuIFdoZW4gd2UgdW5jb21tZW50CisgICAg
IyB0aGlzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBCYXNlbGluZVNlYXJjaFBhdGgo
KQorICAgIHJldHVybiAnY2hyb21pdW0td2luJyArIHBsYXRmb3JtX3ZlcnNpb24oKQorCisKK2Rl
ZiBwbGF0Zm9ybV92ZXJzaW9uKCk6CisgICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcg
Zm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgorICAgICctc25vd2xlb3BhcmQnLiBJ
ZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICAgIG1pbm9yIHZl
cnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgorICAgIHdpbnZlciA9IHN5cy5nZXR3aW5kb3dzdmVy
c2lvbigpCisgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMSk6CisgICAg
ICAgIHJldHVybiAnLTcnCisgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0g
MCk6CisgICAgICAgIHJldHVybiAnLXZpc3RhJworICAgIGlmIHdpbnZlclswXSA9PSA1IGFuZCAo
d2ludmVyWzFdID09IDEgb3Igd2ludmVyWzFdID09IDIpOgorICAgICAgICByZXR1cm4gJy14cCcK
KyAgICByZXR1cm4gJycKKworCitkZWYgZ2V0X251bV9jb3JlcygpOgorICAgICIiIlJldHVybnMg
dGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFj
aGluZXMsCisgICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9j
ZXNzb3JzLiIiIgorICAgIHJldHVybiBpbnQob3MuZW52aXJvbi5nZXQoJ05VTUJFUl9PRl9QUk9D
RVNTT1JTJywgMSkpCisKKworZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6CisgICAg
IiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJl
ZSBmb3IgdGhlCisgICAgYmFzZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNp
b24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKKyAgICB0aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRs
eSBpbiB1c2UgaXMgdXNlZC4iIiIKKyAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICBw
bGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMn
KQorCisKK2RlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJS
ZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jl
c3VsdHMsIGluCisgICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRv
IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIiIgorICAgIGRpcnMgPSBbXQorICAgIGlmIHBs
YXRmb3JtIGlzIE5vbmU6CisgICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZSgpCisKKyAg
ICBpZiBwbGF0Zm9ybSA9PSAnY2hyb21pdW0td2luLXhwJzoKKyAgICAgICAgZGlycy5hcHBlbmQo
YmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkpCisgICAgaWYgcGxhdGZvcm0gaW4gKCdjaHJvbWl1bS13
aW4teHAnLCAnY2hyb21pdW0td2luLXZpc3RhJyk6CisgICAgICAgIGRpcnMuYXBwZW5kKGJhc2Vs
aW5lX3BhdGgoJ2Nocm9taXVtLXdpbi12aXN0YScpKQorICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5l
X3BhdGgoJ2Nocm9taXVtLXdpbicpKQorICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRpbHMud2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ3dpbicpKQorICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRpbHMud2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ21hYycpKQorICAgIHJldHVybiBkaXJzCisKKworZGVmIHdkaWZmX3Bh
dGgoKToKKyAgICAiIiJQYXRoIHRvIHRoZSBXRGlmZiBleGVjdXRhYmxlLCB3aG9zZSBiaW5hcnkg
aXMgY2hlY2tlZCBpbiBvbiBXaW4iIiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3dkaWZmLmV4ZScpCisKKworZGVmIGltYWdlX2RpZmZfcGF0aCh0
YXJnZXQpOgorICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYmluYXJ5IHBhdGgg
Zm9yIHRoZSBpbWFnZSBjb21wYXJlIHV0aWwuCisgICAgICAgICBXZSB1c2UgdGhpcyBpZiB3ZSBj
YW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KKyAgICAgICAgIGlu
IHBhdGhfdXRpbHMuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9k
ZSAoZGVidWcgb3IgcmVsZWFzZSkKKyAgICAiIiIKKyAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRh
cmdldCwgJ2ltYWdlX2RpZmYuZXhlJykKKworCitkZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgo
dGFyZ2V0KToKKyAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRo
IGZvciB0aGUgbGF5b3V0IHRlc3QgaGVscGVyLgorICAgIFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0
IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgorICAgIGluIHBhdGhfdXRp
bHMuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcg
b3IgcmVsZWFzZSkKKyAgICAiIiIKKyAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRhcmdldCwgJ2xh
eW91dF90ZXN0X2hlbHBlci5leGUnKQorCisKK2RlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToK
KyAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciBvdXIg
VGVzdFNoZWxsLgorICAgICAgIFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0IGZpbmQgdGhlIGJpbmFy
eSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgorICAgICAgIGluIHBhdGhfdXRpbHMuCisKKyAgICBB
cmdzOgorICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkK
KyAgICAiIiIKKyAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRhcmdldCwgJ3Rlc3Rfc2hlbGwuZXhl
JykKKworCitkZWYgYXBhY2hlX2V4ZWN1dGFibGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhl
IGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUiIiIKKyAgICBwYXRoID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgInVzciIsICJzYmluIikK
KyAgICAjIERvbid0IHJldHVybiBodHRwZC5leGUgc2luY2Ugd2Ugd2FudCB0byB1c2UgdGhpcyBm
cm9tIGN5Z3dpbi4KKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsICJodHRwZCIpCisKKwor
ZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0
byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxheW91dFRlc3RzIiwKKyAgICAgICAgImh0
dHAiLCAiY29uZiIsICJjeWd3aW4taHR0cGQuY29uZiIpCisKKworZGVmIGxpZ2h0dHBkX2V4ZWN1
dGFibGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFy
dCBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGly
ZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdMaWdodFRQRC5leGUnKQorCisKK2RlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgp
OgorICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIi
CisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xp
Z2h0dHBkJywgJ3dpbicsICdsaWInKQorCisKK2RlZiBsaWdodHRwZF9waHBfcGF0aCgpOgorICAg
ICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAg
cmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBk
JywgJ3dpbicsICdwaHA1JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
cGhwLWNnaS5leGUnKQorCisKK2RlZiBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6
CisgICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwg
aXQncyBmdWxseSBzaHV0IGRvd24uCisKKyAgICBBcmdzOgorICAgICAgc2VydmVyX3BpZDogVGhl
IHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgorICAgICAgICAgIFVudXNlZCBpbiB0
aGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2QuCisgICAgIiIiCisgICAgc3VicHJvY2Vz
cy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnTGlnaHRUUEQuZXhlJyksCisg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAg
ICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCisgICAgc3VicHJvY2Vzcy5Q
b3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnaHR0cGQuZXhlJyksCisgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAg
ICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCisKKworZGVmIGtpbGxfcHJvY2Vzcyhw
aWQpOgorICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgIEFyZ3M6Cisg
ICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCisgICAgIiIiCisg
ICAgc3VicHJvY2Vzcy5jYWxsKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9waWQnLCBzdHIocGlk
KSksCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKworZGVmIGtpbGxfYWxsX3Rl
c3Rfc2hlbGxzKHNlbGYpOgorICAgICIiIktpbGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rf
c2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIiIgorICAgIHN1YnByb2Nlc3MuUG9wZW4o
KCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ3Rlc3Rfc2hlbGwuZXhlJyksCisgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAg
ICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCisKKyMKKyMgUHJpdmF0ZSBoZWxwZXIg
ZnVuY3Rpb25zLgorIworCisKK2RlZiBfZmluZF9iaW5hcnkodGFyZ2V0LCBiaW5hcnkpOgorICAg
ICIiIk9uIFdpbmRvd3MsIHdlIGxvb2sgZm9yIGJpbmFyaWVzIHRoYXQgd2UgY29tcGlsZSBpbiBw
b3RlbnRpYWxseQorICAgIHR3byBwbGFjZXM6IHNyYy93ZWJraXQvJHRhcmdldCAocHJlZmVyYWJs
eSwgd2hpY2ggd2UgZ2V0IGlmIHdlCisgICAgYnVpbHQgdXNpbmcgd2Via2l0X2dsdWUuZ3lwKSwg
b3Igc3JjL2Nocm9tZS8kdGFyZ2V0IChpZiBjb21waWxlZCBzb21lCisgICAgb3RoZXIgd2F5KS4i
IiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3
ZWJraXQnLCB0YXJnZXQsIGJpbmFyeSkKKyAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91
bmQ6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCdjaHJvbWUnLCB0YXJnZXQsIGJpbmFyeSkKKyAgICAgICAgZXhjZXB0IHBhdGhfdXRp
bHMuUGF0aE5vdEZvdW5kOgorICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoJ2J1aWxkJywgdGFyZ2V0LCBiaW5hcnkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0
aW9ucy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmMzN2VjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5w
eQpAQCAtMCwwICsxLDgxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiQSBoZWxwZXIgY2xhc3MgZm9yIHJlYWRpbmcgaW4gYW5kIGRlYWxpbmcgd2l0aCB0
ZXN0cyBleHBlY3RhdGlvbnMKK2ZvciBsYXlvdXQgdGVzdHMuCisiIiIKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0
IHBhdGhfdXRpbHMKKworc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ1dlYktpdFRvb2xzJykpIAoraW1wb3J0IHNpbXBsZWpzb24KKworIyBUZXN0
IGV4cGVjdGF0aW9uIGFuZCBtb2RpZmllciBjb25zdGFudHMuCisoUEFTUywgRkFJTCwgVEVYVCwg
SU1BR0UsIElNQUdFX1BMVVNfVEVYVCwgVElNRU9VVCwgQ1JBU0gsIFNLSVAsIFdPTlRGSVgsCisg
REVGRVIsIFNMT1csIFJFQkFTRUxJTkUsIE1JU1NJTkcsIEZMQUtZLCBOT1csIE5PTkUpID0gcmFu
Z2UoMTYpCisKKyMgVGVzdCBleHBlY3RhdGlvbiBmaWxlIHVwZGF0ZSBhY3Rpb24gY29uc3RhbnRz
CisoTk9fQ0hBTkdFLCBSRU1PVkVfVEVTVCwgUkVNT1ZFX1BMQVRGT1JNLCBBRERfUExBVEZPUk1T
X0VYQ0VQVF9USElTKSA9IHJhbmdlKDQpCisKKworY2xhc3MgVGVzdEV4cGVjdGF0aW9uczoKKyAg
ICBURVNUX0xJU1QgPSAidGVzdF9leHBlY3RhdGlvbnMudHh0IgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHRlc3RzLCBkaXJlY3RvcnksIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLCBpc19saW50
X21vZGUsCisgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgorICAgICAgICAiIiJSZWFk
cyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgZmlsZXMgZnJvbSB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIi
IgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgc2VsZi5URVNUX0xJU1Qp
CisgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUo
cGF0aCwgdGVzdHMsIHBsYXRmb3JtLAorICAgICAgICAgICAgaXNfZGVidWdfbW9kZSwgaXNfbGlu
dF9tb2RlLCB0ZXN0c19hcmVfcHJlc2VudD10ZXN0c19hcmVfcHJlc2VudCkKKworICAgICMgVE9E
TyhvamFuKTogQWxsb3cgZm9yIHJlbW92aW5nIHNraXBwZWQgdGVzdHMgd2hlbiBnZXR0aW5nIHRo
ZSBsaXN0IG9mCisgICAgIyB0ZXN0cyB0byBydW4sIGJ1dCBub3Qgd2hlbiBnZXR0aW5nIG1ldHJp
Y3MuCisgICAgIyBUT0RPKG9qYW4pOiBSZXBsYWNlIHRoZSBHZXQqIGNhbGxzIGhlcmUgd2l0aCB0
aGUgbW9yZSBzYW5lIEFQSSBleHBvc2VkCisgICAgIyBieSBUZXN0RXhwZWN0YXRpb25zRmlsZSBi
ZWxvdy4gTWF5YmUgbWVyZ2UgdGhlIHR3byBjbGFzc2VzIGVudGlyZWx5PworCisgICAgZGVmIGdl
dF9leHBlY3RhdGlvbnNfanNvbl9mb3JfYWxsX3BsYXRmb3JtcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuICgKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF9leHBlY3RhdGlv
bnNfanNvbl9mb3JfYWxsX3BsYXRmb3JtcygpKQorCisgICAgZGVmIGdldF9yZWJhc2VsaW5pbmdf
ZmFpbHVyZXMoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMu
Z2V0X3Rlc3Rfc2V0KFJFQkFTRUxJTkUsIEZBSUwpIHwKKyAgICAgICAgICAgICAgICBzZWxmLl9l
eHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdF9zZXQoUkVCQVNFTElORSwgSU1BR0UpIHwKKyAgICAg
ICAgICAgICAgICBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdF9zZXQoUkVCQVNFTElO
RSwgVEVYVCkgfAorICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF90
ZXN0X3NldChSRUJBU0VMSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJTUFHRV9QTFVTX1RFWFQpKQorCisgICAgZGVmIGdldF9vcHRpb25z
KHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0
X29wdGlvbnModGVzdCkKKworICAgIGRlZiBnZXRfZXhwZWN0YXRpb25zKHNlbGYsIHRlc3QpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X2V4cGVjdGF0aW9ucyh0
ZXN0KQorCisgICAgZGVmIGdldF9leHBlY3RhdGlvbnNfc3RyaW5nKHNlbGYsIHRlc3QpOgorICAg
ICAgICAiIiJSZXR1cm5zIHRoZSBleHBlY3RhdG9ucyBmb3IgdGhlIGdpdmVuIHRlc3QgYXMgYW4g
dXBwZXJjYXNlIHN0cmluZy4KKyAgICAgICAgSWYgdGhlcmUgYXJlIG5vIGV4cGVjdGF0aW9ucyBm
b3IgdGhlIHRlc3QsIHRoZW4gIlBBU1MiIGlzIHJldHVybmVkLiIiIgorICAgICAgICBleHBlY3Rh
dGlvbnMgPSBzZWxmLmdldF9leHBlY3RhdGlvbnModGVzdCkKKyAgICAgICAgcmV0dmFsID0gW10K
KworICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAg
Zm9yIGl0ZW0gaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TLml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgaWYgaXRlbVsxXSA9PSBleHBlY3RhdGlvbjoKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dmFsLmFwcGVuZChpdGVtWzBdKQorICAgICAgICAgICAgICAgICAgICBicmVhawor
CisgICAgICAgIHJldHVybiAiICIuam9pbihyZXR2YWwpLnVwcGVyKCkKKworICAgIGRlZiBnZXRf
dGltZWxpbmVfZm9yX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBl
Y3RlZF9mYWlsdXJlcy5nZXRfdGltZWxpbmVfZm9yX3Rlc3QodGVzdCkKKworICAgIGRlZiBnZXRf
dGVzdHNfd2l0aF9yZXN1bHRfdHlwZShzZWxmLCByZXN1bHRfdHlwZSk6CisgICAgICAgIHJldHVy
biBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRfdHlwZShyZXN1
bHRfdHlwZSkKKworICAgIGRlZiBnZXRfdGVzdHNfd2l0aF90aW1lbGluZShzZWxmLCB0aW1lbGlu
ZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdHNfd2l0
aF90aW1lbGluZSh0aW1lbGluZSkKKworICAgIGRlZiBtYXRjaGVzX2FuX2V4cGVjdGVkX3Jlc3Vs
dChzZWxmLCB0ZXN0LCByZXN1bHQpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgd2UgZ290
IG9uZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgdGhpcyB0ZXN0LiIiIgorICAgICAgICBy
ZXR1cm4gKHJlc3VsdCBpbiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfZXhwZWN0YXRpb25z
KHRlc3QpIG9yCisgICAgICAgICAgICAgICAgKHJlc3VsdCBpbiAoSU1BR0UsIFRFWFQsIElNQUdF
X1BMVVNfVEVYVCkgYW5kCisgICAgICAgICAgICAgICAgRkFJTCBpbiBzZWxmLl9leHBlY3RlZF9m
YWlsdXJlcy5nZXRfZXhwZWN0YXRpb25zKHRlc3QpKSBvcgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9PSBNSVNTSU5HIGFuZCBzZWxmLmlzX3JlYmFzZWxpbmluZyh0ZXN0KSBvcgorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9PSBTS0lQIGFuZCBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5oYXNfbW9k
aWZpZXIodGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNLSVApKQorCisgICAgZGVmIGlzX3JlYmFzZWxp
bmluZyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVz
Lmhhc19tb2RpZmllcih0ZXN0LCBSRUJBU0VMSU5FKQorCisgICAgZGVmIGhhc19tb2RpZmllcihz
ZWxmLCB0ZXN0LCBtb2RpZmllcik6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWls
dXJlcy5oYXNfbW9kaWZpZXIodGVzdCwgbW9kaWZpZXIpCisKKyAgICBkZWYgcmVtb3ZlX3BsYXRm
b3JtX2Zyb21fZmlsZShzZWxmLCB0ZXN0cywgcGxhdGZvcm0sIGJhY2t1cD1GYWxzZSk6CisgICAg
ICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5yZW1vdmVfcGxhdGZvcm1fZnJvbV9m
aWxlKHRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwKQorCisKK2RlZiBz
dHJpcF9jb21tZW50cyhsaW5lKToKKyAgICAiIiJTdHJpcHMgY29tbWVudHMgZnJvbSBhIGxpbmUg
YW5kIHJldHVybiBOb25lIGlmIHRoZSBsaW5lIGlzIGVtcHR5CisgICAgb3IgZWxzZSB0aGUgY29u
dGVudHMgb2YgbGluZSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyByZW1vdmVkCisg
ICAgYW5kIGFsbCBvdGhlciB3aGl0ZXNwYWNlIGNvbGxhcHNlZCIiIgorCisgICAgY29tbWVudElu
ZGV4ID0gbGluZS5maW5kKCcvLycpCisgICAgaWYgY29tbWVudEluZGV4IGlzIC0xOgorICAgICAg
ICBjb21tZW50SW5kZXggPSBsZW4obGluZSkKKworICAgIGxpbmUgPSByZS5zdWIocidccysnLCAn
ICcsIGxpbmVbOmNvbW1lbnRJbmRleF0uc3RyaXAoKSkKKyAgICBpZiBsaW5lID09ICcnOgorICAg
ICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xh
c3MgTW9kaWZpZXJzQW5kRXhwZWN0YXRpb25zOgorICAgICIiIkEgaG9sZGVyIGZvciBtb2RpZmll
cnMgYW5kIGV4cGVjdGF0aW9ucyBvbiBhIHRlc3QgdGhhdCBzZXJpYWxpemVzIHRvCisgICAgSlNP
Ti4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RpZmllcnMsIGV4cGVjdGF0aW9ucyk6
CisgICAgICAgIHNlbGYubW9kaWZpZXJzID0gbW9kaWZpZXJzCisgICAgICAgIHNlbGYuZXhwZWN0
YXRpb25zID0gZXhwZWN0YXRpb25zCisKKworY2xhc3MgRXhwZWN0YXRpb25zSnNvbkVuY29kZXIo
c2ltcGxlanNvbi5KU09ORW5jb2Rlcik6CisgICAgIiIiSlNPTiBlbmNvZGVyIHRoYXQgY2FuIGhh
bmRsZSBNb2RpZmllcnNBbmRFeHBlY3RhdGlvbnMgb2JqZWN0cy4KKyAgICAiIiIKKworICAgIGRl
ZiBkZWZhdWx0KHNlbGYsIG9iaik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBNb2RpZmll
cnNBbmRFeHBlY3RhdGlvbnMpOgorICAgICAgICAgICAgcmV0dXJuIHsibW9kaWZpZXJzIjogb2Jq
Lm1vZGlmaWVycywKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGF0aW9ucyI6IG9iai5leHBl
Y3RhdGlvbnN9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gSlNPTkVuY29kZXIu
ZGVmYXVsdChzZWxmLCBvYmopCisKKworY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CisgICAg
IiIiVGVzdCBleHBlY3RhdGlvbiBmaWxlcyBjb25zaXN0IG9mIGxpbmVzIHdpdGggc3BlY2lmaWNh
dGlvbnMgb2Ygd2hhdAorICAgIHRvIGV4cGVjdCBmcm9tIGxheW91dCB0ZXN0IGNhc2VzLiBUaGUg
dGVzdCBjYXNlcyBjYW4gYmUgZGlyZWN0b3JpZXMKKyAgICBpbiB3aGljaCBjYXNlIHRoZSBleHBl
Y3RhdGlvbnMgYXBwbHkgdG8gYWxsIHRlc3QgY2FzZXMgaW4gdGhhdAorICAgIGRpcmVjdG9yeSBh
bmQgYW55IHN1YmRpcmVjdG9yeS4gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyBhbG9uZyB0aGUK
KyAgICBsaW5lcyBvZjoKKworICAgICAgTGF5b3V0VGVzdHMvZmFzdC9qcy9maXhtZS5qcyA9IEZB
SUwKKyAgICAgIExheW91dFRlc3RzL2Zhc3QvanMvZmxha3kuanMgPSBGQUlMIFBBU1MKKyAgICAg
IExheW91dFRlc3RzL2Zhc3QvanMvY3Jhc2guanMgPSBDUkFTSCBUSU1FT1VUIEZBSUwgUEFTUwor
ICAgICAgLi4uCisKKyAgICBUbyBhZGQgb3RoZXIgb3B0aW9uczoKKyAgICAgIFNLSVAgOiBMYXlv
dXRUZXN0cy9mYXN0L2pzL25vLWdvb2QuanMgPSBUSU1FT1VUIFBBU1MKKyAgICAgIERFQlVHIDog
TGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisgICAgICBERUJV
RyBTS0lQIDogTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisg
ICAgICBMSU5VWCBERUJVRyBTS0lQIDogTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0g
VElNRU9VVCBQQVNTCisgICAgICBERUZFUiBMSU5VWCBXSU4gOiBMYXlvdXRUZXN0cy9mYXN0L2pz
L25vLWdvb2QuanMgPSBUSU1FT1VUIFBBU1MKKworICAgIFNLSVA6IERvZXNuJ3QgcnVuIHRoZSB0
ZXN0LgorICAgIFNMT1c6IFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIHRvIHJ1biwgYnV0IGRv
ZXMgbm90IHRpbWVvdXQgaW5kZWZpbml0ZWx5LgorICAgIFdPTlRGSVg6IEZvciB0ZXN0cyB0aGF0
IHdlIG5ldmVyIGludGVuZCB0byBwYXNzIG9uIGEgZ2l2ZW4gcGxhdGZvcm0uCisgICAgREVGRVI6
IFRlc3QgZG9lcyBub3QgY291bnQgaW4gb3VyIHN0YXRpc3RpY3MgZm9yIHRoZSBjdXJyZW50IHJl
bGVhc2UuCisgICAgREVCVUc6IEV4cGVjdGF0aW9ucyBhcHBseSBvbmx5IHRvIHRoZSBkZWJ1ZyBi
dWlsZC4KKyAgICBSRUxFQVNFOiBFeHBlY3RhdGlvbnMgYXBwbHkgb25seSB0byByZWxlYXNlIGJ1
aWxkLgorICAgIExJTlVYL1dJTi9XSU4tWFAvV0lOLVZJU1RBL1dJTi03L01BQzogRXhwZWN0YXRp
b25zIGFwcGx5IG9ubHkgdG8gdGhlc2UKKyAgICAgICAgcGxhdGZvcm1zLgorCisgICAgTm90ZXM6
CisgICAgICAtQSB0ZXN0IGNhbm5vdCBiZSBib3RoIFNMT1cgYW5kIFRJTUVPVVQKKyAgICAgIC1B
IHRlc3QgY2Fubm90IGJlIGJvdGggREVGRVIgYW5kIFdPTlRGSVgKKyAgICAgIC1BIHRlc3Qgc2hv
dWxkIG9ubHkgYmUgb25lIG9mIElNQUdFLCBURVhULCBJTUFHRStURVhULCBvciBGQUlMLiBGQUlM
IGlzCisgICAgICAgYSBtaWdyYXRvcnkgc3RhdGUgdGhhdCBjdXJyZW50bHkgbWVhbnMgZWl0aGVy
IElNQUdFLCBURVhULCBvcgorICAgICAgIElNQUdFK1RFWFQuIE9uY2Ugd2UgaGF2ZSBmaW5pc2hl
ZCBtaWdyYXRpbmcgdGhlIGV4cGVjdGF0aW9ucywgd2Ugd2lsbAorICAgICAgIGNoYW5nZSBGQUlM
IHRvIGhhdmUgdGhlIG1lYW5pbmcgb2YgSU1BR0UrVEVYVCBhbmQgcmVtb3ZlIHRoZSBJTUFHRStU
RVhUCisgICAgICAgaWRlbnRpZmllci4KKyAgICAgIC1BIHRlc3QgY2FuIGJlIGluY2x1ZGVkIHR3
aWNlLCBidXQgbm90IHZpYSB0aGUgc2FtZSBwYXRoLgorICAgICAgLUlmIGEgdGVzdCBpcyBpbmNs
dWRlZCB0d2ljZSwgdGhlbiB0aGUgbW9yZSBwcmVjaXNlIHBhdGggd2lucy4KKyAgICAgIC1DUkFT
SCB0ZXN0cyBjYW5ub3QgYmUgREVGRVIgb3IgV09OVEZJWAorICAgICIiIgorCisgICAgRVhQRUNU
QVRJT05TID0geydwYXNzJzogUEFTUywKKyAgICAgICAgICAgICAgICAgICAgJ2ZhaWwnOiBGQUlM
LAorICAgICAgICAgICAgICAgICAgICAndGV4dCc6IFRFWFQsCisgICAgICAgICAgICAgICAgICAg
ICdpbWFnZSc6IElNQUdFLAorICAgICAgICAgICAgICAgICAgICAnaW1hZ2UrdGV4dCc6IElNQUdF
X1BMVVNfVEVYVCwKKyAgICAgICAgICAgICAgICAgICAgJ3RpbWVvdXQnOiBUSU1FT1VULAorICAg
ICAgICAgICAgICAgICAgICAnY3Jhc2gnOiBDUkFTSCwKKyAgICAgICAgICAgICAgICAgICAgJ21p
c3NpbmcnOiBNSVNTSU5HfQorCisgICAgRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TID0ge1NLSVA6
ICgnc2tpcHBlZCcsICdza2lwcGVkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBBU1M6ICgncGFzcycsICdwYXNzZXMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRkFJTDogKCdmYWlsdXJlJywgJ2ZhaWx1cmVzJyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRFWFQ6ICgndGV4dCBkaWZmIG1pc21hdGNoJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd0ZXh0IGRpZmYgbWlzbWF0Y2gnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSU1BR0U6ICgnaW1hZ2UgbWlzbWF0Y2gnLCAnaW1hZ2UgbWlz
bWF0Y2gnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfUExVU19URVhU
OiAoJ2ltYWdlIGFuZCB0ZXh0IG1pc21hdGNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2ltYWdlIGFuZCB0ZXh0IG1pc21hdGNoJyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSQVNIOiAoJ3Rlc3Qgc2hlbGwgY3Jhc2gnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHNoZWxsIGNyYXNo
ZXMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNRU9VVDogKCd0ZXN0IHRp
bWVkIG91dCcsICd0ZXN0cyB0aW1lZCBvdXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTUlTU0lORzogKCdubyBleHBlY3RlZCByZXN1bHQgZm91bmQnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vIGV4cGVjdGVkIHJlc3VsdHMgZm91bmQn
KX0KKworICAgIEVYUEVDVEFUSU9OX09SREVSID0gKFBBU1MsIENSQVNILCBUSU1FT1VULCBNSVNT
SU5HLCBJTUFHRV9QTFVTX1RFWFQsCisgICAgICAgVEVYVCwgSU1BR0UsIEZBSUwsIFNLSVApCisK
KyAgICBCQVNFX1BMQVRGT1JNUyA9ICgnbGludXgnLCAnbWFjJywgJ3dpbicpCisgICAgUExBVEZP
Uk1TID0gQkFTRV9QTEFURk9STVMgKyAoJ3dpbi14cCcsICd3aW4tdmlzdGEnLCAnd2luLTcnKQor
CisgICAgQlVJTERfVFlQRVMgPSAoJ2RlYnVnJywgJ3JlbGVhc2UnKQorCisgICAgTU9ESUZJRVJT
ID0geydza2lwJzogU0tJUCwKKyAgICAgICAgICAgICAgICAgJ3dvbnRmaXgnOiBXT05URklYLAor
ICAgICAgICAgICAgICAgICAnZGVmZXInOiBERUZFUiwKKyAgICAgICAgICAgICAgICAgJ3Nsb3cn
OiBTTE9XLAorICAgICAgICAgICAgICAgICAncmViYXNlbGluZSc6IFJFQkFTRUxJTkUsCisgICAg
ICAgICAgICAgICAgICdub25lJzogTk9ORX0KKworICAgIFRJTUVMSU5FUyA9IHsnd29udGZpeCc6
IFdPTlRGSVgsCisgICAgICAgICAgICAgICAgICdub3cnOiBOT1csCisgICAgICAgICAgICAgICAg
ICdkZWZlcic6IERFRkVSfQorCisgICAgUkVTVUxUX1RZUEVTID0geydza2lwJzogU0tJUCwKKyAg
ICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiBQQVNTLAorICAgICAgICAgICAgICAgICAgICAnZmFp
bCc6IEZBSUwsCisgICAgICAgICAgICAgICAgICAgICdmbGFreSc6IEZMQUtZfQorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBhdGgsIGZ1bGxfdGVzdF9saXN0LCBwbGF0Zm9ybSwgaXNfZGVidWdf
bW9kZSwKKyAgICAgICAgaXNfbGludF9tb2RlLCBleHBlY3RhdGlvbnNfYXNfc3RyPU5vbmUsIHN1
cHByZXNzX2Vycm9ycz1GYWxzZSwKKyAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9VHJ1ZSk6Cisg
ICAgICAgICIiIgorICAgICAgICBwYXRoOiBUaGUgcGF0aCB0byB0aGUgZXhwZWN0YXRpb24gZmls
ZS4gQW4gZXJyb3IgaXMgdGhyb3duIGlmIGEgdGVzdCBpcworICAgICAgICAgICAgbGlzdGVkIG1v
cmUgdGhhbiBvbmNlLgorICAgICAgICBmdWxsX3Rlc3RfbGlzdDogVGhlIGxpc3Qgb2YgYWxsIHRl
c3RzIHRvIGJlIHJ1biBwZW5kaW5nIHByb2Nlc3Npbmcgb2YKKyAgICAgICAgICAgIHRoZSBleHBl
Y3Rpb25zIGZvciB0aG9zZSB0ZXN0cy4KKyAgICAgICAgcGxhdGZvcm06IFdoaWNoIHBsYXRmb3Jt
IGZyb20gc2VsZi5QTEFURk9STVMgdG8gZmlsdGVyIHRlc3RzIGZvci4KKyAgICAgICAgaXNfZGVi
dWdfbW9kZTogV2hldGhlciB3ZSB0ZXN0aW5nIGEgdGVzdF9zaGVsbCBidWlsdCBkZWJ1ZyBtb2Rl
LgorICAgICAgICBpc19saW50X21vZGU6IFdoZXRoZXIgdGhpcyBpcyBqdXN0IGxpbnRpbmcgdGVz
dF9leHBlY2F0YXRpb25zLnR4dC4KKyAgICAgICAgZXhwZWN0YXRpb25zX2FzX3N0cjogQ29udGVu
dHMgb2YgdGhlIGV4cGVjdGF0aW9ucyBmaWxlLiBVc2VkIGluc3RlYWQgb2YKKyAgICAgICAgICAg
IHRoZSBwYXRoLiBUaGlzIG1ha2VzIHVuaXR0ZXN0aW5nIHNhbmUuCisgICAgICAgIHN1cHByZXNz
X2Vycm9yczogV2hldGhlciB0byBzdXBwcmVzcyBsaW50IGVycm9ycy4KKyAgICAgICAgdGVzdHNf
YXJlX3ByZXNlbnQ6IFdoZXRoZXIgdGhlIHRlc3QgZmlsZXMgYXJlIHByZXNlbnQgaW4gdGhlIGxv
Y2FsCisgICAgICAgICAgICBmaWxlc3lzdGVtLiBUaGUgTFRURiBEYXNoYm9hcmQgdXNlcyBGYWxz
ZSBoZXJlIHRvIGF2b2lkIGhhdmluZyB0bworICAgICAgICAgICAga2VlcCBhIGxvY2FsIGNvcHkg
b2YgdGhlIHRyZWUuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCisg
ICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uc19hc19zdHIgPSBleHBlY3RhdGlvbnNfYXNfc3RyCisg
ICAgICAgIHNlbGYuX2lzX2xpbnRfbW9kZSA9IGlzX2xpbnRfbW9kZQorICAgICAgICBzZWxmLl90
ZXN0c19hcmVfcHJlc2VudCA9IHRlc3RzX2FyZV9wcmVzZW50CisgICAgICAgIHNlbGYuX2Z1bGxf
dGVzdF9saXN0ID0gZnVsbF90ZXN0X2xpc3QKKyAgICAgICAgc2VsZi5fc3VwcHJlc3NfZXJyb3Jz
ID0gc3VwcHJlc3NfZXJyb3JzCisgICAgICAgIHNlbGYuX2Vycm9ycyA9IFtdCisgICAgICAgIHNl
bGYuX25vbl9mYXRhbF9lcnJvcnMgPSBbXQorICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHNlbGYu
dG9fdGVzdF9wbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQorICAgICAgICBpZiBzZWxmLl9wbGF0Zm9y
bSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHBsYXRmb3Jt
ICclcyciICUgKHBsYXRmb3JtKSkKKyAgICAgICAgc2VsZi5faXNfZGVidWdfbW9kZSA9IGlzX2Rl
YnVnX21vZGUKKworICAgICAgICAjIE1hcHMgcmVsYXRpdmUgdGVzdCBwYXRocyBhcyBsaXN0ZWQg
aW4gdGhlIGV4cGVjdGF0aW9ucyBmaWxlIHRvIGEKKyAgICAgICAgIyBsaXN0IG9mIG1hcHMgY29u
dGFpbmluZyBtb2RpZmllcnMgYW5kIGV4cGVjdGF0aW9ucyBmb3IgZWFjaCB0aW1lCisgICAgICAg
ICMgdGhlIHRlc3QgaXMgbGlzdGVkIGluIHRoZSBleHBlY3RhdGlvbnMgZmlsZS4KKyAgICAgICAg
c2VsZi5fYWxsX2V4cGVjdGF0aW9ucyA9IHt9CisKKyAgICAgICAgIyBNYXBzIGEgdGVzdCB0byBp
dHMgbGlzdCBvZiBleHBlY3RhdGlvbnMuCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRp
b25zID0ge30KKworICAgICAgICAjIE1hcHMgYSB0ZXN0IHRvIGl0cyBsaXN0IG9mIG9wdGlvbnMg
KHN0cmluZyB2YWx1ZXMpCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fb3B0aW9ucyA9IHt9CisKKyAg
ICAgICAgIyBNYXBzIGEgdGVzdCB0byBpdHMgbGlzdCBvZiBtb2RpZmllcnM6IHRoZSBjb25zdGFu
dHMgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICMgdGhlIG9wdGlvbnMgbWludXMgYW55IGJ1ZyBv
ciBwbGF0Zm9ybSBzdHJpbmdzCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fbW9kaWZpZXJzID0ge30K
KworICAgICAgICAjIE1hcHMgYSB0ZXN0IHRvIHRoZSBiYXNlIHBhdGggdGhhdCBpdCB3YXMgbGlz
dGVkIHdpdGggaW4gdGhlIGxpc3QuCisgICAgICAgIHNlbGYuX3Rlc3RfbGlzdF9wYXRocyA9IHt9
CisKKyAgICAgICAgc2VsZi5fbW9kaWZpZXJfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMo
c2VsZi5NT0RJRklFUlMpCisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uX3RvX3Rlc3RzID0gc2Vs
Zi5fZGljdF9vZl9zZXRzKHNlbGYuRVhQRUNUQVRJT05TKQorICAgICAgICBzZWxmLl90aW1lbGlu
ZV90b190ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0cyhzZWxmLlRJTUVMSU5FUykKKyAgICAgICAg
c2VsZi5fcmVzdWx0X3R5cGVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoc2VsZi5SRVNV
TFRfVFlQRVMpCisKKyAgICAgICAgc2VsZi5fcmVhZChzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0
YXRpb25zKCkpCisKKyAgICBkZWYgX2RpY3Rfb2Zfc2V0cyhzZWxmLCBzdHJpbmdzX3RvX2NvbnN0
YW50cyk6CisgICAgICAgICIiIlRha2VzIGEgZGljdCBvZiBzdHJpbmdzLT5jb25zdGFudHMgYW5k
IHJldHVybnMgYSBkaWN0IG1hcHBpbmcKKyAgICAgICAgZWFjaCBjb25zdGFudCB0byBhbiBlbXB0
eSBzZXQuIiIiCisgICAgICAgIGQgPSB7fQorICAgICAgICBmb3IgYyBpbiBzdHJpbmdzX3RvX2Nv
bnN0YW50cy52YWx1ZXMoKToKKyAgICAgICAgICAgIGRbY10gPSBzZXQoKQorICAgICAgICByZXR1
cm4gZAorCisgICAgZGVmIF9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSBpdGVyYXRlZCBvdmVyLiBBbGxvd3Mg
Zm9yIG5vdCBjYXJpbmcKKyAgICAgICAgYWJvdXQgd2hldGhlciB3ZSdyZSBpdGVyYXRpbmcgb3Zl
ciBhIGZpbGUgb3IgYSBuZXctbGluZSBzZXBhcmF0ZWQKKyAgICAgICAgc3RyaW5nLiIiIgorICAg
ICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnNfYXNfc3RyOgorICAgICAgICAgICAgaXRlcmFibGUg
PSBbeCArICJcbiIgZm9yIHggaW4KKyAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNf
YXNfc3RyLnNwbGl0KCJcbiIpXQorICAgICAgICAgICAgIyBTdHJpcCBmaW5hbCBlbnRyeSBpZiBp
dCdzIGVtcHR5IHRvIGF2b2lkIGFkZGVkIGluIGFuIGV4dHJhCisgICAgICAgICAgICAjIG5ld2xp
bmUuCisgICAgICAgICAgICBpZiBpdGVyYWJsZVtsZW4oaXRlcmFibGUpIC0gMV0gPT0gIlxuIjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmFibGVbOmxlbihpdGVyYWJsZSkgLSAxXQorICAg
ICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1
cm4gb3BlbihzZWxmLl9wYXRoKQorCisgICAgZGVmIHRvX3Rlc3RfcGxhdGZvcm1fbmFtZShzZWxm
LCBuYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdGVzdCBleHBlY3RhdGlvbiBwbGF0Zm9y
bSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYQorICAgICAgICBnaXZlbiBwbGF0Zm9ybSBuYW1lLCBv
ciBOb25lIGlmIHRoZXJlIGlzIG5vIG1hdGNoLiIiIgorICAgICAgICBjaHJvbWl1bV9wcmVmaXgg
PSAnY2hyb21pdW0tJworICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCisgICAgICAgIGlmIG5h
bWUuc3RhcnRzd2l0aChjaHJvbWl1bV9wcmVmaXgpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVb
bGVuKGNocm9taXVtX3ByZWZpeCk6XQorICAgICAgICBpZiBuYW1lIGluIHNlbGYuUExBVEZPUk1T
OgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRl
ZiBnZXRfdGVzdF9zZXQoc2VsZiwgbW9kaWZpZXIsIGV4cGVjdGF0aW9uPU5vbmUsIGluY2x1ZGVf
c2tpcHM9VHJ1ZSk6CisgICAgICAgIGlmIGV4cGVjdGF0aW9uIGlzIE5vbmU6CisgICAgICAgICAg
ICB0ZXN0cyA9IHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzW21vZGlmaWVyXQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgdGVzdHMgPSAoc2VsZi5fZXhwZWN0YXRpb25fdG9fdGVzdHNbZXhwZWN0
YXRpb25dICYKKyAgICAgICAgICAgICAgICBzZWxmLl9tb2RpZmllcl90b190ZXN0c1ttb2RpZmll
cl0pCisKKyAgICAgICAgaWYgbm90IGluY2x1ZGVfc2tpcHM6CisgICAgICAgICAgICB0ZXN0cyA9
IHRlc3RzIC0gc2VsZi5nZXRfdGVzdF9zZXQoU0tJUCwgZXhwZWN0YXRpb24pCisKKyAgICAgICAg
cmV0dXJuIHRlc3RzCisKKyAgICBkZWYgZ2V0X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUoc2VsZiwg
cmVzdWx0X3R5cGUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0X3R5cGVfdG9fdGVzdHNb
cmVzdWx0X3R5cGVdCisKKyAgICBkZWYgZ2V0X3Rlc3RzX3dpdGhfdGltZWxpbmUoc2VsZiwgdGlt
ZWxpbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGltZWxpbmVfdG9fdGVzdHNbdGltZWxpbmVd
CisKKyAgICBkZWYgZ2V0X29wdGlvbnMoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlRoaXMgcmV0
dXJucyB0aGUgZW50aXJlIHNldCBvZiBvcHRpb25zIGZvciB0aGUgZ2l2ZW4gdGVzdAorICAgICAg
ICAodGhlIG1vZGlmaWVycyBwbHVzIHRoZSBCVUdYWFhYIGlkZW50aWZpZXIpLiBUaGlzIGlzIHVz
ZWQgYnkgdGhlCisgICAgICAgIExUVEYgZGFzaGJvYXJkLiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fdGVzdF90b19vcHRpb25zW3Rlc3RdCisKKyAgICBkZWYgaGFzX21vZGlmaWVyKHNlbGYsIHRl
c3QsIG1vZGlmaWVyKToKKyAgICAgICAgcmV0dXJuIHRlc3QgaW4gc2VsZi5fbW9kaWZpZXJfdG9f
dGVzdHNbbW9kaWZpZXJdCisKKyAgICBkZWYgZ2V0X2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0KToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25zW3Rlc3RdCisKKyAgICBk
ZWYgZ2V0X2V4cGVjdGF0aW9uc19qc29uX2Zvcl9hbGxfcGxhdGZvcm1zKHNlbGYpOgorICAgICAg
ICAjIFNwZWNpZnkgc2VwYXJhdG9ycyBpbiBvcmRlciB0byBnZXQgY29tcGFjdCBlbmNvZGluZy4K
KyAgICAgICAgcmV0dXJuIEV4cGVjdGF0aW9uc0pzb25FbmNvZGVyKHNlcGFyYXRvcnM9KCcsJywg
JzonKSkuZW5jb2RlKAorICAgICAgICAgICAgc2VsZi5fYWxsX2V4cGVjdGF0aW9ucykKKworICAg
IGRlZiBjb250YWlucyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHRlc3QgaW4gc2VsZi5f
dGVzdF90b19leHBlY3RhdGlvbnMKKworICAgIGRlZiByZW1vdmVfcGxhdGZvcm1fZnJvbV9maWxl
KHNlbGYsIHRlc3RzLCBwbGF0Zm9ybSwgYmFja3VwPUZhbHNlKToKKyAgICAgICAgIiIiUmVtb3Zl
IHRoZSBwbGF0Zm9ybSBvcHRpb24gZnJvbSB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlLgorCisgICAg
ICAgIElmIGEgdGVzdCBpcyBpbiB0aGUgdGVzdCBsaXN0IGFuZCBoYXMgYW4gb3B0aW9uIHRoYXQg
bWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgICAgcGxhdGZvcm0sIHJlbW92ZSB0aGUgbWF0Y2hpbmcg
cGxhdGZvcm0gYW5kIHNhdmUgdGhlIHVwZGF0ZWQgdGVzdCBiYWNrCisgICAgICAgIHRvIHRoZSBm
aWxlLiBJZiBubyBvdGhlciBwbGF0Zm9ybXMgcmVtYWluaW5nIGFmdGVyIHJlbW92YWwsIGRlbGV0
ZSB0aGUKKyAgICAgICAgdGVzdCBmcm9tIHRoZSBmaWxlLgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgdGVzdHM6IGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVkIHRvIHVwZGF0ZS4uCisgICAgICAg
ICAgcGxhdGZvcm06IHdoaWNoIHBsYXRmb3JtIG9wdGlvbiB0byByZW1vdmUuCisgICAgICAgICAg
YmFja3VwOiBpZiB0cnVlLCB0aGUgb3JpZ2luYWwgdGVzdCBleHBlY3RhdGlvbnMgZmlsZSBpcyBz
YXZlZCBhcworICAgICAgICAgICAgICAgICAgW3NlbGYuVEVTVF9MSVNUXS5vcmlnLllZWVlNTURE
SEhNTVNTCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBubworICAgICAgICAiIiIKKwor
ICAgICAgICBuZXdfZmlsZSA9IHNlbGYuX3BhdGggKyAnLm5ldycKKyAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnT3JpZ2luYWwgZmlsZTogIiVzIicsIHNlbGYuX3BhdGgpCisgICAgICAgIGxvZ2dpbmcu
ZGVidWcoJ05ldyBmaWxlOiAiJXMiJywgbmV3X2ZpbGUpCisgICAgICAgIGZfb3JpZyA9IHNlbGYu
X2dldF9pdGVyYWJsZV9leHBlY3RhdGlvbnMoKQorICAgICAgICBmX25ldyA9IG9wZW4obmV3X2Zp
bGUsICd3JykKKworICAgICAgICB0ZXN0c19yZW1vdmVkID0gMAorICAgICAgICB0ZXN0c191cGRh
dGVkID0gMAorICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgIGZvciBsaW5lIGluIGZfb3JpZzoK
KyAgICAgICAgICAgIGxpbmVubyArPSAxCisgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9nZXRf
cGxhdGZvcm1fdXBkYXRlX2FjdGlvbihsaW5lLCBsaW5lbm8sIHRlc3RzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisgICAg
ICAgICAgICBpZiBhY3Rpb24gPT0gTk9fQ0hBTkdFOgorICAgICAgICAgICAgICAgICMgU2F2ZSB0
aGUgb3JpZ2luYWwgbGluZSBiYWNrIHRvIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygnTm8gY2hhbmdlIHRvIHRlc3Q6ICVzJywgbGluZSkKKyAgICAgICAgICAgICAgICBm
X25ldy53cml0ZShsaW5lKQorICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gUkVNT1ZFX1RFU1Q6
CisgICAgICAgICAgICAgICAgdGVzdHNfcmVtb3ZlZCArPSAxCisgICAgICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCdUZXN0IHJlbW92ZWQ6ICVzJywgbGluZSkKKyAgICAgICAgICAgIGVsaWYgYWN0
aW9uID09IFJFTU9WRV9QTEFURk9STToKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3Bs
aXQoJzonKQorICAgICAgICAgICAgICAgIG5ld19vcHRpb25zID0gcGFydHNbMF0ucmVwbGFjZShw
bGF0Zm9ybS51cHBlcigpICsgJyAnLCAnJywgMSkKKyAgICAgICAgICAgICAgICBuZXdfbGluZSA9
ICgnJXM6JXMnICUgKG5ld19vcHRpb25zLCBwYXJ0c1sxXSkpCisgICAgICAgICAgICAgICAgZl9u
ZXcud3JpdGUobmV3X2xpbmUpCisgICAgICAgICAgICAgICAgdGVzdHNfdXBkYXRlZCArPSAxCisg
ICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdUZXN0IHVwZGF0ZWQ6ICcpCisgICAgICAgICAg
ICAgICAgbG9nZ2luZy5pbmZvKCcgIG9sZDogJXMnLCBsaW5lKQorICAgICAgICAgICAgICAgIGxv
Z2dpbmcuaW5mbygnICBuZXc6ICVzJywgbmV3X2xpbmUpCisgICAgICAgICAgICBlbGlmIGFjdGlv
biA9PSBBRERfUExBVEZPUk1TX0VYQ0VQVF9USElTOgorICAgICAgICAgICAgICAgIHBhcnRzID0g
bGluZS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgbmV3X29wdGlvbnMgPSBwYXJ0c1swXQor
ICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgICAg
ICAgICBwID0gcC51cHBlcigpOworICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSB0ZW1w
IHNvbHV0aW9uIGZvciByZWJhc2VsaW5pbmcgdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgIyBE
byBub3QgYWRkIHRhZ3MgV0lOLTcgYW5kIFdJTi1WSVNUQSB0byB0ZXN0IGV4cGVjdGF0aW9ucwor
ICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBsaW5lIGRvZXMgbm90IHNwZWNp
ZnkgdGhlIHBsYXRmb3JtIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgIyBUT0RPKHZpY3Rv
cncpOiBSZW1vdmUgV0lOLVZJU1RBIGFuZCBXSU4tNyBvbmNlIHdlIGhhdmUKKyAgICAgICAgICAg
ICAgICAgICAgIyByZWxpYWJsZSBXaW4gNyBhbmQgV2luIFZpc3RhIGJ1aWxkYm90cyBzZXR1cC4K
KyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHAgaW4gKHBsYXRmb3JtLnVwcGVyKCksICdXSU4t
VklTVEEnLCAnV0lOLTcnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19vcHRpb25zICs9
IHAgKyAnICcKKyAgICAgICAgICAgICAgICBuZXdfbGluZSA9ICgnJXM6JXMnICUgKG5ld19vcHRp
b25zLCBwYXJ0c1sxXSkpCisgICAgICAgICAgICAgICAgZl9uZXcud3JpdGUobmV3X2xpbmUpCisg
ICAgICAgICAgICAgICAgdGVzdHNfdXBkYXRlZCArPSAxCisgICAgICAgICAgICAgICAgbG9nZ2lu
Zy5pbmZvKCdUZXN0IHVwZGF0ZWQ6ICcpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcg
IG9sZDogJXMnLCBsaW5lKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBuZXc6ICVz
JywgbmV3X2xpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcu
ZXJyb3IoJ1Vua25vd24gdXBkYXRlIGFjdGlvbjogJWQ7IGxpbmU6ICVzJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgbGluZSkKKworICAgICAgICBsb2dnaW5nLmluZm8o
J1RvdGFsIHRlc3RzIHJlbW92ZWQ6ICVkJywgdGVzdHNfcmVtb3ZlZCkKKyAgICAgICAgbG9nZ2lu
Zy5pbmZvKCdUb3RhbCB0ZXN0cyB1cGRhdGVkOiAlZCcsIHRlc3RzX3VwZGF0ZWQpCisKKyAgICAg
ICAgZl9vcmlnLmNsb3NlKCkKKyAgICAgICAgZl9uZXcuY2xvc2UoKQorCisgICAgICAgIGlmIGJh
Y2t1cDoKKyAgICAgICAgICAgIGRhdGVfc3VmZml4ID0gdGltZS5zdHJmdGltZSgnJVklbSVkJUgl
TSVTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmxvY2Fs
dGltZSh0aW1lLnRpbWUoKSkpCisgICAgICAgICAgICBiYWNrdXBfZmlsZSA9ICgnJXMub3JpZy4l
cycgJSAoc2VsZi5fcGF0aCwgZGF0ZV9zdWZmaXgpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMoYmFja3VwX2ZpbGUpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShiYWNrdXBfZmls
ZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnU2F2aW5nIG9yaWdpbmFsIGZpbGUgdG8gIiVz
IicsIGJhY2t1cF9maWxlKQorICAgICAgICAgICAgb3MucmVuYW1lKHNlbGYuX3BhdGgsIGJhY2t1
cF9maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgp
CisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU2F2aW5nIG5ldyBmaWxlIHRvICIlcyInLCBzZWxm
Ll9wYXRoKQorICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUsIHNlbGYuX3BhdGgpCisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zX2xpbmUoc2VsZiwgbGlu
ZSwgbGluZW5vKToKKyAgICAgICAgIiIiUGFyc2VzIGEgbGluZSBmcm9tIHRlc3RfZXhwZWN0YXRp
b25zLnR4dCBhbmQgcmV0dXJucyBhIHR1cGxlCisgICAgICAgIHdpdGggdGhlIHRlc3QgcGF0aCwg
b3B0aW9ucyBhcyBhIGxpc3QsIGV4cGVjdGF0aW9ucyBhcyBhIGxpc3QuIiIiCisgICAgICAgIGxp
bmUgPSBzdHJpcF9jb21tZW50cyhsaW5lKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAg
ICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKKworICAgICAgICBvcHRpb25zID0gW10KKyAg
ICAgICAgaWYgbGluZS5maW5kKCI6IikgaXMgLTE6CisgICAgICAgICAgICB0ZXN0X2FuZF9leHBl
Y3RhdGlvbiA9IGxpbmUuc3BsaXQoIj0iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFy
dHMgPSBsaW5lLnNwbGl0KCI6IikKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9nZXRfb3B0
aW9uc19saXN0KHBhcnRzWzBdKQorICAgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb24gPSBw
YXJ0c1sxXS5zcGxpdCgnPScpCisKKyAgICAgICAgdGVzdCA9IHRlc3RfYW5kX2V4cGVjdGF0aW9u
WzBdLnN0cmlwKCkKKyAgICAgICAgaWYgKGxlbih0ZXN0X2FuZF9leHBlY3RhdGlvbikgaXMgbm90
IDIpOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywgIk1pc3NpbmcgZXhwZWN0
YXRpb25zLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FuZF9leHBlY3RhdGlv
bikKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGV4cGVjdGF0aW9ucyA9IHNlbGYuX2dldF9vcHRpb25zX2xpc3QodGVzdF9hbmRfZXhw
ZWN0YXRpb25bMV0pCisKKyAgICAgICAgcmV0dXJuICh0ZXN0LCBvcHRpb25zLCBleHBlY3RhdGlv
bnMpCisKKyAgICBkZWYgX2dldF9wbGF0Zm9ybV91cGRhdGVfYWN0aW9uKHNlbGYsIGxpbmUsIGxp
bmVubywgdGVzdHMsIHBsYXRmb3JtKToKKyAgICAgICAgIiIiQ2hlY2sgdGhlIHBsYXRmb3JtIG9w
dGlvbiBhbmQgcmV0dXJuIHRoZSBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4uCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBsaW5lOiBjdXJyZW50IGxpbmUgaW4gdGVzdCBleHBlY3RhdGlvbnMg
ZmlsZS4KKyAgICAgICAgICBsaW5lbm86IGN1cnJlbnQgbGluZSBudW1iZXIgb2YgbGluZQorICAg
ICAgICAgIHRlc3RzOiBsaXN0IG9mIHRlc3RzIHRoYXQgbmVlZCB0byB1cGRhdGUuLgorICAgICAg
ICAgIHBsYXRmb3JtOiB3aGljaCBwbGF0Zm9ybSBvcHRpb24gdG8gcmVtb3ZlLgorCisgICAgICAg
IFJldHVybnM6CisgICAgICAgICAgTk9fQ0hBTkdFOiBubyBjaGFuZ2UgdG8gdGhlIGxpbmUgKGNv
bW1lbnRzLCB0ZXN0IG5vdCBpbiB0aGUgbGlzdCBldGMpCisgICAgICAgICAgUkVNT1ZFX1RFU1Q6
IHJlbW92ZSB0aGUgdGVzdCBmcm9tIGZpbGUuCisgICAgICAgICAgUkVNT1ZFX1BMQVRGT1JNOiBy
ZW1vdmUgdGhpcyBwbGF0Zm9ybSBvcHRpb24gZnJvbSB0aGUgdGVzdC4KKyAgICAgICAgICBBRERf
UExBVEZPUk1TX0VYQ0VQVF9USElTOiBhZGQgYWxsIHRoZSBwbGF0Zm9ybXMgZXhjZXB0IHRoaXMg
b25lLgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdCwgb3B0aW9ucywgZXhwZWN0YXRpb25zID0g
c2VsZi5wYXJzZV9leHBlY3RhdGlvbnNfbGluZShsaW5lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubykKKyAg
ICAgICAgaWYgbm90IHRlc3Qgb3IgdGVzdCBub3QgaW4gdGVzdHM6CisgICAgICAgICAgICByZXR1
cm4gTk9fQ0hBTkdFCisKKyAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IEZhbHNlCisgICAgICAg
IGZvciBvcHRpb24gaW4gb3B0aW9uczoKKyAgICAgICAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLlBM
QVRGT1JNUzoKKyAgICAgICAgICAgICAgICBoYXNfYW55X3BsYXRmb3JtID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIGlmIG5vdCBvcHRpb24gPT0gcGxhdGZvcm06CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSRU1PVkVfUExBVEZPUk0KKworICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHBsYXRm
b3JtIHNwZWNpZmllZCwgdGhlbiBpdCBtZWFucyBhcHBseSB0byBhbGwKKyAgICAgICAgIyBwbGF0
Zm9ybXMuIFJldHVybiB0aGUgYWN0aW9uIHRvIGFkZCBhbGwgdGhlIHBsYXRmb3JtcyBleGNlcHQg
dGhpcworICAgICAgICAjIG9uZS4KKyAgICAgICAgaWYgbm90IGhhc19hbnlfcGxhdGZvcm06Cisg
ICAgICAgICAgICByZXR1cm4gQUREX1BMQVRGT1JNU19FWENFUFRfVEhJUworCisgICAgICAgIHJl
dHVybiBSRU1PVkVfVEVTVAorCisgICAgZGVmIF9oYXNfdmFsaWRfbW9kaWZpZXJzX2Zvcl9jdXJy
ZW50X3BsYXRmb3JtKHNlbGYsIG9wdGlvbnMsIGxpbmVubywKKyAgICAgICAgdGVzdF9hbmRfZXhw
ZWN0YXRpb25zLCBtb2RpZmllcnMpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgcGxhdGZvcm0gaXMgaW4gdGhlIG9wdGlvbnMgbGlzdCBvciBpZgorICAgICAgICBubyBw
bGF0Zm9ybXMgYXJlIGxpc3RlZCBhbmQgaWYgdGhlcmUgYXJlIG5vIGZhdGFsIGVycm9ycyBpbiB0
aGUKKyAgICAgICAgb3B0aW9ucyBsaXN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgb3B0
aW9uczogTGlzdCBvZiBsb3dlcmNhc2Ugb3B0aW9ucy4KKyAgICAgICAgICBsaW5lbm86IFRoZSBs
aW5lIGluIHRoZSBmaWxlIHdoZXJlIHRoZSB0ZXN0IGlzIGxpc3RlZC4KKyAgICAgICAgICB0ZXN0
X2FuZF9leHBlY3RhdGlvbnM6IFRoZSBwYXRoIGFuZCBleHBlY3RhdGlvbnMgZm9yIHRoZSB0ZXN0
LgorICAgICAgICAgIG1vZGlmaWVyczogVGhlIHNldCB0byBwb3B1bGF0ZSB3aXRoIG1vZGlmaWVy
cy4KKyAgICAgICAgIiIiCisgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBGYWxzZQorICAgICAg
ICBoYXNfYnVnX2lkID0gRmFsc2UKKyAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAg
ICAgICAgICAgaWYgb3B0aW9uIGluIHNlbGYuTU9ESUZJRVJTOgorICAgICAgICAgICAgICAgIG1v
ZGlmaWVycy5hZGQob3B0aW9uKQorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5QTEFU
Rk9STVM6CisgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKKyAgICAgICAg
ICAgIGVsaWYgb3B0aW9uLnN0YXJ0c3dpdGgoJ2J1ZycpOgorICAgICAgICAgICAgICAgIGhhc19i
dWdfaWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG9wdGlvbiBub3QgaW4gc2VsZi5CVUlMRF9U
WVBFUzoKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRfZXJyb3IobGluZW5vLCAnSW52YWxpZCBt
b2RpZmllciBmb3IgdGVzdDogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9uLCB0ZXN0X2FuZF9leHBlY3RhdGlvbnMpCisKKyAgICAgICAgaWYgaGFzX2FueV9wbGF0
Zm9ybSBhbmQgbm90IHNlbGYuX21hdGNoX3BsYXRmb3JtKG9wdGlvbnMpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IGhhc19idWdfaWQgYW5kICd3b250Zml4JyBu
b3QgaW4gb3B0aW9uczoKKyAgICAgICAgICAgICMgVE9ETyhvamFuKTogVHVybiB0aGlzIGludG8g
YW4gQWRkRXJyb3IgY2FsbCBvbmNlIGFsbCB0aGUKKyAgICAgICAgICAgICMgdGVzdHMgaGF2ZSBC
VUcgaWRlbnRpZmllcnMuCisgICAgICAgICAgICBzZWxmLl9sb2dfbm9uX2ZhdGFsX2Vycm9yKGxp
bmVubywgJ1Rlc3QgbGFja3MgQlVHIG1vZGlmaWVyLicsCisgICAgICAgICAgICAgICAgdGVzdF9h
bmRfZXhwZWN0YXRpb25zKQorCisgICAgICAgIGlmICdyZWxlYXNlJyBpbiBvcHRpb25zIG9yICdk
ZWJ1ZycgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2lzX2RlYnVnX21vZGUgYW5k
ICdkZWJ1Zycgbm90IGluIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfZGVidWdfbW9kZSBhbmQgJ3JlbGVhc2UnIG5vdCBp
biBvcHRpb25zOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmICd3
b250Zml4JyBpbiBvcHRpb25zIGFuZCAnZGVmZXInIGluIG9wdGlvbnM6CisgICAgICAgICAgICBz
ZWxmLl9hZGRfZXJyb3IobGluZW5vLCAnVGVzdCBjYW5ub3QgYmUgYm90aCBERUZFUiBhbmQgV09O
VEZJWC4nLAorICAgICAgICAgICAgICAgIHRlc3RfYW5kX2V4cGVjdGF0aW9ucykKKworICAgICAg
ICBpZiBzZWxmLl9pc19saW50X21vZGUgYW5kICdyZWJhc2VsaW5lJyBpbiBvcHRpb25zOgorICAg
ICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywKKyAgICAgICAgICAgICAgICAnUkVCQVNF
TElORSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBydW5uaW5nIHJlYmFzZWxpbmUucHkuICcKKyAg
ICAgICAgICAgICAgICAnQ2Fubm90IGJlIGNoZWNrZWQgaW4uJywgdGVzdF9hbmRfZXhwZWN0YXRp
b25zKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX21hdGNoX3BsYXRmb3JtKHNl
bGYsIG9wdGlvbnMpOgorICAgICAgICAiIiJNYXRjaCB0aGUgbGlzdCBvZiBvcHRpb25zIGFnYWlu
c3Qgb3VyIHNwZWNpZmllZCBwbGF0Zm9ybS4gSWYgYW55CisgICAgICAgIG9mIHRoZSBvcHRpb25z
IHByZWZpeC1tYXRjaCBzZWxmLl9wbGF0Zm9ybSwgcmV0dXJuIFRydWUuIFRoaXMgaGFuZGxlcwor
ICAgICAgICB0aGUgY2FzZSB3aGVyZSBhIHRlc3QgaXMgbWFya2VkIFdJTiBhbmQgdGhlIHBsYXRm
b3JtIGlzIFdJTi1WSVNUQS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIG9wdGlvbnM6IGxp
c3Qgb2Ygb3B0aW9ucworICAgICAgICAiIiIKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRpb25zOgor
ICAgICAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm0uc3RhcnRzd2l0aChvcHQpOgorICAgICAgICAg
ICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9hZGRf
dG9fYWxsX2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0LCBvcHRpb25zLCBleHBlY3RhdGlvbnMpOgor
ICAgICAgICAjIE1ha2UgYWxsIHBhdGhzIHVuaXgtc3R5bGUgc28gdGhlIGRhc2hib2FyZCBkb2Vz
bid0IG5lZWQgdG8uCisgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ1xcJywgJy8nKQorICAg
ICAgICBpZiBub3QgdGVzdCBpbiBzZWxmLl9hbGxfZXhwZWN0YXRpb25zOgorICAgICAgICAgICAg
c2VsZi5fYWxsX2V4cGVjdGF0aW9uc1t0ZXN0XSA9IFtdCisgICAgICAgIHNlbGYuX2FsbF9leHBl
Y3RhdGlvbnNbdGVzdF0uYXBwZW5kKAorICAgICAgICAgICAgTW9kaWZpZXJzQW5kRXhwZWN0YXRp
b25zKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykpCisKKyAgICBkZWYgX3JlYWQoc2VsZiwgZXhwZWN0
YXRpb25zKToKKyAgICAgICAgIiIiRm9yIGVhY2ggdGVzdCBpbiBhbiBleHBlY3RhdGlvbnMgaXRl
cmFibGUsIGdlbmVyYXRlIHRoZQorICAgICAgICBleHBlY3RhdGlvbnMgZm9yIGl0LiIiIgorICAg
ICAgICBsaW5lbm8gPSAwCisgICAgICAgIGZvciBsaW5lIGluIGV4cGVjdGF0aW9uczoKKyAgICAg
ICAgICAgIGxpbmVubyArPSAxCisKKyAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoLCBvcHRpb25z
LCBleHBlY3RhdGlvbnMgPSBcCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9leHBlY3RhdGlv
bnNfbGluZShsaW5lLCBsaW5lbm8pCisgICAgICAgICAgICBpZiBub3QgZXhwZWN0YXRpb25zOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNlbGYuX2FkZF90b19hbGxf
ZXhwZWN0YXRpb25zKHRlc3RfbGlzdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAiLmpvaW4ob3B0aW9ucykudXBwZXIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKGV4cGVjdGF0aW9ucykudXBwZXIo
KSkKKworICAgICAgICAgICAgbW9kaWZpZXJzID0gc2V0KCkKKyAgICAgICAgICAgIGlmIG9wdGlv
bnMgYW5kIG5vdCBzZWxmLl9oYXNfdmFsaWRfbW9kaWZpZXJzX2Zvcl9jdXJyZW50X3BsYXRmb3Jt
KAorICAgICAgICAgICAgICAgIG9wdGlvbnMsIGxpbmVubywgdGVzdF9saXN0X3BhdGgsIG1vZGlm
aWVycyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZXhwZWN0YXRp
b25zID0gc2VsZi5fcGFyc2VfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgbGluZW5vLAorICAg
ICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoKQorCisgICAgICAgICAgICBpZiAnc2xvdycgaW4g
b3B0aW9ucyBhbmQgVElNRU9VVCBpbiBleHBlY3RhdGlvbnM6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fYWRkX2Vycm9yKGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgJ0EgdGVzdCBjYW4gbm90
IGJlIGJvdGggc2xvdyBhbmQgdGltZW91dC4gSWYgaXQgdGltZXMgb3V0ICcKKyAgICAgICAgICAg
ICAgICAgICAgJ2luZGVmaW5pdGVseSwgdGhlbiBpdCBzaG91bGQgYmUganVzdCB0aW1lb3V0Lics
CisgICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoKQorCisgICAgICAgICAgICBmdWxs
X3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0X3BhdGgpCisgICAgICAg
ICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgICAg
ICMgV2ViS2l0J3Mgd2F5IG9mIHNraXBwaW5nIHRlc3RzIGlzIHRvIGFkZCBhIC1kaXNhYmxlZCBz
dWZmaXguCisgICAgICAgICAgICAjIFNvIHdlIHNob3VsZCBjb25zaWRlciB0aGUgcGF0aCBleGlz
dGluZyBpZiB0aGUgcGF0aCBvciB0aGUKKyAgICAgICAgICAgICMgLWRpc2FibGVkIHZlcnNpb24g
ZXhpc3RzLgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RzX2FyZV9wcmVzZW50IGFuZCBub3Qg
b3MucGF0aC5leGlzdHMoZnVsbF9wYXRoKQorICAgICAgICAgICAgICAgIGFuZCBub3Qgb3MucGF0
aC5leGlzdHMoZnVsbF9wYXRoICsgJy1kaXNhYmxlZCcpKToKKyAgICAgICAgICAgICAgICAjIExv
ZyBhIG5vbiBmYXRhbCBlcnJvciBoZXJlIHNpbmNlIHlvdSBoaXQgdGhpcyBjYXNlIGFueQorICAg
ICAgICAgICAgICAgICMgdGltZSB5b3UgdXBkYXRlIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB3aXRo
b3V0IHN5bmNpbmcKKyAgICAgICAgICAgICAgICAjIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkK
KyAgICAgICAgICAgICAgICBzZWxmLl9sb2dfbm9uX2ZhdGFsX2Vycm9yKGxpbmVubywgJ1BhdGgg
ZG9lcyBub3QgZXhpc3QuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfbGlzdF9wYXRoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAg
IGlmIG5vdCBzZWxmLl9mdWxsX3Rlc3RfbGlzdDoKKyAgICAgICAgICAgICAgICB0ZXN0cyA9IFt0
ZXN0X2xpc3RfcGF0aF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGVzdHMg
PSBzZWxmLl9leHBhbmRfdGVzdHModGVzdF9saXN0X3BhdGgpCisKKyAgICAgICAgICAgIHNlbGYu
X2FkZF90ZXN0cyh0ZXN0cywgZXhwZWN0YXRpb25zLCB0ZXN0X2xpc3RfcGF0aCwgbGluZW5vLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLCBvcHRpb25zKQorCisgICAgICAg
IGlmIG5vdCBzZWxmLl9zdXBwcmVzc19lcnJvcnMgYW5kICgKKyAgICAgICAgICAgIGxlbihzZWxm
Ll9lcnJvcnMpIG9yIGxlbihzZWxmLl9ub25fZmF0YWxfZXJyb3JzKSk6CisgICAgICAgICAgICBp
ZiBzZWxmLl9pc19kZWJ1Z19tb2RlOgorICAgICAgICAgICAgICAgIGJ1aWxkX3R5cGUgPSAnREVC
VUcnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJ1aWxkX3R5cGUgPSAnUkVM
RUFTRScKKyAgICAgICAgICAgIHByaW50ICJcbkZBSUxVUkVTIEZPUiBQTEFURk9STTogJXMsIEJV
SUxEX1RZUEU6ICVzIiBcCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fcGxhdGZvcm0udXBwZXIo
KSwgYnVpbGRfdHlwZSkKKworICAgICAgICAgICAgZm9yIGVycm9yIGluIHNlbGYuX25vbl9mYXRh
bF9lcnJvcnM6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihlcnJvcikKKyAgICAgICAg
ICAgIGlmIGxlbihzZWxmLl9lcnJvcnMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVy
cm9yKCdcbicuam9pbihtYXAoc3RyLCBzZWxmLl9lcnJvcnMpKSkKKworICAgICAgICAjIE5vdyBh
ZGQgaW4gdGhlIHRlc3RzIHRoYXQgd2VyZW4ndCBwcmVzZW50IGluIHRoZSBleHBlY3RhdGlvbnMg
ZmlsZQorICAgICAgICBleHBlY3RhdGlvbnMgPSBzZXQoW1BBU1NdKQorICAgICAgICBvcHRpb25z
ID0gW10KKyAgICAgICAgbW9kaWZpZXJzID0gW10KKyAgICAgICAgaWYgc2VsZi5fZnVsbF90ZXN0
X2xpc3Q6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9mdWxsX3Rlc3RfbGlzdDoKKyAg
ICAgICAgICAgICAgICBpZiBub3QgdGVzdCBpbiBzZWxmLl90ZXN0X2xpc3RfcGF0aHM6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2FkZF90ZXN0KHRlc3QsIG1vZGlmaWVycywgZXhwZWN0YXRp
b25zLCBvcHRpb25zKQorCisgICAgZGVmIF9nZXRfb3B0aW9uc19saXN0KHNlbGYsIGxpc3RTdHJp
bmcpOgorICAgICAgICByZXR1cm4gW3BhcnQuc3RyaXAoKS5sb3dlcigpIGZvciBwYXJ0IGluIGxp
c3RTdHJpbmcuc3RyaXAoKS5zcGxpdCgnICcpXQorCisgICAgZGVmIF9wYXJzZV9leHBlY3RhdGlv
bnMoc2VsZiwgZXhwZWN0YXRpb25zLCBsaW5lbm8sIHRlc3RfbGlzdF9wYXRoKToKKyAgICAgICAg
cmVzdWx0ID0gc2V0KCkKKyAgICAgICAgZm9yIHBhcnQgaW4gZXhwZWN0YXRpb25zOgorICAgICAg
ICAgICAgaWYgbm90IHBhcnQgaW4gc2VsZi5FWFBFQ1RBVElPTlM6CisgICAgICAgICAgICAgICAg
c2VsZi5fYWRkX2Vycm9yKGxpbmVubywgJ1Vuc3VwcG9ydGVkIGV4cGVjdGF0aW9uOiAlcycgJSBw
YXJ0LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAgICAgZXhwZWN0YXRpb24gPSBzZWxmLkVYUEVDVEFUSU9OU1tw
YXJ0XQorICAgICAgICAgICAgcmVzdWx0LmFkZChleHBlY3RhdGlvbikKKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCisgICAgZGVmIF9leHBhbmRfdGVzdHMoc2VsZiwgdGVzdF9saXN0X3BhdGgpOgor
ICAgICAgICAiIiJDb252ZXJ0IHRoZSB0ZXN0IHNwZWNpZmljYXRpb24gdG8gYW4gYWJzb2x1dGUs
IG5vcm1hbGl6ZWQKKyAgICAgICAgcGF0aCBhbmQgbWFrZSBzdXJlIGRpcmVjdG9yaWVzIGVuZCB3
aXRoIHRoZSBPUyBwYXRoIHNlcGFyYXRvci4iIiIKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9p
bihwYXRoX3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9saXN0X3BhdGgpCisgICAgICAg
IHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIHBhdGggPSBzZWxmLl9maXhf
ZGlyKHBhdGgpCisKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHRlc3QgaW4gc2Vs
Zi5fZnVsbF90ZXN0X2xpc3Q6CisgICAgICAgICAgICBpZiB0ZXN0LnN0YXJ0c3dpdGgocGF0aCk6
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZXN0KQorICAgICAgICByZXR1cm4gcmVz
dWx0CisKKyAgICBkZWYgX2ZpeF9kaXIoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkNoZWNrIHRv
IHNlZSBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBkaXJlY3RvcnksIGFuZCBpZiBzbywgYXBwZW5k
CisgICAgICAgIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeS4iIiIKKyAgICAg
ICAgaWYgc2VsZi5fdGVzdHNfYXJlX3ByZXNlbnQ6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlz
ZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJycp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIHdlIGNhbid0IGNoZWNrIHRoZSBmaWxl
c3lzdGVtIHRvIHNlZSBpZiB0aGlzIGlzIGEgZGlyZWN0b3J5LAorICAgICAgICAgICAgIyB3ZSBh
c3N1bWUgdGhhdCBmaWxlcyB3L28gYW4gZXh0ZW5zaW9uIGFyZSBkaXJlY3Rvcmllcy4KKyAgICAg
ICAgICAgICMgVE9ETyhkcHJhbmtlKTogV2hhdCBoYXBwZW5zIHcvIExheW91dFRlc3RzL2NzczIu
MSA/CisgICAgICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KHBhdGgpWzFdID09ICcnOgorICAg
ICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJycpCisgICAgICAgIHJldHVy
biBwYXRoCisKKyAgICBkZWYgX2FkZF90ZXN0cyhzZWxmLCB0ZXN0cywgZXhwZWN0YXRpb25zLCB0
ZXN0X2xpc3RfcGF0aCwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycywgb3B0
aW9ucyk6CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgaWYgc2VsZi5f
YWxyZWFkeV9zZWVuX3Rlc3QodGVzdCwgdGVzdF9saXN0X3BhdGgsIGxpbmVubyk6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc2VsZi5fY2xlYXJfZXhwZWN0YXRpb25z
X2Zvcl90ZXN0KHRlc3QsIHRlc3RfbGlzdF9wYXRoKQorICAgICAgICAgICAgc2VsZi5fYWRkX3Rl
c3QodGVzdCwgbW9kaWZpZXJzLCBleHBlY3RhdGlvbnMsIG9wdGlvbnMpCisKKyAgICBkZWYgX2Fk
ZF90ZXN0KHNlbGYsIHRlc3QsIG1vZGlmaWVycywgZXhwZWN0YXRpb25zLCBvcHRpb25zKToKKyAg
ICAgICAgIiIiU2V0cyB0aGUgZXhwZWN0ZWQgc3RhdGUgZm9yIGEgZ2l2ZW4gdGVzdC4KKworICAg
ICAgICBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGUgdGVzdCBoYXMgbm90IGJlZW4gYWRkZWQgYmVm
b3JlLiBJZiBpdCBoYXMsCisgICAgICAgIHVzZSBfQ2xlYXJFeHBlY3RhdGlvbnNGb3JUZXN0KCkg
dG8gcmVzZXQgdGhlIHN0YXRlIHByaW9yIHRvCisgICAgICAgIGNhbGxpbmcgdGhpcy4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIHRlc3Q6IHRlc3QgdG8gYWRkCisgICAgICAgICAgbW9kaWZp
ZXJzOiBzZXF1ZW5jZSBvZiBtb2RpZmllciBrZXl3b3JkcyAoJ3dvbnRmaXgnLCAnc2xvdycsIGV0
Yy4pCisgICAgICAgICAgZXhwZWN0YXRpb25zOiBzZXF1ZW5jZSBvZiBleHBlY3RhdGlvbnMgKFBB
U1MsIElNQUdFLCBldGMuKQorICAgICAgICAgIG9wdGlvbnM6IHNlcXVlbmNlIG9mIGtleXdvcmRz
IGFuZCBidWcgaWRlbnRpZmllcnMuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRp
b25zW3Rlc3RdID0gZXhwZWN0YXRpb25zCisgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBleHBl
Y3RhdGlvbnM6CisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbl90b190ZXN0c1tleHBlY3Rh
dGlvbl0uYWRkKHRlc3QpCisKKyAgICAgICAgc2VsZi5fdGVzdF90b19vcHRpb25zW3Rlc3RdID0g
b3B0aW9ucworICAgICAgICBzZWxmLl90ZXN0X3RvX21vZGlmaWVyc1t0ZXN0XSA9IHNldCgpCisg
ICAgICAgIGZvciBtb2RpZmllciBpbiBtb2RpZmllcnM6CisgICAgICAgICAgICBtb2RfdmFsdWUg
PSBzZWxmLk1PRElGSUVSU1ttb2RpZmllcl0KKyAgICAgICAgICAgIHNlbGYuX21vZGlmaWVyX3Rv
X3Rlc3RzW21vZF92YWx1ZV0uYWRkKHRlc3QpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3RvX21v
ZGlmaWVyc1t0ZXN0XS5hZGQobW9kX3ZhbHVlKQorCisgICAgICAgIGlmICd3b250Zml4JyBpbiBt
b2RpZmllcnM6CisgICAgICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0c1tXT05URklYXS5h
ZGQodGVzdCkKKyAgICAgICAgZWxpZiAnZGVmZXInIGluIG1vZGlmaWVyczoKKyAgICAgICAgICAg
IHNlbGYuX3RpbWVsaW5lX3RvX3Rlc3RzW0RFRkVSXS5hZGQodGVzdCkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYuX3RpbWVsaW5lX3RvX3Rlc3RzW05PV10uYWRkKHRlc3QpCisKKyAg
ICAgICAgaWYgJ3NraXAnIGluIG1vZGlmaWVyczoKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF90
eXBlX3RvX3Rlc3RzW1NLSVBdLmFkZCh0ZXN0KQorICAgICAgICBlbGlmIGV4cGVjdGF0aW9ucyA9
PSBzZXQoW1BBU1NdKToKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzW1BB
U1NdLmFkZCh0ZXN0KQorICAgICAgICBlbGlmIGxlbihleHBlY3RhdGlvbnMpID4gMToKKyAgICAg
ICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzW0ZMQUtZXS5hZGQodGVzdCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzW0ZBSUxdLmFk
ZCh0ZXN0KQorCisgICAgZGVmIF9jbGVhcl9leHBlY3RhdGlvbnNfZm9yX3Rlc3Qoc2VsZiwgdGVz
dCwgdGVzdF9saXN0X3BhdGgpOgorICAgICAgICAiIiJSZW1vdmUgcHJleGlzdGluZyBleHBlY3Rh
dGlvbnMgZm9yIHRoaXMgdGVzdC4KKyAgICAgICAgVGhpcyBoYXBwZW5zIGlmIHdlIGFyZSBzZWVp
bmcgYSBtb3JlIHByZWNpc2UgcGF0aAorICAgICAgICB0aGFuIGEgcHJldmlvdXMgbGlzdGluZy4K
KyAgICAgICAgIiIiCisgICAgICAgIGlmIHRlc3QgaW4gc2VsZi5fdGVzdF9saXN0X3BhdGhzOgor
ICAgICAgICAgICAgc2VsZi5fdGVzdF90b19leHBlY3RhdGlvbnMucG9wKHRlc3QsICcnKQorICAg
ICAgICAgICAgc2VsZi5fcmVtb3ZlX2Zyb21fc2V0cyh0ZXN0LCBzZWxmLl9leHBlY3RhdGlvbl90
b190ZXN0cykKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9mcm9tX3NldHModGVzdCwgc2VsZi5f
bW9kaWZpZXJfdG9fdGVzdHMpCisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfZnJvbV9zZXRzKHRl
c3QsIHNlbGYuX3RpbWVsaW5lX3RvX3Rlc3RzKQorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2Zy
b21fc2V0cyh0ZXN0LCBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0cykKKworICAgICAgICBzZWxm
Ll90ZXN0X2xpc3RfcGF0aHNbdGVzdF0gPSBvcy5wYXRoLm5vcm1wYXRoKHRlc3RfbGlzdF9wYXRo
KQorCisgICAgZGVmIF9yZW1vdmVfZnJvbV9zZXRzKHNlbGYsIHRlc3QsIGRpY3QpOgorICAgICAg
ICAiIiJSZW1vdmVzIHRoZSBnaXZlbiB0ZXN0IGZyb20gdGhlIHNldHMgaW4gdGhlIGRpY3Rpb25h
cnkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiB0ZXN0IHRvIGxvb2sgZm9yCisg
ICAgICAgICAgZGljdDogZGljdCBvZiBzZXRzIG9mIGZpbGVzIiIiCisgICAgICAgIGZvciBzZXRf
b2ZfdGVzdHMgaW4gZGljdC5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICBpZiB0ZXN0IGluIHNl
dF9vZl90ZXN0czoKKyAgICAgICAgICAgICAgICBzZXRfb2ZfdGVzdHMucmVtb3ZlKHRlc3QpCisK
KyAgICBkZWYgX2FscmVhZHlfc2Vlbl90ZXN0KHNlbGYsIHRlc3QsIHRlc3RfbGlzdF9wYXRoLCBs
aW5lbm8pOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgd2UndmUgYWxyZWFkeSBzZWVuIGEg
bW9yZSBwcmVjaXNlIHBhdGggZm9yIHRoaXMgdGVzdAorICAgICAgICB0aGFuIHRoZSB0ZXN0X2xp
c3RfcGF0aC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCB0ZXN0IGluIHNlbGYuX3Rlc3Rf
bGlzdF9wYXRoczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHByZXZfYmFz
ZV9wYXRoID0gc2VsZi5fdGVzdF9saXN0X3BhdGhzW3Rlc3RdCisgICAgICAgIGlmIChwcmV2X2Jh
c2VfcGF0aCA9PSBvcy5wYXRoLm5vcm1wYXRoKHRlc3RfbGlzdF9wYXRoKSk6CisgICAgICAgICAg
ICBzZWxmLl9hZGRfZXJyb3IobGluZW5vLCAnRHVwbGljYXRlIGV4cGVjdGF0aW9ucy4nLCB0ZXN0
KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIENoZWNrIGlmIHdlJ3ZlIGFs
cmVhZHkgc2VlbiBhIG1vcmUgcHJlY2lzZSBwYXRoLgorICAgICAgICByZXR1cm4gcHJldl9iYXNl
X3BhdGguc3RhcnRzd2l0aChvcy5wYXRoLm5vcm1wYXRoKHRlc3RfbGlzdF9wYXRoKSkKKworICAg
IGRlZiBfYWRkX2Vycm9yKHNlbGYsIGxpbmVubywgbXNnLCBwYXRoKToKKyAgICAgICAgIiIiUmVw
b3J0cyBhbiBlcnJvciB0aGF0IHdpbGwgcHJldmVudCBydW5uaW5nIHRoZSB0ZXN0cy4gRG9lcyBu
b3QKKyAgICAgICAgaW1tZWRpYXRlbHkgcmFpc2UgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugd2UnZCBs
aWtlIHRvIGFnZ3JlZ2F0ZSBhbGwgdGhlCisgICAgICAgIGVycm9ycyBzbyB0aGV5IGNhbiBhbGwg
YmUgcHJpbnRlZCBvdXQuIiIiCisgICAgICAgIHNlbGYuX2Vycm9ycy5hcHBlbmQoJ1xuTGluZTol
cyAlcyAlcycgJSAobGluZW5vLCBtc2csIHBhdGgpKQorCisgICAgZGVmIF9sb2dfbm9uX2ZhdGFs
X2Vycm9yKHNlbGYsIGxpbmVubywgbXNnLCBwYXRoKToKKyAgICAgICAgIiIiUmVwb3J0cyBhbiBl
cnJvciB0aGF0IHdpbGwgbm90IHByZXZlbnQgcnVubmluZyB0aGUgdGVzdHMuIFRoZXNlIGFyZQor
ICAgICAgICBzdGlsbCBlcnJvcnMsIGJ1dCBub3QgYmFkIGVub3VnaCB0byB3YXJyYW50IGJyZWFr
aW5nIHRlc3QgcnVubmluZy4iIiIKKyAgICAgICAgc2VsZi5fbm9uX2ZhdGFsX2Vycm9ycy5hcHBl
bmQoJ0xpbmU6JXMgJXMgJXMnICUgKGxpbmVubywgbXNnLCBwYXRoKSkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfZmFpbHVyZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU2ZDdiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5
CkBAIC0wLDAgKzEsMjY3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisiIiJDbGFzc2VzIGZvciBmYWlsdXJlcyB0aGF0IG9jY3VyIGR1cmluZyB0ZXN0cy4iIiIK
KworaW1wb3J0IG9zCitpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKKworCitkZWYgZGV0ZXJtaW5l
X3Jlc3VsdF90eXBlKGZhaWx1cmVfbGlzdCk6CisgICAgIiIiVGFrZXMgYSBzZXQgb2YgdGVzdF9m
YWlsdXJlcyBhbmQgcmV0dXJucyB3aGljaCByZXN1bHQgdHlwZSBiZXN0IGZpdHMKKyAgICB0aGUg
bGlzdCBvZiBmYWlsdXJlcy4gIkJlc3QgZml0cyIgbWVhbnMgd2UgdXNlIHRoZSB3b3JzdCB0eXBl
IG9mIGZhaWx1cmUuCisKKyAgICBSZXR1cm5zOgorICAgICAgb25lIG9mIHRoZSB0ZXN0X2V4cGVj
dGF0aW9ucyByZXN1bHQgdHlwZXMgLSBQQVNTLCBURVhULCBDUkFTSCwgZXRjLiIiIgorCisgICAg
aWYgbm90IGZhaWx1cmVfbGlzdCBvciBsZW4oZmFpbHVyZV9saXN0KSA9PSAwOgorICAgICAgICBy
ZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMuUEFTUworCisgICAgZmFpbHVyZV90eXBlcyA9IFt0eXBl
KGYpIGZvciBmIGluIGZhaWx1cmVfbGlzdF0KKyAgICBpZiBGYWlsdXJlQ3Jhc2ggaW4gZmFpbHVy
ZV90eXBlczoKKyAgICAgICAgcmV0dXJuIHRlc3RfZXhwZWN0YXRpb25zLkNSQVNICisgICAgZWxp
ZiBGYWlsdXJlVGltZW91dCBpbiBmYWlsdXJlX3R5cGVzOgorICAgICAgICByZXR1cm4gdGVzdF9l
eHBlY3RhdGlvbnMuVElNRU9VVAorICAgIGVsaWYgKEZhaWx1cmVNaXNzaW5nUmVzdWx0IGluIGZh
aWx1cmVfdHlwZXMgb3IKKyAgICAgICAgICBGYWlsdXJlTWlzc2luZ0ltYWdlIGluIGZhaWx1cmVf
dHlwZXMgb3IKKyAgICAgICAgICBGYWlsdXJlTWlzc2luZ0ltYWdlSGFzaCBpbiBmYWlsdXJlX3R5
cGVzKToKKyAgICAgICAgcmV0dXJuIHRlc3RfZXhwZWN0YXRpb25zLk1JU1NJTkcKKyAgICBlbHNl
OgorICAgICAgICBpc190ZXh0X2ZhaWx1cmUgPSBGYWlsdXJlVGV4dE1pc21hdGNoIGluIGZhaWx1
cmVfdHlwZXMKKyAgICAgICAgaXNfaW1hZ2VfZmFpbHVyZSA9IChGYWlsdXJlSW1hZ2VIYXNoSW5j
b3JyZWN0IGluIGZhaWx1cmVfdHlwZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
YWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2ggaW4gZmFpbHVyZV90eXBlcykKKyAgICAgICAgaWYgaXNf
dGV4dF9mYWlsdXJlIGFuZCBpc19pbWFnZV9mYWlsdXJlOgorICAgICAgICAgICAgcmV0dXJuIHRl
c3RfZXhwZWN0YXRpb25zLklNQUdFX1BMVVNfVEVYVAorICAgICAgICBlbGlmIGlzX3RleHRfZmFp
bHVyZToKKyAgICAgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5URVhUCisgICAgICAg
IGVsaWYgaXNfaW1hZ2VfZmFpbHVyZToKKyAgICAgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0
aW9ucy5JTUFHRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi
dW5jbGFzc2lmaWFibGUgc2V0IG9mIGZhaWx1cmVzOiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsgc3RyKGZhaWx1cmVfdHlwZXMpKQorCisKK2NsYXNzIFRlc3RGYWlsdXJlKG9iamVj
dCk6CisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyB0aGF0IGRlZmluZXMgdGhlIGZhaWx1cmUg
aW50ZXJmYWNlLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6Cisg
ICAgICAgICIiIlJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZmFpbHVyZSBpbiBtb3Jl
IGRldGFpbC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiByZXN1
bHRfaHRtbF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJSZXR1cm5zIGFuIEhU
TUwgc3RyaW5nIHRvIGJlIGluY2x1ZGVkIG9uIHRoZSByZXN1bHRzLmh0bWwgcGFnZS4iIiIKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBzaG91bGRfa2lsbF90ZXN0X3No
ZWxsKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhl
IHRlc3Qgc2hlbGwgYmVmb3JlIHRoZSBuZXh0CisgICAgICAgIHRlc3QuIiIiCisgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgZGVmIHJlbGF0aXZlX291dHB1dF9maWxlbmFtZShzZWxmLCBmaWxl
bmFtZSwgbW9kaWZpZXIpOgorICAgICAgICAiIiJSZXR1cm5zIGEgcmVsYXRpdmUgZmlsZW5hbWUg
aW5zaWRlIHRoZSBvdXRwdXQgZGlyIHRoYXQgY29udGFpbnMKKyAgICAgICAgbW9kaWZpZXIuCisK
KyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGZpbGVuYW1lIGlzIGZhc3RcZG9tXGZvby5odG1sIGFu
ZCBtb2RpZmllciBpcworICAgICAgICAiLWV4cGVjdGVkLnR4dCIsIHRoZSByZXR1cm4gdmFsdWUg
aXMgZmFzdFxkb21cZm9vLWV4cGVjdGVkLnR4dAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ZmlsZW5hbWU6IHJlbGF0aXZlIGZpbGVuYW1lIHRvIHRlc3QgZmlsZQorICAgICAgICAgIG1vZGlm
aWVyOiBhIHN0cmluZyB0byByZXBsYWNlIHRoZSBleHRlbnNpb24gb2YgZmlsZW5hbWUgd2l0aAor
CisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBUaGUgcmVsYXRpdmUgd2luZG93cyBwYXRoIHRv
IHRoZSBvdXRwdXQgZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBvcy5wYXRo
LnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArIG1vZGlmaWVyCisKKworY2xhc3MgRmFpbHVyZVdpdGhU
eXBlKFRlc3RGYWlsdXJlKToKKyAgICAiIiJCYXNlIGNsYXNzIHRoYXQgcHJvZHVjZXMgc3RhbmRh
cmQgSFRNTCBvdXRwdXQgYmFzZWQgb24gdGhlIHRlc3QgdHlwZS4KKworICAgIFN1YmNsYXNzZXMg
bWF5IGNvbW1vbmx5IGNob29zZSB0byBvdmVycmlkZSB0aGUgUmVzdWx0SHRtbE91dHB1dCwgYnV0
IHN0aWxsCisgICAgdXNlIHRoZSBzdGFuZGFyZCBPdXRwdXRMaW5rcy4KKyAgICAiIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X3R5cGUpOgorICAgICAgICBUZXN0RmFpbHVyZS5fX2lu
aXRfXyhzZWxmKQorICAgICAgICAjIFRPRE8ob2phbik6IFRoaXMgY2xhc3Mgbm8gbG9uZ2VyIG5l
ZWRzIHRvIGtub3cgdGhlIHRlc3RfdHlwZS4KKyAgICAgICAgc2VsZi5fdGVzdF90eXBlID0gdGVz
dF90eXBlCisKKyAgICAjIEZpbGVuYW1lIHN1ZmZpeGVzIHVzZWQgYnkgUmVzdWx0SHRtbE91dHB1
dC4KKyAgICBPVVRfRklMRU5BTUVTID0gW10KKworICAgIGRlZiBvdXRwdXRfbGlua3Moc2VsZiwg
ZmlsZW5hbWUsIG91dF9uYW1lcyk6CisgICAgICAgICIiIlJldHVybnMgYSBzdHJpbmcgaG9sZGlu
ZyBhbGwgYXBwbGljYWJsZSBvdXRwdXQgZmlsZSBsaW5rcy4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIGZpbGVuYW1lOiB0aGUgdGVzdCBmaWxlbmFtZSwgdXNlZCB0byBjb25zdHJ1Y3QgdGhl
IHJlc3VsdCBmaWxlIG5hbWVzCisgICAgICAgICAgb3V0X25hbWVzOiBsaXN0IG9mIGZpbGVuYW1l
IHN1ZmZpeGVzIGZvciB0aGUgZmlsZXMuIElmIHRocmVlIG9yIG1vcmUKKyAgICAgICAgICAgICAg
c3VmZml4ZXMgYXJlIGluIHRoZSBsaXN0LCB0aGV5IHNob3VsZCBiZSBbYWN0dWFsLCBleHBlY3Rl
ZCwgZGlmZiwKKyAgICAgICAgICAgICAgd2RpZmZdLiBUd28gc3VmZml4ZXMgc2hvdWxkIGJlIFth
Y3R1YWwsIGV4cGVjdGVkXSwgYW5kIGEKKyAgICAgICAgICAgICAgc2luZ2xlIGl0ZW0gaXMgdGhl
IFthY3R1YWxdIGZpbGVuYW1lIHN1ZmZpeC4KKyAgICAgICAgICAgICAgSWYgb3V0X25hbWVzIGlz
IGVtcHR5LCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICBs
aW5rcyA9IFsnJ10KKyAgICAgICAgdXJpcyA9IFtzZWxmLnJlbGF0aXZlX291dHB1dF9maWxlbmFt
ZShmaWxlbmFtZSwgZm4pIGZvcgorICAgICAgICAgICAgICAgIGZuIGluIG91dF9uYW1lc10KKyAg
ICAgICAgaWYgbGVuKHVyaXMpID4gMToKKyAgICAgICAgICAgIGxpbmtzLmFwcGVuZCgiPGEgaHJl
Zj0nJXMnPmV4cGVjdGVkPC9hPiIgJSB1cmlzWzFdKQorICAgICAgICBpZiBsZW4odXJpcykgPiAw
OgorICAgICAgICAgICAgbGlua3MuYXBwZW5kKCI8YSBocmVmPSclcyc+YWN0dWFsPC9hPiIgJSB1
cmlzWzBdKQorICAgICAgICBpZiBsZW4odXJpcykgPiAyOgorICAgICAgICAgICAgbGlua3MuYXBw
ZW5kKCI8YSBocmVmPSclcyc+ZGlmZjwvYT4iICUgdXJpc1syXSkKKyAgICAgICAgaWYgbGVuKHVy
aXMpID4gMzoKKyAgICAgICAgICAgIGxpbmtzLmFwcGVuZCgiPGEgaHJlZj0nJXMnPndkaWZmPC9h
PiIgJSB1cmlzWzNdKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4obGlua3MpCisKKyAgICBkZWYg
cmVzdWx0X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
bWVzc2FnZSgpICsgc2VsZi5vdXRwdXRfbGlua3MoZmlsZW5hbWUsIHNlbGYuT1VUX0ZJTEVOQU1F
UykKKworCitjbGFzcyBGYWlsdXJlVGltZW91dChUZXN0RmFpbHVyZSk6CisgICAgIiIiVGVzdCB0
aW1lZCBvdXQuICBXZSBhbHNvIHdhbnQgdG8gcmVzdGFydCB0aGUgdGVzdCBzaGVsbCBpZiB0aGlz
CisgICAgaGFwcGVucy4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgp
OgorICAgICAgICByZXR1cm4gIlRlc3QgdGltZWQgb3V0IgorCisgICAgZGVmIHJlc3VsdF9odG1s
X291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiAiPHN0cm9uZz4lczwvc3Ry
b25nPiIgJSBzZWxmLm1lc3NhZ2UoKQorCisgICAgZGVmIHNob3VsZF9raWxsX3Rlc3Rfc2hlbGwo
c2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgRmFpbHVyZUNyYXNoKFRlc3RG
YWlsdXJlKToKKyAgICAiIiJUZXN0IHNoZWxsIGNyYXNoZWQuIiIiCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJUZXN0IHNoZWxsIGNyYXNo
ZWQiCisKKyAgICBkZWYgcmVzdWx0X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAg
ICAgIyBUT0RPKHRjKTogY3JlYXRlIGEgbGluayB0byB0aGUgbWluaWR1bXAgZmlsZQorICAgICAg
ICBzdGFjayA9IHNlbGYucmVsYXRpdmVfb3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLCAiLXN0YWNr
LnR4dCIpCisgICAgICAgIHJldHVybiAiPHN0cm9uZz4lczwvc3Ryb25nPiA8YSBocmVmPSVzPnN0
YWNrPC9hPiIgJSAoc2VsZi5tZXNzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2spCisKKyAgICBkZWYgc2hvdWxk
X2tpbGxfdGVzdF9zaGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBG
YWlsdXJlTWlzc2luZ1Jlc3VsdChGYWlsdXJlV2l0aFR5cGUpOgorICAgICIiIkV4cGVjdGVkIHJl
c3VsdCB3YXMgbWlzc2luZy4iIiIKKyAgICBPVVRfRklMRU5BTUVTID0gWyItYWN0dWFsLnR4dCJd
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJu
ICJObyBleHBlY3RlZCByZXN1bHRzIGZvdW5kIgorCisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1
dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiAoIjxzdHJvbmc+JXM8L3N0cm9uZz4i
ICUgc2VsZi5tZXNzYWdlKCkgKworICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0X2xpbmtzKGZp
bGVuYW1lLCBzZWxmLk9VVF9GSUxFTkFNRVMpKQorCisKK2NsYXNzIEZhaWx1cmVUZXh0TWlzbWF0
Y2goRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJUZXh0IGRpZmYgb3V0cHV0IGZhaWxlZC4iIiIK
KyAgICAjIEZpbGVuYW1lIHN1ZmZpeGVzIHVzZWQgYnkgUmVzdWx0SHRtbE91dHB1dC4KKyAgICBP
VVRfRklMRU5BTUVTID0gWyItYWN0dWFsLnR4dCIsICItZXhwZWN0ZWQudHh0IiwgIi1kaWZmLnR4
dCJdCisgICAgT1VUX0ZJTEVOQU1FU19XRElGRiA9IFsiLWFjdHVhbC50eHQiLCAiLWV4cGVjdGVk
LnR4dCIsICItZGlmZi50eHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi13ZGlmZi5o
dG1sIl0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X3R5cGUsIGhhc193ZGlmZik6Cisg
ICAgICAgIEZhaWx1cmVXaXRoVHlwZS5fX2luaXRfXyhzZWxmLCB0ZXN0X3R5cGUpCisgICAgICAg
IGlmIGhhc193ZGlmZjoKKyAgICAgICAgICAgIHNlbGYuT1VUX0ZJTEVOQU1FUyA9IHNlbGYuT1VU
X0ZJTEVOQU1FU19XRElGRgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6
CisgICAgICAgIHJldHVybiAiVGV4dCBkaWZmIG1pc21hdGNoIgorCisKK2NsYXNzIEZhaWx1cmVN
aXNzaW5nSW1hZ2VIYXNoKEZhaWx1cmVXaXRoVHlwZSk6CisgICAgIiIiQWN0dWFsIHJlc3VsdCBo
YXNoIHdhcyBtaXNzaW5nLiIiIgorICAgICMgQ2hyb21lIGRvZXNuJ3Qga25vdyB0byBkaXNwbGF5
IGEgLmNoZWNrc3VtIGZpbGUgYXMgdGV4dCwgc28gZG9uJ3QgYm90aGVyCisgICAgIyBwdXR0aW5n
IGluIGEgbGluayB0byB0aGUgYWN0dWFsIHJlc3VsdC4KKyAgICBPVVRfRklMRU5BTUVTID0gW10K
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgorICAgICAgICByZXR1cm4g
Ik5vIGV4cGVjdGVkIGltYWdlIGhhc2ggZm91bmQiCisKKyAgICBkZWYgcmVzdWx0X2h0bWxfb3V0
cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuICI8c3Ryb25nPiVzPC9zdHJvbmc+
IiAlIHNlbGYubWVzc2FnZSgpCisKKworY2xhc3MgRmFpbHVyZU1pc3NpbmdJbWFnZShGYWlsdXJl
V2l0aFR5cGUpOgorICAgICIiIkFjdHVhbCByZXN1bHQgaW1hZ2Ugd2FzIG1pc3NpbmcuIiIiCisg
ICAgT1VUX0ZJTEVOQU1FUyA9IFsiLWFjdHVhbC5wbmciXQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBtZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiTm8gZXhwZWN0ZWQgaW1hZ2UgZm91
bmQiCisKKyAgICBkZWYgcmVzdWx0X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAg
ICAgcmV0dXJuICgiPHN0cm9uZz4lczwvc3Ryb25nPiIgJSBzZWxmLm1lc3NhZ2UoKSArCisgICAg
ICAgICAgICAgICAgc2VsZi5vdXRwdXRfbGlua3MoZmlsZW5hbWUsIHNlbGYuT1VUX0ZJTEVOQU1F
UykpCisKKworY2xhc3MgRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoKEZhaWx1cmVXaXRoVHlwZSk6
CisgICAgIiIiSW1hZ2UgaGFzaGVzIGRpZG4ndCBtYXRjaC4iIiIKKyAgICBPVVRfRklMRU5BTUVT
ID0gWyItYWN0dWFsLnBuZyIsICItZXhwZWN0ZWQucG5nIiwgIi1kaWZmLnBuZyJdCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgIyBXZSBjYWxsIHRoaXMg
YSBzaW1wbGUgaW1hZ2UgbWlzbWF0Y2ggdG8gYXZvaWQgY29uZnVzaW9uLCBzaW5jZQorICAgICAg
ICAjIHdlIGxpbmsgdG8gdGhlIFBOR3MgcmF0aGVyIHRoYW4gdGhlIGNoZWNrc3Vtcy4KKyAgICAg
ICAgcmV0dXJuICJJbWFnZSBtaXNtYXRjaCIKKworCitjbGFzcyBGYWlsdXJlRnV6enlGYWlsdXJl
KEZhaWx1cmVXaXRoVHlwZSk6CisgICAgIiIiSW1hZ2UgaGFzaGVzIGRpZG4ndCBtYXRjaC4iIiIK
KyAgICBPVVRfRklMRU5BTUVTID0gWyItYWN0dWFsLnBuZyIsICItZXhwZWN0ZWQucG5nIl0KKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgorICAgICAgICByZXR1cm4gIkZ1
enp5IGltYWdlIG1hdGNoIGFsc28gZmFpbGVkIgorCisKK2NsYXNzIEZhaWx1cmVJbWFnZUhhc2hJ
bmNvcnJlY3QoRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJBY3R1YWwgcmVzdWx0IGhhc2ggaXMg
aW5jb3JyZWN0LiIiIgorICAgICMgQ2hyb21lIGRvZXNuJ3Qga25vdyB0byBkaXNwbGF5IGEgLmNo
ZWNrc3VtIGZpbGUgYXMgdGV4dCwgc28gZG9uJ3QgYm90aGVyCisgICAgIyBwdXR0aW5nIGluIGEg
bGluayB0byB0aGUgYWN0dWFsIHJlc3VsdC4KKyAgICBPVVRfRklMRU5BTUVTID0gW10KKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgorICAgICAgICByZXR1cm4gIkltYWdl
cyBtYXRjaCwgZXhwZWN0ZWQgaW1hZ2UgaGFzaCBpbmNvcnJlY3QuICIKKworICAgIGRlZiByZXN1
bHRfaHRtbF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gIjxzdHJvbmc+
JXM8L3N0cm9uZz4iICUgc2VsZi5tZXNzYWdlKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X2ZpbGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzJj
NTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5CkBAIC0wLDAgKzEsOTUgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlRoaXMgbW9kdWxlIGlz
IHVzZWQgdG8gZmluZCBhbGwgb2YgdGhlIGxheW91dCB0ZXN0IGZpbGVzIHVzZWQgYnkgQ2hyb21p
dW0KKyhhY3Jvc3MgYWxsIHBsYXRmb3JtcykuIEl0IGV4cG9zZXMgb25lIHB1YmxpYyBmdW5jdGlv
biAtIEdhdGhlclRlc3RGaWxlcygpIC0KK3doaWNoIHRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2Yg
cGF0aHMuIElmIGEgbGlzdCBpcyBwYXNzZWQgaW4sIHRoZSByZXR1cm5lZAorbGlzdCBvZiB0ZXN0
IGZpbGVzIGlzIGNvbnN0cmFpbmVkIHRvIHRob3NlIGZvdW5kIHVuZGVyIHRoZSBwYXRocyBwYXNz
ZWQgaW4sCitpLmUuIGNhbGxpbmcgR2F0aGVyVGVzdEZpbGVzKFsiTGF5b3V0VGVzdHMvZmFzdCJd
KSB3aWxsIG9ubHkgcmV0dXJuIGZpbGVzCit1bmRlciB0aGF0IGRpcmVjdG9yeS4iIiIKKworaW1w
b3J0IGdsb2IKK2ltcG9ydCBvcworaW1wb3J0IHBhdGhfdXRpbHMKKworIyBXaGVuIGNvbGxlY3Rp
bmcgdGVzdCBjYXNlcywgd2UgaW5jbHVkZSBhbnkgZmlsZSB3aXRoIHRoZXNlIGV4dGVuc2lvbnMu
Citfc3VwcG9ydGVkX2ZpbGVfZXh0ZW5zaW9ucyA9IHNldChbJy5odG1sJywgJy5zaHRtbCcsICcu
eG1sJywgJy54aHRtbCcsICcucGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcucGhwJywgJy5zdmcnXSkKKyMgV2hlbiBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHNraXAgdGhl
c2UgZGlyZWN0b3JpZXMKK19za2lwcGVkX2RpcmVjdG9yaWVzID0gc2V0KFsnLnN2bicsICdfc3Zu
JywgJ3Jlc291cmNlcycsICdzY3JpcHQtdGVzdHMnXSkKKworCitkZWYgZ2F0aGVyX3Rlc3RfZmls
ZXMocGF0aHMpOgorICAgICIiIkdlbmVyYXRlIGEgc2V0IG9mIHRlc3QgZmlsZXMgYW5kIHJldHVy
biB0aGVtLgorCisgICAgQXJnczoKKyAgICAgIHBhdGhzOiBhIGxpc3Qgb2YgY29tbWFuZCBsaW5l
IHBhdGhzIHJlbGF0aXZlIHRvIHRoZSB3ZWJraXQvdGVzdHMKKyAgICAgICAgICBkaXJlY3Rvcnku
IGdsb2IgcGF0dGVybnMgYXJlIG9rLgorICAgICIiIgorICAgIHBhdGhzX3RvX3dhbGsgPSBzZXQo
KQorICAgICMgaWYgcGF0aHMgaXMgZW1wdHksIHByb3ZpZGUgYSBwcmUtZGVmaW5lZCBsaXN0Lgor
ICAgIGlmIHBhdGhzOgorICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgICMg
SWYgdGhlcmUncyBhbiAqIGluIHRoZSBuYW1lLCBhc3N1bWUgaXQncyBhIGdsb2IgcGF0dGVybi4K
KyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNf
ZGlyKCksIHBhdGgpCisgICAgICAgICAgICBpZiBwYXRoLmZpbmQoJyonKSA+IC0xOgorICAgICAg
ICAgICAgICAgIGZpbGVuYW1lcyA9IGdsb2IuZ2xvYihwYXRoKQorICAgICAgICAgICAgICAgIHBh
dGhzX3RvX3dhbGsudXBkYXRlKGZpbGVuYW1lcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcGF0aHNfdG9fd2Fsay5hZGQocGF0aCkKKyAgICBlbHNlOgorICAgICAgICBwYXRo
c190b193YWxrLmFkZChwYXRoX3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSkKKworICAgICMgTm93
IHdhbGsgYWxsIHRoZSBwYXRocyBwYXNzZWQgaW4gb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgZ2V0
IGZpbGVuYW1lcworICAgIHRlc3RfZmlsZXMgPSBzZXQoKQorICAgIGZvciBwYXRoIGluIHBhdGhz
X3RvX3dhbGs6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpIGFuZCBfaGFzX3N1cHBv
cnRlZF9leHRlbnNpb24ocGF0aCk6CisgICAgICAgICAgICB0ZXN0X2ZpbGVzLmFkZChvcy5wYXRo
Lm5vcm1wYXRoKHBhdGgpKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBmb3Igcm9v
dCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgICMgZG9uJ3Qgd2Fs
ayBza2lwcGVkIGRpcmVjdG9yaWVzIGFuZCBzdWIgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGlm
IG9zLnBhdGguYmFzZW5hbWUocm9vdCkgaW4gX3NraXBwZWRfZGlyZWN0b3JpZXM6CisgICAgICAg
ICAgICAgICAgZGVsIGRpcnNbOl0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAg
ICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgX2hhc19zdXBw
b3J0ZWRfZXh0ZW5zaW9uKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUg
PSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVu
YW1lID0gb3MucGF0aC5ub3JtcGF0aChmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdGVz
dF9maWxlcy5hZGQoZmlsZW5hbWUpCisKKyAgICByZXR1cm4gdGVzdF9maWxlcworCisKK2RlZiBf
aGFzX3N1cHBvcnRlZF9leHRlbnNpb24oZmlsZW5hbWUpOgorICAgICIiIlJldHVybiB0cnVlIGlm
IGZpbGVuYW1lIGlzIG9uZSBvZiB0aGUgZmlsZSBleHRlbnNpb25zIHdlIHdhbnQgdG8gcnVuIGEK
KyAgICB0ZXN0IG9uLiIiIgorICAgIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5h
bWUpWzFdCisgICAgcmV0dXJuIGV4dGVuc2lvbiBpbiBfc3VwcG9ydGVkX2ZpbGVfZXh0ZW5zaW9u
cwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDAyZmFkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkKQEAgLTAsMCArMSw1MTEgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgVGhyZWFkIG9iamVjdCBmb3Ig
cnVubmluZyB0aGUgdGVzdCBzaGVsbCBhbmQgcHJvY2Vzc2luZyBVUkxzIGZyb20gYQorc2hhcmVk
IHF1ZXVlLgorCitFYWNoIHRocmVhZCBydW5zIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgdGhlIHRl
c3Rfc2hlbGwgYmluYXJ5IGFuZCB2YWxpZGF0ZXMKK3RoZSBvdXRwdXQuICBXaGVuIHRoZXJlIGFy
ZSBubyBtb3JlIFVSTHMgdG8gcHJvY2VzcyBpbiB0aGUgc2hhcmVkIHF1ZXVlLCB0aGUKK3RocmVh
ZCBleGl0cy4KKyIiIgorCitpbXBvcnQgY29weQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcwor
aW1wb3J0IFF1ZXVlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5
cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKKworaW1wb3J0
IHBhdGhfdXRpbHMKK2ltcG9ydCB0ZXN0X2ZhaWx1cmVzCisKKworZGVmIHByb2Nlc3Nfb3V0cHV0
KHByb2MsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9k
aXIpOgorICAgICIiIlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIHRlc3Rfc2hlbGwgcHJvY2Vz
cywgc3ViamVjdHMgaXQgdG8gYSBudW1iZXIKKyAgICBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBs
aXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCisKKyAgICBBcmdzOgorICAg
ICAgcHJvYzogYW4gYWN0aXZlIHRlc3Rfc2hlbGwgcHJvY2VzcworICAgICAgdGVzdF9pbmZvOiBP
YmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisgICAg
ICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8gc3ViamVjdCB0aGUgb3V0cHV0IHRv
CisgICAgICB0ZXN0X2FyZ3M6IGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gZWFjaCB0ZXN0Cisg
ICAgICB0YXJnZXQ6IERlYnVnIG9yIFJlbGVhc2UKKyAgICAgIG91dHB1dF9kaXI6IGRpcmVjdG9y
eSB0byBwdXQgY3Jhc2ggc3RhY2sgdHJhY2VzIGludG8KKworICAgIFJldHVybnM6IGEgbGlzdCBv
ZiBmYWlsdXJlIG9iamVjdHMgYW5kIHRpbWVzIGZvciB0aGUgdGVzdCBiZWluZyBwcm9jZXNzZWQK
KyAgICAiIiIKKyAgICBvdXRsaW5lcyA9IFtdCisgICAgZXh0cmFfbGluZXMgPSBbXQorICAgIGZh
aWx1cmVzID0gW10KKyAgICBjcmFzaCA9IEZhbHNlCisKKyAgICAjIFNvbWUgdGVzdCBhcmdzLCBz
dWNoIGFzIHRoZSBpbWFnZSBoYXNoLCBtYXkgYmUgYWRkZWQgb3IgY2hhbmdlZCBvbiBhCisgICAg
IyB0ZXN0LWJ5LXRlc3QgYmFzaXMuCisgICAgbG9jYWxfdGVzdF9hcmdzID0gY29weS5jb3B5KHRl
c3RfYXJncykKKworICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgbGluZSA9IHBy
b2Muc3Rkb3V0LnJlYWRsaW5lKCkKKworICAgICMgT25seSBzdGFydCBzYXZpbmcgb3V0cHV0IGxp
bmVzIG9uY2Ugd2UndmUgbG9hZGVkIHRoZSBVUkwgZm9yIHRoZSB0ZXN0LgorICAgIHVybCA9IE5v
bmUKKyAgICB0ZXN0X3N0cmluZyA9IHRlc3RfaW5mby51cmkuc3RyaXAoKQorCisgICAgd2hpbGUg
bGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6CisgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3Qg
Y3Jhc2hlZC4KKyAgICAgICAgaWYgbGluZSA9PSAnJyBhbmQgcHJvYy5wb2xsKCkgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jh
c2goKSkKKworICAgICAgICAgICAgIyBUaGlzIGlzIGhleCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNo
IGlzIHVzZWQgZm9yIGFicnVwdAorICAgICAgICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBw
ZW5zIGlmIHdlIGhpdCBjdHJsK2MgZnJvbSB0aGUgcHJvbXB0IGFuZAorICAgICAgICAgICAgIyB3
ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVsbC4KKyAgICAgICAgICAgICMg
c2RveW9uOiBOb3Qgc3VyZSBmb3Igd2hpY2ggT1MgYW5kIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0
aGUKKyAgICAgICAgICAgICMgYWJvdmUgY29kZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUg
dW5kZXIgTGludXggdG8gZGV0ZWN0CisgICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1
YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZSBTSUdJTlQuCisgICAgICAgICAgICAj
IEFuZCB0aGF0IGFncmVlcyB3aXRoIHRoZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRpb24uCisgICAg
ICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0gcHJvYy5yZXR1cm5jb2RlIG9yCisgICAgICAgICAg
ICAgICAgLSBzaWduYWwuU0lHSU5UID09IHByb2MucmV0dXJuY29kZSk6CisgICAgICAgICAgICAg
ICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQorICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICAjIERvbid0IGluY2x1ZGUgI1VSTCBsaW5lcyBpbiBv
dXIgb3V0cHV0CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiI1VSTDoiKToKKyAgICAgICAg
ICAgIHVybCA9IGxpbmUucnN0cmlwKClbNTpdCisgICAgICAgICAgICBpZiB1cmwgIT0gdGVzdF9z
dHJpbmc6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5mYXRhbCgiVGVzdCBnb3Qgb3V0IG9mIHN5
bmM6XG58JXN8XG58JXN8IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJsLCB0
ZXN0X3N0cmluZykpCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInRlc3Qg
b3V0IG9mIHN5bmMiKQorICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI01ENToiKToKKyAg
ICAgICAgICAgIGxvY2FsX3Rlc3RfYXJncy5oYXNoID0gbGluZS5yc3RyaXAoKVs1Ol0KKyAgICAg
ICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIiNURVNUX1RJTUVEX09VVCIpOgorICAgICAgICAgICAg
IyBUZXN0IHRpbWVkIG91dCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gcmVhZCB1bnRpbCAjRU9GLgor
ICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQo
KSkKKyAgICAgICAgZWxpZiB1cmw6CisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQobGluZSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dHJhX2xpbmVzLmFwcGVuZChsaW5lKQorCisg
ICAgICAgIGxpbmUgPSBwcm9jLnN0ZG91dC5yZWFkbGluZSgpCisKKyAgICBlbmRfdGVzdF90aW1l
ID0gdGltZS50aW1lKCkKKworICAgIGlmIGxlbihleHRyYV9saW5lcyk6CisgICAgICAgIGV4dHJh
ID0gIiIuam9pbihleHRyYV9saW5lcykKKyAgICAgICAgaWYgY3Jhc2g6CisgICAgICAgICAgICBs
b2dnaW5nLmRlYnVnKCJTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlICh0ZXN0X3N0cmluZywgZXh0
cmEpKQorICAgICAgICAgICAgIyBTdHJpcCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVz
dEZpbGVuYW1lIGV4cGVjdHMKKyAgICAgICAgICAgICMgZmlsZXN5c3RlbSBwYXRocy4KKyAgICAg
ICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsCisgICAgICAgICAgICAg
ICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3Rfc3RyaW5nWzc6XSkpCisg
ICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1z
dGFjay50eHQiCisgICAgICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG9z
LnBhdGguc3BsaXQoZmlsZW5hbWUpWzBdKQorICAgICAgICAgICAgb3BlbihmaWxlbmFtZSwgIndi
Iikud3JpdGUoZXh0cmEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVn
KCJQcmV2aW91cyB0ZXN0IG91dHB1dCBleHRyYSBsaW5lcyBhZnRlciBkdW1wOlxuJXMiICUKKyAg
ICAgICAgICAgICAgICBleHRyYSkKKworICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0
aGUgcmVzdWx0cy4KKyAgICB0aW1lX2Zvcl9kaWZmcyA9IHt9CisgICAgZm9yIHRlc3RfdHlwZSBp
biB0ZXN0X3R5cGVzOgorICAgICAgICBzdGFydF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUoKQorICAg
ICAgICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQodGVzdF9pbmZvLmZp
bGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvYywgJycuam9pbihvdXRsaW5lcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhbF90ZXN0X2FyZ3MsIHRhcmdldCkKKyAgICAgICAgIyBEb24n
dCBhZGQgYW55IG1vcmUgZmFpbHVyZXMgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jhc2gsIHNvIHdl
IGRvbid0CisgICAgICAgICMgZG91YmxlLXJlcG9ydCB0aG9zZSB0ZXN0cy4gV2UgZG8gZG91Ymxl
LXJlcG9ydCBmb3IgdGltZW91dHMgc2luY2UKKyAgICAgICAgIyB3ZSBzdGlsbCB3YW50IHRvIHNl
ZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgorICAgICAgICBpZiBub3QgY3Jhc2g6CisgICAg
ICAgICAgICBmYWlsdXJlcy5leHRlbmQobmV3X2ZhaWx1cmVzKQorICAgICAgICB0aW1lX2Zvcl9k
aWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKKyAgICAgICAgICAgIHRpbWUu
dGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQorCisgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
ID0gdGltZS50aW1lKCkgLSBlbmRfdGVzdF90aW1lCisgICAgdGVzdF9ydW5fdGltZSA9IGVuZF90
ZXN0X3RpbWUgLSBzdGFydF90aW1lCisgICAgcmV0dXJuIFRlc3RTdGF0cyh0ZXN0X2luZm8uZmls
ZW5hbWUsIGZhaWx1cmVzLCB0ZXN0X3J1bl90aW1lLAorICAgICAgICB0b3RhbF90aW1lX2Zvcl9h
bGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQorCisKK2RlZiBzdGFydF90ZXN0X3NoZWxsKGNvbW1h
bmQsIGFyZ3MpOgorICAgICIiIlJldHVybnMgdGhlIHByb2Nlc3MgZm9yIGEgbmV3IHRlc3Rfc2hl
bGwgc3RhcnRlZCBpbiBsYXlvdXQtdGVzdHMgbW9kZS4KKyAgICAiIiIKKyAgICBjbWQgPSBbXQor
ICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1
bWVudGF0aW9uLAorICAgICMgdXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rl
c3RzLnB5LgorICAgIHdyYXBwZXIgPSBvcy5lbnZpcm9uLmdldCgiQlJPV1NFUl9XUkFQUEVSIiwg
Tm9uZSkKKyAgICBpZiB3cmFwcGVyICE9IE5vbmU6CisgICAgICAgIGNtZCArPSBbd3JhcHBlcl0K
KyAgICBjbWQgKz0gY29tbWFuZCArIFsnLS1sYXlvdXQtdGVzdHMnXSArIGFyZ3MKKyAgICByZXR1
cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
aW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnBy
b2Nlc3MuU1RET1VUKQorCisKK2NsYXNzIFRlc3RTdGF0czoKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmaWxlbmFtZSwgZmFpbHVyZXMsIHRlc3RfcnVuX3RpbWUsCisgICAgICAgICAgICAgICAg
IHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpOgorICAgICAgICBzZWxm
LmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5mYWlsdXJlcyA9IGZhaWx1cmVzCisg
ICAgICAgIHNlbGYudGVzdF9ydW5fdGltZSA9IHRlc3RfcnVuX3RpbWUKKyAgICAgICAgc2VsZi50
b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMKKyAgICAg
ICAgc2VsZi50aW1lX2Zvcl9kaWZmcyA9IHRpbWVfZm9yX2RpZmZzCisKKworY2xhc3MgU2luZ2xl
VGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3Ig
cnVubmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
dGVzdF9zaGVsbF9jb21tYW5kLCBzaGVsbF9hcmdzLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsCisg
ICAgICAgIHRlc3RfYXJncywgdGFyZ2V0LCBvdXRwdXRfZGlyKToKKyAgICAgICAgIiIiCisgICAg
ICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVz
dCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisgICAgICAgICAgb3V0cHV0X2RpcjogRGlyZWN0
b3J5IHRvIHB1dCBjcmFzaCBzdGFja3MgaW50by4KKyAgICAgICAgICBTZWUgVGVzdFNoZWxsVGhy
ZWFkIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorICAgICAg
ICAiIiIKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAg
IHNlbGYuX2NvbW1hbmQgPSB0ZXN0X3NoZWxsX2NvbW1hbmQKKyAgICAgICAgc2VsZi5fc2hlbGxf
YXJncyA9IHNoZWxsX2FyZ3MKKyAgICAgICAgc2VsZi5fdGVzdF9pbmZvID0gdGVzdF9pbmZvCisg
ICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCisgICAgICAgIHNlbGYuX3Rlc3Rf
YXJncyA9IHRlc3RfYXJncworICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKKyAgICAgICAg
c2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKworICAgIGRlZiBydW4oc2VsZik6CisgICAg
ICAgIHByb2MgPSBzdGFydF90ZXN0X3NoZWxsKHNlbGYuX2NvbW1hbmQsIHNlbGYuX3NoZWxsX2Fy
Z3MgKworICAgICAgICAgICAgWyItLXRpbWUtb3V0LW1zPSIgKyBzZWxmLl90ZXN0X2luZm8udGlt
ZW91dCwgc2VsZi5fdGVzdF9pbmZvLnVyaV0pCisgICAgICAgIHNlbGYuX3Rlc3Rfc3RhdHMgPSBw
cm9jZXNzX291dHB1dChwcm9jLCBzZWxmLl90ZXN0X2luZm8sCisgICAgICAgICAgICBzZWxmLl90
ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYuX3RhcmdldCwgc2VsZi5fb3V0cHV0X2Rp
cikKKworICAgIGRlZiBnZXRfdGVzdF9zdGF0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3Rlc3Rfc3RhdHMKKworCitjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWVfbGlzdF9xdWV1ZSwgcmVzdWx0X3F1
ZXVlLCB0ZXN0X3NoZWxsX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsIHRl
c3RfYXJncywgc2hlbGxfYXJncywgb3B0aW9ucyk6CisgICAgICAgICIiIkluaXRpYWxpemUgYWxs
IHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyB0ZXN0IHNoZWxsIHRocmVhZC4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUg
Y2xhc3MgdGhhdCBjb250YWlucyBsaXN0cworICAgICAgICAgICAgICBvZiB0dXBsZXMgb2YgKGZp
bGVuYW1lLCB1cmkpIHBhaXJzLgorICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJlYWQgc2Fm
ZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbiB0dXBsZXMgb2YKKyAgICAgICAgICAgICAg
KHRlc3QsIGZhaWx1cmUgbGlzdHMpIGZvciB0aGUgdGVzdCByZXN1bHRzLgorICAgICAgICAgIHRl
c3Rfc2hlbGxfY29tbWFuZDogQSBsaXN0IHNwZWNpZnlpbmcgdGhlIGNvbW1hbmQrYXJncyBmb3IK
KyAgICAgICAgICAgICAgdGVzdF9zaGVsbAorICAgICAgICAgIHRlc3RfdHlwZXM6IEEgbGlzdCBv
ZiBUZXN0VHlwZSBvYmplY3RzIHRvIHJ1biB0aGUgdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAg
YWdhaW5zdC4KKyAgICAgICAgICB0ZXN0X2FyZ3M6IEEgVGVzdEFyZ3VtZW50cyBvYmplY3QgdG8g
cGFzcyB0byBlYWNoIFRlc3RUeXBlLgorICAgICAgICAgIHNoZWxsX2FyZ3M6IEFueSBleHRyYSBh
cmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRlc3Rfc2hlbGwuZXhlLgorICAgICAgICAgIG9wdGlv
bnM6IEEgcHJvcGVydHkgZGljdGlvbmFyeSBhcyBwcm9kdWNlZCBieSBvcHRwYXJzZS4gVGhlCisg
ICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb25zIHNob3VsZCBtYXRjaCB0aG9zZSBleHBl
Y3RlZCBieQorICAgICAgICAgICAgICBydW5fd2Via2l0X3Rlc3RzOyB0aGV5IGFyZSB0eXBpY2Fs
bHkgcGFzc2VkIHZpYSB0aGUKKyAgICAgICAgICAgICAgcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVu
bmVyIGNsYXNzLiIiIgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisg
ICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUgPSBmaWxlbmFtZV9saXN0X3F1ZXVlCisg
ICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IHJlc3VsdF9xdWV1ZQorICAgICAgICBzZWxmLl9m
aWxlbmFtZV9saXN0ID0gW10KKyAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5kID0gdGVz
dF9zaGVsbF9jb21tYW5kCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCisg
ICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncworICAgICAgICBzZWxmLl90ZXN0X3No
ZWxsX3Byb2MgPSBOb25lCisgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3MgPSBzaGVsbF9hcmdzCisg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0g
RmFsc2UKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYu
X2RpcmVjdG9yeV90aW1pbmdfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl90ZXN0X3N0YXRzID0g
W10KKyAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAorICAgICAgICBzZWxmLl9zdGFydF90aW1l
ID0gMAorICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCisKKyAgICAgICAgIyBDdXJyZW50IGRp
cmVjdG9yeSBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgorICAgICAgICBzZWxmLl9jdXJyZW50X2Rp
ciA9IE5vbmUKKyAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaW4gc2VsZi5fY3VycmVudF9kaXIu
CisgICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2RpciA9IE5vbmUKKyAgICAgICAg
IyBUaW1lIGF0IHdoaWNoIHdlIHN0YXJ0ZWQgcnVubmluZyB0ZXN0cyBmcm9tIHNlbGYuX2N1cnJl
bnRfZGlyLgorICAgICAgICBzZWxmLl9jdXJyZW50X2Rpcl9zdGFydF90aW1lID0gTm9uZQorCisg
ICAgZGVmIGdldF9kaXJlY3RvcnlfdGltaW5nX3N0YXRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1
cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3QgZGlyZWN0b3J5IHRvIGEgdHVwbGUgb2YKKyAg
ICAgICAgKG51bWJlciBvZiB0ZXN0cyBpbiB0aGF0IGRpcmVjdG9yeSwgdGltZSB0byBydW4gdGhl
IHRlc3RzKSIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZGlyZWN0b3J5X3RpbWluZ19zdGF0cwor
CisgICAgZGVmIGdldF9pbmRpdmlkdWFsX3Rlc3Rfc3RhdHMoc2VsZik6CisgICAgICAgICIiIlJl
dHVybnMgYSBsaXN0IG9mICh0ZXN0X2ZpbGVuYW1lLCB0aW1lX3RvX3J1bl90ZXN0LAorICAgICAg
ICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKSB0dXBsZXMuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3N0YXRzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgor
ICAgICAgICAiIiJTZXQgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKKyAg
ICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisKKyAgICBkZWYgZ2V0X2V4Y2VwdGlvbl9pbmZv
KHNlbGYpOgorICAgICAgICAiIiJJZiBydW4oKSB0ZXJtaW5hdGVkIG9uIGFuIHVuY2F1Z2h0IGV4
Y2VwdGlvbiwgcmV0dXJuIGl0IGhlcmUKKyAgICAgICAgKCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNr
KSB0dXBsZSkuCisgICAgICAgIFJldHVybnMgTm9uZSBpZiBydW4oKSB0ZXJtaW5hdGVkIG5vcm1h
bGx5LiBNZWFudCB0byBiZSBjYWxsZWQgYWZ0ZXIKKyAgICAgICAgam9pbmluZyB0aGlzIHRocmVh
ZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbl9pbmZvCisKKyAgICBkZWYgZ2V0
X3RvdGFsX3RpbWUoc2VsZik6CisgICAgICAgIHJldHVybiBtYXgoc2VsZi5fc3RvcF90aW1lIC0g
c2VsZi5fc3RhcnRfdGltZSwgMC4wKQorCisgICAgZGVmIGdldF9udW1fdGVzdHMoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9udW1fdGVzdHMKKworICAgIGRlZiBydW4oc2VsZik6CisgICAg
ICAgICIiIkRlbGVnYXRlIG1haW4gd29yayB0byBhIGhlbHBlciBtZXRob2QgYW5kIHdhdGNoIGZv
ciB1bmNhdWdodAorICAgICAgICBleGNlcHRpb25zLiIiIgorICAgICAgICBzZWxmLl9zdGFydF90
aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAorICAgICAgICB0
cnk6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCclcyBzdGFydGluZycgJSAoc2VsZi5nZXRO
YW1lKCkpKQorICAgICAgICAgICAgc2VsZi5fcnVuKHRlc3RfcnVubmVyPU5vbmUsIHJlc3VsdF9z
dW1tYXJ5PU5vbmUpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCclcyBkb25lICglZCB0ZXN0
cyknICUgKHNlbGYuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdl
dF9udW1fdGVzdHMoKSkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgU2F2ZSB0aGUg
ZXhjZXB0aW9uIGZvciBvdXIgY2FsbGVyIHRvIHNlZS4KKyAgICAgICAgICAgIHNlbGYuX2V4Y2Vw
dGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9
IHRpbWUudGltZSgpCisgICAgICAgICAgICAjIFJlLXJhaXNlIGl0IGFuZCBkaWUuCisgICAgICAg
ICAgICBsb2dnaW5nLmVycm9yKCclcyBkeWluZzogJXMnICUgKHNlbGYuZ2V0TmFtZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbykpCisgICAgICAgICAg
ICByYWlzZQorICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgZGVm
IHJ1bl9pbl9tYWluX3RocmVhZChzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgor
ICAgICAgICAiIiJUaGlzIGhvb2sgYWxsb3dzIHVzIHRvIHJ1biB0aGUgdGVzdHMgZnJvbSB0aGUg
bWFpbiB0aHJlYWQgaWYKKyAgICAgICAgLS1udW0tdGVzdC1zaGVsbHM9PTEsIGluc3RlYWQgb2Yg
aGF2aW5nIHRvIGFsd2F5cyBydW4gdHdvIG9yIG1vcmUKKyAgICAgICAgdGhyZWFkcy4gVGhpcyBh
bGxvd3MgdXMgdG8gZGVidWcgdGhlIHRlc3QgaGFybmVzcyB3aXRob3V0IGhhdmluZyB0bworICAg
ICAgICBkbyBtdWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcuIiIiCisgICAgICAgIHNlbGYuX3J1bih0
ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpCisKKyAgICBkZWYgX3J1bihzZWxmLCB0ZXN0X3J1
bm5lciwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJNYWluIHdvcmsgZW50cnkgcG9pbnQg
b2YgdGhlIHRocmVhZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9tIHRoZQorICAgICAgICBm
aWxlbmFtZSBxdWV1ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBydW4gb3V0IG9mIHVybHMu
CisKKyAgICAgICAgSWYgdGVzdF9ydW5uZXIgaXMgbm90IE5vbmUsIHRoZW4gd2UgY2FsbCB0ZXN0
X3J1bm5lci5VcGRhdGVTdW1tYXJ5KCkKKyAgICAgICAgd2l0aCB0aGUgcmVzdWx0cyBvZiBlYWNo
IHRlc3QuIiIiCisgICAgICAgIGJhdGNoX3NpemUgPSAwCisgICAgICAgIGJhdGNoX2NvdW50ID0g
MAorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemU6CisgICAgICAgICAgICB0cnk6
CisgICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZSA9IGludChzZWxmLl9vcHRpb25zLmJhdGNoX3Np
emUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJJ
Z25vcmluZyBpbnZhbGlkIGJhdGNoIHNpemUgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUpCisKKyAgICAgICAgIyBBcHBlbmQgdGVz
dHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgorICAg
ICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlz
dHNBbmRQcmludE91dHB1dC4KKyAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5q
b2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCisgICAgICAgIHRlc3RzX3J1
bl9maWxlID0gb3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIikKKworICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6CisgICAgICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCdUZXN0aW5nIGNhbmNlbGVkJykKKyAgICAgICAgICAgICAgICB0ZXN0c19ydW5f
ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGxl
bihzZWxmLl9maWxlbmFtZV9saXN0KSBpcyAwOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1
cnJlbnRfZGlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaXJlY3Rv
cnlfdGltaW5nX3N0YXRzW3NlbGYuX2N1cnJlbnRfZGlyXSA9IFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIChzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9kaXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZS50aW1lKCkgLSBzZWxmLl9jdXJyZW50X2Rpcl9zdGFydF90aW1lKQorCisg
ICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2Rp
ciwgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2ZpbGVuYW1lX2xpc3RfcXVldWUuZ2V0X25vd2FpdCgpCisgICAgICAgICAgICAgICAgZXhjZXB0
IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9raWxsX3Rlc3Rfc2hlbGwo
KQorICAgICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1
cnJlbnRfZGlyID0gbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fY3VycmVudF9kaXJfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisKKyAgICAgICAgICAgIHRl
c3RfaW5mbyA9IHNlbGYuX2ZpbGVuYW1lX2xpc3QucG9wKCkKKworICAgICAgICAgICAgIyBXZSBo
YXZlIGEgdXJsLCBydW4gdGVzdHMuCisgICAgICAgICAgICBiYXRjaF9jb3VudCArPSAxCisgICAg
ICAgICAgICBzZWxmLl9udW1fdGVzdHMgKz0gMQorICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgICAgIGZhaWx1cmVzID0gc2VsZi5fcnVuX3Rlc3Rf
c2luZ2x5KHRlc3RfaW5mbykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFp
bHVyZXMgPSBzZWxmLl9ydW5fdGVzdCh0ZXN0X2luZm8pCisKKyAgICAgICAgICAgIGZpbGVuYW1l
ID0gdGVzdF9pbmZvLmZpbGVuYW1lCisgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS53cml0ZShm
aWxlbmFtZSArICJcbiIpCisgICAgICAgICAgICBpZiBmYWlsdXJlczoKKyAgICAgICAgICAgICAg
ICAjIENoZWNrIGFuZCBraWxsIHRlc3Qgc2hlbGwgaWYgd2UgbmVlZCB0b28uCisgICAgICAgICAg
ICAgICAgaWYgbGVuKFsxIGZvciBmIGluIGZhaWx1cmVzIGlmIGYuc2hvdWxkX2tpbGxfdGVzdF9z
aGVsbCgpXSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfdGVzdF9zaGVsbCgpCisg
ICAgICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVs
bCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAorICAg
ICAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisgICAgICAgICAgICAg
ICAgZXJyb3Jfc3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5tZXNzYWdlKCkgZm9yIGYgaW4gZmFp
bHVyZXNdKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIiVzICVzIGZhaWxlZDpcbiVz
IiAlIChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhf
dXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9zdHIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuZ2V0TmFtZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGZpbGVuYW1lKSkpCisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KChmaWxl
bmFtZSwgZmFpbHVyZXMpKQorCisgICAgICAgICAgICBpZiBiYXRjaF9zaXplID4gMCBhbmQgYmF0
Y2hfY291bnQgPiBiYXRjaF9zaXplOgorICAgICAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVs
bCBhbmQgcmVzZXQgY291bnQuCisgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF90ZXN0X3NoZWxs
KCkKKyAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKKworICAgICAgICAgICAgaWYgdGVz
dF9ydW5uZXI6CisgICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIudXBkYXRlX3N1bW1hcnkocmVz
dWx0X3N1bW1hcnkpCisKKyAgICBkZWYgX3J1bl90ZXN0X3NpbmdseShzZWxmLCB0ZXN0X2luZm8p
OgorICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBlbmZvcmNpbmcg
YSBoYXJkIHRpbWUgbGltaXQuCisKKyAgICAgICAgU2luY2Ugd2UgY2FuIG9ubHkgZGV0ZWN0IHRo
ZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbAorICAgICAgICBzdGF0
ZSBvciBwcm9ncmVzcywgd2UgY2FuIG9ubHkgcnVuIHBlci10ZXN0IHRpbWVvdXRzIHdoZW4gcnVu
bmluZyB0ZXN0CisgICAgICAgIGZpbGVzIHNpbmdseS4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBh
bmQgdGltZW91dAorCisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBBIGxpc3Qgb2YgVGVzdEZh
aWx1cmUgb2JqZWN0cyBkZXNjcmliaW5nIHRoZSBlcnJvci4KKyAgICAgICAgIiIiCisgICAgICAg
IHdvcmtlciA9IFNpbmdsZVRlc3RUaHJlYWQoc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICAgICAgd29ya2Vy
LnN0YXJ0KCkKKworICAgICAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgdGVz
dF9zaGVsbCBwcm9jZXNzLCB3ZSBjYW4gZW5mb3JjZQorICAgICAgICAjIGEgaGFyZCB0aW1lb3V0
LiB0aGUgdGVzdF9zaGVsbCB3YXRjaGRvZyB1c2VzIDIuNXggdGhlIHRpbWVvdXQKKyAgICAgICAg
IyBXZSB3YW50IHRvIGJlIGxhcmdlciB0aGFuIHRoYXQuCisgICAgICAgIHdvcmtlci5qb2luKGlu
dCh0ZXN0X2luZm8udGltZW91dCkgKiAzLjAgLyAxMDAwLjApCisgICAgICAgIGlmIHdvcmtlci5p
c0FsaXZlKCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJl
YWQgc3RpbGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAjIHRlc3Rfc2hlbGwuZXhlIGlzIGNv
bXBsZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisgICAgICAgICAgICAjIG1vcmUgd2Ug
Y2FuIGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQorICAgICAgICAgICAgIyB0
ZXN0X3NoZWxscyB0byBmcmVlIGl0IHVwLiBJZiB3ZSdyZSBydW5uaW5nIG1vcmUgdGhhbgorICAg
ICAgICAgICAgIyBvbmUgdGVzdF9zaGVsbCB0aHJlYWQsIHdlJ2xsIGVuZCB1cCBraWxsaW5nIHRo
ZSBvdGhlcgorICAgICAgICAgICAgIyB0ZXN0X3NoZWxscyB0b28sIGludHJvZHVjaW5nIHNwdXJp
b3VzIGNyYXNoZXMuIFdlIGFjY2VwdCB0aGF0CisgICAgICAgICAgICAjIHRyYWRlb2ZmIGluIG9y
ZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzIHRocmVhZCdzCisgICAgICAgICAg
ICAjIHJlc3VsdHMuCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdUZXN0IHRocmVhZCBodW5n
OiBraWxsaW5nIGFsbCB0ZXN0X3NoZWxscycpCisgICAgICAgICAgICBwYXRoX3V0aWxzLmtpbGxf
YWxsX3Rlc3Rfc2hlbGxzKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGF0cyA9IHdv
cmtlci5nZXRfdGVzdF9zdGF0cygpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3N0YXRzLmFwcGVu
ZChzdGF0cykKKyAgICAgICAgICAgIGZhaWx1cmVzID0gc3RhdHMuZmFpbHVyZXMKKyAgICAgICAg
ZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgZmFpbHVyZXMgPSBbXQorICAg
ICAgICAgICAgbG9nZ2luZy5lcnJvcignQ2Fubm90IGdldCByZXN1bHRzIG9mIHRlc3Q6ICVzJyAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5maWxlbmFtZSkKKworICAgICAg
ICByZXR1cm4gZmFpbHVyZXMKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvKToK
KyAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QgZmlsZSB1c2luZyBhIHNoYXJlZCB0ZXN0X3No
ZWxsIHByb2Nlc3MuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0X2luZm86IE9iamVj
dCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAgICAg
ICBSZXR1cm46CisgICAgICAgICAgQSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMgZGVzY3Jp
YmluZyB0aGUgZXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9lbnN1cmVfdGVzdF9z
aGVsbF9pc19ydW5uaW5nKCkKKyAgICAgICAgIyBBcmdzIHRvIHRlc3Rfc2hlbGwgaXMgYSBzcGFj
ZS1zZXBhcmF0ZWQgbGlzdCBvZgorICAgICAgICAjICJ1cmkgdGltZW91dCBwaXhlbF9oYXNoIgor
ICAgICAgICAjIFRoZSB0aW1lb3V0IGFuZCBwaXhlbF9oYXNoIGFyZSBvcHRpb25hbC4gIFRoZSB0
aW1lb3V0IGlzIHVzZWQgaWYgdGhpcworICAgICAgICAjIHRlc3QgaGFzIGEgY3VzdG9tIHRpbWVv
dXQuIFRoZSBwaXhlbF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4KKyAgICAgICAgIyBp
bWFnZSBkdW1wIGlmIHRoZSBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8g
YSBibGFuaworICAgICAgICAjIHZhbHVlIGlmIHdlIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2Vs
aW5lLgorICAgICAgICAjIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYSBwcmV2aW91cyBydW4g
d2lsbCBiZSBjb3BpZWQgaW50bworICAgICAgICAjIHRoZSBiYXNlbGluZS4pCisgICAgICAgIGlt
YWdlX2hhc2ggPSB0ZXN0X2luZm8uaW1hZ2VfaGFzaAorICAgICAgICBpZiBpbWFnZV9oYXNoIGFu
ZCBzZWxmLl90ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lOgorICAgICAgICAgICAgaW1hZ2VfaGFzaCA9
ICIiCisgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi53cml0ZSgoIiVzICVzICVz
XG4iICUKKyAgICAgICAgICAgICh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwgaW1h
Z2VfaGFzaCkpKQorCisgICAgICAgICMgSWYgdGhlIHRlc3Qgc2hlbGwgaXMgZGVhZCwgdGhlIGFi
b3ZlIG1heSBjYXVzZSBhbiBJT0Vycm9yIGFzIHdlCisgICAgICAgICMgdHJ5IHRvIHdyaXRlIG9u
dG8gdGhlIGJyb2tlbiBwaXBlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0ZXN0IGZvcgorICAgICAg
ICAjIHRoaXMgdGVzdCBzaGVsbCBwcm9jZXNzLCB0aGFuIHRoZSB0ZXN0IHNoZWxsIGRpZCBub3QK
KyAgICAgICAgIyBzdWNjZXNzZnVsbHkgc3RhcnQuIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCB0
ZXN0LCB0aGVuIHRoZQorICAgICAgICAjIHByZXZpb3VzIHRlc3RzIGhhdmUgY2F1c2VkIHNvbWUg
a2luZCBvZiBkZWxheWVkIGNyYXNoLiBXZSBkb24ndAorICAgICAgICAjIHRyeSB0byByZWNvdmVy
IGhlcmUuCisgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi5mbHVzaCgpCisKKyAg
ICAgICAgc3RhdHMgPSBwcm9jZXNzX291dHB1dChzZWxmLl90ZXN0X3NoZWxsX3Byb2MsIHRlc3Rf
aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLCBz
ZWxmLl90ZXN0X2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy50YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgICAgICBzZWxmLl90ZXN0X3N0YXRzLmFwcGVuZChz
dGF0cykKKyAgICAgICAgcmV0dXJuIHN0YXRzLmZhaWx1cmVzCisKKyAgICBkZWYgX2Vuc3VyZV90
ZXN0X3NoZWxsX2lzX3J1bm5pbmcoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IHRoZSBzaGFyZWQg
dGVzdCBzaGVsbCwgaWYgaXQncyBub3QgcnVubmluZy4gIE5vdCBmb3IgdXNlIHdoZW4KKyAgICAg
ICAgcnVubmluZyB0ZXN0cyBzaW5nbHksIHNpbmNlIHRob3NlIGVhY2ggc3RhcnQgYSBzZXBhcmF0
ZSB0ZXN0IHNoZWxsIGluCisgICAgICAgIHRoZWlyIG93biB0aHJlYWQuCisgICAgICAgICIiIgor
ICAgICAgICBpZiAobm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyBvcgorICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9zaGVsbF9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICBzZWxm
Ll90ZXN0X3NoZWxsX3Byb2MgPSBzdGFydF90ZXN0X3NoZWxsKHNlbGYuX3Rlc3Rfc2hlbGxfY29t
bWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fc2hlbGxfYXJncykKKworICAgIGRlZiBfa2lsbF90ZXN0X3NoZWxsKHNlbGYpOgor
ICAgICAgICAiIiJLaWxsIHRoZSB0ZXN0IHNoZWxsIHByb2Nlc3MgaWYgaXQncyBydW5uaW5nLiIi
IgorICAgICAgICBpZiBzZWxmLl90ZXN0X3NoZWxsX3Byb2M6CisgICAgICAgICAgICBzZWxmLl90
ZXN0X3NoZWxsX3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVs
bF9wcm9jLnN0ZG91dC5jbG9zZSgpCisgICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3NoZWxsX3By
b2Muc3RkZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRlcnIu
Y2xvc2UoKQorICAgICAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMicsICdj
eWd3aW4nKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnBv
bGwoKSk6CisgICAgICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRlcnIgaGFu
Z3Mgc29tZXRpbWVzIG9uIE9TIFguCisgICAgICAgICAgICAgICAgbnVsbCA9IG9wZW4ob3MuZGV2
bnVsbCwgInciKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWyJraWxsIiwgIi05
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl90ZXN0X3NoZWxs
X3Byb2MucGlkKV0sIHN0ZGVycj1udWxsKQorICAgICAgICAgICAgICAgIG51bGwuY2xvc2UoKQor
ICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jID0gTm9uZQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd2Vi
c29ja2V0X3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTZlYWRjZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9z
ZXJ2ZXIucHkKQEAgLTAsMCArMSwzMTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBQeVdlYlNvY2tl
dCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKKworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cwor
aW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxpYgorCitpbXBvcnQgcGF0
aF91dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxzCitpbXBvcnQgaHR0cF9zZXJ2ZXIKKworX1dT
X0xPR19QUkVGSVggPSAncHl3ZWJzb2NrZXQud3MubG9nLScKK19XU1NfTE9HX1BSRUZJWCA9ICdw
eXdlYnNvY2tldC53c3MubG9nLScKKworX0RFRkFVTFRfV1NfUE9SVCA9IDg4ODAKK19ERUZBVUxU
X1dTU19QT1JUID0gOTMyMworCisKK2RlZiB1cmxfaXNfYWxpdmUodXJsKToKKyAgIiIiQ2hlY2tz
IHRvIHNlZSBpZiB3ZSBnZXQgYW4gaHR0cCByZXNwb25zZSBmcm9tIHx1cmx8LgorICBXZSBwb2xs
IHRoZSB1cmwgNSB0aW1lcyB3aXRoIGEgMSBzZWNvbmQgZGVsYXkuICBJZiB3ZSBkb24ndAorICBn
ZXQgYSByZXBseSBpbiB0aGF0IHRpbWUsIHdlIGdpdmUgdXAgYW5kIGFzc3VtZSB0aGUgaHR0cGQK
KyAgZGlkbid0IHN0YXJ0IHByb3Blcmx5LgorCisgIEFyZ3M6CisgICAgdXJsOiBUaGUgVVJMIHRv
IGNoZWNrLgorICBSZXR1cm46CisgICAgVHJ1ZSBpZiB0aGUgdXJsIGlzIGFsaXZlLgorICAiIiIK
KyAgd2FpdF90aW1lID0gNQorICB3aGlsZSB3YWl0X3RpbWUgPiAwOgorICAgIHRyeToKKyAgICAg
IHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgIyBTZXJ2ZXIgaXMgdXAgYW5k
IHJlc3BvbmRpbmcuCisgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAg
ICAgcGFzcworICAgIHdhaXRfdGltZSAtPSAxCisgICAgIyBXYWl0IGEgc2Vjb25kIGFuZCB0cnkg
YWdhaW4uCisgICAgdGltZS5zbGVlcCgxKQorCisgIHJldHVybiBGYWxzZQorCisKK2RlZiByZW1v
dmVfbG9nX2ZpbGVzKGZvbGRlciwgc3RhcnRzX3dpdGgpOgorICAgIGZpbGVzID0gb3MubGlzdGRp
cihmb2xkZXIpCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIGZpbGUuc3RhcnRz
d2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4o
Zm9sZGVyLCBmaWxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKKworCitjbGFz
cyBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3Mg
UHlXZWJTb2NrZXROb3RGb3VuZChFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBQeVdl
YlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
b3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9XU19QT1JULAorICAgICAgICAgICAgICAgICByb290
PU5vbmUsCisgICAgICAgICAgICAgICAgIHVzZV90bHM9RmFsc2UsCisgICAgICAgICAgICAgICAg
IHByaXZhdGVfa2V5PWh0dHBfc2VydmVyLkxpZ2h0dHBkLl9wZW1fZmlsZSwKKyAgICAgICAgICAg
ICAgICAgY2VydGlmaWNhdGU9aHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX3BlbV9maWxlLAorICAgICAg
ICAgICAgICAgICByZWdpc3Rlcl9jeWd3aW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGlkZmls
ZT1Ob25lKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJz
b2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICAi
IiIKKyAgICAgICAgaHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX19pbml0X18oc2VsZiwgb3V0cHV0X2Rp
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1wb3J0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290PXJvb3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1yZWdpc3Rlcl9jeWd3
aW4pCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYu
X3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYu
X3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3VzZV90bHMgPSB1c2VfdGxzCisgICAgICAgIHNl
bGYuX3ByaXZhdGVfa2V5ID0gcHJpdmF0ZV9rZXkKKyAgICAgICAgc2VsZi5fY2VydGlmaWNhdGUg
PSBjZXJ0aWZpY2F0ZQorICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgc2VsZi5f
cG9ydCA9IGludChzZWxmLl9wb3J0KQorICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgorICAgICAg
ICAgICAgc2VsZi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQoU2VjdXJlKScKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lID0gJ1B5V2ViU29ja2V0JworICAg
ICAgICBzZWxmLl9waWRmaWxlID0gcGlkZmlsZQorICAgICAgICBzZWxmLl93c291dCA9IE5vbmUK
KworICAgICAgICAjIFdlYmtpdCB0ZXN0cworICAgICAgICBpZiBzZWxmLl9yb290OgorICAgICAg
ICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKHNlbGYuX3Jvb3QpCisg
ICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKAorICAg
ICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLl9yb290LCAnd2Vic29ja2V0JywgJ3Rlc3Rz
JykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fd2ViX3NvY2tldF90ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAg
ICAgICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnLCAnd2Vi
c29ja2V0JywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzJykKKyAgICAgICAgICAgICAgICBz
ZWxmLl9sYXlvdXRfdGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAorICAgICAgICAg
ICAgICAgICAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3RzJykKKyAgICAg
ICAgICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoKKyAgICAgICAgICAgICAgICBz
ZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gTm9uZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5fd2ViX3NvY2tldF90ZXN0czoKKyAgICAgICAgICAgIGxvZ2dpbmcu
aW5mbygnTm8gbmVlZCB0byBzdGFydCAlcyBzZXJ2ZXIuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQor
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAg
ICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RTdGFydGVkKCclcyBpcyBhbHJlYWR5IHJ1bm5pbmcu
JyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVy
X25hbWUpCisKKyAgICAgICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0aW1lKCclZCViJVktJUglTSVT
JykKKyAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBf
V1NTX0xPR19QUkVGSVgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBf
V1NfTE9HX1BSRUZJWAorICAgICAgICBsb2dfZmlsZV9uYW1lID0gbG9nX3ByZWZpeCArIHRpbWVf
c3RyCisKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtl
ZXAgdGhlIGxhc3Qgb25lcy4KKyAgICAgICAgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRf
ZGlyLCBsb2dfcHJlZml4KQorCisgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxm
Ll9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lICsgIi1lcnIudHh0IikKKworICAgICAgICBvdXRw
dXRfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAi
LW91dC50eHQiKQorICAgICAgICBzZWxmLl93c291dCA9IG9wZW4ob3V0cHV0X2xvZywgInciKQor
CisgICAgICAgIHB5dGhvbl9pbnRlcnAgPSBzeXMuZXhlY3V0YWJsZQorICAgICAgICBweXdlYnNv
Y2tldF9iYXNlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKKyAgICAgICAgICAgICd0aGly
ZF9wYXJ0eScsICdXZWJLaXQnLCAnV2ViS2l0VG9vbHMnLCAncHl3ZWJzb2NrZXQnKQorICAgICAg
ICBweXdlYnNvY2tldF9zY3JpcHQgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAorICAgICAg
ICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29scycsICdweXdlYnNvY2tl
dCcsCisgICAgICAgICAgICAnbW9kX3B5d2Vic29ja2V0JywgJ3N0YW5kYWxvbmUucHknKQorICAg
ICAgICBzdGFydF9jbWQgPSBbCisgICAgICAgICAgICBweXRob25faW50ZXJwLCBweXdlYnNvY2tl
dF9zY3JpcHQsCisgICAgICAgICAgICAnLXAnLCBzdHIoc2VsZi5fcG9ydCksCisgICAgICAgICAg
ICAnLWQnLCBzZWxmLl9sYXlvdXRfdGVzdHMsCisgICAgICAgICAgICAnLXMnLCBzZWxmLl93ZWJf
c29ja2V0X3Rlc3RzLAorICAgICAgICAgICAgJy1sJywgZXJyb3JfbG9nLAorICAgICAgICBdCisK
KyAgICAgICAgaGFuZGxlcl9tYXBfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl93ZWJfc29ja2V0
X3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYW5kbGVy
X21hcC50eHQnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhoYW5kbGVyX21hcF9maWxlKToK
KyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVXNpbmcgaGFuZGxlcl9tYXBfZmlsZTogJXMnICUg
aGFuZGxlcl9tYXBfZmlsZSkKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoJy1tJykKKyAg
ICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoaGFuZGxlcl9tYXBfZmlsZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnTm8gaGFuZGxlcl9tYXBfZmlsZSBmb3Vu
ZCcpCisKKyAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5l
eHRlbmQoWyctdCcsICctaycsIHNlbGYuX3ByaXZhdGVfa2V5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJy1jJywgc2VsZi5fY2VydGlmaWNhdGVdKQorCisgICAgICAgICMgUHV0IHRo
ZSBjeWd3aW4gZGlyZWN0b3J5IGZpcnN0IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwK
KyAgICAgICAgZW52ID0gb3MuZW52aXJvbgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdj
eWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgK
KyAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScs
ICdjeWd3aW4nLCAnYmluJyksCisgICAgICAgICAgICAgICAgZW52WydQQVRIJ10pCisKKyAgICAg
ICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoK
KyAgICAgICAgICAgIHNldHVwX21vdW50ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhp
cmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykK
KyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQorCisgICAg
ICAgIGVudlsnUFlUSE9OUEFUSCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhz
ZXAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywg
JycpKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciBvbiAlZC4n
ICUgKAorICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQorICAgICAg
ICBsb2dnaW5nLmRlYnVnKCdjbWRsaW5lOiAlcycgJSAnICcuam9pbihzdGFydF9jbWQpKQorICAg
ICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIHN0ZG91dD1z
ZWxmLl93c291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbnY9ZW52KQorCisgICAgICAgICMgV2FpdCBhIGJpdCBiZWZvcmUgY2hlY2tpbmcg
dGhlIGxpdmVuZXNzIG9mIHRoZSBzZXJ2ZXIuCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorCisg
ICAgICAgIGlmIHNlbGYuX3VzZV90bHM6CisgICAgICAgICAgICB1cmwgPSAnaHR0cHMnCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAnaHR0cCcKKyAgICAgICAgdXJsID0gdXJsICsg
JzovLzEyNy4wLjAuMTolZC8nICUgc2VsZi5fcG9ydAorICAgICAgICBpZiBub3QgdXJsX2lzX2Fs
aXZlKHVybCk6CisgICAgICAgICAgICBmcCA9IG9wZW4ob3V0cHV0X2xvZykKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICAg
ICAgbG9nZ2luZy5lcnJvcihsaW5lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
ICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQo
CisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4n
ICUKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkK
KworICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQorICAgICAgICBpZiBz
ZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFB5V2Vi
U29ja2V0Tm90U3RhcnRlZCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHN0YXJ0ICVzIHNl
cnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCisgICAgICAgIGlmIHNlbGYuX3BpZGZpbGU6Cisg
ICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRmaWxlLCAndycpCisgICAgICAgICAgICBmLndy
aXRlKCIlZCIgJSBzZWxmLl9wcm9jZXNzLnBpZCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisg
ICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgZm9yY2UgYW5k
IG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlm
IHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAg
ICAgICBlbGlmIHNlbGYuX3BpZGZpbGU6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRm
aWxlKQorICAgICAgICAgICAgcGlkID0gaW50KGYucmVhZCgpLnN0cmlwKCkpCisgICAgICAgICAg
ICBmLmNsb3NlKCkKKworICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgcmFpc2UgUHlX
ZWJTb2NrZXROb3RGb3VuZCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2Vy
dmVyIHBpZC4nICUgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zygn
U2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkK
KyAgICAgICAgcGxhdGZvcm1fdXRpbHMua2lsbF9wcm9jZXNzKHBpZCkKKworICAgICAgICBpZiBz
ZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkKKyAgICAgICAg
ICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAg
ICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93c291dCA9IE5v
bmUKKworCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgICMgUHJvdmlkZSBzb21lIGNv
bW1hbmQgbGluZSBwYXJhbXMgZm9yIHN0YXJ0aW5nIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIKKyAg
ICAjIG1hbnVhbGx5LgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIo
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1zZXJ2ZXInLCB0eXBlPSdjaG9pY2Un
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnc3RhcnQnLCAnc3RvcCdd
LCBkZWZhdWx0PSdzdGFydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nl
cnZlciBhY3Rpb24gKHN0YXJ0fHN0b3ApJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24o
Jy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PU5vbmUsIGhlbHA9J1BvcnQgdG8gbGlzdGVuIG9uJykKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcm9vdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J0Fic29sdXRlIHBhdGggdG8gRG9jdW1lbnRSb290ICcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cyknKQorICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ndXNlIFRMUyAod3Nz
Oi8vKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctaycsICctLXByaXZhdGVfa2V5
JywgZGVzdD0ncHJpdmF0ZV9rZXknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PScnLCBoZWxwPSdUTFMgcHJpdmF0ZSBrZXkgZmlsZS4nKQorICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbignLWMnLCAnLS1jZXJ0aWZpY2F0ZScsIGRlc3Q9J2NlcnRpZmljYXRlJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmlj
YXRlIGZpbGUuJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJfY3ln
d2luJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdD0icmVnaXN0ZXJfY3lnd2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhzIChvbiBXaW4gdHJ5IGJvdHMpJykKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oJy0tcGlkZmlsZScsIGhlbHA9J3BhdGggdG8gcGlkIGZpbGUuJykK
KyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlm
IG5vdCBvcHRpb25zLnBvcnQ6CisgICAgICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAg
ICAgIG9wdGlvbnMucG9ydCA9IF9ERUZBVUxUX1dTU19QT1JUCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBvcHRpb25zLnBvcnQgPSBfREVGQVVMVF9XU19QT1JUCisKKyAgICBrd2RzID0geydw
b3J0Jzogb3B0aW9ucy5wb3J0LCAndXNlX3Rscyc6IG9wdGlvbnMudXNlX3Rsc30KKyAgICBpZiBv
cHRpb25zLnJvb3Q6CisgICAgICAgIGt3ZHNbJ3Jvb3QnXSA9IG9wdGlvbnMucm9vdAorICAgIGlm
IG9wdGlvbnMucHJpdmF0ZV9rZXk6CisgICAgICAgIGt3ZHNbJ3ByaXZhdGVfa2V5J10gPSBvcHRp
b25zLnByaXZhdGVfa2V5CisgICAgaWYgb3B0aW9ucy5jZXJ0aWZpY2F0ZToKKyAgICAgICAga3dk
c1snY2VydGlmaWNhdGUnXSA9IG9wdGlvbnMuY2VydGlmaWNhdGUKKyAgICBrd2RzWydyZWdpc3Rl
cl9jeWd3aW4nXSA9IG9wdGlvbnMucmVnaXN0ZXJfY3lnd2luCisgICAgaWYgb3B0aW9ucy5waWRm
aWxlOgorICAgICAgICBrd2RzWydwaWRmaWxlJ10gPSBvcHRpb25zLnBpZGZpbGUKKworICAgIHB5
d2Vic29ja2V0ID0gUHlXZWJTb2NrZXQodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAqKmt3ZHMpCisK
KyAgICBpZiAnc3RhcnQnID09IG9wdGlvbnMuc2VydmVyOgorICAgICAgICBweXdlYnNvY2tldC5z
dGFydCgpCisgICAgZWxzZToKKyAgICAgICAgcHl3ZWJzb2NrZXQuc3RvcChmb3JjZT1UcnVlKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmVi
YXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGEzMmFkCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGlu
ZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAgLTAsMCArMSwxMDI4IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJSZWJhc2VsaW5pbmcgdG9vbCB0aGF0
IGF1dG9tYXRpY2FsbHkgcHJvZHVjZXMgYmFzZWxpbmVzIGZvciBhbGwgcGxhdGZvcm1zLgorCitU
aGUgc2NyaXB0IGRvZXMgdGhlIGZvbGxvd2luZyBmb3IgZWFjaCBwbGF0Zm9ybSBzcGVjaWZpZWQ6
CisgIDEuIENvbXBpbGUgYSBsaXN0IG9mIHRlc3RzIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuCisg
IDIuIERvd25sb2FkIHRlc3QgcmVzdWx0IGFyY2hpdmUgZnJvbSBidWlsZGJvdCBmb3IgdGhlIHBs
YXRmb3JtLgorICAzLiBFeHRyYWN0IGJhc2VsaW5lcyBmcm9tIHRoZSBhcmNoaXZlIGZpbGUgZm9y
IGFsbCBpZGVudGlmaWVkIGZpbGVzLgorICA0LiBBZGQgbmV3IGJhc2VsaW5lcyB0byBTVk4gcmVw
b3NpdG9yeS4KKyAgNS4gRm9yIGVhY2ggdGVzdCB0aGF0IGhhcyBiZWVuIHJlYmFzZWxpbmVkLCBy
ZW1vdmUgdGhpcyBwbGF0Zm9ybSBvcHRpb24gZnJvbQorICAgICB0aGUgdGVzdCBpbiB0ZXN0X2V4
cGVjdGF0aW9uLnR4dC4gSWYgbm8gb3RoZXIgcGxhdGZvcm1zIHJlbWFpbiBhZnRlcgorICAgICBy
ZW1vdmFsLCBkZWxldGUgdGhlIHJlYmFzZWxpbmVkIHRlc3QgZnJvbSB0aGUgZmlsZS4KKworQXQg
dGhlIGVuZCwgdGhlIHNjcmlwdCBnZW5lcmF0ZXMgYSBodG1sIHRoYXQgY29tcGFyZXMgb2xkIGFu
ZCBuZXcgYmFzZWxpbmVzLgorIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2Vzcwor
aW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxpYgor
aW1wb3J0IHdlYmJyb3dzZXIKK2ltcG9ydCB6aXBmaWxlCisKK2Zyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0
YXRpb25zCitmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKK2Zyb20gdGVzdF90eXBl
cyBpbXBvcnQgdGV4dF9kaWZmCisKKyMgUmVwb3NpdG9yeSB0eXBlIGNvbnN0YW50cy4KK1JFUE9f
U1ZOLCBSRVBPX1VOS05PV04gPSByYW5nZSgyKQorCitCQVNFTElORV9TVUZGSVhFUyA9IFsnLnR4
dCcsICcucG5nJywgJy5jaGVja3N1bSddCitSRUJBU0VMSU5FX1BMQVRGT1JNX09SREVSID0gWydt
YWMnLCAnd2luJywgJ3dpbi14cCcsICd3aW4tdmlzdGEnLCAnbGludXgnXQorQVJDSElWRV9ESVJf
TkFNRV9ESUNUID0geyd3aW4nOiAnd2Via2l0LXJlbCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3dpbi12aXN0YSc6ICd3ZWJraXQtZGJnLXZpc3RhJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAnd2luLXhwJzogJ3dlYmtpdC1yZWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdt
YWMnOiAnd2Via2l0LXJlbC1tYWM1JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbGludXgn
OiAnd2Via2l0LXJlbC1saW51eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbi1jYW5h
cnknOiAnd2Via2l0LXJlbC13ZWJraXQtb3JnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAn
d2luLXZpc3RhLWNhbmFyeSc6ICd3ZWJraXQtZGJnLXZpc3RhJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAnd2luLXhwLWNhbmFyeSc6ICd3ZWJraXQtcmVsLXdlYmtpdC1vcmcnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICdtYWMtY2FuYXJ5JzogJ3dlYmtpdC1yZWwtbWFjLXdlYmtpdC1v
cmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdsaW51eC1jYW5hcnknOiAnd2Via2l0LXJl
bC1saW51eC13ZWJraXQtb3JnJ30KKworCitkZWYgcnVuX3NoZWxsX3dpdGhfcmV0dXJuX2NvZGUo
Y29tbWFuZCwgcHJpbnRfb3V0cHV0PUZhbHNlKToKKyAgICAiIiJFeGVjdXRlcyBhIGNvbW1hbmQg
YW5kIHJldHVybnMgdGhlIG91dHB1dCBhbmQgcHJvY2VzcyByZXR1cm4gY29kZS4KKworICAgIEFy
Z3M6CisgICAgICBjb21tYW5kOiBwcm9ncmFtIGFuZCBhcmd1bWVudHMuCisgICAgICBwcmludF9v
dXRwdXQ6IGlmIHRydWUsIHByaW50IHRoZSBjb21tYW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0
cHV0LgorCisgICAgUmV0dXJuczoKKyAgICAgIGNvbW1hbmQgb3V0cHV0LCByZXR1cm4gY29kZQor
ICAgICIiIgorCisgICAgIyBVc2UgYSBzaGVsbCBmb3Igc3ViY29tbWFuZHMgb24gV2luZG93cyB0
byBnZXQgYSBQQVRIIHNlYXJjaC4KKyAgICB1c2Vfc2hlbGwgPSBzeXMucGxhdGZvcm0uc3RhcnRz
d2l0aCgnd2luJykKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLCBzdGRvdXQ9c3Vi
cHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNz
LlNURE9VVCwgc2hlbGw9dXNlX3NoZWxsKQorICAgIGlmIHByaW50X291dHB1dDoKKyAgICAgICAg
b3V0cHV0X2FycmF5ID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUg
PSBwLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcHJpbnRfb3V0cHV0OgorICAgICAgICAgICAg
ICAgIHByaW50IGxpbmUuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgIG91dHB1dF9hcnJheS5hcHBl
bmQobGluZSkKKyAgICAgICAgb3V0cHV0ID0gJycuam9pbihvdXRwdXRfYXJyYXkpCisgICAgZWxz
ZToKKyAgICAgICAgb3V0cHV0ID0gcC5zdGRvdXQucmVhZCgpCisgICAgcC53YWl0KCkKKyAgICBw
LnN0ZG91dC5jbG9zZSgpCisKKyAgICByZXR1cm4gb3V0cHV0LCBwLnJldHVybmNvZGUKKworCitk
ZWYgcnVuX3NoZWxsKGNvbW1hbmQsIHByaW50X291dHB1dD1GYWxzZSk6CisgICAgIiIiRXhlY3V0
ZXMgYSBjb21tYW5kIGFuZCByZXR1cm5zIHRoZSBvdXRwdXQuCisKKyAgICBBcmdzOgorICAgICAg
Y29tbWFuZDogcHJvZ3JhbSBhbmQgYXJndW1lbnRzLgorICAgICAgcHJpbnRfb3V0cHV0OiBpZiB0
cnVlLCBwcmludCB0aGUgY29tbWFuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dC4KKworICAg
IFJldHVybnM6CisgICAgICBjb21tYW5kIG91dHB1dAorICAgICIiIgorCisgICAgb3V0cHV0LCBy
ZXR1cm5fY29kZSA9IHJ1bl9zaGVsbF93aXRoX3JldHVybl9jb2RlKGNvbW1hbmQsIHByaW50X291
dHB1dCkKKyAgICByZXR1cm4gb3V0cHV0CisKKworZGVmIGxvZ19kYXNoZWRfc3RyaW5nKHRleHQs
IHBsYXRmb3JtLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuSU5GTyk6CisgICAgIiIiTG9nIHRleHQg
bWVzc2FnZSB3aXRoIGRhc2hlcyBvbiBib3RoIHNpZGVzLiIiIgorCisgICAgbXNnID0gdGV4dAor
ICAgIGlmIHBsYXRmb3JtOgorICAgICAgICBtc2cgKz0gJzogJyArIHBsYXRmb3JtCisgICAgaWYg
bGVuKG1zZykgPCA3ODoKKyAgICAgICAgZGFzaGVzID0gJy0nICogKCg3OCAtIGxlbihtc2cpKSAv
IDIpCisgICAgICAgIG1zZyA9ICclcyAlcyAlcycgJSAoZGFzaGVzLCBtc2csIGRhc2hlcykKKwor
ICAgIGlmIGxvZ2dpbmdfbGV2ZWwgPT0gbG9nZ2luZy5FUlJPUjoKKyAgICAgICAgbG9nZ2luZy5l
cnJvcihtc2cpCisgICAgZWxpZiBsb2dnaW5nX2xldmVsID09IGxvZ2dpbmcuV0FSTklORzoKKyAg
ICAgICAgbG9nZ2luZy53YXJuKG1zZykKKyAgICBlbHNlOgorICAgICAgICBsb2dnaW5nLmluZm8o
bXNnKQorCisKK2RlZiBzZXR1cF9odG1sX2RpcmVjdG9yeShodG1sX2RpcmVjdG9yeSk6CisgICAg
IiIiU2V0dXAgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSBodG1sIHJlc3VsdHMuCisKKyAgICAgICBB
bGwgaHRtbCByZWxhdGVkIGZpbGVzIGFyZSBzdG9yZWQgaW4gdGhlICJyZWJhc2VsaW5lX2h0bWwi
IHN1YmRpcmVjdG9yeS4KKworICAgIEFyZ3M6CisgICAgICBodG1sX2RpcmVjdG9yeTogcGFyZW50
IGRpcmVjdG9yeSB0aGF0IHN0b3JlcyB0aGUgcmViYXNlbGluaW5nIHJlc3VsdHMuCisgICAgICAg
ICAgICAgICAgICAgICAgSWYgTm9uZSwgYSB0ZW1wIGRpcmVjdG9yeSBpcyBjcmVhdGVkLgorCisg
ICAgUmV0dXJuczoKKyAgICAgIHRoZSBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgdGhlIGh0bWwgcmVs
YXRlZCByZWJhc2VsaW5pbmcgcmVzdWx0cy4KKyAgICAiIiIKKworICAgIGlmIG5vdCBodG1sX2Rp
cmVjdG9yeToKKyAgICAgICAgaHRtbF9kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAg
ICBlbGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhodG1sX2RpcmVjdG9yeSk6CisgICAgICAgIG9zLm1r
ZGlyKGh0bWxfZGlyZWN0b3J5KQorCisgICAgaHRtbF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4o
aHRtbF9kaXJlY3RvcnksICdyZWJhc2VsaW5lX2h0bWwnKQorICAgIGxvZ2dpbmcuaW5mbygnSHRt
bCBkaXJlY3Rvcnk6ICIlcyInLCBodG1sX2RpcmVjdG9yeSkKKworICAgIGlmIG9zLnBhdGguZXhp
c3RzKGh0bWxfZGlyZWN0b3J5KToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShodG1sX2RpcmVjdG9y
eSwgVHJ1ZSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdEZWxldGVkIGZpbGUgYXQgaHRtbCBkaXJl
Y3Rvcnk6ICIlcyInLCBodG1sX2RpcmVjdG9yeSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0
cyhodG1sX2RpcmVjdG9yeSk6CisgICAgICAgIG9zLm1rZGlyKGh0bWxfZGlyZWN0b3J5KQorICAg
IHJldHVybiBodG1sX2RpcmVjdG9yeQorCisKK2RlZiBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgo
aHRtbF9kaXJlY3RvcnksIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUpOgorICAgICIiIkdldCBmdWxsIHBhdGggb2Yg
dGhlIGJhc2VsaW5lIHJlc3VsdCBmaWxlLgorCisgICAgQXJnczoKKyAgICAgIGh0bWxfZGlyZWN0
b3J5OiBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgdGhlIGh0bWwgcmVsYXRlZCBmaWxlcy4KKyAgICAg
IGJhc2VsaW5lX2ZpbGVuYW1lOiBuYW1lIG9mIHRoZSBiYXNlbGluZSBmaWxlLgorICAgICAgcGxh
dGZvcm06IHdpbiwgbGludXggb3IgbWFjCisgICAgICByZXN1bHRfdHlwZTogdHlwZSBvZiB0aGUg
YmFzZWxpbmUgcmVzdWx0OiAnLnR4dCcsICcucG5nJy4KKworICAgIFJldHVybnM6CisgICAgICBG
dWxsIHBhdGggb2YgdGhlIGJhc2VsaW5lIGZpbGUgZm9yIHJlYmFzZWxpbmluZyByZXN1bHQgY29t
cGFyaXNvbi4KKyAgICAiIiIKKworICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoYmFz
ZWxpbmVfZmlsZW5hbWUpCisgICAgcmVzdWx0X2ZpbGVuYW1lID0gJyVzLSVzLSVzJXMnICUgKGJh
c2UsIHBsYXRmb3JtLCByZXN1bHRfdHlwZSwgZXh0KQorICAgIGZ1bGxwYXRoID0gb3MucGF0aC5q
b2luKGh0bWxfZGlyZWN0b3J5LCByZXN1bHRfZmlsZW5hbWUpCisgICAgbG9nZ2luZy5kZWJ1Zygn
ICBSZXN1bHQgZmlsZSBmdWxsIHBhdGg6ICIlcyIuJywgZnVsbHBhdGgpCisgICAgcmV0dXJuIGZ1
bGxwYXRoCisKKworY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyB0byBw
cm9kdWNlIG5ldyBiYXNlbGluZXMgZm9yIGEgZ2l2ZW4gcGxhdGZvcm0uIiIiCisKKyAgICBSRVZJ
U0lPTl9SRUdFWCA9IHInPGEgaHJlZj1cIihcZCspL1wiPicKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwbGF0Zm9ybSwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX2ZpbGVfZGlyID0gcGF0aF91
dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ3Rvb2xzJywKKyAgICAgICAgICAgICdsYXlv
dXRfdGVzdHMnKQorICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNl
bGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9
IFtdCisgICAgICAgIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzID0gW10KKworICAgICAgICAjIENy
ZWF0ZSB0ZXN0cyBhbmQgZXhwZWN0YXRpb25zIGhlbHBlciB3aGljaCBpcyB1c2VkIHRvOgorICAg
ICAgICAjICAgLS4gY29tcGlsZSBsaXN0IG9mIHRlc3RzIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcu
CisgICAgICAgICMgICAtLiB1cGRhdGUgdGhlIHRlc3RzIGluIHRlc3RfZXhwZWN0YXRpb25zIGZp
bGUgYWZ0ZXIgcmViYXNlbGluZQorICAgICAgICAjICAgICAgaXMgZG9uZS4KKyAgICAgICAgc2Vs
Zi5fdGVzdF9leHBlY3RhdGlvbnMgPSBcCisgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5U
ZXN0RXhwZWN0YXRpb25zKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZhbHNlKQorCisgICAgICAgIHNlbGYuX3JlcG9fdHlwZSA9IHNl
bGYuX2dldF9yZXBvX3R5cGUoKQorCisgICAgZGVmIHJ1bihzZWxmLCBiYWNrdXApOgorICAgICAg
ICAiIiJSdW4gcmViYXNlbGluZSBwcm9jZXNzLiIiIgorCisgICAgICAgIGxvZ19kYXNoZWRfc3Ry
aW5nKCdDb21waWxpbmcgcmViYXNlbGluaW5nIHRlc3RzJywgc2VsZi5fcGxhdGZvcm0pCisgICAg
ICAgIGlmIG5vdCBzZWxmLl9jb21waWxlX3JlYmFzZWxpbmluZ190ZXN0cygpOgorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnRG93bmxvYWRpbmcg
YXJjaGl2ZScsIHNlbGYuX3BsYXRmb3JtKQorICAgICAgICBhcmNoaXZlX2ZpbGUgPSBzZWxmLl9k
b3dubG9hZF9idWlsZGJvdF9hcmNoaXZlKCkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcnKQorICAg
ICAgICBpZiBub3QgYXJjaGl2ZV9maWxlOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignTm8g
YXJjaGl2ZSBmb3VuZC4nKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9n
X2Rhc2hlZF9zdHJpbmcoJ0V4dHJhY3RpbmcgYW5kIGFkZGluZyBuZXcgYmFzZWxpbmVzJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0pCisgICAgICAgIGlmIG5vdCBz
ZWxmLl9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lcyhhcmNoaXZlX2ZpbGUpOgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1VwZGF0aW5n
IHJlYmFzZWxpbmVkIHRlc3RzIGluIGZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5fdXBkYXRlX3JlYmFzZWxpbmVkX3Rlc3RzX2lu
X2ZpbGUoYmFja3VwKQorICAgICAgICBsb2dnaW5nLmluZm8oJycpCisKKyAgICAgICAgaWYgbGVu
KHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykgIT0gbGVuKHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3Rz
KToKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnTk9UIEFMTCBURVNUUyBUSEFUIE5FRUQg
UkVCQVNFTElOSU5HIEhBVkUgQkVFTiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JF
QkFTRUxJTkVELicpCisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJyAgVG90YWwgdGVzdHMg
bmVlZGluZyByZWJhc2VsaW5pbmc6ICVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZW4oc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzKSkKKyAgICAgICAgICAgIGxvZ2dpbmcud2Fybmlu
ZygnICBUb3RhbCB0ZXN0cyByZWJhc2VsaW5lZDogJWQnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbihzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cykpCisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0FsbCB0ZXN0cyBuZWVkaW5nIHJlYmFz
ZWxpbmluZyB3ZXJlIHN1Y2Nlc3NmdWxseSAnCisgICAgICAgICAgICAgICAgICAgICAgICAncmVi
YXNlbGluZWQuJykKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGdldF9yZWJhc2Vs
aW5pbmdfdGVzdHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWJhc2VsaW5pbmdfdGVz
dHMKKworICAgIGRlZiBfZ2V0X3JlcG9fdHlwZShzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBy
ZXBvc2l0b3J5IHR5cGUgdGhhdCBjbGllbnQgaXMgdXNpbmcuIiIiCisgICAgICAgIG91dHB1dCwg
cmV0dXJuX2NvZGUgPSBydW5fc2hlbGxfd2l0aF9yZXR1cm5fY29kZShbJ3N2bicsICdpbmZvJ10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGYWxzZSkKKyAgICAgICAgaWYgcmV0dXJuX2NvZGUgPT0gMDoKKyAgICAgICAgICAgIHJldHVy
biBSRVBPX1NWTgorCisgICAgICAgIHJldHVybiBSRVBPX1VOS05PV04KKworICAgIGRlZiBfY29t
cGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoc2VsZik6CisgICAgICAgICIiIkNvbXBpbGUgbGlzdCBv
ZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nIGZvciB0aGUgcGxhdGZvcm0uCisKKyAgICAg
ICAgUmV0dXJuczoKKyAgICAgICAgICBMaXN0IG9mIHRlc3RzIHRoYXQgbmVlZCByZWJhc2VsaW5p
bmcgb3IKKyAgICAgICAgICBOb25lIGlmIHRoZXJlIGlzIG5vIHN1Y2ggdGVzdC4KKyAgICAgICAg
IiIiCisKKyAgICAgICAgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzID0gXAorICAgICAgICAgICAg
c2VsZi5fdGVzdF9leHBlY3RhdGlvbnMuZ2V0X3JlYmFzZWxpbmluZ19mYWlsdXJlcygpCisgICAg
ICAgIGlmIG5vdCBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6CisgICAgICAgICAgICBsb2dnaW5n
Lndhcm4oJ05vIHRlc3RzIGZvdW5kIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuJykKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdUb3RhbCBudW1iZXIgb2Yg
dGVzdHMgbmVlZGluZyByZWJhc2VsaW5pbmcgJworICAgICAgICAgICAgICAgICAgICAgJ2ZvciAi
JXMiOiAiJWQiJywgc2VsZi5fcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICBsZW4oc2Vs
Zi5fcmViYXNlbGluaW5nX3Rlc3RzKSkKKworICAgICAgICB0ZXN0X25vID0gMQorICAgICAgICBm
b3IgdGVzdCBpbiBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6CisgICAgICAgICAgICBsb2dnaW5n
LmluZm8oJyAgJWQ6ICVzJywgdGVzdF9ubywgdGVzdCkKKyAgICAgICAgICAgIHRlc3Rfbm8gKz0g
MQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMKKworICAgIGRlZiBf
Z2V0X2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1cmwpOgorICAgICAgICAiIiJHZXQgdGhlIGxhdGVz
dCBsYXlvdXQgdGVzdCByZXZpc2lvbiBudW1iZXIgZnJvbSBidWlsZGJvdC4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHVybDogVXJsIHRvIHJldHJpZXZlIGxheW91dCB0ZXN0IHJldmlzaW9u
IG51bWJlcnMuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBsYXRlc3QgcmV2aXNpb24g
b3IKKyAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCisgICAgICAgICIiIgorCisgICAgICAgIGxv
Z2dpbmcuZGVidWcoJ1VybCB0byByZXRyaWV2ZSByZXZpc2lvbjogIiVzIicsIHVybCkKKworICAg
ICAgICBmID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkK
KyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgcmV2aXNpb25zID0gcmUuZmluZGFsbChzZWxm
LlJFVklTSU9OX1JFR0VYLCBjb250ZW50KQorICAgICAgICBpZiBub3QgcmV2aXNpb25zOgorICAg
ICAgICAgICAgbG9nZ2luZy5lcnJvcignRmFpbGVkIHRvIGZpbmQgcmV2aXNpb24sIGNvbnRlbnQ6
ICIlcyInLCBjb250ZW50KQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXZp
c2lvbnMuc29ydChrZXk9aW50KQorICAgICAgICBsb2dnaW5nLmluZm8oJ0xhdGVzdCByZXZpc2lv
bjogIiVzIicsIHJldmlzaW9uc1tsZW4ocmV2aXNpb25zKSAtIDFdKQorICAgICAgICByZXR1cm4g
cmV2aXNpb25zW2xlbihyZXZpc2lvbnMpIC0gMV0KKworICAgIGRlZiBfZ2V0X2FyY2hpdmVfZGly
X25hbWUoc2VsZiwgcGxhdGZvcm0sIHdlYmtpdF9jYW5hcnkpOgorICAgICAgICAiIiJHZXQgbmFt
ZSBvZiB0aGUgbGF5b3V0IHRlc3QgYXJjaGl2ZSBkaXJlY3RvcnkuCisKKyAgICAgICAgUmV0dXJu
czoKKyAgICAgICAgICBEaXJlY3RvcnkgbmFtZSBvcgorICAgICAgICAgIE5vbmUgb24gZmFpbHVy
ZQorICAgICAgICAiIiIKKworICAgICAgICBpZiB3ZWJraXRfY2FuYXJ5OgorICAgICAgICAgICAg
cGxhdGZvcm0gKz0gJy1jYW5hcnknCisKKyAgICAgICAgaWYgcGxhdGZvcm0gaW4gQVJDSElWRV9E
SVJfTkFNRV9ESUNUOgorICAgICAgICAgICAgcmV0dXJuIEFSQ0hJVkVfRElSX05BTUVfRElDVFtw
bGF0Zm9ybV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0Nhbm5v
dCBmaW5kIHBsYXRmb3JtIGtleSAlcyBpbiBhcmNoaXZlICcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2RpcmVjdG9yeSBuYW1lIGRpY3Rpb25hcnknLCBwbGF0Zm9ybSkKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisKKyAgICBkZWYgX2dldF9hcmNoaXZlX3VybChzZWxmKToKKyAgICAgICAg
IiIiR2VuZXJhdGUgdGhlIHVybCB0byBkb3dubG9hZCBsYXRlc3QgbGF5b3V0IHRlc3QgYXJjaGl2
ZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIFVybCB0byBkb3dubG9hZCBhcmNoaXZl
IG9yCisgICAgICAgICAgTm9uZSBvbiBmYWlsdXJlCisgICAgICAgICIiIgorCisgICAgICAgIGRp
cl9uYW1lID0gc2VsZi5fZ2V0X2FyY2hpdmVfZGlyX25hbWUoc2VsZi5fcGxhdGZvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy53
ZWJraXRfY2FuYXJ5KQorICAgICAgICBpZiBub3QgZGlyX25hbWU6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ0J1aWxkYm90IHBsYXRmb3JtIGRpciBu
YW1lOiAiJXMiJywgZGlyX25hbWUpCisKKyAgICAgICAgdXJsX2Jhc2UgPSAnJXMvJXMvJyAlIChz
ZWxmLl9vcHRpb25zLmFyY2hpdmVfdXJsLCBkaXJfbmFtZSkKKyAgICAgICAgbGF0ZXN0X3Jldmlz
aW9uID0gc2VsZi5fZ2V0X2xhdGVzdF9yZXZpc2lvbih1cmxfYmFzZSkKKyAgICAgICAgaWYgbGF0
ZXN0X3JldmlzaW9uIGlzIE5vbmUgb3IgbGF0ZXN0X3JldmlzaW9uIDw9IDA6CisgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgIGFyY2hpdmVfdXJsID0gKCclcyVzL2xheW91dC10ZXN0
LXJlc3VsdHMuemlwJyAlICh1cmxfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdF9yZXZpc2lvbikpCisgICAgICAgIGxv
Z2dpbmcuaW5mbygnQXJjaGl2ZSB1cmw6ICIlcyInLCBhcmNoaXZlX3VybCkKKyAgICAgICAgcmV0
dXJuIGFyY2hpdmVfdXJsCisKKyAgICBkZWYgX2Rvd25sb2FkX2J1aWxkYm90X2FyY2hpdmUoc2Vs
Zik6CisgICAgICAgICIiIkRvd25sb2FkIGxheW91dCB0ZXN0IGFyY2hpdmUgZmlsZSBmcm9tIGJ1
aWxkYm90LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgVHJ1ZSBpZiBkb3dubG9hZCBz
dWNjZWVkZWQgb3IKKyAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgICIiIgorCisg
ICAgICAgIHVybCA9IHNlbGYuX2dldF9hcmNoaXZlX3VybCgpCisgICAgICAgIGlmIHVybCBpcyBO
b25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBmbiA9IHVybGxpYi51cmxy
ZXRyaWV2ZSh1cmwpWzBdCisgICAgICAgIGxvZ2dpbmcuaW5mbygnQXJjaGl2ZSBkb3dubG9hZGVk
IGFuZCBzYXZlZCB0byBmaWxlOiAiJXMiJywgZm4pCisgICAgICAgIHJldHVybiBmbgorCisgICAg
ZGVmIF9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lcyhzZWxmLCBhcmNoaXZlX2ZpbGUpOgor
ICAgICAgICAiIiJFeHRyYWN0IG5ldyBiYXNlbGluZXMgZnJvbSBhcmNoaXZlIGFuZCBhZGQgdGhl
bSB0byBTVk4gcmVwb3NpdG9yeS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGFyY2hpdmVf
ZmlsZTogZnVsbCBwYXRoIHRvIHRoZSBhcmNoaXZlIGZpbGUuCisKKyAgICAgICAgUmV0dXJuczoK
KyAgICAgICAgICBMaXN0IG9mIHRlc3RzIHRoYXQgaGF2ZSBiZWVuIHJlYmFzZWxpbmVkIG9yCisg
ICAgICAgICAgTm9uZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIKKworICAgICAgICB6aXBfZmls
ZSA9IHppcGZpbGUuWmlwRmlsZShhcmNoaXZlX2ZpbGUsICdyJykKKyAgICAgICAgemlwX25hbWVs
aXN0ID0gemlwX2ZpbGUubmFtZWxpc3QoKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ3ppcCBm
aWxlIG5hbWVsaXN0OicpCisgICAgICAgIGZvciBuYW1lIGluIHppcF9uYW1lbGlzdDoKKyAgICAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoJyAgJyArIG5hbWUpCisKKyAgICAgICAgcGxhdGZvcm0gPSBw
YXRoX3V0aWxzLnBsYXRmb3JtX25hbWUoc2VsZi5fcGxhdGZvcm0pCisgICAgICAgIGxvZ2dpbmcu
ZGVidWcoJ1BsYXRmb3JtIGRpcjogIiVzIicsIHBsYXRmb3JtKQorCisgICAgICAgIHRlc3Rfbm8g
PSAxCisgICAgICAgIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzID0gW10KKyAgICAgICAgZm9yIHRl
c3QgaW4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZv
KCdUZXN0ICVkOiAlcycsIHRlc3Rfbm8sIHRlc3QpCisKKyAgICAgICAgICAgIGZvdW5kID0gRmFs
c2UKKyAgICAgICAgICAgIHN2bl9lcnJvciA9IEZhbHNlCisgICAgICAgICAgICB0ZXN0X2Jhc2Vu
YW1lID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0KVswXQorICAgICAgICAgICAgZm9yIHN1ZmZpeCBp
biBCQVNFTElORV9TVUZGSVhFUzoKKyAgICAgICAgICAgICAgICBhcmNoaXZlX3Rlc3RfbmFtZSA9
ICgnbGF5b3V0LXRlc3QtcmVzdWx0cy8lcy1hY3R1YWwlcycgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh0ZXN0X2Jhc2VuYW1lLCBzdWZmaXgpKQorICAgICAgICAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoJyAgQXJjaGl2ZSB0ZXN0IGZpbGUgbmFtZTogIiVzIicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlX3Rlc3RfbmFtZSkKKyAgICAgICAgICAg
ICAgICBpZiBub3QgYXJjaGl2ZV90ZXN0X25hbWUgaW4gemlwX25hbWVsaXN0OgorICAgICAgICAg
ICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgJXMgZmlsZSBub3QgaW4gYXJjaGl2ZS4nLCBzdWZm
aXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3Vu
ZCA9IFRydWUKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgJXMgZmlsZSBmb3VuZCBp
biBhcmNoaXZlLicsIHN1ZmZpeCkKKworICAgICAgICAgICAgICAgICMgRXh0cmFjdCBuZXcgYmFz
ZWxpbmUgZnJvbSBhcmNoaXZlIGFuZCBzYXZlIGl0IHRvIGEgdGVtcCBmaWxlLgorICAgICAgICAg
ICAgICAgIGRhdGEgPSB6aXBfZmlsZS5yZWFkKGFyY2hpdmVfdGVzdF9uYW1lKQorICAgICAgICAg
ICAgICAgIHRlbXBfZmQsIHRlbXBfbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoc3VmZml4KQorICAg
ICAgICAgICAgICAgIGYgPSBvcy5mZG9wZW4odGVtcF9mZCwgJ3diJykKKyAgICAgICAgICAgICAg
ICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZF9maWxlbmFtZSA9ICclcy1leHBlY3RlZCVzJyAlICh0ZXN0X2Jhc2VuYW1l
LCBzdWZmaXgpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZnVsbHBhdGggPSBvcy5wYXRoLmpv
aW4oCisgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMuY2hyb21pdW1fYmFzZWxpbmVfcGF0
aChwbGF0Zm9ybSksCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lKQorICAg
ICAgICAgICAgICAgIGV4cGVjdGVkX2Z1bGxwYXRoID0gb3MucGF0aC5ub3JtcGF0aChleHBlY3Rl
ZF9mdWxscGF0aCkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcgIEV4cGVjdGVkIGZp
bGUgZnVsbCBwYXRoOiAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkX2Z1bGxwYXRoKQorCisgICAgICAgICAgICAgICAgIyBUT0RPKHZpY3RvcncpOiBmb3Igbm93
LCB0aGUgcmViYXNlbGluaW5nIHRvb2wgY2hlY2tzIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAj
IG9yIG5vdCBUSElTIGJhc2VsaW5lIGlzIGR1cGxpY2F0ZSBhbmQgc2hvdWxkIGJlIHNraXBwZWQu
CisgICAgICAgICAgICAgICAgIyBXZSBjb3VsZCBpbXByb3ZlIHRoZSB0b29sIHRvIGNoZWNrIGFs
bCBiYXNlbGluZXMgaW4gdXBwZXIKKyAgICAgICAgICAgICAgICAjIGFuZCBsb3dlcgorICAgICAg
ICAgICAgICAgICMgbGV2ZWxzIGFuZCByZW1vdmUgYWxsIGR1cGxpY2F0ZWQgYmFzZWxpbmVzLgor
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lzX2R1cF9iYXNlbGluZSh0ZW1wX25hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9mdWxscGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSk6CisgICAgICAgICAgICAgICAgICAgIG9z
LnJlbW92ZSh0ZW1wX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlbGV0ZV9iYXNl
bGluZShleHBlY3RlZF9mdWxscGF0aCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKwor
ICAgICAgICAgICAgICAgICMgQ3JlYXRlIHRoZSBuZXcgYmFzZWxpbmUgZGlyZWN0b3J5IGlmIGl0
IGRvZXNuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICAgICMgZXhpc3QuCisgICAgICAgICAgICAg
ICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAg
b3MucGF0aC5kaXJuYW1lKGV4cGVjdGVkX2Z1bGxwYXRoKSkKKworICAgICAgICAgICAgICAgIHNo
dXRpbC5tb3ZlKHRlbXBfbmFtZSwgZXhwZWN0ZWRfZnVsbHBhdGgpCisKKyAgICAgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fc3ZuX2FkZChleHBlY3RlZF9mdWxscGF0aCk6CisgICAgICAgICAgICAg
ICAgICAgIHN2bl9lcnJvciA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIHN1ZmZpeCAhPSAn
LmNoZWNrc3VtJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2h0bWxfYmFzZWxp
bmVfZmlsZXMoZXhwZWN0ZWRfZnVsbHBhdGgpCisKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oJyAgTm8gbmV3IGJhc2VsaW5lcyBmb3VuZCBp
biBhcmNoaXZlLicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHN2bl9l
cnJvcjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuKCcgIEZhaWxlZCB0byBhZGQg
YmFzZWxpbmVzIHRvIFNWTi4nKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgIGxvZ2dpbmcuaW5mbygnICBSZWJhc2VsaW5lIHN1Y2NlZWRlZC4nKQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cy5hcHBlbmQodGVzdCkKKworICAgICAg
ICAgICAgdGVzdF9ubyArPSAxCisKKyAgICAgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgICAgICBv
cy5yZW1vdmUoYXJjaGl2ZV9maWxlKQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWJhc2VsaW5l
ZF90ZXN0cworCisgICAgZGVmIF9pc19kdXBfYmFzZWxpbmUoc2VsZiwgbmV3X2Jhc2VsaW5lLCBi
YXNlbGluZV9wYXRoLCB0ZXN0LCBzdWZmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGxh
dGZvcm0pOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIGEgYmFzZWxpbmUgaXMgZHVwbGljYXRl
IGFuZCBjYW4gZmFsbGJhY2sgdG8gc2FtZQorICAgICAgICAgICBiYXNlbGluZSBmb3IgYW5vdGhl
ciBwbGF0Zm9ybS4gRm9yIGV4YW1wbGUsIGlmIGEgdGVzdCBoYXMgc2FtZQorICAgICAgICAgICBi
YXNlbGluZSBvbiBsaW51eCBhbmQgd2luZG93cywgdGhlbiB3ZSBvbmx5IHN0b3JlIHdpbmRvd3MK
KyAgICAgICAgICAgYmFzZWxpbmUgYW5kIGxpbnV4IGJhc2VsaW5lIHdpbGwgZmFsbGJhY2sgdG8g
dGhlIHdpbmRvd3MgdmVyc2lvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGV4cGVjdGVk
X2ZpbGVuYW1lOiBiYXNlbGluZSBleHBlY3RhdGlvbiBmaWxlIG5hbWUuCisgICAgICAgICAgdGVz
dDogdGVzdCBuYW1lLgorICAgICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVj
dGVkIHJlc3VsdHMsIGluY2x1ZGluZyBkb3Q7CisgICAgICAgICAgICAgICAgICBlLmcuICcudHh0
JyBvciAnLnBuZycuCisgICAgICAgICAgcGxhdGZvcm06IGJhc2VsaW5lIHBsYXRmb3JtICdtYWMn
LCAnd2luJyBvciAnbGludXgnLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgVHJ1ZSBp
ZiB0aGUgYmFzZWxpbmUgaXMgdW5uZWNlc3NhcnkuCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNl
LgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihwYXRo
X3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSwgdGVzdCkKKyAgICAgICAgYWxsX2Jhc2VsaW5lcyA9
IHBhdGhfdXRpbHMuZXhwZWN0ZWRfYmFzZWxpbmVzKHRlc3RfZmlsZXBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXgsIHBsYXRm
b3JtLCBUcnVlKQorICAgICAgICBmb3IgKGZhbGxiYWNrX2RpciwgZmFsbGJhY2tfZmlsZSkgaW4g
YWxsX2Jhc2VsaW5lczoKKyAgICAgICAgICAgIGlmIGZhbGxiYWNrX2RpciBhbmQgZmFsbGJhY2tf
ZmlsZToKKyAgICAgICAgICAgICAgICBmYWxsYmFja19mdWxscGF0aCA9IG9zLnBhdGgubm9ybXBh
dGgoCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihmYWxsYmFja19kaXIsIGZhbGxi
YWNrX2ZpbGUpKQorICAgICAgICAgICAgICAgIGlmIGZhbGxiYWNrX2Z1bGxwYXRoLmxvd2VyKCkg
IT0gYmFzZWxpbmVfcGF0aC5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5fZGlmZl9iYXNlbGluZXMobmV3X2Jhc2VsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tfZnVsbHBhdGgpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEZvdW5kIHNhbWUgYmFzZWxpbmUgYXQgJXMnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrX2Z1bGxwYXRoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgZGVmIF9kaWZmX2Jhc2VsaW5lcyhzZWxmLCBmaWxlMSwgZmlsZTIp
OgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHR3byBiYXNlbGluZXMgYXJlIGRpZmZlcmVudC4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGUxLCBmaWxlMjogZnVsbCBwYXRocyBvZiB0
aGUgYmFzZWxpbmVzIHRvIGNvbXBhcmUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBU
cnVlIGlmIHR3byBmaWxlcyBhcmUgZGlmZmVyZW50IG9yIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lv
bnMuCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKworICAgICAgICBl
eHQxID0gb3MucGF0aC5zcGxpdGV4dChmaWxlMSlbMV0udXBwZXIoKQorICAgICAgICBleHQyID0g
b3MucGF0aC5zcGxpdGV4dChmaWxlMilbMV0udXBwZXIoKQorICAgICAgICBpZiBleHQxICE9IGV4
dDI6CisgICAgICAgICAgICBsb2dnaW5nLndhcm4oJ0ZpbGVzIHRvIGNvbXBhcmUgaGF2ZSBkaWZm
ZXJlbnQgZXh0LiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpbGUxOiAlczsgRmlsZTI6
ICVzJywgZmlsZTEsIGZpbGUyKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBp
ZiBleHQxID09ICcuUE5HJzoKKyAgICAgICAgICAgIHJldHVybiBpbWFnZV9kaWZmLkltYWdlRGlm
ZihzZWxmLl9wbGF0Zm9ybSwgJycpLmRpZmZfZmlsZXMoZmlsZTEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bGUyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHRleHRfZGlmZi5UZXN0VGV4
dERpZmYoc2VsZi5fcGxhdGZvcm0sICcnKS5kaWZmX2ZpbGVzKGZpbGUxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbGUyKQorCisgICAgZGVmIF9kZWxldGVfYmFzZWxpbmUoc2VsZiwgZmlsZW5hbWUpOgor
ICAgICAgICAiIiJSZW1vdmUgdGhlIGZpbGUgZnJvbSByZXBvc2l0b3J5IGFuZCBkZWxldGUgaXQg
ZnJvbSBkaXNrLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWU6IGZ1bGwgcGF0
aCBvZiB0aGUgZmlsZSB0byBkZWxldGUuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBm
aWxlbmFtZSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgaWYgc2VsZi5fcmVwb190eXBlID09IFJFUE9fU1ZOOgorICAgICAgICAg
ICAgcGFyZW50X2RpciwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQorICAgICAg
ICAgICAgb3JpZ2luYWxfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIG9zLmNoZGlyKHBh
cmVudF9kaXIpCisgICAgICAgICAgICBydW5fc2hlbGwoWydzdm4nLCAnZGVsZXRlJywgJy0tZm9y
Y2UnLCBiYXNlbmFtZV0sIEZhbHNlKQorICAgICAgICAgICAgb3MuY2hkaXIob3JpZ2luYWxfZGly
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQorCisgICAg
ZGVmIF91cGRhdGVfcmViYXNlbGluZWRfdGVzdHNfaW5fZmlsZShzZWxmLCBiYWNrdXApOgorICAg
ICAgICAiIiJVcGRhdGUgdGhlIHJlYmFzZWxpbmVkIHRlc3RzIGluIHRlc3QgZXhwZWN0YXRpb25z
IGZpbGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBiYWNrdXA6IGlmIFRydWUsIGJhY2t1
cCB0aGUgb3JpZ2luYWwgdGVzdCBleHBlY3RhdGlvbnMgZmlsZS4KKworICAgICAgICBSZXR1cm5z
OgorICAgICAgICAgIG5vCisgICAgICAgICIiIgorCisgICAgICAgIGlmIHNlbGYuX3JlYmFzZWxp
bmVkX3Rlc3RzOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9leHBlY3RhdGlvbnMucmVtb3ZlX3Bs
YXRmb3JtX2Zyb21fZmlsZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0
cywgc2VsZi5fcGxhdGZvcm0sIGJhY2t1cCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxv
Z2dpbmcuaW5mbygnTm8gdGVzdCB3YXMgcmViYXNlbGluZWQgc28gbm90aGluZyB0byByZW1vdmUu
JykKKworICAgIGRlZiBfc3ZuX2FkZChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIkFkZCB0
aGUgZmlsZSB0byBTVk4gcmVwb3NpdG9yeS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZp
bGVuYW1lOiBmdWxsIHBhdGggb2YgdGhlIGZpbGUgdG8gYWRkLgorCisgICAgICAgIFJldHVybnM6
CisgICAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiBTVk4gb3IgaXMg
c3VjZXNzZnVsbHkgYWRkZWQKKyAgICAgICAgICAgICAgIHRvIFNWTi4KKyAgICAgICAgICBGYWxz
ZSBvdGhlcndpc2UuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHBhcmVudF9kaXIsIGJhc2VuYW1lID0g
b3MucGF0aC5zcGxpdChmaWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fcmVwb190eXBlICE9IFJF
UE9fU1ZOIG9yIHBhcmVudF9kaXIgPT0gZmlsZW5hbWU6CisgICAgICAgICAgICBsb2dnaW5nLmlu
Zm8oIk5vIHN2biBjaGVja291dCBmb3VuZCwgc2tpcCBzdm4gYWRkLiIpCisgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgIG9yaWdpbmFsX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAg
IG9zLmNoZGlyKHBhcmVudF9kaXIpCisgICAgICAgIHN0YXR1c19vdXRwdXQgPSBydW5fc2hlbGwo
Wydzdm4nLCAnc3RhdHVzJywgYmFzZW5hbWVdLCBGYWxzZSkKKyAgICAgICAgb3MuY2hkaXIob3Jp
Z2luYWxfZGlyKQorICAgICAgICBvdXRwdXQgPSBzdGF0dXNfb3V0cHV0LnVwcGVyKCkKKyAgICAg
ICAgaWYgb3V0cHV0LnN0YXJ0c3dpdGgoJ0EnKSBvciBvdXRwdXQuc3RhcnRzd2l0aCgnTScpOgor
ICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEZpbGUgYWxyZWFkeSBhZGRlZCB0byBTVk46ICIl
cyInLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgb3V0
cHV0LmZpbmQoJ0lTIE5PVCBBIFdPUktJTkcgQ09QWScpID49IDA6CisgICAgICAgICAgICBsb2dn
aW5nLmluZm8oJyAgRmlsZSBpcyBub3QgYSB3b3JraW5nIGNvcHksIGFkZCBpdHMgcGFyZW50OiAi
JXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfZGlyKQorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX3N2bl9hZGQocGFyZW50X2RpcikKKworICAgICAgICBvcy5jaGRpcihwYXJl
bnRfZGlyKQorICAgICAgICBhZGRfb3V0cHV0ID0gcnVuX3NoZWxsKFsnc3ZuJywgJ2FkZCcsIGJh
c2VuYW1lXSwgVHJ1ZSkKKyAgICAgICAgb3MuY2hkaXIob3JpZ2luYWxfZGlyKQorICAgICAgICBv
dXRwdXQgPSBhZGRfb3V0cHV0LnVwcGVyKCkucnN0cmlwKCkKKyAgICAgICAgaWYgb3V0cHV0LnN0
YXJ0c3dpdGgoJ0EnKSBhbmQgb3V0cHV0LmZpbmQoYmFzZW5hbWUudXBwZXIoKSkgPj0gMDoKKyAg
ICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBBZGRlZCBuZXcgZmlsZTogIiVzIicsIGZpbGVuYW1l
KQorICAgICAgICAgICAgc2VsZi5fc3ZuX3Byb3Bfc2V0KGZpbGVuYW1lKQorICAgICAgICAgICAg
cmV0dXJuIFRydWUKKworICAgICAgICBpZiAobm90IHN0YXR1c19vdXRwdXQpIGFuZCAoYWRkX291
dHB1dC51cHBlcigpLmZpbmQoCisgICAgICAgICAgICAnQUxSRUFEWSBVTkRFUiBWRVJTSU9OIENP
TlRST0wnKSA+PSAwKToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBGaWxlIGFscmVhZHkg
dW5kZXIgU1ZOIGFuZCBoYXMgbm8gY2hhbmdlOiAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgbG9nZ2lu
Zy53YXJuKCcgIEZhaWxlZCB0byBhZGQgZmlsZSB0byBTVk46ICIlcyInLCBmaWxlbmFtZSkKKyAg
ICAgICAgbG9nZ2luZy53YXJuKCcgIFN2biBzdGF0dXMgb3V0cHV0OiAiJXMiJywgc3RhdHVzX291
dHB1dCkKKyAgICAgICAgbG9nZ2luZy53YXJuKCcgIFN2biBhZGQgb3V0cHV0OiAiJXMiJywgYWRk
X291dHB1dCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3N2bl9wcm9wX3NldChz
ZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlNldCB0aGUgYmFzZWxpbmUgcHJvcGVydHkKKwor
ICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiBmdWxsIHBhdGggb2YgdGhlIGZpbGUg
dG8gYWRkLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBh
bHJlYWR5IGV4aXN0cyBpbiBTVk4gb3IgaXMgc3VjZXNzZnVsbHkgYWRkZWQKKyAgICAgICAgICAg
ICAgIHRvIFNWTi4KKyAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgICIiIgorICAg
ICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXS51cHBlcigpCisgICAgICAg
IGlmIGV4dCAhPSAnLlRYVCcgYW5kIGV4dCAhPSAnLlBORycgYW5kIGV4dCAhPSAnLkNIRUNLU1VN
JzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHBhcmVudF9kaXIsIGJhc2VuYW1lID0g
b3MucGF0aC5zcGxpdChmaWxlbmFtZSkKKyAgICAgICAgb3JpZ2luYWxfZGlyID0gb3MuZ2V0Y3dk
KCkKKyAgICAgICAgb3MuY2hkaXIocGFyZW50X2RpcikKKyAgICAgICAgaWYgZXh0ID09ICcuUE5H
JzoKKyAgICAgICAgICAgIGNtZCA9IFsnc3ZuJywgJ3BzZXQnLCAnc3ZuOm1pbWUtdHlwZScsICdp
bWFnZS9wbmcnLCBiYXNlbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9IFsn
c3ZuJywgJ3BzZXQnLCAnc3ZuOmVvbC1zdHlsZScsICdMRicsIGJhc2VuYW1lXQorCisgICAgICAg
IGxvZ2dpbmcuZGVidWcoJyAgU2V0IHN2biBwcm9wOiAlcycsICcgJy5qb2luKGNtZCkpCisgICAg
ICAgIHJ1bl9zaGVsbChjbWQsIEZhbHNlKQorICAgICAgICBvcy5jaGRpcihvcmlnaW5hbF9kaXIp
CisKKyAgICBkZWYgX2NyZWF0ZV9odG1sX2Jhc2VsaW5lX2ZpbGVzKHNlbGYsIGJhc2VsaW5lX2Z1
bGxwYXRoKToKKyAgICAgICAgIiIiQ3JlYXRlIGJhc2VsaW5lIGZpbGVzIChvbGQsIG5ldyBhbmQg
ZGlmZikgaW4gaHRtbCBkaXJlY3RvcnkuCisKKyAgICAgICAgICAgVGhlIGZpbGVzIGFyZSB1c2Vk
IHRvIGNvbXBhcmUgdGhlIHJlYmFzZWxpbmluZyByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgYmFzZWxpbmVfZnVsbHBhdGg6IGZ1bGwgcGF0aCBvZiB0aGUgZXhwZWN0ZWQgYmFz
ZWxpbmUgZmlsZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IGJhc2VsaW5lX2Z1bGxw
YXRoIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyhiYXNlbGluZV9mdWxscGF0aCk6CisgICAgICAgICAg
ICByZXR1cm4KKworICAgICAgICAjIENvcHkgdGhlIG5ldyBiYXNlbGluZSB0byBodG1sIGRpcmVj
dG9yeSBmb3IgcmVzdWx0IGNvbXBhcmlzb24uCisgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0g
b3MucGF0aC5iYXNlbmFtZShiYXNlbGluZV9mdWxscGF0aCkKKyAgICAgICAgbmV3X2ZpbGUgPSBn
ZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5h
bWUsIHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnbmV3JykKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGJhc2VsaW5lX2Z1bGxwYXRo
LCBuZXdfZmlsZSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEh0bWw6IGNvcGllZCBuZXcgYmFz
ZWxpbmUgZmlsZSBmcm9tICIlcyIgdG8gIiVzIi4nLAorICAgICAgICAgICAgICAgICAgICAgYmFz
ZWxpbmVfZnVsbHBhdGgsIG5ld19maWxlKQorCisgICAgICAgICMgR2V0IHRoZSBvbGQgYmFzZWxp
bmUgZnJvbSBTVk4gYW5kIHNhdmUgdG8gdGhlIGh0bWwgZGlyZWN0b3J5LgorICAgICAgICBvdXRw
dXQgPSBydW5fc2hlbGwoWydzdm4nLCAnY2F0JywgJy1yJywgJ0JBU0UnLCBiYXNlbGluZV9mdWxs
cGF0aF0pCisgICAgICAgIGlmIChub3Qgb3V0cHV0KSBvciAob3V0cHV0LnVwcGVyKCkucnN0cmlw
KCkuZW5kc3dpdGgoCisgICAgICAgICAgICAnTk8gU1VDSCBGSUxFIE9SIERJUkVDVE9SWScpKToK
KyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBObyBiYXNlIGZpbGU6ICIlcyInLCBiYXNlbGlu
ZV9mdWxscGF0aCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiYXNlX2ZpbGUgPSBnZXRf
cmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1l
LCBzZWxmLl9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdvbGQnKQorICAgICAgICBmID0gb3BlbihiYXNlX2ZpbGUsICd3YicpCisgICAgICAg
IGYud3JpdGUob3V0cHV0KQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgbG9nZ2luZy5pbmZv
KCcgIEh0bWw6IGNyZWF0ZWQgb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyIuJywKKyAgICAgICAgICAg
ICAgICAgICAgIGJhc2VfZmlsZSkKKworICAgICAgICAjIEdldCB0aGUgZGlmZiBiZXR3ZWVuIG9s
ZCBhbmQgbmV3IGJhc2VsaW5lcyBhbmQgc2F2ZSB0byB0aGUgaHRtbCBkaXIuCisgICAgICAgIGlm
IGJhc2VsaW5lX2ZpbGVuYW1lLnVwcGVyKCkuZW5kc3dpdGgoJy5UWFQnKToKKyAgICAgICAgICAg
ICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY3VzdG9tIGRpZmYgY29tbWFuZCBpbiB0aGVpciBz
dm4gY29uZmlnCisgICAgICAgICAgICAjIGZpbGUsIHRoZW4gaXQnbGwgYmUgdXNlZCB3aGVuIHdl
IGRvIHN2biBkaWZmLCB3aGljaCB3ZSBkb24ndCB3YW50CisgICAgICAgICAgICAjIHRvIGhhcHBl
biBzaW5jZSB3ZSB3YW50IHRoZSB1bmlmaWVkIGRpZmYuICBVc2luZyAtLWRpZmYtY21kPWRpZmYK
KyAgICAgICAgICAgICMgZG9lc24ndCBhbHdheXMgd29yaywgc2luY2UgdGhleSBjYW4gaGF2ZSBh
bm90aGVyIGRpZmYgZXhlY3V0YWJsZQorICAgICAgICAgICAgIyBpbiB0aGVpciBwYXRoIHRoYXQg
Z2l2ZXMgZGlmZmVyZW50IGxpbmUgZW5kaW5ncy4gIFNvIHdlIHVzZSBhCisgICAgICAgICAgICAj
IGJvZ3VzIHRlbXAgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgZGlyZWN0b3J5LCB3aGljaCBnZXRz
CisgICAgICAgICAgICAjIGFyb3VuZCB0aGVzZSBwcm9ibGVtcy4KKyAgICAgICAgICAgIGlmIHN5
cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKKyAgICAgICAgICAgICAgICBwYXJlbnRfZGly
ID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHBhcmVudF9kaXIgPSBzeXMucGF0aFswXSAgIyB0ZW1wZGlyIGlzIG5vdCBzZWN1cmUuCisg
ICAgICAgICAgICBib2d1c19kaXIgPSBvcy5wYXRoLmpvaW4ocGFyZW50X2RpciwgInRlbXBfc3Zu
X2NvbmZpZyIpCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcgIEh0bWw6IHRlbXAgY29uZmln
IGRpcjogIiVzIi4nLCBib2d1c19kaXIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlz
dHMoYm9ndXNfZGlyKToKKyAgICAgICAgICAgICAgICBvcy5ta2Rpcihib2d1c19kaXIpCisgICAg
ICAgICAgICAgICAgZGVsZXRlX2JvZ3VzX2RpciA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgZGVsZXRlX2JvZ3VzX2RpciA9IEZhbHNlCisKKyAgICAgICAgICAgIG91
dHB1dCA9IHJ1bl9zaGVsbChbInN2biIsICJkaWZmIiwgIi0tY29uZmlnLWRpciIsIGJvZ3VzX2Rp
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9mdWxscGF0aF0pCisg
ICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgZGlmZl9maWxlID0gZ2V0X3Jl
c3VsdF9maWxlX2Z1bGxwYXRoKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmh0
bWxfZGlyZWN0b3J5LCBiYXNlbGluZV9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcGxhdGZvcm0sICdkaWZmJykKKyAgICAgICAgICAgICAgICBmID0gb3BlbihkaWZmX2ZpbGUs
ICd3YicpCisgICAgICAgICAgICAgICAgZi53cml0ZShvdXRwdXQpCisgICAgICAgICAgICAgICAg
Zi5jbG9zZSgpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEh0bWw6IGNyZWF0ZWQg
YmFzZWxpbmUgZGlmZiBmaWxlOiAiJXMiLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpZmZfZmlsZSkKKworICAgICAgICAgICAgaWYgZGVsZXRlX2JvZ3VzX2RpcjoKKyAgICAgICAg
ICAgICAgICBzaHV0aWwucm10cmVlKGJvZ3VzX2RpciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBs
b2dnaW5nLmRlYnVnKCcgIEh0bWw6IHJlbW92ZWQgdGVtcCBjb25maWcgZGlyOiAiJXMiLicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2d1c19kaXIpCisKKworY2xhc3MgSHRtbEdl
bmVyYXRvcihvYmplY3QpOgorICAgICIiIkNsYXNzIHRvIGdlbmVyYXRlIHJlYmFzZWxpbmluZyBy
ZXN1bHQgY29tcGFyaXNvbiBodG1sLiIiIgorCisgICAgSFRNTF9SRUJBU0VMSU5FID0gKCc8aHRt
bD4nCisgICAgICAgICAgICAgICAgICAgICAgICc8aGVhZD4nCisgICAgICAgICAgICAgICAgICAg
ICAgICc8c3R5bGU+JworICAgICAgICAgICAgICAgICAgICAgICAnYm9keSB7Zm9udC1mYW1pbHk6
IHNhbnMtc2VyaWY7fScKKyAgICAgICAgICAgICAgICAgICAgICAgJy5tYWluVGFibGUge2JhY2tn
cm91bmQ6ICM2NjY2NjY7fScKKyAgICAgICAgICAgICAgICAgICAgICAgJy5tYWluVGFibGUgdGQg
LCAubWFpblRhYmxlIHRoIHtiYWNrZ3JvdW5kOiB3aGl0ZTt9JworICAgICAgICAgICAgICAgICAg
ICAgICAnLmRldGFpbCB7bWFyZ2luLWxlZnQ6IDEwcHg7IG1hcmdpbi10b3A6IDNweDt9JworICAg
ICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4nCisgICAgICAgICAgICAgICAgICAgICAgICc8
dGl0bGU+UmViYXNlbGluaW5nIFJlc3VsdCBDb21wYXJpc29uICglKHRpbWUpcyknCisgICAgICAg
ICAgICAgICAgICAgICAgICc8L3RpdGxlPicKKyAgICAgICAgICAgICAgICAgICAgICAgJzwvaGVh
ZD4nCisgICAgICAgICAgICAgICAgICAgICAgICc8Ym9keT4nCisgICAgICAgICAgICAgICAgICAg
ICAgICc8aDI+UmViYXNlbGluaW5nIFJlc3VsdCBDb21wYXJpc29uICglKHRpbWUpcyk8L2gyPicK
KyAgICAgICAgICAgICAgICAgICAgICAgJyUoYm9keSlzJworICAgICAgICAgICAgICAgICAgICAg
ICAnPC9ib2R5PicKKyAgICAgICAgICAgICAgICAgICAgICAgJzwvaHRtbD4nKQorICAgIEhUTUxf
Tk9fUkVCQVNFTElOSU5HX1RFU1RTID0gKAorICAgICAgICAnPHA+Tm8gdGVzdHMgZm91bmQgdGhh
dCBuZWVkIHJlYmFzZWxpbmluZy48L3A+JykKKyAgICBIVE1MX1RBQkxFX1RFU1QgPSAoJzx0YWJs
ZSBjbGFzcz0ibWFpblRhYmxlIiBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTU+JworICAgICAg
ICAgICAgICAgICAgICAgICAnJXM8L3RhYmxlPjxicj4nKQorICAgIEhUTUxfVFJfVEVTVCA9ICgn
PHRyPicKKyAgICAgICAgICAgICAgICAgICAgJzx0aCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjog
I0NERUNERTsgYm9yZGVyLWJvdHRvbTogJworICAgICAgICAgICAgICAgICAgICAnMXB4IHNvbGlk
IGJsYWNrOyBmb250LXNpemU6IDE4cHQ7IGZvbnQtd2VpZ2h0OiBib2xkIiAnCisgICAgICAgICAg
ICAgICAgICAgICdjb2xzcGFuPSI1Ij4nCisgICAgICAgICAgICAgICAgICAgICc8YSBocmVmPSIl
cyI+JXM8L2E+JworICAgICAgICAgICAgICAgICAgICAnPC90aD4nCisgICAgICAgICAgICAgICAg
ICAgICc8L3RyPicpCisgICAgSFRNTF9URVNUX0RFVEFJTCA9ICgnPGRpdiBjbGFzcz0iZGV0YWls
Ij4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPHRyPicKKyAgICAgICAgICAgICAgICAgICAg
ICAgICc8dGggd2lkdGg9IjEwMCI+QmFzZWxpbmU8L3RoPicKKyAgICAgICAgICAgICAgICAgICAg
ICAgICc8dGggd2lkdGg9IjEwMCI+UGxhdGZvcm08L3RoPicKKyAgICAgICAgICAgICAgICAgICAg
ICAgICc8dGggd2lkdGg9IjIwMCI+T2xkPC90aD4nCisgICAgICAgICAgICAgICAgICAgICAgICAn
PHRoIHdpZHRoPSIyMDAiPk5ldzwvdGg+JworICAgICAgICAgICAgICAgICAgICAgICAgJzx0aCB3
aWR0aD0iMTUwIj5EaWZmZXJlbmNlPC90aD4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPC90
cj4nCisgICAgICAgICAgICAgICAgICAgICAgICAnJXMnCisgICAgICAgICAgICAgICAgICAgICAg
ICAnPC9kaXY+JykKKyAgICBIVE1MX1REX05PTElOSyA9ICc8dGQgYWxpZ249Y2VudGVyPjxhPiVz
PC9hPjwvdGQ+JworICAgIEhUTUxfVERfTElOSyA9ICc8dGQgYWxpZ249Y2VudGVyPjxhIGhyZWY9
IiUodXJpKXMiPiUobmFtZSlzPC9hPjwvdGQ+JworICAgIEhUTUxfVERfTElOS19JTUcgPSAoJzx0
ZD48YSBocmVmPSIlKHVyaSlzIj4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPGltZyBzdHls
ZT0id2lkdGg6IDIwMCIgc3JjPSIlKHVyaSlzIiAvPjwvYT48L3RkPicpCisgICAgSFRNTF9UUiA9
ICc8dHI+JXM8L3RyPicKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBwbGF0Zm9y
bXMsIHJlYmFzZWxpbmluZ190ZXN0cyk6CisgICAgICAgIHNlbGYuX2h0bWxfZGlyZWN0b3J5ID0g
b3B0aW9ucy5odG1sX2RpcmVjdG9yeQorICAgICAgICBzZWxmLl9wbGF0Zm9ybXMgPSBwbGF0Zm9y
bXMKKyAgICAgICAgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzID0gcmViYXNlbGluaW5nX3Rlc3Rz
CisgICAgICAgIHNlbGYuX2h0bWxfZmlsZSA9IG9zLnBhdGguam9pbihvcHRpb25zLmh0bWxfZGly
ZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxp
bmUuaHRtbCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfaHRtbChzZWxmKToKKyAgICAgICAgIiIiR2Vu
ZXJhdGUgaHRtbCBmaWxlIGZvciByZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24uIiIiCisK
KyAgICAgICAgbG9nZ2luZy5pbmZvKCdHZW5lcmF0aW5nIGh0bWwgZmlsZScpCisKKyAgICAgICAg
aHRtbF9ib2R5ID0gJycKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoK
KyAgICAgICAgICAgIGh0bWxfYm9keSArPSBzZWxmLkhUTUxfTk9fUkVCQVNFTElOSU5HX1RFU1RT
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0cyA9IGxpc3Qoc2VsZi5fcmViYXNlbGlu
aW5nX3Rlc3RzKQorICAgICAgICAgICAgdGVzdHMuc29ydCgpCisKKyAgICAgICAgICAgIHRlc3Rf
bm8gPSAxCisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBs
b2dnaW5nLmluZm8oJ1Rlc3QgJWQ6ICVzJywgdGVzdF9ubywgdGVzdCkKKyAgICAgICAgICAgICAg
ICBodG1sX2JvZHkgKz0gc2VsZi5fZ2VuZXJhdGVfaHRtbF9mb3Jfb25lX3Rlc3QodGVzdCkKKwor
ICAgICAgICBodG1sID0gc2VsZi5IVE1MX1JFQkFTRUxJTkUgJSAoeyd0aW1lJzogdGltZS5hc2N0
aW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvZHknOiBo
dG1sX2JvZHl9KQorICAgICAgICBsb2dnaW5nLmRlYnVnKGh0bWwpCisKKyAgICAgICAgZiA9IG9w
ZW4oc2VsZi5faHRtbF9maWxlLCAndycpCisgICAgICAgIGYud3JpdGUoaHRtbCkKKyAgICAgICAg
Zi5jbG9zZSgpCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdCYXNlbGluZSBjb21wYXJpc29uIGh0
bWwgZ2VuZXJhdGVkIGF0ICIlcyInLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5faHRtbF9m
aWxlKQorCisgICAgZGVmIHNob3dfaHRtbChzZWxmKToKKyAgICAgICAgIiIiTGF1bmNoIHRoZSBy
ZWJhc2VsaW5pbmcgaHRtbCBpbiBicndvc2VyLiIiIgorCisgICAgICAgIGxvZ2dpbmcuaW5mbygn
TGF1bmNoaW5nIGh0bWw6ICIlcyInLCBzZWxmLl9odG1sX2ZpbGUpCisKKyAgICAgICAgaHRtbF91
cmkgPSBwYXRoX3V0aWxzLmZpbGVuYW1lX3RvX3VyaShzZWxmLl9odG1sX2ZpbGUpCisgICAgICAg
IHdlYmJyb3dzZXIub3BlbihodG1sX3VyaSwgMSkKKworICAgICAgICBsb2dnaW5nLmluZm8oJ0h0
bWwgbGF1bmNoZWQuJykKKworICAgIGRlZiBfZ2VuZXJhdGVfYmFzZWxpbmVfbGlua3Moc2VsZiwg
dGVzdF9iYXNlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybSk6CisgICAgICAgICIiIkdlbmVyYXRlIGxp
bmtzIGZvciBiYXNlbGluZSByZXN1bHRzIChvbGQsIG5ldyBhbmQgZGlmZikuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICB0ZXN0X2Jhc2VuYW1lOiBiYXNlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0
CisgICAgICAgICAgc3VmZml4OiBiYXNlbGluZSBmaWxlIHN1ZmZpeGVzOiAnLnR4dCcsICcucG5n
JworICAgICAgICAgIHBsYXRmb3JtOiB3aW4sIGxpbnV4IG9yIG1hYworCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgaHRtbCBsaW5rcyBmb3Igc2hvd2luZyBiYXNlbGluZSByZXN1bHRzIChv
bGQsIG5ldyBhbmQgZGlmZikKKyAgICAgICAgIiIiCisKKyAgICAgICAgYmFzZWxpbmVfZmlsZW5h
bWUgPSAnJXMtZXhwZWN0ZWQlcycgJSAodGVzdF9iYXNlbmFtZSwgc3VmZml4KQorICAgICAgICBs
b2dnaW5nLmRlYnVnKCcgICAgYmFzZWxpbmUgZmlsZW5hbWU6ICIlcyInLCBiYXNlbGluZV9maWxl
bmFtZSkKKworICAgICAgICBuZXdfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxm
Ll9odG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBsYXRmb3JtLCAnbmV3JykKKyAgICAgICAgbG9nZ2lu
Zy5pbmZvKCcgICAgTmV3IGJhc2VsaW5lIGZpbGU6ICIlcyInLCBuZXdfZmlsZSkKKyAgICAgICAg
aWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld19maWxlKToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5m
bygnICAgIE5vIG5ldyBiYXNlbGluZSBmaWxlOiAiJXMiJywgbmV3X2ZpbGUpCisgICAgICAgICAg
ICByZXR1cm4gJycKKworICAgICAgICBvbGRfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0
aChzZWxmLl9odG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBsYXRmb3JtLCAnb2xkJykKKyAgICAgICAg
bG9nZ2luZy5pbmZvKCcgICAgT2xkIGJhc2VsaW5lIGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKKyAg
ICAgICAgaWYgc3VmZml4ID09ICcucG5nJzoKKyAgICAgICAgICAgIGh0bWxfdGRfbGluayA9IHNl
bGYuSFRNTF9URF9MSU5LX0lNRworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaHRtbF90ZF9s
aW5rID0gc2VsZi5IVE1MX1REX0xJTksKKworICAgICAgICBsaW5rcyA9ICcnCisgICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKG9sZF9maWxlKToKKyAgICAgICAgICAgIGxpbmtzICs9IGh0bWxfdGRf
bGluayAlIHsKKyAgICAgICAgICAgICAgICAndXJpJzogcGF0aF91dGlscy5maWxlbmFtZV90b191
cmkob2xkX2ZpbGUpLAorICAgICAgICAgICAgICAgICduYW1lJzogYmFzZWxpbmVfZmlsZW5hbWV9
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgICBObyBvbGQgYmFz
ZWxpbmUgZmlsZTogIiVzIicsIG9sZF9maWxlKQorICAgICAgICAgICAgbGlua3MgKz0gc2VsZi5I
VE1MX1REX05PTElOSyAlICcnCisKKyAgICAgICAgbGlua3MgKz0gaHRtbF90ZF9saW5rICUgeyd1
cmknOiBwYXRoX3V0aWxzLmZpbGVuYW1lX3RvX3VyaShuZXdfZmlsZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGJhc2VsaW5lX2ZpbGVuYW1lfQorCisgICAgICAg
IGRpZmZfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9odG1sX2RpcmVjdG9y
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5l
X2ZpbGVuYW1lLCBwbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdkaWZmJykKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcgICAgQmFzZWxpbmUgZGlm
ZiBmaWxlOiAiJXMiJywgZGlmZl9maWxlKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkaWZm
X2ZpbGUpOgorICAgICAgICAgICAgbGlua3MgKz0gaHRtbF90ZF9saW5rICUgeyd1cmknOiBwYXRo
X3V0aWxzLmZpbGVuYW1lX3RvX3VyaSgKKyAgICAgICAgICAgICAgICBkaWZmX2ZpbGUpLCAnbmFt
ZSc6ICdEaWZmJ30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICAg
IE5vIGJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIicsIGRpZmZfZmlsZSkKKyAgICAgICAgICAgIGxp
bmtzICs9IHNlbGYuSFRNTF9URF9OT0xJTksgJSAnJworCisgICAgICAgIHJldHVybiBsaW5rcwor
CisgICAgZGVmIF9nZW5lcmF0ZV9odG1sX2Zvcl9vbmVfdGVzdChzZWxmLCB0ZXN0KToKKyAgICAg
ICAgIiIiR2VuZXJhdGUgaHRtbCBmb3Igb25lIHJlYmFzZWxpbmluZyB0ZXN0LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgdGVzdDogbGF5b3V0IHRlc3QgbmFtZQorCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgaHRtbCB0aGF0IGNvbXBhcmVzIGJhc2VsaW5lIHJlc3VsdHMgZm9yIHRo
ZSB0ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICB0ZXN0X2Jhc2VuYW1lID0gb3MucGF0aC5i
YXNlbmFtZShvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpWzBdKQorICAgICAgICBsb2dnaW5nLmluZm8o
JyAgYmFzZW5hbWU6ICIlcyInLCB0ZXN0X2Jhc2VuYW1lKQorICAgICAgICByb3dzID0gW10KKyAg
ICAgICAgZm9yIHN1ZmZpeCBpbiBCQVNFTElORV9TVUZGSVhFUzoKKyAgICAgICAgICAgIGlmIHN1
ZmZpeCA9PSAnLmNoZWNrc3VtJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAg
ICAgICBsb2dnaW5nLmluZm8oJyAgQ2hlY2tpbmcgJXMgZmlsZXMnLCBzdWZmaXgpCisgICAgICAg
ICAgICBmb3IgcGxhdGZvcm0gaW4gc2VsZi5fcGxhdGZvcm1zOgorICAgICAgICAgICAgICAgIGxp
bmtzID0gc2VsZi5fZ2VuZXJhdGVfYmFzZWxpbmVfbGlua3ModGVzdF9iYXNlbmFtZSwgc3VmZml4
LAorICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSkKKyAgICAgICAgICAgICAgICBpZiBsaW5r
czoKKyAgICAgICAgICAgICAgICAgICAgcm93ID0gc2VsZi5IVE1MX1REX05PTElOSyAlIHNlbGYu
X2dldF9iYXNlbGluZV9yZXN1bHRfdHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZp
eCkKKyAgICAgICAgICAgICAgICAgICAgcm93ICs9IHNlbGYuSFRNTF9URF9OT0xJTksgJSBwbGF0
Zm9ybQorICAgICAgICAgICAgICAgICAgICByb3cgKz0gbGlua3MKKyAgICAgICAgICAgICAgICAg
ICAgbG9nZ2luZy5kZWJ1ZygnICAgIGh0bWwgcm93OiAlcycsIHJvdykKKworICAgICAgICAgICAg
ICAgICAgICByb3dzLmFwcGVuZChzZWxmLkhUTUxfVFIgJSByb3cpCisKKyAgICAgICAgaWYgcm93
czoKKyAgICAgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoX3V0aWxzLmxheW91
dF90ZXN0c19kaXIoKSwgdGVzdCkKKyAgICAgICAgICAgIGh0bWwgPSBzZWxmLkhUTUxfVFJfVEVT
VCAlIChwYXRoX3V0aWxzLmZpbGVuYW1lX3RvX3VyaSh0ZXN0X3BhdGgpLAorICAgICAgICAgICAg
ICAgIHRlc3QpCisgICAgICAgICAgICBodG1sICs9IHNlbGYuSFRNTF9URVNUX0RFVEFJTCAlICcg
Jy5qb2luKHJvd3MpCisKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyAgICBodG1sIGZvciB0
ZXN0OiAlcycsIGh0bWwpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5IVE1MX1RBQkxFX1RFU1Qg
JSBodG1sCisKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgX2dldF9iYXNlbGluZV9yZXN1
bHRfdHlwZShzZWxmLCBzdWZmaXgpOgorICAgICAgICAiIiJOYW1lIG9mIHRoZSBiYXNlbGluZSBy
ZXN1bHQgdHlwZS4iIiIKKworICAgICAgICBpZiBzdWZmaXggPT0gJy5wbmcnOgorICAgICAgICAg
ICAgcmV0dXJuICdQaXhlbCcKKyAgICAgICAgZWxpZiBzdWZmaXggPT0gJy50eHQnOgorICAgICAg
ICAgICAgcmV0dXJuICdSZW5kZXIgVHJlZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJl
dHVybiAnT3RoZXInCisKKworZGVmIG1haW4oKToKKyAgICAiIiJNYWluIGZ1bmN0aW9uIHRvIHBy
b2R1Y2UgbmV3IGJhc2VsaW5lcy4iIiIKKworICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5P
cHRpb25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJi
b3NlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0naW5jbHVkZSBkZWJ1Zy1sZXZlbCBsb2dnaW5nLicpCisK
KyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGxhdGZvcm1zJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nbWFjLHdpbix3aW4teHAsd2luLXZpc3Rh
LGxpbnV4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ0NvbW1hIGRlbGlt
aXRlZCBsaXN0IG9mIHBsYXRmb3JtcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0aGF0IG5lZWQgcmViYXNlbGluaW5nLicpKQorCisgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCctdScsICctLWFyY2hpdmVfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD0oJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0X3Rlc3RfcmVzdWx0cycpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnVXJsIHRvIGZpbmQgdGhlIGxheW91
dCB0ZXN0IHJlc3VsdCBhcmNoaXZlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnIGZpbGUuJykpCisKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy13JywgJy0td2Vi
a2l0X2NhbmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVf
dHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdJZiBUcnVlLCBwdWxsIGJhc2VsaW5lcyBm
cm9tIHdlYmtpdC5vcmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fu
YXJ5IGJvdC4nKSkKKworICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWInLCAnLS1iYWNr
dXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSgnV2hldGhlciBvciBub3QgdG8gYmFja3VwIHRoZSBvcmln
aW5hbCB0ZXN0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGV4cGVjdGF0
aW9ucyBmaWxlIGFmdGVyIHJlYmFzZWxpbmUuJykpCisKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oJy1kJywgJy0taHRtbF9kaXJlY3RvcnknLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnVGhl
IGRpcmVjdG9yeSB0aGF0IHN0b3JlcyB0aGUgcmVzdWx0cyBmb3InCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcgcmViYXNlbGluaW5nIGNvbXBhcmlzb24uJykpCisKKyAgICBv
cHRpb25zID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKClbMF0KKworICAgICMgU2V0IHVwIG91
ciBsb2dnaW5nIGZvcm1hdC4KKyAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBv
cHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICBs
b2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcm1hdD0oJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubyktM2QgJworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2Upcycp
LAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJXklbSVkICVIOiVNOiVTJykKKwor
ICAgICMgVmVyaWZ5ICdwbGF0Zm9ybXMnIG9wdGlvbiBpcyB2YWxpZAorICAgIGlmIG5vdCBvcHRp
b25zLnBsYXRmb3JtczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcignSW52YWxpZCAicGxhdGZvcm1z
IiBvcHRpb24uIC0tcGxhdGZvcm1zIG11c3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICdz
cGVjaWZpZWQgaW4gb3JkZXIgdG8gcmViYXNlbGluZS4nKQorICAgICAgICBzeXMuZXhpdCgxKQor
ICAgIHBsYXRmb3JtcyA9IFtwLnN0cmlwKCkubG93ZXIoKSBmb3IgcCBpbiBvcHRpb25zLnBsYXRm
b3Jtcy5zcGxpdCgnLCcpXQorICAgIGZvciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6CisgICAgICAg
IGlmIG5vdCBwbGF0Zm9ybSBpbiBSRUJBU0VMSU5FX1BMQVRGT1JNX09SREVSOgorICAgICAgICAg
ICAgbG9nZ2luZy5lcnJvcignSW52YWxpZCBwbGF0Zm9ybTogIiVzIicgJSAocGxhdGZvcm0pKQor
ICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICMgQWRqdXN0IHRoZSBwbGF0Zm9ybSBvcmRl
ciBzbyByZWJhc2VsaW5lIHRvb2wgaXMgcnVubmluZyBhdCB0aGUgb3JkZXIgb2YKKyAgICAjICdt
YWMnLCAnd2luJyBhbmQgJ2xpbnV4Jy4gVGhpcyBpcyBpbiBzYW1lIG9yZGVyIHdpdGggbGF5b3V0
IHRlc3QgYmFzZWxpbmUKKyAgICAjIHNlYXJjaCBwYXRocy4gSXQgc2ltcGxpZmllcyBob3cgdGhl
IHJlYmFzZWxpbmUgdG9vbCBkZXRlY3RzIGR1cGxpY2F0ZQorICAgICMgYmFzZWxpbmVzLiBDaGVj
ayBfSXNEdXBCYXNlbGluZSBtZXRob2QgZm9yIGRldGFpbHMuCisgICAgcmViYXNlbGluZV9wbGF0
Zm9ybXMgPSBbXQorICAgIGZvciBwbGF0Zm9ybSBpbiBSRUJBU0VMSU5FX1BMQVRGT1JNX09SREVS
OgorICAgICAgICBpZiBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6CisgICAgICAgICAgICByZWJhc2Vs
aW5lX3BsYXRmb3Jtcy5hcHBlbmQocGxhdGZvcm0pCisKKyAgICBvcHRpb25zLmh0bWxfZGlyZWN0
b3J5ID0gc2V0dXBfaHRtbF9kaXJlY3Rvcnkob3B0aW9ucy5odG1sX2RpcmVjdG9yeSkKKworICAg
IHJlYmFzZWxpbmluZ190ZXN0cyA9IHNldCgpCisgICAgYmFja3VwID0gb3B0aW9ucy5iYWNrdXAK
KyAgICBmb3IgcGxhdGZvcm0gaW4gcmViYXNlbGluZV9wbGF0Zm9ybXM6CisgICAgICAgIHJlYmFz
ZWxpbmVyID0gUmViYXNlbGluZXIocGxhdGZvcm0sIG9wdGlvbnMpCisKKyAgICAgICAgbG9nZ2lu
Zy5pbmZvKCcnKQorICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluZSBzdGFydGVk
JywgcGxhdGZvcm0pCisgICAgICAgIGlmIHJlYmFzZWxpbmVyLnJ1bihiYWNrdXApOgorICAgICAg
ICAgICAgIyBPbmx5IG5lZWQgdG8gYmFja3VwIG9uZSBvcmlnaW5hbCBjb3B5IG9mIHRlc3QgZXhw
ZWN0YXRpb24gZmlsZS4KKyAgICAgICAgICAgIGJhY2t1cCA9IEZhbHNlCisgICAgICAgICAgICBs
b2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluZSBkb25lJywgcGxhdGZvcm0pCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluZSBmYWlsZWQnLCBw
bGF0Zm9ybSwgbG9nZ2luZy5FUlJPUikKKworICAgICAgICByZWJhc2VsaW5pbmdfdGVzdHMgfD0g
c2V0KHJlYmFzZWxpbmVyLmdldF9yZWJhc2VsaW5pbmdfdGVzdHMoKSkKKworICAgIGxvZ2dpbmcu
aW5mbygnJykKKyAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluaW5nIHJlc3VsdCBjb21w
YXJpc29uIHN0YXJ0ZWQnLCBOb25lKQorICAgIGh0bWxfZ2VuZXJhdG9yID0gSHRtbEdlbmVyYXRv
cihvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWJhc2VsaW5l
X3BsYXRmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmViYXNlbGlu
aW5nX3Rlc3RzKQorICAgIGh0bWxfZ2VuZXJhdG9yLmdlbmVyYXRlX2h0bWwoKQorICAgIGh0bWxf
Z2VuZXJhdG9yLnNob3dfaHRtbCgpCisgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxpbmlu
ZyByZXN1bHQgY29tcGFyaXNvbiBkb25lJywgTm9uZSkKKworICAgIHN5cy5leGl0KDApCisKK2lm
ICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1fd2Via2l0X3Rl
c3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
Li5lZTIzNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQpAQCAtMCwwICsxLDE2
OTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlJ1biBs
YXlvdXQgdGVzdHMgdXNpbmcgdGhlIHRlc3Rfc2hlbGwuCisKK1RoaXMgaXMgYSBwb3J0IG9mIHRo
ZSBleGlzdGluZyB3ZWJraXQgdGVzdCBzY3JpcHQgcnVuLXdlYmtpdC10ZXN0cy4KKworVGhlIFRl
c3RSdW5uZXIgY2xhc3MgcnVucyBhIHNlcmllcyBvZiB0ZXN0cyAoVGVzdFR5cGUgaW50ZXJmYWNl
KSBhZ2FpbnN0IGEgc2V0CitvZiB0ZXN0IGZpbGVzLiAgSWYgYSB0ZXN0IGZpbGUgZmFpbHMgYSBU
ZXN0VHlwZSwgaXQgcmV0dXJucyBhIGxpc3QgVGVzdEZhaWx1cmUKK29iamVjdHMgdG8gdGhlIFRl
c3RSdW5uZXIuICBUaGUgVGVzdFJ1bm5lciB0aGVuIGFnZ3JlZ2F0ZXMgdGhlIFRlc3RGYWlsdXJl
cyB0bworY3JlYXRlIGEgZmluYWwgcmVwb3J0LgorCitUaGlzIHNjcmlwdCByZWFkcyBzZXZlcmFs
IGZpbGVzLCBpZiB0aGV5IGV4aXN0IGluIHRoZSB0ZXN0X2xpc3RzIHN1YmRpcmVjdG9yeQorbmV4
dCB0byB0aGlzIHNjcmlwdCBpdHNlbGYuICBFYWNoIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBw
YXRocyB0byBpbmRpdmlkdWFsCit0ZXN0cyBvciBlbnRpcmUgc3ViZGlyZWN0b3JpZXMgb2YgdGVz
dHMsIHJlbGF0aXZlIHRvIHRoZSBvdXRlcm1vc3QgdGVzdAorZGlyZWN0b3J5LiAgRW50aXJlIGxp
bmVzIHN0YXJ0aW5nIHdpdGggJy8vJyAoY29tbWVudHMpIHdpbGwgYmUgaWdub3JlZC4KKworRm9y
IGRldGFpbHMgb2YgdGhlIGZpbGVzJyBjb250ZW50cyBhbmQgcHVycG9zZXMsIHNlZSB0ZXN0X2xp
c3RzL1JFQURNRS4KKyIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBnbG9iCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG1hdGgKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgUXVl
dWUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnBy
b2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgorZnJvbSBsYXlvdXRfcGFj
a2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IGh0dHBfc2VydmVyCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1
bHRzX2dlbmVyYXRvcgorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0K
K2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHBsYXRmb3JtX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X2ZhaWx1cmVzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3NoZWxsX3RocmVhZAor
ZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9maWxlcworZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgorZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBmdXp6eV9p
bWFnZV9kaWZmCitmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKK2Zyb20gdGVzdF90
eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKK2Zyb20gdGVzdF90eXBlcyBpbXBvcnQgdGV4dF9k
aWZmCisKK3N5cy5wYXRoLmFwcGVuZChwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9w
YXJ0eScpKQoraW1wb3J0IHNpbXBsZWpzb24KKworIyBJbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IGRl
dGFpbGVkIHByb2dyZXNzIHVwZGF0ZXMgaW4gdGhlIG91dHB1dCAocHJpbnRzCisjIGRpcmVjdG9y
eS1ieS1kaXJlY3RvcnkgZmVlZGJhY2spLgorTE9HX0RFVEFJTEVEX1BST0dSRVNTID0gJ2RldGFp
bGVkLXByb2dyZXNzJworCisjIExvZyBhbnkgdW5leHBlY3RlZCByZXN1bHRzIHdoaWxlIHJ1bm5p
bmcgKGluc3RlYWQgb2YganVzdCBhdCB0aGUgZW5kKS4KK0xPR19VTkVYUEVDVEVEID0gJ3VuZXhw
ZWN0ZWQnCisKKyMgQnVpbGRlciBiYXNlIFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0
ZXN0IHJlc3VsdHMuCitCVUlMREVSX0JBU0VfVVJMID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5v
cmcvYnVpbGRib3QvbGF5b3V0X3Rlc3RfcmVzdWx0cy8iCisKK1Rlc3RFeHBlY3RhdGlvbnNGaWxl
ID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9uc0ZpbGUKKworCitjbGFzcyBUZXN0
SW5mbzoKKyAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYSB0ZXN0IGZvciBlYXN5IHBh
c3Npbmcgb2YgZGF0YS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgdGlt
ZW91dCk6CisgICAgICAgICIiIkdlbmVyYXRlcyB0aGUgVVJJIGFuZCBzdG9yZXMgdGhlIGZpbGVu
YW1lIGFuZCB0aW1lb3V0IGZvciB0aGlzIHRlc3QuCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ZmlsZW5hbWU6IEZ1bGwgcGF0aCB0byB0aGUgdGVzdC4KKyAgICAgICAgICB0aW1lb3V0OiBUaW1l
b3V0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGluIFRlc3RTaGVsbC4KKyAgICAgICAgICAiIiIKKyAg
ICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYudXJpID0gcGF0aF91
dGlscy5maWxlbmFtZV90b191cmkoZmlsZW5hbWUpCisgICAgICAgIHNlbGYudGltZW91dCA9IHRp
bWVvdXQKKyAgICAgICAgZXhwZWN0ZWRfaGFzaF9maWxlID0gcGF0aF91dGlscy5leHBlY3RlZF9m
aWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLmNoZWNrc3VtJykKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5pbWFnZV9oYXNoID0gb3BlbihleHBlY3RlZF9oYXNoX2ZpbGUsICJyIikucmVhZCgp
CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZXJybm8uRU5PRU5U
ICE9IGUuZXJybm86CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNlbGYuaW1h
Z2VfaGFzaCA9IE5vbmUKKworCitjbGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6CisgICAgIiIi
QSBjbGFzcyBmb3IgcGFydGl0aW9uaW5nIHRoZSB0ZXN0IHJlc3VsdHMgd2UgZ2V0IGludG8gYnVj
a2V0cy4KKworICAgIFRoaXMgY2xhc3MgaXMgYmFzaWNhbGx5IGEgZ2xvcmlmaWVkIHN0cnVjdCBh
bmQgaXQncyBwcml2YXRlIHRvIHRoaXMgZmlsZQorICAgIHNvIHdlIGRvbid0IGJvdGhlciB3aXRo
IGFueSBpbmZvcm1hdGlvbiBoaWRpbmcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhw
ZWN0YXRpb25zLCB0ZXN0X2ZpbGVzKToKKyAgICAgICAgc2VsZi50b3RhbCA9IGxlbih0ZXN0X2Zp
bGVzKQorICAgICAgICBzZWxmLnJlbWFpbmluZyA9IHNlbGYudG90YWwKKyAgICAgICAgc2VsZi5l
eHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMKKyAgICAgICAgc2VsZi5leHBlY3RlZCA9IDAKKyAg
ICAgICAgc2VsZi51bmV4cGVjdGVkID0gMAorICAgICAgICBzZWxmLnRlc3RzX2J5X2V4cGVjdGF0
aW9uID0ge30KKyAgICAgICAgc2VsZi50ZXN0c19ieV90aW1lbGluZSA9IHt9CisgICAgICAgIHNl
bGYucmVzdWx0cyA9IHt9CisgICAgICAgIHNlbGYudW5leHBlY3RlZF9yZXN1bHRzID0ge30KKyAg
ICAgICAgc2VsZi5mYWlsdXJlcyA9IHt9CisgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRp
b25bdGVzdF9leHBlY3RhdGlvbnMuU0tJUF0gPSBzZXQoKQorICAgICAgICBmb3IgZXhwZWN0YXRp
b24gaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TLnZhbHVlcygpOgorICAgICAg
ICAgICAgc2VsZi50ZXN0c19ieV9leHBlY3RhdGlvbltleHBlY3RhdGlvbl0gPSBzZXQoKQorICAg
ICAgICBmb3IgdGltZWxpbmUgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuVElNRUxJTkVTLnZhbHVl
cygpOgorICAgICAgICAgICAgc2VsZi50ZXN0c19ieV90aW1lbGluZVt0aW1lbGluZV0gPSAoCisg
ICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmdldF90ZXN0c193aXRoX3RpbWVsaW5lKHRpbWVs
aW5lKSkKKworICAgIGRlZiBhZGQoc2VsZiwgdGVzdCwgZmFpbHVyZXMsIHJlc3VsdCwgZXhwZWN0
ZWQpOgorICAgICAgICAiIiJBZGQgYSByZXN1bHQgaW50byB0aGUgYXBwcm9wcmlhdGUgYmluLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdDogdGVzdCBmaWxlIG5hbWUKKyAgICAgICAg
ICBmYWlsdXJlczogbGlzdCBvZiBmYWlsdXJlIG9iamVjdHMgZnJvbSB0ZXN0IGV4ZWN1dGlvbgor
ICAgICAgICAgIHJlc3VsdDogcmVzdWx0IG9mIHRlc3QgKFBBU1MsIElNQUdFLCBldGMuKS4KKyAg
ICAgICAgICBleHBlY3RlZDogd2hldGhlciB0aGUgcmVzdWx0IHdhcyB3aGF0IHdlIGV4cGVjdGVk
IGl0IHRvIGJlLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnRlc3RzX2J5X2V4cGVjdGF0
aW9uW3Jlc3VsdF0uYWRkKHRlc3QpCisgICAgICAgIHNlbGYucmVzdWx0c1t0ZXN0XSA9IHJlc3Vs
dAorICAgICAgICBzZWxmLnJlbWFpbmluZyAtPSAxCisgICAgICAgIGlmIGxlbihmYWlsdXJlcyk6
CisgICAgICAgICAgICBzZWxmLmZhaWx1cmVzW3Rlc3RdID0gZmFpbHVyZXMKKyAgICAgICAgaWYg
ZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmV4cGVjdGVkICs9IDEKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYudW5leHBlY3RlZF9yZXN1bHRzW3Rlc3RdID0gcmVzdWx0CisgICAg
ICAgICAgICBzZWxmLnVuZXhwZWN0ZWQgKz0gMQorCisKK2NsYXNzIFRlc3RSdW5uZXI6CisgICAg
IiIiQSBjbGFzcyBmb3IgbWFuYWdpbmcgcnVubmluZyBhIHNlcmllcyBvZiB0ZXN0cyBvbiBhIHNl
cmllcyBvZiBsYXlvdXQKKyAgICB0ZXN0IGZpbGVzLiIiIgorCisgICAgSFRUUF9TVUJESVIgPSBv
cy5zZXAuam9pbihbJycsICdodHRwJywgJyddKQorICAgIFdFQlNPQ0tFVF9TVUJESVIgPSBvcy5z
ZXAuam9pbihbJycsICd3ZWJzb2NrZXQnLCAnJ10pCisKKyAgICAjIFRoZSBwZXItdGVzdCB0aW1l
b3V0IGluIG1pbGxpc2Vjb25kcywgaWYgbm8gLS10aW1lLW91dC1tcyBvcHRpb24gd2FzCisgICAg
IyBnaXZlbiB0byBydW5fd2Via2l0X3Rlc3RzLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIHRo
ZSBkZWZhdWx0IHRpbWVvdXQKKyAgICAjIGluIHRlc3Rfc2hlbGwuZXhlLgorICAgIERFRkFVTFRf
VEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKKworICAgIE5VTV9SRVRSWV9PTl9VTkVYUEVDVEVE
X0ZBSUxVUkUgPSAxCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgbWV0ZXIpOgor
ICAgICAgICAiIiJJbml0aWFsaXplIHRlc3QgcnVubmVyIGRhdGEgc3RydWN0dXJlcy4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxp
bmUgb3B0aW9ucworICAgICAgICAgIG1ldGVyOiBhIE1ldGVyZWRTdHJlYW0gb2JqZWN0IHRvIHJl
Y29yZCB1cGRhdGVzIHRvLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9w
dGlvbnMKKyAgICAgICAgc2VsZi5fbWV0ZXIgPSBtZXRlcgorCisgICAgICAgIGlmIG9wdGlvbnMu
dXNlX2FwYWNoZToKKyAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gYXBhY2hlX2h0dHBf
c2VydmVyLkxheW91dFRlc3RBcGFjaGVIdHRwZCgKKyAgICAgICAgICAgICAgICBvcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5faHR0cF9z
ZXJ2ZXIgPSBodHRwX3NlcnZlci5MaWdodHRwZChvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQor
CisgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2Vi
U29ja2V0KAorICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAg
IyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRi
b3RzLgorICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0gd2Vic29ja2V0
X3NlcnZlci5QeVdlYlNvY2tldCgKKyAgICAgICAgIyAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2Rp
cmVjdG9yeSwgdXNlX3Rscz1UcnVlLCBwb3J0PTkzMjMpCisKKyAgICAgICAgIyBhIGxpc3Qgb2Yg
VGVzdFR5cGUgb2JqZWN0cworICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKworICAgICAg
ICAjIGEgc2V0IG9mIHRlc3QgZmlsZXMsIGFuZCB0aGUgc2FtZSB0ZXN0cyBhcyBhIGxpc3QKKyAg
ICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHNldCgpCisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNf
bGlzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZmlsZV9kaXIgPSBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd3ZWJraXQnLCAndG9vbHMnLAorICAgICAgICAgICAgJ2xheW91dF90ZXN0cycpCisg
ICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKworICAgICAgICAjIFRo
ZXNlIGFyZSB1c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1wcm9ncmVzcyB0byB0cmFjayBzdGF0dXMg
YnkKKyAgICAgICAgIyBkaXJlY3RvcnkuCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyID0gTm9u
ZQorICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIiCisgICAgICAgIHNlbGYu
X2N1cnJlbnRfdGVzdF9udW1iZXIgPSAwCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAg
ICAgbG9nZ2luZy5kZWJ1ZygiZmx1c2hpbmcgc3Rkb3V0IikKKyAgICAgICAgc3lzLnN0ZG91dC5m
bHVzaCgpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoImZsdXNoaW5nIHN0ZGVyciIpCisgICAgICAg
IHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCJzdG9wcGluZyBodHRw
IHNlcnZlciIpCisgICAgICAgICMgU3RvcCB0aGUgaHR0cCBzZXJ2ZXIuCisgICAgICAgIHNlbGYu
X2h0dHBfc2VydmVyLnN0b3AoKQorICAgICAgICAjIFN0b3AgdGhlIFdlYiBTb2NrZXQgLyBXZWIg
U29ja2V0IFNlY3VyZSBzZXJ2ZXJzLgorICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLnN0
b3AoKQorICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyLlN0b3AoKQorCisg
ICAgZGVmIGdhdGhlcl9maWxlX3BhdGhzKHNlbGYsIHBhdGhzKToKKyAgICAgICAgIiIiRmluZCBh
bGwgdGhlIGZpbGVzIHRvIHRlc3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBwYXRoczog
YSBsaXN0IG9mIGdsb2JzIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0cy4iIiIKKyAgICAg
ICAgc2VsZi5fdGVzdF9maWxlcyA9IHRlc3RfZmlsZXMuZ2F0aGVyX3Rlc3RfZmlsZXMocGF0aHMp
CisKKyAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYsIHBsYXRmb3JtLCBpc19kZWJ1Z19t
b2RlKToKKyAgICAgICAgIiIiUGFyc2UgdGhlIGV4cGVjdGF0aW9ucyBmcm9tIHRoZSB0ZXN0X2xp
c3QgZmlsZXMgYW5kIHJldHVybiBhIGRhdGEKKyAgICAgICAgc3RydWN0dXJlIGhvbGRpbmcgdGhl
bS4gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSB0ZXN0X2xpc3QgZmlsZXMgaGF2ZQorICAgICAgICBp
bnZhbGlkIHN5bnRheC4iIiIKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3RfZmls
ZXM6CisgICAgICAgICAgICB0ZXN0X2ZpbGVzID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3Rlc3RfZmlsZXMKKworICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0
YXRpb25zKHRlc3RfZmlsZXMsCisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9kaXIsIHBsYXRm
b3JtLCBpc19kZWJ1Z19tb2RlLAorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubGludF90
ZXN0X2ZpbGVzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucworICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6CisgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmxp
bnRfdGVzdF9maWxlczoKKyAgICAgICAgICAgICAgICBwcmludCBzdHIoZXJyKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnIKKworICAgIGRlZiBwcmVwYXJlX2xp
c3RzX2FuZF9wcmludF9vdXRwdXQoc2VsZiwgd3JpdGUpOgorICAgICAgICAiIiJDcmVhdGUgYXBw
cm9wcmlhdGUgc3Vic2V0cyBvZiB0ZXN0IGxpc3RzIGFuZCByZXR1cm5zIGEKKyAgICAgICAgUmVz
dWx0U3VtbWFyeSBvYmplY3QuIEFsc28gcHJpbnRzIGV4cGVjdGVkIHRlc3QgY291bnRzLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0
byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgorICAgICAgICAgICAgIHN5cy5zdGRvdXQud3Jp
dGUuCisgICAgICAgICIiIgorCisgICAgICAgICMgUmVtb3ZlIHNraXBwZWQgLSBib3RoIGZpeGFi
bGUgYW5kIGlnbm9yZWQgLSBmaWxlcyBmcm9tIHRoZQorICAgICAgICAjIHRvcC1sZXZlbCBsaXN0
IG9mIGZpbGVzIHRvIHRlc3QuCisgICAgICAgIG51bV9hbGxfdGVzdF9maWxlcyA9IGxlbihzZWxm
Ll90ZXN0X2ZpbGVzKQorICAgICAgICB3cml0ZSgiRm91bmQ6ICAlZCB0ZXN0cyIgJSAobGVuKHNl
bGYuX3Rlc3RfZmlsZXMpKSkKKyAgICAgICAgc2tpcHBlZCA9IHNldCgpCisgICAgICAgIGlmIG51
bV9hbGxfdGVzdF9maWxlcyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmZvcmNlOgorICAgICAg
ICAgICAgc2tpcHBlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRf
dHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlNLSVAp
CisgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzIC09IHNraXBwZWQKKworICAgICAgICAjIENy
ZWF0ZSBhIHNvcnRlZCBsaXN0IG9mIHRlc3QgZmlsZXMgc28gdGhlIHN1YnNldCBjaHVuaywKKyAg
ICAgICAgIyBpZiB1c2VkLCBjb250YWlucyBhbHBoYWJldGljYWxseSBjb25zZWN1dGl2ZSB0ZXN0
cy4KKyAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gbGlzdChzZWxmLl90ZXN0X2ZpbGVz
KQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJhbmRvbWl6ZV9vcmRlcjoKKyAgICAgICAgICAg
IHJhbmRvbS5zaHVmZmxlKHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdC5zb3J0KCkKKworICAgICAgICAjIElmIHRo
ZSB1c2VyIHNwZWNpZmllcyB0aGV5IGp1c3Qgd2FudCB0byBydW4gYSBzdWJzZXQgb2YgdGhlIHRl
c3RzLAorICAgICAgICAjIGp1c3QgZ3JhYiBhIHN1YnNldCBvZiB0aGUgbm9uLXNraXBwZWQgdGVz
dHMuCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX2NodW5rIG9yIHNlbGYuX29wdGlvbnMu
cnVuX3BhcnQ6CisgICAgICAgICAgICBjaHVua192YWx1ZSA9IHNlbGYuX29wdGlvbnMucnVuX2No
dW5rIG9yIHNlbGYuX29wdGlvbnMucnVuX3BhcnQKKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSBz
ZWxmLl90ZXN0X2ZpbGVzX2xpc3QKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAo
Y2h1bmtfbnVtLCBjaHVua19sZW4pID0gY2h1bmtfdmFsdWUuc3BsaXQoIjoiKQorICAgICAgICAg
ICAgICAgIGNodW5rX251bSA9IGludChjaHVua19udW0pCisgICAgICAgICAgICAgICAgYXNzZXJ0
KGNodW5rX251bSA+PSAwKQorICAgICAgICAgICAgICAgIHRlc3Rfc2l6ZSA9IGludChjaHVua19s
ZW4pCisgICAgICAgICAgICAgICAgYXNzZXJ0KHRlc3Rfc2l6ZSA+IDApCisgICAgICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgiaW52YWxpZCBjaHVuayAn
JXMnIiAlIGNodW5rX3ZhbHVlKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAg
ICAgICAgICMgR2V0IHRoZSBudW1iZXIgb2YgdGVzdHMKKyAgICAgICAgICAgIG51bV90ZXN0cyA9
IGxlbih0ZXN0X2ZpbGVzKQorCisgICAgICAgICAgICAjIEdldCB0aGUgc3RhcnQgb2Zmc2V0IG9m
IHRoZSBzbGljZS4KKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX2NodW5rOgorICAg
ICAgICAgICAgICAgIGNodW5rX2xlbiA9IHRlc3Rfc2l6ZQorICAgICAgICAgICAgICAgICMgSW4g
dGhpcyBjYXNlIGNodW5rX251bSBjYW4gYmUgcmVhbGx5IGxhcmdlLiBXZSBuZWVkCisgICAgICAg
ICAgICAgICAgIyB0byBtYWtlIHRoZSBzbGF2ZSBmaXQgaW4gdGhlIGN1cnJlbnQgbnVtYmVyIG9m
IHRlc3RzLgorICAgICAgICAgICAgICAgIHNsaWNlX3N0YXJ0ID0gKGNodW5rX251bSAqIGNodW5r
X2xlbikgJSBudW1fdGVzdHMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBW
YWxpZGF0ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgICAgICBhc3NlcnQodGVzdF9zaXplIDw9IG51
bV90ZXN0cykKKyAgICAgICAgICAgICAgICBhc3NlcnQoY2h1bmtfbnVtIDw9IHRlc3Rfc2l6ZSkK
KworICAgICAgICAgICAgICAgICMgVG8gY291bnQgdGhlIGNodW5rX2xlbiwgYW5kIG1ha2Ugc3Vy
ZSB3ZSBkb24ndCBza2lwCisgICAgICAgICAgICAgICAgIyBzb21lIHRlc3RzLCB3ZSByb3VuZCB0
byB0aGUgbmV4dCB2YWx1ZSB0aGF0IGZpdHMgZXhhY3RseQorICAgICAgICAgICAgICAgICMgYWxs
IHRoZSBwYXJ0cy4KKyAgICAgICAgICAgICAgICByb3VuZGVkX3Rlc3RzID0gbnVtX3Rlc3RzCisg
ICAgICAgICAgICAgICAgaWYgcm91bmRlZF90ZXN0cyAlIHRlc3Rfc2l6ZSAhPSAwOgorICAgICAg
ICAgICAgICAgICAgICByb3VuZGVkX3Rlc3RzID0gKG51bV90ZXN0cyArIHRlc3Rfc2l6ZSAtCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90ZXN0cyAlIHRlc3Rfc2l6
ZSkpCisKKyAgICAgICAgICAgICAgICBjaHVua19sZW4gPSByb3VuZGVkX3Rlc3RzIC8gdGVzdF9z
aXplCisgICAgICAgICAgICAgICAgc2xpY2Vfc3RhcnQgPSBjaHVua19sZW4gKiAoY2h1bmtfbnVt
IC0gMSkKKyAgICAgICAgICAgICAgICAjIEl0IGRvZXMgbm90IG1pbmQgaWYgd2UgZ28gb3ZlciB0
ZXN0X3NpemUuCisKKyAgICAgICAgICAgICMgR2V0IHRoZSBlbmQgb2Zmc2V0IG9mIHRoZSBzbGlj
ZS4KKyAgICAgICAgICAgIHNsaWNlX2VuZCA9IG1pbihudW1fdGVzdHMsIHNsaWNlX3N0YXJ0ICsg
Y2h1bmtfbGVuKQorCisgICAgICAgICAgICBmaWxlcyA9IHRlc3RfZmlsZXNbc2xpY2Vfc3RhcnQ6
c2xpY2VfZW5kXQorCisgICAgICAgICAgICB0ZXN0c19ydW5fbXNnID0gJ1J1bm5pbmc6ICVkIHRl
c3RzIChjaHVuayBzbGljZSBbJWQ6JWRdIG9mICVkKScgJSAoCisgICAgICAgICAgICAgICAgKHNs
aWNlX2VuZCAtIHNsaWNlX3N0YXJ0KSwgc2xpY2Vfc3RhcnQsIHNsaWNlX2VuZCwgbnVtX3Rlc3Rz
KQorICAgICAgICAgICAgd3JpdGUodGVzdHNfcnVuX21zZykKKworICAgICAgICAgICAgIyBJZiB3
ZSByZWFjaGVkIHRoZSBlbmQgYW5kIHdlIGRvbid0IGhhdmUgZW5vdWdoIHRlc3RzLCB3ZSBydW4g
c29tZQorICAgICAgICAgICAgIyBmcm9tIHRoZSBiZWdpbm5pbmcuCisgICAgICAgICAgICBpZiAo
c2VsZi5fb3B0aW9ucy5ydW5fY2h1bmsgYW5kCisgICAgICAgICAgICAgICAgKHNsaWNlX2VuZCAt
IHNsaWNlX3N0YXJ0IDwgY2h1bmtfbGVuKSk6CisgICAgICAgICAgICAgICAgZXh0cmEgPSAxICsg
Y2h1bmtfbGVuIC0gKHNsaWNlX2VuZCAtIHNsaWNlX3N0YXJ0KQorICAgICAgICAgICAgICAgIGV4
dHJhX21zZyA9ICgnICAgbGFzdCBjaHVuayBpcyBwYXJ0aWFsLCBhcHBlbmRpbmcgWzA6JWRdJyAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEpCisgICAgICAgICAgICAgICAgd3Jp
dGUoZXh0cmFfbXNnKQorICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9tc2cgKz0gIlxuIiArIGV4
dHJhX21zZworICAgICAgICAgICAgICAgIGZpbGVzLmV4dGVuZCh0ZXN0X2ZpbGVzWzA6ZXh0cmFd
KQorICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRlc3RzX3J1bi50eHQiKQorICAgICAgICAgICAgdGVzdHNfcnVuX2Zp
bGUgPSBvcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgInciKQorICAgICAgICAgICAgdGVzdHNfcnVu
X2ZpbGUud3JpdGUodGVzdHNfcnVuX21zZyArICJcbiIpCisgICAgICAgICAgICB0ZXN0c19ydW5f
ZmlsZS5jbG9zZSgpCisKKyAgICAgICAgICAgIGxlbl9za2lwX2NodW5rID0gaW50KGxlbihmaWxl
cykgKiBsZW4oc2tpcHBlZCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQobGVuKHNlbGYuX3Rlc3RfZmlsZXMpKSkKKyAgICAgICAgICAgIHNraXBfY2h1bmtfbGlzdCA9
IGxpc3Qoc2tpcHBlZClbMDpsZW5fc2tpcF9jaHVua10KKyAgICAgICAgICAgIHNraXBfY2h1bmsg
PSBzZXQoc2tpcF9jaHVua19saXN0KQorCisgICAgICAgICAgICAjIFVwZGF0ZSBleHBlY3RhdGlv
bnMgc28gdGhhdCB0aGUgc3RhdHMgYXJlIGNhbGN1bGF0ZWQgY29ycmVjdGx5LgorICAgICAgICAg
ICAgIyBXZSBuZWVkIHRvIHBhc3MgYSBsaXN0IHRoYXQgaW5jbHVkZXMgdGhlIHJpZ2h0ICMgb2Yg
c2tpcHBlZCBmaWxlcworICAgICAgICAgICAgIyB0byBQYXJzZUV4cGVjdGF0aW9ucyBzbyB0aGF0
IFJlc3VsdFN1bW1hcnkoKSB3aWxsIGdldCB0aGUgY29ycmVjdAorICAgICAgICAgICAgIyBzdGF0
cy4gU28sIHdlIGFkZCBpbiB0aGUgc3Vic2V0IG9mIHNraXBwZWQgZmlsZXMsIGFuZCB0aGVuCisg
ICAgICAgICAgICAjIHN1YnRyYWN0IHRoZW0gYmFjayBvdXQuCisgICAgICAgICAgICBzZWxmLl90
ZXN0X2ZpbGVzX2xpc3QgPSBmaWxlcyArIHNraXBfY2h1bmtfbGlzdAorICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9maWxlcyA9IHNldChzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCisKKyAgICAgICAgICAg
IHNlbGYuX2V4cGVjdGF0aW9ucyA9IHNlbGYucGFyc2VfZXhwZWN0YXRpb25zKAorICAgICAgICAg
ICAgICAgIHBhdGhfdXRpbHMucGxhdGZvcm1fbmFtZSgpLCBzZWxmLl9vcHRpb25zLnRhcmdldCA9
PSAnRGVidWcnKQorCisgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KGZpbGVzKQor
ICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gZmlsZXMKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNraXBfY2h1bmsgPSBza2lwcGVkCisKKyAgICAgICAgcmVzdWx0X3N1bW1h
cnkgPSBSZXN1bHRTdW1tYXJ5KHNlbGYuX2V4cGVjdGF0aW9ucywKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3RfZmlsZXMgfCBza2lwX2NodW5rKQorICAgICAgICBzZWxmLl9wcmludF9leHBlY3RlZF9y
ZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVzdF9l
eHBlY3RhdGlvbnMuUEFTUywgInBhc3NlcyIpCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVk
X3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0
X2V4cGVjdGF0aW9ucy5GQUlMLCAiZmFpbHVyZXMiKQorICAgICAgICBzZWxmLl9wcmludF9leHBl
Y3RlZF9yZXN1bHRzX29mX3R5cGUod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAg
dGVzdF9leHBlY3RhdGlvbnMuRkxBS1ksICJmbGFreSIpCisgICAgICAgIHNlbGYuX3ByaW50X2V4
cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAg
ICB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQLCAic2tpcHBlZCIpCisKKworICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLmZvcmNlOgorICAgICAgICAgICAgd3JpdGUoJ1J1bm5pbmcgYWxsIHRlc3RzLCBp
bmNsdWRpbmcgc2tpcHMgKC0tZm9yY2UpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMg
Tm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJ1biB0aGUgc2tpcHBlZCB0ZXN0cyAodGhleSB3
ZXJlCisgICAgICAgICAgICAjIHN1YnRyYWN0ZWQgb3V0IG9mIHNlbGYuX3Rlc3RfZmlsZXMsIGFi
b3ZlKSwgYnV0IHdlIHN0dWIgb3V0IHRoZQorICAgICAgICAgICAgIyByZXN1bHRzIGhlcmUgc28g
dGhlIHN0YXRpc3RpY3MgY2FuIHJlbWFpbiBhY2N1cmF0ZS4KKyAgICAgICAgICAgIGZvciB0ZXN0
IGluIHNraXBfY2h1bms6CisgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHRlc3Qs
IFtdLCB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZD1UcnVlKQorICAgICAgICB3cml0ZSgiIikKKworICAgICAgICByZXR1
cm4gcmVzdWx0X3N1bW1hcnkKKworICAgIGRlZiBhZGRfdGVzdF90eXBlKHNlbGYsIHRlc3RfdHlw
ZSk6CisgICAgICAgICIiIkFkZCBhIFRlc3RUeXBlIHRvIHRoZSBUZXN0UnVubmVyLiIiIgorICAg
ICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZCh0ZXN0X3R5cGUpCisKKyAgICBkZWYgX2dldF9k
aXJfZm9yX3Rlc3RfZmlsZShzZWxmLCB0ZXN0X2ZpbGUpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBoaWdoZXN0LWxldmVsIGRpcmVjdG9yeSBieSB3aGljaCB0byBzaGFyZCB0aGUgZ2l2ZW4KKyAg
ICAgICAgdGVzdCBmaWxlLiIiIgorICAgICAgICBpbmRleCA9IHRlc3RfZmlsZS5yZmluZChvcy5z
ZXAgKyAnTGF5b3V0VGVzdHMnICsgb3Muc2VwKQorCisgICAgICAgIHRlc3RfZmlsZSA9IHRlc3Rf
ZmlsZVtpbmRleCArIGxlbignTGF5b3V0VGVzdHMvJyk6XQorICAgICAgICB0ZXN0X2ZpbGVfcGFy
dHMgPSB0ZXN0X2ZpbGUuc3BsaXQob3Muc2VwLCAxKQorICAgICAgICBkaXJlY3RvcnkgPSB0ZXN0
X2ZpbGVfcGFydHNbMF0KKyAgICAgICAgdGVzdF9maWxlID0gdGVzdF9maWxlX3BhcnRzWzFdCisK
KyAgICAgICAgIyBUaGUgaHR0cCB0ZXN0cyBhcmUgdmVyeSBzdGFibGUgb24gbWFjL2xpbnV4Lgor
ICAgICAgICAjIFRPRE8ob2phbik6IE1ha2UgdGhlIGh0dHAgc2VydmVyIG9uIFdpbmRvd3MgYmUg
YXBhY2hlIHNvIHdlIGNhbgorICAgICAgICAjIHR1cm4gc2hhcmQgdGhlIGh0dHAgdGVzdHMgdGhl
cmUgYXMgd2VsbC4gU3dpdGNoaW5nIHRvIGFwYWNoZSBpcworICAgICAgICAjIHdoYXQgbWFkZSB0
aGVtIHN0YWJsZSBvbiBsaW51eC9tYWMuCisgICAgICAgIHJldHVybl92YWx1ZSA9IGRpcmVjdG9y
eQorICAgICAgICB3aGlsZSAoKGRpcmVjdG9yeSAhPSAnaHR0cCcgb3Igc3lzLnBsYXRmb3JtIGlu
ICgnZGFyd2luJywgJ2xpbnV4MicpKQorICAgICAgICAgICAgICAgIGFuZCB0ZXN0X2ZpbGUuZmlu
ZChvcy5zZXApID49IDApOgorICAgICAgICAgICAgdGVzdF9maWxlX3BhcnRzID0gdGVzdF9maWxl
LnNwbGl0KG9zLnNlcCwgMSkKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IHRlc3RfZmlsZV9wYXJ0
c1swXQorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gb3MucGF0aC5qb2luKHJldHVybl92YWx1
ZSwgZGlyZWN0b3J5KQorICAgICAgICAgICAgdGVzdF9maWxlID0gdGVzdF9maWxlX3BhcnRzWzFd
CisKKyAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQorCisgICAgZGVmIF9nZXRfdGVzdF9pbmZv
X2Zvcl9maWxlKHNlbGYsIHRlc3RfZmlsZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGFwcHJv
cHJpYXRlIFRlc3RJbmZvIG9iamVjdCBmb3IgdGhlIGZpbGUuIE1vc3RseSB0aGlzCisgICAgICAg
IGlzIHVzZWQgZm9yIGxvb2tpbmcgdXAgdGhlIHRpbWVvdXQgdmFsdWUgKGluIG1zKSB0byB1c2Ug
Zm9yIHRoZSBnaXZlbgorICAgICAgICB0ZXN0LiIiIgorICAgICAgICBpZiBzZWxmLl9leHBlY3Rh
dGlvbnMuaGFzX21vZGlmaWVyKHRlc3RfZmlsZSwgdGVzdF9leHBlY3RhdGlvbnMuU0xPVyk6Cisg
ICAgICAgICAgICByZXR1cm4gVGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnNsb3df
dGltZV9vdXRfbXMpCisgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNlbGYuX29w
dGlvbnMudGltZV9vdXRfbXMpCisKKyAgICBkZWYgX2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZiwg
dGVzdF9maWxlcyk6CisgICAgICAgICIiIkNyZWF0ZSB0aGUgdGhyZWFkIHNhZmUgcXVldWUgb2Yg
bGlzdHMgb2YgKHRlc3QgZmlsZW5hbWVzLCB0ZXN0IFVSSXMpCisgICAgICAgIHR1cGxlcy4gRWFj
aCBUZXN0U2hlbGxUaHJlYWQgcHVsbHMgYSBsaXN0IGZyb20gdGhpcyBxdWV1ZSBhbmQgcnVucwor
ICAgICAgICB0aG9zZSB0ZXN0cyBpbiBvcmRlciBiZWZvcmUgZ3JhYmJpbmcgdGhlIG5leHQgYXZh
aWxhYmxlIGxpc3QuCisKKyAgICAgICAgU2hhcmQgdGhlIGxpc3RzIGJ5IGRpcmVjdG9yeS4gVGhp
cyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0IGRlcGVuZAorICAgICAgICBvbiBlYWNoIG90
aGVyIChha2EgYmFkIHRlc3RzISkgY29udGludWUgdG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QKKyAg
ICAgICAgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8gb2NjdXIgd2l0aGluIHRoZSBz
YW1lIGRpcmVjdG9yeS4KKworICAgICAgICBSZXR1cm46CisgICAgICAgICAgVGhlIFF1ZXVlIG9m
IGxpc3RzIG9mIFRlc3RJbmZvIG9iamVjdHMuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIChz
ZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgorICAgICAgICAgICAg
c2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCkpOgorICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUg
PSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6
CisgICAgICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUucHV0KAorICAgICAgICAgICAgICAgICAg
ICAoJy4nLCBbc2VsZi5fZ2V0X3Rlc3RfaW5mb19mb3JfZmlsZSh0ZXN0X2ZpbGUpXSkpCisgICAg
ICAgICAgICByZXR1cm4gZmlsZW5hbWVfcXVldWUKKworICAgICAgICB0ZXN0c19ieV9kaXIgPSB7
fQorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAgICAgICBkaXJl
Y3RvcnkgPSBzZWxmLl9nZXRfZGlyX2Zvcl90ZXN0X2ZpbGUodGVzdF9maWxlKQorICAgICAgICAg
ICAgdGVzdHNfYnlfZGlyLnNldGRlZmF1bHQoZGlyZWN0b3J5LCBbXSkKKyAgICAgICAgICAgIHRl
c3RzX2J5X2RpcltkaXJlY3RvcnldLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBzZWxmLl9nZXRf
dGVzdF9pbmZvX2Zvcl9maWxlKHRlc3RfZmlsZSkpCisKKyAgICAgICAgIyBTb3J0IGJ5IHRoZSBu
dW1iZXIgb2YgdGVzdHMgaW4gdGhlIGRpciBzbyB0aGF0IHRoZSBvbmVzIHdpdGggdGhlCisgICAg
ICAgICMgbW9zdCB0ZXN0cyBnZXQgcnVuIGZpcnN0IGluIG9yZGVyIHRvIG1heGltaXplIHBhcmFs
bGVsaXphdGlvbi4KKyAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaXMgYSBnb29kIGVub3VnaCwg
YnV0IG5vdCBwZXJmZWN0LCBhcHByb3hpbWF0aW9uCisgICAgICAgICMgb2YgaG93IGxvbmcgdGhh
dCBzZXQgb2YgdGVzdHMgd2lsbCB0YWtlIHRvIHJ1bi4gV2UgY2FuJ3QganVzdCB1c2UKKyAgICAg
ICAgIyBhIFByaW9yaXR5UXVldWUgdW50aWwgd2UgbW92ZSAjIHRvIFB5dGhvbiAyLjYuCisgICAg
ICAgIHRlc3RfbGlzdHMgPSBbXQorICAgICAgICBodHRwX3Rlc3RzID0gTm9uZQorICAgICAgICBm
b3IgZGlyZWN0b3J5IGluIHRlc3RzX2J5X2RpcjoKKyAgICAgICAgICAgIHRlc3RfbGlzdCA9IHRl
c3RzX2J5X2RpcltkaXJlY3RvcnldCisgICAgICAgICAgICAjIEtlZXAgdGhlIHRlc3RzIGluIGFs
cGhhYmV0aWNhbCBvcmRlci4KKyAgICAgICAgICAgICMgVE9ETzogUmVtb3ZlIG9uY2UgdGVzdHMg
YXJlIGZpeGVkIHNvIHRoZXkgY2FuIGJlIHJ1biBpbiBhbnkKKyAgICAgICAgICAgICMgb3JkZXIu
CisgICAgICAgICAgICB0ZXN0X2xpc3QucmV2ZXJzZSgpCisgICAgICAgICAgICB0ZXN0X2xpc3Rf
dHVwbGUgPSAoZGlyZWN0b3J5LCB0ZXN0X2xpc3QpCisgICAgICAgICAgICBpZiBkaXJlY3Rvcnkg
PT0gJ0xheW91dFRlc3RzJyArIG9zLnNlcCArICdodHRwJzoKKyAgICAgICAgICAgICAgICBodHRw
X3Rlc3RzID0gdGVzdF9saXN0X3R1cGxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHRlc3RfbGlzdHMuYXBwZW5kKHRlc3RfbGlzdF90dXBsZSkKKyAgICAgICAgdGVzdF9saXN0
cy5zb3J0KGxhbWJkYSBhLCBiOiBjbXAobGVuKGJbMV0pLCBsZW4oYVsxXSkpKQorCisgICAgICAg
ICMgUHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0LiBUaGVyZSBhcmUgb25seSBhIGNvdXBsZSBodW5k
cmVkIG9mIHRoZW0sCisgICAgICAgICMgYnV0IGVhY2ggaHR0cCB0ZXN0IHRha2VzIGEgdmVyeSBs
b25nIHRpbWUgdG8gcnVuLCBzbyBzb3J0aW5nIGJ5IHRoZQorICAgICAgICAjIG51bWJlciBvZiB0
ZXN0cyBkb2Vzbid0IGFjY3VyYXRlbHkgY2FwdHVyZSBob3cgbG9uZyB0aGV5IHRha2UgdG8gcnVu
LgorICAgICAgICBpZiBodHRwX3Rlc3RzOgorICAgICAgICAgICAgdGVzdF9saXN0cy5pbnNlcnQo
MCwgaHR0cF90ZXN0cykKKworICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkK
KyAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0czoKKyAgICAgICAgICAgIGZpbGVuYW1lX3F1
ZXVlLnB1dChpdGVtKQorICAgICAgICByZXR1cm4gZmlsZW5hbWVfcXVldWUKKworICAgIGRlZiBf
Z2V0X3Rlc3Rfc2hlbGxfYXJncyhzZWxmLCBpbmRleCk6CisgICAgICAgICIiIlJldHVybnMgdGhl
IHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZvciB0ZXN0X3NoZWxsLiIiIgorICAg
ICAgICBzaGVsbF9hcmdzID0gW10KKyAgICAgICAgdGVzdF9hcmdzID0gdGVzdF90eXBlX2Jhc2Uu
VGVzdEFyZ3VtZW50cygpCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm5vX3BpeGVsX3Rl
c3RzOgorICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
bmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQorICAgICAgICAgICAgc2hlbGxfYXJncy5hcHBlbmQo
Ii0tcGl4ZWwtdGVzdHM9IiArIHBuZ19wYXRoKQorICAgICAgICAgICAgdGVzdF9hcmdzLnBuZ19w
YXRoID0gcG5nX3BhdGgKKworICAgICAgICB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lID0gc2VsZi5f
b3B0aW9ucy5uZXdfYmFzZWxpbmUKKworICAgICAgICB0ZXN0X2FyZ3Muc2hvd19zb3VyY2VzID0g
c2VsZi5fb3B0aW9ucy5zb3VyY2VzCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5zdGFydHVw
X2RpYWxvZzoKKyAgICAgICAgICAgIHNoZWxsX2FyZ3MuYXBwZW5kKCctLXRlc3RzaGVsbC1zdGFy
dHVwLWRpYWxvZycpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ncF9mYXVsdF9lcnJvcl9i
b3g6CisgICAgICAgICAgICBzaGVsbF9hcmdzLmFwcGVuZCgnLS1ncC1mYXVsdC1lcnJvci1ib3gn
KQorCisgICAgICAgIHJldHVybiAodGVzdF9hcmdzLCBzaGVsbF9hcmdzKQorCisgICAgZGVmIF9j
b250YWluc190ZXN0cyhzZWxmLCBzdWJkaXIpOgorICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNl
bGYuX3Rlc3RfZmlsZXNfbGlzdDoKKyAgICAgICAgICAgIGlmIHRlc3RfZmlsZS5maW5kKHN1YmRp
cikgPj0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgIGRlZiBfaW5zdGFudGlhdGVfdGVzdF9zaGVsbF90aHJlYWRzKHNlbGYsIHRlc3Rf
c2hlbGxfYmluYXJ5LCB0ZXN0X2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiSW5zdGFudGl0YXRlcyBhbmQgc3Rh
cnRzIHRoZSBUZXN0U2hlbGxUaHJlYWQocykuCisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAg
IFRoZSBsaXN0IG9mIHRocmVhZHMuCisgICAgICAgICIiIgorICAgICAgICB0ZXN0X3NoZWxsX2Nv
bW1hbmQgPSBbdGVzdF9zaGVsbF9iaW5hcnldCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy53
cmFwcGVyOgorICAgICAgICAgICAgIyBUaGlzIHNwbGl0KCkgaXNuJ3QgcmVhbGx5IHdoYXQgd2Ug
d2FudCAtLSBpdCBpbmNvcnJlY3RseSB3aWxsCisgICAgICAgICAgICAjIHNwbGl0IHF1b3RlZCBz
dHJpbmdzIHdpdGhpbiB0aGUgd3JhcHBlciBhcmd1bWVudCAtLSBidXQgaW4KKyAgICAgICAgICAg
ICMgcHJhY3RpY2UgaXQgc2hvdWxkbid0IGNvbWUgdXAgYW5kIHRoZSAtLWhlbHAgb3V0cHV0IHdh
cm5zCisgICAgICAgICAgICAjIGFib3V0IGl0IGFueXdheS4KKyAgICAgICAgICAgIHRlc3Rfc2hl
bGxfY29tbWFuZCA9IChzZWxmLl9vcHRpb25zLndyYXBwZXIuc3BsaXQoKSArCisgICAgICAgICAg
ICAgICAgdGVzdF9zaGVsbF9jb21tYW5kKQorCisgICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gc2Vs
Zi5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2ZpbGVzKQorCisgICAgICAgICMgSW5zdGFudGlh
dGUgVGVzdFNoZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KKyAgICAgICAgdGhyZWFkcyA9IFtd
CisgICAgICAgIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fb3B0aW9ucy5udW1fdGVzdF9zaGVs
bHMpKToKKyAgICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRlIFRlc3RUeXBlcyBpbnN0YW5jZXMg
Zm9yIGVhY2ggdGhyZWFkLgorICAgICAgICAgICAgdGVzdF90eXBlcyA9IFtdCisgICAgICAgICAg
ICBmb3IgdCBpbiBzZWxmLl90ZXN0X3R5cGVzOgorICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMu
YXBwZW5kKHQoc2VsZi5fb3B0aW9ucy5wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorCisgICAgICAg
ICAgICB0ZXN0X2FyZ3MsIHNoZWxsX2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9zaGVsbF9hcmdzKGkp
CisgICAgICAgICAgICB0aHJlYWQgPSB0ZXN0X3NoZWxsX3RocmVhZC5UZXN0U2hlbGxUaHJlYWQo
ZmlsZW5hbWVfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc2hlbGxfY29tbWFuZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaGVsbF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMpCisgICAgICAgICAgICBp
ZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKKyAgICAgICAgICAgICAgICB0aHJlYWQucnVu
X2luX21haW5fdGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgdGhyZWFkcy5hcHBl
bmQodGhyZWFkKQorCisgICAgICAgIHJldHVybiB0aHJlYWRzCisKKyAgICBkZWYgX3N0b3BfbGF5
b3V0X3Rlc3RfaGVscGVyKHNlbGYsIHByb2MpOgorICAgICAgICAiIiJTdG9wIHRoZSBsYXlvdXQg
dGVzdCBoZWxwZXIgYW5kIGNsb3NlcyBpdCBkb3duLiIiIgorICAgICAgICBpZiBwcm9jOgorICAg
ICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RvcHBpbmcgbGF5b3V0IHRlc3QgaGVscGVyIikKKyAg
ICAgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoInhcbiIpCisgICAgICAgICAgICBwcm9jLnN0ZGlu
LmNsb3NlKCkKKyAgICAgICAgICAgIHByb2Mud2FpdCgpCisKKyAgICBkZWYgX2lzX3NpbmdsZV90
aHJlYWRlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIHNob3VsZCBydW4g
YWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCisgICAgICAgIHJldHVybiBpbnQo
c2VsZi5fb3B0aW9ucy5udW1fdGVzdF9zaGVsbHMpID09IDEKKworICAgIGRlZiBfcnVuX3Rlc3Rz
KHNlbGYsIHRlc3Rfc2hlbGxfYmluYXJ5LCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKKyAg
ICAgICAgIiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KKworICAgICAgICBSZXR1
cm46IEEgdHVwbGUgKGZhaWx1cmVzLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAg
ICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgICAgICBmYWlsdXJlcyBp
cyBhIG1hcCBmcm9tIHRlc3QgdG8gbGlzdCBvZiBmYWlsdXJlIHR5cGVzCisgICAgICAgICAgICB0
aHJlYWRfdGltaW5ncyBpcyBhIGxpc3Qgb2YgZGljdHMgd2l0aCB0aGUgdG90YWwgcnVudGltZQor
ICAgICAgICAgICAgICBvZiBlYWNoIHRocmVhZCB3aXRoICduYW1lJywgJ251bV90ZXN0cycsICd0
b3RhbF90aW1lJyBwcm9wZXJ0aWVzCisgICAgICAgICAgICB0ZXN0X3RpbWluZ3MgaXMgYSBsaXN0
IG9mIHRpbWluZ3MgZm9yIGVhY2ggc2hhcmRlZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAg
b2YgdGhlIGZvcm0gW3RpbWUsIGRpcmVjdG9yeV9uYW1lLCBudW1fdGVzdHNdCisgICAgICAgICAg
ICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgcnVuIHRpbWVzIGZvciBlYWNo
IHRlc3QKKyAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0
X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9CisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3Vt
bWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cworICAgICAgICAiIiIKKyAg
ICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX3Rlc3Rfc2hlbGxfdGhyZWFkcyh0ZXN0
X3NoZWxsX2JpbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWxlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAgIyBXYWl0IGZvciB0
aGUgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGNvbGxlY3QgdGVzdCBmYWlsdXJlcy4KKyAgICAgICAg
ZmFpbHVyZXMgPSB7fQorICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQorICAgICAgICBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncyA9IFtdCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgorICAgICAgICAgICAg
ICAgIHdoaWxlIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgICMgTGV0IGl0
IHRpbWVvdXQgb2NjYXNpb25hbGx5IHNvIGl0IGNhbiBub3RpY2UgYQorICAgICAgICAgICAgICAg
ICAgICAjIEtleWJvYXJkSW50ZXJydXB0LiBBY3R1YWxseSwgdGhlIHRpbWVvdXQgZG9lc24ndAor
ICAgICAgICAgICAgICAgICAgICAjIHJlYWxseSBtYXR0ZXI6IGFwcGFyZW50bHkgaXQgc3VmZmlj
ZXMgdG8gbm90IHVzZQorICAgICAgICAgICAgICAgICAgICAjIGFuIGluZGVmaW5pdGUgYmxvY2tp
bmcgam9pbiBmb3IgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgIyBiZSBpbnRlcnJ1cHRpYmxl
IGJ5IEtleWJvYXJkSW50ZXJydXB0LgorICAgICAgICAgICAgICAgICAgICB0aHJlYWQuam9pbigw
LjEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1h
cnkpCisgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MuYXBwZW5kKHsnbmFtZSc6IHRocmVh
ZC5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVt
X3Rlc3RzJzogdGhyZWFkLmdldF9udW1fdGVzdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0b3RhbF90aW1lJzogdGhyZWFkLmdldF90b3RhbF90aW1lKCl9KQor
ICAgICAgICAgICAgICAgIHRlc3RfdGltaW5ncy51cGRhdGUodGhyZWFkLmdldF9kaXJlY3Rvcnlf
dGltaW5nX3N0YXRzKCkpCisgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Mu
ZXh0ZW5kKAorICAgICAgICAgICAgICAgICAgICB0aHJlYWQuZ2V0X2luZGl2aWR1YWxfdGVzdF9z
dGF0cygpKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBm
b3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCisg
ICAgICAgICAgICBzZWxmLl9zdG9wX2xheW91dF90ZXN0X2hlbHBlcihsYXlvdXRfdGVzdF9oZWxw
ZXJfcHJvYykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFk
czoKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBhIFRlc3RTaGVsbFRocmVhZCBkaWVkIGJl
Zm9yZSBub3JtYWwgY29tcGxldGlvbi4KKyAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvID0gdGhy
ZWFkLmdldF9leGNlcHRpb25faW5mbygpCisgICAgICAgICAgICBpZiBleGNlcHRpb25faW5mbyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRoZSB0aHJlYWQncyBleGNl
cHRpb24gaGVyZSB0byBtYWtlIGl0IGNsZWFyIHRoYXQKKyAgICAgICAgICAgICAgICAjIHRlc3Rp
bmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4KKyAg
ICAgICAgICAgICAgICAjIHdvdWxkIGJlIGFzc3VtZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAg
ICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNl
cHRpb25faW5mb1syXQorCisgICAgICAgICMgTWFrZSBzdXJlIHdlIHBpY2sgdXAgYW55IHJlbWFp
bmluZyB0ZXN0cy4KKyAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkK
KyAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncykKKworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgorICAg
ICAgICAiIiJSdW4gYWxsIG91ciB0ZXN0cyBvbiBhbGwgb3VyIHRlc3QgZmlsZXMuCisKKyAgICAg
ICAgRm9yIGVhY2ggdGVzdCBmaWxlLCB3ZSBydW4gZWFjaCB0ZXN0IHR5cGUuIElmIHRoZXJlIGFy
ZSBhbnkgZmFpbHVyZXMsCisgICAgICAgIHdlIGNvbGxlY3QgdGhlbSBmb3IgcmVwb3J0aW5nLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGEgc3VtbWFyeSBvYmpl
Y3QgdHJhY2tpbmcgdGhlIHRlc3QgcmVzdWx0cy4KKworICAgICAgICBSZXR1cm46CisgICAgICAg
ICAgV2UgcmV0dXJuIG5vbnplcm8gaWYgdGhlcmUgYXJlIHJlZ3Jlc3Npb25zIGNvbXBhcmVkIHRv
IHRoZSBsYXN0IHJ1bi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0X2Zp
bGVzOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGlt
ZSgpCisgICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5ID0gcGF0aF91dGlscy50ZXN0X3NoZWxsX3Bh
dGgoc2VsZi5fb3B0aW9ucy50YXJnZXQpCisKKyAgICAgICAgIyBTdGFydCB1cCBhbnkgaGVscGVy
IG5lZWRlZAorICAgICAgICBsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYyA9IE5vbmUKKyAgICAgICAg
aWYgbm90IHNlbGYuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBoZWxwZXJf
cGF0aCA9IHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgoCisgICAgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy50YXJnZXQpCisgICAgICAgICAgICBpZiBsZW4oaGVscGVyX3BhdGgp
OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YXJ0aW5nIGxheW91dCBoZWxwZXIg
JXMiICUgaGVscGVyX3BhdGgpCisgICAgICAgICAgICAgICAgbGF5b3V0X3Rlc3RfaGVscGVyX3By
b2MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgICAgICAgICBbaGVscGVyX3BhdGhd
LCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUsIHN0ZGVycj1Ob25lKQorICAgICAgICAgICAgICAgIGlzX3JlYWR5ID0gbGF5
b3V0X3Rlc3RfaGVscGVyX3Byb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBp
ZiBub3QgaXNfcmVhZHkuc3RhcnRzd2l0aCgncmVhZHknKToKKyAgICAgICAgICAgICAgICAgICAg
bG9nZ2luZy5lcnJvcigibGF5b3V0X3Rlc3RfaGVscGVyIGZhaWxlZCB0byBiZSByZWFkeSIpCisK
KyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzICh0aGVtZXMsIGZv
bnRzLCAuLi4pIGFyZSBjb3JyZWN0LgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub2No
ZWNrX3N5c19kZXBzOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3Rlc3Rf
c2hlbGxfYmluYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tY2hl
Y2stbGF5b3V0LXRlc3Qtc3lzLWRlcHMiXSkKKyAgICAgICAgICAgIGlmIHByb2Mud2FpdCgpICE9
IDA6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJBYm9ydGluZyBiZWNhdXNlIHN5c3Rl
bSBkZXBlbmRlbmNpZXMgY2hlY2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFp
bGVkLlxuIFRvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICItLW5vY2hlY2stc3lzLWRlcHMiKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEp
CisKKyAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5IVFRQX1NVQkRJUik6Cisg
ICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdGFydCgpCisKKyAgICAgICAgaWYgc2VsZi5f
Y29udGFpbnNfdGVzdHMoc2VsZi5XRUJTT0NLRVRfU1VCRElSKToKKyAgICAgICAgICAgIHNlbGYu
X3dlYnNvY2tldF9zZXJ2ZXIuc3RhcnQoKQorICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRf
c2VjdXJlX3NlcnZlci5TdGFydCgpCisKKyAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGlt
aW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSAoCisgICAgICAgICAgICBzZWxmLl9ydW5f
dGVzdHModGVzdF9zaGVsbF9iaW5hcnksIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KSkKKworICAgICAgICAjIFdlIGV4Y2x1
ZGUgdGhlIGNyYXNoZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRvIHJldHJ5LCBiZWNhdXNl
CisgICAgICAgICMgd2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50aWFsbHkgZmxha3kgY3Jh
c2ggYXMgYW4gZXJyb3IuCisgICAgICAgIGZhaWx1cmVzID0gc2VsZi5fZ2V0X2ZhaWx1cmVzKHJl
c3VsdF9zdW1tYXJ5LCBpbmNsdWRlX2NyYXNoZXM9RmFsc2UpCisgICAgICAgIHJldHJpZXMgPSAw
CisgICAgICAgIHJldHJ5X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICB3aGlsZSAo
cmV0cmllcyA8IHNlbGYuTlVNX1JFVFJZX09OX1VORVhQRUNURURfRkFJTFVSRSBhbmQKKyAgICAg
ICAgICAgICAgIGxlbihmYWlsdXJlcykpOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUmV0
cnlpbmcgJWQgdW5leHBlY3RlZCBmYWlsdXJlKHMpIiAlIGxlbihmYWlsdXJlcykpCisgICAgICAg
ICAgICByZXRyaWVzICs9IDEKKyAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkgPSBSZXN1bHRTdW1t
YXJ5KHNlbGYuX2V4cGVjdGF0aW9ucywgZmFpbHVyZXMua2V5cygpKQorICAgICAgICAgICAgc2Vs
Zi5fcnVuX3Rlc3RzKHRlc3Rfc2hlbGxfYmluYXJ5LCBmYWlsdXJlcy5rZXlzKCksIHJldHJ5X3N1
bW1hcnkpCisgICAgICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX2dldF9mYWlsdXJlcyhyZXRyeV9z
dW1tYXJ5LCBpbmNsdWRlX2NyYXNoZXM9VHJ1ZSkKKworICAgICAgICBzZWxmLl9zdG9wX2xheW91
dF90ZXN0X2hlbHBlcihsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYykKKyAgICAgICAgZW5kX3RpbWUg
PSB0aW1lLnRpbWUoKQorCisgICAgICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKHNl
bGYuX29wdGlvbnMsICd0aW1pbmcnKQorICAgICAgICBzZWxmLl9wcmludF90aW1pbmdfc3RhdGlz
dGljcyh3cml0ZSwgZW5kX3RpbWUgLSBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCisKKyAgICAgICAg
c2VsZi5fbWV0ZXIudXBkYXRlKCIiKQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyYm9z
ZToKKyAgICAgICAgICAgICMgV2Ugd3JpdGUgdGhpcyBibG9jayB0byBzdGRvdXQgZm9yIGNvbXBh
dGliaWxpdHkgd2l0aCB0aGUKKyAgICAgICAgICAgICMgYnVpbGRib3QgbG9nIHBhcnNlciwgd2hp
Y2ggb25seSBsb29rcyBhdCBzdGRvdXQsIG5vdCBzdGRlcnIgOigKKyAgICAgICAgICAgIHdyaXRl
ID0gbGFtYmRhIHM6IHN5cy5zdGRvdXQud3JpdGUoIiVzXG4iICUgcykKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKHNlbGYuX29wdGlvbnMs
ICdhY3R1YWwnKQorCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHdyaXRlLCBy
ZXN1bHRfc3VtbWFyeSkKKworICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lz
LnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgaWYgKExPR19ERVRBSUxFRF9QUk9HUkVTUyBpbiBz
ZWxmLl9vcHRpb25zLmxvZyBvcgorICAgICAgICAgICAgKExPR19VTkVYUEVDVEVEIGluIHNlbGYu
X29wdGlvbnMubG9nIGFuZAorICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRvdGFsICE9IHJl
c3VsdF9zdW1tYXJ5LmV4cGVjdGVkKSk6CisgICAgICAgICAgICBwcmludAorCisgICAgICAgICMg
VGhpcyBzdW1tYXJ5IGRhdGEgZ2V0cyB3cml0dGVuIHRvIHN0ZG91dCByZWdhcmRsZXNzIG9mIGxv
ZyBsZXZlbAorICAgICAgICBzZWxmLl9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHJlc3VsdF9zdW1t
YXJ5LnRvdGFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5LmV4cGVjdGVkKQorCisgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX3N1bW1h
cml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMocmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICByZXRy
eV9zdW1tYXJ5KQorICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModW5leHBl
Y3RlZF9yZXN1bHRzKQorCisgICAgICAgICMgV3JpdGUgdGhlIHNhbWUgZGF0YSB0byBsb2cgZmls
ZXMuCisgICAgICAgIHNlbGYuX3dyaXRlX2pzb25fZmlsZXModW5leHBlY3RlZF9yZXN1bHRzLCBy
ZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MpCisKKyAgICAgICAgIyBXcml0ZSB0aGUgc3VtbWFyeSB0byBkaXNrIChyZXN1
bHRzLmh0bWwpIGFuZCBtYXliZSBvcGVuIHRoZQorICAgICAgICAjIHRlc3Rfc2hlbGwgdG8gdGhp
cyBmaWxlLgorICAgICAgICB3cm90ZV9yZXN1bHRzID0gc2VsZi5fd3JpdGVfcmVzdWx0c19odG1s
X2ZpbGUocmVzdWx0X3N1bW1hcnkpCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm5vc2hv
d19yZXN1bHRzIGFuZCB3cm90ZV9yZXN1bHRzOgorICAgICAgICAgICAgc2VsZi5fc2hvd19yZXN1
bHRzX2h0bWxfZmlsZSgpCisKKyAgICAgICAgIyBJZ25vcmUgZmxha3kgZmFpbHVyZXMgYW5kIHVu
ZXhwZWN0ZWQgcGFzc2VzIHNvIHdlIGRvbid0IHR1cm4gdGhlCisgICAgICAgICMgYm90IHJlZCBm
b3IgdGhvc2UuCisgICAgICAgIHJldHVybiB1bmV4cGVjdGVkX3Jlc3VsdHNbJ251bV9yZWdyZXNz
aW9ucyddCisKKyAgICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgor
ICAgICAgICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkgd2hpbGUgcnVubmluZyB0ZXN0cy4iIiIKKyAg
ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAodGVz
dCwgZmFpbF9saXN0KSA9IHNlbGYuX3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0KCkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0ZXN0X2ZhaWx1cmVzLmRldGVybWluZV9yZXN1bHRfdHlwZShmYWls
X2xpc3QpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0
Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQodGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCisgICAg
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHRlc3QsIGZhaWxfbGlzdCwgcmVzdWx0LCBl
eHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiAoTE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNl
bGYuX29wdGlvbnMubG9nIGFuZAorICAgICAgICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5l
eHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwgb3IKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2lzX3NpbmdsZV90aHJlYWRlZCgpKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Rpc3Bs
YXlfZGV0YWlsZWRfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnkpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4cGVjdGVkIGFuZCBMT0dfVU5FWFBFQ1RF
RCBpbiBzZWxmLl9vcHRpb25zLmxvZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3By
aW50X3VuZXhwZWN0ZWRfdGVzdF9yZXN1bHQodGVzdCwgcmVzdWx0KQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9kaXNwbGF5X29uZV9saW5lX3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5KQorICAg
ICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgIHJldHVybgorCisg
ICAgZGVmIF9kaXNwbGF5X29uZV9saW5lX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToK
KyAgICAgICAgIiIiRGlzcGxheXMgdGhlIHByb2dyZXNzIHRocm91Z2ggdGhlIHRlc3QgcnVuLiIi
IgorICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoIlRlc3Rpbmc6ICVkIHJhbiBhcyBleHBlY3Rl
ZCwgJWQgZGlkbid0LCAlZCBsZWZ0IiAlCisgICAgICAgICAgICAocmVzdWx0X3N1bW1hcnkuZXhw
ZWN0ZWQsIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQsCisgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkucmVtYWluaW5nKSkKKworICAgIGRlZiBfZGlzcGxheV9kZXRhaWxlZF9wcm9ncmVzcyhz
ZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIkRpc3BsYXkgZGV0YWlsZWQgcHJvZ3Jl
c3Mgb3V0cHV0IHdoZXJlIHdlIHByaW50IHRoZSBkaXJlY3RvcnkgbmFtZQorICAgICAgICBhbmQg
b25lIGRvdCBmb3IgZWFjaCBjb21wbGV0ZWQgdGVzdC4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkKKyAg
ICAgICAgIi0tbG9nIGRldGFpbGVkLXByb2dyZXNzIi4iIiIKKyAgICAgICAgaWYgc2VsZi5fY3Vy
cmVudF90ZXN0X251bWJlciA9PSBsZW4oc2VsZi5fdGVzdF9maWxlc19saXN0KToKKyAgICAgICAg
ICAgIHJldHVybgorCisgICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtz
ZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGly
bmFtZSgKKyAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0
X3Rlc3QpKQorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9PSAiIjoKKyAg
ICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgKG5leHRfZGly
KQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgorCisgICAgICAgIHdo
aWxlIG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS5yZXN1bHRzOgorICAgICAgICAgICAgaWYg
bmV4dF9kaXIgIT0gc2VsZi5fY3VycmVudF9kaXI6CisgICAgICAgICAgICAgICAgc2VsZi5fbWV0
ZXIud3JpdGUoIiVzXG4iICUgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyKSkKKyAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogLiIgJSAobmV4dF9kaXIp
CisgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciArPSAi
LiIKKworICAgICAgICAgICAgaWYgKG5leHRfdGVzdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVj
dGVkX3Jlc3VsdHMgYW5kCisgICAgICAgICAgICAgICAgTE9HX1VORVhQRUNURUQgaW4gc2VsZi5f
b3B0aW9ucy5sb2cpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnVu
ZXhwZWN0ZWRfcmVzdWx0c1tuZXh0X3Rlc3RdCisgICAgICAgICAgICAgICAgc2VsZi5fbWV0ZXIu
d3JpdGUoIiVzXG4iICUgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpCisgICAgICAgICAgICAg
ICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdChuZXh0X3Rlc3QsIHJlc3VsdCkK
KyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIHNl
bGYuX2N1cnJlbnRfZGlyCisKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXIg
Kz0gMQorICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9PSBsZW4oc2Vs
Zi5fdGVzdF9maWxlc19saXN0KToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAg
ICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251
bWJlcl0KKyAgICAgICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAorICAgICAgICAg
ICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQorCisg
ICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZzoKKyAgICAgICAgICAgIHJlbWFpbl9z
dHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykKKyAgICAgICAgICAgIHNl
bGYuX21ldGVyLnVwZGF0ZSgiJXMlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciwgcmVtYWluX3N0cikpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSAoc2VsZi5fY3VycmVudF9w
cm9ncmVzc19zdHIpKQorCisgICAgZGVmIF9nZXRfZmFpbHVyZXMoc2VsZiwgcmVzdWx0X3N1bW1h
cnksIGluY2x1ZGVfY3Jhc2hlcyk6CisgICAgICAgICIiIkZpbHRlcnMgYSBkaWN0IG9mIHJlc3Vs
dHMgYW5kIHJldHVybnMgb25seSB0aGUgZmFpbHVyZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICByZXN1bHRfc3VtbWFyeTogdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3QgcnVuCisgICAgICAg
ICAgaW5jbHVkZV9jcmFzaGVzOiB3aGV0aGVyIGNyYXNoZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBv
dXRwdXQuCisgICAgICAgICAgICBXZSB1c2UgRmFsc2Ugd2hlbiBmaW5kaW5nIHRoZSBsaXN0IG9m
IGZhaWx1cmVzIHRvIHJldHJ5CisgICAgICAgICAgICB0byBzZWUgaWYgdGhlIHJlc3VsdHMgd2Vy
ZSBmbGFreS4gQWx0aG91Z2ggdGhlIGNyYXNoZXMgbWF5IGFsc28gYmUKKyAgICAgICAgICAgIGZs
YWt5LCB3ZSB0cmVhdCB0aGVtIGFzIGlmIHRoZXkgYXJlbid0IHNvIHRoYXQgdGhleSdyZSBub3Qg
aWdub3JlZC4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBhIGRpY3Qgb2YgZmlsZXMgLT4g
cmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgZmFpbGVkX3Jlc3VsdHMgPSB7fQorICAgICAg
ICBmb3IgdGVzdCwgcmVzdWx0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cy5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMu
UEFTUyBvcgorICAgICAgICAgICAgICAgIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFT
SCBhbmQgbm90IGluY2x1ZGVfY3Jhc2hlcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAg
ICAgICAgICAgIGZhaWxlZF9yZXN1bHRzW3Rlc3RdID0gcmVzdWx0CisKKyAgICAgICAgcmV0dXJu
IGZhaWxlZF9yZXN1bHRzCisKKyAgICBkZWYgX3N1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMo
c2VsZiwgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnkpOgorICAgICAgICAiIiJTdW1tYXJp
emUgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyBhIGRpY3QuCisKKyAgICAgICAgVE9ETyhkcHJh
bmtlKTogc3BsaXQgdGhpcyBkYXRhIHN0cnVjdHVyZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3M/CisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3Qg
ZnJvbSBpbml0aWFsIHRlc3QgcnVucworICAgICAgICAgIHJldHJ5X3N1bW1hcnk6IHN1bW1hcnkg
b2JqZWN0IGZyb20gZmluYWwgdGVzdCBydW4gb2YgcmV0cmllZCB0ZXN0cworICAgICAgICBSZXR1
cm5zOgorICAgICAgICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGEgc3VtbWFyeSBvZiB0aGUg
dW5leHBlY3RlZCByZXN1bHRzIGZyb20gdGhlCisgICAgICAgICAgcnVuLCB3aXRoIHRoZSBmb2xs
b3dpbmcgZmllbGRzOgorICAgICAgICAgICAgJ3ZlcnNpb24nOiBhIHZlcnNpb24gaW5kaWNhdG9y
ICgxIGluIHRoaXMgdmVyc2lvbikKKyAgICAgICAgICAgICdmaXhhYmxlJzogIyBvZiBmaXhhYmxl
IHRlc3RzIChOT1cgLSBQQVNTKQorICAgICAgICAgICAgJ3NraXBwZWQnOiAjIG9mIHNraXBwZWQg
dGVzdHMgKE5PVyAmIFNLSVBQRUQpCisgICAgICAgICAgICAnbnVtX3JlZ3Jlc3Npb25zJzogIyBv
ZiBub24tZmxha3kgZmFpbHVyZXMKKyAgICAgICAgICAgICdudW1fZmxha3knOiAjIG9mIGZsYWt5
IGZhaWx1cmVzCisgICAgICAgICAgICAnbnVtX3Bhc3Nlcyc6ICMgb2YgdW5leHBlY3RlZCBwYXNz
ZXMKKyAgICAgICAgICAgICd0ZXN0cyc6IGEgZGljdCBvZiB0ZXN0cyAtPiB7J2V4cGVjdGVkJzog
Jy4uLicsICdhY3R1YWwnOiAnLi4uJ30KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdHMgPSB7
fQorICAgICAgICByZXN1bHRzWyd2ZXJzaW9uJ10gPSAxCisKKyAgICAgICAgdGJlID0gcmVzdWx0
X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb24KKyAgICAgICAgdGJ0ID0gcmVzdWx0X3N1bW1h
cnkudGVzdHNfYnlfdGltZWxpbmUKKyAgICAgICAgcmVzdWx0c1snZml4YWJsZSddID0gbGVuKHRi
dFt0ZXN0X2V4cGVjdGF0aW9ucy5OT1ddIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTXSkKKyAgICAgICAgcmVzdWx0c1snc2tpcHBl
ZCddID0gbGVuKHRidFt0ZXN0X2V4cGVjdGF0aW9ucy5OT1ddICYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSkKKworICAgICAgICBu
dW1fcGFzc2VzID0gMAorICAgICAgICBudW1fZmxha3kgPSAwCisgICAgICAgIG51bV9yZWdyZXNz
aW9ucyA9IDAKKyAgICAgICAga2V5d29yZHMgPSB7fQorICAgICAgICBmb3IgaywgdiBpbiBUZXN0
RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBr
ZXl3b3Jkc1t2XSA9IGsudXBwZXIoKQorCisgICAgICAgIHRlc3RzID0ge30KKyAgICAgICAgZm9y
IGZpbGVuYW1lLCByZXN1bHQgaW4gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgaWYgYSB0ZXN0IGNyYXNoZWQgaW4g
dGhlIG9yaWdpbmFsIHJ1biwgd2UgaWdub3JlCisgICAgICAgICAgICAjIHdoZXRoZXIgb3Igbm90
IGl0IGNyYXNoZWQgd2hlbiB3ZSByZXRyaWVkIGl0IChpZiB3ZSByZXRyaWVkIGl0KSwKKyAgICAg
ICAgICAgICMgYW5kIGFsd2F5cyBjb25zaWRlciB0aGUgcmVzdWx0IG5vdCBmbGFreS4KKyAgICAg
ICAgICAgIHRlc3QgPSBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUp
CisgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRp
b25zX3N0cmluZyhmaWxlbmFtZSkKKyAgICAgICAgICAgIGFjdHVhbCA9IFtrZXl3b3Jkc1tyZXN1
bHRdXQorCisgICAgICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoK
KyAgICAgICAgICAgICAgICBudW1fcGFzc2VzICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0
ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIOgorICAgICAgICAgICAgICAgIG51bV9yZWdyZXNz
aW9ucyArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1l
IG5vdCBpbiByZXRyeV9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0czoKKyAgICAgICAgICAgICAg
ICAgICAgYWN0dWFsLmV4dGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVj
dGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGVuYW1lKS5zcGxpdCgiICIpKQorICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0g
MQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHJ5X3Jlc3Vs
dCA9IHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW2ZpbGVuYW1lXQorICAgICAgICAg
ICAgICAgICAgICBpZiByZXN1bHQgIT0gcmV0cnlfcmVzdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgYWN0dWFsLmFwcGVuZChrZXl3b3Jkc1tyZXRyeV9yZXN1bHRdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtX2ZsYWt5ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG51bV9yZWdyZXNzaW9ucyArPSAxCisKKyAgICAgICAgICAg
IHRlc3RzW3Rlc3RdID0ge30KKyAgICAgICAgICAgIHRlc3RzW3Rlc3RdWydleHBlY3RlZCddID0g
ZXhwZWN0ZWQKKyAgICAgICAgICAgIHRlc3RzW3Rlc3RdWydhY3R1YWwnXSA9ICIgIi5qb2luKGFj
dHVhbCkKKworICAgICAgICByZXN1bHRzWyd0ZXN0cyddID0gdGVzdHMKKyAgICAgICAgcmVzdWx0
c1snbnVtX3Bhc3NlcyddID0gbnVtX3Bhc3NlcworICAgICAgICByZXN1bHRzWydudW1fZmxha3kn
XSA9IG51bV9mbGFreQorICAgICAgICByZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXSA9IG51bV9y
ZWdyZXNzaW9ucworCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgX3dyaXRlX2pz
b25fZmlsZXMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKKyAgICAgICAgIiIi
V3JpdGVzIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0IHJ1biBhcyBKU09OIGZpbGVzIGludG8gdGhl
IHJlc3VsdHMKKyAgICAgICAgZGlyLgorCisgICAgICAgIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJl
bnQgZmlsZXMgd3JpdHRlbiBpbnRvIHRoZSByZXN1bHRzIGRpcjoKKyAgICAgICAgICB1bmV4cGVj
dGVkX3Jlc3VsdHMuanNvbjogQSBzaG9ydCBsaXN0IG9mIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMu
CisgICAgICAgICAgICBUaGlzIGlzIHVzZWQgYnkgdGhlIGJ1aWxkYm90cyB0byBkaXNwbGF5IHJl
c3VsdHMuCisgICAgICAgICAgZXhwZWN0YXRpb25zLmpzb246IFRoaXMgaXMgdXNlZCBieSB0aGUg
Zmxha2luZXNzIGRhc2hib2FyZC4KKyAgICAgICAgICByZXN1bHRzLmpzb246IEEgZnVsbCBsaXN0
IG9mIHRoZSByZXN1bHRzIC0gdXNlZCBieSB0aGUgZmxha2luZXNzCisgICAgICAgICAgICBkYXNo
Ym9hcmQgYW5kIHRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBkYXNoYm9hcmQuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHM6IGRpY3Qgb2YgdW5leHBlY3RlZCByZXN1
bHRzCisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IGZ1bGwgc3VtbWFyeSBvYmplY3QKKyAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogbGlzdCBvZiB0ZXN0IHRpbWVzICh1c2VkIGJ5
IHRoZSBmbGFraW5lc3MKKyAgICAgICAgICAgIGRhc2hib2FyZCkuCisgICAgICAgICIiIgorICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJXcml0aW5nIEpTT04gZmlsZXMgaW4gJXMuIiAlCisgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAg
dW5leHBlY3RlZF9maWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICJ1bmV4cGVjdGVkX3Jlc3VsdHMuanNvbiIpLCAidyIp
CisgICAgICAgIHVuZXhwZWN0ZWRfZmlsZS53cml0ZShzaW1wbGVqc29uLmR1bXBzKHVuZXhwZWN0
ZWRfcmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRfa2V5cz1UcnVl
LCBpbmRlbnQ9MikpCisgICAgICAgIHVuZXhwZWN0ZWRfZmlsZS5jbG9zZSgpCisKKyAgICAgICAg
IyBXcml0ZSBhIGpzb24gZmlsZSBvZiB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0IGZpbGUgZm9y
IHRoZSBsYXlvdXQKKyAgICAgICAgIyB0ZXN0cyBkYXNoYm9hcmQuCisgICAgICAgIGV4cGVjdGF0
aW9uc19maWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSwKKyAgICAgICAgICAgICJleHBlY3RhdGlvbnMuanNvbiIpLCAidyIpCisgICAgICAgIGV4
cGVjdGF0aW9uc19qc29uID0gXAorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmdldF9l
eHBlY3RhdGlvbnNfanNvbl9mb3JfYWxsX3BsYXRmb3JtcygpCisgICAgICAgIGV4cGVjdGF0aW9u
c19maWxlLndyaXRlKCJBRERfRVhQRUNUQVRJT05TKCIgKyBleHBlY3RhdGlvbnNfanNvbiArICIp
OyIpCisgICAgICAgIGV4cGVjdGF0aW9uc19maWxlLmNsb3NlKCkKKworICAgICAgICBqc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5KU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcigKKyAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMuYnVpbGRlcl9uYW1lLCBzZWxmLl9vcHRpb25zLmJ1aWxkX25h
bWUsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkX251bWJlciwgc2VsZi5fb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgIEJVSUxERVJfQkFTRV9VUkwsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1
bHRfc3VtbWFyeSwgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisgICAgICAgIGxvZ2dpbmcuZGVi
dWcoIkZpbmlzaGVkIHdyaXRpbmcgSlNPTiBmaWxlcy4iKQorCisgICAgZGVmIF9wcmludF9leHBl
Y3RlZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlLCByZXN1bHRfdHlw
ZV9zdHIpOgorICAgICAgICAiIiJQcmludCB0aGUgbnVtYmVyIG9mIHRoZSB0ZXN0cyBpbiBhIGdp
dmVuIHJlc3VsdCBjbGFzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNh
bGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAg
ICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgorICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5IC0gdGhl
IG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgcmVzdWx0cyB0byByZXBvcnQgb24KKyAgICAgICAg
ICByZXN1bHRfdHlwZSAtIHRoZSBwYXJ0aWN1bGFyIHJlc3VsdCB0eXBlIHRvIHJlcG9ydCBpbiB0
aGUgc3VtbWFyeS4KKyAgICAgICAgICByZXN1bHRfdHlwZV9zdHIgLSBhIHN0cmluZyBkZXNjcmlw
dGlvbiBvZiB0aGUgcmVzdWx0X3R5cGUuCisgICAgICAgICIiIgorICAgICAgICB0ZXN0cyA9IHNl
bGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRfdHlwZShyZXN1bHRfdHlwZSkK
KyAgICAgICAgbm93ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGVzdF9leHBl
Y3RhdGlvbnMuTk9XXQorICAgICAgICB3b250Zml4ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlf
dGltZWxpbmVbdGVzdF9leHBlY3RhdGlvbnMuV09OVEZJWF0KKyAgICAgICAgZGVmZXIgPSByZXN1
bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0ZXN0X2V4cGVjdGF0aW9ucy5ERUZFUl0KKwor
ICAgICAgICAjIFdlIHVzZSBhIGZhbmN5IGZvcm1hdCBzdHJpbmcgaW4gb3JkZXIgdG8gcHJpbnQg
dGhlIGRhdGEgb3V0IGluIGEKKyAgICAgICAgIyBuaWNlbHktYWxpZ25lZCB0YWJsZS4KKyAgICAg
ICAgZm10c3RyID0gKCJFeHBlY3Q6ICUlNWQgJSUtOHMgKCUlJWRkIG5vdywgJSUlZGQgZGVmZXIs
ICUlJWRkIHdvbnRmaXgpIgorICAgICAgICAgICAgICAgICAgJSAoc2VsZi5fbnVtX2RpZ2l0cyhu
b3cpLCBzZWxmLl9udW1fZGlnaXRzKGRlZmVyKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX251
bV9kaWdpdHMod29udGZpeCkpKQorICAgICAgICB3cml0ZShmbXRzdHIgJSAobGVuKHRlc3RzKSwg
cmVzdWx0X3R5cGVfc3RyLCBsZW4odGVzdHMgJiBub3cpLAorICAgICAgICAgICAgICBsZW4odGVz
dHMgJiBkZWZlciksIGxlbih0ZXN0cyAmIHdvbnRmaXgpKSkKKworICAgIGRlZiBfbnVtX2RpZ2l0
cyhzZWxmLCBudW0pOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5l
ZWRlZCB0byByZXByZXNlbnQgdGhlIGxlbmd0aCBvZiBhCisgICAgICAgIHNlcXVlbmNlLiIiIgor
ICAgICAgICBuZGlnaXRzID0gMQorICAgICAgICBpZiBsZW4obnVtKToKKyAgICAgICAgICAgIG5k
aWdpdHMgPSBpbnQobWF0aC5sb2cxMChsZW4obnVtKSkpICsgMQorICAgICAgICByZXR1cm4gbmRp
Z2l0cworCisgICAgZGVmIF9wcmludF90aW1pbmdfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwgdG90
YWxfdGltZSwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0b3J5X3Rlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJSZWNv
cmQgdGltaW5nLXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciB0aGUgdGVzdCBydW4uCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChl
LmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUu
CisgICAgICAgICAgdG90YWxfdGltZTogdG90YWwgZWxhcHNlZCB0aW1lIChpbiBzZWNvbmRzKSBm
b3IgdGhlIHRlc3QgcnVuCisgICAgICAgICAgdGhyZWFkX3RpbWluZ3M6IHdhbGwgY2xvY2sgdGlt
ZSBlYWNoIHRocmVhZCByYW4gZm9yCisgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5nczog
dGltaW5nIGJ5IGRpcmVjdG9yeQorICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiB0
aW1pbmcgYnkgZmlsZQorICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBm
b3IgdGhlIHRlc3QgcnVuCisgICAgICAgICIiIgorICAgICAgICB3cml0ZSgiVGVzdCB0aW1pbmc6
IikKKyAgICAgICAgd3JpdGUoIiAgJTYuMmYgdG90YWwgdGVzdGluZyB0aW1lIiAlIHRvdGFsX3Rp
bWUpCisgICAgICAgIHdyaXRlKCIiKQorICAgICAgICB3cml0ZSgiVGhyZWFkIHRpbWluZzoiKQor
ICAgICAgICBjdW1sX3RpbWUgPSAwCisgICAgICAgIGZvciB0IGluIHRocmVhZF90aW1pbmdzOgor
ICAgICAgICAgICAgd3JpdGUoIiAgICAlMTBzOiAlNWQgdGVzdHMsICU2LjJmIHNlY3MiICUKKyAg
ICAgICAgICAgICAgICAgICh0WyduYW1lJ10sIHRbJ251bV90ZXN0cyddLCB0Wyd0b3RhbF90aW1l
J10pKQorICAgICAgICAgICAgY3VtbF90aW1lICs9IHRbJ3RvdGFsX3RpbWUnXQorICAgICAgICB3
cml0ZSgiICAgJTYuMmYgY3VtdWxhdGl2ZSwgJTYuMmYgb3B0aW1hbCIgJQorICAgICAgICAgICAg
ICAoY3VtbF90aW1lLCBjdW1sX3RpbWUgLyBpbnQoc2VsZi5fb3B0aW9ucy5udW1fdGVzdF9zaGVs
bHMpKSkKKyAgICAgICAgd3JpdGUoIiIpCisKKyAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRl
X3Rlc3Rfc3RhdGlzdGljcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAg
IHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyh3cml0ZSwgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeSkKKyAgICAgICAgc2VsZi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3Mod3JpdGUs
IGRpcmVjdG9yeV90ZXN0X3RpbWluZ3MpCisKKyAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0
X3N0YXRpc3RpY3Moc2VsZiwgd3JpdGUsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKKyAgICAg
ICAgIiIiUHJpbnRzIGFnZ3JlZ2F0ZSBzdGF0aXN0aWNzIChlLmcuIG1lZGlhbiwgbWVhbiwgZXRj
LikgZm9yIGFsbCB0ZXN0cy4KKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxs
YmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAg
ICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3M6IExpc3Qgb2YgdGVzdF9zaGVsbF90aHJlYWQuVGVzdFN0YXRzIGZvciBhbGwKKyAgICAgICAg
ICAgICAgdGVzdHMuCisgICAgICAgICIiIgorICAgICAgICB0ZXN0X3R5cGVzID0gaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3NbMF0udGltZV9mb3JfZGlmZnMua2V5cygpCisgICAgICAgIHRpbWVzX2Zv
cl90ZXN0X3NoZWxsID0gW10KKyAgICAgICAgdGltZXNfZm9yX2RpZmZfcHJvY2Vzc2luZyA9IFtd
CisgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGUgPSB7fQorICAgICAgICBmb3IgdGVzdF90eXBl
IGluIHRlc3RfdHlwZXM6CisgICAgICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlw
ZV0gPSBbXQorCisgICAgICAgIGZvciB0ZXN0X3N0YXRzIGluIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzOgorICAgICAgICAgICAgdGltZXNfZm9yX3Rlc3Rfc2hlbGwuYXBwZW5kKHRlc3Rfc3RhdHMu
dGVzdF9ydW5fdGltZSkKKyAgICAgICAgICAgIHRpbWVzX2Zvcl9kaWZmX3Byb2Nlc3NpbmcuYXBw
ZW5kKAorICAgICAgICAgICAgICAgIHRlc3Rfc3RhdHMudG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
KQorICAgICAgICAgICAgdGltZV9mb3JfZGlmZnMgPSB0ZXN0X3N0YXRzLnRpbWVfZm9yX2RpZmZz
CisgICAgICAgICAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6CisgICAgICAgICAgICAg
ICAgdGltZXNfcGVyX3Rlc3RfdHlwZVt0ZXN0X3R5cGVdLmFwcGVuZCgKKyAgICAgICAgICAgICAg
ICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlXSkKKworICAgICAgICBzZWxmLl9wcmludF9z
dGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mod3JpdGUsCisgICAgICAgICAgICAiUEVSIFRFU1Qg
VElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMpOiIsIHRpbWVzX2Zvcl90ZXN0X3NoZWxsKQorICAg
ICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mod3JpdGUsCisgICAg
ICAgICAgICAiUEVSIFRFU1QgRElGRiBQUk9DRVNTSU5HIFRJTUVTIChzZWNvbmRzKToiLAorICAg
ICAgICAgICAgdGltZXNfZm9yX2RpZmZfcHJvY2Vzc2luZykKKyAgICAgICAgZm9yIHRlc3RfdHlw
ZSBpbiB0ZXN0X3R5cGVzOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfc3RhdGlzdGljc19mb3Jf
dGVzdF90aW1pbmdzKHdyaXRlLAorICAgICAgICAgICAgICAgICJQRVIgVEVTVCBUSU1FUyBCWSBU
RVNUIFRZUEU6ICVzIiAlIHRlc3RfdHlwZSwKKyAgICAgICAgICAgICAgICB0aW1lc19wZXJfdGVz
dF90eXBlW3Rlc3RfdHlwZV0pCisKKyAgICBkZWYgX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1l
cyhzZWxmLCB3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJQcmludHMgdGhl
IHJ1biB0aW1lcyBmb3Igc2xvdywgdGltZW91dCBhbmQgY3Jhc2ggdGVzdHMuCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwg
YSBMb2dnaW5nV3JpdGVyKSBvcgorICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgorICAg
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9mIHRlc3Rfc2hlbGxfdGhyZWFk
LlRlc3RTdGF0cyBmb3IgYWxsCisgICAgICAgICAgICAgIHRlc3RzLgorICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmb3IgdGVzdCBydW4KKyAgICAgICAgIiIiCisgICAg
ICAgICMgUmV2ZXJzZS1zb3J0IGJ5IHRoZSB0aW1lIHNwZW50IGluIHRlc3Rfc2hlbGwuCisgICAg
ICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLnNvcnQobGFtYmRhIGEsIGI6CisgICAgICAgICAg
ICBjbXAoYi50ZXN0X3J1bl90aW1lLCBhLnRlc3RfcnVuX3RpbWUpKQorCisgICAgICAgIG51bV9w
cmludGVkID0gMAorICAgICAgICBzbG93X3Rlc3RzID0gW10KKyAgICAgICAgdGltZW91dF9vcl9j
cmFzaF90ZXN0cyA9IFtdCisgICAgICAgIHVuZXhwZWN0ZWRfc2xvd190ZXN0cyA9IFtdCisgICAg
ICAgIGZvciB0ZXN0X3R1cGxlIGluIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOgorICAgICAgICAg
ICAgZmlsZW5hbWUgPSB0ZXN0X3R1cGxlLmZpbGVuYW1lCisgICAgICAgICAgICBpc190aW1lb3V0
X2NyYXNoX29yX3Nsb3cgPSBGYWxzZQorICAgICAgICAgICAgaWYgc2VsZi5fZXhwZWN0YXRpb25z
Lmhhc19tb2RpZmllcihmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuU0xPVyk6CisgICAgICAgICAgICAgICAg
aXNfdGltZW91dF9jcmFzaF9vcl9zbG93ID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNsb3dfdGVz
dHMuYXBwZW5kKHRlc3RfdHVwbGUpCisKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIGluIHJlc3Vs
dF9zdW1tYXJ5LmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1t
YXJ5LnJlc3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB0ZXN0
X2V4cGVjdGF0aW9ucy5USU1FT1VUIG9yCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PSB0
ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCk6CisgICAgICAgICAgICAgICAgICAgIGlzX3RpbWVvdXRf
Y3Jhc2hfb3Jfc2xvdyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dF9vcl9jcmFz
aF90ZXN0cy5hcHBlbmQodGVzdF90dXBsZSkKKworICAgICAgICAgICAgaWYgKG5vdCBpc190aW1l
b3V0X2NyYXNoX29yX3Nsb3cgYW5kCisgICAgICAgICAgICAgICAgbnVtX3ByaW50ZWQgPCBzZWxm
Ll9vcHRpb25zLm51bV9zbG93X3Rlc3RzX3RvX2xvZyk6CisgICAgICAgICAgICAgICAgbnVtX3By
aW50ZWQgPSBudW1fcHJpbnRlZCArIDEKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3Nsb3df
dGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCisKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNl
bGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcod3JpdGUsICIlcyBzbG93ZXN0IHRlc3RzIHRoYXQg
YXJlIG5vdCAiCisgICAgICAgICAgICAibWFya2VkIGFzIFNMT1cgYW5kIGRpZCBub3QgdGltZW91
dC9jcmFzaDoiICUKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubnVtX3Nsb3dfdGVzdHNfdG9f
bG9nLCB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMpCisgICAgICAgIHdyaXRlKCIiKQorICAgICAgICBz
ZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgbWFya2VkIGFzIFNMT1c6
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93X3Rlc3RzKQorICAg
ICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0
ZSwgIlRlc3RzIHRoYXQgdGltZWQgb3V0IG9yIGNyYXNoZWQ6IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzKQorICAgICAgICB3cml0
ZSgiIikKKworICAgIGRlZiBfcHJpbnRfdGVzdF9saXN0X3RpbWluZyhzZWxmLCB3cml0ZSwgdGl0
bGUsIHRlc3RfbGlzdCk6CisgICAgICAgICIiIlByaW50IHRpbWluZyBpbmZvIGZvciBlYWNoIHRl
c3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0
ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAgIHN5cy5z
dGRvdXQud3JpdGUuCisgICAgICAgICAgdGl0bGU6IHNlY3Rpb24gaGVhZGluZworICAgICAgICAg
IHRlc3RfbGlzdDogdGVzdHMgdGhhdCBmYWxsIGluIHRoaXMgc2VjdGlvbgorICAgICAgICAiIiIK
KyAgICAgICAgd3JpdGUodGl0bGUpCisgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfbGlz
dDoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gdGVzdF90dXBsZS5maWxlbmFtZVtsZW4oCisgICAg
ICAgICAgICAgICAgcGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCisgICAgICAg
ICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAgICAgICAg
dGVzdF9ydW5fdGltZSA9IHJvdW5kKHRlc3RfdHVwbGUudGVzdF9ydW5fdGltZSwgMSkKKyAgICAg
ICAgICAgIHdyaXRlKCIgICVzIHRvb2sgJXMgc2Vjb25kcyIgJSAoZmlsZW5hbWUsIHRlc3RfcnVu
X3RpbWUpKQorCisgICAgZGVmIF9wcmludF9kaXJlY3RvcnlfdGltaW5ncyhzZWxmLCB3cml0ZSwg
ZGlyZWN0b3J5X3Rlc3RfdGltaW5ncyk6CisgICAgICAgICIiIlByaW50IHRpbWluZyBpbmZvIGJ5
IGRpcmVjdG9yeSBmb3IgYW55IGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgdGFrZSA+IDEwIHNl
Y29uZHMgdG8gcnVuLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgd3JpdGU6IEEgY2FsbGJh
Y2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgorICAgICAgICAg
ICAgICBzeXMuc3Rkb3V0LndyaXRlLgorICAgICAgICAgIGRpcmVjdG9yeV90ZXN0X3RpbWluZzog
dGltZSBpbmZvIGZvciBlYWNoIGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgdGltaW5n
cyA9IFtdCisgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gZGlyZWN0b3J5X3Rlc3RfdGltaW5nczoK
KyAgICAgICAgICAgIG51bV90ZXN0cywgdGltZV9mb3JfZGlyZWN0b3J5ID0gZGlyZWN0b3J5X3Rl
c3RfdGltaW5nc1tkaXJlY3RvcnldCisgICAgICAgICAgICB0aW1pbmdzLmFwcGVuZCgocm91bmQo
dGltZV9mb3JfZGlyZWN0b3J5LCAxKSwgZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bV90ZXN0cykpCisgICAgICAgIHRpbWluZ3Muc29ydCgpCisKKyAgICAgICAgd3Jp
dGUoIlRpbWUgdG8gcHJvY2VzcyBzbG93ZXN0IHN1YmRpcmVjdG9yaWVzOiIpCisgICAgICAgIG1p
bl9zZWNvbmRzX3RvX3ByaW50ID0gMTAKKyAgICAgICAgZm9yIHRpbWluZyBpbiB0aW1pbmdzOgor
ICAgICAgICAgICAgaWYgdGltaW5nWzBdID4gbWluX3NlY29uZHNfdG9fcHJpbnQ6CisgICAgICAg
ICAgICAgICAgd3JpdGUoIiAgJXMgdG9vayAlcyBzZWNvbmRzIHRvIHJ1biAlcyB0ZXN0cy4iICUg
KHRpbWluZ1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdbMF0sIHRpbWluZ1syXSkp
CisgICAgICAgIHdyaXRlKCIiKQorCisgICAgZGVmIF9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0
X3RpbWluZ3Moc2VsZiwgd3JpdGUsIHRpdGxlLCB0aW1pbmdzKToKKyAgICAgICAgIiIiUHJpbnRz
IHRoZSBtZWRpYW4sIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgdmFsdWVzIGlu
CisgICAgICAgIHRpbWluZ3MuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBj
YWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAg
ICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgdGl0bGU6IFRpdGxlIGZvciB0
aGVzZSB0aW1pbmdzLgorICAgICAgICAgIHRpbWluZ3M6IEEgbGlzdCBvZiBmbG9hdHMgcmVwcmVz
ZW50aW5nIHRpbWVzLgorICAgICAgICAiIiIKKyAgICAgICAgd3JpdGUodGl0bGUpCisgICAgICAg
IHRpbWluZ3Muc29ydCgpCisKKyAgICAgICAgbnVtX3Rlc3RzID0gbGVuKHRpbWluZ3MpCisgICAg
ICAgIHBlcmNlbnRpbGU5MCA9IHRpbWluZ3NbaW50KC45ICogbnVtX3Rlc3RzKV0KKyAgICAgICAg
cGVyY2VudGlsZTk5ID0gdGltaW5nc1tpbnQoLjk5ICogbnVtX3Rlc3RzKV0KKworICAgICAgICBp
ZiBudW1fdGVzdHMgJSAyID09IDE6CisgICAgICAgICAgICBtZWRpYW4gPSB0aW1pbmdzWygobnVt
X3Rlc3RzIC0gMSkgLyAyKSAtIDFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb3dlciA9
IHRpbWluZ3NbbnVtX3Rlc3RzIC8gMiAtIDFdCisgICAgICAgICAgICB1cHBlciA9IHRpbWluZ3Nb
bnVtX3Rlc3RzIC8gMl0KKyAgICAgICAgICAgIG1lZGlhbiA9IChmbG9hdChsb3dlciArIHVwcGVy
KSkgLyAyCisKKyAgICAgICAgbWVhbiA9IHN1bSh0aW1pbmdzKSAvIG51bV90ZXN0cworCisgICAg
ICAgIGZvciB0aW1lIGluIHRpbWluZ3M6CisgICAgICAgICAgICBzdW1fb2ZfZGV2aWF0aW9ucyA9
IG1hdGgucG93KHRpbWUgLSBtZWFuLCAyKQorCisgICAgICAgIHN0ZF9kZXZpYXRpb24gPSBtYXRo
LnNxcnQoc3VtX29mX2RldmlhdGlvbnMgLyBudW1fdGVzdHMpCisgICAgICAgIHdyaXRlKCIgIE1l
ZGlhbjogICAgICAgICAgJTYuM2YiICUgbWVkaWFuKQorICAgICAgICB3cml0ZSgiICBNZWFuOiAg
ICAgICAgICAgICU2LjNmIiAlIG1lYW4pCisgICAgICAgIHdyaXRlKCIgIDkwdGggcGVyY2VudGls
ZTogJTYuM2YiICUgcGVyY2VudGlsZTkwKQorICAgICAgICB3cml0ZSgiICA5OXRoIHBlcmNlbnRp
bGU6ICU2LjNmIiAlIHBlcmNlbnRpbGU5OSkKKyAgICAgICAgd3JpdGUoIiAgU3RhbmRhcmQgZGV2
OiAgICAlNi4zZiIgJSBzdGRfZGV2aWF0aW9uKQorICAgICAgICB3cml0ZSgiIikKKworICAgIGRl
ZiBfcHJpbnRfcmVzdWx0X3N1bW1hcnkoc2VsZiwgd3JpdGUsIHJlc3VsdF9zdW1tYXJ5KToKKyAg
ICAgICAgIiIiUHJpbnQgYSBzaG9ydCBzdW1tYXJ5IGFib3V0IGhvdyBtYW55IHRlc3RzIHBhc3Nl
ZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRl
IGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0
ZG91dC53cml0ZS4KKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogaW5mb3JtYXRpb24gdG8gbG9n
CisgICAgICAgICIiIgorICAgICAgICBmYWlsZWQgPSBsZW4ocmVzdWx0X3N1bW1hcnkuZmFpbHVy
ZXMpCisgICAgICAgIHNraXBwZWQgPSBsZW4oCisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50
ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSkKKyAgICAgICAgdG90
YWwgPSByZXN1bHRfc3VtbWFyeS50b3RhbAorICAgICAgICBwYXNzZWQgPSB0b3RhbCAtIGZhaWxl
ZCAtIHNraXBwZWQKKyAgICAgICAgcGN0X3Bhc3NlZCA9IDAuMAorICAgICAgICBpZiB0b3RhbCA+
IDA6CisgICAgICAgICAgICBwY3RfcGFzc2VkID0gZmxvYXQocGFzc2VkKSAqIDEwMCAvIHRvdGFs
CisKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHdyaXRlKCI9PiBSZXN1bHRzOiAlZC8lZCB0
ZXN0cyBwYXNzZWQgKCUuMWYlJSkiICUKKyAgICAgICAgICAgICAgICAgICAgIChwYXNzZWQsIHRv
dGFsLCBwY3RfcGFzc2VkKSkKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50
X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAg
IHRlc3RfZXhwZWN0YXRpb25zLk5PVywgIlRlc3RzIHRvIGJlIGZpeGVkIGZvciB0aGUgY3VycmVu
dCByZWxlYXNlIikKKworICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVz
dWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuREVGRVIsCisgICAgICAgICAgICAiVGVzdHMgd2UnbGwgZml4IGluIHRo
ZSBmdXR1cmUgaWYgdGhleSBmYWlsIChERUZFUikiKQorCisgICAgICAgIHdyaXRlKCIiKQorICAg
ICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1h
cnksCisgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5XT05URklYLAorICAgICAgICAgICAg
IlRlc3RzIHRoYXQgd2lsbCBvbmx5IGJlIGZpeGVkIGlmIHRoZXkgY3Jhc2ggKFdPTlRGSVgpIikK
KworICAgIGRlZiBfcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkoc2VsZiwgd3JpdGUsIHJlc3Vs
dF9zdW1tYXJ5LCB0aW1lbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlYWRpbmcpOgorICAgICAgICAiIiJQcmludCBhIHN1bW1hcnkgYmxvY2sgb2YgcmVzdWx0cyBm
b3IgYSBwYXJ0aWN1bGFyIHRpbWVsaW5lIG9mIHRlc3QuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdX
cml0ZXIpIG9yCisgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgcmVz
dWx0X3N1bW1hcnk6IHN1bW1hcnkgdG8gcHJpbnQgcmVzdWx0cyBmb3IKKyAgICAgICAgICB0aW1l
bGluZTogdGhlIHRpbWVsaW5lIHRvIHByaW50IHJlc3VsdHMgZm9yIChOT1QsIFdPTlRGSVgsIGV0
Yy4pCisgICAgICAgICAgaGVhZGluZzogYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSB0aW1l
bGluZQorICAgICAgICAiIiIKKyAgICAgICAgdG90YWwgPSBsZW4ocmVzdWx0X3N1bW1hcnkudGVz
dHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKQorICAgICAgICBub3RfcGFzc2luZyA9ICh0b3RhbCAt
CisgICAgICAgICAgIGxlbihyZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0
X2V4cGVjdGF0aW9ucy5QQVNTXSAmCisgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50ZXN0
c19ieV90aW1lbGluZVt0aW1lbGluZV0pKQorICAgICAgICB3cml0ZSgiPT4gJXMgKCVkKToiICUg
KGhlYWRpbmcsIG5vdF9wYXNzaW5nKSkKKworICAgICAgICBmb3IgcmVzdWx0IGluIFRlc3RFeHBl
Y3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX09SREVSOgorICAgICAgICAgICAgaWYgcmVzdWx0ID09
IHRlc3RfZXhwZWN0YXRpb25zLlBBU1M6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgIHJlc3VsdHMgPSAocmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb25bcmVz
dWx0XSAmCisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3Rp
bWVsaW5lW3RpbWVsaW5lXSkKKyAgICAgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmls
ZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlNbcmVzdWx0XQorICAgICAgICAgICAgaWYgbm90X3Bh
c3NpbmcgYW5kIGxlbihyZXN1bHRzKToKKyAgICAgICAgICAgICAgICBwY3QgPSBsZW4ocmVzdWx0
cykgKiAxMDAuMCAvIG5vdF9wYXNzaW5nCisgICAgICAgICAgICAgICAgd3JpdGUoIiAgJTVkICUt
MjRzICglNC4xZiUlKSIgJSAobGVuKHJlc3VsdHMpLAorICAgICAgICAgICAgICAgICAgICAgIGRl
c2NbbGVuKHJlc3VsdHMpICE9IDFdLCBwY3QpKQorCisgICAgZGVmIF9wcmludF9vbmVfbGluZV9z
dW1tYXJ5KHNlbGYsIHRvdGFsLCBleHBlY3RlZCk6CisgICAgICAgICIiIlByaW50IGEgb25lLWxp
bmUgc3VtbWFyeSBvZiB0aGUgdGVzdCBydW4gdG8gc3Rkb3V0LgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgdG90YWw6IHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4KKyAgICAgICAgICBleHBl
Y3RlZDogbnVtYmVyIG9mIGV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIHVu
ZXhwZWN0ZWQgPSB0b3RhbCAtIGV4cGVjdGVkCisgICAgICAgIGlmIHVuZXhwZWN0ZWQgPT0gMDoK
KyAgICAgICAgICAgIHByaW50ICJBbGwgJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLiIgJSBleHBl
Y3RlZAorICAgICAgICBlbGlmIGV4cGVjdGVkID09IDE6CisgICAgICAgICAgICBwcmludCAiMSB0
ZXN0IHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OiIgJSB1bmV4cGVjdGVkCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBwcmludCAiJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRu
J3Q6IiAlIChleHBlY3RlZCwKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKQorCisgICAgZGVm
IF9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzKToKKyAg
ICAgICAgIiIiUHJpbnRzIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgaW4gYSBodW1hbi1yZWFkYWJs
ZSBmb3JtIHRvIHN0ZG91dC4iIiIKKyAgICAgICAgcGFzc2VzID0ge30KKyAgICAgICAgZmxha3kg
PSB7fQorICAgICAgICByZWdyZXNzaW9ucyA9IHt9CisKKyAgICAgICAgaWYgbGVuKHVuZXhwZWN0
ZWRfcmVzdWx0c1sndGVzdHMnXSk6CisgICAgICAgICAgICBwcmludCAiIgorCisgICAgICAgIGZv
ciB0ZXN0LCByZXN1bHRzIGluIHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXS5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdHNbJ2FjdHVhbCddLnNwbGl0KCIgIikKKyAg
ICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0c1snZXhwZWN0ZWQnXS5zcGxpdCgiICIpCisgICAg
ICAgICAgICBpZiBhY3R1YWwgPT0gWydQQVNTJ106CisgICAgICAgICAgICAgICAgaWYgJ0NSQVNI
JyBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3Rz
KHBhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBl
Y3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0KQorICAgICAgICAgICAgICAgIGVsaWYgJ1RJTUVPVVQnIGluIGV4
cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRv
IHRpbWVvdXQsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg
ICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCB0byBmYWlsLCBidXQgcGFzc2VkJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICBl
bGlmIGxlbihhY3R1YWwpID4gMToKKyAgICAgICAgICAgICAgICAjIFdlIGdyb3VwIGZsYWt5IHRl
c3RzIGJ5IHRoZSBmaXJzdCBhY3R1YWwgcmVzdWx0IHdlIGdvdC4KKyAgICAgICAgICAgICAgICBf
YWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZmxha3ksIGFjdHVhbFswXSwgdGVzdCkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgX2FkZF90b19kaWN0X29mX2xpc3RzKHJlZ3Jlc3Npb25z
LCByZXN1bHRzWydhY3R1YWwnXSwgdGVzdCkKKworICAgICAgICBpZiBsZW4ocGFzc2VzKToKKyAg
ICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHBhc3Nlcy5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgICAgICBwcmludCAiJXM6ICglZCkiICUgKGtleSwgbGVuKHRlc3RzKSkKKyAgICAgICAgICAg
ICAgICB0ZXN0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAg
ICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMiICUgdGVzdAorICAgICAgICAgICAgICAgIHBy
aW50CisKKyAgICAgICAgaWYgbGVuKGZsYWt5KToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9
IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUworICAgICAgICAg
ICAgZm9yIGtleSwgdGVzdHMgaW4gZmxha3kuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQor
ICAgICAgICAgICAgICAgIHByaW50ICJVbmV4cGVjdGVkIGZsYWtpbmVzczogJXMgKCVkKSIgJSAo
CisgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNbcmVzdWx0XVsxXSwgbGVuKHRlc3RzKSkK
KyAgICAgICAgICAgICAgICB0ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0
IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmV4cGVjdGVkX3Jlc3Vs
dHNbJ3Rlc3RzJ11bdGVzdF0KKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0Wydh
Y3R1YWwnXS5zcGxpdCgiICIpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcmVzdWx0
WydleHBlY3RlZCddLnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVz
dEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAg
ICAgICAgICBuZXdfZXhwZWN0YXRpb25zX2xpc3QgPSBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4
cGVjdGVkKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXMgPSAlcyIgJSAodGVzdCwg
IiAiLmpvaW4obmV3X2V4cGVjdGF0aW9uc19saXN0KSkKKyAgICAgICAgICAgICAgICBwcmludAor
CisgICAgICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbnMg
PSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlMKKyAgICAgICAg
ICAgIGZvciBrZXksIHRlc3RzIGluIHJlZ3Jlc3Npb25zLml0ZXJpdGVtcygpOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OU1trZXkubG93
ZXIoKV0KKyAgICAgICAgICAgICAgICBwcmludCAiUmVncmVzc2lvbnM6IFVuZXhwZWN0ZWQgJXMg
OiAoJWQpIiAlICgKKyAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBs
ZW4odGVzdHMpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAg
IGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyA9ICVz
IiAlICh0ZXN0LCBrZXkpCisgICAgICAgICAgICAgICAgcHJpbnQKKworICAgICAgICBpZiBsZW4o
dW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKSBhbmQgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgor
ICAgICAgICAgICAgcHJpbnQgIi0iICogNzgKKworICAgIGRlZiBfcHJpbnRfdW5leHBlY3RlZF90
ZXN0X3Jlc3VsdChzZWxmLCB0ZXN0LCByZXN1bHQpOgorICAgICAgICAiIiJQcmludHMgb25lIHVu
ZXhwZWN0ZWQgdGVzdCByZXN1bHQgbGluZS4iIiIKKyAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3Rh
dGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHRdWzBdCisgICAgICAgIHNl
bGYuX21ldGVyLndyaXRlKCIgICVzIC0+IHVuZXhwZWN0ZWQgJXNcbiIgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAocGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3QpLCBk
ZXNjKSkKKworICAgIGRlZiBfd3JpdGVfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0X3N1
bW1hcnkpOgorICAgICAgICAiIiJXcml0ZSByZXN1bHRzLmh0bWwgd2hpY2ggaXMgYSBzdW1tYXJ5
IG9mIHRlc3RzIHRoYXQgZmFpbGVkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcmVzdWx0
X3N1bW1hcnk6IGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cyA6KQorCisgICAgICAgIFJldHVybnM6
CisgICAgICAgICAgVHJ1ZSBpZiBhbnkgcmVzdWx0cyB3ZXJlIHdyaXR0ZW4gKHNpbmNlIGV4cGVj
dGVkIGZhaWx1cmVzIG1heSBiZQorICAgICAgICAgIG9taXR0ZWQpCisgICAgICAgICIiIgorICAg
ICAgICAjIHRlc3QgZmFpbHVyZXMKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5mdWxsX3Jlc3Vs
dHNfaHRtbDoKKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSByZXN1bHRfc3VtbWFyeS5mYWlsdXJl
cy5rZXlzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVuZXhwZWN0ZWRfZmFpbHVyZXMg
PSBzZWxmLl9nZXRfZmFpbHVyZXMocmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgaW5j
bHVkZV9jcmFzaGVzPVRydWUpCisgICAgICAgICAgICB0ZXN0X2ZpbGVzID0gdW5leHBlY3RlZF9m
YWlsdXJlcy5rZXlzKCkKKyAgICAgICAgaWYgbm90IGxlbih0ZXN0X2ZpbGVzKToKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG91dF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlc3VsdHMuaHRtbCIpCisgICAgICAgIG91dF9maWxlID0gb3BlbihvdXRf
ZmlsZW5hbWUsICd3JykKKyAgICAgICAgIyBoZWFkZXIKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy5mdWxsX3Jlc3VsdHNfaHRtbDoKKyAgICAgICAgICAgIGgyID0gIlRlc3QgRmFpbHVyZXMiCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBoMiA9ICJVbmV4cGVjdGVkIFRlc3QgRmFpbHVyZXMi
CisgICAgICAgIG91dF9maWxlLndyaXRlKCI8aHRtbD48aGVhZD48dGl0bGU+TGF5b3V0IFRlc3Qg
UmVzdWx0cyAoJSh0aW1lKXMpIgorICAgICAgICAgICAgICAgICAgICAgICAiPC90aXRsZT48L2hl
YWQ+PGJvZHk+PGgyPiUoaDIpcyAoJSh0aW1lKXMpPC9oMj5cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgJSB7J2gyJzogaDIsICd0aW1lJzogdGltZS5hc2N0aW1lKCl9KQorCisgICAgICAgIHRl
c3RfZmlsZXMuc29ydCgpCisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAg
ICAgICAgICAgIHRlc3RfZmFpbHVyZXMgPSByZXN1bHRfc3VtbWFyeS5mYWlsdXJlcy5nZXQodGVz
dF9maWxlLCBbXSkKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCI8cD48YSBocmVmPSclcyc+
JXM8L2E+PGJyIC8+XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXRoX3V0aWxz
LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2ZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfZmlsZSkpKQorICAgICAg
ICAgICAgZm9yIGZhaWx1cmUgaW4gdGVzdF9mYWlsdXJlczoKKyAgICAgICAgICAgICAgICBvdXRf
ZmlsZS53cml0ZSgiJm5ic3A7Jm5ic3A7JXM8YnIvPiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAlIGZhaWx1cmUucmVzdWx0X2h0bWxfb3V0cHV0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfZmls
ZSkpKQorICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjwvcD5cbiIpCisKKyAgICAgICAgIyBm
b290ZXIKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjwvYm9keT48L2h0bWw+XG4iKQorICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9zaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYpOgor
ICAgICAgICAiIiJMYXVuY2hlcyB0aGUgdGVzdCBzaGVsbCBvcGVuIHRvIHRoZSByZXN1bHRzLmh0
bWwgcGFnZS4iIiIKKyAgICAgICAgcmVzdWx0c19maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxm
Ll9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZXN1bHRzLmh0bWwiKQorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtw
YXRoX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChzZWxmLl9vcHRpb25zLnRhcmdldCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKHJlc3VsdHNfZmls
ZW5hbWUpXSkKKworCitkZWYgX2FkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUp
OgorICAgIGRpY3Quc2V0ZGVmYXVsdChrZXksIFtdKS5hcHBlbmQodmFsdWUpCisKKworZGVmIHJl
YWRfdGVzdF9maWxlcyhmaWxlcyk6CisgICAgdGVzdHMgPSBbXQorICAgIGZvciBmaWxlIGluIGZp
bGVzOgorICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGZpbGUpOgorICAgICAgICAgICAgbGluZSA9
IHRlc3RfZXhwZWN0YXRpb25zLnN0cmlwX2NvbW1lbnRzKGxpbmUpCisgICAgICAgICAgICBpZiBs
aW5lOgorICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChsaW5lKQorICAgIHJldHVybiB0ZXN0
cworCisKK2RlZiBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgbG9nX29wdGlvbik6Cisg
ICAgIiIiUmV0dXJucyBhIHdyaXRlKCkgZnVuY3Rpb24gdGhhdCB3aWxsIHdyaXRlIHRoZSBzdHJp
bmcgdG8gbG9nZ2luZy5pbmZvKCkKKyAgICBpZiBjb21wIHdhcyBzcGVjaWZpZWQgaW4gLS1sb2cg
b3IgaWYgLS12ZXJib3NlIGlzIHRydWUuIE90aGVyd2lzZSB0aGUKKyAgICBtZXNzYWdlIGlzIGRy
b3BwZWQuCisKKyAgICBBcmdzOgorICAgICAgb3B0aW9uczogbGlzdCBvZiBjb21tYW5kIGxpbmUg
b3B0aW9ucyBmcm9tIG9wdHBhcnNlCisgICAgICBsb2dfb3B0aW9uOiBvcHRpb24gdG8gbWF0Y2gg
aW4gb3B0aW9ucy5sb2cgaW4gb3JkZXIgZm9yIHRoZSBtZXNzYWdlcworICAgICAgICAgIHRvIGJl
IGxvZ2dlZCAoZS5nLiwgJ2FjdHVhbCcgb3IgJ2V4cGVjdGVkJykKKyAgICAiIiIKKyAgICBpZiBv
cHRpb25zLnZlcmJvc2Ugb3IgbG9nX29wdGlvbiBpbiBvcHRpb25zLmxvZy5zcGxpdCgiLCIpOgor
ICAgICAgICByZXR1cm4gbG9nZ2luZy5pbmZvCisgICAgcmV0dXJuIGxhbWJkYSBzdHI6IDEKKwor
CitkZWYgbWFpbihvcHRpb25zLCBhcmdzKToKKyAgICAiIiJSdW4gdGhlIHRlc3RzLiAgV2lsbCBj
YWxsIHN5cy5leGl0IHdoZW4gY29tcGxldGUuCisKKyAgICBBcmdzOgorICAgICAgb3B0aW9uczog
YSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCisgICAgICBhcmdzOiBhIGxpc3Qg
b2Ygc3ViIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRvIHRlc3QKKyAgICAiIiIKKworICAgIGlmIG9w
dGlvbnMuc291cmNlczoKKyAgICAgICAgb3B0aW9ucy52ZXJib3NlID0gVHJ1ZQorCisgICAgIyBT
ZXQgdXAgb3VyIGxvZ2dpbmcgZm9ybWF0LgorICAgIG1ldGVyID0gbWV0ZXJlZF9zdHJlYW0uTWV0
ZXJlZFN0cmVhbShvcHRpb25zLnZlcmJvc2UsIHN5cy5zdGRlcnIpCisgICAgbG9nX2ZtdCA9ICcl
KG1lc3NhZ2UpcycKKyAgICBsb2dfZGF0ZWZtdCA9ICcleSVtJWQgJUg6JU06JVMnCisgICAgbG9n
X2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy52ZXJib3NlOgorICAgICAgICBs
b2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6JShsaW5lbm8pLTRkICUobGV2ZWxu
YW1lKXMgJworICAgICAgICAgICAgICAgICAgJyUobWVzc2FnZSlzJykKKyAgICAgICAgbG9nX2xl
dmVsID0gbG9nZ2luZy5ERUJVRworICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nX2xl
dmVsLCBmb3JtYXQ9bG9nX2ZtdCwgZGF0ZWZtdD1sb2dfZGF0ZWZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbT1tZXRlcikKKworICAgIGlmIG5vdCBvcHRpb25zLnRhcmdldDoKKyAg
ICAgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgIG9wdGlvbnMudGFyZ2V0ID0gIkRl
YnVnIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucy50YXJnZXQgPSAiUmVsZWFz
ZSIKKworICAgIGlmIG5vdCBvcHRpb25zLnVzZV9hcGFjaGU6CisgICAgICAgIG9wdGlvbnMudXNl
X2FwYWNoZSA9IHN5cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdsaW51eDInKQorCisgICAgaWYg
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICMgQXNz
dW1lIGl0J3MgYW4gYWJzb2x1dGUgcGF0aCBhbmQgbm9ybWFsaXplLgorICAgICAgICBvcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5ID0gcGF0aF91dGlscy5nZXRfYWJzb2x1dGVfcGF0aCgKKyAgICAg
ICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgZWxzZToKKyAgICAgICAgIyBJ
ZiBpdCdzIGEgcmVsYXRpdmUgcGF0aCwgbWFrZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSByZWxhdGl2
ZSB0bworICAgICAgICAjIERlYnVnIG9yIFJlbGVhc2UuCisgICAgICAgIGJhc2VkaXIgPSBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnKQorICAgICAgICBvcHRpb25zLnJlc3VsdHNf
ZGlyZWN0b3J5ID0gcGF0aF91dGlscy5nZXRfYWJzb2x1dGVfcGF0aCgKKyAgICAgICAgICAgIG9z
LnBhdGguam9pbihiYXNlZGlyLCBvcHRpb25zLnRhcmdldCwgb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSkpCisKKyAgICBpZiBvcHRpb25zLmNsb2JiZXJfb2xkX3Jlc3VsdHM6CisgICAgICAgICMg
SnVzdCBjbG9iYmVyIHRoZSBhY3R1YWwgdGVzdCByZXN1bHRzIGRpcmVjdG9yaWVzIHNpbmNlIHRo
ZSBvdGhlcgorICAgICAgICAjIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBhcmUgZXhw
bGljaXRseSB1c2VkIGZvciBjcm9zcy1ydW4KKyAgICAgICAgIyB0cmFja2luZy4KKyAgICAgICAg
cGF0aCA9IG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCAnTGF5b3V0VGVz
dHMnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgIHNodXRp
bC5ybXRyZWUocGF0aCkKKworICAgICMgRW5zdXJlIHBsYXRmb3JtIGlzIHZhbGlkIGFuZCBmb3Jj
ZSBpdCB0byB0aGUgZm9ybSAnY2hyb21pdW0tPHBsYXRmb3JtPicuCisgICAgb3B0aW9ucy5wbGF0
Zm9ybSA9IHBhdGhfdXRpbHMucGxhdGZvcm1fbmFtZShvcHRpb25zLnBsYXRmb3JtKQorCisgICAg
aWYgbm90IG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzOgorICAgICAgICAjIFRPRE8ob2phbik6IElu
dmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBudW1jb3JlcyArIDEuCisg
ICAgICAgIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzID0gcGxhdGZvcm1fdXRpbHMuZ2V0X251bV9j
b3JlcygpCisKKyAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAnY29u
ZmlnJykKKyAgICB3cml0ZSgiUnVubmluZyAlcyB0ZXN0X3NoZWxscyBpbiBwYXJhbGxlbCIgJSBv
cHRpb25zLm51bV90ZXN0X3NoZWxscykKKworICAgIGlmIG5vdCBvcHRpb25zLnRpbWVfb3V0X21z
OgorICAgICAgICBpZiBvcHRpb25zLnRhcmdldCA9PSAiRGVidWciOgorICAgICAgICAgICAgb3B0
aW9ucy50aW1lX291dF9tcyA9IHN0cigyICogVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9V
VF9NUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMudGltZV9vdXRfbXMgPSBz
dHIoVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykKKworICAgIG9wdGlvbnMuc2xv
d190aW1lX291dF9tcyA9IHN0cig1ICogaW50KG9wdGlvbnMudGltZV9vdXRfbXMpKQorICAgIHdy
aXRlKCJSZWd1bGFyIHRpbWVvdXQ6ICVzLCBzbG93IHRlc3QgdGltZW91dDogJXMiICUKKyAgICAg
ICAgICAob3B0aW9ucy50aW1lX291dF9tcywgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKSkKKwor
ICAgICMgSW5jbHVkZSBhbGwgdGVzdHMgaWYgbm9uZSBhcmUgc3BlY2lmaWVkLgorICAgIG5ld19h
cmdzID0gW10KKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGlmIGFyZyBhbmQgYXJnICE9
ICcnOgorICAgICAgICAgICAgbmV3X2FyZ3MuYXBwZW5kKGFyZykKKworICAgIHBhdGhzID0gbmV3
X2FyZ3MKKyAgICBpZiBub3QgcGF0aHM6CisgICAgICAgIHBhdGhzID0gW10KKyAgICBpZiBvcHRp
b25zLnRlc3RfbGlzdDoKKyAgICAgICAgcGF0aHMgKz0gcmVhZF90ZXN0X2ZpbGVzKG9wdGlvbnMu
dGVzdF9saXN0KQorCisgICAgIyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnkgaWYgaXQgZG9l
c24ndCBhbHJlYWR5IGV4aXN0LgorICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnko
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICBtZXRlci51cGRhdGUoIkdhdGhlcmluZyBm
aWxlcyAuLi4iKQorCisgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKG9wdGlvbnMsIG1ldGVy
KQorICAgIHRlc3RfcnVubmVyLmdhdGhlcl9maWxlX3BhdGhzKHBhdGhzKQorCisgICAgaWYgb3B0
aW9ucy5saW50X3Rlc3RfZmlsZXM6CisgICAgICAgICMgQ3JlYXRpbmcgdGhlIGV4cGVjYXRpb25z
IGZvciBlYWNoIHBsYXRmb3JtL3RhcmdldCBwYWlyIGRvZXMgYWxsIHRoZQorICAgICAgICAjIHRl
c3QgbGlzdCBwYXJzaW5nIGFuZCBlbnN1cmVzIGl0J3MgY29ycmVjdCBzeW50YXggKGUuZy4gbm8g
ZHVwZXMpLgorICAgICAgICBmb3IgcGxhdGZvcm0gaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuUExB
VEZPUk1TOgorICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBsYXRm
b3JtLCBpc19kZWJ1Z19tb2RlPVRydWUpCisgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9l
eHBlY3RhdGlvbnMocGxhdGZvcm0sIGlzX2RlYnVnX21vZGU9RmFsc2UpCisgICAgICAgIHByaW50
ICgiSWYgdGhlcmUgYXJlIG5vIGZhaWwgbWVzc2FnZXMsIGVycm9ycyBvciBleGNlcHRpb25zLCB0
aGVuIHRoZSAiCisgICAgICAgICAgICAibGludCBzdWNjZWVkZWQuIikKKyAgICAgICAgc3lzLmV4
aXQoMCkKKworICAgIHRyeToKKyAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCA9IHBhdGhf
dXRpbHMudGVzdF9zaGVsbF9wYXRoKG9wdGlvbnMudGFyZ2V0KQorICAgIGV4Y2VwdCBwYXRoX3V0
aWxzLlBhdGhOb3RGb3VuZDoKKyAgICAgICAgcHJpbnQgIlxuRVJST1I6IHRlc3Rfc2hlbGwgaXMg
bm90IGZvdW5kLiBCZSBzdXJlIHRoYXQgeW91IGhhdmUgYnVpbHQiCisgICAgICAgIHByaW50ICJp
dCBhbmQgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IGJ1aWxkLiBUaGlzIHNjcmlwdCIK
KyAgICAgICAgcHJpbnQgIndpbGwgcnVuIHRoZSBSZWxlYXNlIG9uZSBieSBkZWZhdWx0LiBVc2Ug
LS1kZWJ1ZyB0byB1c2UgdGhlIgorICAgICAgICBwcmludCAiRGVidWcgYnVpbGQuXG4iCisgICAg
ICAgIHN5cy5leGl0KDEpCisKKyAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRp
b25zLCAiY29uZmlnIikKKyAgICB3cml0ZSgiVXNpbmcgcGxhdGZvcm0gJyVzJyIgJSBvcHRpb25z
LnBsYXRmb3JtKQorICAgIHdyaXRlKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIgJSBvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5lOgorICAg
ICAgICB3cml0ZSgiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlCisgICAgICAgICAgICAg
IHBhdGhfdXRpbHMuY2hyb21pdW1fYmFzZWxpbmVfcGF0aChvcHRpb25zLnBsYXRmb3JtKSkKKyAg
ICB3cml0ZSgiVXNpbmcgJXMgYnVpbGQgYXQgJXMiICUgKG9wdGlvbnMudGFyZ2V0LCB0ZXN0X3No
ZWxsX2JpbmFyeV9wYXRoKSkKKyAgICBpZiBvcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgorICAgICAg
ICB3cml0ZSgiTm90IHJ1bm5pbmcgcGl4ZWwgdGVzdHMiKQorICAgIHdyaXRlKCIiKQorCisgICAg
bWV0ZXIudXBkYXRlKCJQYXJzaW5nIGV4cGVjdGF0aW9ucyAuLi4iKQorICAgIHRlc3RfcnVubmVy
LnBhcnNlX2V4cGVjdGF0aW9ucyhvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zLnRhcmdldCA9PSAn
RGVidWcnKQorCisgICAgbWV0ZXIudXBkYXRlKCJQcmVwYXJpbmcgdGVzdHMgLi4uIikKKyAgICB3
cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAiZXhwZWN0ZWQiKQorICAgIHJl
c3VsdF9zdW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0
KHdyaXRlKQorCisgICAgaWYgJ2N5Z3dpbicgPT0gc3lzLnBsYXRmb3JtOgorICAgICAgICBsb2dn
aW5nLndhcm4oIiMiICogNDApCisgICAgICAgIGxvZ2dpbmcud2FybigiIyBVTkVYUEVDVEVEIFBZ
VEhPTiBWRVJTSU9OIikKKyAgICAgICAgbG9nZ2luZy53YXJuKCIjIFRoaXMgc2NyaXB0IHNob3Vs
ZCBiZSBydW4gdXNpbmcgdGhlIHZlcnNpb24gb2YgcHl0aG9uIikKKyAgICAgICAgbG9nZ2luZy53
YXJuKCIjIGluIHRoaXJkX3BhcnR5L3B5dGhvbl8yNC8iKQorICAgICAgICBsb2dnaW5nLndhcm4o
IiMiICogNDApCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAjIERlbGV0ZSB0aGUgZGlzayBj
YWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVzdCBydW4uCisgICAgY2FjaGVkaXIgPSBv
cy5wYXRoLnNwbGl0KHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGgpWzBdCisgICAgY2FjaGVkaXIgPSBv
cy5wYXRoLmpvaW4oY2FjaGVkaXIsICJjYWNoZSIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoY2Fj
aGVkaXIpOgorICAgICAgICBzaHV0aWwucm10cmVlKGNhY2hlZGlyKQorCisgICAgdGVzdF9ydW5u
ZXIuYWRkX3Rlc3RfdHlwZSh0ZXh0X2RpZmYuVGVzdFRleHREaWZmKQorICAgIGlmIG5vdCBvcHRp
b25zLm5vX3BpeGVsX3Rlc3RzOgorICAgICAgICB0ZXN0X3J1bm5lci5hZGRfdGVzdF90eXBlKGlt
YWdlX2RpZmYuSW1hZ2VEaWZmKQorICAgICAgICBpZiBvcHRpb25zLmZ1enp5X3BpeGVsX3Rlc3Rz
OgorICAgICAgICAgICAgdGVzdF9ydW5uZXIuYWRkX3Rlc3RfdHlwZShmdXp6eV9pbWFnZV9kaWZm
LkZ1enp5SW1hZ2VEaWZmKQorCisgICAgbWV0ZXIudXBkYXRlKCJTdGFydGluZyAuLi4iKQorICAg
IGhhc19uZXdfZmFpbHVyZXMgPSB0ZXN0X3J1bm5lci5ydW4ocmVzdWx0X3N1bW1hcnkpCisKKyAg
ICBsb2dnaW5nLmRlYnVnKCJFeGl0IHN0YXR1czogJWQiICUgaGFzX25ld19mYWlsdXJlcykKKyAg
ICBzeXMuZXhpdChoYXNfbmV3X2ZhaWx1cmVzKQorCisKK2RlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9u
ZSk6CisgICAgIiIiUHJvdmlkZXMgYSBkZWZhdWx0IHNldCBvZiBjb21tYW5kIGxpbmUgYXJncy4K
KworICAgIFJldHVybnMgYSB0dXBsZSBvZiBvcHRpb25zLCBhcmdzIGZyb20gb3B0cGFyc2UiIiIK
KyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW5vLXBpeGVsLXRlc3RzIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZGlzYWJsZSBwaXhlbC10by1waXhlbCBQTkcg
Y29tcGFyaXNvbnMiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tZnV6enkt
cGl4ZWwtdGVzdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJBbHNvIHVzZSBmdXp6eSBtYXRjaGluZyB0byBjb21wYXJlIHBpeGVsICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBvdXRwdXRzLiIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCIiLCAiLS1yZXN1bHRzLWRpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9ImxheW91dC10ZXN0LXJlc3VsdHMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJPdXRwdXQgcmVzdWx0cyBkaXJlY3Rvcnkgc291cmNlIGRp
ciwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZWxhdGl2ZSB0byBEZWJ1
ZyBvciBSZWxlYXNlIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW5ldy1i
YXNlbGluZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InNh
dmUgYWxsIGdlbmVyYXRlZCByZXN1bHRzIGFzIG5ldyBiYXNlbGluZXMiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiBpbnRvIHRoZSBwbGF0Zm9ybSBkaXJlY3RvcnksIG92ZXJ3
cml0aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hhdGV2ZXIncyBh
bHJlYWR5IHRoZXJlLiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1ub3No
b3ctcmVzdWx0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9ImRvbid0IGxhdW5jaCB0aGUgdGVzdF9zaGVsbCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB3aXRoIHJlc3VsdHMgYWZ0ZXIgdGhlIHRl
c3RzIGFyZSBkb25lIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWZ1bGwt
cmVzdWx0cy1odG1sIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ic2hvdyBhbGwgZmFpbHVyZXMgaW4gIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cy5odG1sLCByYXRoZXIgdGhhbiBvbmx5
IHJlZ3Jlc3Npb25zIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWNsb2Ji
ZXItb2xkLXJlc3VsdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJDbG9iYmVycyB0ZXN0IHJlc3VsdHMgZnJv
bSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmV2aW91cyBydW5zLiIpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1saW50LXRlc3QtZmlsZXMiLCBhY3Rpb249
InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNl
LCBoZWxwPSJNYWtlcyBzdXJlIHRoZSB0ZXN0IGZpbGVzICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInBhcnNlIGZvciBhbGwgY29uZmlndXJhdGlvbnMuIERvZXMgbm90IHJ1biBhbnkg
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHMuIikKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oIiIsICItLWZvcmNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0iUnVuIGFsbCB0ZXN0cywgZXZlbiB0aG9zZSBtYXJrZWQgU0tJUCAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIHRoZSB0ZXN0IGxpc3QiKQor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbnVtLXRlc3Qtc2hlbGxzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIHRlc3RzaGVsbHMgdG8g
cnVuIGluIHBhcmFsbGVsLiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS11
c2UtYXBhY2hlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0i
V2hldGhlciB0byB1c2UgYXBhY2hlIGluc3RlYWQgb2YgbGlnaHR0cGQuIikKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXRpbWUtb3V0LW1zIiwgZGVmYXVsdD1Ob25lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTZXQgdGhlIHRpbWVvdXQgZm9yIGVhY2gg
dGVzdCIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1ydW4tc2luZ2x5Iiwg
YWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0icnVuIGEgc2VwYXJh
dGUgdGVzdF9zaGVsbCBmb3IgZWFjaCB0ZXN0IikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRp
b24oIiIsICItLWRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0idXNlIHRoZSBkZWJ1ZyBiaW5hcnkgaW5z
dGVhZCBvZiB0aGUgcmVsZWFzZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IGJpbmFyeSIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1udW0tc2xvdy10
ZXN0cy10by1sb2ciLCBkZWZhdWx0PTUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJOdW1iZXIgb2Ygc2xvdyB0ZXN0cyB3aG9zZSB0aW1pbmdzICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidG8gcHJpbnQuIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oIiIsICItLXBsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0iT3ZlcnJpZGUgdGhlIHBsYXRmb3JtIGZvciBleHBlY3RlZCByZXN1bHRzIikKKyAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXRhcmdldCIsIGRlZmF1bHQ9IiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNldCB0aGUgYnVpbGQgdGFyZ2V0IGNvbmZpZ3Vy
YXRpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIob3ZlcnJpZGVzIC0t
ZGVidWcpIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWxvZyIsIGFjdGlv
bj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJkZXRhaWxl
ZC1wcm9ncmVzcyx1bmV4cGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0ibG9nIHZhcmlvdXMgdHlwZXMgb2YgZGF0YS4gVGhlIHBhcmFtIHNob3VsZCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiBiZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHZhbHVl
cyBmcm9tOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY3R1YWwsY29uZmlnLCIg
KyBMT0dfREVUQUlMRURfUFJPR1JFU1MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
LGV4cGVjdGVkLHRpbWluZywiICsgTE9HX1VORVhQRUNURUQgKyAiICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIihkZWZhdWx0cyB0byAiICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIi0tbG9nIGRldGFpbGVkLXByb2dyZXNzLHVuZXhwZWN0ZWQpIikKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9ImluY2x1
ZGUgZGVidWctbGV2ZWwgbG9nZ2luZyIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIi
LCAiLS1zb3VyY2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0ic2hvdyBleHBlY3RlZCByZXN1bHQgZmlsZSBwYXRoIGZvciBlYWNoICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCAoaW1wbGllcyAtLXZlcmJv
c2UpIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXN0YXJ0dXAtZGlhbG9n
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY3JlYXRlIGEg
ZGlhbG9nIG9uIHRlc3Rfc2hlbGwuZXhlIHN0YXJ0dXAiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRk
X29wdGlvbigiIiwgIi0tZ3AtZmF1bHQtZXJyb3ItYm94IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iZW5hYmxlIFdpbmRvd3MgR1AgZmF1bHQgZXJyb3IgYm94
IikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXdyYXBwZXIiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ3cmFwcGVyIGNvbW1hbmQgdG8gaW5zZXJ0IGJl
Zm9yZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9jYXRpb25zIG9m
IHRlc3Rfc2hlbGw7IG9wdGlvbiBpcyBzcGxpdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIm9uIHdoaXRlc3BhY2UgYmVmb3JlIHJ1bm5pbmcuIChFeGFtcGxlOiAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0td3JhcHBlcj0ndmFsZ3JpbmQgLS1zbWMt
Y2hlY2s9YWxsJykiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdGVzdC1s
aXN0IiwgYWN0aW9uPSJhcHBlbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJyZWFkIGxpc3Qgb2YgdGVzdHMgdG8gcnVuIGZyb20gZmlsZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1ldGF2YXI9IkZJTEUiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bigiIiwgIi0tbm9jaGVjay1zeXMtZGVwcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IkRvbid0IGNoZWNrIHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHRoZW1lcykiKQorICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcmFuZG9taXplLW9yZGVyIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIlJ1biB0ZXN0cyBpbiByYW5kb20gb3JkZXIg
KHVzZWZ1bCBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhY2tp
bmcgZG93biBjb3JydXB0aW9uKSIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwg
Ii0tcnVuLWNodW5rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiUnVuIGEgc3BlY2lmaWVkIGNo
dW5rIChuOmwpLCB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibnRo
IG9mIGxlbiBsLCBvZiB0aGUgbGF5b3V0IHRlc3RzIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCIiLCAiLS1ydW4tcGFydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIlJ1biBhIHNw
ZWNpZmllZCBwYXJ0IChuOm0pLCB0aGUgbnRoIG9mIG0iCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgcGFydHMsIG9mIHRoZSBsYXlvdXQgdGVzdHMiKSkKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWJhdGNoLXNpemUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9KCJSdW4gYSB0aGUgdGVzdHMgaW4gYmF0Y2hlcyAobiksIGFmdGVyICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImV2ZXJ5IG4gdGVzdHMsIHRoZSB0ZXN0IHNoZWxsIGlz
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF1bmNoZWQuIikpCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZGVyLW5hbWUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJEVU1NWV9CVUlMREVSX05BTUUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVGhlIG5hbWUgb2YgdGhlIGJ1aWxkZXIg
c2hvd24gb24gdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhdGVy
ZmFsbCBydW5uaW5nIHRoaXMgc2NyaXB0IGUuZy4gIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiV2ViS2l0LiIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwg
Ii0tYnVpbGQtbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IkRV
TU1ZX0JVSUxEX05BTUUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVGhl
IG5hbWUgb2YgdGhlIGJ1aWxkZXIgdXNlZCBpbiBpdHMgcGF0aCwgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZS5nLiB3ZWJraXQtcmVsLiIpKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiIiwgIi0tYnVpbGQtbnVtYmVyIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0iRFVNTVlfQlVJTERfTlVNQkVSIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0oIlRoZSBidWlsZCBudW1iZXIgb2YgdGhlIGJ1aWxkZXIgcnVubmlu
ZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgc2NyaXB0LiIpKQor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBh
cmFsbGVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVl
IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0icnVu
IGFsbCB0ZXN0cyBpbiBwYXJhbGxlbCIpCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2Vf
YXJncyhhcmdzKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIG9wdGlvbnMsIGFy
Z3MgPSBwYXJzZV9hcmdzKCkKKyAgICBtYWluKG9wdGlvbnMsIGFyZ3MpCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X291dHB1dF9mb3Jt
YXR0ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0
X291dHB1dF9mb3JtYXR0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
YTQyNGJhZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0cHV0X2Zvcm1hdHRlci5weQpAQCAtMCwwICsxLDEyOSBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCitUaGlzIGlzIGEg
c2NyaXB0IGZvciBnZW5lcmF0aW5nIGVhc2lseS12aWV3YWJsZSBjb21wYXJpc29ucyBvZiB0ZXh0
IGFuZCBwaXhlbAorZGlmZnMuCisiIiIKK2ltcG9ydCBvcHRwYXJzZQorCitmcm9tIGxheW91dF9w
YWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgZmFpbHVyZQorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgZmFpbHVyZV9maW5kZXIKK2Zy
b20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGZhaWx1cmVfZmluZGVyX3Rlc3QKK2Zyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IGh0bWxfZ2VuZXJhdG9yCisKK0RFRkFVTFRfQlVJTERFUiA9ICJXZWJr
aXQiCisKKworZGVmIG1haW4ob3B0aW9ucywgYXJncyk6CisKKyAgICBpZiBvcHRpb25zLnJ1bl90
ZXN0czoKKyAgICAgICAgZmZ0ID0gZmFpbHVyZV9maW5kZXJfdGVzdC5GYWlsdXJlRmluZGVyVGVz
dCgpCisgICAgICAgIHJldHVybiBmZnQucnVuVGVzdHMoKQorCisgICAgIyBUT0RPKGd3aWxzb24p
OiBBZGQgYSBjaGVjayB0aGF0IHZlcmlmaWVzIHRoZSBnaXZlbiBwbGF0Zm9ybSBleGlzdHMuCisK
KyAgICBmaW5kZXIgPSBmYWlsdXJlX2ZpbmRlci5GYWlsdXJlRmluZGVyKG9wdGlvbnMuYnVpbGRf
bnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cy5wbGF0Zm9ybV9idWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKG5vdCBvcHRpb25zLmluY2x1ZGVfZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZXN0X3JlZ2V4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vdXRwdXRfZGlyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KG9wdGlvbnMubWF4X2ZhaWx1
cmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
dmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMuYnVpbGRlcl9sb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zLmFyY2hpdmVfbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucy56aXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZXhwZWN0YXRpb25zX2ZpbGUpCisgICAgZmluZGVyLnVzZV9s
b2NhbF9iYXNlbGluZXMgPSBvcHRpb25zLmxvY2FsCisgICAgZmFpbHVyZV9saXN0ID0gZmluZGVy
LmdldF9mYWlsdXJlcygpCisKKyAgICBpZiBub3QgZmFpbHVyZV9saXN0OgorICAgICAgICBwcmlu
dCAiRGlkIG5vdCBmaW5kIGFueSBmYWlsdXJlcy4iCisgICAgICAgIHJldHVybgorCisgICAgZ2Vu
ZXJhdG9yID0gaHRtbF9nZW5lcmF0b3IuSFRNTEdlbmVyYXRvcihmYWlsdXJlX2xpc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm91dHB1dF9k
aXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kZXIu
YnVpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLnBsYXRmb3JtX2J1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobm90IG9wdGlvbnMuaW5jbHVkZV9leHBlY3RlZCkpCisgICAgZmlsZW5hbWUg
PSBnZW5lcmF0b3IuZ2VuZXJhdGVfaHRtbCgpCisKKyAgICBpZiBmaWxlbmFtZSBhbmQgb3B0aW9u
cy52ZXJib3NlOgorICAgICAgICBwcmludCAiRmlsZSBjcmVhdGVkIGF0ICVzIiAlIGZpbGVuYW1l
CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBh
cnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICIt
LXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJE
aXNwbGF5IGxvdHMgb2Ygb3V0cHV0LiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIt
aSIsICItLWluY2x1ZGUtZXhwZWN0ZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJJbmNsdWRlIGV4cGVjdGVkIGZhaWx1cmVzIGluIG91dHB1dCIpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXBsYXRmb3JtLWJ1aWxkZXIiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PURFRkFVTFRfQlVJTERFUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoZSBnaXZlbiBidWlsZGVyIikKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYnVpbGQtbnVtYmVyIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSJVc2UgdGhlIGdpdmVuIGJ1aWxkIG51bWJlciIpCisgICAgb3B0aW9u
X3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QtcmVnZXgiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9IlVzZSB0aGUgZ2l2ZW4gcmVnZXggdG8gZmlsdGVyIHRlc3RzIikKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0LWRpciIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Ii4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJPdXRwdXQgZmlsZXMgdG8gZ2l2ZW4gZGlyZWN0b3J5IikKKyAgICBvcHRpb25fcGFyc2Vy
LmFkZF9vcHRpb24oIi1tIiwgIi0tbWF4LWZhaWx1cmVzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IkxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWlsdXJlcyIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCItciIsICItLXJ1bi10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9IlJ1bnMgdW5pdCB0ZXN0cyIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCItdSIsICItLWJ1aWxkZXItbG9nIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSgiVXNlIHRoZSBsb2NhbCBidWlsZGVyIGxvZyBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImluc3RlYWQgb2Ygc2NyYXBpbmcgdGhlIGJ1aWxkYm90cyIpKQorICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1hcmNoaXZlLWxvZyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0oIlVzZSB0aGUgbG9jYWwgYXJjaGl2ZSBsb2cgZmlsZSAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0ZWFkIG9mIHNjcmFwaW5nIHRoZSBidWls
ZGJvdHMiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0tZXhwZWN0YXRp
b25zLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJVc2UgdGhlIGxvY2FsIHRlc3QgZXhw
ZWN0YXRpb25zIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5z
dGVhZCBvZiBzY3JhcGluZyB0aGUgYnVpbGRib3RzIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCIteiIsICItLXppcC1maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVXNlIHRo
ZSBsb2NhbCB0ZXN0IG91dHB1dCB6aXAgZmlsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbnN0ZWFkIG9mIHNjcmFwaW5nIHRoZSBidWlsZGJvdHMiKSkKKyAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbG9jYWwiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVXNlIGxvY2FsIGJhc2VsaW5lcyBpbnN0ZWFkIG9m
IHNjcmFwaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VsaW5l
cyBmcm9tIHNvdXJjZSB3ZWJzaXRlcyIpKQorCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9w
YXJzZXIucGFyc2VfYXJncygpCisgICAgbWFpbihvcHRpb25zLCBhcmdzKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRwdXRfeG1s
X3RvX2pzb24ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X291dHB1dF94bWxfdG9fanNvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwLi4yNjMxNmZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRwdXRfeG1sX3RvX2pzb24ucHkKQEAgLTAsMCArMSwx
NTkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorVGhp
cyBpcyBhIHNjcmlwdCBmb3IgZ2VuZXJhdGluZyBKU09OIGZyb20gSlVuaXQgWE1MIG91dHB1dCAo
Z2VuZXJhdGVkIGJ5Citnb29nbGUgdGVzdHMgd2l0aCAtLWd0ZXN0X291dHB1dD14bWwgb3B0aW9u
KS4KKyIiIgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBv
cnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIHhtbC5kb20gaW1wb3J0IG1pbmlkb20KKworZnJv
bSBsYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgorZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQg
dGVzdF9leHBlY3RhdGlvbnMKKworIyBCdWlsZGVyIGJhc2UgVVJMIHdoZXJlIHdlIGhhdmUgdGhl
IGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KK0JVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxk
LmNocm9taXVtLm9yZy9idWlsZGJvdC9ndGVzdC1yZXN1bHRzLyIKKworCitjbGFzcyBKU09OR2Vu
ZXJhdG9yRnJvbVhNTChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMp
OgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworCisgICAgICAgICMgQ2hlY2sgdGhl
IHJlc3VsdHMgZGlyZWN0b3J5CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLl9v
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIG9zLm1rZGlyKHNlbGYuX29w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICAgICAgcmVzdWx0c194bWxfZmlsZSA9IE5v
bmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0c194bWxfZmlsZSA9IG9wZW4oc2Vs
Zi5fb3B0aW9ucy5pbnB1dF9yZXN1bHRzX3htbCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6
CisgICAgICAgICAgICBsb2dnaW5nLmZhdGFsKCJDYW5ub3Qgb3BlbiBmaWxlICVzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5pbnB1dF9yZXN1bHRzX3htbCkKKyAg
ICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgc3VtbWFyeSA9IHNlbGYuX3BhcnNlX3Rl
c3RfcmVzdWx0c194bWwoCisgICAgICAgICAgICBtaW5pZG9tLnBhcnNlKHJlc3VsdHNfeG1sX2Zp
bGUpLmRvY3VtZW50RWxlbWVudCkKKyAgICAgICAgcmVzdWx0c194bWxfZmlsZS5jbG9zZSgpCisK
KyAgICAgICAganNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcigKKyAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMuYnVpbGRlcl9uYW1lLCBzZWxmLl9vcHRpb25zLmJ1aWxk
X25hbWUsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkX251bWJlciwgc2VsZi5fb3B0
aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYnVpbGRl
cl9iYXNlX3VybCwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAg
IHNlbGYuX2ZhaWx1cmVzLCBzZWxmLl9wYXNzZWRfdGVzdHMsIHNlbGYuX3NraXBwZWRfdGVzdHMs
CisgICAgICAgICAgICBzZWxmLl90ZXN0c19saXN0KQorCisgICAgZGVmIF9wYXJzZV90ZXN0X3Jl
c3VsdHNfeG1sKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLl90ZXN0c19saXN0ID0gc2V0KCkK
KyAgICAgICAgc2VsZi5fcGFzc2VkX3Rlc3RzID0gc2V0KCkKKyAgICAgICAgc2VsZi5fc2tpcHBl
ZF90ZXN0cyA9IHNldCgpCisgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IHt9CisgICAgICAg
IHNlbGYuX2ZhaWx1cmVzID0ge30KKworICAgICAgICB0ZXN0Y2FzZXMgPSBub2RlLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCd0ZXN0Y2FzZScpCisgICAgICAgIGZvciB0ZXN0Y2FzZSBpbiB0ZXN0Y2Fz
ZXM6CisgICAgICAgICAgICBuYW1lID0gdGVzdGNhc2UuZ2V0QXR0cmlidXRlKCduYW1lJykKKyAg
ICAgICAgICAgIGNsYXNzbmFtZSA9IHRlc3RjYXNlLmdldEF0dHJpYnV0ZSgnY2xhc3NuYW1lJykK
KyAgICAgICAgICAgIHRlc3RfbmFtZSA9ICIlcy4lcyIgJSAoY2xhc3NuYW1lLCBuYW1lKQorCisg
ICAgICAgICAgICBzdGF0dXMgPSB0ZXN0Y2FzZS5nZXRBdHRyaWJ1dGUoJ3N0YXR1cycpCisgICAg
ICAgICAgICBpZiBzdGF0dXMgPT0gJ25vdHJ1bic6CisgICAgICAgICAgICAgICAgaWYgbmFtZS5z
dGFydHN3aXRoKCdESVNBQkxFRF8nKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2tpcHBl
ZF90ZXN0cy5hZGQodGVzdF9uYW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAg
ICAgICAgIGZhaWx1cmVzID0gdGVzdGNhc2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZhaWx1cmUn
KQorICAgICAgICAgICAgaWYgZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmFpbHVy
ZXNbdGVzdF9uYW1lXSA9IHRlc3RfZXhwZWN0YXRpb25zLlRFWFQKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgc2VsZi5fcGFzc2VkX3Rlc3RzLmFkZCh0ZXN0X25hbWUpCisKKyAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5nc1t0ZXN0X25hbWVdID0gZmxvYXQoCisgICAgICAg
ICAgICAgICAgdGVzdGNhc2UuZ2V0QXR0cmlidXRlKCd0aW1lJykpCisgICAgICAgICAgICBzZWxm
Ll90ZXN0c19saXN0LmFkZCh0ZXN0X25hbWUpCisKKworZGVmIG1haW4ob3B0aW9ucywgYXJncyk6
CisgICAgIiIiUGFyc2UgdGhlIHRlc3RzIHJlc3VsdHMgYW5kIGdlbmVyYXRlIEpTT04gZmlsZXMu
CisKKyAgICBBcmdzOgorICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGlu
ZSBvcHRpb25zCisgICAgICBhcmdzOiBhIGxpc3Qgb2Ygc3ViIGRpcmVjdG9yaWVzIG9yIGZpbGVz
IHRvIHRlc3QKKyAgICAiIiIKKworICAgIGlmIG5vdCBvcHRpb25zLnRlc3RfdHlwZToKKyAgICAg
ICAgbG9nZ2luZy5lcnJvcigiLS10ZXN0LXR5cGUgbmVlZHMgdG8gYmUgc3BlY2lmaWVkLiIpCisg
ICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBjYW5vbl90ZXN0X3R5cGUgPSBvcHRpb25zLnRlc3Rf
dHlwZS5yZXBsYWNlKCItIiwgIl8iKQorICAgIGlmIG5vdCBvcHRpb25zLmlucHV0X3Jlc3VsdHNf
eG1sOgorICAgICAgICBvcHRpb25zLmlucHV0X3Jlc3VsdHNfeG1sID0gIiVzLnhtbCIgJSAoY2Fu
b25fdGVzdF90eXBlKQorICAgIGlmIG5vdCBvcHRpb25zLmJ1aWxkZXJfYmFzZV91cmw6CisgICAg
ICAgIG9wdGlvbnMuYnVpbGRlcl9iYXNlX3VybCA9ICIlcyVzLyIgJSAoQlVJTERFUl9CQVNFX1VS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25z
LnRlc3RfdHlwZSkKKworICAgIEpTT05HZW5lcmF0b3JGcm9tWE1MKG9wdGlvbnMpCisKKyAgICBy
ZXR1cm4KKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBvcHRpb25fcGFyc2VyID0g
b3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIs
ICItLXRlc3QtdHlwZSIsIGRlZmF1bHQ9IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9IlRlc3QgdHlwZSB0aGF0IGdlbmVyYXRlZCB0aGUgcmVzdWx0cyBYTUwsIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZS5nLiB1bml0LXRlc3RzLiIpCisgICAgb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1yZXN1bHRzLWRpcmVjdG9yeSIsIGRlZmF1bHQ9
Ii4vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iT3V0cHV0IHJlc3VsdHMg
ZGlyZWN0b3J5IHNvdXJjZSBkaXIuIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIs
ICItLWlucHV0LXJlc3VsdHMteG1sIiwgZGVmYXVsdD0iIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0iVGVzdCByZXN1bHRzIHhtbCBmaWxlIChpbnB1dCBmb3IgdXMpLiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRlZmF1bHQgaXMgVEVTVF9UWVBFLnht
bCIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZGVyLWJhc2UtdXJs
IiwgZGVmYXVsdD0iIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIkEgVVJM
IHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3QgIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVzdWx0cy4gKGRlZmF1bHQ9JXNURVNUX1RZUEVfcmVzdWx0cy8pIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIEJVSUxERVJfQkFTRV9VUkwpKQor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tYnVpbGRlci1uYW1lIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iRFVNTVlfQlVJTERFUl9OQU1FIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVGhlIG5hbWUgb2YgdGhlIGJ1aWxkZXIg
c2hvd24gb24gdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2F0ZXJm
YWxsIHJ1bm5pbmcgdGhpcyBzY3JpcHQgZS5nLiBXZWJLaXQuIikKKyAgICBvcHRpb25fcGFyc2Vy
LmFkZF9vcHRpb24oIiIsICItLWJ1aWxkLW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PSJEVU1NWV9CVUlMRF9OQU1FIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0iVGhlIG5hbWUgb2YgdGhlIGJ1aWxkZXIgdXNlZCBpbiBpdHMgcGF0aCwgIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlLmcuIHdlYmtpdC1yZWwuIikKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWJ1aWxkLW51bWJlciIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IkRVTU1ZX0JVSUxEX05VTUJFUiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRoZSBidWlsZCBudW1iZXIgb2YgdGhlIGJ1
aWxkZXIgcnVubmluZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBz
Y3JpcHQuIikKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkK
KyAgICBtYWluKG9wdGlvbnMsIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL19faW5pdF9fLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRfXy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5
X2ltYWdlX2RpZmYucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOTU2NzU3NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weQpA
QCAtMCwwICsxLDcyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisiIiJDb21wYXJlcyB0aGUgaW1hZ2Ugb3V0cHV0IG9mIGEgdGVzdCB0byB0aGUgZXhwZWN0ZWQg
aW1hZ2Ugb3V0cHV0IHVzaW5nCitmdXp6eSBtYXRjaGluZy4KKyIiIgorCitpbXBvcnQgZXJybm8K
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9j
ZXNzCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKK2Zyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVz
dF90eXBlX2Jhc2UKKworCitjbGFzcyBGdXp6eUltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0
VHlwZUJhc2UpOgorCisgICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9j
LCBvdXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0KToKKyAgICAgICAgIiIiSW1wbGVtZW50YXRpb24g
b2YgQ29tcGFyZU91dHB1dCB0aGF0IGNoZWNrcyB0aGUgb3V0cHV0IGltYWdlIGFuZAorICAgICAg
ICBjaGVja3N1bSBhZ2FpbnN0IHRoZSBleHBlY3RlZCBmaWxlcyBmcm9tIHRoZSBMYXlvdXRUZXN0
IGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIGZhaWx1cmVzID0gW10KKworICAgICAg
ICAjIElmIHdlIGRpZG4ndCBwcm9kdWNlIGEgaGFzaCBmaWxlLCB0aGlzIHRlc3QgbXVzdCBiZSB0
ZXh0LW9ubHkuCisgICAgICAgIGlmIHRlc3RfYXJncy5oYXNoIGlzIE5vbmU6CisgICAgICAgICAg
ICByZXR1cm4gZmFpbHVyZXMKKworICAgICAgICBleHBlY3RlZF9wbmdfZmlsZSA9IHBhdGhfdXRp
bHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKworICAgICAgICBpZiB0ZXN0
X2FyZ3Muc2hvd19zb3VyY2VzOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgJXMn
ICUgZXhwZWN0ZWRfcG5nX2ZpbGUpCisKKyAgICAgICAgIyBBbHNvIHJlcG9ydCBhIG1pc3Npbmcg
ZXhwZWN0ZWQgUE5HIGZpbGUuCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShleHBlY3Rl
ZF9wbmdfZmlsZSk6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5G
YWlsdXJlTWlzc2luZ0ltYWdlKHNlbGYpKQorCisgICAgICAgICMgUnVuIHRoZSBmdXp6eW1hdGNo
ZXIKKyAgICAgICAgciA9IHN1YnByb2Nlc3MuY2FsbChbcGF0aF91dGlscy5mdXp6eV9tYXRjaF9w
YXRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoLCBl
eHBlY3RlZF9wbmdfZmlsZV0pCisgICAgICAgIGlmIHIgIT0gMDoKKyAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVGdXp6eUZhaWx1cmUoc2VsZikpCisKKyAg
ICAgICAgcmV0dXJuIGZhaWx1cmVzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkZjc1OAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlw
ZXMvaW1hZ2VfZGlmZi5weQpAQCAtMCwwICsxLDIyNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29tcGFyZXMgdGhlIGltYWdlIG91dHB1dCBvZiBhIHRl
c3QgdG8gdGhlIGV4cGVjdGVkIGltYWdlIG91dHB1dC4KKworQ29tcGFyZXMgaGFzaGVzIGZvciB0
aGUgZ2VuZXJhdGVkIGFuZCBleHBlY3RlZCBpbWFnZXMuIElmIHRoZSBvdXRwdXQgZG9lc24ndAor
bWF0Y2gsIHJldHVybnMgRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoIGFuZCBvdXRwdXRzIGJvdGgg
aGFzaGVzIGludG8gdGhlIGxheW91dAordGVzdCByZXN1bHRzIGRpcmVjdG9yeS4KKyIiIgorCitp
bXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2lt
cG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMK
K2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKK2Zyb20gdGVzdF90eXBl
cyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKKworIyBDYWNoZSB3aGV0aGVyIHdlIGhhdmUgdGhlIGlt
YWdlX2RpZmYgZXhlY3V0YWJsZSBhdmFpbGFibGUuCitfY29tcGFyZV9hdmFpbGFibGUgPSBUcnVl
CitfY29tcGFyZV9tc2dfcHJpbnRlZCA9IEZhbHNlCisKKworY2xhc3MgSW1hZ2VEaWZmKHRlc3Rf
dHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CisKKyAgICBkZWYgX2NvcHlfb3V0cHV0X3BuZyhzZWxm
LCB0ZXN0X2ZpbGVuYW1lLCBzb3VyY2VfaW1hZ2UsIGV4dGVuc2lvbik6CisgICAgICAgICIiIkNv
cGllcyByZXN1bHQgZmlsZXMgaW50byB0aGUgb3V0cHV0IGRpcmVjdG9yeSB3aXRoIGFwcHJvcHJp
YXRlCisgICAgICAgIG5hbWVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9maWxl
bmFtZTogdGhlIHRlc3QgZmlsZW5hbWUKKyAgICAgICAgICBzb3VyY2VfZmlsZTogcGF0aCB0byB0
aGUgaW1hZ2UgZmlsZSAoZWl0aGVyIGFjdHVhbCBvciBleHBlY3RlZCkKKyAgICAgICAgICBleHRl
bnNpb246IGV4dGVuc2lvbiB0byBpbmRpY2F0ZSAtYWN0dWFsLnBuZyBvciAtZXhwZWN0ZWQucG5n
CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9tYWtlX291dHB1dF9kaXJlY3RvcnkodGVzdF9m
aWxlbmFtZSkKKyAgICAgICAgZGVzdF9pbWFnZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKHRlc3Rf
ZmlsZW5hbWUsIGV4dGVuc2lvbikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwu
Y29weWZpbGUoc291cmNlX2ltYWdlLCBkZXN0X2ltYWdlKQorICAgICAgICBleGNlcHQgSU9FcnJv
ciwgZToKKyAgICAgICAgICAgICMgQSBtaXNzaW5nIGV4cGVjdGVkIFBORyBoYXMgYWxyZWFkeSBi
ZWVuIHJlY29yZGVkIGFzIGFuIGVycm9yLgorICAgICAgICAgICAgaWYgZXJybm8uRU5PRU5UICE9
IGUuZXJybm86CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfc2F2ZV9iYXNlbGlu
ZV9maWxlcyhzZWxmLCBmaWxlbmFtZSwgcG5nX3BhdGgsIGNoZWNrc3VtKToKKyAgICAgICAgIiIi
U2F2ZXMgbmV3IGJhc2VsaW5lcyBmb3IgdGhlIFBORyBhbmQgY2hlY2tzdW0uCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogdGVzdCBmaWxlbmFtZQorICAgICAgICAgIHBuZ19w
YXRoOiBwYXRoIHRvIHRoZSBhY3R1YWwgUE5HIHJlc3VsdCBmaWxlCisgICAgICAgICAgY2hlY2tz
dW06IHZhbHVlIG9mIHRoZSBhY3R1YWwgY2hlY2tzdW0gcmVzdWx0CisgICAgICAgICIiIgorICAg
ICAgICBwbmdfZmlsZSA9IG9wZW4ocG5nX3BhdGgsICJyYiIpCisgICAgICAgIHBuZ19kYXRhID0g
cG5nX2ZpbGUucmVhZCgpCisgICAgICAgIHBuZ19maWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5f
c2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBwbmdfZGF0YSwgIi5wbmciKQorICAgICAgICBz
ZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIGNoZWNrc3VtLCAiLmNoZWNrc3VtIikK
KworICAgIGRlZiBfY3JlYXRlX2ltYWdlX2RpZmYoc2VsZiwgZmlsZW5hbWUsIHRhcmdldCk6Cisg
ICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBlY3RlZC9hY3R1YWwg
UE5Hcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiB0aGUgbmFtZSBvZiB0
aGUgdGVzdAorICAgICAgICAgIHRhcmdldDogRGVidWcgb3IgUmVsZWFzZQorICAgICAgICAiIiIK
KyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAor
ICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0NPTVBBUkUpCisgICAgICAgIGFjdHVhbF9m
aWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAorICAgICAgICAgIHNlbGYu
RklMRU5BTUVfU1VGRklYX0FDVFVBTCArICcucG5nJykKKyAgICAgICAgZXhwZWN0ZWRfZmlsZW5h
bWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICBzZWxmLkZJTEVO
QU1FX1NVRkZJWF9FWFBFQ1RFRCArICcucG5nJykKKworICAgICAgICBnbG9iYWwgX2NvbXBhcmVf
YXZhaWxhYmxlCisgICAgICAgIGNtZCA9ICcnCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCkKKyAgICAgICAg
ICAgIGNtZCA9IFtleGVjdXRhYmxlLCAnLS1kaWZmJywgYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3Rl
ZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lXQorICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gRmFs
c2UKKworICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIGlmIF9jb21wYXJlX2F2YWlsYWJsZToK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNh
bGwoY21kKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICAgICAg
aWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6Cisg
ICAgICAgICAgICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3b3JrIGFyb3VuZCBhIHJhY2UgY29u
ZGl0aW9uIGluIFB5dGhvbiAyLjQncyBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICMg
b2Ygc3VicHJvY2Vzcy5Qb3BlbgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBnbG9i
YWwgX2NvbXBhcmVfbXNnX3ByaW50ZWQKKworICAgICAgICBpZiBub3QgX2NvbXBhcmVfYXZhaWxh
YmxlIGFuZCBub3QgX2NvbXBhcmVfbXNnX3ByaW50ZWQ6CisgICAgICAgICAgICBfY29tcGFyZV9t
c2dfcHJpbnRlZCA9IFRydWUKKyAgICAgICAgICAgIHByaW50KCdpbWFnZV9kaWZmIG5vdCBmb3Vu
ZC4gTWFrZSBzdXJlIHlvdSBoYXZlIGEgJyArIHRhcmdldCArCisgICAgICAgICAgICAgICAgICAn
IGJ1aWxkIG9mIHRoZSBpbWFnZV9kaWZmIGV4ZWN1dGFibGUuJykKKworICAgICAgICByZXR1cm4g
cmVzdWx0CisKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91
dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBD
b21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5kCisgICAgICAgIGNo
ZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExheW91dFRlc3QgZGly
ZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorCisgICAgICAgICMg
SWYgd2UgZGlkbid0IHByb2R1Y2UgYSBoYXNoIGZpbGUsIHRoaXMgdGVzdCBtdXN0IGJlIHRleHQt
b25seS4KKyAgICAgICAgaWYgdGVzdF9hcmdzLmhhc2ggaXMgTm9uZToKKyAgICAgICAgICAgIHJl
dHVybiBmYWlsdXJlcworCisgICAgICAgICMgSWYgd2UncmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNl
bGluZSwgd2UgcGFzcy4KKyAgICAgICAgaWYgdGVzdF9hcmdzLm5ld19iYXNlbGluZToKKyAgICAg
ICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZmlsZXMoZmlsZW5hbWUsIHRlc3RfYXJncy5wbmdf
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYXJncy5oYXNo
KQorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICAgICAgIyBDb21wYXJlIGhhc2hl
cy4KKyAgICAgICAgZXhwZWN0ZWRfaGFzaF9maWxlID0gcGF0aF91dGlscy5leHBlY3RlZF9maWxl
bmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnLmNoZWNrc3VtJykKKyAgICAgICAgZXhwZWN0ZWRfcG5nX2ZpbGUg
PSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCisKKyAgICAg
ICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWco
J1VzaW5nICVzJyAlIGV4cGVjdGVkX2hhc2hfZmlsZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVi
dWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxlKQorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGV4cGVjdGVkX2hhc2ggPSBvcGVuKGV4cGVjdGVkX2hhc2hfZmlsZSwgInIiKS5yZWFk
KCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlcnJuby5FTk9F
TlQgIT0gZS5lcnJubzoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhwZWN0
ZWRfaGFzaCA9ICcnCisKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhwZWN0ZWRf
cG5nX2ZpbGUpOgorICAgICAgICAgICAgIyBSZXBvcnQgYSBtaXNzaW5nIGV4cGVjdGVkIFBORyBm
aWxlLgorICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICcnLCAn
LmNoZWNrc3VtJywgdGVzdF9hcmdzLmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9oYXNoLCBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkKKyAgICAgICAg
ICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgdGVzdF9hcmdzLnBuZ19wYXRoLCAn
LWFjdHVhbC5wbmcnKQorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMu
RmFpbHVyZU1pc3NpbmdJbWFnZShzZWxmKSkKKyAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwor
ICAgICAgICBlbGlmIHRlc3RfYXJncy5oYXNoID09IGV4cGVjdGVkX2hhc2g6CisgICAgICAgICAg
ICAjIEhhc2ggbWF0Y2hlZCAobm8gZGlmZiBuZWVkZWQsIG9rYXkgdG8gcmV0dXJuKS4KKyAgICAg
ICAgICAgIHJldHVybiBmYWlsdXJlcworCisKKyAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmls
ZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywgdGVzdF9hcmdzLmhhc2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2hhc2gsIGRpZmY9RmFsc2UsIHdkaWZmPUZh
bHNlKQorICAgICAgICBzZWxmLl9jb3B5X291dHB1dF9wbmcoZmlsZW5hbWUsIHRlc3RfYXJncy5w
bmdfcGF0aCwgJy1hY3R1YWwucG5nJykKKyAgICAgICAgc2VsZi5fY29weV9vdXRwdXRfcG5nKGZp
bGVuYW1lLCBleHBlY3RlZF9wbmdfZmlsZSwgJy1leHBlY3RlZC5wbmcnKQorCisgICAgICAgICMg
RXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgcmVzdWx0IGluIG9uZSBjb2RlcGF0aCBiZWxvdyBidXQg
d2UKKyAgICAgICAgIyBzdGlsbCBuZWVkIHRvIGNhbGwgQ3JlYXRlSW1hZ2VEaWZmIGZvciBvdGhl
ciBjb2RlcGF0aHMuCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NyZWF0ZV9pbWFnZV9kaWZmKGZp
bGVuYW1lLCB0YXJnZXQpCisgICAgICAgIGlmIGV4cGVjdGVkX2hhc2ggPT0gJyc6CisgICAgICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlSGFz
aChzZWxmKSkKKyAgICAgICAgZWxpZiB0ZXN0X2FyZ3MuaGFzaCAhPSBleHBlY3RlZF9oYXNoOgor
ICAgICAgICAgICAgIyBIYXNoZXMgZG9uJ3QgbWF0Y2gsIHNvIHNlZSBpZiB0aGUgaW1hZ2VzIG1h
dGNoLiBJZiB0aGV5IGRvLCB0aGVuCisgICAgICAgICAgICAjIHRoZSBoYXNoIGlzIHdyb25nLgor
ICAgICAgICAgICAgaWYgcmVzdWx0ID09IDA6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBw
ZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaEluY29ycmVjdChzZWxmKSkKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVy
ZXMuRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoKHNlbGYpKQorCisgICAgICAgIHJldHVybiBmYWls
dXJlcworCisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwgZmlsZTEsIGZpbGUyKToKKyAgICAgICAg
IiIiRGlmZiB0d28gaW1hZ2UgZmlsZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxl
MSwgZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGZpbGVzIHRvIGNvbXBhcmUuCisKKyAgICAgICAg
UmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIHR3byBmaWxlcyBhcmUgZGlmZmVyZW50LgorICAg
ICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2VfZGlmZl9wYXRoKCdEZWJ1Zycp
CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBsb2dnaW5nLndhcm4o
J0ZhaWxlZCB0byBmaW5kIGltYWdlIGRpZmYgZXhlY3V0YWJsZS4nKQorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKworICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwgZmlsZTEsIGZpbGUyXQorICAg
ICAgICByZXN1bHQgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnBy
b2Nlc3MuY2FsbChjbWQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAg
bG9nZ2luZy53YXJuKCdGYWlsZWQgdG8gY29tcGFyZSBpbWFnZSBkaWZmOiAlcycsIGUpCisgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiByZXN1bHQgPT0gMQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy90ZXN0X3R5cGVfYmFzZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjI4MDEwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkK
QEAgLTAsMCArMSwyNjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyIiIkRlZmluZXMgdGhlIGludGVyZmFjZSBUZXN0VHlwZUJhc2Ugd2hpY2ggb3RoZXIgdGVz
dCB0eXBlcyBpbmhlcml0IGZyb20uCisKK0Fsc28gZGVmaW5lcyB0aGUgVGVzdEFyZ3VtZW50cyAi
c3RydWN0IiB0byBwYXNzIHRoZW0gYWRkaXRpb25hbCBhcmd1bWVudHMuCisiIiIKKworaW1wb3J0
IGNnaQoraW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBvcy5wYXRoCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCBwYXRoX3V0aWxzCisKKworY2xhc3MgVGVzdEFyZ3VtZW50cyhvYmplY3QpOgorICAgICIiIlN0
cnVjdC1saWtlIHdyYXBwZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIG5lZWRlZCBieQorICAg
IHNwZWNpZmljIHRlc3RzLiIiIgorICAgICMgV2hldGhlciB0byBzYXZlIG5ldyBiYXNlbGluZSBy
ZXN1bHRzLgorICAgIG5ld19iYXNlbGluZSA9IEZhbHNlCisKKyAgICAjIFBhdGggdG8gdGhlIGFj
dHVhbCBQTkcgZmlsZSBnZW5lcmF0ZWQgYnkgcGl4ZWwgdGVzdHMKKyAgICBwbmdfcGF0aCA9IE5v
bmUKKworICAgICMgVmFsdWUgb2YgY2hlY2tzdW0gZ2VuZXJhdGVkIGJ5IHBpeGVsIHRlc3RzLgor
ICAgIGhhc2ggPSBOb25lCisKKyAgICAjIFdoZXRoZXIgdG8gdXNlIHdkaWZmIHRvIGdlbmVyYXRl
IGJ5LXdvcmQgZGlmZnMuCisgICAgd2RpZmYgPSBGYWxzZQorCisgICAgIyBXaGV0aGVyIHRvIHJl
cG9ydCB0aGUgbG9jYXRpb25zIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgZmlsZXMgdXNlZC4KKyAg
ICBzaG93X3NvdXJjZXMgPSBGYWxzZQorCisjIFB5dGhvbiBidWcgd29ya2Fyb3VuZC4gIFNlZSB0
aGUgd2RpZmYgY29kZSBpbiBXcml0ZU91dHB1dEZpbGVzIGZvciBhbgorIyBleHBsYW5hdGlvbi4K
K193ZGlmZl9hdmFpbGFibGUgPSBUcnVlCisKKworY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6
CisKKyAgICAjIEZpbGVuYW1lIHBpZWNlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZXMgdG8gdGhlIHRl
c3QgcmVzdWx0cyBkaXJlY3RvcnkuCisgICAgRklMRU5BTUVfU1VGRklYX0FDVFVBTCA9ICItYWN0
dWFsIgorICAgIEZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCA9ICItZXhwZWN0ZWQiCisgICAgRklM
RU5BTUVfU1VGRklYX0RJRkYgPSAiLWRpZmYiCisgICAgRklMRU5BTUVfU1VGRklYX1dESUZGID0g
Ii13ZGlmZi5odG1sIgorICAgIEZJTEVOQU1FX1NVRkZJWF9DT01QQVJFID0gIi1kaWZmLnBuZyIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybSwgcm9vdF9vdXRwdXRfZGlyKToKKyAg
ICAgICAgIiIiSW5pdGlhbGl6ZSBhIFRlc3RUeXBlQmFzZSBvYmplY3QuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBwbGF0Zm9ybTogdGhlIHBsYXRmb3JtIChlLmcuLCAnY2hyb21pdW0tbWFj
LWxlb3BhcmQnKQorICAgICAgICAgICAgaWRlbnRpZnlpbmcgdGhlIHBsYXRmb3JtLXNwZWNpZmlj
IHJlc3VsdHMgdG8gYmUgdXNlZC4KKyAgICAgICAgICByb290X291dHB1dF9kaXI6IFRoZSB1bml4
IHN0eWxlIHBhdGggdG8gdGhlIG91dHB1dCBkaXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxm
Ll9yb290X291dHB1dF9kaXIgPSByb290X291dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fcGxhdGZv
cm0gPSBwbGF0Zm9ybQorCisgICAgZGVmIF9tYWtlX291dHB1dF9kaXJlY3Rvcnkoc2VsZiwgZmls
ZW5hbWUpOgorICAgICAgICAiIiJDcmVhdGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBuZWVk
ZWQpIGZvciBhIGdpdmVuIHRlc3QKKyAgICAgICAgZmlsZW5hbWUuIiIiCisgICAgICAgIG91dHB1
dF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9yb290X291dHB1dF9kaXIsCisgICAgICAg
ICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQorICAgICAg
ICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQob3V0cHV0X2Zp
bGVuYW1lKVswXSkKKworICAgIGRlZiBfc2F2ZV9iYXNlbGluZV9kYXRhKHNlbGYsIGZpbGVuYW1l
LCBkYXRhLCBtb2RpZmllcik6CisgICAgICAgICIiIlNhdmVzIGEgbmV3IGJhc2VsaW5lIGZpbGUg
aW50byB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSBmaWxlIHdpbGwgYmUg
bmFtZWQgc2ltcGx5ICI8dGVzdD4tZXhwZWN0ZWQ8bW9kaWZpZXI+Iiwgc3VpdGFibGUgZm9yCisg
ICAgICAgIHVzZSBhcyB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBpbiBhIGxhdGVyIHJ1bi4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiBwYXRoIHRvIHRoZSB0ZXN0IGZpbGUKKyAg
ICAgICAgICBkYXRhOiByZXN1bHQgdG8gYmUgc2F2ZWQgYXMgdGhlIG5ldyBiYXNlbGluZQorICAg
ICAgICAgIG1vZGlmaWVyOiB0eXBlIG9mIHRoZSByZXN1bHQgZmlsZSwgZS5nLiAiLnR4dCIgb3Ig
Ii5wbmciCisgICAgICAgICIiIgorICAgICAgICByZWxhdGl2ZV9kaXIgPSBvcy5wYXRoLmRpcm5h
bWUoCisgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5h
bWUpKQorICAgICAgICBvdXRwdXRfZGlyID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgcGF0
aF91dGlscy5jaHJvbWl1bV9iYXNlbGluZV9wYXRoKHNlbGYuX3BsYXRmb3JtKSwgcmVsYXRpdmVf
ZGlyKQorICAgICAgICBvdXRwdXRfZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5zcGxp
dGV4dChmaWxlbmFtZSlbMF0gKworICAgICAgICAgICAgc2VsZi5GSUxFTkFNRV9TVUZGSVhfRVhQ
RUNURUQgKyBtb2RpZmllcikKKworICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0
b3J5KG91dHB1dF9kaXIpCisgICAgICAgIG91dHB1dF9wYXRoID0gb3MucGF0aC5qb2luKG91dHB1
dF9kaXIsIG91dHB1dF9maWxlKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCd3cml0aW5nIG5ldyBi
YXNlbGluZSB0byAiJXMiJyAlIChvdXRwdXRfcGF0aCkpCisgICAgICAgIG9wZW4ob3V0cHV0X3Bh
dGgsICJ3YiIpLndyaXRlKGRhdGEpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYsIGZp
bGVuYW1lLCBtb2RpZmllcik6CisgICAgICAgICIiIlJldHVybnMgYSBmaWxlbmFtZSBpbnNpZGUg
dGhlIG91dHB1dCBkaXIgdGhhdCBjb250YWlucyBtb2RpZmllci4KKworICAgICAgICBGb3IgZXhh
bXBsZSwgaWYgZmlsZW5hbWUgaXMgYzovLi4uL2Zhc3QvZG9tL2Zvby5odG1sIGFuZCBtb2RpZmll
ciBpcworICAgICAgICAiLWV4cGVjdGVkLnR4dCIsIHRoZSByZXR1cm4gdmFsdWUgaXMKKyAgICAg
ICAgYzovY3lnd2luL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZG9tL2Zvby1leHBlY3Rl
ZC50eHQKKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxl
bmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICAgICBtb2RpZmllcjogYSBzdHJpbmcgdG8gcmVwbGFj
ZSB0aGUgZXh0ZW5zaW9uIG9mIGZpbGVuYW1lIHdpdGgKKworICAgICAgICBSZXR1cm46CisgICAg
ICAgICAgVGhlIGFic29sdXRlIHdpbmRvd3MgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGVuYW1lCisg
ICAgICAgICIiIgorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5f
cm9vdF9vdXRwdXRfZGlyLAorICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQob3V0cHV0
X2ZpbGVuYW1lKVswXSArIG1vZGlmaWVyCisKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwg
ZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgICAgICAiIiJN
ZXRob2QgdGhhdCBjb21wYXJlcyB0aGUgb3V0cHV0IGZyb20gdGhlIHRlc3Qgd2l0aCB0aGUKKyAg
ICAgICAgZXhwZWN0ZWQgdmFsdWUuCisKKyAgICAgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBtZXRo
b2QgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYWxsIHN1YiBjbGFzc2VzLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRlc3QgZmlsZQorICAg
ICAgICAgIHByb2M6IGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXN0X3NoZWxsIHByb2Nlc3MKKyAgICAg
ICAgICBvdXRwdXQ6IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdAor
ICAgICAgICAgIHRlc3RfYXJnczogYSBUZXN0QXJndW1lbnRzIG9iamVjdCBob2xkaW5nIG9wdGlv
bmFsIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgYXJndW1lbnRzCisgICAgICAgICAgdGFyZ2V0
OiBEZWJ1ZyBvciBSZWxlYXNlCisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAgIGEgbGlzdCBv
ZiBUZXN0RmFpbHVyZSBvYmplY3RzLCBlbXB0eSBpZiB0aGUgdGVzdCBwYXNzZXMKKyAgICAgICAg
IiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgd3JpdGVfb3V0cHV0
X2ZpbGVzKHNlbGYsIGZpbGVuYW1lLCB0ZXN0X3R5cGUsIGZpbGVfdHlwZSwgb3V0cHV0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIGRpZmY9VHJ1ZSwgd2RpZmY9RmFsc2Up
OgorICAgICAgICAiIiJXcml0ZXMgdGhlIHRlc3Qgb3V0cHV0LCB0aGUgZXhwZWN0ZWQgb3V0cHV0
IGFuZCBvcHRpb25hbGx5IHRoZSBkaWZmCisgICAgICAgIGJldHdlZW4gdGhlIHR3byB0byBmaWxl
cyBpbiB0aGUgcmVzdWx0cyBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhlIGZ1bGwgb3V0cHV0IGZp
bGVuYW1lIG9mIHRoZSBhY3R1YWwsIGZvciBleGFtcGxlLCB3aWxsIGJlCisgICAgICAgICAgPGZp
bGVuYW1lPjx0ZXN0X3R5cGU+LWFjdHVhbDxmaWxlX3R5cGU+CisgICAgICAgIEZvciBpbnN0YW5j
ZSwKKyAgICAgICAgICBteV90ZXN0LXNpbXAtYWN0dWFsLnR4dAorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgZmlsZW5hbWU6IFRoZSB0ZXN0IGZpbGVuYW1lCisgICAgICAgICAgdGVzdF90eXBl
OiBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0IHR5cGUsIGUuZy4gInNpbXAiCisgICAgICAg
ICAgZmlsZV90eXBlOiBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0IG91dHB1dCBmaWxlIHR5
cGUsIGUuZy4gIi50eHQiCisgICAgICAgICAgb3V0cHV0OiBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSB0ZXN0IG91dHB1dAorICAgICAgICAgIGV4cGVjdGVkOiBBIHN0cmluZyBjb250YWluaW5nIHRo
ZSBleHBlY3RlZCB0ZXN0IG91dHB1dAorICAgICAgICAgIGRpZmY6IGlmIFRydWUsIHdyaXRlIGEg
ZmlsZSBjb250YWluaW5nIHRoZSBkaWZmcyB0b28uIFRoaXMgc2hvdWxkIGJlCisgICAgICAgICAg
ICAgIEZhbHNlIGZvciByZXN1bHRzIHRoYXQgYXJlIG5vdCB0ZXh0CisgICAgICAgICAgd2RpZmY6
IGlmIFRydWUsIHdyaXRlIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHdvcmQtYnktd29yZCBkaWZm
cworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fbWFrZV9vdXRwdXRfZGlyZWN0b3J5KGZpbGVu
YW1lKQorICAgICAgICBhY3R1YWxfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxl
bmFtZSwKKyAgICAgICAgICAgIHRlc3RfdHlwZSArIHNlbGYuRklMRU5BTUVfU1VGRklYX0FDVFVB
TCArIGZpbGVfdHlwZSkKKyAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9m
aWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgIHRlc3RfdHlwZSArIHNlbGYuRklMRU5BTUVf
U1VGRklYX0VYUEVDVEVEICsgZmlsZV90eXBlKQorICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAg
ICAgICBvcGVuKGFjdHVhbF9maWxlbmFtZSwgIndiIikud3JpdGUob3V0cHV0KQorICAgICAgICBp
ZiBleHBlY3RlZDoKKyAgICAgICAgICAgIG9wZW4oZXhwZWN0ZWRfZmlsZW5hbWUsICJ3YiIpLndy
aXRlKGV4cGVjdGVkKQorCisgICAgICAgIGlmIG5vdCBvdXRwdXQgb3Igbm90IGV4cGVjdGVkOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgZGlmZjoKKyAgICAgICAgICAgIGRpZmYg
PSBkaWZmbGliLnVuaWZpZWRfZGlmZihleHBlY3RlZC5zcGxpdGxpbmVzKFRydWUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpdGxpbmVzKFRydWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxl
bmFtZSkKKworICAgICAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1l
KGZpbGVuYW1lLAorICAgICAgICAgICAgICAgIHRlc3RfdHlwZSArIHNlbGYuRklMRU5BTUVfU1VG
RklYX0RJRkYgKyBmaWxlX3R5cGUpCisgICAgICAgICAgICBvcGVuKGRpZmZfZmlsZW5hbWUsICJ3
YiIpLndyaXRlKCcnLmpvaW4oZGlmZikpCisKKyAgICAgICAgaWYgd2RpZmY6CisgICAgICAgICAg
ICAjIFNoZWxsIG91dCB0byB3ZGlmZiB0byBnZXQgY29sb3JlZCBpbmxpbmUgZGlmZnMuCisgICAg
ICAgICAgICBleGVjdXRhYmxlID0gcGF0aF91dGlscy53ZGlmZl9wYXRoKCkKKyAgICAgICAgICAg
IGNtZCA9IFtleGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICctLXN0YXJ0LWRlbGV0ZT0j
I1dESUZGX0RFTCMjJywKKyAgICAgICAgICAgICAgICAgICAnLS1lbmQtZGVsZXRlPSMjV0RJRkZf
RU5EIyMnLAorICAgICAgICAgICAgICAgICAgICctLXN0YXJ0LWluc2VydD0jI1dESUZGX0FERCMj
JywKKyAgICAgICAgICAgICAgICAgICAnLS1lbmQtaW5zZXJ0PSMjV0RJRkZfRU5EIyMnLAorICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgIGFj
dHVhbF9maWxlbmFtZV0KKyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5h
bWUoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF90eXBlICsgc2Vs
Zi5GSUxFTkFNRV9TVUZGSVhfV0RJRkYpCisKKyAgICAgICAgICAgIGdsb2JhbCBfd2RpZmZfYXZh
aWxhYmxlCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFB5dGhvbidzIFBv
cGVuIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBhbnkgcGlwZXMgb3BlbmVkIHRvIGEKKyAgICAgICAg
ICAgICAgICAjIHByb2Nlc3MgdGhhdCBjYW4ndCBiZSBleGVjdXRlZCB0byBiZSBsZWFrZWQuICBT
aW5jZSB0aGlzCisgICAgICAgICAgICAgICAgIyBjb2RlIGlzIHNwZWNpZmljYWxseSBkZXNpZ25l
ZCB0byB0b2xlcmF0ZSBleGVjIGZhaWx1cmVzCisgICAgICAgICAgICAgICAgIyB0byBncmFjZWZ1
bGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZGlmZiBpcyBub3QgaW5zdGFsbGVkLAorICAgICAgICAg
ICAgICAgICMgdGhlIGJ1ZyByZXN1bHRzIGluIGEgbWFzc2l2ZSBmaWxlIGRlc2NyaXB0b3IgbGVh
ay4gQXMgYQorICAgICAgICAgICAgICAgICMgd29ya2Fyb3VuZCwgaWYgYW4gZXhlYyBmYWlsdXJl
IGlzIGV2ZXIgZXhwZXJpZW5jZWQgZm9yCisgICAgICAgICAgICAgICAgIyB3ZGlmZiwgYXNzdW1l
IGl0J3Mgbm90IGF2YWlsYWJsZS4gIFRoaXMgd2lsbCBsZWFrIG9uZQorICAgICAgICAgICAgICAg
ICMgZmlsZSBkZXNjcmlwdG9yIGJ1dCB0aGF0J3MgYmV0dGVyIHRoYW4gbGVha2luZyBlYWNoIHRp
bWUKKyAgICAgICAgICAgICAgICAjIHdkaWZmIHdvdWxkIGJlIHJ1bi4KKyAgICAgICAgICAgICAg
ICAjCisgICAgICAgICAgICAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9w
eXRob24tbGlzdC8KKyAgICAgICAgICAgICAgICAjICAgIDIwMDgtQXVndXN0LzUwNTc1My5odG1s
CisgICAgICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzIxMAorICAg
ICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEl0IGFsc28gaGFzIGEgdGhyZWFkaW5n
IGJ1Zywgc28gd2UgZG9uJ3Qgb3V0cHV0IHdkaWZmIGlmCisgICAgICAgICAgICAgICAgIyB0aGUg
UG9wZW4gcmFpc2VzIGEgVmFsdWVFcnJvci4KKyAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdz
LnB5dGhvbi5vcmcvaXNzdWUxMjM2CisgICAgICAgICAgICAgICAgaWYgX3dkaWZmX2F2YWlsYWJs
ZToKKyAgICAgICAgICAgICAgICAgICAgd2RpZmYgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAg
ICAgICAgICAgICAgICAgICAgY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0
ZSgpWzBdCisgICAgICAgICAgICAgICAgICAgIHdkaWZmX2ZhaWxlZCA9IEZhbHNlCisKKyAgICAg
ICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIGlmIChlLmVycm5vID09
IGVycm5vLkVOT0VOVCBvciBlLmVycm5vID09IGVycm5vLkVBQ0NFUyBvcgorICAgICAgICAgICAg
ICAgICAgICBlLmVycm5vID09IGVycm5vLkVDSElMRCk6CisgICAgICAgICAgICAgICAgICAgIF93
ZGlmZl9hdmFpbGFibGUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAg
ICAgICAgICAgICAgIHdkaWZmX2ZhaWxlZCA9IFRydWUKKworICAgICAgICAgICAgb3V0ID0gb3Bl
bihmaWxlbmFtZSwgJ3diJykKKworICAgICAgICAgICAgaWYgbm90IF93ZGlmZl9hdmFpbGFibGU6
CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAid2RpZmYg
bm90IGluc3RhbGxlZC48YnIvPiAiCisgICAgICAgICAgICAgICAgICAgICJJZiB5b3UncmUgcnVu
bmluZyBPUyBYLCB5b3UgY2FuIGluc3RhbGwgdmlhIG1hY3BvcnRzLiIKKyAgICAgICAgICAgICAg
ICAgICAgIjxici8+IgorICAgICAgICAgICAgICAgICAgICAiSWYgcnVubmluZyBVYnVudHUgbGlu
dXgsIHlvdSBjYW4gcnVuICIKKyAgICAgICAgICAgICAgICAgICAgIidzdWRvIGFwdC1nZXQgaW5z
dGFsbCB3ZGlmZicuIikKKyAgICAgICAgICAgIGVsaWYgd2RpZmZfZmFpbGVkOgorICAgICAgICAg
ICAgICAgIG91dC53cml0ZSgnd2RpZmYgZmFpbGVkIGR1ZSB0byBydW5uaW5nIHdpdGggbXVsdGlw
bGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9zaGVsbHMgaW4gcGFyYWxsZWwu
JykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2RpZmYgPSBjZ2kuZXNjYXBl
KHdkaWZmKQorICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9E
RUwjIycsICc8c3BhbiBjbGFzcz1kZWw+JykKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZm
LnJlcGxhY2UoJyMjV0RJRkZfQUREIyMnLCAnPHNwYW4gY2xhc3M9YWRkPicpCisgICAgICAgICAg
ICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0VORCMjJywgJzwvc3Bhbj4nKQor
ICAgICAgICAgICAgICAgIG91dC53cml0ZSgnPGhlYWQ+PHN0eWxlPi5kZWwgeyBiYWNrZ3JvdW5k
OiAjZmFhOyB9ICcpCisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcuYWRkIHsgYmFja2dyb3Vu
ZDogI2FmYTsgfTwvc3R5bGU+PC9oZWFkPicpCisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCc8
cHJlPicgKyB3ZGlmZiArICc8L3ByZT4nKQorCisgICAgICAgICAgICBvdXQuY2xvc2UoKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy90ZXh0X2RpZmYucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMzM4NTIzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKQEAgLTAsMCArMSwx
MjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkNvbXBh
cmVzIHRoZSB0ZXh0IG91dHB1dCBvZiBhIHRlc3QgdG8gdGhlIGV4cGVjdGVkIHRleHQgb3V0cHV0
LgorCitJZiB0aGUgb3V0cHV0IGRvZXNuJ3QgbWF0Y2gsIHJldHVybnMgRmFpbHVyZVRleHRNaXNt
YXRjaCBhbmQgb3V0cHV0cyB0aGUgZGlmZgorZmlsZXMgaW50byB0aGUgbGF5b3V0IHRlc3QgcmVz
dWx0cyBkaXJlY3RvcnkuCisiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1w
b3J0IG9zLnBhdGgKKworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJv
bSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB0ZXN0X3R5cGVzIGlt
cG9ydCB0ZXN0X3R5cGVfYmFzZQorCisKK2RlZiBpc19yZW5kZXJfdHJlZV9kdW1wKGRhdGEpOgor
ICAgICIiIlJldHVybnMgdHJ1ZSBpZiBkYXRhIGFwcGVhcnMgdG8gYmUgYSByZW5kZXIgdHJlZSBk
dW1wIGFzIG9wcG9zZWQgdG8gYQorICAgIHBsYWluIHRleHQgZHVtcC4iIiIKKyAgICByZXR1cm4g
ZGF0YS5maW5kKCJSZW5kZXJWaWV3IGF0ICgwLDApIikgIT0gLTEKKworCitjbGFzcyBUZXN0VGV4
dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKKworICAgIGRlZiBnZXRfbm9ybWFs
aXplZF9vdXRwdXRfdGV4dChzZWxmLCBvdXRwdXQpOgorICAgICAgICAjIFNvbWUgdGVzdHMgcHJv
ZHVjZSAiXHJcbiIgZXhwbGljaXRseS4gIE91ciBzeXN0ZW0gKFB5dGhvbi9DeWd3aW4pCisgICAg
ICAgICMgaGVscGZ1bGx5IGNoYW5nZXMgdGhlICJcbiIgdG8gIlxyXG4iLCByZXN1bHRpbmcgaW4g
IlxyXHJcbiIuCisgICAgICAgIG5vcm0gPSBvdXRwdXQucmVwbGFjZSgiXHJcclxuIiwgIlxyXG4i
KS5zdHJpcCgiXHJcbiIpLnJlcGxhY2UoCisgICAgICAgICAgICAgIlxyXG4iLCAiXG4iKQorICAg
ICAgICByZXR1cm4gbm9ybSArICJcbiIKKworICAgIGRlZiBnZXRfbm9ybWFsaXplZF9leHBlY3Rl
ZF90ZXh0KHNlbGYsIGZpbGVuYW1lLCBzaG93X3NvdXJjZXMpOgorICAgICAgICAiIiJHaXZlbiB0
aGUgZmlsZW5hbWUgb2YgdGhlIHRlc3QsIHJlYWQgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIGEg
ZmlsZQorICAgICAgICBhbmQgbm9ybWFsaXplIHRoZSB0ZXh0LiAgUmV0dXJucyBhIHN0cmluZyB3
aXRoIHRoZSBleHBlY3RlZCB0ZXh0LCBvciAnJworICAgICAgICBpZiB0aGUgZXhwZWN0ZWQgb3V0
cHV0IGZpbGUgd2FzIG5vdCBmb3VuZC4iIiIKKyAgICAgICAgIyBSZWFkIHRoZSBwbGF0Zm9ybS1z
cGVjaWZpYyBleHBlY3RlZCB0ZXh0LgorICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHBhdGhf
dXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykKKyAgICAgICAgaWYgc2hv
d19zb3VyY2VzOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgJXMnICUgZXhwZWN0
ZWRfZmlsZW5hbWUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChl
eHBlY3RlZF9maWxlbmFtZSkKKworICAgIGRlZiBnZXRfbm9ybWFsaXplZF90ZXh0KHNlbGYsIGZp
bGVuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGV4dCA9IG9wZW4oZmlsZW5hbWUp
LnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIGlmIGVycm5v
LkVOT0VOVCAhPSBlLmVycm5vOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBy
ZXR1cm4gJycKKworICAgICAgICAjIE5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MKKyAgICAgICAgcmV0
dXJuIHRleHQuc3RyaXAoIlxyXG4iKS5yZXBsYWNlKCJcclxuIiwgIlxuIikgKyAiXG4iCisKKyAg
ICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9h
cmdzLCB0YXJnZXQpOgorICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBDb21wYXJlT3V0cHV0
IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgdGV4dCBhZ2FpbnN0CisgICAgICAgIHRoZSBleHBlY3Rl
ZCB0ZXh0IGZyb20gdGhlIExheW91dFRlc3QgZGlyZWN0b3J5LiIiIgorICAgICAgICBmYWlsdXJl
cyA9IFtdCisKKyAgICAgICAgIyBJZiB3ZSdyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLCB3
ZSBwYXNzLgorICAgICAgICBpZiB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lOgorICAgICAgICAgICAg
c2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBvdXRwdXQsICIudHh0IikKKyAgICAg
ICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgICAgICMgTm9ybWFsaXplIHRleHQgdG8gZGlm
ZgorICAgICAgICBvdXRwdXQgPSBzZWxmLmdldF9ub3JtYWxpemVkX291dHB1dF90ZXh0KG91dHB1
dCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmdldF9ub3JtYWxpemVkX2V4cGVjdGVkX3RleHQo
ZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfYXJncy5zaG93X3NvdXJjZXMpCisKKyAgICAgICAgIyBXcml0ZSBvdXRwdXQg
ZmlsZXMgZm9yIG5ldyB0ZXN0cywgdG9vLgorICAgICAgICBpZiBvdXRwdXQgIT0gZXhwZWN0ZWQ6
CisgICAgICAgICAgICAjIFRleHQgZG9lc24ndCBtYXRjaCwgd3JpdGUgb3V0cHV0IGZpbGVzLgor
ICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICIiLCAiLnR4dCIs
IG91dHB1dCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aWZmPVRydWUsIHdkaWZmPVRydWUpCisKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkID09ICcnOgor
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNz
aW5nUmVzdWx0KHNlbGYpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGV4dE1pc21hdGNoKHNlbGYsIFRydWUp
KQorCisgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwg
ZmlsZTEsIGZpbGUyKToKKyAgICAgICAgIiIiRGlmZiB0d28gdGV4dCBmaWxlcy4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIGZpbGUxLCBmaWxlMjogZnVsbCBwYXRocyBvZiB0aGUgZmlsZXMg
dG8gY29tcGFyZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIFRydWUgaWYgdHdvIGZp
bGVzIGFyZSBkaWZmZXJlbnQuCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAi
IiIKKworICAgICAgICByZXR1cm4gKHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChmaWxlMSkgIT0K
KyAgICAgICAgICAgICAgICBzZWxmLmdldF9ub3JtYWxpemVkX3RleHQoZmlsZTIpKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4
cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3VwZGF0ZV9leHBlY3RhdGlvbnNfZnJvbV9kYXNoYm9hcmQucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjNTIyNAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3VwZGF0ZV9leHBl
Y3RhdGlvbnNfZnJvbV9kYXNoYm9hcmQucHkKQEAgLTAsMCArMSw1MDIgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlNjcmlwdCB0byByZWFkIGluIHVwZGF0
ZXMgaW4gSlNPTiBmb3JtIGZyb20gdGhlIGxheW91dCB0ZXN0IGRhc2hib2FyZAorYW5kIGFwcGx5
IHRoZW0gdG8gdGVzdF9leHBlY3RhdGlvbnMudHh0LgorCitVc2FnZToKKzEuIEdvIHRvIGh0dHA6
Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvdHJ1bmsvc3JjL3dlYmtpdC90b29scy8K
KyAgICAgICBsYXlvdXRfdGVzdHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sI2V4cGVjdGF0aW9u
c1VwZGF0ZT10cnVlCisyLiBDb3B5LXBhc3RlIHRoYXQgSlNPTiBpbnRvIGEgbG9jYWwgZmlsZS4K
KzMuIHB5dGhvbiB1cGRhdGVfZXhwZWN0YXRpb25zX2Zyb21fZGFzaGJvYXJkLnB5IHBhdGgvdG8v
bG9jYWwvZmlsZQorIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMK
KworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJvbSBsYXlvdXRfcGFj
a2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKKworc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JykpCitpbXBvcnQgc2ltcGxlanNvbgorCisK
K2RlZiB1cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcyk6CisgICAgZXhw
ZWN0YXRpb25zID0gRXhwZWN0YXRpb25zVXBkYXRlcihOb25lLCBOb25lLAorICAgICAgICAnV0lO
JywgRmFsc2UsIEZhbHNlLCBleHBlY3RhdGlvbnMsIFRydWUpCisgICAgcmV0dXJuIGV4cGVjdGF0
aW9ucy51cGRhdGVfYmFzZWRfb25fanNvbih1cGRhdGVzKQorCisKK2NsYXNzIE9wdGlvbnNBbmRF
eHBlY3RhdGlvbnNIb2xkZXIob2JqZWN0KToKKyAgICAiIiJDb250YWluZXIgZm9yIGEgbGlzdCBv
ZiBvcHRpb25zIGFuZCBhIGxpc3Qgb2YgZXhwZWN0YXRpb25zIGZvciBhIGdpdmVuCisgICAgdGVz
dC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBleHBlY3RhdGlvbnMpOgor
ICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuZXhwZWN0YXRpb25z
ID0gZXhwZWN0YXRpb25zCisKKworY2xhc3MgQnVpbGRJbmZvKE9wdGlvbnNBbmRFeHBlY3RhdGlv
bnNIb2xkZXIpOgorICAgICIiIkNvbnRhaW5lciBmb3IgYSBsaXN0IG9mIG9wdGlvbnMgYW5kIGV4
cGVjdGF0aW9ucyBmb3IgYSBnaXZlbiB0ZXN0IGFzCisgICAgd2VsbCBhcyBhIG1hcCBmcm9tIGJ1
aWxkX3R5cGUgKGUuZy4gZGVidWcvcmVsZWFzZSkgdG8gYSBsaXN0IG9mIHBsYXRmb3JtcworICAg
IChlLmcuIFsid2luIiwgImxpbnV4Il0pLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG9wdGlvbnMsIGV4cGVjdGF0aW9ucywgYnVpbGRfaW5mbyk6CisgICAgICAgIE9wdGlvbnNB
bmRFeHBlY3RhdGlvbnNIb2xkZXIuX19pbml0X18oc2VsZiwgb3B0aW9ucywgZXhwZWN0YXRpb25z
KQorICAgICAgICBzZWxmLmJ1aWxkX2luZm8gPSBidWlsZF9pbmZvCisKKworY2xhc3MgRXhwZWN0
YXRpb25zVXBkYXRlcih0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zRmlsZSk6Cisg
ICAgIiIiQ2xhc3MgdG8gdXBkYXRlIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBiYXNlZCBvbiB1cGRh
dGVzIGluIHRoZSBmb2xsb3dpbmcKKyAgICBmb3JtOgorICAgIHsidGVzdDEuaHRtbCI6IHsKKyAg
ICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIFRJTUVPVVQiLCAiZXh0cmEiOiAi
Q1JBU0gifX0KKyAgICAgICJXSU4gREVCVUciOiB7Im1pc3NpbmciOiAiRkFJTCBUSU1FT1VUIn19
CisgICAgICJ0ZXN0Mi5odG1sIjogLi4uCisgICAgfQorICAgICIiIgorCisgICAgZGVmIF9nZXRf
YnVpbGRfdHlwZXNfYW5kX3BsYXRmb3JtcyhzZWxmLCBvcHRpb25zKToKKyAgICAgICAgIiIiU3Bs
aXRzIHVwIHRoZSBvcHRpb25zIGxpc3QgaW50byB0aHJlZSBsaXN0czogcGxhdGZvcm1zLAorICAg
ICAgICBidWlsZF90eXBlcyBhbmQgb3RoZXJfb3B0aW9ucy4iIiIKKyAgICAgICAgcGxhdGZvcm1z
ID0gW10KKyAgICAgICAgYnVpbGRfdHlwZXMgPSBbXQorICAgICAgICBvdGhlcl9vcHRpb25zID0g
W10KKyAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgb3B0aW9u
IGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgICAgIHBsYXRmb3Jtcy5hcHBlbmQob3B0
aW9uKQorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5CVUlMRF9UWVBFUzoKKyAgICAg
ICAgICAgICAgICBidWlsZF90eXBlcy5hcHBlbmQob3B0aW9uKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBvdGhlcl9vcHRpb25zLmFwcGVuZChvcHRpb24pCisKKyAgICAgICAg
aWYgbm90IGxlbihidWlsZF90eXBlcyk6CisgICAgICAgICAgICBidWlsZF90eXBlcyA9IHNlbGYu
QlVJTERfVFlQRVMKKworICAgICAgICBpZiBub3QgbGVuKHBsYXRmb3Jtcyk6CisgICAgICAgICAg
ICAjIElmIHRoZXJlIGFyZSBubyBwbGF0Zm9ybXMgc3BlY2lmaWVkLCB1c2UgdGhlIG1vc3QgZ2Vu
ZXJpYyB2ZXJzaW9uCisgICAgICAgICAgICAjIG9mIGVhY2ggcGxhdGZvcm0gbmFtZSBzbyB3ZSBk
b24ndCBoYXZlIHRvIGRlZHVwIHRoZW0gbGF0ZXIuCisgICAgICAgICAgICBwbGF0Zm9ybXMgPSBz
ZWxmLkJBU0VfUExBVEZPUk1TCisKKyAgICAgICAgcmV0dXJuIChwbGF0Zm9ybXMsIGJ1aWxkX3R5
cGVzLCBvdGhlcl9vcHRpb25zKQorCisgICAgZGVmIF9hcHBseV91cGRhdGVzX3RvX3Jlc3VsdHMo
c2VsZiwgdGVzdCwgcmVzdWx0cywgdXBkYXRlX2pzb24sCisgICAgICAgIGV4cGVjdGF0aW9ucywg
b3RoZXJfb3B0aW9ucyk6CisgICAgICAgICIiIkFwcGxpZXMgdGhlIHVwZGF0ZXMgZnJvbSB0aGUg
SlNPTiB0byB0aGUgZXhpc3RpbmcgcmVzdWx0cyBpbgorICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy4KKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiBUaGUgdGVzdCB0byB1cGRhdGUuCisg
ICAgICAgICAgcmVzdWx0czogVGhlIHJlc3VsdHMgb2JqZWN0IHRvIHVwZGF0ZS4KKyAgICAgICAg
ICB1cGRhdGVfanNvbjogVGhlIHBhcnNlZCBKU09OIG9iamVjdCB3aXRoIHRoZSB1cGRhdGVzLgor
ICAgICAgICAgIGV4cGVjdGF0aW9uczogVGhlIGV4aXN0aW5nIGV4cGVjdGF0b25zIGZvciB0aGlz
IHRlc3QuCisgICAgICAgICAgb3RoZXJfb3B0aW9uczogVGhlIGV4aXN0aW5nIG1vZGlmaWVycyBm
b3IgdGhpcyB0ZXN0CisgICAgICAgICAgICAgIGV4Y2x1ZGluZyBwbGF0Zm9ybXMgYW5kIGJ1aWxk
X3R5cGVzLgorICAgICAgICAiIiIKKyAgICAgICAgdXBkYXRlcyA9IHVwZGF0ZV9qc29uW3Rlc3Rd
CisgICAgICAgIGZvciBidWlsZF9pbmZvIGluIHVwZGF0ZXM6CisgICAgICAgICAgICBwbGF0Zm9y
bSwgYnVpbGRfdHlwZSA9IGJ1aWxkX2luZm8ubG93ZXIoKS5zcGxpdCgnICcpCisKKyAgICAgICAg
ICAgICMgSWYgdGhlIHBsYXRmb3JtL2J1aWxkX3R5cGUgaXMgbm90IGN1cnJlbnRseSBsaXN0ZWQg
Zm9yIHRoZSB0ZXN0LAorICAgICAgICAgICAgIyBza2lwIGl0IGFzIHRoaXMgcGxhdGZvcm0vYnVp
bGRfdHlwZSBtYXkgYmUgbGlzdGVkIGluIGFub3RoZXIKKyAgICAgICAgICAgICMgbGluZS4KKyAg
ICAgICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiByZXN1bHRzIG9yIGJ1aWxkX3R5cGUgbm90IGlu
IHJlc3VsdHNbcGxhdGZvcm1dOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAg
ICAgIHRoZXNlX3Jlc3VsdHMgPSByZXN1bHRzW3BsYXRmb3JtXVtidWlsZF90eXBlXQorICAgICAg
ICAgICAgdGhlc2VfdXBkYXRlcyA9IHVwZGF0ZXNbYnVpbGRfaW5mb10KKyAgICAgICAgICAgIHRo
ZXNlX2V4cGVjdGF0aW9ucyA9IHRoZXNlX3Jlc3VsdHMuZXhwZWN0YXRpb25zCisgICAgICAgICAg
ICB0aGVzZV9vcHRpb25zID0gdGhlc2VfcmVzdWx0cy5vcHRpb25zCisKKyAgICAgICAgICAgIHNl
bGYuX2FwcGx5X2V4dHJhX3VwZGF0ZXModGhlc2VfdXBkYXRlcywgdGhlc2Vfb3B0aW9ucywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2VfZXhwZWN0YXRpb25zKQor
ICAgICAgICAgICAgc2VsZi5fYXBwbHlfbWlzc2luZ191cGRhdGVzKHRlc3QsIHRoZXNlX3VwZGF0
ZXMsIHRoZXNlX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhlc2VfZXhwZWN0YXRpb25zKQorCisgICAgZGVmIF9hcHBseV9leHRyYV91cGRhdGVzKHNl
bGYsIHVwZGF0ZXMsIG9wdGlvbnMsIGV4cGVjdGF0aW9ucyk6CisgICAgICAgICIiIlJlbW92ZSBl
eHRyYW5lb3VzIGV4cGVjdGF0aW9ucy9vcHRpb25zIGluIHRoZSB1cGRhdGVzIG9iamVjdCB0bwor
ICAgICAgICB0aGUgZ2l2ZW4gb3B0aW9ucy9leHBlY3RhdGlvbnMgbGlzdHMuCisgICAgICAgICIi
IgorICAgICAgICBpZiAiZXh0cmEiIG5vdCBpbiB1cGRhdGVzOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgaXRlbXMgPSB1cGRhdGVzWyJleHRyYSJdLmxvd2VyKCkuc3BsaXQoJyAnKQor
ICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIGl0ZW0gaW4gc2VsZi5F
WFBFQ1RBVElPTlM6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBpbiBleHBlY3RhdGlvbnM6Cisg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5yZW1vdmUoaXRlbSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBpbiBvcHRpb25zOgorICAgICAgICAgICAg
ICAgICAgICBvcHRpb25zLnJlbW92ZShpdGVtKQorCisgICAgZGVmIF9hcHBseV9taXNzaW5nX3Vw
ZGF0ZXMoc2VsZiwgdGVzdCwgdXBkYXRlcywgb3B0aW9ucywgZXhwZWN0YXRpb25zKToKKyAgICAg
ICAgIiIiQXBwbHkgYW4gYWRkaXRpb24gZXhwZWN0YXRpb25zL29wdGlvbnMgaW4gdGhlIHVwZGF0
ZXMgb2JqZWN0IHRvCisgICAgICAgIHRoZSBnaXZlbiBvcHRpb25zL2V4cGVjdGF0aW9ucyBsaXN0
cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICJtaXNzaW5nIiBub3QgaW4gdXBkYXRlczoKKyAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgIGl0ZW1zID0gdXBkYXRlc1sibWlzc2luZyJdLmxv
d2VyKCkuc3BsaXQoJyAnKQorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAg
IGlmIGl0ZW0gPT0gJ290aGVyJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAg
ICAgICAjIERvbid0IGFkZCBUSU1FT1VUIHRvIFNMT1cgdGVzdHMuIEF1dG9tYXRpbmcgdGhhdCBp
cyB0b28KKyAgICAgICAgICAgICMgY29tcGxpY2F0ZWQgaW5zdGVhZCwgcHJpbnQgb3V0IHRlc3Rz
IHRoYXQgbmVlZCBtYW51YWwgYXR0ZW50aW9uLgorICAgICAgICAgICAgaWYgKChpdGVtID09ICJ0
aW1lb3V0IiBhbmQKKyAgICAgICAgICAgICAgICAgKCJzbG93IiBpbiBvcHRpb25zIG9yICJzbG93
IiBpbiBpdGVtcykpIG9yCisgICAgICAgICAgICAgICAgKGl0ZW0gPT0gInNsb3ciIGFuZAorICAg
ICAgICAgICAgICAgICAoInRpbWVvdXQiIGluIGV4cGVjdGF0aW9ucyBvciAidGltZW91dCIgaW4g
aXRlbXMpKSk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJORUVEUyBNQU5VQUwgQVRU
RU5USU9OOiAlcyBtYXkgbmVlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBi
ZSBtYXJrZWQgVElNRU9VVCBvciBTTE9XLiIgJSB0ZXN0KQorICAgICAgICAgICAgZWxpZiBpdGVt
IGluIHNlbGYuRVhQRUNUQVRJT05TOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIGV4
cGVjdGF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChpdGVt
KQorICAgICAgICAgICAgICAgICAgICBpZiAoImZhaWwiIGluIGV4cGVjdGF0aW9ucyBhbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChpdGVtID09ICJpbWFnZSt0ZXh0IiBvciBpdGVtID09ICJp
bWFnZSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID09ICJ0ZXh0IikpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLnJlbW92ZSgiZmFpbCIpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIG9wdGlvbnM6CisgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX2FwcGVuZF9w
bGF0Zm9ybShzZWxmLCBpdGVtLCBidWlsZF90eXBlLCBwbGF0Zm9ybSk6CisgICAgICAgICIiIkFw
cGVuZHMgdGhlIGdpdmUgYnVpbGRfdHlwZSBhbmQgcGxhdGZvcm0gdG8gdGhlIEJ1aWxkSW5mbyBp
dGVtLgorICAgICAgICAiIiIKKyAgICAgICAgYnVpbGRfaW5mbyA9IGl0ZW0uYnVpbGRfaW5mbwor
ICAgICAgICBpZiBidWlsZF90eXBlIG5vdCBpbiBidWlsZF9pbmZvOgorICAgICAgICAgICAgYnVp
bGRfaW5mb1tidWlsZF90eXBlXSA9IFtdCisgICAgICAgIGJ1aWxkX2luZm9bYnVpbGRfdHlwZV0u
YXBwZW5kKHBsYXRmb3JtKQorCisgICAgZGVmIF9nZXRfdXBkYXRlc19kZWR1cGVkX2J5X21hdGNo
aW5nX29wdGlvbnNfYW5kX2V4cGVjdGF0aW9ucyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyk6Cisg
ICAgICAgICIiIkNvbnZlcnRzIHRoZSByZXN1bHRzLCB3aGljaCBpcworICAgICAgICByZXN1bHRz
W3BsYXRmb3Jtc11bYnVpbGRfdHlwZV0gPSBPcHRpb25zQW5kRXhwZWN0YXRpb25zSG9sZGVyCisg
ICAgICAgIHRvIEJ1aWxkSW5mbyBvYmplY3RzLCB3aGljaCBkZWR1cGVzIHBsYXRmb3JtL2J1aWxk
X3R5cGVzIHRoYXQKKyAgICAgICAgaGF2ZSB0aGUgc2FtZSBleHBlY3RhdGlvbnMgYW5kIG9wdGlv
bnMuCisgICAgICAgICIiIgorICAgICAgICB1cGRhdGVzID0gW10KKyAgICAgICAgZm9yIHBsYXRm
b3JtIGluIHJlc3VsdHM6CisgICAgICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiByZXN1bHRzW3Bs
YXRmb3JtXToKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gcmVzdWx0c1twbGF0Zm9ybV1bYnVp
bGRfdHlwZV0ub3B0aW9ucworICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucyA9IHJlc3VsdHNb
cGxhdGZvcm1dW2J1aWxkX3R5cGVdLmV4cGVjdGF0aW9ucworCisgICAgICAgICAgICAgICAgZm91
bmRfbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciB1cGRhdGUgaW4gdXBkYXRlczoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZS5vcHRpb25zID09IG9wdGlvbnMgYW5kCisg
ICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUuZXhwZWN0YXRpb25zID09IGV4cGVjdGF0aW9u
cyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcHBlbmRfcGxhdGZvcm0odXBkYXRl
LCBidWlsZF90eXBlLCBwbGF0Zm9ybSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX21h
dGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAg
ICAgIGlmIGZvdW5kX21hdGNoOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAg
ICAgICAgICAgICAgdXBkYXRlID0gQnVpbGRJbmZvKG9wdGlvbnMsIGV4cGVjdGF0aW9ucywge30p
CisgICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3BsYXRmb3JtKHVwZGF0ZSwgYnVpbGRfdHlw
ZSwgcGxhdGZvcm0pCisgICAgICAgICAgICAgICAgdXBkYXRlcy5hcHBlbmQodXBkYXRlKQorCisg
ICAgICAgIHJldHVybiBzZWxmLl9yb3VuZF91cF9mbGFreV91cGRhdGVzKHVwZGF0ZXMpCisKKyAg
ICBkZWYgX2hhc19tYWpvcml0eV9idWlsZF9jb25maWd1cmF0aW9ucyhzZWxmLCBjYW5kaWRhdGUs
IGNhbmRpZGF0ZTIpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgdGhlIGNhbmRpZGF0ZSBC
dWlsZEluZm8gcmVwcmVzZW50cyBhbGwgYnVpbGQKKyAgICAgICAgY29uZmlndXJhdGlvbnMgZXhj
ZXB0IHRoZSBzaW5nbGUgb25lIGxpc3RlZCBpbiBjYW5kaWRhdGUyLgorICAgICAgICBGb3IgZXhh
bXBsZSwgaWYgYSB0ZXN0IGlzIEZBSUwgVElNRU9VVCBvbiBhbGwgYm90cyBleGNlcHQgV0lOLVJl
bGVhc2UsCisgICAgICAgIHdoZXJlIGl0IGlzIGp1c3QgRkFJTC4gT3IgaWYgYSB0ZXN0IGlzIEZB
SUwgVElNRU9VVCBvbiBNQUMtUmVsZWFzZSwKKyAgICAgICAgTWFjLURlYnVnIGFuZCBMaW51eC1S
ZWxlYXNlLCBidXQgb25seSBGQUlMIG9uIExpbnV4LURlYnVnLgorICAgICAgICAiIiIKKyAgICAg
ICAgYnVpbGRfdHlwZXMgPSBzZWxmLkJVSUxEX1RZUEVTWzpdCisgICAgICAgIGJ1aWxkX2luZm8g
PSBjYW5kaWRhdGUuYnVpbGRfaW5mbworICAgICAgICBpZiAicmVsZWFzZSIgbm90IGluIGJ1aWxk
X2luZm8gb3IgImRlYnVnIiBub3QgaW4gYnVpbGRfaW5mbzoKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICAgICAgcmVsZWFzZV9zZXQgPSBzZXQoYnVpbGRfaW5mb1sicmVsZWFzZSJdKQor
ICAgICAgICBkZWJ1Z19zZXQgPSBzZXQoYnVpbGRfaW5mb1siZGVidWciXSkKKyAgICAgICAgaWYg
bGVuKHJlbGVhc2Vfc2V0IC0gZGVidWdfc2V0KSBpcyAxOgorICAgICAgICAgICAgZnVsbF9zZXQg
PSByZWxlYXNlX3NldAorICAgICAgICAgICAgcGFydGlhbF9zZXQgPSBkZWJ1Z19zZXQKKyAgICAg
ICAgICAgIG5lZWRlZF9idWlsZF90eXBlID0gImRlYnVnIgorICAgICAgICBlbGlmIGxlbihkZWJ1
Z19zZXQgLSByZWxlYXNlX3NldCkgaXMgMToKKyAgICAgICAgICAgIGZ1bGxfc2V0ID0gZGVidWdf
c2V0CisgICAgICAgICAgICBwYXJ0aWFsX3NldCA9IHJlbGVhc2Vfc2V0CisgICAgICAgICAgICBu
ZWVkZWRfYnVpbGRfdHlwZSA9ICJyZWxlYXNlIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICAgICBidWlsZF9pbmZvMiA9IGNhbmRpZGF0ZTIuYnVpbGRfaW5m
bworICAgICAgICBpZiBuZWVkZWRfYnVpbGRfdHlwZSBub3QgaW4gYnVpbGRfaW5mbzI6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJ1aWxkX3R5cGUgPSBOb25lCisgICAgICAg
IGZvciB0aGlzX2J1aWxkX3R5cGUgaW4gYnVpbGRfaW5mbzI6CisgICAgICAgICAgICAjIENhbiBv
bmx5IHdvcmsgaWYgdGhpcyBjYW5kaWRhdGUgaGFzIG9uZSBidWlsZF90eXBlLgorICAgICAgICAg
ICAgaWYgYnVpbGRfdHlwZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAg
ICAgYnVpbGRfdHlwZSA9IHRoaXNfYnVpbGRfdHlwZQorCisgICAgICAgIGlmIHNldChidWlsZF9p
bmZvMltuZWVkZWRfYnVpbGRfdHlwZV0pID09IGZ1bGxfc2V0IC0gcGFydGlhbF9zZXQ6CisgICAg
ICAgICAgICByZXR1cm4gZnVsbF9zZXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICBkZWYgX3JvdW5kX3VwX2ZsYWt5X3VwZGF0ZXMoc2VsZiwgdXBkYXRlcyk6
CisgICAgICAgICIiIkNvbnNvbGlkYXRlcyB0aGUgdXBkYXRlcyBpbnRvIG9uZSB1cGRhdGUgaWYg
NS82IHJlc3VsdHMgYXJlCisgICAgICAgIGZsYWt5IGFuZCB0aGUgaXMgYSBzdWJzZXQgb2YgdGhl
IGZsYWt5IHJlc3VsdHMgNnRoIGp1c3Qgbm90CisgICAgICAgIGhhcHBlbmluZyB0byBmbGFrZSBv
ciAzLzQgcmVzdWx0cyBhcmUgZmxha3kgYW5kIHRoZSA0dGggaGFzIGEKKyAgICAgICAgc3Vic2V0
IG9mIHRoZSBmbGFreSByZXN1bHRzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKHVwZGF0
ZXMpIGlzIG5vdCAyOgorICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZXMKKworICAgICAgICBpdGVt
MSwgaXRlbTIgPSB1cGRhdGVzCisgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgY2Fu
ZGlkYXRlX3BsYXRmb3JtcyA9IHNlbGYuX2hhc19tYWpvcml0eV9idWlsZF9jb25maWd1cmF0aW9u
cyhpdGVtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtMikKKyAgICAgICAgaWYgY2FuZGlkYXRlX3BsYXRm
b3JtczoKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGl0ZW0xCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBjYW5kaWRhdGVfcGxhdGZvcm1zID0gc2VsZi5faGFzX21ham9yaXR5X2J1aWxkX2Nv
bmZpZ3VyYXRpb25zKAorICAgICAgICAgICAgICAgIGl0ZW0xLCBpdGVtMikKKyAgICAgICAgICAg
IGlmIGNhbmRpZGF0ZV9wbGF0Zm9ybXM6CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gaXRl
bTIKKworICAgICAgICBpZiBjYW5kaWRhdGU6CisgICAgICAgICAgICBvcHRpb25zMSA9IHNldChp
dGVtMS5vcHRpb25zKQorICAgICAgICAgICAgb3B0aW9uczIgPSBzZXQoaXRlbTIub3B0aW9ucykK
KyAgICAgICAgICAgIGV4cGVjdGF0aW9uczEgPSBzZXQoaXRlbTEuZXhwZWN0YXRpb25zKQorICAg
ICAgICAgICAgaWYgbm90IGxlbihleHBlY3RhdGlvbnMxKToKKyAgICAgICAgICAgICAgICBleHBl
Y3RhdGlvbnMxLmFkZCgicGFzcyIpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMyID0gc2V0KGl0
ZW0yLmV4cGVjdGF0aW9ucykKKyAgICAgICAgICAgIGlmIG5vdCBsZW4oZXhwZWN0YXRpb25zMik6
CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zMi5hZGQoInBhc3MiKQorCisgICAgICAgICAg
ICBvcHRpb25zX3VuaW9uID0gb3B0aW9uczEgfCBvcHRpb25zMgorICAgICAgICAgICAgZXhwZWN0
YXRpb25zX3VuaW9uID0gZXhwZWN0YXRpb25zMSB8IGV4cGVjdGF0aW9uczIKKyAgICAgICAgICAg
ICMgSWYgdGhlIG9wdGlvbnMgYW5kIGV4cGVjdGF0aW9ucyBhcmUgZXF1YWwgdG8gdGhlaXIgcmVz
cGVjdGl2ZQorICAgICAgICAgICAgIyB1bmlvbnMgdGhlbiB3ZSBjYW4gcm91bmQgdXAgdG8gaW5j
bHVkZSB0aGUgNnRoIHBsYXRmb3JtLgorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBpdGVt
MSBhbmQgb3B0aW9uczEgPT0gb3B0aW9uc191bmlvbiBhbmQKKyAgICAgICAgICAgICAgICBleHBl
Y3RhdGlvbnMxID09IGV4cGVjdGF0aW9uc191bmlvbiBhbmQgbGVuKGV4cGVjdGF0aW9uczIpIG9y
CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlID09IGl0ZW0yIGFuZCBvcHRpb25zMiA9PSBvcHRp
b25zX3VuaW9uIGFuZAorICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uczIgPT0gZXhwZWN0YXRp
b25zX3VuaW9uIGFuZCBsZW4oZXhwZWN0YXRpb25zMSkpOgorICAgICAgICAgICAgICAgIGZvciBi
dWlsZF90eXBlIGluIHNlbGYuQlVJTERfVFlQRVM6CisgICAgICAgICAgICAgICAgICAgIGNhbmRp
ZGF0ZS5idWlsZF9pbmZvW2J1aWxkX3R5cGVdID0gbGlzdCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbmRpZGF0ZV9wbGF0Zm9ybXMpCisgICAgICAgICAgICAgICAgdXBkYXRlcyA9IFtjYW5k
aWRhdGVdCisgICAgICAgIHJldHVybiB1cGRhdGVzCisKKyAgICBkZWYgdXBkYXRlX2Jhc2VkX29u
X2pzb24oc2VsZiwgdXBkYXRlX2pzb24pOgorICAgICAgICAiIiJVcGRhdGVzIHRoZSBleHBlY3Rh
dGlvbnMgYmFzZWQgb24gdGhlIHVwZGF0ZV9qc29uLCB3aGljaCBpcyBvZiB0aGUKKyAgICAgICAg
Zm9sbG93aW5nIGZvcm06CisgICAgICAgIHsiMS5odG1sIjogeworICAgICAgICAgICJXSU4gREVC
VUciOiB7ImV4dHJhIjogIkZBSUwiLCAibWlzc2luZyIsICJQQVNTIn0sCisgICAgICAgICAgIldJ
TiBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0KKyAgICAgICAgfX0KKyAgICAgICAgIiIiCisg
ICAgICAgIG91dHB1dCA9IFtdCisKKyAgICAgICAgY29tbWVudF9saW5lcyA9IFtdCisgICAgICAg
IHJlbW92ZWRfdGVzdF9vbl9wcmV2aW91c19saW5lID0gRmFsc2UKKyAgICAgICAgbGluZW5vID0g
MAorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKCk6
CisgICAgICAgICAgICBsaW5lbm8gKz0gMQorICAgICAgICAgICAgdGVzdCwgb3B0aW9ucywgZXhw
ZWN0YXRpb25zID0gc2VsZi5wYXJzZV9leHBlY3RhdGlvbnNfbGluZShsaW5lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lbm8pCisKKyAgICAgICAgICAgICMgSWYgdGhlcmUgYXJlIG5vIHVwZGF0ZXMgZm9y
IHRoaXMgdGVzdCwgdGhlbiBvdXRwdXQgdGhlIGxpbmUKKyAgICAgICAgICAgICMgdW5tb2RpZmll
ZC4KKyAgICAgICAgICAgIGlmICh0ZXN0IG5vdCBpbiB1cGRhdGVfanNvbik6CisgICAgICAgICAg
ICAgICAgaWYgdGVzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfY29tcGxldGVk
X2xpbmVzKG91dHB1dCwgY29tbWVudF9saW5lcywgbGluZSkKKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVkX3Rlc3Rfb25fcHJldmlvdXNfbGluZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRfdGVzdF9vbl9wcmV2aW91c19saW5lID0g
RmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRfbGluZXMgPSBbXQorICAgICAg
ICAgICAgICAgICAgICBjb21tZW50X2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisKKyAgICAgICAgICAgIHBsYXRmb3JtcywgYnVpbGRfdHlwZXMsIG90aGVyX29w
dGlvbnMgPSBcCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2J1aWxkX3R5cGVzX2FuZF9wbGF0
Zm9ybXMob3B0aW9ucykKKworICAgICAgICAgICAgdXBkYXRlcyA9IHVwZGF0ZV9qc29uW3Rlc3Rd
CisgICAgICAgICAgICBoYXNfdXBkYXRlc19mb3JfdGhpc19saW5lID0gRmFsc2UKKyAgICAgICAg
ICAgIGZvciBidWlsZF9pbmZvIGluIHVwZGF0ZXM6CisgICAgICAgICAgICAgICAgcGxhdGZvcm0s
IGJ1aWxkX3R5cGUgPSBidWlsZF9pbmZvLmxvd2VyKCkuc3BsaXQoJyAnKQorICAgICAgICAgICAg
ICAgIGlmIHBsYXRmb3JtIGluIHBsYXRmb3JtcyBhbmQgYnVpbGRfdHlwZSBpbiBidWlsZF90eXBl
czoKKyAgICAgICAgICAgICAgICAgICAgaGFzX3VwZGF0ZXNfZm9yX3RoaXNfbGluZSA9IFRydWUK
KworICAgICAgICAgICAgIyBJZiB0aGUgdXBkYXRlcyBmb3IgdGhpcyB0ZXN0IGRvbid0IGFwcGx5
IGZvciB0aGUgcGxhdGZvcm1zIC8KKyAgICAgICAgICAgICMgYnVpbGQtdHlwZXMgbGlzdGVkIGlu
IHRoaXMgbGluZSwgdGhlbiBvdXRwdXQgdGhlIGxpbmUgdW5tb2RpZmllZC4KKyAgICAgICAgICAg
IGlmIG5vdCBoYXNfdXBkYXRlc19mb3JfdGhpc19saW5lOgorICAgICAgICAgICAgICAgIHNlbGYu
X3dyaXRlX2NvbXBsZXRlZF9saW5lcyhvdXRwdXQsIGNvbW1lbnRfbGluZXMsIGxpbmUpCisgICAg
ICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAg
ICAgICBmb3IgcGxhdGZvcm0gaW4gcGxhdGZvcm1zOgorICAgICAgICAgICAgICAgIHJlc3VsdHNb
cGxhdGZvcm1dID0ge30KKyAgICAgICAgICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBidWlsZF90
eXBlczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1twbGF0Zm9ybV1bYnVpbGRfdHlwZV0g
PSBcCisgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zQW5kRXhwZWN0YXRpb25zSG9sZGVy
KG90aGVyX29wdGlvbnNbOl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc1s6XSkKKworICAgICAgICAgICAgc2VsZi5fYXBw
bHlfdXBkYXRlc190b19yZXN1bHRzKHRlc3QsIHJlc3VsdHMsIHVwZGF0ZV9qc29uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucywgb3RoZXJf
b3B0aW9ucykKKworICAgICAgICAgICAgZGVkdXBlZF91cGRhdGVzID0gXAorICAgICAgICAgICAg
ICAgIHNlbGYuX2dldF91cGRhdGVzX2RlZHVwZWRfYnlfbWF0Y2hpbmdfb3B0aW9uc19hbmRfZXhw
ZWN0YXRpb25zKAorICAgICAgICAgICAgICAgICAgICByZXN1bHRzKQorICAgICAgICAgICAgcmVt
b3ZlZF90ZXN0X29uX3ByZXZpb3VzX2xpbmUgPSBub3Qgc2VsZi5fd3JpdGVfdXBkYXRlcyhvdXRw
dXQsCisgICAgICAgICAgICAgICAgY29tbWVudF9saW5lcywgdGVzdCwgZGVkdXBlZF91cGRhdGVz
KQorICAgICAgICAjIEFwcGVuZCBhbnkgY29tbWVudC93aGl0ZXNwYWNlIGxpbmVzIGF0IHRoZSBl
bmQgb2YgdGVzdF9leHBlY3RhdGlvbnMuCisgICAgICAgIG91dHB1dC5leHRlbmQoY29tbWVudF9s
aW5lcykKKyAgICAgICAgcmV0dXJuICIiLmpvaW4ob3V0cHV0KQorCisgICAgZGVmIF93cml0ZV91
cGRhdGVzKHNlbGYsIG91dHB1dCwgY29tbWVudF9saW5lcywgdGVzdCwgdXBkYXRlcyk6CisgICAg
ICAgICIiIldyaXRlcyB0aGUgdXBkYXRlcyB0byB0aGUgb3V0cHV0LgorICAgICAgICBBcmdzOgor
ICAgICAgICAgIG91dHB1dDogTGlzdCB0byBhcHBlbmQgdXBkYXRlcyB0by4KKyAgICAgICAgICBj
b21tZW50X2xpbmVzOiBDb21tZW50cyB0aGF0IGNvbWUgYmVmb3JlIHRoaXMgdGVzdCB0aGF0IHNo
b3VsZCBiZQorICAgICAgICAgICAgICBwcmVwZW5kaW5nIGlmZiBhbnkgdGVzdHMgbGluZXMgYXJl
IHdyaXR0ZW4gb3V0LgorICAgICAgICAgIHRlc3Q6IFRoZSB0ZXN0IGJlaW5nIHVwZGF0aW5nLgor
ICAgICAgICAgIHVwZGF0ZXM6IExpc3Qgb2YgQnVpbGRJbmZvIGluc3RhbmNlcyB0aGF0IHJlcHJl
c2VudCB0aGUgZmluYWwgdmFsdWVzCisgICAgICAgICAgICAgIGZvciB0aGlzIHRlc3QgbGluZS4u
CisgICAgICAgICIiIgorICAgICAgICB3cm90ZV9hbnlfbGluZXMgPSBGYWxzZQorICAgICAgICBm
b3IgdXBkYXRlIGluIHVwZGF0ZXM6CisgICAgICAgICAgICBvcHRpb25zID0gdXBkYXRlLm9wdGlv
bnMKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucyA9IHVwZGF0ZS5leHBlY3RhdGlvbnMKKworICAg
ICAgICAgICAgaGFzX21lYW5pbmdmdWxfbW9kaWZpZXIgPSBGYWxzZQorICAgICAgICAgICAgZm9y
IG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICAgICAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLk1P
RElGSUVSUzoKKyAgICAgICAgICAgICAgICAgICAgaGFzX21lYW5pbmdmdWxfbW9kaWZpZXIgPSBU
cnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGhhc19ub25fcGFz
c19leHBlY3RhdGlvbiA9IEZhbHNlCisgICAgICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gZXhw
ZWN0YXRpb25zOgorICAgICAgICAgICAgICAgIGlmIGV4cGVjdGF0aW9uICE9ICJwYXNzIjoKKyAg
ICAgICAgICAgICAgICAgICAgaGFzX25vbl9wYXNzX2V4cGVjdGF0aW9uID0gVHJ1ZQorICAgICAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIElmIHRoaXMgdGVzdCBpcyBvbmx5
IGxlZnQgd2l0aCBwbGF0Zm9ybSwgYnVpbGRfdHlwZSwgYnVnIG51bWJlcgorICAgICAgICAgICAg
IyBhbmQgYSBQQVNTIG9yIG5vIGV4cGVjdGF0aW9uLCB0aGVuIHdlIGNhbiBleGNsdWRlIGl0IGZy
b20KKyAgICAgICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnMuCisgICAgICAgICAgICBpZiBub3Qg
aGFzX21lYW5pbmdmdWxfbW9kaWZpZXIgYW5kIG5vdCBoYXNfbm9uX3Bhc3NfZXhwZWN0YXRpb246
CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90IGhhc19ub25f
cGFzc19leHBlY3RhdGlvbjoKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBbInBhc3Mi
XQorCisgICAgICAgICAgICBtaXNzaW5nX2J1aWxkX3R5cGVzID0gbGlzdChzZWxmLkJVSUxEX1RZ
UEVTKQorICAgICAgICAgICAgc2VudGluYWwgPSBOb25lCisgICAgICAgICAgICBmb3IgYnVpbGRf
dHlwZSBpbiB1cGRhdGUuYnVpbGRfaW5mbzoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VudGlu
YWw6CisgICAgICAgICAgICAgICAgICAgIHNlbnRpbmFsID0gdXBkYXRlLmJ1aWxkX2luZm9bYnVp
bGRfdHlwZV0KKyAgICAgICAgICAgICAgICAjIFJlbW92ZSBidWlsZF90eXBlcyB3aGVyZSB0aGUg
bGlzdCBvZiBwbGF0Zm9ybXMgaXMgZXF1YWwuCisgICAgICAgICAgICAgICAgaWYgc2VudGluYWwg
PT0gdXBkYXRlLmJ1aWxkX2luZm9bYnVpbGRfdHlwZV06CisgICAgICAgICAgICAgICAgICAgIG1p
c3NpbmdfYnVpbGRfdHlwZXMucmVtb3ZlKGJ1aWxkX3R5cGUpCisKKyAgICAgICAgICAgIGhhc19h
bGxfYnVpbGRfdHlwZXMgPSBub3QgbGVuKG1pc3NpbmdfYnVpbGRfdHlwZXMpCisgICAgICAgICAg
ICBpZiBoYXNfYWxsX2J1aWxkX3R5cGVzOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2xp
bmUob3V0cHV0LCBjb21tZW50X2xpbmVzLCB1cGRhdGUsIG9wdGlvbnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWlsZF90eXBlLCBleHBlY3RhdGlvbnMsIHRlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfYWxsX2J1aWxkX3R5cGVzKQorICAgICAg
ICAgICAgICAgIHdyb3RlX2FueV9saW5lcyA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gdXBkYXRlLmJ1aWxkX2luZm86CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2xpbmUob3V0cHV0LCBjb21tZW50X2xpbmVzLCB1cGRh
dGUsIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRf
dHlwZSwgZXhwZWN0YXRpb25zLCB0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhc19hbGxfYnVpbGRfdHlwZXMpCisgICAgICAgICAgICAgICAgICAgIHdyb3RlX2Fu
eV9saW5lcyA9IFRydWUKKworICAgICAgICByZXR1cm4gd3JvdGVfYW55X2xpbmVzCisKKyAgICBk
ZWYgX3dyaXRlX2NvbXBsZXRlZF9saW5lcyhzZWxmLCBvdXRwdXQsIGNvbW1lbnRfbGluZXMsIHRl
c3RfbGluZT1Ob25lKToKKyAgICAgICAgIiIiV3JpdGVzIHRoZSBjb21tZW50X2xpbmVzIGFuZCB0
ZXN0X2xpbmUgdG8gdGhlIG91dHB1dCBhbmQgZW1wdGllcworICAgICAgICBvdXQgdGhlIGNvbW1l
bnRfbGluZXMuIiIiCisgICAgICAgIG91dHB1dC5leHRlbmQoY29tbWVudF9saW5lcykKKyAgICAg
ICAgZGVsIGNvbW1lbnRfbGluZXNbOl0KKyAgICAgICAgaWYgdGVzdF9saW5lOgorICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCh0ZXN0X2xpbmUpCisKKyAgICBkZWYgX2dldF9wbGF0Zm9ybShzZWxm
LCBwbGF0Zm9ybXMpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwbGF0Zm9ybSB0byB1c2UuIElm
IGFsbCBwbGF0Zm9ybXMgYXJlIGxpc3RlZCwgdGhlbgorICAgICAgICByZXR1cm4gdGhlIGVtcHR5
IHN0cmluZyBhcyB0aGF0J3Mgd2hhdCB3ZSB3YW50IHRvIGxpc3QgaW4KKyAgICAgICAgdGVzdF9l
eHBlY3RhdGlvbnMudHh0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcGxhdGZvcm1zOiBM
aXN0IG9mIGxvd2VyLWNhc2UgcGxhdGZvcm0gbmFtZXMuCisgICAgICAgICIiIgorICAgICAgICBw
bGF0Zm9ybXMuc29ydCgpCisgICAgICAgIGlmIHBsYXRmb3JtcyA9PSBsaXN0KHNlbGYuQkFTRV9Q
TEFURk9STVMpOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXR1cm4gIiAiLmpvaW4ocGxhdGZvcm1zKQorCisgICAgZGVmIF93cml0ZV9saW5lKHNl
bGYsIG91dHB1dCwgY29tbWVudF9saW5lcywgdXBkYXRlLCBvcHRpb25zLCBidWlsZF90eXBlLAor
ICAgICAgICBleHBlY3RhdGlvbnMsIHRlc3QsIGV4Y2x1ZGVfYnVpbGRfdHlwZSk6CisgICAgICAg
ICIiIldyaXRlcyBhIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBsaW5lLgorICAgICAgICBBcmdzOgor
ICAgICAgICAgIG91dHB1dDogTGlzdCB0byBhcHBlbmQgbmV3IGxpbmVzIHRvLgorICAgICAgICAg
IGNvbW1lbnRfbGluZXM6IExpc3Qgb2YgbGluZXMgdG8gcHJlcGVuZCBiZWZvcmUgdGhlIG5ldyBs
aW5lLgorICAgICAgICAgIHVwZGF0ZTogVGhlIHVwZGF0ZSBvYmplY3QuCisgICAgICAgICIiIgor
ICAgICAgICBsaW5lID0gb3B0aW9uc1s6XQorCisgICAgICAgIHBsYXRmb3JtcyA9IHNlbGYuX2dl
dF9wbGF0Zm9ybSh1cGRhdGUuYnVpbGRfaW5mb1tidWlsZF90eXBlXSkKKyAgICAgICAgaWYgcGxh
dGZvcm1zOgorICAgICAgICAgICAgbGluZS5hcHBlbmQocGxhdGZvcm1zKQorICAgICAgICBpZiBu
b3QgZXhjbHVkZV9idWlsZF90eXBlOgorICAgICAgICAgICAgbGluZS5hcHBlbmQoYnVpbGRfdHlw
ZSkKKworICAgICAgICBsaW5lID0gW3gudXBwZXIoKSBmb3IgeCBpbiBsaW5lXQorICAgICAgICBl
eHBlY3RhdGlvbnMgPSBbeC51cHBlcigpIGZvciB4IGluIGV4cGVjdGF0aW9uc10KKworICAgICAg
ICBsaW5lID0gbGluZSArIFsiOiIsIHRlc3QsICI9Il0gKyBleHBlY3RhdGlvbnMKKyAgICAgICAg
c2VsZi5fd3JpdGVfY29tcGxldGVkX2xpbmVzKG91dHB1dCwgY29tbWVudF9saW5lcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKGxpbmUpICsgIlxuIikKKwor
CitkZWYgbWFpbigpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZP
LAorICAgICAgICBmb3JtYXQ9JyUobWVzc2FnZSlzJykKKworICAgIHVwZGF0ZXMgPSBzaW1wbGVq
c29uLmxvYWQob3BlbihzeXMuYXJndlsxXSkpCisKKyAgICBwYXRoX3RvX2V4cGVjdGF0aW9ucyA9
IHBhdGhfdXRpbHMuZ2V0X2Fic29sdXRlX3BhdGgoCisgICAgICAgIG9zLnBhdGguZGlybmFtZShz
eXMuYXJndlswXSkpCisgICAgcGF0aF90b19leHBlY3RhdGlvbnMgPSBvcy5wYXRoLmpvaW4ocGF0
aF90b19leHBlY3RhdGlvbnMsCisgICAgICAgICJ0ZXN0X2V4cGVjdGF0aW9ucy50eHQiKQorCisg
ICAgb2xkX2V4cGVjdGF0aW9ucyA9IG9wZW4ocGF0aF90b19leHBlY3RhdGlvbnMpLnJlYWQoKQor
ICAgIG5ld19leHBlY3RhdGlvbnMgPSB1cGRhdGVfZXhwZWN0YXRpb25zKG9sZF9leHBlY3RhdGlv
bnMsIHVwZGF0ZXMpCisgICAgb3BlbihwYXRoX3RvX2V4cGVjdGF0aW9ucywgJ3cnKS53cml0ZShu
ZXdfZXhwZWN0YXRpb25zKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIG1haW4o
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZF91bml0dGVzdC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3VwZGF0ZV9leHBlY3RhdGlvbnNfZnJv
bV9kYXNoYm9hcmRfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGE0NTZmNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3VwZGF0ZV9leHBlY3RhdGlvbnNfZnJvbV9kYXNoYm9hcmRfdW5pdHRl
c3QucHkKQEAgLTAsMCArMSwzNzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIlVuaXR0ZXN0cyB0byBtYWtlIHN1cmUgd2UgZ2VuZXJhdGUgYW5kIHVwZGF0
ZSB0aGUgZXhwZWN0ZWQtKi50eHQgZmlsZXMKK3Byb3Blcmx5IGFmdGVyIHJ1bm5pbmcgbGF5b3V0
IHRlc3RzLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitp
bXBvcnQgdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZAorCisKK2NsYXNzIFVwZGF0
ZUV4cGVjdGF0aW9uc1VuaXR0ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKKyAgICAjIFRlc3RzCisKKyAgICBkZWYgdGVzdF9rZWVwc191bm1vZGlmaWVkX2xp
bmVzKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiIiIvLyBFbnN1cmUgY29tbWVudHMg
YW5kIG5ld2xpbmVzIGRvbid0IGdldCBzdHJpcHBlZC4KKyAgICBCVUcxIFNMT1cgOiAxLmh0bWwg
PSBQQVNTCisKKyAgICBCVUcyIDogMi5odG1sID0gRkFJTCBUSU1FT1VUCisgICAgIiIiCisgICAg
ICAgIGV4cF9yZXN1bHRzID0gIiIiLy8gRW5zdXJlIGNvbW1lbnRzIGFuZCBuZXdsaW5lcyBkb24n
dCBnZXQgc3RyaXBwZWQuCisgICAgQlVHMSBTTE9XIDogMS5odG1sID0gUEFTUworCisgICAgQlVH
MiA6IDIuaHRtbCA9IEZBSUwgVElNRU9VVAorICAgICIiIgorCisgICAgICAgIHVwZGF0ZXMgPSBb
XQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVz
LCBleHBfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9mbGFreV9leHBlY3RhdGlvbihz
ZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBUSU1FT1VUIEZB
SUxcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIDogMS5odG1sID0gVElNRU9V
VFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJF
TEVBU0UiOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4
dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJleHRyYSI6ICJG
QUlMIn0sCisgICAgICAgICAgICAiTElOVVggREVCVUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAg
ICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsiZXh0cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAg
Ik1BQyBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhw
ZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAg
IGRlZiB0ZXN0X3JlbW92ZV9leHBlY3RhdGlvbl9zbG93X3Rlc3Qoc2VsZik6CisgICAgICAgIGV4
cGVjdGF0aW9ucyA9ICJCVUcxIFNMT1cgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVj
dGVkX3Jlc3VsdHMgPSAiQlVHMSBTTE9XIDogMS5odG1sID0gUEFTU1xuIgorICAgICAgICB1cGRh
dGVzID0geyIxLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7ImV4dHJhIjog
IkZBSUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAg
ICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAg
ICAiTElOVVggREVCVUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJNQUMgUkVM
RUFTRSI6IHsiZXh0cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBERUJVRyI6IHsiZXh0
cmEiOiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0
aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9l
eHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwg
PSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiIgorICAgICAgICB1cGRhdGVz
ID0geyIxLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7ImV4dHJhIjogIkZB
SUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAg
ICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAi
TElOVVggREVCVUciOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFT
RSI6IHsiZXh0cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBERUJVRyI6IHsiZXh0cmEi
OiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9u
cywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9leHBl
Y3RhdGlvbl9mcm9tX29uZV9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0g
IkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiIiJC
VUcxIE1BQyBXSU4gREVCVUcgOiAxLmh0bWwgPSBGQUlMCisgICAgQlVHMSBSRUxFQVNFIDogMS5o
dG1sID0gRkFJTAorICAgICIiIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7IkxJTlVY
IERFQlVHIjogeyJleHRyYSI6ICJGQUlMIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3Rh
dGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVm
IHRlc3RfcmVtb3ZlX3Nsb3coc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIFNM
T1cgOiAxLmh0bWwgPSBQQVNTXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiIgorICAg
ICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7
ImV4dHJhIjogIlNMT1cifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIlNM
T1cifSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJleHRyYSI6ICJTTE9XIn0sCisg
ICAgICAgICAgICAiTElOVVggREVCVUciOiB7ImV4dHJhIjogIlNMT1cifSwKKyAgICAgICAgICAg
ICJNQUMgUkVMRUFTRSI6IHsiZXh0cmEiOiAiU0xPVyJ9LAorICAgICAgICAgICAgIk1BQyBERUJV
RyI6IHsiZXh0cmEiOiAiU0xPVyJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25z
KGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0
X2FkZF9mbGFreV9leHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIkJV
RzEgOiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVH
MSA6IDEuaHRtbCA9IFRJTUVPVVQgRkFJTFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwi
OiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAg
ICAgICAgICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAi
TElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVgg
REVCVUciOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBSRUxFQVNFIjog
eyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7Im1pc3Npbmci
OiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9u
cywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2FkZF9leHBlY3Rh
dGlvbl9zbG93X3Rlc3Qoc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIFNMT1cg
OiAxLmh0bWwgPSBQQVNTXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSBTTE9X
IDogMS5odG1sID0gUEFTUyBGQUlMXG4iCisgICAgICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsK
KyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAg
ICAgICAiV0lOIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAgICJMSU5V
WCBSRUxFQVNFIjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAgICJMSU5VWCBERUJV
RyI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7Im1p
c3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBERUJVRyI6IHsibWlzc2luZyI6ICJG
QUlMIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1
cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RfYWRkX2V4cGVjdGF0aW9u
KHNlbGYpOgorICAgICAgICAjIG5vdCB5ZXQgaW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuCisK
KyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJC
VUcxIDogMS5odG1sID0gRkFJTFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7Cisg
ICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAg
ICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVgg
UkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVggREVCVUci
OiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIk1BQyBSRUxFQVNFIjogeyJtaXNz
aW5nIjogIkZBSUwifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7Im1pc3NpbmciOiAiRkFJ
TCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBk
YXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2FkZF9leHBlY3RhdGlvbl9m
b3Jfb25lX3BsYXRmb3JtKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSBXSU4g
OiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSBX
SU4gOiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAgICAgICMgVE9ETyhvamFuKTogT25jZSB3ZSBh
ZGQgY3VycmVudGx5IHVubGlzdGVkIHRlc3RzLCB0aGlzIGV4cGVjdCByZXN1bHRzCisgICAgICAg
ICMgZm9yIHRoaXMgdGVzdCBzaG91bGQgYmU6CisgICAgICAgICNleHBlY3RlZF9yZXN1bHRzID0g
IiIiQlVHMSBXSU4gOiAxLmh0bWwgPSBUSU1FT1VUCisgICAgICAgICNCVUdfQVVUTyBMSU5VWCBE
RUJVRyA6IDEuaHRtbCA9IFRJTUVPVVQKKyAgICAgICAgIyIiIgorICAgICAgICB1cGRhdGVzID0g
eyIxLmh0bWwiOiB7IkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifX19CisgICAg
ICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVj
dGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9hZGRfc2xvdyhzZWxmKToKKyAgICAgICAgZXhw
ZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jl
c3VsdHMgPSAiQlVHMSBTTE9XIDogMS5odG1sID0gRkFJTFxuIgorICAgICAgICB1cGRhdGVzID0g
eyIxLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiU0xP
VyJ9LAorICAgICAgICAgICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJTTE9XIn0sCisgICAg
ICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJTTE9XIn0sCisgICAgICAgICAg
ICAiTElOVVggREVCVUciOiB7Im1pc3NpbmciOiAiU0xPVyJ9LAorICAgICAgICAgICAgIk1BQyBS
RUxFQVNFIjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7
Im1pc3NpbmciOiAiU0xPVyJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4
cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2Fk
ZF9yZW1vdmVfbXVsdGlwbGVfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlv
bnMgPSAiIiJCVUcxIFdJTiA6IDEuaHRtbCA9IEZBSUwKKyAgICBCVUcyIE1BQyA6IDEuaHRtbCA9
IEZBSUwiIiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICIiIkJVRzEgU0xPVyBXSU4gOiAx
Lmh0bWwgPSBGQUlMCisgICAgQlVHMiBNQUMgOiAxLmh0bWwgPSBUSU1FT1VUXG4iIiIKKyAgICAg
ICAgIyBUT0RPKG9qYW4pOiBPbmNlIHdlIGFkZCBjdXJyZW50bHkgdW5saXN0ZWQgdGVzdHMsIHRo
aXMgZXhwZWN0IHJlc3VsdHMKKyAgICAgICAgIyBmb3IgdGhpcyB0ZXN0IHNob3VsZCBiZToKKyAg
ICAgICAgI2V4cGVjdGVkX3Jlc3VsdHMgPSAiIiJCVUcxIFNMT1cgV0lOIDogMS5odG1sID0gRkFJ
TAorICAgICAgICAjQlVHX0FVVE8gTElOVVggU0xPVyA6IDEuaHRtbCA9IFBBU1MKKyAgICAgICAg
I0JVRzIgTUFDIDogMS5odG1sID0gVElNRU9VVAorICAgICAgICAjIiIiCisKKyAgICAgICAgdXBk
YXRlcyA9IHsiMS5odG1sIjogeworICAgICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJtaXNzaW5n
IjogIlNMT1cifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7Im1pc3NpbmciOiAiU0xPVyJ9
LAorICAgICAgICAgICAgIkxJTlVYIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiU0xPVyJ9LAorICAg
ICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAgICAgICAgICAg
ICJNQUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIiwgImV4dHJhIjogIkZBSUwifSwK
KyAgICAgICAgICAgICJNQUMgREVCVUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCIsICJleHRyYSI6
ICJGQUlMIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25z
LCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RfYWRkX2V4aXN0aW5n
X2V4cGVjdGF0aW9uKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSA6IDEuaHRt
bCA9IEZBSUxcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIDogMS5odG1sID0g
RkFJTFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7IldJTiBSRUxFQVNFIjogeyJt
aXNzaW5nIjogIkZBSUwifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBl
Y3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9hZGRf
aW1hZ2Vfb3JfdGV4dF90b19mYWlsX2V4cGVjdGF0aW9uKHNlbGYpOgorICAgICAgICBleHBlY3Rh
dGlvbnMgPSAiIiJCVUcxIFdJTiBSRUxFQVNFIDogMS5odG1sID0gRkFJTAorICAgIEJVRzEgTUFD
IFJFTEVBU0UgOiAxLmh0bWwgPSBGQUlMCisgICAgQlVHMSBMSU5VWCBSRUxFQVNFIDogMS5odG1s
ID0gRkFJTAorICAgIEJVRzEgTElOVVggREVCVUcgOiAxLmh0bWwgPSBUSU1FT1VUCisgICAgIiIi
CisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiIiJCVUcxIFdJTiBSRUxFQVNFIDogMS5odG1s
ID0gSU1BR0UrVEVYVAorICAgIEJVRzEgTUFDIFJFTEVBU0UgOiAxLmh0bWwgPSBJTUFHRQorICAg
IEJVRzEgTElOVVggUkVMRUFTRSA6IDEuaHRtbCA9IFRFWFQKKyAgICBCVUcxIExJTlVYIERFQlVH
IDogMS5odG1sID0gVElNRU9VVCBJTUFHRStURVhUCisgICAgIiIiCisgICAgICAgIHVwZGF0ZXMg
PSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJJ
TUFHRStURVhUIn0sCisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiSU1B
R0UifSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlRFWFQifSwK
KyAgICAgICAgICAgICJMSU5VWCBERUJVRyI6IHsibWlzc2luZyI6ICJJTUFHRStURVhUIn19fQor
ICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBl
eHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RfYWRkX290aGVyKHNlbGYpOgorICAgICAg
ICAjIE90aGVyIGlzIGEgY2F0Y2hhbGwgZm9yIG1vcmUgb2JzY3VyZSBleHBlY3RhdGlvbnMgcmVz
dWx0cy4KKyAgICAgICAgIyBXZSBzaG91bGQgbmV2ZXIgYWRkIGl0IHRvIHRlc3RfZXhwZWN0YXRp
b25zLgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSBXSU4gUkVMRUFTRSA6IDEuaHRtbCA9
IEZBSUxcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIFdJTiBSRUxFQVNFIDog
MS5odG1sID0gRkFJTFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7IldJTiBSRUxF
QVNFIjogeyJtaXNzaW5nIjogIk9USEVSIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3Rh
dGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVm
IHRlc3RfcmVtb3ZlX25vbl9leGlzdGFudF9leHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAgZXhw
ZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jl
c3VsdHMgPSAiQlVHMSA6IDEuaHRtbCA9IEZBSUxcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5o
dG1sIjogeyJXSU4gUkVMRUFTRSI6IHsiZXh0cmEiOiAiVElNRU9VVCJ9fX0KKyAgICAgICAgc2Vs
Zi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVz
dWx0cykKKworICAgIGRlZiB0ZXN0X3VwZGF0ZV9zb21lX3BsYXRmb3JtcyhzZWxmKToKKyAgICAg
ICAgZXhwZWN0YXRpb25zID0gIkJVRzEgREVCVUcgOiAxLmh0bWwgPSBURVhUIFBBU1NcbiIKKyAg
ICAgICAgIyBUT0RPKG9qYW4pOiBPbmNlIHdlIGFkZCBjdXJyZW50bHkgdW5saXN0ZWQgdGVzdHMs
IHRoZSBleHBlY3QgcmVzdWx0cworICAgICAgICAjIGZvciB0aGlzIHRlc3Qgc2hvdWxkIGluY2x1
ZGUgdGhlIG1pc3NpbmcgYml0cyBmb3IgUkVMRUFTRS4KKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0
cyA9ICJCVUcxIExJTlVYIERFQlVHIDogMS5odG1sID0gVEVYVCBQQVNTXG4iCisgICAgICAgIHVw
ZGF0ZXMgPSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2lu
ZyI6ICJQQVNTIFRFWFQifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIk1J
U1NJTkcgVEVYVCJ9LAorICAgICAgICAgICAgIk1BQyBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlBB
U1MgVEVYVCJ9LAorICAgICAgICAgICAgIk1BQyBERUJVRyI6IHsiZXh0cmEiOiAiTUlTU0lORyBU
RVhUIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1
cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RfYWRkX3RpbWVvdXRfdG9f
c2xvd190ZXN0KHNlbGYpOgorICAgICAgICAjIFNMT1cgdGVzdHMgbmVlZGluZyBUSU1FT1VUIG5l
ZWQgbWFudWFsIHVwZGF0aW5nLiBTaG91bGQganVzdCBwcmludAorICAgICAgICAjIGEgbG9nIGFu
ZCBub3QgbW9kaWZ5IHRoZSB0ZXN0LgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSBTTE9X
IDogMS5odG1sID0gVEVYVFxuIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgU0xP
VyA6IDEuaHRtbCA9IFRFWFRcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeyJXSU4g
UkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9l
eHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisg
ICAgZGVmIHRlc3RfYWRkX3Nsb3dfdG9fdGltZW91dF90ZXN0KHNlbGYpOgorICAgICAgICAjIFNM
T1cgdGVzdHMgbmVlZGluZyBUSU1FT1VUIG5lZWQgbWFudWFsIHVwZGF0aW5nLiBTaG91bGQganVz
dCBwcmludAorICAgICAgICAjIGEgbG9nIGFuZCBub3QgbW9kaWZ5IHRoZSB0ZXN0LgorICAgICAg
ICBleHBlY3RhdGlvbnMgPSAiQlVHMSA6IDEuaHRtbCA9IFRJTUVPVVRcbiIKKyAgICAgICAgZXhw
ZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIDogMS5odG1sID0gVElNRU9VVFxuIgorICAgICAgICB1cGRh
dGVzID0geyIxLmh0bWwiOiB7IldJTiBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlNMT1cifX19Cisg
ICAgICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4
cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9pbmNsdWRlX2xhc3RfcGxhdGZvcm1faW5f
Zmxha2luZXNzKHNlbGYpOgorICAgICAgICAjIElmIGEgdGVzdCBpcyBmbGFreSBvbiA1LzYgcGxh
dGZvcm1zIGFuZCB0aGUgNnRoJ3MgZXhwZWN0YXRpb25zIGFyZSBhCisgICAgICAgICMgc3Vic2V0
IG9mIHRoZSBvdGhlciA1LzYsIHRoZW4gZ2l2ZSB0aGVtIGFsbCB0aGUgc2FtZSBleHBlY3RhdGlv
bnMuCisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcyIDogMS5odG1sID0gRkFJTFxuIgorICAg
ICAgICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzIgOiAxLmh0bWwgPSBGQUlMIFRJTUVPVVRcbiIK
KyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeworICAgICAgICAgICAgIldJTiBSRUxFQVNF
IjogeyJtaXNzaW5nIjogIlRJTUVPVVQiLCAiZXh0cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAg
IldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAgICAgICAgICAiTElOVVgg
UkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAgICAgICAgICAiTElOVVggREVC
VUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAgICAgICAgICAgIk1BQyBSRUxFQVNFIjog
eyJtaXNzaW5nIjogIlRJTUVPVVQifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7Im1pc3Np
bmciOiAiVElNRU9VVCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVj
dGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2luY2x1
ZGVfbGFzdF9wbGF0Zm9ybV9pbl9mbGFraW5lc3NfdGhyZWVfb3V0X29mX2ZvdXIoc2VsZik6Cisg
ICAgICAgICMgSWYgYSB0ZXN0IGlzIGZsYWt5IG9uIDUvNiBwbGF0Zm9ybXMgYW5kIHRoZSA2dGgn
cyBleHBlY3RhdGlvbnMgYXJlIGEKKyAgICAgICAgIyBzdWJzZXQgb2YgdGhlIG90aGVyIDUvNiwg
dGhlbiBnaXZlIHRoZW0gYWxsIHRoZSBzYW1lIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgZXhwZWN0
YXRpb25zID0gIkJVRzIgTUFDIExJTlVYIDogMS5odG1sID0gRkFJTFxuIgorICAgICAgICBleHBl
Y3RlZF9yZXN1bHRzID0gIkJVRzIgTElOVVggTUFDIDogMS5odG1sID0gRkFJTCBUSU1FT1VUXG4i
CisgICAgICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJMSU5VWCBSRUxF
QVNFIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6
IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAgICAgICAgICAiTUFDIERFQlVHIjogeyJtaXNz
aW5nIjogIlRJTUVPVVQifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBl
Y3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9leGNs
dWRlX2xhc3RfcGxhdGZvcm1fZnJvbV9mbGFraW5lc3Moc2VsZik6CisgICAgICAgICMgSWYgYSB0
ZXN0IGlzIGZsYWt5IG9uIDUvNiBwbGF0Zm9ybXMgYW5kIHRoZSA2dGgncyBleHBlY3RhdGlvbnMK
KyAgICAgICAgIyBhcmUgbm90IGEgc3Vic2V0IG9mIHRoZSBvdGhlciA1LzYsIHRoZW4gZG9uJ3Qg
Z2l2ZSB0aGVtCisgICAgICAgICMgYWxsIHRoZSBzYW1lIGV4cGVjdGF0aW9ucy4KKyAgICAgICAg
ZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVk
X3Jlc3VsdHMgPSAiIiJCVUcxIERFQlVHIDogMS5odG1sID0gRkFJTCBUSU1FT1VUCisgICAgQlVH
MSBMSU5VWCBNQUMgUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUwgVElNRU9VVAorICAgIEJVRzEgV0lO
IFJFTEVBU0UgOiAxLmh0bWwgPSBGQUlMIENSQVNICisgICAgIiIiCisgICAgICAgIHVwZGF0ZXMg
PSB7IjEuaHRtbCI6IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJD
UkFTSCJ9LAorICAgICAgICAgICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0s
CisgICAgICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisg
ICAgICAgICAgICAiTElOVVggREVCVUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAgICAg
ICAgICAgIk1BQyBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifSwKKyAgICAgICAgICAg
ICJNQUMgREVCVUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9fX0KKyAgICAgICAgc2VsZi51cGRh
dGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykK
KworICAgIGRlZiB0ZXN0X3N0cmlwX2NvbW1lbnRzKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlv
bnMgPSAiIiJCVUcxIDogMS5odG1sID0gVElNRU9VVAorCisgICAgLy8gQ29tbWVudC93aGl0ZXNw
YWNlIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIHRlc3QgaXMuCisgICAgQlVHMiBXSU4gUkVM
RUFTRSA6IDIuaHRtbCA9IFRFWFQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFjZSBhZnRlciB0
ZXN0IHNob3VsZCByZW1haW4uCisKKyAgICBCVUcyIE1BQyA6IDIuaHRtbCA9IFRFWFQKKworICAg
IC8vIENvbW1lbnQvd2hpdGVzcGFjZSBhdCBlbmQgb2YgZmlsZSBzaG91bGQgcmVtYWluLgorICAg
ICIiIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIiIiQlVHMSA6IDEuaHRtbCA9IFRJTUVP
VVQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFjZSBhZnRlciB0ZXN0IHNob3VsZCByZW1haW4u
CisKKyAgICBCVUcyIE1BQyBERUJVRyA6IDIuaHRtbCA9IFRFWFQKKworICAgIC8vIENvbW1lbnQv
d2hpdGVzcGFjZSBhdCBlbmQgb2YgZmlsZSBzaG91bGQgcmVtYWluLgorICAgICIiIgorICAgICAg
ICB1cGRhdGVzID0geyIyLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7ImV4
dHJhIjogIlRFWFQifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsiZXh0cmEiOiAiVEVY
VCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBk
YXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2xlYXZlX2NvbW1lbnRzKHNl
bGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiIiJCVUcxIDogMS5odG1sID0gVElNRU9VVAor
CisgICAgLy8gQ29tbWVudC93aGl0ZXNwYWNlIHNob3VsZCByZW1haW4uCisgICAgQlVHMiA6IDIu
aHRtbCA9IEZBSUwgUEFTUworICAgICIiIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIiIi
QlVHMSA6IDEuaHRtbCA9IFRJTUVPVVQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFjZSBzaG91
bGQgcmVtYWluLgorICAgIEJVRzIgTUFDIERFQlVHIDogMi5odG1sID0gRkFJTCBQQVNTCisgICAg
QlVHMiBMSU5VWCBNQUMgUkVMRUFTRSA6IDIuaHRtbCA9IEZBSUwgUEFTUworICAgICIiIgorICAg
ICAgICB1cGRhdGVzID0geyIyLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7
ImV4dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIkZB
SUwifSwKKyAgICAgICAgICAgICJMSU5VWCBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9fX0KKyAg
ICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhw
ZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2xlYXZlX2NvbW1lbnRzX2lmX25vX3doaXRl
c3BhY2VfYWZ0ZXJfdGVzdChzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIiLy8gQ29t
bWVudC93aGl0ZXNwYWNlIHNob3VsZCByZW1haW4uCisgICAgQlVHMiBXSU4gUkVMRUFTRSA6IDIu
aHRtbCA9IFRFWFQKKyAgICBCVUcyIDogMS5odG1sID0gSU1BR0UKKyAgICAiIiIKKyAgICAgICAg
ZXhwZWN0ZWRfcmVzdWx0cyA9ICIiIi8vIENvbW1lbnQvd2hpdGVzcGFjZSBzaG91bGQgcmVtYWlu
LgorICAgIEJVRzIgOiAxLmh0bWwgPSBJTUFHRQorICAgICIiIgorICAgICAgICB1cGRhdGVzID0g
eyIyLmh0bWwiOiB7IldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJURVhUIn19fQorICAgICAgICBz
ZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9y
ZXN1bHRzKQorCisgICAgZGVmIHRlc3RfbGVhdmVzX3VubW9kaWZpZWRfZXhwZWN0YXRpb25zX3Vu
dG91Y2hlZChzZWxmKToKKyAgICAgICAgIyBFbnN1cmVzIHRlc3RzIHRoYXQgd291bGQganVzdCBj
aGFuZ2Ugc29ydCBvcmRlciBvZiBhIGxpbmUgYXJlIG5vb3BzLgorICAgICAgICBleHBlY3RhdGlv
bnMgPSAiQlVHMSBXSU4gTElOVVggOiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAgICAgIGV4cGVj
dGVkX3Jlc3VsdHMgPSAiQlVHMSBXSU4gTElOVVggOiAxLmh0bWwgPSBUSU1FT1VUXG4iCisgICAg
ICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsiTUFDIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiU0xP
VyJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBk
YXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMg
SGVscGVyIGZ1bmN0aW9ucworCisgICAgZGVmIHVwZGF0ZV9leHBlY3RhdGlvbnMoc2VsZiwgZXhw
ZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKToKKyAgICAgICAgcmVzdWx0cyA9
IHVwZGF0ZV9leHBlY3RhdGlvbnNfZnJvbV9kYXNoYm9hcmQudXBkYXRlX2V4cGVjdGF0aW9ucygK
KyAgICAgICAgICAgIGV4cGVjdGF0aW9ucywgdXBkYXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChleHBlY3RlZF9yZXN1bHRzLCByZXN1bHRzKQorCitpZiAnX19tYWluX18nID09IF9fbmFt
ZV9fOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvc2ltcGxl
anNvbi9MSUNFTlNFLnR4dCBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vTElDRU5TRS50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5NWYyOQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vTElDRU5TRS50eHQKQEAgLTAsMCArMSwxOSBAQAor
Q29weXJpZ2h0IChjKSAyMDA2IEJvYiBJcHBvbGl0bworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBn
cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9m
Cit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi
U29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s
IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBt
b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2Vs
bCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g
dGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJz
dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJ
TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J
TkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQg
SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklM
SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us
IEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF
IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCitTT0ZUV0FSRS4KZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vUkVBRE1FLmdvb2dsZSBiL1dlYktpdFRvb2xzL3Np
bXBsZWpzb24vUkVBRE1FLmdvb2dsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43ZjcyNmNlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9SRUFE
TUUuZ29vZ2xlCkBAIC0wLDAgKzEsMTEgQEAKK1VSTDogaHR0cDovL3VuZGVmaW5lZC5vcmcvcHl0
aG9uLyNzaW1wbGVqc29uCitWZXJzaW9uOiAxLjcuMworTGljZW5zZTogTUlUCitMaWNlbnNlIEZp
bGU6IExJQ0VOU0UudHh0CisKK0Rlc2NyaXB0aW9uOgorc2ltcGxlanNvbiBpcyBhIEpTT04gZW5j
b2RlciBhbmQgZGVjb2RlciBmb3IgUHl0aG9uLgorCisKK0xvY2FsIE1vZGlmaWNhdGlvbnM6CitS
ZW1vdmVkIHVuaXQgdGVzdHMgZnJvbSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4KZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL3NpbXBsZWpzb24vX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9zaW1wbGVq
c29uL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDYy
MjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL19faW5pdF9fLnB5
CkBAIC0wLDAgKzEsMjg3IEBACityIiIiCitBIHNpbXBsZSwgZmFzdCwgZXh0ZW5zaWJsZSBKU09O
IGVuY29kZXIgYW5kIGRlY29kZXIKKworSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24p
IDxodHRwOi8vanNvbi5vcmc+IGlzIGEgc3Vic2V0IG9mCitKYXZhU2NyaXB0IHN5bnRheCAoRUNN
QS0yNjIgM3JkIGVkaXRpb24pIHVzZWQgYXMgYSBsaWdodHdlaWdodCBkYXRhCitpbnRlcmNoYW5n
ZSBmb3JtYXQuCisKK3NpbXBsZWpzb24gZXhwb3NlcyBhbiBBUEkgZmFtaWxpYXIgdG8gdXNlcyBv
ZiB0aGUgc3RhbmRhcmQgbGlicmFyeQorbWFyc2hhbCBhbmQgcGlja2xlIG1vZHVsZXMuCisKK0Vu
Y29kaW5nIGJhc2ljIFB5dGhvbiBvYmplY3QgaGllcmFyY2hpZXM6OgorICAgIAorICAgID4+PiBp
bXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBzaW1wbGVqc29uLmR1bXBzKFsnZm9vJywgeydiYXIn
OiAoJ2JheicsIE5vbmUsIDEuMCwgMil9XSkKKyAgICAnWyJmb28iLCB7ImJhciI6IFsiYmF6Iiwg
bnVsbCwgMS4wLCAyXX1dJworICAgID4+PiBwcmludCBzaW1wbGVqc29uLmR1bXBzKCJcImZvb1xi
YXIiKQorICAgICJcImZvb1xiYXIiCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHModSdc
dTEyMzQnKQorICAgICJcdTEyMzQiCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMoJ1xc
JykKKyAgICAiXFwiCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMoeyJjIjogMCwgImIi
OiAwLCAiYSI6IDB9LCBzb3J0X2tleXM9VHJ1ZSkKKyAgICB7ImEiOiAwLCAiYiI6IDAsICJjIjog
MH0KKyAgICA+Pj4gZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gaW8gPSBT
dHJpbmdJTygpCisgICAgPj4+IHNpbXBsZWpzb24uZHVtcChbJ3N0cmVhbWluZyBBUEknXSwgaW8p
CisgICAgPj4+IGlvLmdldHZhbHVlKCkKKyAgICAnWyJzdHJlYW1pbmcgQVBJIl0nCisKK0NvbXBh
Y3QgZW5jb2Rpbmc6OgorCisgICAgPj4+IGltcG9ydCBzaW1wbGVqc29uCisgICAgPj4+IHNpbXBs
ZWpzb24uZHVtcHMoWzEsMiwzLHsnNCc6IDUsICc2JzogN31dLCBzZXBhcmF0b3JzPSgnLCcsJzon
KSkKKyAgICAnWzEsMiwzLHsiNCI6NSwiNiI6N31dJworCitQcmV0dHkgcHJpbnRpbmc6OgorCisg
ICAgPj4+IGltcG9ydCBzaW1wbGVqc29uCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMo
eyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KQorICAgIHsKKyAgICAg
ICAgIjQiOiA1LCAKKyAgICAgICAgIjYiOiA3CisgICAgfQorCitEZWNvZGluZyBKU09OOjoKKyAg
ICAKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gc2ltcGxlanNvbi5sb2Fkcygn
WyJmb28iLCB7ImJhciI6WyJiYXoiLCBudWxsLCAxLjAsIDJdfV0nKQorICAgIFt1J2ZvbycsIHt1
J2Jhcic6IFt1J2JheicsIE5vbmUsIDEuMCwgMl19XQorICAgID4+PiBzaW1wbGVqc29uLmxvYWRz
KCciXFwiZm9vXFxiYXIiJykKKyAgICB1JyJmb29ceDA4YXInCisgICAgPj4+IGZyb20gU3RyaW5n
SU8gaW1wb3J0IFN0cmluZ0lPCisgICAgPj4+IGlvID0gU3RyaW5nSU8oJ1sic3RyZWFtaW5nIEFQ
SSJdJykKKyAgICA+Pj4gc2ltcGxlanNvbi5sb2FkKGlvKQorICAgIFt1J3N0cmVhbWluZyBBUEkn
XQorCitTcGVjaWFsaXppbmcgSlNPTiBvYmplY3QgZGVjb2Rpbmc6OgorCisgICAgPj4+IGltcG9y
dCBzaW1wbGVqc29uCisgICAgPj4+IGRlZiBhc19jb21wbGV4KGRjdCk6CisgICAgLi4uICAgICBp
ZiAnX19jb21wbGV4X18nIGluIGRjdDoKKyAgICAuLi4gICAgICAgICByZXR1cm4gY29tcGxleChk
Y3RbJ3JlYWwnXSwgZGN0WydpbWFnJ10pCisgICAgLi4uICAgICByZXR1cm4gZGN0CisgICAgLi4u
IAorICAgID4+PiBzaW1wbGVqc29uLmxvYWRzKCd7Il9fY29tcGxleF9fIjogdHJ1ZSwgInJlYWwi
OiAxLCAiaW1hZyI6IDJ9JywKKyAgICAuLi4gICAgIG9iamVjdF9ob29rPWFzX2NvbXBsZXgpCisg
ICAgKDErMmopCisKK0V4dGVuZGluZyBKU09ORW5jb2Rlcjo6CisgICAgCisgICAgPj4+IGltcG9y
dCBzaW1wbGVqc29uCisgICAgPj4+IGNsYXNzIENvbXBsZXhFbmNvZGVyKHNpbXBsZWpzb24uSlNP
TkVuY29kZXIpOgorICAgIC4uLiAgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAuLi4g
ICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgY29tcGxleCk6CisgICAgLi4uICAgICAgICAgICAg
IHJldHVybiBbb2JqLnJlYWwsIG9iai5pbWFnXQorICAgIC4uLiAgICAgICAgIHJldHVybiBzaW1w
bGVqc29uLkpTT05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgb2JqKQorICAgIC4uLiAKKyAgICA+Pj4g
ZHVtcHMoMiArIDFqLCBjbHM9Q29tcGxleEVuY29kZXIpCisgICAgJ1syLjAsIDEuMF0nCisgICAg
Pj4+IENvbXBsZXhFbmNvZGVyKCkuZW5jb2RlKDIgKyAxaikKKyAgICAnWzIuMCwgMS4wXScKKyAg
ICA+Pj4gbGlzdChDb21wbGV4RW5jb2RlcigpLml0ZXJlbmNvZGUoMiArIDFqKSkKKyAgICBbJ1sn
LCAnMi4wJywgJywgJywgJzEuMCcsICddJ10KKyAgICAKKworTm90ZSB0aGF0IHRoZSBKU09OIHBy
b2R1Y2VkIGJ5IHRoaXMgbW9kdWxlJ3MgZGVmYXVsdCBzZXR0aW5ncworaXMgYSBzdWJzZXQgb2Yg
WUFNTCwgc28gaXQgbWF5IGJlIHVzZWQgYXMgYSBzZXJpYWxpemVyIGZvciB0aGF0IGFzIHdlbGwu
CisiIiIKK19fdmVyc2lvbl9fID0gJzEuNy4zJworX19hbGxfXyA9IFsKKyAgICAnZHVtcCcsICdk
dW1wcycsICdsb2FkJywgJ2xvYWRzJywKKyAgICAnSlNPTkRlY29kZXInLCAnSlNPTkVuY29kZXIn
LAorXQorCitmcm9tIGRlY29kZXIgaW1wb3J0IEpTT05EZWNvZGVyCitmcm9tIGVuY29kZXIgaW1w
b3J0IEpTT05FbmNvZGVyCisKK19kZWZhdWx0X2VuY29kZXIgPSBKU09ORW5jb2RlcigKKyAgICBz
a2lwa2V5cz1GYWxzZSwKKyAgICBlbnN1cmVfYXNjaWk9VHJ1ZSwKKyAgICBjaGVja19jaXJjdWxh
cj1UcnVlLAorICAgIGFsbG93X25hbj1UcnVlLAorICAgIGluZGVudD1Ob25lLAorICAgIHNlcGFy
YXRvcnM9Tm9uZSwKKyAgICBlbmNvZGluZz0ndXRmLTgnCispCisKK2RlZiBkdW1wKG9iaiwgZnAs
IHNraXBrZXlzPUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwK
KyAgICAgICAgYWxsb3dfbmFuPVRydWUsIGNscz1Ob25lLCBpbmRlbnQ9Tm9uZSwgc2VwYXJhdG9y
cz1Ob25lLAorICAgICAgICBlbmNvZGluZz0ndXRmLTgnLCAqKmt3KToKKyAgICAiIiIKKyAgICBT
ZXJpYWxpemUgYGBvYmpgYCBhcyBhIEpTT04gZm9ybWF0dGVkIHN0cmVhbSB0byBgYGZwYGAgKGEK
KyAgICBgYC53cml0ZSgpYGAtc3VwcG9ydGluZyBmaWxlLWxpa2Ugb2JqZWN0KS4KKworICAgIElm
IGBgc2tpcGtleXNgYCBpcyBgYFRydWVgYCB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90
IGJhc2ljIHR5cGVzCisgICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGludGBgLCBgYGxvbmdg
YCwgYGBmbG9hdGBgLCBgYGJvb2xgYCwgYGBOb25lYGApIAorICAgIHdpbGwgYmUgc2tpcHBlZCBp
bnN0ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgSWYgYGBlbnN1cmVfYXNj
aWlgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIHNvbWUgY2h1bmtzIHdyaXR0ZW4gdG8gYGBmcGBg
CisgICAgbWF5IGJlIGBgdW5pY29kZWBgIGluc3RhbmNlcywgc3ViamVjdCB0byBub3JtYWwgUHl0
aG9uIGBgc3RyYGAgdG8KKyAgICBgYHVuaWNvZGVgYCBjb2VyY2lvbiBydWxlcy4gVW5sZXNzIGBg
ZnAud3JpdGUoKWBgIGV4cGxpY2l0bHkKKyAgICB1bmRlcnN0YW5kcyBgYHVuaWNvZGVgYCAoYXMg
aW4gYGBjb2RlY3MuZ2V0d3JpdGVyKClgYCkgdGhpcyBpcyBsaWtlbHkKKyAgICB0byBjYXVzZSBh
biBlcnJvci4KKworICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBpcyBgYEZhbHNlYGAsIHRoZW4g
dGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjaGVjaworICAgIGZvciBjb250YWluZXIgdHlwZXMgd2ls
bCBiZSBza2lwcGVkIGFuZCBhIGNpcmN1bGFyIHJlZmVyZW5jZSB3aWxsCisgICAgcmVzdWx0IGlu
IGFuIGBgT3ZlcmZsb3dFcnJvcmBgIChvciB3b3JzZSkuCisKKyAgICBJZiBgYGFsbG93X25hbmBg
IGlzIGBgRmFsc2VgYCwgdGhlbiBpdCB3aWxsIGJlIGEgYGBWYWx1ZUVycm9yYGAgdG8KKyAgICBz
ZXJpYWxpemUgb3V0IG9mIHJhbmdlIGBgZmxvYXRgYCB2YWx1ZXMgKGBgbmFuYGAsIGBgaW5mYGAs
IGBgLWluZmBgKQorICAgIGluIHN0cmljdCBjb21wbGlhbmNlIG9mIHRoZSBKU09OIHNwZWNpZmlj
YXRpb24sIGluc3RlYWQgb2YgdXNpbmcgdGhlCisgICAgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAo
YGBOYU5gYCwgYGBJbmZpbml0eWBgLCBgYC1JbmZpbml0eWBgKS4KKworICAgIElmIGBgaW5kZW50
YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFu
ZCBvYmplY3QKKyAgICBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGlu
ZGVudCBsZXZlbC4gQW4gaW5kZW50IGxldmVsCisgICAgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5l
d2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgorCisg
ICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJh
dG9yKWBgIHR1cGxlCisgICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVm
YXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCisgICAgYGAoJywnLCAnOicpYGAgaXMg
dGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorCisgICAgYGBlbmNvZGluZ2Bg
IGlzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHN0ciBpbnN0YW5jZXMsIGRlZmF1bHQgaXMg
VVRGLTguCisKKyAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNzIChl
LmcuIG9uZSB0aGF0IG92ZXJyaWRlcyB0aGUKKyAgICBgYC5kZWZhdWx0KClgYCBtZXRob2QgdG8g
c2VyaWFsaXplIGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKKyAgICB0aGUgYGBj
bHNgYCBrd2FyZy4KKyAgICAiIiIKKyAgICAjIGNhY2hlZCBlbmNvZGVyCisgICAgaWYgKHNraXBr
ZXlzIGlzIEZhbHNlIGFuZCBlbnN1cmVfYXNjaWkgaXMgVHJ1ZSBhbmQKKyAgICAgICAgY2hlY2tf
Y2lyY3VsYXIgaXMgVHJ1ZSBhbmQgYWxsb3dfbmFuIGlzIFRydWUgYW5kCisgICAgICAgIGNscyBp
cyBOb25lIGFuZCBpbmRlbnQgaXMgTm9uZSBhbmQgc2VwYXJhdG9ycyBpcyBOb25lIGFuZAorICAg
ICAgICBlbmNvZGluZyA9PSAndXRmLTgnIGFuZCBub3Qga3cpOgorICAgICAgICBpdGVyYWJsZSA9
IF9kZWZhdWx0X2VuY29kZXIuaXRlcmVuY29kZShvYmopCisgICAgZWxzZToKKyAgICAgICAgaWYg
Y2xzIGlzIE5vbmU6CisgICAgICAgICAgICBjbHMgPSBKU09ORW5jb2RlcgorICAgICAgICBpdGVy
YWJsZSA9IGNscyhza2lwa2V5cz1za2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9hc2NpaSwK
KyAgICAgICAgICAgIGNoZWNrX2NpcmN1bGFyPWNoZWNrX2NpcmN1bGFyLCBhbGxvd19uYW49YWxs
b3dfbmFuLCBpbmRlbnQ9aW5kZW50LAorICAgICAgICAgICAgc2VwYXJhdG9ycz1zZXBhcmF0b3Jz
LCBlbmNvZGluZz1lbmNvZGluZywgKiprdykuaXRlcmVuY29kZShvYmopCisgICAgIyBjb3VsZCBh
Y2NlbGVyYXRlIHdpdGggd3JpdGVsaW5lcyBpbiBzb21lIHZlcnNpb25zIG9mIFB5dGhvbiwgYXQK
KyAgICAjIGEgZGVidWdnYWJpbGl0eSBjb3N0CisgICAgZm9yIGNodW5rIGluIGl0ZXJhYmxlOgor
ICAgICAgICBmcC53cml0ZShjaHVuaykKKworCitkZWYgZHVtcHMob2JqLCBza2lwa2V5cz1GYWxz
ZSwgZW5zdXJlX2FzY2lpPVRydWUsIGNoZWNrX2NpcmN1bGFyPVRydWUsCisgICAgICAgIGFsbG93
X25hbj1UcnVlLCBjbHM9Tm9uZSwgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSwKKyAgICAg
ICAgZW5jb2Rpbmc9J3V0Zi04JywgKiprdyk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGBgb2Jq
YGAgdG8gYSBKU09OIGZvcm1hdHRlZCBgYHN0cmBgLgorCisgICAgSWYgYGBza2lwa2V5c2BgIGlz
IGBgVHJ1ZWBgIHRoZW4gYGBkaWN0YGAga2V5cyB0aGF0IGFyZSBub3QgYmFzaWMgdHlwZXMKKyAg
ICAoYGBzdHJgYCwgYGB1bmljb2RlYGAsIGBgaW50YGAsIGBgbG9uZ2BgLCBgYGZsb2F0YGAsIGBg
Ym9vbGBgLCBgYE5vbmVgYCkgCisgICAgd2lsbCBiZSBza2lwcGVkIGluc3RlYWQgb2YgcmFpc2lu
ZyBhIGBgVHlwZUVycm9yYGAuCisKKyAgICBJZiBgYGVuc3VyZV9hc2NpaWBgIGlzIGBgRmFsc2Vg
YCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYQorICAgIGBgdW5pY29kZWBgIGluc3Rh
bmNlIHN1YmplY3QgdG8gbm9ybWFsIFB5dGhvbiBgYHN0cmBgIHRvIGBgdW5pY29kZWBgCisgICAg
Y29lcmNpb24gcnVsZXMgaW5zdGVhZCBvZiBiZWluZyBlc2NhcGVkIHRvIGFuIEFTQ0lJIGBgc3Ry
YGAuCisKKyAgICBJZiBgYGNoZWNrX2NpcmN1bGFyYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBj
aXJjdWxhciByZWZlcmVuY2UgY2hlY2sKKyAgICBmb3IgY29udGFpbmVyIHR5cGVzIHdpbGwgYmUg
c2tpcHBlZCBhbmQgYSBjaXJjdWxhciByZWZlcmVuY2Ugd2lsbAorICAgIHJlc3VsdCBpbiBhbiBg
YE92ZXJmbG93RXJyb3JgYCAob3Igd29yc2UpLgorCisgICAgSWYgYGBhbGxvd19uYW5gYCBpcyBg
YEZhbHNlYGAsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRvCisgICAgc2VyaWFs
aXplIG91dCBvZiByYW5nZSBgYGZsb2F0YGAgdmFsdWVzIChgYG5hbmBgLCBgYGluZmBgLCBgYC1p
bmZgYCkgaW4KKyAgICBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9u
LCBpbnN0ZWFkIG9mIHVzaW5nIHRoZQorICAgIEphdmFTY3JpcHQgZXF1aXZhbGVudHMgKGBgTmFO
YGAsIGBgSW5maW5pdHlgYCwgYGAtSW5maW5pdHlgYCkuCisKKyAgICBJZiBgYGluZGVudGBgIGlz
IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKKyAg
ICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQg
bGV2ZWwuIEFuIGluZGVudAorICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5l
cy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAorICAgIHJlcHJlc2VudGF0aW9uLgorCisg
ICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJh
dG9yKWBgIHR1cGxlCisgICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVm
YXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCisgICAgYGAoJywnLCAnOicpYGAgaXMg
dGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorCisgICAgYGBlbmNvZGluZ2Bg
IGlzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHN0ciBpbnN0YW5jZXMsIGRlZmF1bHQgaXMg
VVRGLTguCisKKyAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORW5jb2RlcmBgIHN1YmNsYXNzIChl
LmcuIG9uZSB0aGF0IG92ZXJyaWRlcyB0aGUKKyAgICBgYC5kZWZhdWx0KClgYCBtZXRob2QgdG8g
c2VyaWFsaXplIGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGgKKyAgICB0aGUgYGBj
bHNgYCBrd2FyZy4KKyAgICAiIiIKKyAgICAjIGNhY2hlZCBlbmNvZGVyCisgICAgaWYgKHNraXBr
ZXlzIGlzIEZhbHNlIGFuZCBlbnN1cmVfYXNjaWkgaXMgVHJ1ZSBhbmQKKyAgICAgICAgY2hlY2tf
Y2lyY3VsYXIgaXMgVHJ1ZSBhbmQgYWxsb3dfbmFuIGlzIFRydWUgYW5kCisgICAgICAgIGNscyBp
cyBOb25lIGFuZCBpbmRlbnQgaXMgTm9uZSBhbmQgc2VwYXJhdG9ycyBpcyBOb25lIGFuZAorICAg
ICAgICBlbmNvZGluZyA9PSAndXRmLTgnIGFuZCBub3Qga3cpOgorICAgICAgICByZXR1cm4gX2Rl
ZmF1bHRfZW5jb2Rlci5lbmNvZGUob2JqKQorICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICBj
bHMgPSBKU09ORW5jb2RlcgorICAgIHJldHVybiBjbHMoCisgICAgICAgIHNraXBrZXlzPXNraXBr
ZXlzLCBlbnN1cmVfYXNjaWk9ZW5zdXJlX2FzY2lpLAorICAgICAgICBjaGVja19jaXJjdWxhcj1j
aGVja19jaXJjdWxhciwgYWxsb3dfbmFuPWFsbG93X25hbiwgaW5kZW50PWluZGVudCwKKyAgICAg
ICAgc2VwYXJhdG9ycz1zZXBhcmF0b3JzLCBlbmNvZGluZz1lbmNvZGluZywKKyAgICAgICAgKipr
dykuZW5jb2RlKG9iaikKKworX2RlZmF1bHRfZGVjb2RlciA9IEpTT05EZWNvZGVyKGVuY29kaW5n
PU5vbmUsIG9iamVjdF9ob29rPU5vbmUpCisKK2RlZiBsb2FkKGZwLCBlbmNvZGluZz1Ob25lLCBj
bHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgKiprdyk6CisgICAgIiIiCisgICAgRGVzZXJpYWxp
emUgYGBmcGBgIChhIGBgLnJlYWQoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCBjb250
YWluaW5nCisgICAgYSBKU09OIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCisKKyAgICBJ
ZiB0aGUgY29udGVudHMgb2YgYGBmcGBgIGlzIGVuY29kZWQgd2l0aCBhbiBBU0NJSSBiYXNlZCBl
bmNvZGluZyBvdGhlcgorICAgIHRoYW4gdXRmLTggKGUuZy4gbGF0aW4tMSksIHRoZW4gYW4gYXBw
cm9wcmlhdGUgYGBlbmNvZGluZ2BgIG5hbWUgbXVzdAorICAgIGJlIHNwZWNpZmllZC4gRW5jb2Rp
bmdzIHRoYXQgYXJlIG5vdCBBU0NJSSBiYXNlZCAoc3VjaCBhcyBVQ1MtMikgYXJlCisgICAgbm90
IGFsbG93ZWQsIGFuZCBzaG91bGQgYmUgd3JhcHBlZCB3aXRoCisgICAgYGBjb2RlY3MuZ2V0cmVh
ZGVyKGZwKShlbmNvZGluZylgYCwgb3Igc2ltcGx5IGRlY29kZWQgdG8gYSBgYHVuaWNvZGVgYAor
ICAgIG9iamVjdCBhbmQgcGFzc2VkIHRvIGBgbG9hZHMoKWBgCisKKyAgICBgYG9iamVjdF9ob29r
YGAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZQor
ICAgIHJlc3VsdCBvZiBhbnkgb2JqZWN0IGxpdGVyYWwgZGVjb2RlIChhIGBgZGljdGBgKS4gVGhl
IHJldHVybiB2YWx1ZSBvZgorICAgIGBgb2JqZWN0X2hvb2tgYCB3aWxsIGJlIHVzZWQgaW5zdGVh
ZCBvZiB0aGUgYGBkaWN0YGAuIFRoaXMgZmVhdHVyZQorICAgIGNhbiBiZSB1c2VkIHRvIGltcGxl
bWVudCBjdXN0b20gZGVjb2RlcnMgKGUuZy4gSlNPTi1SUEMgY2xhc3MgaGludGluZykuCisgICAg
CisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBp
dCB3aXRoIHRoZSBgYGNsc2BgCisgICAga3dhcmcuCisgICAgIiIiCisgICAgcmV0dXJuIGxvYWRz
KGZwLnJlYWQoKSwKKyAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGNscz1jbHMsIG9iamVjdF9o
b29rPW9iamVjdF9ob29rLCAqKmt3KQorCitkZWYgbG9hZHMocywgZW5jb2Rpbmc9Tm9uZSwgY2xz
PU5vbmUsIG9iamVjdF9ob29rPU5vbmUsICoqa3cpOgorICAgICIiIgorICAgIERlc2VyaWFsaXpl
IGBgc2BgIChhIGBgc3RyYGAgb3IgYGB1bmljb2RlYGAgaW5zdGFuY2UgY29udGFpbmluZyBhIEpT
T04KKyAgICBkb2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0LgorCisgICAgSWYgYGBzYGAgaXMg
YSBgYHN0cmBgIGluc3RhbmNlIGFuZCBpcyBlbmNvZGVkIHdpdGggYW4gQVNDSUkgYmFzZWQgZW5j
b2RpbmcKKyAgICBvdGhlciB0aGFuIHV0Zi04IChlLmcuIGxhdGluLTEpIHRoZW4gYW4gYXBwcm9w
cmlhdGUgYGBlbmNvZGluZ2BgIG5hbWUKKyAgICBtdXN0IGJlIHNwZWNpZmllZC4gRW5jb2Rpbmdz
IHRoYXQgYXJlIG5vdCBBU0NJSSBiYXNlZCAoc3VjaCBhcyBVQ1MtMikKKyAgICBhcmUgbm90IGFs
bG93ZWQgYW5kIHNob3VsZCBiZSBkZWNvZGVkIHRvIGBgdW5pY29kZWBgIGZpcnN0LgorCisgICAg
YGBvYmplY3RfaG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxs
ZWQgd2l0aCB0aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZSAoYSBg
YGRpY3RgYCkuIFRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICBgYG9iamVjdF9ob29rYGAgd2lsbCBi
ZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLiBUaGlzIGZlYXR1cmUKKyAgICBjYW4gYmUg
dXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBDIGNsYXNzIGhp
bnRpbmcpLgorCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywg
c3BlY2lmeSBpdCB3aXRoIHRoZSBgYGNsc2BgCisgICAga3dhcmcuCisgICAgIiIiCisgICAgaWYg
Y2xzIGlzIE5vbmUgYW5kIGVuY29kaW5nIGlzIE5vbmUgYW5kIG9iamVjdF9ob29rIGlzIE5vbmUg
YW5kIG5vdCBrdzoKKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2RlY29kZXIuZGVjb2RlKHMpCisg
ICAgaWYgY2xzIGlzIE5vbmU6CisgICAgICAgIGNscyA9IEpTT05EZWNvZGVyCisgICAgaWYgb2Jq
ZWN0X2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIGt3WydvYmplY3RfaG9vayddID0gb2JqZWN0
X2hvb2sKKyAgICByZXR1cm4gY2xzKGVuY29kaW5nPWVuY29kaW5nLCAqKmt3KS5kZWNvZGUocykK
KworZGVmIHJlYWQocyk6CisgICAgIiIiCisgICAganNvbi1weSBBUEkgY29tcGF0aWJpbGl0eSBo
b29rLiBVc2UgbG9hZHMocykgaW5zdGVhZC4KKyAgICAiIiIKKyAgICBpbXBvcnQgd2FybmluZ3MK
KyAgICB3YXJuaW5ncy53YXJuKCJzaW1wbGVqc29uLmxvYWRzKHMpIHNob3VsZCBiZSB1c2VkIGlu
c3RlYWQgb2YgcmVhZChzKSIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICByZXR1
cm4gbG9hZHMocykKKworZGVmIHdyaXRlKG9iaik6CisgICAgIiIiCisgICAganNvbi1weSBBUEkg
Y29tcGF0aWJpbGl0eSBob29rLiBVc2UgZHVtcHMocykgaW5zdGVhZC4KKyAgICAiIiIKKyAgICBp
bXBvcnQgd2FybmluZ3MKKyAgICB3YXJuaW5ncy53YXJuKCJzaW1wbGVqc29uLmR1bXBzKHMpIHNo
b3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygd3JpdGUocykiLAorICAgICAgICBEZXByZWNhdGlvbldh
cm5pbmcpCisgICAgcmV0dXJuIGR1bXBzKG9iaikKKworCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9zaW1wbGVqc29uL19zcGVlZHVwcy5jIGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9fc3BlZWR1
cHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjI5MGJiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9fc3BlZWR1cHMuYwpAQCAtMCwwICsx
LDIxNSBAQAorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1
MDAwMCAmJiAhZGVmaW5lZChQWV9TU0laRV9UX01JTikKK3R5cGVkZWYgaW50IFB5X3NzaXplX3Q7
CisjZGVmaW5lIFBZX1NTSVpFX1RfTUFYIElOVF9NQVgKKyNkZWZpbmUgUFlfU1NJWkVfVF9NSU4g
SU5UX01JTgorI2VuZGlmCisKK3N0YXRpYyBQeV9zc2l6ZV90Cithc2NpaV9lc2NhcGVfY2hhcihQ
eV9VTklDT0RFIGMsIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycyk7CitzdGF0aWMgUHlP
YmplY3QgKgorYXNjaWlfZXNjYXBlX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyKTsKK3N0YXRpYyBQ
eU9iamVjdCAqCithc2NpaV9lc2NhcGVfc3RyKFB5T2JqZWN0ICpweXN0cik7CitzdGF0aWMgUHlP
YmplY3QgKgorcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYgX19hdHRy
aWJ1dGVfXygoX191bnVzZWRfXykpLCBQeU9iamVjdCAqcHlzdHIpOwordm9pZCBpbml0X3NwZWVk
dXBzKHZvaWQpOworCisjZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcgJiYgYyA8PSAnficgJiYg
YyAhPSAnXFwnICYmIGMgIT0gJy8nICYmIGMgIT0gJyInKQorCisjZGVmaW5lIE1JTl9FWFBBTlNJ
T04gNgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorI2RlZmluZSBNQVhfRVhQQU5TSU9OICgyICog
TUlOX0VYUEFOU0lPTikKKyNlbHNlCisjZGVmaW5lIE1BWF9FWFBBTlNJT04gTUlOX0VYUEFOU0lP
TgorI2VuZGlmCisKK3N0YXRpYyBQeV9zc2l6ZV90Cithc2NpaV9lc2NhcGVfY2hhcihQeV9VTklD
T0RFIGMsIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycykgeworICAgIFB5X1VOSUNPREUg
eDsKKyAgICBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOworICAgIHN3aXRjaCAoYykgeworICAgICAg
ICBjYXNlICcvJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1xcJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsgYnJlYWs7CisgICAgICAgIGNhc2Ug
JyInOiBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBicmVhazsKKyAgICAgICAgY2FzZSAnXGIn
OiBvdXRwdXRbY2hhcnMrK10gPSAnYic7IGJyZWFrOworICAgICAgICBjYXNlICdcZic6IG91dHB1
dFtjaGFycysrXSA9ICdmJzsgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xuJzogb3V0cHV0W2NoYXJz
KytdID0gJ24nOyBicmVhazsKKyAgICAgICAgY2FzZSAnXHInOiBvdXRwdXRbY2hhcnMrK10gPSAn
cic7IGJyZWFrOworICAgICAgICBjYXNlICdcdCc6IG91dHB1dFtjaGFycysrXSA9ICd0JzsgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgICAgICAg
ICBpZiAoYyA+PSAweDEwMDAwKSB7CisgICAgICAgICAgICAgICAgLyogVVRGLTE2IHN1cnJvZ2F0
ZSBwYWlyICovCisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSB2ID0gYyAtIDB4MTAwMDA7Cisg
ICAgICAgICAgICAgICAgYyA9IDB4ZDgwMCB8ICgodiA+PiAxMCkgJiAweDNmZik7CisgICAgICAg
ICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOworICAgICAgICAgICAgICAgIHggPSAoYyAm
IDB4ZjAwMCkgPj4gMTI7CisgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAx
MCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7CisgICAgICAgICAgICAgICAgeCA9IChjICYg
MHgwZjAwKSA+PiA4OworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTAp
ID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgICAgIHggPSAoYyAmIDB4
MDBmMCkgPj4gNDsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/
ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgICAgICB4ID0gKGMgJiAweDAw
MGYpOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsg
eCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgICAgIGMgPSAweGRjMDAgfCAodiAmIDB4
M2ZmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOworICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7CisgICAgICAg
ICAgICB4ID0gKGMgJiAweGYwMDApID4+IDEyOworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytd
ID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7CisgICAgICAgICAgICB4ID0g
KGMgJiAweDBmMDApID4+IDg7CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEw
KSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgIHggPSAoYyAmIDB4MDBm
MCkgPj4gNDsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsg
eCA6ICdhJyArICh4IC0gMTApOworICAgICAgICAgICAgeCA9IChjICYgMHgwMDBmKTsKKyAgICAg
ICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0g
MTApOworICAgIH0KKyAgICByZXR1cm4gY2hhcnM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCith
c2NpaV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpIHsKKyAgICBQeV9zc2l6ZV90IGk7
CisgICAgUHlfc3NpemVfdCBpbnB1dF9jaGFyczsKKyAgICBQeV9zc2l6ZV90IG91dHB1dF9zaXpl
OworICAgIFB5X3NzaXplX3QgY2hhcnM7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgY2hhciAq
b3V0cHV0OworICAgIFB5X1VOSUNPREUgKmlucHV0X3VuaWNvZGU7CisKKyAgICBpbnB1dF9jaGFy
cyA9IFB5VW5pY29kZV9HRVRfU0laRShweXN0cik7CisgICAgaW5wdXRfdW5pY29kZSA9IFB5VW5p
Y29kZV9BU19VTklDT0RFKHB5c3RyKTsKKyAgICAvKiBPbmUgY2hhciBpbnB1dCBjYW4gYmUgdXAg
dG8gNiBjaGFycyBvdXRwdXQsIGVzdGltYXRlIDQgb2YgdGhlc2UgKi8KKyAgICBvdXRwdXRfc2l6
ZSA9IDIgKyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7CisgICAgcnZhbCA9IFB5
U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dHB1dF9zaXplKTsKKyAgICBpZiAocnZh
bCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvdXRwdXQgPSBQ
eVN0cmluZ19BU19TVFJJTkcocnZhbCk7CisgICAgY2hhcnMgPSAwOworICAgIG91dHB1dFtjaGFy
cysrXSA9ICciJzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hhcnM7IGkrKykgeworICAg
ICAgICBQeV9VTklDT0RFIGMgPSBpbnB1dF91bmljb2RlW2ldOworICAgICAgICBpZiAoU19DSEFS
KGMpKSB7CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgY2hhcnMgPSBhc2NpaV9lc2NhcGVfY2hhcihjLCBvdXRwdXQs
IGNoYXJzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3V0cHV0X3NpemUgLSBjaGFycyA8ICgx
ICsgTUFYX0VYUEFOU0lPTikpIHsKKyAgICAgICAgICAgIC8qIFRoZXJlJ3MgbW9yZSB0aGFuIGZv
dXIsIHNvIGxldCdzIHJlc2l6ZSBieSBhIGxvdCAqLworICAgICAgICAgICAgb3V0cHV0X3NpemUg
Kj0gMjsKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgYW4gdXBwZXIgYm91bmQgKi8KKyAgICAgICAg
ICAgIGlmIChvdXRwdXRfc2l6ZSA+IDIgKyAoaW5wdXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKSkg
eworICAgICAgICAgICAgICAgIG91dHB1dF9zaXplID0gMiArIChpbnB1dF9jaGFycyAqIE1BWF9F
WFBBTlNJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNp
emUoJnJ2YWwsIG91dHB1dF9zaXplKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RS
SU5HKHJ2YWwpOworICAgICAgICB9CisgICAgfQorICAgIG91dHB1dFtjaGFycysrXSA9ICciJzsK
KyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgY2hhcnMpID09IC0xKSB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIFB5T2Jq
ZWN0ICoKK2FzY2lpX2VzY2FwZV9zdHIoUHlPYmplY3QgKnB5c3RyKSB7CisgICAgUHlfc3NpemVf
dCBpOworICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7CisgICAgUHlfc3NpemVfdCBvdXRwdXRf
c2l6ZTsKKyAgICBQeV9zc2l6ZV90IGNoYXJzOworICAgIFB5T2JqZWN0ICpydmFsOworICAgIGNo
YXIgKm91dHB1dDsKKyAgICBjaGFyICppbnB1dF9zdHI7CisKKyAgICBpbnB1dF9jaGFycyA9IFB5
U3RyaW5nX0dFVF9TSVpFKHB5c3RyKTsKKyAgICBpbnB1dF9zdHIgPSBQeVN0cmluZ19BU19TVFJJ
TkcocHlzdHIpOworICAgIC8qIE9uZSBjaGFyIGlucHV0IGNhbiBiZSB1cCB0byA2IGNoYXJzIG91
dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLworICAgIG91dHB1dF9zaXplID0gMiArIChNSU5f
RVhQQU5TSU9OICogNCkgKyBpbnB1dF9jaGFyczsKKyAgICBydmFsID0gUHlTdHJpbmdfRnJvbVN0
cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOworICAgIGlmIChydmFsID09IE5VTEwpIHsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG91dHB1dCA9IFB5U3RyaW5nX0FTX1NU
UklORyhydmFsKTsKKyAgICBjaGFycyA9IDA7CisgICAgb3V0cHV0W2NoYXJzKytdID0gJyInOwor
ICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7CisgICAgICAgIFB5X1VOSUNP
REUgYyA9IChQeV9VTklDT0RFKWlucHV0X3N0cltpXTsKKyAgICAgICAgaWYgKFNfQ0hBUihjKSkg
eworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsKKyAgICAgICAgfSBlbHNl
IGlmIChjID4gMHg3RikgeworICAgICAgICAgICAgLyogV2UgaGl0IGEgbm9uLUFTQ0lJIGNoYXJh
Y3RlciwgYmFpbCB0byB1bmljb2RlIG1vZGUgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICp1bmk7
CisgICAgICAgICAgICBQeV9ERUNSRUYocnZhbCk7CisgICAgICAgICAgICB1bmkgPSBQeVVuaWNv
ZGVfRGVjb2RlVVRGOChpbnB1dF9zdHIsIGlucHV0X2NoYXJzLCAic3RyaWN0Iik7CisgICAgICAg
ICAgICBpZiAodW5pID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJ2YWwgPSBhc2NpaV9lc2NhcGVfdW5pY29kZSh1bmkp
OworICAgICAgICAgICAgUHlfREVDUkVGKHVuaSk7CisgICAgICAgICAgICByZXR1cm4gcnZhbDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJzID0gYXNjaWlfZXNjYXBlX2NoYXIo
Yywgb3V0cHV0LCBjaGFycyk7CisgICAgICAgIH0KKyAgICAgICAgLyogQW4gQVNDSUkgY2hhciBj
YW4ndCBwb3NzaWJseSBleHBhbmQgdG8gYSBzdXJyb2dhdGUhICovCisgICAgICAgIGlmIChvdXRw
dXRfc2l6ZSAtIGNoYXJzIDwgKDEgKyBNSU5fRVhQQU5TSU9OKSkgeworICAgICAgICAgICAgLyog
VGhlcmUncyBtb3JlIHRoYW4gZm91ciwgc28gbGV0J3MgcmVzaXplIGJ5IGEgbG90ICovCisgICAg
ICAgICAgICBvdXRwdXRfc2l6ZSAqPSAyOworICAgICAgICAgICAgaWYgKG91dHB1dF9zaXplID4g
MiArIChpbnB1dF9jaGFycyAqIE1JTl9FWFBBTlNJT04pKSB7CisgICAgICAgICAgICAgICAgb3V0
cHV0X3NpemUgPSAyICsgKGlucHV0X2NoYXJzICogTUlOX0VYUEFOU0lPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgb3V0cHV0X3NpemUp
ID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgb3V0cHV0W2NoYXJzKytdID0gJyInOworICAgIGlmIChfUHlTdHJpbmdfUmVz
aXplKCZydmFsLCBjaGFycykgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
ICAgIHJldHVybiBydmFsOworfQorCitQeURvY19TVFJWQVIocHlkb2NfZW5jb2RlX2Jhc2VzdHJp
bmdfYXNjaWksCisgICAgImVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKGJhc2VzdHJpbmcpIC0+IHN0
clxuIgorICAgICJcbiIKKyAgICAiLi4uIgorKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3B5X2Vu
Y29kZV9iYXNlc3RyaW5nX2FzY2lpKFB5T2JqZWN0KiBzZWxmIF9fYXR0cmlidXRlX18oKF9fdW51
c2VkX18pKSwgUHlPYmplY3QgKnB5c3RyKSB7CisgICAgLyogTUVUSF9PICovCisgICAgaWYgKFB5
U3RyaW5nX0NoZWNrKHB5c3RyKSkgeworICAgICAgICByZXR1cm4gYXNjaWlfZXNjYXBlX3N0cihw
eXN0cik7CisgICAgfSBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7CisgICAgICAg
IHJldHVybiBhc2NpaV9lc2NhcGVfdW5pY29kZShweXN0cik7CisgICAgfQorICAgIFB5RXJyX1Nl
dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5n
Iik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgREVGTihuLCBrKSBcCisgICAgeyAg
XAorICAgICAgICAjbiwgXAorICAgICAgICAoUHlDRnVuY3Rpb24pcHlfICMjbiwgXAorICAgICAg
ICBrLCBcCisgICAgICAgIHB5ZG9jXyAjI24gXAorICAgIH0KK3N0YXRpYyBQeU1ldGhvZERlZiBz
cGVlZHVwc19tZXRob2RzW10gPSB7CisgICAgREVGTihlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwg
TUVUSF9PKSwKKyAgICB7fQorfTsKKyN1bmRlZiBERUZOCisKK3ZvaWQKK2luaXRfc3BlZWR1cHMo
dm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKyAgICBtID0gUHlfSW5pdE1vZHVsZTQoIl9zcGVl
ZHVwcyIsIHNwZWVkdXBzX21ldGhvZHMsIE5VTEwsIE5VTEwsIFBZVEhPTl9BUElfVkVSU0lPTik7
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9zaW1wbGVqc29uL2RlY29kZXIucHkgYi9XZWJL
aXRUb29scy9zaW1wbGVqc29uL2RlY29kZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTFiNTNiMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3NpbXBsZWpz
b24vZGVjb2Rlci5weQpAQCAtMCwwICsxLDI3MyBAQAorIiIiCitJbXBsZW1lbnRhdGlvbiBvZiBK
U09ORGVjb2RlcgorIiIiCitpbXBvcnQgcmUKKworZnJvbSBzaW1wbGVqc29uLnNjYW5uZXIgaW1w
b3J0IFNjYW5uZXIsIHBhdHRlcm4KKworRkxBR1MgPSByZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5F
IHwgcmUuRE9UQUxMCisKK2RlZiBfZmxvYXRjb25zdGFudHMoKToKKyAgICBpbXBvcnQgc3RydWN0
CisgICAgaW1wb3J0IHN5cworICAgIF9CWVRFUyA9ICc3RkY4MDAwMDAwMDAwMDAwN0ZGMDAwMDAw
MDAwMDAwMCcuZGVjb2RlKCdoZXgnKQorICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Cisg
ICAgICAgIF9CWVRFUyA9IF9CWVRFU1s6OF1bOjotMV0gKyBfQllURVNbODpdWzo6LTFdCisgICAg
bmFuLCBpbmYgPSBzdHJ1Y3QudW5wYWNrKCdkZCcsIF9CWVRFUykKKyAgICByZXR1cm4gbmFuLCBp
bmYsIC1pbmYKKworTmFOLCBQb3NJbmYsIE5lZ0luZiA9IF9mbG9hdGNvbnN0YW50cygpCisKK2Rl
ZiBsaW5lY29sKGRvYywgcG9zKToKKyAgICBsaW5lbm8gPSBkb2MuY291bnQoJ1xuJywgMCwgcG9z
KSArIDEKKyAgICBpZiBsaW5lbm8gPT0gMToKKyAgICAgICAgY29sbm8gPSBwb3MKKyAgICBlbHNl
OgorICAgICAgICBjb2xubyA9IHBvcyAtIGRvYy5yaW5kZXgoJ1xuJywgMCwgcG9zKQorICAgIHJl
dHVybiBsaW5lbm8sIGNvbG5vCisKK2RlZiBlcnJtc2cobXNnLCBkb2MsIHBvcywgZW5kPU5vbmUp
OgorICAgIGxpbmVubywgY29sbm8gPSBsaW5lY29sKGRvYywgcG9zKQorICAgIGlmIGVuZCBpcyBO
b25lOgorICAgICAgICByZXR1cm4gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCknICUg
KG1zZywgbGluZW5vLCBjb2xubywgcG9zKQorICAgIGVuZGxpbmVubywgZW5kY29sbm8gPSBsaW5l
Y29sKGRvYywgZW5kKQorICAgIHJldHVybiAnJXM6IGxpbmUgJWQgY29sdW1uICVkIC0gbGluZSAl
ZCBjb2x1bW4gJWQgKGNoYXIgJWQgLSAlZCknICUgKAorICAgICAgICBtc2csIGxpbmVubywgY29s
bm8sIGVuZGxpbmVubywgZW5kY29sbm8sIHBvcywgZW5kKQorCitfQ09OU1RBTlRTID0geworICAg
ICctSW5maW5pdHknOiBOZWdJbmYsCisgICAgJ0luZmluaXR5JzogUG9zSW5mLAorICAgICdOYU4n
OiBOYU4sCisgICAgJ3RydWUnOiBUcnVlLAorICAgICdmYWxzZSc6IEZhbHNlLAorICAgICdudWxs
JzogTm9uZSwKK30KKworZGVmIEpTT05Db25zdGFudChtYXRjaCwgY29udGV4dCwgYz1fQ09OU1RB
TlRTKToKKyAgICByZXR1cm4gY1ttYXRjaC5ncm91cCgwKV0sIE5vbmUKK3BhdHRlcm4oJygtP0lu
ZmluaXR5fE5hTnx0cnVlfGZhbHNlfG51bGwpJykoSlNPTkNvbnN0YW50KQorCitkZWYgSlNPTk51
bWJlcihtYXRjaCwgY29udGV4dCk6CisgICAgbWF0Y2ggPSBKU09OTnVtYmVyLnJlZ2V4Lm1hdGNo
KG1hdGNoLnN0cmluZywgKm1hdGNoLnNwYW4oKSkKKyAgICBpbnRlZ2VyLCBmcmFjLCBleHAgPSBt
YXRjaC5ncm91cHMoKQorICAgIGlmIGZyYWMgb3IgZXhwOgorICAgICAgICByZXMgPSBmbG9hdChp
bnRlZ2VyICsgKGZyYWMgb3IgJycpICsgKGV4cCBvciAnJykpCisgICAgZWxzZToKKyAgICAgICAg
cmVzID0gaW50KGludGVnZXIpCisgICAgcmV0dXJuIHJlcywgTm9uZQorcGF0dGVybihyJygtPyg/
OjB8WzEtOV1cZCopKShcLlxkKyk/KFtlRV1bLStdP1xkKyk/JykoSlNPTk51bWJlcikKKworU1RS
SU5HQ0hVTksgPSByZS5jb21waWxlKHInKC4qPykoWyJcXF0pJywgRkxBR1MpCitCQUNLU0xBU0gg
PSB7CisgICAgJyInOiB1JyInLCAnXFwnOiB1J1xcJywgJy8nOiB1Jy8nLAorICAgICdiJzogdSdc
YicsICdmJzogdSdcZicsICduJzogdSdcbicsICdyJzogdSdccicsICd0JzogdSdcdCcsCit9CisK
K0RFRkFVTFRfRU5DT0RJTkcgPSAidXRmLTgiCisKK2RlZiBzY2Fuc3RyaW5nKHMsIGVuZCwgZW5j
b2Rpbmc9Tm9uZSwgX2I9QkFDS1NMQVNILCBfbT1TVFJJTkdDSFVOSy5tYXRjaCk6CisgICAgaWYg
ZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgZW5jb2RpbmcgPSBERUZBVUxUX0VOQ09ESU5HCisg
ICAgY2h1bmtzID0gW10KKyAgICBfYXBwZW5kID0gY2h1bmtzLmFwcGVuZAorICAgIGJlZ2luID0g
ZW5kIC0gMQorICAgIHdoaWxlIDE6CisgICAgICAgIGNodW5rID0gX20ocywgZW5kKQorICAgICAg
ICBpZiBjaHVuayBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAg
ICAgICAgICAgICBlcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBi
ZWdpbikpCisgICAgICAgIGVuZCA9IGNodW5rLmVuZCgpCisgICAgICAgIGNvbnRlbnQsIHRlcm1p
bmF0b3IgPSBjaHVuay5ncm91cHMoKQorICAgICAgICBpZiBjb250ZW50OgorICAgICAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2UoY29udGVudCwgdW5pY29kZSk6CisgICAgICAgICAgICAgICAgY29u
dGVudCA9IHVuaWNvZGUoY29udGVudCwgZW5jb2RpbmcpCisgICAgICAgICAgICBfYXBwZW5kKGNv
bnRlbnQpCisgICAgICAgIGlmIHRlcm1pbmF0b3IgPT0gJyInOgorICAgICAgICAgICAgYnJlYWsK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXNjID0gc1tlbmRdCisgICAgICAgIGV4Y2VwdCBJ
bmRleEVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAg
ICBlcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikpCisg
ICAgICAgIGlmIGVzYyAhPSAndSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
bSA9IF9iW2VzY10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICBlcnJtc2coIkludmFsaWQg
XFxlc2NhcGU6ICVyIiAlIChlc2MsKSwgcywgZW5kKSkKKyAgICAgICAgICAgIGVuZCArPSAxCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBlc2MgPSBzW2VuZCArIDE6ZW5kICsgNV0KKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtID0gdW5pY2hyKGludChlc2MsIDE2KSkKKyAg
ICAgICAgICAgICAgICBpZiBsZW4oZXNjKSAhPSA0IG9yIG5vdCBlc2MuaXNhbG51bSgpOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICBleGNlcHQgVmFs
dWVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiSW52YWxp
ZCBcXHVYWFhYIGVzY2FwZSIsIHMsIGVuZCkpCisgICAgICAgICAgICBlbmQgKz0gNQorICAgICAg
ICBfYXBwZW5kKG0pCisgICAgcmV0dXJuIHUnJy5qb2luKGNodW5rcyksIGVuZAorCitkZWYgSlNP
TlN0cmluZyhtYXRjaCwgY29udGV4dCk6CisgICAgZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQs
ICdlbmNvZGluZycsIE5vbmUpCisgICAgcmV0dXJuIHNjYW5zdHJpbmcobWF0Y2guc3RyaW5nLCBt
YXRjaC5lbmQoKSwgZW5jb2RpbmcpCitwYXR0ZXJuKHInIicpKEpTT05TdHJpbmcpCisKK1dISVRF
U1BBQ0UgPSByZS5jb21waWxlKHInXHMqJywgRkxBR1MpCisKK2RlZiBKU09OT2JqZWN0KG1hdGNo
LCBjb250ZXh0LCBfdz1XSElURVNQQUNFLm1hdGNoKToKKyAgICBwYWlycyA9IHt9CisgICAgcyA9
IG1hdGNoLnN0cmluZworICAgIGVuZCA9IF93KHMsIG1hdGNoLmVuZCgpKS5lbmQoKQorICAgIG5l
eHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAjIHRyaXZpYWwgZW1wdHkgb2JqZWN0CisgICAg
aWYgbmV4dGNoYXIgPT0gJ30nOgorICAgICAgICByZXR1cm4gcGFpcnMsIGVuZCArIDEKKyAgICBp
ZiBuZXh0Y2hhciAhPSAnIic6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBl
Y3RpbmcgcHJvcGVydHkgbmFtZSIsIHMsIGVuZCkpCisgICAgZW5kICs9IDEKKyAgICBlbmNvZGlu
ZyA9IGdldGF0dHIoY29udGV4dCwgJ2VuY29kaW5nJywgTm9uZSkKKyAgICBpdGVyc2NhbiA9IEpT
T05TY2FubmVyLml0ZXJzY2FuCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAga2V5LCBlbmQgPSBz
Y2Fuc3RyaW5nKHMsIGVuZCwgZW5jb2RpbmcpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5k
KCkKKyAgICAgICAgaWYgc1tlbmQ6ZW5kICsgMV0gIT0gJzonOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyA6IGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAg
ICAgIGVuZCA9IF93KHMsIGVuZCArIDEpLmVuZCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHZhbHVlLCBlbmQgPSBpdGVyc2NhbihzLCBpZHg9ZW5kLCBjb250ZXh0PWNvbnRleHQpLm5leHQo
KQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgcGFpcnNb
a2V5XSA9IHZhbHVlCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgbmV4
dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICBlbmQgKz0gMQorICAgICAgICBpZiBuZXh0
Y2hhciA9PSAnfSc6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuZXh0Y2hhciAhPSAn
LCc6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICwgZGVs
aW1pdGVyIiwgcywgZW5kIC0gMSkpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAg
ICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICBlbmQgKz0gMQorICAgICAg
ICBpZiBuZXh0Y2hhciAhPSAnIic6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1z
ZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQgLSAxKSkKKyAgICBvYmplY3RfaG9v
ayA9IGdldGF0dHIoY29udGV4dCwgJ29iamVjdF9ob29rJywgTm9uZSkKKyAgICBpZiBvYmplY3Rf
aG9vayBpcyBub3QgTm9uZToKKyAgICAgICAgcGFpcnMgPSBvYmplY3RfaG9vayhwYWlycykKKyAg
ICByZXR1cm4gcGFpcnMsIGVuZAorcGF0dGVybihyJ3snKShKU09OT2JqZWN0KQorICAgICAgICAg
ICAgCitkZWYgSlNPTkFycmF5KG1hdGNoLCBjb250ZXh0LCBfdz1XSElURVNQQUNFLm1hdGNoKToK
KyAgICB2YWx1ZXMgPSBbXQorICAgIHMgPSBtYXRjaC5zdHJpbmcKKyAgICBlbmQgPSBfdyhzLCBt
YXRjaC5lbmQoKSkuZW5kKCkKKyAgICAjIGxvb2stYWhlYWQgZm9yIHRyaXZpYWwgZW1wdHkgYXJy
YXkKKyAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgaWYgbmV4dGNoYXIgPT0gJ10n
OgorICAgICAgICByZXR1cm4gdmFsdWVzLCBlbmQgKyAxCisgICAgaXRlcnNjYW4gPSBKU09OU2Nh
bm5lci5pdGVyc2NhbgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHZhbHVlLCBlbmQgPSBpdGVyc2NhbihzLCBpZHg9ZW5kLCBjb250ZXh0PWNvbnRleHQpLm5leHQo
KQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgdmFsdWVz
LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQorICAgICAgICBu
ZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgIGVuZCArPSAxCisgICAgICAgIGlmIG5l
eHRjaGFyID09ICddJzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5leHRjaGFyICE9
ICcsJzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgLCBk
ZWxpbWl0ZXIiLCBzLCBlbmQpKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAg
cmV0dXJuIHZhbHVlcywgZW5kCitwYXR0ZXJuKHInXFsnKShKU09OQXJyYXkpCisgCitBTllUSElO
RyA9IFsKKyAgICBKU09OT2JqZWN0LAorICAgIEpTT05BcnJheSwKKyAgICBKU09OU3RyaW5nLAor
ICAgIEpTT05Db25zdGFudCwKKyAgICBKU09OTnVtYmVyLAorXQorCitKU09OU2Nhbm5lciA9IFNj
YW5uZXIoQU5ZVEhJTkcpCisKK2NsYXNzIEpTT05EZWNvZGVyKG9iamVjdCk6CisgICAgIiIiCisg
ICAgU2ltcGxlIEpTT04gPGh0dHA6Ly9qc29uLm9yZz4gZGVjb2RlcgorCisgICAgUGVyZm9ybXMg
dGhlIGZvbGxvd2luZyB0cmFuc2xhdGlvbnMgaW4gZGVjb2Rpbmc6CisgICAgCisgICAgKy0tLS0t
LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgSlNPTiAgICAgICAgICB8IFB5
dGhvbiAgICAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09
PT0rCisgICAgfCBvYmplY3QgICAgICAgIHwgZGljdCAgICAgICAgICAgICAgfAorICAgICstLS0t
LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IGFycmF5ICAgICAgICAgfCBs
aXN0ICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgIHwgc3RyaW5nICAgICAgICB8IHVuaWNvZGUgICAgICAgICAgIHwKKyAgICArLS0t
LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBudW1iZXIgKGludCkgIHwg
aW50LCBsb25nICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICB8IG51bWJlciAocmVhbCkgfCBmbG9hdCAgICAgICAgICAgICB8CisgICAgKy0t
LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgdHJ1ZSAgICAgICAgICB8
IFRydWUgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgfCBmYWxzZSAgICAgICAgIHwgRmFsc2UgICAgICAgICAgICAgfAorICAgICst
LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IG51bGwgICAgICAgICAg
fCBOb25lICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t
LS0tLS0tKworCisgICAgSXQgYWxzbyB1bmRlcnN0YW5kcyBgYE5hTmBgLCBgYEluZmluaXR5YGAs
IGFuZCBgYC1JbmZpbml0eWBgIGFzCisgICAgdGhlaXIgY29ycmVzcG9uZGluZyBgYGZsb2F0YGAg
dmFsdWVzLCB3aGljaCBpcyBvdXRzaWRlIHRoZSBKU09OIHNwZWMuCisgICAgIiIiCisKKyAgICBf
c2Nhbm5lciA9IFNjYW5uZXIoQU5ZVEhJTkcpCisgICAgX19hbGxfXyA9IFsnX19pbml0X18nLCAn
ZGVjb2RlJywgJ3Jhd19kZWNvZGUnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVuY29kaW5n
PU5vbmUsIG9iamVjdF9ob29rPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgYGBlbmNvZGlu
Z2BgIGRldGVybWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gaW50ZXJwcmV0IGFueSBgYHN0cmBg
CisgICAgICAgIG9iamVjdHMgZGVjb2RlZCBieSB0aGlzIGluc3RhbmNlICh1dGYtOCBieSBkZWZh
dWx0KS4gIEl0IGhhcyBubworICAgICAgICBlZmZlY3Qgd2hlbiBkZWNvZGluZyBgYHVuaWNvZGVg
YCBvYmplY3RzLgorICAgICAgICAKKyAgICAgICAgTm90ZSB0aGF0IGN1cnJlbnRseSBvbmx5IGVu
Y29kaW5ncyB0aGF0IGFyZSBhIHN1cGVyc2V0IG9mIEFTQ0lJIHdvcmssCisgICAgICAgIHN0cmlu
Z3Mgb2Ygb3RoZXIgZW5jb2RpbmdzIHNob3VsZCBiZSBwYXNzZWQgaW4gYXMgYGB1bmljb2RlYGAu
CisKKyAgICAgICAgYGBvYmplY3RfaG9va2BgLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVk
IHdpdGggdGhlIHJlc3VsdAorICAgICAgICBvZiBldmVyeSBKU09OIG9iamVjdCBkZWNvZGVkIGFu
ZCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBpbgorICAgICAgICBwbGFjZSBvZiB0aGUg
Z2l2ZW4gYGBkaWN0YGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tCisgICAg
ICAgIGRlc2VyaWFsaXphdGlvbnMgKGUuZy4gdG8gc3VwcG9ydCBKU09OLVJQQyBjbGFzcyBoaW50
aW5nKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworICAg
ICAgICBzZWxmLm9iamVjdF9ob29rID0gb2JqZWN0X2hvb2sKKworICAgIGRlZiBkZWNvZGUoc2Vs
ZiwgcywgX3c9V0hJVEVTUEFDRS5tYXRjaCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4g
dGhlIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29k
ZWBgCisgICAgICAgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OIGRvY3VtZW50KQorICAgICAg
ICAiIiIKKyAgICAgICAgb2JqLCBlbmQgPSBzZWxmLnJhd19kZWNvZGUocywgaWR4PV93KHMsIDAp
LmVuZCgpKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIGlmIGVuZCAh
PSBsZW4ocyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXh0cmEgZGF0
YSIsIHMsIGVuZCwgbGVuKHMpKSkKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHJhd19k
ZWNvZGUoc2VsZiwgcywgKiprdyk6CisgICAgICAgICIiIgorICAgICAgICBEZWNvZGUgYSBKU09O
IGRvY3VtZW50IGZyb20gYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYCBiZWdpbm5pbmcK
KyAgICAgICAgd2l0aCBhIEpTT04gZG9jdW1lbnQpIGFuZCByZXR1cm4gYSAyLXR1cGxlIG9mIHRo
ZSBQeXRob24KKyAgICAgICAgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBpbmRleCBpbiBgYHNgYCB3
aGVyZSB0aGUgZG9jdW1lbnQgZW5kZWQuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBk
ZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgdGhhdCBtYXkKKyAgICAgICAgaGF2
ZSBleHRyYW5lb3VzIGRhdGEgYXQgdGhlIGVuZC4KKyAgICAgICAgIiIiCisgICAgICAgIGt3LnNl
dGRlZmF1bHQoJ2NvbnRleHQnLCBzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmos
IGVuZCA9IHNlbGYuX3NjYW5uZXIuaXRlcnNjYW4ocywgKiprdykubmV4dCgpCisgICAgICAgIGV4
Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gSlNP
TiBvYmplY3QgY291bGQgYmUgZGVjb2RlZCIpCisgICAgICAgIHJldHVybiBvYmosIGVuZAorCitf
X2FsbF9fID0gWydKU09ORGVjb2RlciddCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9zaW1wbGVq
c29uL2VuY29kZXIucHkgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL2VuY29kZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5OTE5YQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL3NpbXBsZWpzb24vZW5jb2Rlci5weQpAQCAtMCwwICsxLDM3MSBAQAorIiIi
CitJbXBsZW1lbnRhdGlvbiBvZiBKU09ORW5jb2RlcgorIiIiCitpbXBvcnQgcmUKK3RyeToKKyAg
ICBmcm9tIHNpbXBsZWpzb24gaW1wb3J0IF9zcGVlZHVwcworZXhjZXB0IEltcG9ydEVycm9yOgor
ICAgIF9zcGVlZHVwcyA9IE5vbmUKKworRVNDQVBFID0gcmUuY29tcGlsZShyJ1tceDAwLVx4MTlc
XCJcYlxmXG5cclx0XScpCitFU0NBUEVfQVNDSUkgPSByZS5jb21waWxlKHInKFtcXCIvXXxbXlwg
LX5dKScpCitFU0NBUEVfRENUID0geworICAgICMgZXNjYXBlIGFsbCBmb3J3YXJkIHNsYXNoZXMg
dG8gcHJldmVudCA8L3NjcmlwdD4gYXR0YWNrCisgICAgJy8nOiAnXFwvJywKKyAgICAnXFwnOiAn
XFxcXCcsCisgICAgJyInOiAnXFwiJywKKyAgICAnXGInOiAnXFxiJywKKyAgICAnXGYnOiAnXFxm
JywKKyAgICAnXG4nOiAnXFxuJywKKyAgICAnXHInOiAnXFxyJywKKyAgICAnXHQnOiAnXFx0JywK
K30KK2ZvciBpIGluIHJhbmdlKDB4MjApOgorICAgIEVTQ0FQRV9EQ1Quc2V0ZGVmYXVsdChjaHIo
aSksICdcXHUlMDR4JyAlIChpLCkpCisKKyMgYXNzdW1lIHRoaXMgcHJvZHVjZXMgYW4gaW5maW5p
dHkgb24gYWxsIG1hY2hpbmVzIChwcm9iYWJseSBub3QgZ3VhcmFudGVlZCkKK0lORklOSVRZID0g
ZmxvYXQoJzFlNjY2NjYnKQorCitkZWYgZmxvYXRzdHIobywgYWxsb3dfbmFuPVRydWUpOgorICAg
ICMgQ2hlY2sgZm9yIHNwZWNpYWxzLiAgTm90ZSB0aGF0IHRoaXMgdHlwZSBvZiB0ZXN0IGlzIHBy
b2Nlc3Nvci0gYW5kL29yCisgICAgIyBwbGF0Zm9ybS1zcGVjaWZpYywgc28gZG8gdGVzdHMgd2hp
Y2ggZG9uJ3QgZGVwZW5kIG9uIHRoZSBpbnRlcm5hbHMuCisKKyAgICBpZiBvICE9IG86CisgICAg
ICAgIHRleHQgPSAnTmFOJworICAgIGVsaWYgbyA9PSBJTkZJTklUWToKKyAgICAgICAgdGV4dCA9
ICdJbmZpbml0eScKKyAgICBlbGlmIG8gPT0gLUlORklOSVRZOgorICAgICAgICB0ZXh0ID0gJy1J
bmZpbml0eScKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVwcihvKQorCisgICAgaWYgbm90
IGFsbG93X25hbjoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT3V0IG9mIHJhbmdlIGZsb2F0
IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50OiAlciIKKyAgICAgICAgICAgICUgKG8sKSkK
KworICAgIHJldHVybiB0ZXh0CisKKworZGVmIGVuY29kZV9iYXNlc3RyaW5nKHMpOgorICAgICIi
IgorICAgIFJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nCisg
ICAgIiIiCisgICAgZGVmIHJlcGxhY2UobWF0Y2gpOgorICAgICAgICByZXR1cm4gRVNDQVBFX0RD
VFttYXRjaC5ncm91cCgwKV0KKyAgICByZXR1cm4gJyInICsgRVNDQVBFLnN1YihyZXBsYWNlLCBz
KSArICciJworCitkZWYgZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkocyk6CisgICAgZGVmIHJlcGxh
Y2UobWF0Y2gpOgorICAgICAgICBzID0gbWF0Y2guZ3JvdXAoMCkKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIEVTQ0FQRV9EQ1Rbc10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgor
ICAgICAgICAgICAgbiA9IG9yZChzKQorICAgICAgICAgICAgaWYgbiA8IDB4MTAwMDA6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdcXHUlMDR4JyAlIChuLCkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgIyBzdXJyb2dhdGUgcGFpcgorICAgICAgICAgICAgICAgIG4gLT0gMHgx
MDAwMAorICAgICAgICAgICAgICAgIHMxID0gMHhkODAwIHwgKChuID4+IDEwKSAmIDB4M2ZmKQor
ICAgICAgICAgICAgICAgIHMyID0gMHhkYzAwIHwgKG4gJiAweDNmZikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1xcdSUwNHhcXHUlMDR4JyAlIChzMSwgczIpCisgICAgcmV0dXJuICciJyArIHN0
cihFU0NBUEVfQVNDSUkuc3ViKHJlcGxhY2UsIHMpKSArICciJworICAgICAgICAKK3RyeToKKyAg
ICBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9IF9zcGVlZHVwcy5lbmNvZGVfYmFzZXN0cmluZ19h
c2NpaQorICAgIF9uZWVkX3V0ZjggPSBUcnVlCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAg
X25lZWRfdXRmOCA9IEZhbHNlCisKK2NsYXNzIEpTT05FbmNvZGVyKG9iamVjdCk6CisgICAgIiIi
CisgICAgRXh0ZW5zaWJsZSBKU09OIDxodHRwOi8vanNvbi5vcmc+IGVuY29kZXIgZm9yIFB5dGhv
biBkYXRhIHN0cnVjdHVyZXMuCisKKyAgICBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9iamVjdHMg
YW5kIHR5cGVzIGJ5IGRlZmF1bHQ6CisgICAgCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t
LS0tLS0tLS0tLS0tKworICAgIHwgUHl0aG9uICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwK
KyAgICArPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCisgICAgfCBkaWN0ICAg
ICAgICAgICAgICB8IG9iamVjdCAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0t
LS0tLS0tLS0tLS0tLSsKKyAgICB8IGxpc3QsIHR1cGxlICAgICAgIHwgYXJyYXkgICAgICAgICB8
CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgIHwgc3RyLCB1
bmljb2RlICAgICAgfCBzdHJpbmcgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSst
LS0tLS0tLS0tLS0tLS0rCisgICAgfCBpbnQsIGxvbmcsIGZsb2F0ICB8IG51bWJlciAgICAgICAg
fAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFRydWUg
ICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tKworICAgIHwgRmFsc2UgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAg
IHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBOb25l
ICAgICAgICAgICAgICB8IG51bGwgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
Ky0tLS0tLS0tLS0tLS0tLSsKKworICAgIFRvIGV4dGVuZCB0aGlzIHRvIHJlY29nbml6ZSBvdGhl
ciBvYmplY3RzLCBzdWJjbGFzcyBhbmQgaW1wbGVtZW50IGEKKyAgICBgYC5kZWZhdWx0KClgYCBt
ZXRob2Qgd2l0aCBhbm90aGVyIG1ldGhvZCB0aGF0IHJldHVybnMgYSBzZXJpYWxpemFibGUKKyAg
ICBvYmplY3QgZm9yIGBgb2BgIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgaXQgc2hvdWxkIGNhbGwg
dGhlIHN1cGVyY2xhc3MKKyAgICBpbXBsZW1lbnRhdGlvbiAodG8gcmFpc2UgYGBUeXBlRXJyb3Jg
YCkuCisgICAgIiIiCisgICAgX19hbGxfXyA9IFsnX19pbml0X18nLCAnZGVmYXVsdCcsICdlbmNv
ZGUnLCAnaXRlcmVuY29kZSddCisgICAgaXRlbV9zZXBhcmF0b3IgPSAnLCAnCisgICAga2V5X3Nl
cGFyYXRvciA9ICc6ICcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2tpcGtleXM9RmFsc2UsIGVu
c3VyZV9hc2NpaT1UcnVlLAorICAgICAgICAgICAgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwgYWxsb3df
bmFuPVRydWUsIHNvcnRfa2V5cz1GYWxzZSwKKyAgICAgICAgICAgIGluZGVudD1Ob25lLCBzZXBh
cmF0b3JzPU5vbmUsIGVuY29kaW5nPSd1dGYtOCcpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29u
c3RydWN0b3IgZm9yIEpTT05FbmNvZGVyLCB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzLgorCisgICAg
ICAgIElmIHNraXBrZXlzIGlzIEZhbHNlLCB0aGVuIGl0IGlzIGEgVHlwZUVycm9yIHRvIGF0dGVt
cHQKKyAgICAgICAgZW5jb2Rpbmcgb2Yga2V5cyB0aGF0IGFyZSBub3Qgc3RyLCBpbnQsIGxvbmcs
IGZsb2F0IG9yIE5vbmUuICBJZgorICAgICAgICBza2lwa2V5cyBpcyBUcnVlLCBzdWNoIGl0ZW1z
IGFyZSBzaW1wbHkgc2tpcHBlZC4KKworICAgICAgICBJZiBlbnN1cmVfYXNjaWkgaXMgVHJ1ZSwg
dGhlIG91dHB1dCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cgorICAgICAgICBvYmplY3RzIHdpdGgg
YWxsIGluY29taW5nIHVuaWNvZGUgY2hhcmFjdGVycyBlc2NhcGVkLiAgSWYKKyAgICAgICAgZW5z
dXJlX2FzY2lpIGlzIGZhbHNlLCB0aGUgb3V0cHV0IHdpbGwgYmUgdW5pY29kZSBvYmplY3QuCisK
KyAgICAgICAgSWYgY2hlY2tfY2lyY3VsYXIgaXMgVHJ1ZSwgdGhlbiBsaXN0cywgZGljdHMsIGFu
ZCBjdXN0b20gZW5jb2RlZAorICAgICAgICBvYmplY3RzIHdpbGwgYmUgY2hlY2tlZCBmb3IgY2ly
Y3VsYXIgcmVmZXJlbmNlcyBkdXJpbmcgZW5jb2RpbmcgdG8KKyAgICAgICAgcHJldmVudCBhbiBp
bmZpbml0ZSByZWN1cnNpb24gKHdoaWNoIHdvdWxkIGNhdXNlIGFuIE92ZXJmbG93RXJyb3IpLgor
ICAgICAgICBPdGhlcndpc2UsIG5vIHN1Y2ggY2hlY2sgdGFrZXMgcGxhY2UuCisKKyAgICAgICAg
SWYgYWxsb3dfbmFuIGlzIFRydWUsIHRoZW4gTmFOLCBJbmZpbml0eSwgYW5kIC1JbmZpbml0eSB3
aWxsIGJlCisgICAgICAgIGVuY29kZWQgYXMgc3VjaC4gIFRoaXMgYmVoYXZpb3IgaXMgbm90IEpT
T04gc3BlY2lmaWNhdGlvbiBjb21wbGlhbnQsCisgICAgICAgIGJ1dCBpcyBjb25zaXN0ZW50IHdp
dGggbW9zdCBKYXZhU2NyaXB0IGJhc2VkIGVuY29kZXJzIGFuZCBkZWNvZGVycy4KKyAgICAgICAg
T3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGEgVmFsdWVFcnJvciB0byBlbmNvZGUgc3VjaCBmbG9hdHMu
CisKKyAgICAgICAgSWYgc29ydF9rZXlzIGlzIFRydWUsIHRoZW4gdGhlIG91dHB1dCBvZiBkaWN0
aW9uYXJpZXMgd2lsbCBiZQorICAgICAgICBzb3J0ZWQgYnkga2V5OyB0aGlzIGlzIHVzZWZ1bCBm
b3IgcmVncmVzc2lvbiB0ZXN0cyB0byBlbnN1cmUKKyAgICAgICAgdGhhdCBKU09OIHNlcmlhbGl6
YXRpb25zIGNhbiBiZSBjb21wYXJlZCBvbiBhIGRheS10by1kYXkgYmFzaXMuCisKKyAgICAgICAg
SWYgaW5kZW50IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheQorICAg
ICAgICBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3
aXRoIHRoYXQKKyAgICAgICAgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50IGxldmVsIG9mIDAgd2ls
bCBvbmx5IGluc2VydCBuZXdsaW5lcy4KKyAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0
IHJlcHJlc2VudGF0aW9uLgorCisgICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91
bGQgYmUgYSAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCisgICAgICAgIHR1cGxlLiBU
aGUgZGVmYXVsdCBpcyAoJywgJywgJzogJykuIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04K
KyAgICAgICAgcmVwcmVzZW50YXRpb24geW91IHNob3VsZCBzcGVjaWZ5ICgnLCcsICc6JykgdG8g
ZWxpbWluYXRlIHdoaXRlc3BhY2UuCisKKyAgICAgICAgSWYgZW5jb2RpbmcgaXMgbm90IE5vbmUs
IHRoZW4gYWxsIGlucHV0IHN0cmluZ3Mgd2lsbCBiZQorICAgICAgICB0cmFuc2Zvcm1lZCBpbnRv
IHVuaWNvZGUgdXNpbmcgdGhhdCBlbmNvZGluZyBwcmlvciB0byBKU09OLWVuY29kaW5nLiAKKyAg
ICAgICAgVGhlIGRlZmF1bHQgaXMgVVRGLTguCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYu
c2tpcGtleXMgPSBza2lwa2V5cworICAgICAgICBzZWxmLmVuc3VyZV9hc2NpaSA9IGVuc3VyZV9h
c2NpaQorICAgICAgICBzZWxmLmNoZWNrX2NpcmN1bGFyID0gY2hlY2tfY2lyY3VsYXIKKyAgICAg
ICAgc2VsZi5hbGxvd19uYW4gPSBhbGxvd19uYW4KKyAgICAgICAgc2VsZi5zb3J0X2tleXMgPSBz
b3J0X2tleXMKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKKyAgICAgICAgc2VsZi5jdXJy
ZW50X2luZGVudF9sZXZlbCA9IDAKKyAgICAgICAgaWYgc2VwYXJhdG9ycyBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYua2V5X3NlcGFyYXRvciA9IHNl
cGFyYXRvcnMKKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICBkZWYgX25l
d2xpbmVfaW5kZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gJ1xuJyArICgnICcgKiAoc2VsZi5p
bmRlbnQgKiBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsKSkKKworICAgIGRlZiBfaXRlcmVuY29k
ZV9saXN0KHNlbGYsIGxzdCwgbWFya2Vycz1Ob25lKToKKyAgICAgICAgaWYgbm90IGxzdDoKKyAg
ICAgICAgICAgIHlpZWxkICdbXScKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXJr
ZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWFya2VyaWQgPSBpZChsc3QpCisgICAgICAg
ICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICBtYXJrZXJz
W21hcmtlcmlkXSA9IGxzdAorICAgICAgICB5aWVsZCAnWycKKyAgICAgICAgaWYgc2VsZi5pbmRl
bnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsICs9
IDEKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gc2VsZi5fbmV3bGluZV9pbmRlbnQoKQor
ICAgICAgICAgICAgc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5k
ZW50CisgICAgICAgICAgICB5aWVsZCBuZXdsaW5lX2luZGVudAorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBOb25lCisgICAgICAgICAgICBzZXBhcmF0b3IgPSBz
ZWxmLml0ZW1fc2VwYXJhdG9yCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICBmb3IgdmFs
dWUgaW4gbHN0OgorICAgICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICAgICAgZmlyc3Qg
PSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBzZXBhcmF0
b3IKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlKHZhbHVlLCBtYXJr
ZXJzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICBpZiBuZXdsaW5lX2lu
ZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwg
LT0gMQorICAgICAgICAgICAgeWllbGQgc2VsZi5fbmV3bGluZV9pbmRlbnQoKQorICAgICAgICB5
aWVsZCAnXScKKyAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRl
bCBtYXJrZXJzW21hcmtlcmlkXQorCisgICAgZGVmIF9pdGVyZW5jb2RlX2RpY3Qoc2VsZiwgZGN0
LCBtYXJrZXJzPU5vbmUpOgorICAgICAgICBpZiBub3QgZGN0OgorICAgICAgICAgICAgeWllbGQg
J3t9JworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBtYXJrZXJpZCA9IGlkKGRjdCkKKyAgICAgICAgICAgIGlmIG1hcmtlcmlk
IGluIG1hcmtlcnM6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIg
cmVmZXJlbmNlIGRldGVjdGVkIikKKyAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gZGN0
CisgICAgICAgIHlpZWxkICd7JworICAgICAgICBrZXlfc2VwYXJhdG9yID0gc2VsZi5rZXlfc2Vw
YXJhdG9yCisgICAgICAgIGlmIHNlbGYuaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
c2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCisgICAgICAgICAgICBuZXdsaW5lX2luZGVu
dCA9IHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgICAgIGl0ZW1fc2VwYXJhdG9yID0g
c2VsZi5pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50CisgICAgICAgICAgICB5aWVsZCBu
ZXdsaW5lX2luZGVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQg
PSBOb25lCisgICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IK
KyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lpOgorICAg
ICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmcKKyAgICAgICAgYWxsb3df
bmFuID0gc2VsZi5hbGxvd19uYW4KKyAgICAgICAgaWYgc2VsZi5zb3J0X2tleXM6CisgICAgICAg
ICAgICBrZXlzID0gZGN0LmtleXMoKQorICAgICAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAg
ICAgIGl0ZW1zID0gWyhrLCBkY3Rba10pIGZvciBrIGluIGtleXNdCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBpdGVtcyA9IGRjdC5pdGVyaXRlbXMoKQorICAgICAgICBfZW5jb2RpbmcgPSBz
ZWxmLmVuY29kaW5nCisgICAgICAgIF9kb19kZWNvZGUgPSAoX2VuY29kaW5nIGlzIG5vdCBOb25l
CisgICAgICAgICAgICBhbmQgbm90IChfbmVlZF91dGY4IGFuZCBfZW5jb2RpbmcgPT0gJ3V0Zi04
JykpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgorICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgaWYgX2RvX2RlY29kZToKKyAgICAg
ICAgICAgICAgICAgICAga2V5ID0ga2V5LmRlY29kZShfZW5jb2RpbmcpCisgICAgICAgICAgICBl
bGlmIGlzaW5zdGFuY2Uoa2V5LCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBwYXNzCisg
ICAgICAgICAgICAjIEphdmFTY3JpcHQgaXMgd2Vha2x5IHR5cGVkIGZvciB0aGVzZSwgc28gaXQg
bWFrZXMgc2Vuc2UgdG8KKyAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtLiAgTWFueSBlbmNv
ZGVycyBzZWVtIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCisgICAgICAgICAgICBlbGlmIGlz
aW5zdGFuY2Uoa2V5LCBmbG9hdCk6CisgICAgICAgICAgICAgICAga2V5ID0gZmxvYXRzdHIoa2V5
LCBhbGxvd19uYW4pCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCAoaW50LCBsb25n
KSk6CisgICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgICAgIGVsaWYga2V5
IGlzIFRydWU6CisgICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCisgICAgICAgICAgICBlbGlm
IGtleSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICBrZXkgPSAnZmFsc2UnCisgICAgICAgICAg
ICBlbGlmIGtleSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGtleSA9ICdudWxsJworICAgICAg
ICAgICAgZWxpZiBzZWxmLnNraXBrZXlzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5ICVyIGlz
IG5vdCBhIHN0cmluZyIgJSAoa2V5LCkpCisgICAgICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAg
ICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHlpZWxkIGl0ZW1fc2VwYXJhdG9yCisgICAgICAgICAgICB5aWVsZCBlbmNvZGVyKGtleSkKKyAg
ICAgICAgICAgIHlpZWxkIGtleV9zZXBhcmF0b3IKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBz
ZWxmLl9pdGVyZW5jb2RlKHZhbHVlLCBtYXJrZXJzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBj
aHVuaworICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQorICAgICAgICAgICAgeWllbGQgc2VsZi5f
bmV3bGluZV9pbmRlbnQoKQorICAgICAgICB5aWVsZCAnfScKKyAgICAgICAgaWYgbWFya2VycyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQorCisgICAgZGVm
IF9pdGVyZW5jb2RlKHNlbGYsIG8sIG1hcmtlcnM9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFu
Y2UobywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKKyAg
ICAgICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nCisg
ICAgICAgICAgICBfZW5jb2RpbmcgPSBzZWxmLmVuY29kaW5nCisgICAgICAgICAgICBpZiAoX2Vu
Y29kaW5nIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKG8sIHN0cikKKyAgICAgICAgICAgICAg
ICAgICAgYW5kIG5vdCAoX25lZWRfdXRmOCBhbmQgX2VuY29kaW5nID09ICd1dGYtOCcpKToKKyAg
ICAgICAgICAgICAgICBvID0gby5kZWNvZGUoX2VuY29kaW5nKQorICAgICAgICAgICAgeWllbGQg
ZW5jb2RlcihvKQorICAgICAgICBlbGlmIG8gaXMgTm9uZToKKyAgICAgICAgICAgIHlpZWxkICdu
dWxsJworICAgICAgICBlbGlmIG8gaXMgVHJ1ZToKKyAgICAgICAgICAgIHlpZWxkICd0cnVlJwor
ICAgICAgICBlbGlmIG8gaXMgRmFsc2U6CisgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCisgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZShvLCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICB5aWVsZCBz
dHIobykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGZsb2F0KToKKyAgICAgICAgICAgIHlp
ZWxkIGZsb2F0c3RyKG8sIHNlbGYuYWxsb3dfbmFuKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
bywgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVu
Y29kZV9saXN0KG8sIG1hcmtlcnMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBz
ZWxmLl9pdGVyZW5jb2RlX2RpY3QobywgbWFya2Vycyk6CisgICAgICAgICAgICAgICAgeWllbGQg
Y2h1bmsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICAgICAgbWFya2VyaWQgPSBpZChvKQorICAgICAgICAgICAgICAgIGlmIG1h
cmtlcmlkIGluIG1hcmtlcnM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
IkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICAgICAgbWFya2Vyc1tt
YXJrZXJpZF0gPSBvCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZV9k
ZWZhdWx0KG8sIG1hcmtlcnMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAg
ICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBtYXJrZXJz
W21hcmtlcmlkXQorCisgICAgZGVmIF9pdGVyZW5jb2RlX2RlZmF1bHQoc2VsZiwgbywgbWFya2Vy
cz1Ob25lKToKKyAgICAgICAgbmV3b2JqID0gc2VsZi5kZWZhdWx0KG8pCisgICAgICAgIHJldHVy
biBzZWxmLl9pdGVyZW5jb2RlKG5ld29iaiwgbWFya2VycykKKworICAgIGRlZiBkZWZhdWx0KHNl
bGYsIG8pOgorICAgICAgICAiIiIKKyAgICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIGluIGEg
c3ViY2xhc3Mgc3VjaCB0aGF0IGl0IHJldHVybnMKKyAgICAgICAgYSBzZXJpYWxpemFibGUgb2Jq
ZWN0IGZvciBgYG9gYCwgb3IgY2FsbHMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
KHRvIHJhaXNlIGEgYGBUeXBlRXJyb3JgYCkuCisKKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHN1
cHBvcnQgYXJiaXRyYXJ5IGl0ZXJhdG9ycywgeW91IGNvdWxkCisgICAgICAgIGltcGxlbWVudCBk
ZWZhdWx0IGxpa2UgdGhpczo6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0
KHNlbGYsIG8pOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaXRl
cmFibGUgPSBpdGVyKG8pCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAg
ICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBsaXN0KGl0ZXJhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBKU09O
RW5jb2Rlci5kZWZhdWx0KHNlbGYsIG8pCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBUeXBl
RXJyb3IoIiVyIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZSIgJSAobywpKQorCisgICAgZGVmIGVu
Y29kZShzZWxmLCBvKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIEpTT04gc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIGRhdGEgc3RydWN0dXJlLgorCisgICAgICAgID4+
PiBKU09ORW5jb2RlcigpLmVuY29kZSh7ImZvbyI6IFsiYmFyIiwgImJheiJdfSkKKyAgICAgICAg
J3siZm9vIjpbImJhciIsICJiYXoiXX0nCisgICAgICAgICIiIgorICAgICAgICAjIFRoaXMgaXMg
Zm9yIGV4dHJlbWVseSBzaW1wbGUgY2FzZXMgYW5kIGJlbmNobWFya3MuLi4KKyAgICAgICAgaWYg
aXNpbnN0YW5jZShvLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobywg
c3RyKToKKyAgICAgICAgICAgICAgICBfZW5jb2RpbmcgPSBzZWxmLmVuY29kaW5nCisgICAgICAg
ICAgICAgICAgaWYgKF9lbmNvZGluZyBpcyBub3QgTm9uZSAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZCBub3QgKF9lbmNvZGluZyA9PSAndXRmLTgnIGFuZCBfbmVlZF91dGY4KSk6CisgICAg
ICAgICAgICAgICAgICAgIG8gPSBvLmRlY29kZShfZW5jb2RpbmcpCisgICAgICAgICAgICByZXR1
cm4gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkobykKKyAgICAgICAgIyBUaGlzIGRvZXNuJ3QgcGFz
cyB0aGUgaXRlcmF0b3IgZGlyZWN0bHkgdG8gJycuam9pbigpIGJlY2F1c2UgaXQKKyAgICAgICAg
IyBzdWNrcyBhdCByZXBvcnRpbmcgZXhjZXB0aW9ucy4gIEl0J3MgZ29pbmcgdG8gZG8gdGhpcyBp
bnRlcm5hbGx5CisgICAgICAgICMgYW55d2F5IGJlY2F1c2UgaXQgdXNlcyBQeVNlcXVlbmNlX0Zh
c3Qgb3Igc2ltaWxhci4KKyAgICAgICAgY2h1bmtzID0gbGlzdChzZWxmLml0ZXJlbmNvZGUobykp
CisgICAgICAgIHJldHVybiAnJy5qb2luKGNodW5rcykKKworICAgIGRlZiBpdGVyZW5jb2RlKHNl
bGYsIG8pOgorICAgICAgICAiIiIKKyAgICAgICAgRW5jb2RlIHRoZSBnaXZlbiBvYmplY3QgYW5k
IHlpZWxkIGVhY2ggc3RyaW5nCisgICAgICAgIHJlcHJlc2VudGF0aW9uIGFzIGF2YWlsYWJsZS4K
KyAgICAgICAgCisgICAgICAgIEZvciBleGFtcGxlOjoKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yIGNodW5rIGluIEpTT05FbmNvZGVyKCkuaXRlcmVuY29kZShiaWdvYmplY3QpOgorICAg
ICAgICAgICAgICAgIG15c29ja2V0LndyaXRlKGNodW5rKQorICAgICAgICAiIiIKKyAgICAgICAg
aWYgc2VsZi5jaGVja19jaXJjdWxhcjoKKyAgICAgICAgICAgIG1hcmtlcnMgPSB7fQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgbWFya2VycyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2l0ZXJlbmNvZGUobywgbWFya2VycykKKworX19hbGxfXyA9IFsnSlNPTkVuY29kZXInXQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5IGIvV2ViS2l0VG9v
bHMvc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjAxY2EyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9zaW1wbGVqc29u
L2pzb25maWx0ZXIucHkKQEAgLTAsMCArMSw0MCBAQAoraW1wb3J0IHNpbXBsZWpzb24KK2ltcG9y
dCBjZ2kKKworY2xhc3MgSlNPTkZpbHRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBhcHAsIG1pbWVfdHlwZT0ndGV4dC94LWpzb24nKToKKyAgICAgICAgc2VsZi5hcHAgPSBhcHAK
KyAgICAgICAgc2VsZi5taW1lX3R5cGUgPSBtaW1lX3R5cGUKKworICAgIGRlZiBfX2NhbGxfXyhz
ZWxmLCBlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CisgICAgICAgICMgUmVhZCBKU09OIFBPU1Qg
aW5wdXQgdG8ganNvbmZpbHRlci5qc29uIGlmIG1hdGNoaW5nIG1pbWUgdHlwZQorICAgICAgICBy
ZXNwb25zZSA9IHsnc3RhdHVzJzogJzIwMCBPSycsICdoZWFkZXJzJzogW119CisgICAgICAgIGRl
ZiBqc29uX3N0YXJ0X3Jlc3BvbnNlKHN0YXR1cywgaGVhZGVycyk6CisgICAgICAgICAgICByZXNw
b25zZVsnc3RhdHVzJ10gPSBzdGF0dXMKKyAgICAgICAgICAgIHJlc3BvbnNlWydoZWFkZXJzJ10u
ZXh0ZW5kKGhlYWRlcnMpCisgICAgICAgIGVudmlyb25bJ2pzb25maWx0ZXIubWltZV90eXBlJ10g
PSBzZWxmLm1pbWVfdHlwZQorICAgICAgICBpZiBlbnZpcm9uLmdldCgnUkVRVUVTVF9NRVRIT0Qn
LCAnJykgPT0gJ1BPU1QnOgorICAgICAgICAgICAgaWYgZW52aXJvbi5nZXQoJ0NPTlRFTlRfVFlQ
RScsICcnKSA9PSBzZWxmLm1pbWVfdHlwZToKKyAgICAgICAgICAgICAgICBhcmdzID0gW18gZm9y
IF8gaW4gW2Vudmlyb24uZ2V0KCdDT05URU5UX0xFTkdUSCcpXSBpZiBfXQorICAgICAgICAgICAg
ICAgIGRhdGEgPSBlbnZpcm9uWyd3c2dpLmlucHV0J10ucmVhZCgqbWFwKGludCwgYXJncykpCisg
ICAgICAgICAgICAgICAgZW52aXJvblsnanNvbmZpbHRlci5qc29uJ10gPSBzaW1wbGVqc29uLmxv
YWRzKGRhdGEpCisgICAgICAgIHJlcyA9IHNpbXBsZWpzb24uZHVtcHMoc2VsZi5hcHAoZW52aXJv
biwganNvbl9zdGFydF9yZXNwb25zZSkpCisgICAgICAgIGpzb25wID0gY2dpLnBhcnNlX3FzKGVu
dmlyb24uZ2V0KCdRVUVSWV9TVFJJTkcnLCAnJykpLmdldCgnanNvbnAnKQorICAgICAgICBpZiBq
c29ucDoKKyAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnCisgICAg
ICAgICAgICByZXMgPSAnJy5qb2luKGpzb25wICsgWycoJywgcmVzLCAnKSddKQorICAgICAgICBl
bGlmICdPcGVyYScgaW4gZW52aXJvbi5nZXQoJ0hUVFBfVVNFUl9BR0VOVCcsICcnKToKKyAgICAg
ICAgICAgICMgT3BlcmEgaGFzIGJ1bmsgWE1MSHR0cFJlcXVlc3Qgc3VwcG9ydCBmb3IgbW9zdCBt
aW1lIHR5cGVzCisgICAgICAgICAgICBjb250ZW50X3R5cGUgPSAndGV4dC9wbGFpbicKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IHNlbGYubWltZV90eXBlCisgICAg
ICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAoJ0NvbnRlbnQtdHlwZScsIGNvbnRlbnRfdHlw
ZSksCisgICAgICAgICAgICAoJ0NvbnRlbnQtbGVuZ3RoJywgbGVuKHJlcykpLAorICAgICAgICBd
CisgICAgICAgIGhlYWRlcnMuZXh0ZW5kKHJlc3BvbnNlWydoZWFkZXJzJ10pCisgICAgICAgIHN0
YXJ0X3Jlc3BvbnNlKHJlc3BvbnNlWydzdGF0dXMnXSwgaGVhZGVycykKKyAgICAgICAgcmV0dXJu
IFtyZXNdCisKK2RlZiBmYWN0b3J5KGFwcCwgZ2xvYmFsX2NvbmYsICoqa3cpOgorICAgIHJldHVy
biBKU09ORmlsdGVyKGFwcCwgKiprdykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3NpbXBsZWpz
b24vc2Nhbm5lci5weSBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vc2Nhbm5lci5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGY0OTk5Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvc2ltcGxlanNvbi9zY2FubmVyLnB5CkBAIC0wLDAgKzEsNjMgQEAKKyIiIgor
SXRlcmF0b3IgYmFzZWQgc3JlIHRva2VuIHNjYW5uZXIKKyIiIgoraW1wb3J0IHNyZV9wYXJzZSwg
c3JlX2NvbXBpbGUsIHNyZV9jb25zdGFudHMKK2Zyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgQlJB
TkNILCBTVUJQQVRURVJOCitmcm9tIHJlIGltcG9ydCBWRVJCT1NFLCBNVUxUSUxJTkUsIERPVEFM
TAoraW1wb3J0IHJlCisKK19fYWxsX18gPSBbJ1NjYW5uZXInLCAncGF0dGVybiddCisKK0ZMQUdT
ID0gKFZFUkJPU0UgfCBNVUxUSUxJTkUgfCBET1RBTEwpCitjbGFzcyBTY2FubmVyKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxleGljb24sIGZsYWdzPUZMQUdTKToKKyAgICAgICAg
c2VsZi5hY3Rpb25zID0gW05vbmVdCisgICAgICAgICMgY29tYmluZSBwaHJhc2VzIGludG8gYSBj
b21wb3VuZCBwYXR0ZXJuCisgICAgICAgIHMgPSBzcmVfcGFyc2UuUGF0dGVybigpCisgICAgICAg
IHMuZmxhZ3MgPSBmbGFncworICAgICAgICBwID0gW10KKyAgICAgICAgZm9yIGlkeCwgdG9rZW4g
aW4gZW51bWVyYXRlKGxleGljb24pOgorICAgICAgICAgICAgcGhyYXNlID0gdG9rZW4ucGF0dGVy
bgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1YnBhdHRlcm4gPSBzcmVfcGFy
c2UuU3ViUGF0dGVybihzLAorICAgICAgICAgICAgICAgICAgICBbKFNVQlBBVFRFUk4sIChpZHgg
KyAxLCBzcmVfcGFyc2UucGFyc2UocGhyYXNlLCBmbGFncykpKV0pCisgICAgICAgICAgICBleGNl
cHQgc3JlX2NvbnN0YW50cy5lcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAg
ICAgcC5hcHBlbmQoc3VicGF0dGVybikKKyAgICAgICAgICAgIHNlbGYuYWN0aW9ucy5hcHBlbmQo
dG9rZW4pCisKKyAgICAgICAgcCA9IHNyZV9wYXJzZS5TdWJQYXR0ZXJuKHMsIFsoQlJBTkNILCAo
Tm9uZSwgcCkpXSkKKyAgICAgICAgc2VsZi5zY2FubmVyID0gc3JlX2NvbXBpbGUuY29tcGlsZShw
KQorCisKKyAgICBkZWYgaXRlcnNjYW4oc2VsZiwgc3RyaW5nLCBpZHg9MCwgY29udGV4dD1Ob25l
KToKKyAgICAgICAgIiIiCisgICAgICAgIFlpZWxkIG1hdGNoLCBlbmRfaWR4IGZvciBlYWNoIG1h
dGNoCisgICAgICAgICIiIgorICAgICAgICBtYXRjaCA9IHNlbGYuc2Nhbm5lci5zY2FubmVyKHN0
cmluZywgaWR4KS5tYXRjaAorICAgICAgICBhY3Rpb25zID0gc2VsZi5hY3Rpb25zCisgICAgICAg
IGxhc3RlbmQgPSBpZHgKKyAgICAgICAgZW5kID0gbGVuKHN0cmluZykKKyAgICAgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgICAgIG0gPSBtYXRjaCgpCisgICAgICAgICAgICBpZiBtIGlzIE5vbmU6
CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG1hdGNoYmVnaW4sIG1hdGNoZW5k
ID0gbS5zcGFuKCkKKyAgICAgICAgICAgIGlmIGxhc3RlbmQgPT0gbWF0Y2hlbmQ6CisgICAgICAg
ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbnNbbS5sYXN0aW5kZXhd
CisgICAgICAgICAgICBpZiBhY3Rpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcnZh
bCwgbmV4dF9wb3MgPSBhY3Rpb24obSwgY29udGV4dCkKKyAgICAgICAgICAgICAgICBpZiBuZXh0
X3BvcyBpcyBub3QgTm9uZSBhbmQgbmV4dF9wb3MgIT0gbWF0Y2hlbmQ6CisgICAgICAgICAgICAg
ICAgICAgICMgImZhc3QgZm9yd2FyZCIgdGhlIHNjYW5uZXIKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlbmQgPSBuZXh0X3BvcworICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuc2Nh
bm5lci5zY2FubmVyKHN0cmluZywgbWF0Y2hlbmQpLm1hdGNoCisgICAgICAgICAgICAgICAgeWll
bGQgcnZhbCwgbWF0Y2hlbmQKKyAgICAgICAgICAgIGxhc3RlbmQgPSBtYXRjaGVuZAorICAgICAg
ICAgICAgCitkZWYgcGF0dGVybihwYXR0ZXJuLCBmbGFncz1GTEFHUyk6CisgICAgZGVmIGRlY29y
YXRvcihmbik6CisgICAgICAgIGZuLnBhdHRlcm4gPSBwYXR0ZXJuCisgICAgICAgIGZuLnJlZ2V4
ID0gcmUuY29tcGlsZShwYXR0ZXJuLCBmbGFncykKKyAgICAgICAgcmV0dXJuIGZuCisgICAgcmV0
dXJuIGRlY29yYXRvcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47651</attachid>
            <date>2010-01-28 14:44:27 -0800</date>
            <delta_ts>2010-01-29 16:53:37 -0800</delta_ts>
            <desc>ready for review + commit (license text updated</desc>
            <filename>bug-31498-20100128144425.patch</filename>
            <type>text/plain</type>
            <size>524784</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1OGQ1M2Q4Li40Yzk5ODk2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTAtMDEt
MjggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBzdHJlYW0gY2hyb21pdW0ub3JnJ3Mg
aW1wbGVtZW50YXRpb24gb2YgcnVuLXdlYmtpdC10ZXN0cywKKyAgICAgICAgV2hpY2ggaXMgd3Jp
dHRlbiBpbiBQeXRob24gYW5kIGhhcyB0aGUgcHJpbWFyeSBhZHZhbnRhZ2VzIG9mCisgICAgICAg
IGJlaW5nIGFibGUgdG8gcnVuIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBtdWx0aXBsZSBwcm9j
ZXNzb3JzCisgICAgICAgIGFuZCBoYXMgYSBtb3JlIGZsZXhpYmxlIHN5c3RlbSBmb3IgaW5kaWNh
dGluZyBleHBlY3RlZCBmYWlsdXJlcworICAgICAgICBmb3Igc2NyaXB0cy4gQ3VycmVudGx5IHRo
ZXNlIHNjcmlwdHMgY2FuIG9ubHkgYmUgdXNlZCB0byB0ZXN0IHRoZQorICAgICAgICBjaHJvbWl1
bSBwb3J0cywgYnV0IGl0IHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGV4dGVuZCB0aGVtIHRv
CisgICAgICAgIHJ1biB0aGUgYmFzZSB3ZWJraXQgcG9ydHMgYW5kIGZvciBvdGhlcnMgdG8gdXNl
IGFzIHdlbGwuCisKKyAgICAgICAgQWxzbyB0aGlzIGFkZHMgYSBjb3B5IG9mIHRoZSBweXRob24g
c2ltcGxlanNvbiBleHRlbnNpb24gdG8KKyAgICAgICAgV2ViS2l0VG9vbHMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDk4CisKKyAgICAgICAg
KiBTY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHM6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RlZHVwLXRlc3RzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9fX2lu
aXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvYXBhY2hlX2h0dHBfc2VydmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9mYWlsdXJlX2ZpbmRlci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXJfdGVzdC5weTogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvaHRtbF9nZW5lcmF0b3IucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLmJhdDogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9z
ZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnNoOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlcl9iYXNlLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9odHRwZDIucGVtOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbGlnaHR0cGQuY29uZjog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRm
b3JtX3V0aWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19saW51eC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZv
cm1fdXRpbHNfbWFjLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rf
ZXhwZWN0YXRpb25zLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVz
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd2Vic29ja2V0X3NlcnZlci5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNl
bGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0cHV0X2Zv
cm1hdHRlci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF9vdXRwdXRfeG1sX3RvX2pzb24ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvX19pbml0X18ucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1h
Z2VfZGlmZi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRf
ZGlmZi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZC5weTogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rh
c2hib2FyZF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogc2ltcGxlanNvbi9MSUNFTlNF
LnR4dDogQWRkZWQuCisgICAgICAgICogc2ltcGxlanNvbi9SRUFETUUuZ29vZ2xlOiBBZGRlZC4K
KyAgICAgICAgKiBzaW1wbGVqc29uL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBzaW1w
bGVqc29uL19zcGVlZHVwcy5jOiBBZGRlZC4KKyAgICAgICAgKGFzY2lpX2VzY2FwZV9jaGFyKToK
KyAgICAgICAgKGFzY2lpX2VzY2FwZV91bmljb2RlKToKKyAgICAgICAgKGFzY2lpX2VzY2FwZV9z
dHIpOgorICAgICAgICAocHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpOgorICAgICAgICAoaW5p
dF9zcGVlZHVwcyk6CisgICAgICAgICogc2ltcGxlanNvbi9kZWNvZGVyLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBzaW1wbGVqc29uL2VuY29kZXIucHk6IEFkZGVkLgorICAgICAgICAqIHNpbXBsZWpz
b24vanNvbmZpbHRlci5weTogQWRkZWQuCisgICAgICAgICogc2ltcGxlanNvbi9zY2FubmVyLnB5
OiBBZGRlZC4KKwogMjAxMC0wMS0yNyAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5u
ZXRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUnViYmVyc3RhbXBlZCBieSBTaW1vbiBIYXVzbWFu
bi4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13
ZWJraXQtdGVzdHMgYi9XZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Vi
a2l0LXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyMmMwYzQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0t
d2Via2l0LXRlc3RzCkBAIC0wLDAgKzEsNDAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisiIiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRweS9sYXlvdXRfdGVz
dHMvcmViYXNlbGluZS5weSIiIgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFw
cGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJn
dlswXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0cHkiLCAibGF5b3V0
X3Rlc3RzIikpCisKK2ltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cworCitp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0
X3Rlc3RzLm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21p
dW0td2Via2l0LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0
LXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3MTI4MzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVz
dHMKQEAgLTAsMCArMSw0MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
QykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIldyYXBwZXIgYXJvdW5kIHdlYmtpdHB5L2xheW91dF90ZXN0cy9ydW4tY2hy
b21pdW0td2Via2l0LXRlc3RzLnB5IiIiCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBh
dGguYXBwZW5kKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5
cy5hcmd2WzBdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXRweSIsICJs
YXlvdXRfdGVzdHMiKSkKK2ltcG9ydCBydW5fY2hyb21pdW1fd2Via2l0X3Rlc3RzCisKK2lmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CisgICAgb3B0aW9ucywgYXJncyA9IHJ1bl9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucGFyc2VfYXJncygpCisgICAgcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5t
YWluKG9wdGlvbnMsIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9kZWR1cC10ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2RlZHVwLXRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAuLmQ5M2QzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kZWR1cC10ZXN0cy5weQpAQCAtMCwwICsxLDczIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBD
aHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiZGVkdXAt
dGVzdHMgLS0gcHJpbnQgdGVzdCByZXN1bHRzIGR1cGxpY2F0ZWQgYmV0d2VlbiB3aW4gYW5kIGxp
bnV4LgorCitCZWNhdXNlIHRoZSBvdXRwdXRzIGFyZSB2ZXJ5IHNpbWlsYXIsIHdlIGZhbGwgYmFj
ayBvbiBXaW5kb3dzIG91dHB1dHMKK2lmIHRoZXJlIGlzbid0IGFuIGV4cGVjdGVkIG91dHB1dCBm
b3IgTGludXggbGF5b3V0IHRlc3RzLiAgVGhpcyBtZWFucwordGhhdCBhbnkgZmlsZSB0aGF0IGlz
IGR1cGxpY2F0ZWQgYmV0d2VlbiB0aGUgTGludXggYW5kIFdpbmRvd3MgZGlyZWN0b3JpZXMKK2lz
IHJlZHVuZGFudC4KKworVGhpcyBjb21tYW5kIGR1bXBzIG91dCBhbGwgc3VjaCBmaWxlcy4gIFlv
dSBjYW4gdXNlIGl0IGxpa2U6CisgIGRlZHVwLXRlc3RzLnB5ICAgIyBwcmludCBvdXQgdGhlIGJh
ZCBmaWxlcworICBkZWR1cC10ZXN0cy5weSB8IHhhcmdzIGdpdCBybSAgICMgZGVsZXRlIHRoZSBi
YWQgZmlsZXMKKyIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcy5wYXRoCitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCisjIEEgbWFwIG9mIGZpbGUgaGFzaCA9PiBzZXQg
b2YgYWxsIGZpbGVzIHdpdGggdGhhdCBoYXNoLgoraGFzaGVzID0gY29sbGVjdGlvbnMuZGVmYXVs
dGRpY3Qoc2V0KQorCisjIEZpbGwgaW4gdGhlIG1hcC4KK2NtZCA9IFsnZ2l0JywgJ2xzLXRyZWUn
LCAnLXInLCAnSEVBRCcsICd3ZWJraXQvZGF0YS9sYXlvdXRfdGVzdHMvJ10KK3RyeToKKyAgICBn
aXQgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKK2V4Y2Vw
dCBPU0Vycm9yLCBlOgorICAgIGlmIGUuZXJybm8gPT0gMjogICMgTm8gc3VjaCBmaWxlIG9yIGRp
cmVjdG9yeS4KKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIkVycm9yOiAnTm8gc3VjaCBm
aWxlJyB3aGVuIHJ1bm5pbmcgZ2l0LiIKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIlRo
aXMgc2NyaXB0IHJlcXVpcmVzIGdpdC4iCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmFpc2Ug
ZQorCitmb3IgbGluZSBpbiBnaXQuc3Rkb3V0OgorICAgIGF0dHJzLCBmaWxlID0gbGluZS5zdHJp
cCgpLnNwbGl0KCdcdCcpCisgICAgXywgXywgaGFzaCA9IGF0dHJzLnNwbGl0KCcgJykKKyAgICBo
YXNoZXNbaGFzaF0uYWRkKGZpbGUpCisKKyMgRHVtcCBvdXQgZHVwbGljYXRlZCBmaWxlcy4KK2Zv
ciBjbHVzdGVyIGluIGhhc2hlcy52YWx1ZXMoKToKKyAgICBpZiBsZW4oY2x1c3RlcikgPCAyOgor
ICAgICAgICBjb250aW51ZQorICAgIGZvciBmaWxlIGluIGNsdXN0ZXI6CisgICAgICAgIGlmICcv
Y2hyb21pdW0tbGludXgvJyBpbiBmaWxlOgorICAgICAgICAgICAgaWYgZmlsZS5yZXBsYWNlKCcv
Y2hyb21pdW0tbGludXgvJywgJy9jaHJvbWl1bS13aW4vJykgaW4gY2x1c3RlcjoKKyAgICAgICAg
ICAgICAgICBwcmludCBmaWxlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9fX2luaXRfXy5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL19faW5pdF9fLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2FwYWNoZV9odHRwX3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWYyMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvYXBh
Y2hlX2h0dHBfc2VydmVyLnB5CkBAIC0wLDAgKzEsMjI5IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQSBjbGFzcyB0byBzdGFydC9zdG9wIHRoZSBh
cGFjaGUgaHR0cCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3VicHJv
Y2VzcworaW1wb3J0IHN5cworCitpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQoraW1wb3J0IHBhdGhf
dXRpbHMKK2ltcG9ydCBwbGF0Zm9ybV91dGlscworCisKK2NsYXNzIExheW91dFRlc3RBcGFjaGVI
dHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBvdXRwdXRfZGlyKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICBvdXRwdXRf
ZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9y
eQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAg
ICAgICAgc2VsZi5faHR0cGRfcHJvYyA9IE5vbmUKKyAgICAgICAgcGF0aF91dGlscy5tYXliZV9t
YWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQorCisgICAgICAgIHNlbGYubWFwcGluZ3MgPSBbeydw
b3J0JzogODAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgeydwb3J0JzogODQ0MywgJ3NzbGNlcnQnOiBUcnVlfV0KKworICAgICAgICAjIFRo
ZSB1cHN0cmVhbSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0ZW5jZSBvZiAvdG1wL1dlYktp
dCBmb3IKKyAgICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBsaWtlIHRoZSBsb2NrIGZpbGUg
dGhlcmUuCisgICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9zLnBhdGguam9pbigiL3RtcCIs
ICJXZWJLaXQiKQorICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYu
X3J1bnRpbWVfcGF0aCkKKworICAgICAgICAjIFRoZSBQSUQgcmV0dXJuZWQgd2hlbiBBcGFjaGUg
aXMgc3RhcnRlZCBnb2VzIGF3YXkgKGR1ZSB0byBkcm9wcGluZworICAgICAgICAjIHByaXZpbGVn
ZXM/KS4gVGhlIHByb3BlciBjb250cm9sbGluZyBQSUQgaXMgd3JpdHRlbiB0byBhIGZpbGUgaW4g
dGhlCisgICAgICAgICMgYXBhY2hlIHJ1bnRpbWUgZGlyZWN0b3J5LgorICAgICAgICBzZWxmLl9w
aWRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl9ydW50aW1lX3BhdGgsICdodHRwZC5waWQnKQor
CisgICAgICAgIHRlc3RfZGlyID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFy
dHknLCAnV2ViS2l0JywKKyAgICAgICAgICAgICdMYXlvdXRUZXN0cycpCisgICAgICAgIGpzX3Rl
c3RfcmVzb3VyY2VzX2RpciA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJmYXN0
IiwgImpzIiwKKyAgICAgICAgICAgICJyZXNvdXJjZXMiKQorICAgICAgICBtaW1lX3R5cGVzX3Bh
dGggPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJjb25mIiwKKyAg
ICAgICAgICAgICJtaW1lLnR5cGVzIikKKyAgICAgICAgY2VydF9maWxlID0gc2VsZi5fY3lnd2lu
X3NhZmVfam9pbih0ZXN0X2RpciwgImh0dHAiLCAiY29uZiIsCisgICAgICAgICAgICAid2Via2l0
LWh0dHBkLnBlbSIpCisgICAgICAgIGFjY2Vzc19sb2cgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2lu
KG91dHB1dF9kaXIsICJhY2Nlc3NfbG9nLnR4dCIpCisgICAgICAgIGVycm9yX2xvZyA9IHNlbGYu
X2N5Z3dpbl9zYWZlX2pvaW4ob3V0cHV0X2RpciwgImVycm9yX2xvZy50eHQiKQorICAgICAgICBk
b2N1bWVudF9yb290ID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImh0dHAiLCAi
dGVzdHMiKQorCisgICAgICAgIGV4ZWN1dGFibGUgPSBwbGF0Zm9ybV91dGlscy5hcGFjaGVfZXhl
Y3V0YWJsZV9wYXRoKCkKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAg
ICBleGVjdXRhYmxlID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGV4ZWN1dGFibGUpCisKKyAgICAg
ICAgY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAnLWYnLCBzZWxmLl9nZXRfYXBhY2hl
X2NvbmZpZ19maWxlX3BhdGgodGVzdF9kaXIsIG91dHB1dF9kaXIpLAorICAgICAgICAgICAgJy1D
JywgIlwnRG9jdW1lbnRSb290ICVzXCciICUgZG9jdW1lbnRfcm9vdCwKKyAgICAgICAgICAgICct
YycsICJcJ0FsaWFzIC9qcy10ZXN0LXJlc291cmNlcyAlc1wnIiAlIGpzX3Rlc3RfcmVzb3VyY2Vz
X2RpciwKKyAgICAgICAgICAgICctQycsICJcJ0xpc3RlbiAlc1wnIiAlICIxMjcuMC4wLjE6ODAw
MCIsCisgICAgICAgICAgICAnLUMnLCAiXCdMaXN0ZW4gJXNcJyIgJSAiMTI3LjAuMC4xOjgwODEi
LAorICAgICAgICAgICAgJy1jJywgIlwnVHlwZXNDb25maWcgXCIlc1wiXCciICUgbWltZV90eXBl
c19wYXRoLAorICAgICAgICAgICAgJy1jJywgIlwnQ3VzdG9tTG9nIFwiJXNcIiBjb21tb25cJyIg
JSBhY2Nlc3NfbG9nLAorICAgICAgICAgICAgJy1jJywgIlwnRXJyb3JMb2cgXCIlc1wiXCciICUg
ZXJyb3JfbG9nLAorICAgICAgICAgICAgJy1DJywgIlwnVXNlciBcIiVzXCJcJyIgJSBvcy5lbnZp
cm9uLmdldCgiVVNFUk5BTUUiLAorICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KCJVU0VS
IiwgIiIpKV0KKworICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAgIGN5
Z2JpbiA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbics
ICdiaW4nKQorICAgICAgICAgICAgIyBOb3QgZW50aXJlbHkgc3VyZSB3aHksIGJ1dCBmcm9tIGN5
Z3dpbiB3ZSBuZWVkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICMgaHR0cGQgY29tbWFuZCB0aHJv
dWdoIGJhc2guCisgICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBbCisgICAgICAgICAgICAg
ICAgb3MucGF0aC5qb2luKGN5Z2JpbiwgJ2Jhc2guZXhlJyksCisgICAgICAgICAgICAgICAgJy1j
JywKKyAgICAgICAgICAgICAgICAnUEFUSD0lcyAlcycgJSAoc2VsZi5fZ2V0X2N5Z3dpbl9wYXRo
KGN5Z2JpbiksICIgIi5qb2luKGNtZCkpLAorICAgICAgICAgICAgICBdCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAjIFRPRE8ob2phbik6IFdoZW4gd2UgZ2V0IGN5Z3dpbiB1c2luZyBBcGFj
aGUgMiwgdXNlIHNldCB0aGUKKyAgICAgICAgICAgICMgY2VydCBmaWxlIGZvciBjeWd3aW4gYXMg
d2VsbC4KKyAgICAgICAgICAgIGNtZC5leHRlbmQoWyctYycsICJcJ1NTTENlcnRpZmljYXRlRmls
ZSAlc1wnIiAlIGNlcnRfZmlsZV0pCisgICAgICAgICAgICAjIEpvaW4gdGhlIHN0cmluZyBoZXJl
IHNvIHRoYXQgQ3lnd2luL1dpbmRvd3MgYW5kIE1hYy9MaW51eAorICAgICAgICAgICAgIyBjYW4g
dXNlIHRoZSBzYW1lIGNvZGUuIE90aGVyd2lzZSwgd2UgY291bGQgcmVtb3ZlIHRoZSBzaW5nbGUK
KyAgICAgICAgICAgICMgcXVvdGVzIGFib3ZlIGFuZCBrZWVwIGNtZCBhcyBhIHNlcXVlbmNlLgor
ICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gIiAiLmpvaW4oY21kKQorCisgICAgZGVmIF9p
c19jeWd3aW4oc2VsZik6CisgICAgICAgIHJldHVybiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIs
ICJjeWd3aW4iKQorCisgICAgZGVmIF9jeWd3aW5fc2FmZV9qb2luKHNlbGYsICpwYXJ0cyk6Cisg
ICAgICAgICIiIlJldHVybnMgYSBwbGF0Zm9ybSBhcHByb3ByaWF0ZSBwYXRoLiIiIgorICAgICAg
ICBwYXRoID0gb3MucGF0aC5qb2luKCpwYXJ0cykKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2lu
KCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKHBhdGgpCisgICAg
ICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgX2dldF9jeWd3aW5fcGF0aChzZWxmLCBwYXRoKToK
KyAgICAgICAgIiIiQ29udmVydCBhIFdpbmRvd3MgcGF0aCB0byBhIGN5Z3dpbiBwYXRoLgorCisg
ICAgICAgIFRoZSBjeWdwYXRoIHV0aWxpdHkgaW5zaXN0cyBvbiBjb252ZXJ0aW5nIHBhdGhzIHRo
YXQgaXQgdGhpbmtzIGFyZQorICAgICAgICBDeWd3aW4gcm9vdCBwYXRocyB0byB3aGF0IGl0IHRo
aW5rcyB0aGUgY29ycmVjdCByb290cyBhcmUuICBTbyBwYXRocworICAgICAgICBzdWNoIGFzICJD
OlxiXHNsYXZlXHdlYmtpdC1yZWxlYXNlXGJ1aWxkXHRoaXJkX3BhcnR5XGN5Z3dpblxiaW4iCisg
ICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gcGxhaW4gIi91c3IvYmluIi4gIFRvIGF2b2lkIHRoaXMs
IHdlCisgICAgICAgIGRvIHRoZSBjb252ZXJzaW9uIG1hbnVhbGx5LgorCisgICAgICAgIFRoZSBw
YXRoIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFic29sdXRlIHBhdGgsIG9uIGFueSBkcml2ZS4KKyAg
ICAgICAgIiIiCisgICAgICAgIGRyaXZlX3JlZ2V4cCA9IHJlLmNvbXBpbGUocicoW2Etel0pOlsv
XFxdJywgcmUuSUdOT1JFQ0FTRSkKKworICAgICAgICBkZWYgbG93ZXJfZHJpdmUobWF0Y2hvYmop
OgorICAgICAgICAgICAgcmV0dXJuICcvY3lnZHJpdmUvJXMvJyAlIG1hdGNob2JqLmdyb3VwKDEp
Lmxvd2VyKCkKKyAgICAgICAgcGF0aCA9IGRyaXZlX3JlZ2V4cC5zdWIobG93ZXJfZHJpdmUsIHBh
dGgpCisgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorCisgICAgZGVmIF9n
ZXRfYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoc2VsZiwgdGVzdF9kaXIsIG91dHB1dF9kaXIpOgor
ICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBhcGFjaGUgY29uZmlnIGZpbGUgdG8g
dXNlLgorICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfZGlyOiBhYnNvbHV0ZSBwYXRoIHRv
IHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCisgICAgICAgICAgb3V0cHV0X2RpcjogYWJzb2x1
dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCisgICAgICAgICIi
IgorICAgICAgICBodHRwZF9jb25maWcgPSBwbGF0Zm9ybV91dGlscy5hcGFjaGVfY29uZmlnX2Zp
bGVfcGF0aCgpCisgICAgICAgIGh0dHBkX2NvbmZpZ19jb3B5ID0gb3MucGF0aC5qb2luKG91dHB1
dF9kaXIsICJodHRwZC5jb25mIikKKyAgICAgICAgaHR0cGRfY29uZiA9IG9wZW4oaHR0cGRfY29u
ZmlnKS5yZWFkKCkKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICAj
IFRoaXMgaXMgYSBncm9zcyBoYWNrLCBidXQgaXQgbGV0cyB1cyB1c2UgdGhlIHVwc3RyZWFtIC5j
b25mIGZpbGUKKyAgICAgICAgICAgICMgYW5kIG91ciBjaGVja2VkIGluIGN5Z3dpbi4gVGhpcyB0
ZWxscyB0aGUgc2VydmVyIHRoZSByb290CisgICAgICAgICAgICAjIGRpcmVjdG9yeSB0byBsb29r
IGluIGZvciAuc28gbW9kdWxlcy4gSXQgd2lsbCB1c2UgdGhpcyBwYXRoCisgICAgICAgICAgICAj
IHBsdXMgdGhlIHJlbGF0aXZlIHBhdGhzIHRvIHRoZSAuc28gZmlsZXMgbGlzdGVkIGluIHRoZSAu
Y29uZgorICAgICAgICAgICAgIyBmaWxlLiBXZSBoYXZlIGFwYWNoZS9jeWd3aW4gY2hlY2tlZCBp
bnRvIG91ciB0cmVlIHNvCisgICAgICAgICAgICAjIHBlb3BsZSBkb24ndCBoYXZlIHRvIGluc3Rh
bGwgaXQgaW50byB0aGVpciBjeWd3aW4uCisgICAgICAgICAgICBjeWd1c3IgPSBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAndXNyJykKKyAgICAgICAg
ICAgIGh0dHBkX2NvbmYgPSBodHRwZF9jb25mLnJlcGxhY2UoJ1NlcnZlclJvb3QgIi91c3IiJywK
KyAgICAgICAgICAgICAgICAnU2VydmVyUm9vdCAiJXMiJyAlIHNlbGYuX2dldF9jeWd3aW5fcGF0
aChjeWd1c3IpKQorCisgICAgICAgICMgVE9ETyhvamFuKTogSW5zdGVhZCBvZiB3cml0aW5nIGFu
IGV4dHJhIGZpbGUsIGNoZWNraW4gYSBjb25mIGZpbGUKKyAgICAgICAgIyB1cHN0cmVhbS4gT3Is
IGV2ZW4gYmV0dGVyLCB1cHN0cmVhbS9kZWxldGUgYWxsIG91ciBjaHJvbWUgaHR0cAorICAgICAg
ICAjIHRlc3RzIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBzcGVjaWFsLWNhc2VkIERvY3VtZW50Um9v
dCBhbmQgdGhlbgorICAgICAgICAjIGp1c3QgdXNlIHRoZSB1cHN0cmVhbQorICAgICAgICAjIGNv
bmYgZmlsZS4KKyAgICAgICAgY2hyb21lX2RvY3VtZW50X3Jvb3QgPSBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsCisgICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykK
KyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICBjaHJvbWVfZG9jdW1l
bnRfcm9vdCA9IHNlbGYuX2dldF9jeWd3aW5fcGF0aChjaHJvbWVfZG9jdW1lbnRfcm9vdCkKKyAg
ICAgICAgaHR0cGRfY29uZiA9IChodHRwZF9jb25mICsKKyAgICAgICAgICAgIHNlbGYuX2dldF92
aXJ0dWFsX2hvc3RfY29uZmlnKGNocm9tZV9kb2N1bWVudF9yb290LCA4MDgxKSkKKworICAgICAg
ICBmID0gb3BlbihodHRwZF9jb25maWdfY29weSwgJ3diJykKKyAgICAgICAgZi53cml0ZShodHRw
ZF9jb25mKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4o
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3lnd2luX3BhdGgoaHR0cGRfY29uZmln
X2NvcHkpCisgICAgICAgIHJldHVybiBodHRwZF9jb25maWdfY29weQorCisgICAgZGVmIF9nZXRf
dmlydHVhbF9ob3N0X2NvbmZpZyhzZWxmLCBkb2N1bWVudF9yb290LCBwb3J0LCBzc2w9RmFsc2Up
OgorICAgICAgICAiIiJSZXR1cm5zIGEgPFZpcnR1YWxIb3N0PiBkaXJlY3RpdmUgYmxvY2sgZm9y
IGFuIGh0dHBkLmNvbmYgZmlsZS4KKyAgICAgICAgSXQgd2lsbCBsaXN0ZW4gdG8gMTI3LjAuMC4x
IG9uIGVhY2ggb2YgdGhlIGdpdmVuIHBvcnQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4g
J1xuJy5qb2luKCgnPFZpcnR1YWxIb3N0IDEyNy4wLjAuMTolcz4nICUgcG9ydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50Um9vdCAlcycgJSBkb2N1bWVudF9yb290LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzc2wgYW5kICdTU0xFbmdpbmUgT24nIG9yICcnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAnPC9WaXJ0dWFsSG9zdD4nLCAnJykpCisKKyAgICBkZWYg
X3N0YXJ0X2h0dHBkX3Byb2Nlc3Moc2VsZik6CisgICAgICAgICIiIlN0YXJ0cyB0aGUgaHR0cGQg
cHJvY2VzcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZXJlIHdlcmUgZXJyb3JzLiIiIgorICAgICAg
ICAjIFVzZSBzaGVsbD1UcnVlIGJlY2F1c2Ugd2Ugam9pbiB0aGUgYXJndW1lbnRzIGludG8gYSBz
dHJpbmcgZm9yCisgICAgICAgICMgdGhlIHNha2Ugb2YgV2luZG93L0N5Z3dpbiBhbmQgaXQgbmVl
ZHMgcXVvdGluZyB0aGF0IGJyZWFrcworICAgICAgICAjIHNoZWxsPUZhbHNlLgorICAgICAgICBz
ZWxmLl9odHRwZF9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLl9zdGFydF9jbWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNz
LlBJUEUsCisgICAgICAgICAgICBzaGVsbD1UcnVlKQorICAgICAgICBlcnIgPSBzZWxmLl9odHRw
ZF9wcm9jLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgaWYgbGVuKGVycik6CisgICAgICAgICAgICBs
b2dnaW5nLmRlYnVnKGVycikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAiIiJTdGFydHMgdGhlIGFw
YWNoZSBodHRwIHNlcnZlci4iIiIKKyAgICAgICAgIyBTdG9wIGFueSBjdXJyZW50bHkgcnVubmlu
ZyBzZXJ2ZXJzLgorICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWco
IlN0YXJ0aW5nIGFwYWNoZSBodHRwIHNlcnZlciIpCisgICAgICAgIHNlcnZlcl9zdGFydGVkID0g
c2VsZi53YWl0X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRfcHJvY2VzcykKKyAgICAgICAg
aWYgc2VydmVyX3N0YXJ0ZWQ6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJBcGFjaGUgc3Rh
cnRlZC4gVGVzdGluZyBwb3J0cyIpCisgICAgICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYu
d2FpdF9mb3JfYWN0aW9uKAorICAgICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdf
b25fYWxsX3BvcnRzKQorCisgICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgorICAgICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHN0YXJ0IGh0dHAgc2Vy
dmVyJykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wcyB0aGUgYXBhY2hl
IGh0dHAgc2VydmVyLiIiIgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFu
eSBydW5uaW5nIGh0dHAgc2VydmVycyIpCisgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKKyAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICAgICAgaHR0cGRf
cGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5lKCkpCisgICAgICAgIHBhdGhf
dXRpbHMuc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1
cmUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9mYWlsdXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0
NzcwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlLnB5CkBAIC0wLDAgKzEsMjI3IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ0hST01JVU1fV0lO
ID0gImNocm9taXVtLXdpbiIKK0NIUk9NSVVNX01BQyA9ICJjaHJvbWl1bS1tYWMiCitDSFJPTUlV
TV9MSU5VWCA9ICJjaHJvbWl1bS1saW51eCIKK1dFQktJVF9XSU5fVElUTEUgPSAiV2ViS2l0IFdp
biIKK1dFQktJVF9NQUNfVElUTEUgPSAiV2ViS2l0IE1hYyIKK1dFQktJVF9USVRMRSA9ICJXZWJL
aXQiCitVTktOT1dOID0gIlVua25vd24iCisKK0VYUEVDVEVEX0lNQUdFX0ZJTEVfRU5ESU5HID0g
Ii1leHBlY3RlZC5wbmciCitBQ1RVQUxfSU1BR0VfRklMRV9FTkRJTkcgPSAiLWFjdHVhbC5wbmci
CitVUFNUUkVBTV9JTUFHRV9GSUxFX0VORElORyA9ICItZXhwZWN0ZWQtdXBzdHJlYW0ucG5nIgor
RVhQRUNURURfVEVYVF9GSUxFX0VORElORyA9ICItZXhwZWN0ZWQudHh0IgorQUNUVUFMX1RFWFRf
RklMRV9FTkRJTkcgPSAiLWFjdHVhbC50eHQiCitESUZGX0lNQUdFX0ZJTEVfRU5ESU5HID0gIi1k
aWZmLnBuZyIKK0RJRkZfVEVYVF9GSUxFX0VORElORyA9ICItZGlmZi50eHQiCisKK0NIUk9NSVVN
X1NSQ19IT01FID0gImh0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvdHJ1bmsv
c3JjL3dlYmtpdC8iCitDSFJPTUlVTV9UUkFDX0hPTUUgPSBDSFJPTUlVTV9TUkNfSE9NRSArICJk
YXRhL2xheW91dF90ZXN0cy8iCitXRUJLSVRfVFJBQ19IT01FID0gImh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvYnJvd3Nlci90cnVuay9MYXlvdXRUZXN0cy8iCitXRUJLSVRfU1ZOX0hPU1ROQU1FID0g
InN2bi53ZWJraXQub3JnIgorVEhJUkRfUEFSVFkgPSAidGhpcmRfcGFydHkiCisKK1dFQktJVF9Q
TEFURk9STV9VUkxfQkFTRSA9IFdFQktJVF9UUkFDX0hPTUUgKyAicGxhdGZvcm0iCitXRUJLSVRf
TEFZT1VUX1RFU1RfQkFTRV9VUkwgPSAiaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkv
d2Via2l0L3RydW5rLyIKK1dFQktJVF9JTUFHRV9CQVNFTElORV9CQVNFX1VSTF9XSU4gPSAoV0VC
S0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkxheW91dFRlc3RzL3BsYXRmb3JtL3dpbi8iKQorV0VCS0lUX0lNQUdFX0JBU0VM
SU5FX0JBU0VfVVJMX01BQyA9IChXRUJLSVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
LyIpCitXRUJLSVRfVFJBQ19JTUFHRV9CQVNFTElORV9CQVNFX1VSTF9NQUMgPSBXRUJLSVRfUExB
VEZPUk1fVVJMX0JBU0UgKyAiL21hYy8iCitXRUJLSVRfVFJBQ19JTUFHRV9CQVNFTElORV9CQVNF
X1VSTF9XSU4gPSBXRUJLSVRfUExBVEZPUk1fVVJMX0JBU0UgKyAiL3dpbi8iCisKK0xBWU9VVF9U
RVNUX1JFU1VMVFNfRElSID0gImxheW91dC10ZXN0LXJlc3VsdHMiCisKK0ZBSUwgPSAiRkFJTCIK
K1RJTUVPVVQgPSAiVElNRU9VVCIKK0NSQVNIID0gIkNSQVNIIgorUEFTUyA9ICJQQVNTIgorV09O
VEZJWCA9ICJXT05URklYIgorCisKK2NsYXNzIEZhaWx1cmUob2JqZWN0KToKKyAgICAiIiIKKyAg
ICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBmYWlsdXJlIGluIHRoZSB0ZXN0IG91dHB1dCwgYW5k
IGlzCisgICAgaW50ZW5kZWQgYXMgYSBkYXRhIG1vZGVsIG9iamVjdC4KKyAgICAiIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9ICIiCisgICAgICAg
IHNlbGYudGVzdF9wYXRoID0gIiIKKyAgICAgICAgc2VsZi50ZXh0X2RpZmZfbWlzbWF0Y2ggPSBG
YWxzZQorICAgICAgICBzZWxmLmltYWdlX21pc21hdGNoID0gRmFsc2UKKyAgICAgICAgc2VsZi50
aW1lb3V0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5jcmFzaGVkID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi50ZXh0X2Jhc2VsaW5lX3VybCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXJs
ID0gIiIKKyAgICAgICAgc2VsZi50ZXh0X2Jhc2VsaW5lX2FnZSA9ICIiCisgICAgICAgIHNlbGYu
aW1hZ2VfYmFzZWxpbmVfYWdlID0gIiIKKyAgICAgICAgc2VsZi50ZXN0X2FnZSA9ICIiCisgICAg
ICAgIHNlbGYudGV4dF9iYXNlbGluZV9sb2NhbCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmFz
ZWxpbmVfbG9jYWwgPSAiIgorICAgICAgICBzZWxmLnRleHRfYWN0dWFsX2xvY2FsID0gIiIKKyAg
ICAgICAgc2VsZi5pbWFnZV9hY3R1YWxfbG9jYWwgPSAiIgorICAgICAgICBzZWxmLmltYWdlX2Jh
c2VsaW5lX3Vwc3RyZWFtX3VybCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXBz
dHJlYW1fbG9jYWwgPSAiIgorICAgICAgICBzZWxmLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUgPSAi
IgorICAgICAgICBzZWxmLmZsYWtpbmVzcyA9IDAKKworICAgIGRlZiBnZXRfZXhwZWN0ZWRfaW1h
Z2VfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZW5hbWVfZW5kX29mX3Rl
c3RfcGF0aChFWFBFQ1RFRF9JTUFHRV9GSUxFX0VORElORykKKworICAgIGRlZiBnZXRfYWN0dWFs
X2ltYWdlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVuYW1lX2VuZF9v
Zl90ZXN0X3BhdGgoQUNUVUFMX0lNQUdFX0ZJTEVfRU5ESU5HKQorCisgICAgZGVmIGdldF9leHBl
Y3RlZF90ZXh0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVuYW1lX2Vu
ZF9vZl90ZXN0X3BhdGgoRVhQRUNURURfVEVYVF9GSUxFX0VORElORykKKworICAgIGRlZiBnZXRf
YWN0dWFsX3RleHRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZW5hbWVf
ZW5kX29mX3Rlc3RfcGF0aChBQ1RVQUxfVEVYVF9GSUxFX0VORElORykKKworICAgIGRlZiBnZXRf
aW1hZ2VfZGlmZl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlbmFtZV9l
bmRfb2ZfdGVzdF9wYXRoKERJRkZfSU1BR0VfRklMRV9FTkRJTkcpCisKKyAgICBkZWYgZ2V0X3Rl
eHRfZGlmZl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlbmFtZV9lbmRf
b2ZfdGVzdF9wYXRoKERJRkZfVEVYVF9GSUxFX0VORElORykKKworICAgIGRlZiBnZXRfaW1hZ2Vf
dXBzdHJlYW1fZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZW5hbWVfZW5k
X29mX3Rlc3RfcGF0aChVUFNUUkVBTV9JTUFHRV9GSUxFX0VORElORykKKworICAgIGRlZiBfcmVu
YW1lX2VuZF9vZl90ZXN0X3BhdGgoc2VsZiwgc3VmZml4KToKKyAgICAgICAgbGFzdF9pbmRleCA9
IHNlbGYudGVzdF9wYXRoLnJmaW5kKCIuIikKKyAgICAgICAgaWYgbGFzdF9pbmRleCA9PSAtMToK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLnRlc3RfcGF0aAorICAgICAgICByZXR1cm4gc2VsZi50
ZXN0X3BhdGhbMDpsYXN0X2luZGV4XSArIHN1ZmZpeAorCisgICAgZGVmIGdldF90ZXN0X2hvbWUo
c2VsZik6CisgICAgICAgIGlmIHNlbGYudGVzdF9wYXRoLnN0YXJ0c3dpdGgoImNocm9tZSIpOgor
ICAgICAgICAgICAgcmV0dXJuIENIUk9NSVVNX1RSQUNfSE9NRSArIHNlbGYudGVzdF9wYXRoCisg
ICAgICAgIHJldHVybiBXRUJLSVRfVFJBQ19IT01FICsgc2VsZi50ZXN0X3BhdGgKKworICAgIGRl
ZiBnZXRfaW1hZ2VfYmFzZWxpbmVfdHJhY19ob21lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlz
X2ltYWdlX2Jhc2VsaW5lX2luX3dlYmtpdCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dl
dF90cmFjX2hvbWUoc2VsZi5pbWFnZV9iYXNlbGluZV91cmwpCisgICAgICAgIHJldHVybiBzZWxm
LmltYWdlX2Jhc2VsaW5lX3VybAorCisgICAgZGVmIGdldF90ZXh0X2Jhc2VsaW5lX3RyYWNfaG9t
ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXh0X2Jhc2VsaW5lX3VybCBhbmQgc2VsZi5pc190
ZXh0X2Jhc2VsaW5lX2luX3dlYmtpdCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF90
cmFjX2hvbWUoc2VsZi50ZXh0X2Jhc2VsaW5lX3VybCkKKyAgICAgICAgcmV0dXJuIHNlbGYudGV4
dF9iYXNlbGluZV91cmwKKworICAgIGRlZiBfZ2V0X3RyYWNfaG9tZShzZWxmLCBmaWxlKToKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9UUkFDX0hPTUUgKyBmaWxlW2ZpbGUuZmluZCgiTGF5b3V0VGVz
dHMiKTpdCisKKyAgICBkZWYgZ2V0X3RleHRfYmFzZWxpbmVfbG9jYXRpb24oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9nZXRfZmlsZV9sb2NhdGlvbihzZWxmLnRleHRfYmFzZWxpbmVfdXJs
KQorCisgICAgZGVmIGdldF9pbWFnZV9iYXNlbGluZV9sb2NhdGlvbihzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9maWxlX2xvY2F0aW9uKHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXJsKQor
CisgICAgIyBUT0RPKGd3aWxzb24pOiBSZWZhY3RvciB0aGlzIGxvZ2ljIHNvIGl0IGNhbiBiZSB1
c2VkIGJ5IG11bHRpcGxlIHNjcmlwdHMuCisgICAgIyBUT0RPKGd3aWxzb24pOiBDaGFuZ2UgdGhp
cyBzbyB0aGF0IGl0IHJlc3BlY3RzIHRoZSBmYWxsYmFjayBvcmRlciBvZgorICAgICMgZGlmZmVy
ZW50IHBsYXRmb3Jtcy4gKElmIHBsYXRmb3JtIGlzIG1hYywgdGhlIGZhbGxiYWNrIHNob3VsZCBi
ZQorICAgICMgZGlmZmVyZW50LikKKworICAgIGRlZiBfZ2V0X2ZpbGVfbG9jYXRpb24oc2VsZiwg
ZmlsZSk6CisgICAgICAgIGlmIG5vdCBmaWxlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgaWYgZmlsZS5maW5kKENIUk9NSVVNX1dJTikgPiAtMToKKyAgICAgICAgICAgIHJldHVy
biBDSFJPTUlVTV9XSU4KKyAgICAgICAgaWYgZmlsZS5maW5kKENIUk9NSVVNX01BQykgPiAtMToK
KyAgICAgICAgICAgIHJldHVybiBDSFJPTUlVTV9NQUMKKyAgICAgICAgaWYgZmlsZS5maW5kKENI
Uk9NSVVNX0xJTlVYKSA+IC0xOgorICAgICAgICAgICAgcmV0dXJuIENIUk9NSVVNX0xJTlVYCisg
ICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChXRUJLSVRfSU1BR0VfQkFTRUxJTkVfQkFTRV9VUkxf
V0lOKToKKyAgICAgICAgICAgIHJldHVybiBXRUJLSVRfV0lOX1RJVExFCisgICAgICAgIGlmIGZp
bGUuc3RhcnRzd2l0aChXRUJLSVRfSU1BR0VfQkFTRUxJTkVfQkFTRV9VUkxfTUFDKToKKyAgICAg
ICAgICAgIHJldHVybiBXRUJLSVRfTUFDX1RJVExFCisgICAgICAgICMgVE9ETyhnd2lsc29uKTog
QWRkIG1hYy1zbm93bGVvcGFyZCwgbWFjLWxlb3BhcmQsIG1hYy10aWdlciBoZXJlLgorICAgICAg
ICBpZiBmaWxlLnN0YXJ0c3dpdGgoV0VCS0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMKToKKyAgICAg
ICAgICAgIHJldHVybiBXRUJLSVRfVElUTEUKKyAgICAgICAgcmV0dXJuIFVOS05PV04KKworICAg
IGRlZiBfaXNfZmlsZV9pbl93ZWJraXQoc2VsZiwgZmlsZSk6CisgICAgICAgIHJldHVybiBmaWxl
ICE9IE5vbmUgYW5kIChmaWxlLmZpbmQoV0VCS0lUX1NWTl9IT1NUTkFNRSkgPiAtMSBvcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5maW5kKFRISVJEX1BBUlRZKSA+IC0x
KQorCisgICAgZGVmIGlzX2ltYWdlX2Jhc2VsaW5lX2luX2Nocm9taXVtKHNlbGYpOgorICAgICAg
ICByZXR1cm4gbm90IHNlbGYuaXNfaW1hZ2VfYmFzZWxpbmVfaW5fd2Via2l0KCkKKworICAgIGRl
ZiBpc19pbWFnZV9iYXNlbGluZV9pbl93ZWJraXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9pc19maWxlX2luX3dlYmtpdChzZWxmLmltYWdlX2Jhc2VsaW5lX3VybCkKKworICAgIGRlZiBp
c190ZXh0X2Jhc2VsaW5lX2luX2Nocm9taXVtKHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IHNl
bGYuaXNfdGV4dF9iYXNlbGluZV9pbl93ZWJraXQoKQorCisgICAgZGVmIGlzX3RleHRfYmFzZWxp
bmVfaW5fd2Via2l0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faXNfZmlsZV9pbl93ZWJr
aXQoc2VsZi50ZXh0X2Jhc2VsaW5lX3VybCkKKworICAgIGRlZiBnZXRfdGV4dF9yZXN1bHRfbG9j
YXRpb25faW5femlwX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZmlsZV9s
b2NhdGlvbl9pbl96aXBfZmlsZSgKKyAgICAgICAgICAgIHNlbGYuZ2V0X2FjdHVhbF90ZXh0X2Zp
bGVuYW1lKCkpCisKKyAgICBkZWYgZ2V0X2ltYWdlX3Jlc3VsdF9sb2NhdGlvbl9pbl96aXBfZmls
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9maWxlX2xvY2F0aW9uX2luX3ppcF9m
aWxlKAorICAgICAgICAgICAgc2VsZi5nZXRfYWN0dWFsX2ltYWdlX2ZpbGVuYW1lKCkpCisKKyAg
ICBkZWYgX2dldF9maWxlX2xvY2F0aW9uX2luX3ppcF9maWxlKHNlbGYsIGZpbGUpOgorICAgICAg
ICByZXR1cm4gIiVzLyVzIiAlIChMQVlPVVRfVEVTVF9SRVNVTFRTX0RJUiwgZmlsZSkKKworICAg
ICMgVE9ETyhnd2lsc29uKTogaW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIGRlZiBnZXRfYWxs
X2Jhc2VsaW5lX2xvY2F0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMg
VGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0ZXN0IGlzIGFjdHVhbGx5IGV4cGVj
dGVkIHRvIGZhaWwsCisgICAgIyBpbiBvcmRlciB0byBrbm93IHdoZXRoZXIgdG8gcmV0cmlldmUg
ZXhwZWN0ZWQgdGVzdCByZXN1bHRzIGZvciBpdC4KKyAgICAjICh0ZXN0IHJlc3VsdHMgZG9udCBl
eGlzdCBmb3IgdGVzdHMgZXhwZWN0ZWQgdG8gZmFpbC9jcmFzaC4pCisKKyAgICBkZWYgaXNfZXhw
ZWN0ZWRfdG9fZmFpbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfa2V5d29yZF9p
bl9leHBlY3RhdGlvbnMoRkFJTCkKKworICAgIGRlZiBpc19leHBlY3RlZF90b190aW1lb3V0KHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhU
SU1FT1VUKQorCisgICAgZGVmIGlzX2V4cGVjdGVkX3RvX2NyYXNoKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fZmluZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhDUkFTSCkKKworICAgIGRl
ZiBpc19leHBlY3RlZF90b19wYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9r
ZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhQQVNTKQorCisgICAgZGVmIGlzX3dvbnRfZml4KHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhXT05U
RklYKQorCisgICAgZGVmIF9maW5kX2tleXdvcmRfaW5fZXhwZWN0YXRpb25zKHNlbGYsIGtleXdv
cmQpOgorICAgICAgICBpZiAobm90IHNlbGYudGVzdF9leHBlY3RhdGlvbnNfbGluZSBvcgorICAg
ICAgICAgICAgbGVuKHNlbGYudGVzdF9leHBlY3RhdGlvbnNfbGluZSkgPT0gMCk6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19saW5l
LmZpbmQoa2V5d29yZCkgPiAtMToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJl
dHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXIucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRl
ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTYzMjQzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXIucHkKQEAgLTAsMCArMSw5MjIgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5h
bWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFRPRE8oZ3dpbHNvbik6IDEu
ICBDaGFuZ2UgdGV4dCBkaWZmZXJzIHRvIHVzZSBleHRlcm5hbCB1dGlscy4KKyMgICAgICAgICAg
ICAgICAgMi4gIENoYW5nZSB0ZXh0X2V4cGVjdGF0aW9ucyBwYXJzaW5nIHRvIGV4aXN0aW5nCisj
ICAgICAgICAgICAgICAgICAgICBsb2dpYyBpbiBsYXlvdXRfcGFnY2thZ2UudGVzdF9leHBlY3Rh
dGlvbnMuCisKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0
IHBhdGhfdXRpbHMKK2ltcG9ydCBwbGF0Zm9ybV91dGlscworaW1wb3J0IHJlCitpbXBvcnQgc2h1
dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHVybGxpYjIKK2ltcG9y
dCB6aXBmaWxlCisKK2Zyb20gZmFpbHVyZSBpbXBvcnQgRmFpbHVyZQorCitXRUJLSVRfVFJBQ19I
T1NUTkFNRSA9ICJ0cmFjLndlYmtpdC5vcmciCitXRUJLSVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwg
PSAoImh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5LyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAid2Via2l0L3RydW5rL0xheW91dFRlc3RzLyIpCitXRUJLSVRfUExBVEZP
Uk1fQkFTRUxJTkVfVVJMID0gKFdFQktJVF9MQVlPVVRfVEVTVF9CQVNFX1VSTCArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwbGF0Zm9ybS8lcy8iKQorCitCVUlMREJPVF9CQVNF
ID0gImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvIgorV0VCS0lUX0JVSUxERVJf
QkFTRSA9IEJVSUxEQk9UX0JBU0UgKyAid2F0ZXJmYWxsL2J1aWxkZXJzLyVzIgorRllJX0JVSUxE
RVJfQkFTRSA9IEJVSUxEQk9UX0JBU0UgKyAid2F0ZXJmYWxsLmZ5aS9idWlsZGVycy8lcyIKK1JF
U1VMVFNfVVJMX0JBU0UgPSAiL2J1aWxkcy8lcy9zdGVwcy93ZWJraXRfdGVzdHMvbG9ncy9zdGRp
byIKK0FSQ0hJVkVfVVJMX0JBU0UgPSAiL2J1aWxkcy8lcy9zdGVwcy9hcmNoaXZlX3dlYmtpdF90
ZXN0c19yZXN1bHRzL2xvZ3Mvc3RkaW8iCitaSVBfRklMRV9VUkxfQkFTRSA9IChCVUlMREJPVF9C
QVNFICsKKyAgICAgICAgICAgICAgICAgICAgICJsYXlvdXRfdGVzdF9yZXN1bHRzLyVzLyVzL2xh
eW91dC10ZXN0LXJlc3VsdHMuemlwIikKK0NIUk9NSVVNX1NSQ19IT01FID0gImh0dHA6Ly9zcmMu
Y2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvdHJ1bmsvc3JjL3dlYmtpdC8iCitMQVlPVVRfVEVT
VF9SRVBPX0JBU0VfVVJMID0gQ0hST01JVU1fU1JDX0hPTUUgKyAiZGF0YS9sYXlvdXRfdGVzdHMv
IgorCisjIFRPRE8oZ3dpbHNvbik6IFB1dCBmbGFreSB0ZXN0IGRhc2hib2FyZCBVUkwgaGVyZSB3
aGVuIHJlYWR5LgorRkxBS1lfVEVTVF9VUkwgPSAiIgorRkxBS1lfVEVTVF9SRUdFWCA9ICIlczwv
YT48L3RkPjx0ZCBhbGlnbj1yaWdodD4oXGQrKTwvdGQ+IgorCitURVNUX0VYUEVDVEFUSU9OU19V
UkwgPSAoQ0hST01JVU1fU1JDX0hPTUUgKworICAgICAgICAgICAgICAgICAgICAgICAgICJ0b29s
cy9sYXlvdXRfdGVzdHMvdGVzdF9leHBlY3RhdGlvbnMudHh0IikKKworIyBGYWlsdXJlIHR5cGVz
IGFzIGZvdW5kIGluIGJ1aWxkZXIgc3RkaW8uCitURVhUX0RJRkZfTUlTTUFUQ0ggPSAiVGV4dCBk
aWZmIG1pc21hdGNoIgorSU1BR0VfTUlTTUFUQ0ggPSAiSW1hZ2UgbWlzbWF0Y2giCitURVNUX1RJ
TUVEX09VVCA9ICJUZXN0IHRpbWVkIG91dCIKK1RFU1RfU0hFTExfQ1JBU0hFRCA9ICJUZXN0IHNo
ZWxsIGNyYXNoZWQiCisKK0NIUk9NSVVNX1dJTiA9ICJjaHJvbWl1bS13aW4iCitDSFJPTUlVTV9X
SU5fWFAgPSAiY2hyb21pdW0td2luLXhwIgorQ0hST01JVU1fV0lOX1ZJU1RBID0gImNocm9taXVt
LXdpbi12aXN0YSIKK0NIUk9NSVVNX1dJTl83ID0gImNocm9taXVtLXdpbi03IgorQ0hST01JVU1f
TUFDID0gImNocm9taXVtLW1hYyIKK0NIUk9NSVVNX0xJTlVYID0gImNocm9taXVtLWxpbnV4Igor
UExBVEZPUk0gPSAicGxhdGZvcm0iCitMQVlPVVRURVNUUyA9ICJMYXlvdXRUZXN0cyIKKworIyBU
aGVzZSBwbGF0Zm9ybSBkaXJzIG11c3QgYmUgaW4gb3JkZXIgb2YgdGhlaXIgcHJlY2VkZW5jZS4K
KyMgVE9ETyhnd2lsc29uKTogVGhpcyBpcyBub3QgdGhlIHNhbWUgZmFsbGJhY2sgb3JkZXIgYXMg
dGVzdF9zaGVsbC4gIFRoaXMgbGlzdAorIyBzaG91bGQgYmUgcmV2ZXJzZWQsIGFuZCB3ZSBuZWVk
IHRvIGFkZCBkZXRlY3Rpb24gZm9yIHRoZSB0eXBlIG9mIE9TIHRoYXQKKyMgdGhlIGdpdmVuIGJ1
aWxkZXIgaXMgcnVubmluZy4KK1dFQktJVF9NQUNfUExBVEZPUk1fRElSUyA9IFsibWFjLWxlb3Bh
cmQiLCAibWFjLXNub3dsZW9wYXJkIiwgIm1hYyJdCitXRUJLSVRfV0lOX1BMQVRGT1JNX0RJUlMg
PSBbIndpbiIsICJtYWMiXQorQ0hST01JVU1fTUFDX1BMQVRGT1JNX0RJUlMgPSBbQ0hST01JVU1f
TUFDXQorQ0hST01JVU1fV0lOX1BMQVRGT1JNX0RJUlMgPSBbQ0hST01JVU1fV0lOX1hQLCBDSFJP
TUlVTV9XSU5fVklTVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSFJPTUlVTV9X
SU5fNywgQ0hST01JVU1fV0lOXQorQ0hST01JVU1fTElOVVhfUExBVEZPUk1fRElSUyA9IFtDSFJP
TUlVTV9MSU5VWCwgQ0hST01JVU1fV0lOXQorCitBUkNISVZFX1VSTF9SRUdFWCA9ICJsYXN0Lipj
aGFuZ2U6IChcZCspIgorQlVJTERfTkFNRV9SRUdFWCA9ICJidWlsZCBuYW1lOiAoW15cc10qKSIK
K0NIUk9NSVVNX0ZJTEVfQUdFX1JFR0VYID0gJzxiciAvPlxzKk1vZGlmaWVkXHMqPGVtPi4qPC9l
bT4gXCgoLiopXCkgYnknCitUSFJFQURfTkFNRV9SRUdFWCA9ICJbXFNdKz8iCitURVNUX1BBVEhf
UkVHRVggPSAiW1xTXSs/IgorRkFJTEVEX1JFR0VYID0gKCJERUJVRyAiICsgVEhSRUFEX05BTUVf
UkVHRVggKyAiICIgKworICAgICAgICAgICAgICAgICIoIiArIFRFU1RfUEFUSF9SRUdFWCArICIp
IGZhaWxlZDpccyoiCisgICAgICAgICAgICAgICAgIigiICsgVEVYVF9ESUZGX01JU01BVENIICsg
Iik/XHMqIgorICAgICAgICAgICAgICAgICIoIiArIElNQUdFX01JU01BVENIICsgIik/XHMqIgor
ICAgICAgICAgICAgICAgICIoIiArIFRFU1RfVElNRURfT1VUICsgIik/XHMqIgorICAgICAgICAg
ICAgICAgICIoIiArIFRFU1RfU0hFTExfQ1JBU0hFRCArICIpPyIpCitGQUlMRURfVU5FWFBFQ1RF
RF9SRUdFWCA9ICIgIFteXHNdKyg/OiA9IC4qPyk/XG4iCitMQVNUX0JVSUxEX1JFR0VYID0gKCI8
aDI+UmVjZW50IEJ1aWxkczo8L2gyPiIKKyAgICAgICAgICAgICAgICAgICAgIltcc1xTXSo/PGEg
aHJlZj1cIi4uL2J1aWxkZXJzLy4qPy9idWlsZHMvKFxkKylcIj4iKQorIyBTb21ldGltZXMgdGhl
IGxpbmVzIG9mIGh5cGhlbnMgZ2V0cyBpbnRlcnJ1cHRlZCB3aXRoIG11bHRpcGxlIHByb2Nlc3Nl
cworIyBvdXRwdXR0aW5nIHRvIHN0ZGlvLCBzbyBkb24ndCByZWx5IG9uIHRoZW0gYmVpbmcgY29u
dGlndW91cy4KK1NVTU1BUllfUkVHRVggPSAoIlxkKyB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQsICIK
KyAgICAgICAgICAgICAgICAgIlxkKyBkaWRuJ3Q6KC4qPyktezc4fSIpICAjIC17Nzh9IC0tPiA3
OCBkYXNoZXMgaW4gYSByb3cuCitTVU1NQVJZX1JFR1JFU1NJT05TID0gIlJlZ3Jlc3Npb25zOi4q
P1xuKCg/OiAgW15cc10rKD86ID0gLio/KT9cbikrKSIKK1RFU1RfRVhQRUNUQVRJT05TX1BMQVRG
T1JNX1JFR0VYID0gIigoV09OVEZJWCB8QlVHLiogKSsuKiAlcy4qIDogJXMgPSBbXlxuXSopIgor
VEVTVF9FWFBFQ1RBVElPTlNfTk9fUExBVEZPUk1fUkVHRVggPSAoIigoV09OVEZJWCB8QlVHLiog
KSsuKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoPyFXSU4pKD8h
TElOVVgpKD8hTUFDKS4qIDoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICVzID0gW15cbl0qKSIpCisKK1dFQktJVF9GSUxFX0FHRV9SRUdFWCA9ICgnPGEgY2xhc3M9
ImZpbGUiIHRpdGxlPSJWaWV3IEZpbGUiIGhyZWY9IiVzIj4uKj88L2E+LicKKyAgICcqPzx0ZCBj
bGFzcz0iYWdlIiAuKj8+XHMqJworICAgJzxhIGNsYXNzPSJ0aW1lbGluZSIgaHJlZj0iLio/IiB0
aXRsZT0iLio/Ij4oLio/KTwvYT4nKQorCitMT0NBTF9CQVNFTElORV9SRUdFWEVTID0gWworICAi
LiovdGhpcmRfcGFydHkvV2Via2l0L0xheW91dFRlc3RzL3BsYXRmb3JtLy4qPygvLiopIiwKKyAg
Ii4qL3RoaXJkX3BhcnR5L1dlYmtpdC9MYXlvdXRUZXN0cygvLiopIiwKKyAgIi4qL3dlYmtpdC9k
YXRhL2xheW91dF90ZXN0cy9wbGF0Zm9ybS8uKj8vTGF5b3V0VGVzdHMoLy4qKSIsCisgICIuKi93
ZWJraXQvZGF0YS9sYXlvdXRfdGVzdHMvcGxhdGZvcm0vLio/KC8uKikiLAorICAiLiovd2Via2l0
L2RhdGEvbGF5b3V0X3Rlc3RzKC8uKikiLAorICAiKC8uKikiXQorCitVUFNUUkVBTV9JTUFHRV9G
SUxFX0VORElORyA9ICItdXBzdHJlYW0ucG5nIgorCitURVNUX0VYUEVDVEFUSU9OU19XT05URklY
ID0gIldPTlRGSVgiCisKK1RFTVBfWklQX0RJUiA9ICJ0ZW1wLXppcC1kaXIiCisKK1RBUkdFVFMg
PSBbIlJlbGVhc2UiLCAiRGVidWciXQorCisKK2RlZiBnZXRfdXJsX2Jhc2UodXNlX2Z5aSk6Cisg
ICAgaWYgdXNlX2Z5aToKKyAgICAgICAgcmV0dXJuIEZZSV9CVUlMREVSX0JBU0UKKyAgICByZXR1
cm4gV0VCS0lUX0JVSUxERVJfQkFTRQorCisKK2RlZiBnZXRfcmVzdWx0c191cmwoYnVpbGQsIHBs
YXRmb3JtLCB1c2VfZnlpPUZhbHNlKToKKyAgICByZXR1cm4gKGdldF91cmxfYmFzZSh1c2VfZnlp
KSArIFJFU1VMVFNfVVJMX0JBU0UpICUgKHBsYXRmb3JtLCBidWlsZCkKKworCitkZWYgZ2V0X2Fy
Y2hpdmVfdXJsKGJ1aWxkLCBwbGF0Zm9ybSwgdXNlX2Z5aT1GYWxzZSk6CisgICAgcmV0dXJuIChn
ZXRfdXJsX2Jhc2UodXNlX2Z5aSkgKyBBUkNISVZFX1VSTF9CQVNFKSAlIChwbGF0Zm9ybSwgYnVp
bGQpCisKKworZGVmIGdldF96aXBfZmlsZV91cmwoYnVpbGQsIHBsYXRmb3JtKToKKyAgICByZXR1
cm4gWklQX0ZJTEVfVVJMX0JBU0UgJSAocGxhdGZvcm0sIGJ1aWxkKQorCisKK2RlZiBnZXRfYnVp
bGRlcl91cmwocGxhdGZvcm0sIHVzZV9meWk9RmFsc2UpOgorICAgIHJldHVybiBnZXRfdXJsX2Jh
c2UodXNlX2Z5aSkgJSBwbGF0Zm9ybQorCisKKyMgVE9ETyhnd2lsc29uKTogT25jZSB0aGUgbmV3
IGZsYWtpbmVzcyBkYXNoYm9hcmQgaXMgZG9uZSwgY29ubmVjdCBpdCBoZXJlLgorZGVmIGdldF9m
bGFreV90ZXN0X3VybChwbGF0Zm9ybSk6CisgICAgcmV0dXJuICIiCisKKworIyBUT0RPKGd3aWxz
b24pOiBjYW4gd2UgcmVmYWN0b3IgdGhlc2UgaW50byB0aGUgcmVzb3VyY2VnYXRoZXJlcj8KK2Rl
ZiBpc19saW51eF9wbGF0Zm9ybShwbGF0Zm9ybSk6CisgICAgcmV0dXJuIChwbGF0Zm9ybSBhbmQg
cGxhdGZvcm0uZmluZCgiTGludXgiKSA+IC0xKQorCisKK2RlZiBpc19tYWNfcGxhdGZvcm0ocGxh
dGZvcm0pOgorICAgIHJldHVybiAocGxhdGZvcm0gYW5kIHBsYXRmb3JtLmZpbmQoIk1hYyIpID4g
LTEpCisKKworZGVmIGNyZWF0ZV9kaXJlY3RvcnkoZGlyKToKKyAgICAiIiIKKyAgICBNZXRob2Qg
dGhhdCBjcmVhdGVzIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGdpdmVuLgorICAgIFRoaXMgd2ls
bCBjcmVhdGUgZGlyZWN0b3JpZXMgcmVjdXJzaXZlbHkgdW50aWwgdGhlIGdpdmVuIGRpciBleGlz
dHMuCisgICAgIiIiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgIG9z
Lm1ha2VkaXJzKGRpciwgMDc3NykKKworCitkZWYgZXh0cmFjdF9maXJzdF92YWx1ZShzdHJpbmcs
IHJlZ2V4KToKKyAgICBtID0gcmUuc2VhcmNoKHJlZ2V4LCBzdHJpbmcpCisgICAgaWYgbSBhbmQg
bS5ncm91cCgxKToKKyAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKKyAgICByZXR1cm4gTm9uZQor
CisKK2RlZiBleHRyYWN0X3NpbmdsZV9yZWdleF9hdF91cmwodXJsLCByZWdleCk6CisgICAgY29u
dGVudCA9IHNjcmFwZV91cmwodXJsKQorICAgIG0gPSByZS5zZWFyY2gocmVnZXgsIGNvbnRlbnQs
IHJlLkRPVEFMTCkKKyAgICBpZiBtIGFuZCBtLmdyb3VwKDEpOgorICAgICAgICByZXR1cm4gbS5n
cm91cCgxKQorICAgIHJldHVybiBOb25lCisKKworZGVmIHNjcmFwZV91cmwodXJsKToKKyAgICBy
ZXR1cm4gdXJsbGliMi51cmxvcGVuKHVybGxpYjIuUmVxdWVzdCh1cmwpKS5yZWFkKCkKKworCitk
ZWYgZ2V0X2ltYWdlX2RpZmZfZXhlY3V0YWJsZSgpOgorICAgIGZvciB0YXJnZXQgaW4gVEFSR0VU
UzoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMuaW1hZ2VfZGlm
Zl9wYXRoKHRhcmdldCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICAjIFRoaXMgYnVpbGQgdGFyZ2V0IGRpZCBub3QgZXhpc3Qs
IHRyeSB0aGUgbmV4dCBvbmUuCisgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBpbWFnZSBkaWZmIGV4
ZWN1dGFibGUgY291bGQgYmUgZm91bmQuICBZb3UgbWF5IG5lZWQgIgorICAgICAgICAgICAgICAg
ICAgICAidG8gYnVpbGQgdGhlIGltYWdlIGRpZmYgcHJvamVjdCB1bmRlciBhdCBsZWFzdCBvbmUg
YnVpbGQgIgorICAgICAgICAgICAgICAgICAgICAidGFyZ2V0IHRvIGNyZWF0ZSBpbWFnZSBkaWZm
cy4iKQorCisKK2RlZiBnZW5lcmF0ZV9wbmdfZGlmZihmaWxlMSwgZmlsZTIsIG91dHB1dF9maWxl
KToKKyAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBGYWxzZQorICAgIHRyeToKKyAgICAgICAgZXhl
Y3V0YWJsZSA9IGdldF9pbWFnZV9kaWZmX2V4ZWN1dGFibGUoKQorICAgICAgICBjbWQgPSBbZXhl
Y3V0YWJsZSwgJy0tZGlmZicsIGZpbGUxLCBmaWxlMiwgb3V0cHV0X2ZpbGVdCisgICAgICAgIF9j
b21wYXJlX2F2YWlsYWJsZSA9IFRydWUKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAg
ICBwcmludCAiTm8gY29tbWFuZCBsaW5lIHRvIGNvbXBhcmUgJXMgYW5kICVzIDogJXMiICUgKGZp
bGUxLCBmaWxlMiwgZSkKKworICAgIHJlc3VsdCA9IDEKKyAgICBpZiBfY29tcGFyZV9hdmFpbGFi
bGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChj
bWQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9
PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAg
ICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwcmludCAiTm8g
cG9zc2libGUgY29tcGFyaXNvbiBiZXR3ZWVuICVzIGFuZCAlcy4iICUgKAorICAgICAgICAgICAg
ICAgICAgICBmaWxlMSwgZmlsZTIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJhaXNlIGUKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBwcmludCAiVGhlIGdpdmVuIFBO
RyBpbWFnZXMgd2VyZSB0aGUgc2FtZSEiCisgICAgcmV0dXJuIF9jb21wYXJlX2F2YWlsYWJsZQor
CisKKyMgVE9ETyhnd2lsc29uKTogQ2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBwcmV0dHkgcHJpbnQg
ZGlmZmVycy4KK2RlZiBnZW5lcmF0ZV90ZXh0X2RpZmYoZmlsZTEsIGZpbGUyLCBvdXRwdXRfZmls
ZSk6CisgICAgIyBPcGVuIHVwIGV4cGVjdGVkIGFuZCBhY3R1YWwgdGV4dCBmaWxlcyBhbmQgdXNl
IGRpZmZsaWIgdG8gY29tcGFyZSB0aGVtLgorICAgIGRhdGFBID0gb3BlbihmaWxlMSwgJ3InKS5y
ZWFkKCkKKyAgICBkYXRhQiA9IG9wZW4oZmlsZTIsICdyJykucmVhZCgpCisgICAgZCA9IGRpZmZs
aWIuRGlmZmVyKCkKKyAgICBkaWZmcyA9IGxpc3QoZC5jb21wYXJlKGRhdGFBLnNwbGl0KCJcbiIp
LCBkYXRhQi5zcGxpdCgiXG4iKSkpCisgICAgb3V0cHV0ID0gb3BlbihvdXRwdXRfZmlsZSwgJ3cn
KQorICAgIG91dHB1dC53cml0ZSgiXG4iLmpvaW4oZGlmZnMpKQorICAgIG91dHB1dC5jbG9zZSgp
CisKKworY2xhc3MgQmFzZWxpbmVDYW5kaWRhdGUob2JqZWN0KToKKyAgICAiIiJTaW1wbGUgZGF0
YSBvYmplY3QgZm9yIGhvbGRpbmcgdGhlIFVSTCBhbmQgbG9jYWwgZmlsZSBwYXRoIG9mIGEKKyAg
ICBwb3NzaWJsZSBiYXNlbGluZS4gIFRoZSBsb2NhbCBmaWxlIHBhdGggaXMgbWVhbnQgdG8gcmVm
ZXIgdG8gdGhlIGxvY2FsbHktCisgICAgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGZpbGUgYXQgdGhl
IFVSTC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbCwgdXJsKToKKyAgICAgICAg
c2VsZi5sb2NhbF9maWxlID0gbG9jYWwKKyAgICAgICAgc2VsZi5iYXNlbGluZV91cmwgPSB1cmwK
KworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9jYWxfZmls
ZSAhPSBOb25lIGFuZCBzZWxmLmJhc2VsaW5lX3VybCAhPSBOb25lCisKKworY2xhc3MgRmFpbHVy
ZUZpbmRlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAg
ICAgIGJ1aWxkLAorICAgICAgICAgICAgICAgICBidWlsZGVyX25hbWUsCisgICAgICAgICAgICAg
ICAgIGV4Y2x1ZGVfa25vd25fZmFpbHVyZXMsCisgICAgICAgICAgICAgICAgIHRlc3RfcmVnZXgs
CisgICAgICAgICAgICAgICAgIG91dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgIG1heF9mYWls
dXJlcywKKyAgICAgICAgICAgICAgICAgdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgYnVpbGRl
cl9vdXRwdXRfbG9nX2ZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYXJjaGl2ZV9zdGVwX2xv
Z19maWxlPU5vbmUsCisgICAgICAgICAgICAgICAgIHppcF9maWxlPU5vbmUsCisgICAgICAgICAg
ICAgICAgIHRlc3RfZXhwZWN0YXRpb25zX2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYuYnVpbGQg
PSBidWlsZAorICAgICAgICAjIFRPRE8oZ3dpbHNvbik6IGFkZCBmdWxsIHVybC1lbmNvZGluZyBm
b3IgdGhlIHBsYXRmb3JtLgorICAgICAgICBzZWxmLnNldF9wbGF0Zm9ybShidWlsZGVyX25hbWUp
CisgICAgICAgIHNlbGYuZXhjbHVkZV9rbm93bl9mYWlsdXJlcyA9IGV4Y2x1ZGVfa25vd25fZmFp
bHVyZXMKKyAgICAgICAgc2VsZi5leGNsdWRlX3dvbnRmaXggPSBUcnVlCisgICAgICAgIHNlbGYu
dGVzdF9yZWdleCA9IHRlc3RfcmVnZXgKKyAgICAgICAgc2VsZi5vdXRwdXRfZGlyID0gb3V0cHV0
X2RpcgorICAgICAgICBzZWxmLm1heF9mYWlsdXJlcyA9IG1heF9mYWlsdXJlcworICAgICAgICBz
ZWxmLnZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgIHNlbGYuZnlpX2J1aWxkZXIgPSBGYWxzZQor
ICAgICAgICBzZWxmLl9mbGFreV90ZXN0X2NhY2hlID0ge30KKyAgICAgICAgc2VsZi5fdGVzdF9l
eHBlY3RhdGlvbnNfY2FjaGUgPSBOb25lCisgICAgICAgICMgSWYgdHJ1ZSwgc2NyYXBpbmcgd2ls
bCBzdGlsbCBoYXBwZW4gYnV0IG5vIGZpbGVzIHdpbGwgYmUgZG93bmxvYWRlZC4KKyAgICAgICAg
c2VsZi5kb250X2Rvd25sb2FkID0gRmFsc2UKKyAgICAgICAgIyBMb2NhbCBjYWNoZXMgb2YgbG9n
IGZpbGVzLiAgSWYgc2V0LCB0aGUgZmluZGVyIHdpbGwgdXNlIHRoZXNlIGZpbGVzCisgICAgICAg
ICMgcmF0aGVyIHRoYW4gc2NyYXBpbmcgdGhlbSBmcm9tIHRoZSBidWlsZGJvdC4KKyAgICAgICAg
c2VsZi5idWlsZGVyX291dHB1dF9sb2dfZmlsZSA9IGJ1aWxkZXJfb3V0cHV0X2xvZ19maWxlCisg
ICAgICAgIHNlbGYuYXJjaGl2ZV9zdGVwX2xvZ19maWxlID0gYXJjaGl2ZV9zdGVwX2xvZ19maWxl
CisgICAgICAgIHNlbGYuemlwX2ZpbGUgPSB6aXBfZmlsZQorICAgICAgICBzZWxmLnRlc3RfZXhw
ZWN0YXRpb25zX2ZpbGUgPSB0ZXN0X2V4cGVjdGF0aW9uc19maWxlCisgICAgICAgIHNlbGYuZGVs
ZXRlX3ppcF9maWxlID0gVHJ1ZQorICAgICAgICAjIERldGVybWluZXMgaWYgdGhlIHNjcmlwdCBz
aG91bGQgc2NyYXBlIHRoZSBiYXNlbGluZXMgZnJvbSB3ZWJraXQub3JnCisgICAgICAgICMgYW5k
IGNocm9taXVtLm9yZywgb3IgaWYgaXQgc2hvdWxkIHVzZSBsb2NhbCBiYXNlbGluZXMgaW4gdGhl
IGN1cnJlbnQKKyAgICAgICAgIyBjaGVja291dC4KKyAgICAgICAgc2VsZi51c2VfbG9jYWxfYmFz
ZWxpbmVzID0gRmFsc2UKKworICAgIGRlZiBzZXRfcGxhdGZvcm0oc2VsZiwgcGxhdGZvcm0pOgor
ICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgiICIsICIlMjAiKQorCisg
ICAgIyBUT0RPKGd3aWxzb24pOiBDaGFuZ2UgdGhpcyB0byBnZXQgdGhlIGxhc3QgYnVpbGQgdGhh
dCBmaW5pc2hlZAorICAgICMgc3VjY2Vzc2Z1bGx5LgorCisgICAgZGVmIGdldF9sYXN0X2J1aWxk
KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgbGFzdCBidWlsZCBudW1i
ZXIgZm9yIHRoaXMgcGxhdGZvcm0uCisgICAgICAgIElmIHVzZV9meWkgaXMgdHJ1ZSwgdGhpcyBv
bmx5IGxvb2tzIGF0IHRoZSBmeWkgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHJldHVybiBleHRyYWN0X3NpbmdsZV9yZWdleF9hdF91cmwoZ2V0X2J1aWxk
ZXJfdXJsKHNlbGYucGxhdGZvcm0sCisgICAgICAgICAgICAgICAgc2VsZi5meWlfYnVpbGRlciks
IExBU1RfQlVJTERfUkVHRVgpCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvcjoKKyAg
ICAgICAgICAgIGlmIG5vdCBzZWxmLmZ5aV9idWlsZGVyOgorICAgICAgICAgICAgICAgIHNlbGYu
ZnlpX2J1aWxkZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2xhc3Rf
YnVpbGQoKQorCisgICAgZGVmIGdldF9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNl
bGYuYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkID0gc2VsZi5nZXRfbGFzdF9idWlsZCgp
CisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJVc2luZyBidWls
ZCBudW1iZXIgJXMiICUgc2VsZi5idWlsZAorCisgICAgICAgIGlmIHNlbGYudXNlX2xvY2FsX2Jh
c2VsaW5lczoKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkX2Jhc2VsaW5lX2luZGV4ZXMoKQorICAg
ICAgICBzZWxmLmZhaWx1cmVzID0gc2VsZi5fZ2V0X2ZhaWx1cmVzX2Zyb21fYnVpbGRlcigpCisg
ICAgICAgIGlmIChzZWxmLmZhaWx1cmVzIGFuZAorICAgICAgICAgICAgKHNlbGYuX2Rvd25sb2Fk
X3Jlc3VsdF9yZXNvdXJjZXMoKSBvciBzZWxmLmRvbnRfZG93bmxvYWQpKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLmZhaWx1cmVzCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2dl
dF9mYWlsdXJlc19mcm9tX2J1aWxkZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1
cm5zIGEgbGlzdCBvZiBmYWlsdXJlcyBmb3IgdGhlIGdpdmVuIGJ1aWxkIGFuZCBwbGF0Zm9ybSBi
eSBzY3JhcGluZworICAgICAgICB0aGUgYnVpbGRib3RzIGFuZCBwYXJzaW5nIHRoZWlyIHJlc3Vs
dHMuCisgICAgICAgIFRoZSBsaXN0IHJldHVybmVkIGNvbnRhaW5zIEZhaWx1cmUgY2xhc3Mgb2Jq
ZWN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAg
IHByaW50ICJGZXRjaGluZyBmYWlsdXJlcyBmcm9tIGJ1aWxkYm90Li4uIgorCisgICAgICAgIGNv
bnRlbnQgPSBzZWxmLl9zY3JhcGVfYnVpbGRlcl9vdXRwdXQoKQorICAgICAgICBpZiBub3QgY29u
dGVudDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIG1hdGNoZXMgPSBzZWxmLl9m
aW5kX21hdGNoZXNfaW5fYnVpbGRlcl9vdXRwdXQoY29udGVudCkKKworICAgICAgICBpZiBzZWxm
LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiJXMgZmFpbHVyZXMgZm91bmQuIiAlIGxlbiht
YXRjaGVzKQorCisgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgbWF0Y2hlcy5zb3J0KCkK
KyAgICAgICAgZm9yIG1hdGNoIGluIG1hdGNoZXM6CisgICAgICAgICAgICBpZiAobGVuKGZhaWx1
cmVzKSA8IHNlbGYubWF4X2ZhaWx1cmVzIGFuZAorICAgICAgICAgICAgICAgIChub3Qgc2VsZi50
ZXN0X3JlZ2V4IG9yIG1hdGNoWzBdLmZpbmQoc2VsZi50ZXN0X3JlZ2V4KSA+IC0xKSk6CisgICAg
ICAgICAgICAgICAgZmFpbHVyZSA9IHNlbGYuX2NyZWF0ZV9mYWlsdXJlX2Zyb21fbWF0Y2gobWF0
Y2gpCisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAg
ICBwcmludCBmYWlsdXJlLnRlc3RfcGF0aAorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZChmYWlsdXJlKQorCisgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgZGVmIF9zY3JhcGVf
YnVpbGRlcl9vdXRwdXQoc2VsZik6CisgICAgICAgICMgSWYgdGhlIGJ1aWxkIGxvZyBmaWxlIGlz
IHNwZWNpZmllZCwgdXNlIHRoYXQgaW5zdGVhZCBvZiBzY3JhcGluZy4KKyAgICAgICAgaWYgc2Vs
Zi5idWlsZGVyX291dHB1dF9sb2dfZmlsZToKKyAgICAgICAgICAgIGxvZyA9IG9wZW4oc2VsZi5i
dWlsZGVyX291dHB1dF9sb2dfZmlsZSwgJ3InKQorICAgICAgICAgICAgcmV0dXJuICIiLmpvaW4o
bG9nLnJlYWRsaW5lcygpKQorCisgICAgICAgICMgU2NyYXBlIHRoZSBmYWlsdXJlcyBmcm9tIHRo
ZSBidWlsZGJvdCBmb3IgdGhpcyByZXZpc2lvbi4KKyAgICAgICAgdHJ5OgorCisgICAgICAgICAg
ICByZXR1cm4gc2NyYXBlX3VybChnZXRfcmVzdWx0c191cmwoc2VsZi5idWlsZCwgc2VsZi5wbGF0
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LmZ5aV9idWlsZGVyKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBJZiB3ZSBoaXQg
YSBwcm9ibGVtLCBhbmQgd2UncmUgbm90IG9uIHRoZSBGWUkgYnVpbGRlciwgdHJ5IGl0CisgICAg
ICAgICAgICAjIGFnYWluIG9uIHRoZSBGWUkgYnVpbGRlci4KKyAgICAgICAgICAgIGlmIG5vdCBz
ZWxmLmZ5aV9idWlsZGVyOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnQgKCJDb3VsZCBub3QgZmluZCBidWlsZGVyIG9uIHdhdGVyZmFs
bCwgdHJ5aW5nIGZ5aSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXRlcmZhbGwuLi4i
KQorICAgICAgICAgICAgICAgIHNlbGYuZnlpX2J1aWxkZXIgPSBUcnVlCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3NjcmFwZV9idWlsZGVyX291dHB1dCgpCisgICAgICAgICAgICBwcmlu
dCAiSSBjb3VsZCBub3QgZmluZCB0aGF0IGJ1aWxkZXIsIG9yIGJ1aWxkIGRpZCBub3QgY29tcGls
ZS4iCisgICAgICAgICAgICBwcmludCAiQ2hlY2sgdGhhdCB0aGUgYnVpbGRlciBuYW1lIG1hdGNo
ZXMgZXhhY3RseSAiCisgICAgICAgICAgICBwcmludCAiKGNhc2Ugc2Vuc2l0aXZlKSwgYW5kIHdy
YXAgcXVvdGVzIGFyb3VuZCBidWlsZGVyIG5hbWVzICIKKyAgICAgICAgICAgIHByaW50ICJ0aGF0
IGhhdmUgc3BhY2VzLiIKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIFRPRE8oZ3dp
bHNvbik6IFRoZSB0eXBlIG9mIGZhaWx1cmUgaXMgbm93IG91dHB1dCBpbiB0aGUgc3VtbWFyeSwg
c28gbm8KKyAgICAjIG1hdGNoaW5nIGJldHdlZW4gdGhlIHN1bW1hcnkgYW5kIHRoZSBlYXJsaWVy
IG91dHB1dCBpcyBuZWNlc3NhcnkuCisgICAgIyBDaGFuZ2UgdGhpcyBtZXRob2QgYW5kIG90aGVy
cyB0byBkZXJpdmUgZmFpbHVyZSB0eXBlcyBmcm9tIHN1bW1hcnkgb25seS4KKworICAgIGRlZiBf
ZmluZF9tYXRjaGVzX2luX2J1aWxkZXJfb3V0cHV0KHNlbGYsIG91dHB1dCk6CisgICAgICAgIG1h
dGNoZXMgPSBbXQorICAgICAgICBtYXRjaGVzID0gcmUuZmluZGFsbChGQUlMRURfUkVHRVgsIG91
dHB1dCwgcmUuTVVMVElMSU5FKQorICAgICAgICBpZiBzZWxmLmV4Y2x1ZGVfa25vd25fZmFpbHVy
ZXM6CisgICAgICAgICAgICBzdW1tYXJ5ID0gcmUuc2VhcmNoKFNVTU1BUllfUkVHRVgsIG91dHB1
dCwgcmUuRE9UQUxMKQorICAgICAgICAgICAgcmVncmVzc2lvbnMgPSBbXQorICAgICAgICAgICAg
aWYgc3VtbWFyeToKKyAgICAgICAgICAgICAgICByZWdyZXNzaW9ucyA9IHNlbGYuX2ZpbmRfcmVn
cmVzc2lvbnNfaW5fc3VtbWFyeSgKKyAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5ncm91cCgx
KSkKKyAgICAgICAgICAgIG1hdGNoZXMgPSBzZWxmLl9tYXRjaF9yZWdyZXNzaW9uc190b19mYWls
dXJlcyhyZWdyZXNzaW9ucywgbWF0Y2hlcykKKyAgICAgICAgcmV0dXJuIG1hdGNoZXMKKworICAg
IGRlZiBfY3JlYXRlX2ZhaWx1cmVfZnJvbV9tYXRjaChzZWxmLCBtYXRjaCk6CisgICAgICAgIGZh
aWx1cmUgPSBGYWlsdXJlKCkKKyAgICAgICAgZmFpbHVyZS50ZXh0X2RpZmZfbWlzbWF0Y2ggPSBt
YXRjaFsxXSAhPSAnJworICAgICAgICBmYWlsdXJlLmltYWdlX21pc21hdGNoID0gbWF0Y2hbMl0g
IT0gJycKKyAgICAgICAgZmFpbHVyZS5jcmFzaGVkID0gbWF0Y2hbNF0gIT0gJycKKyAgICAgICAg
ZmFpbHVyZS50aW1lb3V0ID0gbWF0Y2hbM10gIT0gJycKKyAgICAgICAgZmFpbHVyZS50ZXN0X3Bh
dGggPSBtYXRjaFswXQorICAgICAgICBmYWlsdXJlLnBsYXRmb3JtID0gc2VsZi5wbGF0Zm9ybQor
ICAgICAgICByZXR1cm4gZmFpbHVyZQorCisgICAgZGVmIF9maW5kX3JlZ3Jlc3Npb25zX2luX3N1
bW1hcnkoc2VsZiwgc3VtbWFyeSk6CisgICAgICAgIHJlZ3Jlc3Npb25zID0gW10KKyAgICAgICAg
aWYgbm90IHN1bW1hcnkgb3Igbm90IGxlbihzdW1tYXJ5KToKKyAgICAgICAgICAgIHJldHVybiBy
ZWdyZXNzaW9ucworICAgICAgICBtYXRjaGVzID0gcmUuZmluZGFsbChTVU1NQVJZX1JFR1JFU1NJ
T05TLCBzdW1tYXJ5LCByZS5ET1RBTEwpCisgICAgICAgIGZvciBtYXRjaCBpbiBtYXRjaGVzOgor
ICAgICAgICAgICAgbGluZXMgPSByZS5maW5kYWxsKEZBSUxFRF9VTkVYUEVDVEVEX1JFR0VYLCBt
YXRjaCwgcmUuRE9UQUxMKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAg
ICAgICAgICAgY2xpcHBlZCA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGNsaXBw
ZWQuZmluZCgiPSIpID4gLTE6CisgICAgICAgICAgICAgICAgICAgIGNsaXBwZWQgPSBjbGlwcGVk
WzpjbGlwcGVkLmZpbmQoIj0iKSAtIDFdCisgICAgICAgICAgICAgICAgcmVncmVzc2lvbnMuYXBw
ZW5kKGNsaXBwZWQpCisgICAgICAgIHJldHVybiByZWdyZXNzaW9ucworCisgICAgZGVmIF9tYXRj
aF9yZWdyZXNzaW9uc190b19mYWlsdXJlcyhzZWxmLCByZWdyZXNzaW9ucywgZmFpbHVyZXMpOgor
ICAgICAgICBtYXRjaGVzID0gW10KKyAgICAgICAgZm9yIHJlZ3Jlc3Npb24gaW4gcmVncmVzc2lv
bnM6CisgICAgICAgICAgICBmb3IgZmFpbHVyZSBpbiBmYWlsdXJlczoKKyAgICAgICAgICAgICAg
ICBpZiBmYWlsdXJlWzBdLmZpbmQocmVncmVzc2lvbikgPiAtMToKKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlcy5hcHBlbmQoZmFpbHVyZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgcmV0dXJuIG1hdGNoZXMKKworICAgICMgVE9ETyhnd2lsc29uKTogYWRkIHN1cHBvcnQg
Zm9yIG11bHRpcGxlIGNvbmZsaWN0aW5nIGJ1aWxkIG51bWJlcnMgYnkKKyAgICAjIHJlbmFtaW5n
IHRoZSB6aXAgZmlsZSBhbmQgbmFtaW5nIHRoZSBkaXJlY3RvcnkgYXBwcm9wcmlhdGVseS4KKwor
ICAgIGRlZiBfZG93bmxvYWRfcmVzdWx0X3Jlc291cmNlcyhzZWxmKToKKyAgICAgICAgIiIiCisg
ICAgICAgIEZpbmRzIGFuZCBkb3dubG9hZHMvZXh0cmFjdHMgYWxsIG9mIHRoZSB0ZXN0IHJlc3Vs
dHMgKHBpeGVsL3RleHQKKyAgICAgICAgb3V0cHV0KSBmb3IgYWxsIG9mIHRoZSBnaXZlbiBmYWls
dXJlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdGFyZ2V0X3ppcCA9ICIlcy9sYXlvdXQtdGVz
dC1yZXN1bHRzLSVzLnppcCIgJSAoc2VsZi5vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkKQorICAgICAg
ICBpZiBzZWxmLnppcF9maWxlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLnppcF9maWxl
CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV96aXBfZmlsZSA9IEZhbHNlCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXZpc2lvbiwgYnVpbGRfbmFtZSA9IFwKKyAgICAgICAgICAgICAgICBz
ZWxmLl9nZXRfcmV2aXNpb25fYW5kX2J1aWxkX2Zyb21fYXJjaGl2ZV9zdGVwKCkKKyAgICAgICAg
ICAgIHppcF91cmwgPSBnZXRfemlwX2ZpbGVfdXJsKHJldmlzaW9uLCBidWlsZF9uYW1lKQorICAg
ICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJEb3dubG9h
ZGluZyB6aXAgZmlsZSBmcm9tICVzIHRvICVzIiAlICh6aXBfdXJsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfemlw
KQorICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLl9kb3dubG9hZF9maWxlKHppcF91cmwsIHRh
cmdldF96aXAsICJiIikKKyAgICAgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKKyAgICAgICAgICAg
ICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICgiQ291bGQg
bm90IGRvd25sb2FkIHppcCBmaWxlIGZyb20gJXMuICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJEb2VzIGl0IGV4aXN0PyIgJSB6aXBfdXJsKQorICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgICAgIGlmIHppcGZpbGUuaXNfemlwZmlsZShmaWxlbmFtZSk6CisgICAgICAg
ICAgICB6aXAgPSB6aXBmaWxlLlppcEZpbGUoZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBzZWxm
LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0V4dHJhY3RpbmcgZmlsZXMuLi4nCisg
ICAgICAgICAgICBkaXJlY3RvcnkgPSAiJXMvbGF5b3V0LXRlc3QtcmVzdWx0cy0lcyIgJSAoc2Vs
Zi5vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuYnVpbGQpCisgICAgICAgICAgICBjcmVhdGVfZGlyZWN0b3J5KGRp
cmVjdG9yeSkKKyAgICAgICAgICAgIHNlbGYuX3VuemlwX3ppcGZpbGUoemlwLCBURU1QX1pJUF9E
SVIpCisKKyAgICAgICAgICAgIGZvciBmYWlsdXJlIGluIHNlbGYuZmFpbHVyZXM6CisgICAgICAg
ICAgICAgICAgZmFpbHVyZS50ZXN0X2V4cGVjdGF0aW9uc19saW5lID0gKAorICAgICAgICAgICAg
ICAgICAgc2VsZi5fZ2V0X3Rlc3RfZXhwZWN0YXRpb25zX2xpbmUoZmFpbHVyZS50ZXN0X3BhdGgp
KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZXhjbHVkZV93b250Zml4IGFuZCBmYWlsdXJlLmlz
X3dvbnRfZml4KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMucmVtb3ZlKGZh
aWx1cmUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYg
ZmFpbHVyZS50ZXh0X2RpZmZfbWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cHVsYXRlX3RleHRfZmFpbHVyZShmYWlsdXJlLCBkaXJlY3RvcnksIHppcCkKKyAgICAgICAgICAg
ICAgICBpZiBmYWlsdXJlLmltYWdlX21pc21hdGNoOgorICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9wb3B1bGF0ZV9pbWFnZV9mYWlsdXJlKGZhaWx1cmUsIGRpcmVjdG9yeSwgemlwKQorICAgICAg
ICAgICAgICAgIGlmIG5vdCBzZWxmLnVzZV9sb2NhbF9iYXNlbGluZXM6CisgICAgICAgICAgICAg
ICAgICAgIGZhaWx1cmUudGVzdF9hZ2UgPSBzZWxmLl9nZXRfZmlsZV9hZ2UoCisgICAgICAgICAg
ICAgICAgICAgICAgICBmYWlsdXJlLmdldF90ZXN0X2hvbWUoKSkKKyAgICAgICAgICAgICAgICBm
YWlsdXJlLmZsYWtpbmVzcyA9IHNlbGYuX2dldF9mbGFraW5lc3MoZmFpbHVyZS50ZXN0X3BhdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYucGxhdGZvcm0pCisgICAgICAgICAgICB6aXAuY2xvc2UoKQorICAgICAgICAgICAgaWYg
c2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJGaWxlcyBleHRyYWN0ZWQuIgor
ICAgICAgICAgICAgaWYgc2VsZi5kZWxldGVfemlwX2ZpbGU6CisgICAgICAgICAgICAgICAgaWYg
c2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiQ2xlYW5pbmcgdXAgemlw
IGZpbGUuLi4iCisgICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZW1vdmVfZGlyZWN0b3J5KFRF
TVBfWklQX0RJUikKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJi
b3NlOgorICAgICAgICAgICAgICAgIHByaW50ICgiRG93bmxvYWRlZCBmaWxlICclcycgZG9lc24n
dCBsb29rIGxpa2UgYSB6aXAgZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICUgZmlsZW5h
bWUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfdW56aXBfemlwZmlsZShz
ZWxmLCB6aXAsIGJhc2VfZGlyKToKKyAgICAgICAgZm9yIGksIG5hbWUgaW4gZW51bWVyYXRlKHpp
cC5uYW1lbGlzdCgpKToKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCcvJyk6Cisg
ICAgICAgICAgICAgICAgZXh0cmFjdGVkX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihiYXNlX2Rp
ciwgbmFtZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIChwYXRo
LCBmaWxlbmFtZSkgPSBvcy5wYXRoLnNwbGl0KGV4dHJhY3RlZF9maWxlX3BhdGgpCisgICAgICAg
ICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgsIDA3NzcpCisgICAgICAgICAgICAgICAgZXhj
ZXB0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgb3V0ZmlsZSA9
IG9wZW4oZXh0cmFjdGVkX2ZpbGVfcGF0aCwgJ3diJykKKyAgICAgICAgICAgICAgICBvdXRmaWxl
LndyaXRlKHppcC5yZWFkKG5hbWUpKQorICAgICAgICAgICAgICAgIG91dGZpbGUuZmx1c2goKQor
ICAgICAgICAgICAgICAgIG91dGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIG9zLmNobW9k
KGV4dHJhY3RlZF9maWxlX3BhdGgsIDA3NzcpCisKKyAgICBkZWYgX2dldF9yZXZpc2lvbl9hbmRf
YnVpbGRfZnJvbV9hcmNoaXZlX3N0ZXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuYXJjaGl2ZV9z
dGVwX2xvZ19maWxlOgorICAgICAgICAgICAgbG9nID0gb3BlbihzZWxmLmFyY2hpdmVfc3RlcF9s
b2dfZmlsZSwgJ3InKQorICAgICAgICAgICAgY29udGVudCA9ICIiLmpvaW4obG9nLnJlYWRsaW5l
cygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGVudCA9IHNjcmFwZV91cmwoZ2V0
X2FyY2hpdmVfdXJsKHNlbGYuYnVpbGQsIHNlbGYucGxhdGZvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5meWlfYnVpbGRlcikpCisgICAg
ICAgIHJldmlzaW9uID0gZXh0cmFjdF9maXJzdF92YWx1ZShjb250ZW50LCBBUkNISVZFX1VSTF9S
RUdFWCkKKyAgICAgICAgYnVpbGRfbmFtZSA9IGV4dHJhY3RfZmlyc3RfdmFsdWUoY29udGVudCwg
QlVJTERfTkFNRV9SRUdFWCkKKyAgICAgICAgcmV0dXJuIChyZXZpc2lvbiwgYnVpbGRfbmFtZSkK
KworICAgIGRlZiBfcG9wdWxhdGVfdGV4dF9mYWlsdXJlKHNlbGYsIGZhaWx1cmUsIGRpcmVjdG9y
eSwgemlwKToKKyAgICAgICAgYmFzZWxpbmUgPSBzZWxmLl9nZXRfYmFzZWxpbmUoZmFpbHVyZS5n
ZXRfZXhwZWN0ZWRfdGV4dF9maWxlbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXJlY3RvcnkpCisgICAgICAgIGZhaWx1cmUudGV4dF9iYXNlbGluZV9sb2Nh
bCA9IGJhc2VsaW5lLmxvY2FsX2ZpbGUKKyAgICAgICAgZmFpbHVyZS50ZXh0X2Jhc2VsaW5lX3Vy
bCA9IGJhc2VsaW5lLmJhc2VsaW5lX3VybAorICAgICAgICBmYWlsdXJlLnRleHRfYmFzZWxpbmVf
YWdlID0gKAorICAgICAgICAgICAgc2VsZi5fZ2V0X2ZpbGVfYWdlKGZhaWx1cmUuZ2V0X3RleHRf
YmFzZWxpbmVfdHJhY19ob21lKCkpKQorICAgICAgICBmYWlsdXJlLnRleHRfYWN0dWFsX2xvY2Fs
ID0gIiVzLyVzIiAlICgKKyAgICAgICAgICAgIGRpcmVjdG9yeSwgZmFpbHVyZS5nZXRfYWN0dWFs
X3RleHRfZmlsZW5hbWUoKSkKKyAgICAgICAgaWYgKGJhc2VsaW5lIGFuZCBiYXNlbGluZS5pc192
YWxpZCgpIGFuZCBub3Qgc2VsZi5kb250X2Rvd25sb2FkKToKKyAgICAgICAgICAgIHNlbGYuX2Nv
cHlfZmlsZV9mcm9tX3ppcF9kaXIoCisgICAgICAgICAgICAgICAgZmFpbHVyZS5nZXRfdGV4dF9y
ZXN1bHRfbG9jYXRpb25faW5femlwX2ZpbGUoKSwKKyAgICAgICAgICAgICAgICBmYWlsdXJlLnRl
eHRfYWN0dWFsX2xvY2FsKQorICAgICAgICAgICAgZ2VuZXJhdGVfdGV4dF9kaWZmKGZhaWx1cmUu
dGV4dF9iYXNlbGluZV9sb2NhbCwKKyAgICAgICAgICAgICAgICBmYWlsdXJlLnRleHRfYWN0dWFs
X2xvY2FsLAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSArICIvIiArIGZhaWx1cmUuZ2V0X3Rl
eHRfZGlmZl9maWxlbmFtZSgpKQorCisgICAgZGVmIF9wb3B1bGF0ZV9pbWFnZV9mYWlsdXJlKHNl
bGYsIGZhaWx1cmUsIGRpcmVjdG9yeSwgemlwKToKKyAgICAgICAgYmFzZWxpbmUgPSBzZWxmLl9n
ZXRfYmFzZWxpbmUoZmFpbHVyZS5nZXRfZXhwZWN0ZWRfaW1hZ2VfZmlsZW5hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5KQorICAgICAgICBmYWls
dXJlLmltYWdlX2Jhc2VsaW5lX2xvY2FsID0gYmFzZWxpbmUubG9jYWxfZmlsZQorICAgICAgICBm
YWlsdXJlLmltYWdlX2Jhc2VsaW5lX3VybCA9IGJhc2VsaW5lLmJhc2VsaW5lX3VybAorICAgICAg
ICBpZiBiYXNlbGluZSBhbmQgYmFzZWxpbmUuaXNfdmFsaWQoKToKKyAgICAgICAgICAgIGZhaWx1
cmUuaW1hZ2VfYmFzZWxpbmVfYWdlID0gKAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9maWxl
X2FnZShmYWlsdXJlLmdldF9pbWFnZV9iYXNlbGluZV90cmFjX2hvbWUoKSkpCisgICAgICAgICAg
ICBmYWlsdXJlLmltYWdlX2FjdHVhbF9sb2NhbCA9ICIlcy8lcyIgJSAoZGlyZWN0b3J5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF9hY3R1YWxf
aW1hZ2VfZmlsZW5hbWUoKSkKKyAgICAgICAgICAgIHNlbGYuX2NvcHlfZmlsZV9mcm9tX3ppcF9k
aXIoCisgICAgICAgICAgICAgICAgZmFpbHVyZS5nZXRfaW1hZ2VfcmVzdWx0X2xvY2F0aW9uX2lu
X3ppcF9maWxlKCksCisgICAgICAgICAgICAgICAgZmFpbHVyZS5pbWFnZV9hY3R1YWxfbG9jYWwp
CisgICAgICAgICAgICBpZiAobm90IGdlbmVyYXRlX3BuZ19kaWZmKGZhaWx1cmUuaW1hZ2VfYmFz
ZWxpbmVfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1
cmUuaW1hZ2VfYWN0dWFsX2xvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiJXMvJXMiICUgKGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFpbHVyZS5nZXRfaW1hZ2VfZGlmZl9maWxlbmFtZSgpKSkKKyAgICAgICAgICAg
ICAgICBhbmQgc2VsZi52ZXJib3NlKToKKyAgICAgICAgICAgICAgICBwcmludCAiQ291bGQgbm90
IGdlbmVyYXRlIFBORyBkaWZmIGZvciAlcyIgJSBmYWlsdXJlLnRlc3RfcGF0aAorICAgICAgICAg
ICAgaWYgKGZhaWx1cmUuaXNfaW1hZ2VfYmFzZWxpbmVfaW5fY2hyb21pdW0oKSBvcgorICAgICAg
ICAgICAgICAgIHNlbGYudXNlX2xvY2FsX2Jhc2VsaW5lcyk6CisgICAgICAgICAgICAgICAgdXBz
dHJlYW1fYmFzZWxpbmUgPSAoc2VsZi5fZ2V0X3Vwc3RyZWFtX2Jhc2VsaW5lKAorICAgICAgICAg
ICAgICAgICAgICBmYWlsdXJlLmdldF9leHBlY3RlZF9pbWFnZV9maWxlbmFtZSgpLCBkaXJlY3Rv
cnkpKQorICAgICAgICAgICAgICAgIGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVfdXBzdHJlYW1fbG9j
YWwgPSBcCisgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtX2Jhc2VsaW5lLmxvY2FsX2ZpbGUK
KyAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3Vwc3RyZWFtX3VybCA9IFwK
KyAgICAgICAgICAgICAgICAgICAgdXBzdHJlYW1fYmFzZWxpbmUuYmFzZWxpbmVfdXJsCisKKyAg
ICBkZWYgX2dldF9iYXNlbGluZShzZWxmLCBmaWxlbmFtZSwgZGlyZWN0b3J5LCB1cHN0cmVhbV9v
bmx5PUZhbHNlKToKKyAgICAgICAgIiIiIFNlYXJjaCBhbmQgZG93bmxvYWQgdGhlIGJhc2VsaW5l
IGZvciB0aGUgZ2l2ZW4gdGVzdCAocHV0IGl0IGluIHRoZQorICAgICAgICBkaXJlY3RvcnkgZ2l2
ZW4uKSIiIgorCisgICAgICAgIGxvY2FsX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpcmVjdG9y
eSwgZmlsZW5hbWUpCisgICAgICAgIGxvY2FsX2RpcmVjdG9yeSA9IGxvY2FsX2ZpbGVuYW1lWzps
b2NhbF9maWxlbmFtZS5yZmluZCgiLyIpXQorICAgICAgICBpZiB1cHN0cmVhbV9vbmx5OgorICAg
ICAgICAgICAgbGFzdF9pbmRleCA9IGxvY2FsX2ZpbGVuYW1lLnJmaW5kKCIuIikKKyAgICAgICAg
ICAgIGlmIGxhc3RfaW5kZXggPiAtMToKKyAgICAgICAgICAgICAgICBsb2NhbF9maWxlbmFtZSA9
IChsb2NhbF9maWxlbmFtZVs6bGFzdF9pbmRleF0gKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVQU1RSRUFNX0lNQUdFX0ZJTEVfRU5ESU5HKQorCisgICAgICAgIGRvd25sb2Fk
X2ZpbGVfbW9kaWZpZXJzID0gIiIKKyAgICAgICAgaWYgbG9jYWxfZmlsZW5hbWUuZW5kc3dpdGgo
Ii5wbmciKToKKyAgICAgICAgICAgIGRvd25sb2FkX2ZpbGVfbW9kaWZpZXJzID0gImIiICAjIGJp
bmFyeSBmaWxlCisKKyAgICAgICAgaWYgbm90IHNlbGYuZG9udF9kb3dubG9hZDoKKyAgICAgICAg
ICAgIGNyZWF0ZV9kaXJlY3RvcnkobG9jYWxfZGlyZWN0b3J5KQorCisgICAgICAgIGxvY2FsX2Jh
c2VsaW5lID0gTm9uZQorICAgICAgICB1cmxfb2ZfYmFzZWxpbmUgPSBOb25lCisKKyAgICAgICAg
aWYgc2VsZi51c2VfbG9jYWxfYmFzZWxpbmVzOgorICAgICAgICAgICAgdGVzdF9wYXRoX2tleSA9
IHNlbGYuX25vcm1hbGl6ZV9iYXNlbGluZV9pZGVudGlmaWVyKGZpbGVuYW1lKQorICAgICAgICAg
ICAgZGljdCA9IHNlbGYuYmFzZWxpbmVfZGljdAorICAgICAgICAgICAgaWYgdXBzdHJlYW1fb25s
eToKKyAgICAgICAgICAgICAgICBkaWN0ID0gc2VsZi53ZWJraXRfYmFzZWxpbmVfZGljdAorICAg
ICAgICAgICAgaWYgdGVzdF9wYXRoX2tleSBpbiBkaWN0OgorICAgICAgICAgICAgICAgIGxvY2Fs
X2Jhc2VsaW5lID0gZGljdFt0ZXN0X3BhdGhfa2V5XQorICAgICAgICAgICAgICAgIHVybF9vZl9i
YXNlbGluZSA9IGxvY2FsX2Jhc2VsaW5lCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkobG9j
YWxfYmFzZWxpbmUsIGxvY2FsX2RpcmVjdG9yeSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi52ZXJi
b3NlOgorICAgICAgICAgICAgICAgIHByaW50ICgiQmFzZWxpbmUgJXMgZG9lcyBub3QgZXhpc3Qg
aW4gdGhlIGluZGV4LiIgJQorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5KQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5kZXggPSAwCisgICAgICAgICAgICBwb3NzaWJs
ZV9maWxlcyA9IHNlbGYuX2dldF9wb3NzaWJsZV9maWxlX2xpc3QoZmlsZW5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBzdHJl
YW1fb25seSkKKyAgICAgICAgICAgICMgRG93bmxvYWQgdGhlIGJhc2VsaW5lcyBmcm9tIHRoZSB3
ZWJraXQub3JnIHNpdGUuCisgICAgICAgICAgICB3aGlsZSBsb2NhbF9iYXNlbGluZSA9PSBOb25l
IGFuZCBpbmRleCA8IGxlbihwb3NzaWJsZV9maWxlcyk6CisgICAgICAgICAgICAgICAgbG9jYWxf
YmFzZWxpbmUgPSBzZWxmLl9kb3dubG9hZF9maWxlKHBvc3NpYmxlX2ZpbGVzW2luZGV4XSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9m
aWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3dubG9hZF9maWxlX21vZGlmaWVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgIGlmIGxvY2Fs
X2Jhc2VsaW5lOgorICAgICAgICAgICAgICAgICAgICB1cmxfb2ZfYmFzZWxpbmUgPSBwb3NzaWJs
ZV9maWxlc1tpbmRleF0KKyAgICAgICAgICAgICAgICBpbmRleCArPSAxCisKKyAgICAgICAgaWYg
bm90IGxvY2FsX2Jhc2VsaW5lOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAg
ICAgICAgICAgIHByaW50ICJDb3VsZCBub3QgZmluZCBhbnkgYmFzZWxpbmUgZm9yICVzIiAlIGZp
bGVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2NhbF9iYXNlbGluZSA9IG9zLnBh
dGgubm9ybXBhdGgobG9jYWxfYmFzZWxpbmUpCisgICAgICAgIGlmIGxvY2FsX2Jhc2VsaW5lIGFu
ZCBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiRm91bmQgYmFzZWxpbmU6ICVzIiAl
IHVybF9vZl9iYXNlbGluZQorCisgICAgICAgIHJldHVybiBCYXNlbGluZUNhbmRpZGF0ZShsb2Nh
bF9iYXNlbGluZSwgdXJsX29mX2Jhc2VsaW5lKQorCisgICAgZGVmIF9hZGRfYmFzZWxpbmVfcGF0
aHMoc2VsZiwgbGlzdCwgYmFzZV9wYXRoLCBkaXJlY3Rvcmllcyk6CisgICAgICAgIGZvciBkaXIg
aW4gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICBsaXN0LmFwcGVuZChvcy5wYXRoLmpvaW4oYmFz
ZV9wYXRoLCBkaXIpKQorCisgICAgIyBUT0RPKGd3aWxzb24pOiBSZWZhY3RvciB0aGlzIG1ldGhv
ZCB0byB1c2UKKyAgICAjIHBsYXRmb3JtX3V0aWxzXyouQmFzZWxpbmVTZWFyY2hQYXRoIGluc3Rl
YWQgb2YgY3VzdG9tIGxvZ2ljLgorCisgICAgZGVmIF9idWlsZF9iYXNlbGluZV9pbmRleGVzKHNl
bGYpOgorICAgICAgICAiIiIgQnVpbGRzIGFuIGluZGV4IG9mIGFsbCB0aGUga25vd24gbG9jYWwg
YmFzZWxpbmVzIGluIGJvdGggY2hyb21pdW0KKyAgICAgICAgYW5kIHdlYmtpdC4gVHdvIGJhc2Vs
aW5lcyBhcmUgY3JlYXRlZCwgYSB3ZWJraXQtc3BlY2lmaWMgKG5vIGNocm9taXVtCisgICAgICAg
IGJhc2VsaW5lKSBkaWN0aW9uYXJ5IGFuZCBhbiBvdmVyYWxsIChib3RoKSBkaWN0aW9uYXJ5LiBF
YWNoIG9uZSBoYXMgYQorICAgICAgICBzdHJ1Y3R1cmUgbGlrZTogIi9mYXN0L2RvbS9vbmUtZXhw
ZWN0ZWQudHh0IiAtPgorICAgICAgICAiQzpcXHBhdGhcXHRvXFxmYXN0XFxkb21cXG9uZS1leHBl
Y3RlZC50eHQiCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAg
ICAgICBwcmludCAiQnVpbGRpbmcgaW5kZXggb2YgYWxsIGxvY2FsIGJhc2VsaW5lcy4uLiIKKwor
ICAgICAgICBzZWxmLmJhc2VsaW5lX2RpY3QgPSB7fQorICAgICAgICBzZWxmLndlYmtpdF9iYXNl
bGluZV9kaWN0ID0ge30KKworICAgICAgICBiYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGgu
Y3VyZGlyKQorICAgICAgICB3ZWJraXRfYmFzZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3RoaXJkX3BhcnR5JywgJ1dlYmtpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMnKQorICAgICAgICBjaHJvbWl1bV9iYXNlID0g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKKyAg
ICAgICAgY2hyb21pdW1fYmFzZV9wbGF0Zm9ybSA9IG9zLnBhdGguam9pbihjaHJvbWl1bV9iYXNl
LCBQTEFURk9STSkKKyAgICAgICAgd2Via2l0X2Jhc2VfcGxhdGZvcm0gPSBvcy5wYXRoLmpvaW4o
d2Via2l0X2Jhc2UsIFBMQVRGT1JNKQorCisgICAgICAgIHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVz
ID0gW10KKyAgICAgICAgcG9zc2libGVfd2Via2l0X2ZpbGVzID0gW10KKworICAgICAgICBpZiBp
c19tYWNfcGxhdGZvcm0oc2VsZi5wbGF0Zm9ybSk6CisgICAgICAgICAgICBzZWxmLl9hZGRfYmFz
ZWxpbmVfcGF0aHMocG9zc2libGVfY2hyb21pdW1fZmlsZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hyb21pdW1fYmFzZV9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDSFJPTUlVTV9NQUNfUExBVEZPUk1fRElSUykKKyAgICAg
ICAgICAgIHNlbGYuX2FkZF9iYXNlbGluZV9wYXRocyhwb3NzaWJsZV9jaHJvbWl1bV9maWxlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfYmFzZV9wbGF0Zm9y
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfTUFDX1BMQVRG
T1JNX0RJUlMpCisgICAgICAgICAgICBzZWxmLl9hZGRfYmFzZWxpbmVfcGF0aHMocG9zc2libGVf
d2Via2l0X2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtp
dF9iYXNlX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9NQUNfUExBVEZPUk1fRElSUykKKyAgICAgICAgZWxpZiBpc19saW51eF9wbGF0Zm9ybShz
ZWxmLnBsYXRmb3JtKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9iYXNlbGluZV9wYXRocyhwb3Nz
aWJsZV9jaHJvbWl1bV9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaHJvbWl1bV9iYXNlX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENIUk9NSVVNX0xJTlVYX1BMQVRGT1JNX0RJUlMpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9hZGRfYmFzZWxpbmVfcGF0aHMocG9zc2libGVfY2hyb21pdW1fZmlsZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fYmFzZV9wbGF0
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSFJPTUlVTV9XSU5f
UExBVEZPUk1fRElSUykKKworICAgICAgICBpZiBub3QgaXNfbWFjX3BsYXRmb3JtKHNlbGYucGxh
dGZvcm0pOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3BhdGhzKHBvc3NpYmxlX3dl
YmtpdF9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRf
YmFzZV9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfV0lOX1BMQVRGT1JNX0RJUlMpCisKKyAgICAgICAgcG9zc2libGVfd2Via2l0X2ZpbGVzLmFw
cGVuZCh3ZWJraXRfYmFzZSkKKworICAgICAgICBzZWxmLl9wb3B1bGF0ZV9iYXNlbGluZV9kaWN0
KHBvc3NpYmxlX3dlYmtpdF9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLndlYmtpdF9iYXNlbGluZV9kaWN0KQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9i
YXNlbGluZV9kaWN0KHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuYmFzZWxpbmVfZGljdCkKKyAgICAgICAgZm9yIGtleSBp
biBzZWxmLndlYmtpdF9iYXNlbGluZV9kaWN0LmtleXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBr
ZXkgaW4gc2VsZi5iYXNlbGluZV9kaWN0OgorICAgICAgICAgICAgICAgIHNlbGYuYmFzZWxpbmVf
ZGljdFtrZXldID0gc2VsZi53ZWJraXRfYmFzZWxpbmVfZGljdFtrZXldCisKKyAgICAgICAgcmV0
dXJuIFRydWUKKworICAgIGRlZiBfcG9wdWxhdGVfYmFzZWxpbmVfZGljdChzZWxmLCBkaXJlY3Rv
cmllcywgZGljdGlvbmFyeSk6CisgICAgICAgIGZvciBkaXIgaW4gZGlyZWN0b3JpZXM6CisgICAg
ICAgICAgICBvcy5wYXRoLndhbGsoZGlyLCBzZWxmLl92aXNpdF9iYXNlbGluZV9kaXIsIGRpY3Rp
b25hcnkpCisKKyAgICBkZWYgX3Zpc2l0X2Jhc2VsaW5lX2RpcihzZWxmLCBkaWN0LCBkaXJuYW1l
LCBuYW1lcyk6CisgICAgICAgICIiIiBNZXRob2QgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IG9z
LnBhdGgud2FsayB0byBidWlsZCB1cCBhbiBpbmRleAorICAgICAgICBvZiB3aGVyZSBhbGwgdGhl
IHRlc3QgYmFzZWxpbmVzIGV4aXN0LiAiIiIKKyAgICAgICAgIyBFeGNsdWRlIC5zdm4gZnJvbSB0
aGUgd2Fsaywgc2luY2Ugd2UgZG9uJ3QgY2FyZSB3aGF0IGlzIGluIHRoZXNlCisgICAgICAgICMg
ZGlycy4KKyAgICAgICAgaWYgJy5zdm4nIGluIG5hbWVzOgorICAgICAgICAgICAgbmFtZXMucmVt
b3ZlKCcuc3ZuJykKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBpZiBu
YW1lLmZpbmQoIi1leHBlY3RlZC4iKSA+IC0xOgorICAgICAgICAgICAgICAgIHRlc3RfcGF0aF9r
ZXkgPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAjIEZpeCBw
YXRoIHNlcGFyYXRvcnMgdG8gbWF0Y2ggdGhlIHNlcGFyYXRvcnMgdXNlZCBvbgorICAgICAgICAg
ICAgICAgICMgdGhlIGJ1aWxkYm90cy4KKyAgICAgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5ID0g
dGVzdF9wYXRoX2tleS5yZXBsYWNlKCJcXCIsICIvIikKKyAgICAgICAgICAgICAgICB0ZXN0X3Bh
dGhfa2V5ID0gc2VsZi5fbm9ybWFsaXplX2Jhc2VsaW5lX2lkZW50aWZpZXIoCisgICAgICAgICAg
ICAgICAgICAgIHRlc3RfcGF0aF9rZXkpCisgICAgICAgICAgICAgICAgaWYgbm90IHRlc3RfcGF0
aF9rZXkgaW4gZGljdDoKKyAgICAgICAgICAgICAgICAgICAgZGljdFt0ZXN0X3BhdGhfa2V5XSA9
IG9zLnBhdGguam9pbihkaXJuYW1lLCBuYW1lKQorCisgICAgIyBUT0RPKGd3aWxzb24pOiBTaW1w
bGlmeSBpZGVudGlmaWVyIGNyZWF0aW9uIHRvIG5vdCByZWx5IHNvIGhlYXZpbHkgb24KKyAgICAj
IGRpcmVjdG9yeSBhbmQgcGF0aCBuYW1lcy4KKworICAgIGRlZiBfbm9ybWFsaXplX2Jhc2VsaW5l
X2lkZW50aWZpZXIoc2VsZiwgdGVzdF9wYXRoKToKKyAgICAgICAgIiIiIEdpdmVuIGVpdGhlciBh
IGJhc2VsaW5lIHBhdGggKGkuZS4gL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy8uLi4pCisgICAg
ICAgIG9yIGEgdGVzdCBwYXRoIChpLmUuIC9MYXlvdXRUZXN0cy9mYXN0L2RvbS8uLi4uKSB3aWxs
IG5vcm1hbGl6ZQorICAgICAgICB0byBhIHVuaXF1ZSBpZGVudGlmaWVyLiBUaGlzIGlzIGJhc2lj
YWxseSBhIGhhc2hpbmcgZnVuY3Rpb24gZm9yCisgICAgICAgIGxheW91dCB0ZXN0IHBhdGhzLiIi
IgorCisgICAgICAgIGZvciByZWdleCBpbiBMT0NBTF9CQVNFTElORV9SRUdFWEVTOgorICAgICAg
ICAgICAgdmFsdWUgPSBleHRyYWN0X2ZpcnN0X3ZhbHVlKHRlc3RfcGF0aCwgcmVnZXgpCisgICAg
ICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAg
cmV0dXJuIHRlc3RfcGF0aAorCisgICAgZGVmIF9hZGRfYmFzZWxpbmVfdXJfbHMoc2VsZiwgbGlz
dCwgYmFzZV91cmwsIHBsYXRmb3Jtcyk6CisgICAgICAgICMgSWYgdGhlIGJhc2UgVVJMIGRvZXNu
J3QgY29udGFpbiBhbnkgcGxhdGZvcm0gaW4gaXRzIHBhdGgsIG9ubHkgYWRkCisgICAgICAgICMg
dGhlIGJhc2UgVVJMIHRvIHRoZSBsaXN0LiAgVGhpcyBoYXBwZW5zIHdpdGggdGhlIGNocm9tZS8g
ZGlyLgorICAgICAgICBpZiBiYXNlX3VybC5maW5kKCIlcyIpID09IC0xOgorICAgICAgICAgICAg
bGlzdC5hcHBlbmQoYmFzZV91cmwpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZm9yIHBs
YXRmb3JtIGluIHBsYXRmb3JtczoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGJhc2VfdXJsICUg
cGxhdGZvcm0pCisKKyAgICAjIFRPRE8oZ3dpbHNvbik6IFJlZmFjdG9yIHRoaXMgbWV0aG9kIHRv
IHVzZQorICAgICMgcGxhdGZvcm1fdXRpbHNfKi5CYXNlbGluZVNlYXJjaFBhdGggaW5zdGVhZCBv
ZiBjdXN0b20gbG9naWMuICBUaGlzIG1heQorICAgICMgcmVxdWlyZSBzb21lIGtpbmQgb2Ygd3Jh
cHBlciBzaW5jZSB0aGlzIG1ldGhvZCBsb29rcyBmb3IgVVJMcyBpbnN0ZWFkCisgICAgIyBvZiBs
b2NhbCBwYXRocy4KKworICAgIGRlZiBfZ2V0X3Bvc3NpYmxlX2ZpbGVfbGlzdChzZWxmLCBmaWxl
bmFtZSwgb25seV93ZWJraXQpOgorICAgICAgICAiIiIgUmV0dXJucyBhIGxpc3Qgb2YgcG9zc2li
bGUgZmlsZW5hbWUgbG9jYXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZS4KKyAgICAgICAgVXNlcyB0
aGUgcGxhdGZvcm0gb2YgdGhlIGNsYXNzIHRvIGRldGVybWluZSB0aGUgb3JkZXIuCisgICAgICAg
ICIiIgorCisgICAgICAgIHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVzID0gW10KKyAgICAgICAgcG9z
c2libGVfd2Via2l0X2ZpbGVzID0gW10KKworICAgICAgICBjaHJvbWl1bV9wbGF0Zm9ybV91cmwg
PSBMQVlPVVRfVEVTVF9SRVBPX0JBU0VfVVJMCisgICAgICAgIGlmIG5vdCBmaWxlbmFtZS5zdGFy
dHN3aXRoKCJjaHJvbWUiKToKKyAgICAgICAgICAgIGNocm9taXVtX3BsYXRmb3JtX3VybCArPSAi
cGxhdGZvcm0vJXMvIgorICAgICAgICBjaHJvbWl1bV9wbGF0Zm9ybV91cmwgKz0gZmlsZW5hbWUK
KworICAgICAgICB3ZWJraXRfcGxhdGZvcm1fdXJsID0gV0VCS0lUX1BMQVRGT1JNX0JBU0VMSU5F
X1VSTCArIGZpbGVuYW1lCisKKyAgICAgICAgaWYgaXNfbWFjX3BsYXRmb3JtKHNlbGYucGxhdGZv
cm0pOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3VyX2xzKHBvc3NpYmxlX2Nocm9t
aXVtX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX3Bs
YXRmb3JtX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSFJPTUlVTV9N
QUNfUExBVEZPUk1fRElSUykKKyAgICAgICAgICAgIHNlbGYuX2FkZF9iYXNlbGluZV91cl9scyhw
b3NzaWJsZV93ZWJraXRfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2Via2l0X3BsYXRmb3JtX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfTUFDX1BMQVRGT1JNX0RJUlMpCisgICAgICAgIGVsaWYgaXNfbGludXhfcGxhdGZvcm0o
c2VsZi5wbGF0Zm9ybSk6CisgICAgICAgICAgICBzZWxmLl9hZGRfYmFzZWxpbmVfdXJfbHMocG9z
c2libGVfY2hyb21pdW1fZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hyb21pdW1fcGxhdGZvcm1fdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENIUk9NSVVNX0xJTlVYX1BMQVRGT1JNX0RJUlMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLl9hZGRfYmFzZWxpbmVfdXJfbHMocG9zc2libGVfY2hyb21pdW1fZmlsZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fcGxhdGZvcm1fdXJsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dJTl9QTEFURk9STV9ESVJT
KQorCisgICAgICAgIGlmIG5vdCBpc19tYWNfcGxhdGZvcm0oc2VsZi5wbGF0Zm9ybSk6CisgICAg
ICAgICAgICBzZWxmLl9hZGRfYmFzZWxpbmVfdXJfbHMocG9zc2libGVfd2Via2l0X2ZpbGVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9wbGF0Zm9ybV91cmwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1dJTl9QTEFURk9STV9ESVJT
KQorICAgICAgICBwb3NzaWJsZV93ZWJraXRfZmlsZXMuYXBwZW5kKFdFQktJVF9MQVlPVVRfVEVT
VF9CQVNFX1VSTCArIGZpbGVuYW1lKQorCisgICAgICAgIGlmIG9ubHlfd2Via2l0OgorICAgICAg
ICAgICAgcmV0dXJuIHBvc3NpYmxlX3dlYmtpdF9maWxlcworICAgICAgICByZXR1cm4gcG9zc2li
bGVfY2hyb21pdW1fZmlsZXMgKyBwb3NzaWJsZV93ZWJraXRfZmlsZXMKKworICAgICMgTGlrZSBf
R2V0QmFzZWxpbmUsIGJ1dCBvbmx5IHJldHJpZXZlcyB0aGUgYmFzZWxpbmUgZnJvbSB1cHN0cmVh
bSAoc2tpcAorICAgICMgbG9va2luZyBpbiBjaHJvbWl1bSkuCisKKyAgICBkZWYgX2dldF91cHN0
cmVhbV9iYXNlbGluZShzZWxmLCBmaWxlbmFtZSwgZGlyZWN0b3J5KToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2dldF9iYXNlbGluZShmaWxlbmFtZSwgZGlyZWN0b3J5LCB1cHN0cmVhbV9vbmx5PVRy
dWUpCisKKyAgICBkZWYgX2dldF9maWxlX2FnZShzZWxmLCB1cmwpOgorICAgICAgICAjIENoZWNr
IGlmIHRoZSBnaXZlbiBVUkwgaXMgcmVhbGx5IGEgbG9jYWwgZmlsZSBwYXRoLgorICAgICAgICBp
ZiBub3QgdXJsIG9yIG5vdCB1cmwuc3RhcnRzd2l0aCgiaHR0cCIpOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdXJsLmZpbmQoV0VCS0lUX1RS
QUNfSE9TVE5BTUUpID4gLTE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3Rfc2luZ2xl
X3JlZ2V4X2F0X3VybCh1cmxbOnVybC5yZmluZCgiLyIpXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9GSUxFX0FHRV9SRUdFWCAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxbdXJs
LmZpbmQoIi9icm93c2VyIik6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGV4dHJhY3Rfc2luZ2xlX3JlZ2V4X2F0X3VybCh1cmwgKyAiP3ZpZXc9bG9nIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVN
X0ZJTEVfQUdFX1JFR0VYKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBzZWxmLnZl
cmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBmaW5kIGFnZSBmb3IgJXMu
IERvZXMgdGhlIGZpbGUgZXhpc3Q/IiAlIHVybAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICMgUmV0dXJucyBhIGZsYWtpbmVzcyBvbiBhIHNjYWxlIG9mIDEtNTAuCisgICAgIyBUT0RP
KGd3aWxzb24pOiBtb2RpZnkgdGhpcyB0byBhbHNvIHJldHVybiB3aGljaCBvZiB0aGUgbGFzdCAx
MAorICAgICMgYnVpbGRzIGZhaWxlZCBmb3IgdGhpcyB0ZXN0LgorCisgICAgZGVmIF9nZXRfZmxh
a2luZXNzKHNlbGYsIHRlc3RfcGF0aCwgdGFyZ2V0X3BsYXRmb3JtKToKKyAgICAgICAgdXJsID0g
Z2V0X2ZsYWt5X3Rlc3RfdXJsKHRhcmdldF9wbGF0Zm9ybSkKKyAgICAgICAgaWYgdXJsID09ICIi
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiB1cmwgaW4gc2VsZi5fZmxh
a3lfdGVzdF9jYWNoZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9mbGFreV90ZXN0X2Nh
Y2hlW3VybF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSB1cmxsaWIyLnVy
bG9wZW4odXJsbGliMi5SZXF1ZXN0KHVybCkpLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5fZmxh
a3lfdGVzdF9jYWNoZVt1cmxdID0gY29udGVudAorCisgICAgICAgIGZsYWtpbmVzcyA9IGV4dHJh
Y3RfZmlyc3RfdmFsdWUoY29udGVudCwgRkxBS1lfVEVTVF9SRUdFWCAlIHRlc3RfcGF0aCkKKyAg
ICAgICAgcmV0dXJuIGZsYWtpbmVzcworCisgICAgZGVmIF9nZXRfdGVzdF9leHBlY3RhdGlvbnMo
c2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0X2V4cGVjdGF0aW9uc19jYWNoZToKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnRlc3RfZXhwZWN0YXRpb25z
X2ZpbGU6CisgICAgICAgICAgICAgICAgICAgIGxvZyA9IG9wZW4oc2VsZi50ZXN0X2V4cGVjdGF0
aW9uc19maWxlLCAncicpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRp
b25zX2NhY2hlID0gIlxuIi5qb2luKGxvZy5yZWFkbGluZXMoKSkKKyAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0aW9uc19jYWNoZSA9
IHNjcmFwZV91cmwoCisgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0VYUEVDVEFUSU9OU19V
UkwpCisgICAgICAgICAgICBleGNlcHQgSFRUUEVycm9yOgorICAgICAgICAgICAgICAgIHByaW50
ICgiQ291bGQgbm90IGZpbmQgdGVzdF9leHBlY3RhdGlvbnMudHh0IGF0ICVzIiAlCisgICAgICAg
ICAgICAgICAgICAgICAgIFRFU1RfRVhQRUNUQVRJT05TX1VSTCkKKworICAgICAgICByZXR1cm4g
c2VsZi5fdGVzdF9leHBlY3RhdGlvbnNfY2FjaGUKKworICAgIGRlZiBfZ2V0X3Rlc3RfZXhwZWN0
YXRpb25zX2xpbmUoc2VsZiwgdGVzdF9wYXRoKToKKyAgICAgICAgY29udGVudCA9IHNlbGYuX2dl
dF90ZXN0X2V4cGVjdGF0aW9ucygpCisKKyAgICAgICAgaWYgbm90IGNvbnRlbnQ6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGZvciBtYXRjaCBpbiBjb250ZW50LnNwbGl0bGlu
ZXMoKToKKyAgICAgICAgICAgIGxpbmUgPSByZS5zZWFyY2goIi4qPyA6ICguKj8pID0gLioiLCBt
YXRjaCkKKyAgICAgICAgICAgIGlmIGxpbmUgYW5kIHRlc3RfcGF0aC5maW5kKGxpbmUuZ3JvdXAo
MSkpID4gLTE6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoCisKKyAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIGRlZiBfY29weV9maWxlX2Zyb21femlwX2RpcihzZWxmLCBmaWxlX2luX3pp
cCwgZmlsZV90b19jcmVhdGUpOgorICAgICAgICBtb2RpZmllcnMgPSAiIgorICAgICAgICBpZiBm
aWxlX3RvX2NyZWF0ZS5lbmRzd2l0aCgiLnBuZyIpOgorICAgICAgICAgICAgbW9kaWZpZXJzID0g
ImIiCisgICAgICAgIGRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KGZpbGVfdG9fY3Jl
YXRlKVswOi0xXSlbMF0KKyAgICAgICAgY3JlYXRlX2RpcmVjdG9yeShkaXIpCisgICAgICAgIGZp
bGUgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihURU1QX1pJUF9ESVIsIGZpbGVfaW5f
emlwKSkKKyAgICAgICAgc2h1dGlsLmNvcHkoZmlsZSwgZGlyKQorCisgICAgZGVmIF9leHRyYWN0
X2ZpbGVfZnJvbV96aXAoc2VsZiwgemlwLCBmaWxlX2luX3ppcCwgZmlsZV90b19jcmVhdGUpOgor
ICAgICAgICBtb2RpZmllcnMgPSAiIgorICAgICAgICBpZiBmaWxlX3RvX2NyZWF0ZS5lbmRzd2l0
aCgiLnBuZyIpOgorICAgICAgICAgICAgbW9kaWZpZXJzID0gImIiCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIGNyZWF0ZV9kaXJlY3RvcnkoZmlsZV90b19jcmVhdGVbMDpmaWxlX3RvX2NyZWF0
ZS5yZmluZCgiLyIpXSkKKyAgICAgICAgICAgIGxvY2FsRmlsZSA9IG9wZW4oZmlsZV90b19jcmVh
dGUsICJ3JXMiICUgbW9kaWZpZXJzKQorICAgICAgICAgICAgbG9jYWxGaWxlLndyaXRlKHppcC5y
ZWFkKGZpbGVfaW5femlwKSkKKyAgICAgICAgICAgIGxvY2FsRmlsZS5jbG9zZSgpCisgICAgICAg
ICAgICBvcy5jaG1vZChmaWxlX3RvX2NyZWF0ZSwgMDc3NykKKyAgICAgICAgICAgIHJldHVybiBU
cnVlCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJGaWxlICVz
IGRvZXMgbm90IGV4aXN0IGluIHppcCBmaWxlLiIgJSAoZmlsZV9pbl96aXApCisgICAgICAgIGV4
Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJGaWxlICVzIGRvZXMgbm90
IGV4aXN0IGluIHppcCBmaWxlLiIgJSAoZmlsZV9pbl96aXApCisgICAgICAgICAgICBwcmludCAi
SXMgdGhpcyB6aXAgZmlsZSBhc3NlbWJsZWQgY29ycmVjdGx5PyIKKyAgICAgICAgcmV0dXJuIEZh
bHNlCisKKyAgICBkZWYgX2Rvd25sb2FkX2ZpbGUoc2VsZiwgdXJsLCBsb2NhbF9maWxlbmFtZT1O
b25lLCBtb2RpZmllcnM9IiIsCisgICAgICAgICAgICAgICAgICAgICAgZm9yY2U9RmFsc2UpOgor
ICAgICAgICAiIiIKKyAgICAgICAgQ29weSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGZyb20gYSBn
aXZlbiBVUkwKKyAgICAgICAgdG8gYSBsb2NhbCBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaWYgbG9jYWxfZmlsZW5hbWUgPT0gTm9uZToKKyAgICAgICAgICAg
ICAgICBsb2NhbF9maWxlbmFtZSA9IHVybC5zcGxpdCgnLycpWy0xXQorICAgICAgICAgICAgaWYg
b3MucGF0aC5pc2ZpbGUobG9jYWxfZmlsZW5hbWUpIGFuZCBub3QgZm9yY2U6CisgICAgICAgICAg
ICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiRmlsZSBh
dCAlcyBhbHJlYWR5IGV4aXN0cy4iICUgbG9jYWxfZmlsZW5hbWUKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbG9jYWxfZmlsZW5hbWUKKyAgICAgICAgICAgIGlmIHNlbGYuZG9udF9kb3dubG9hZDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxfZmlsZW5hbWUKKyAgICAgICAgICAgIHdlYkZp
bGUgPSB1cmxsaWIyLnVybG9wZW4odXJsKQorICAgICAgICAgICAgbG9jYWxGaWxlID0gb3Blbihs
b2NhbF9maWxlbmFtZSwgKCJ3JXMiICUgbW9kaWZpZXJzKSkKKyAgICAgICAgICAgIGxvY2FsRmls
ZS53cml0ZSh3ZWJGaWxlLnJlYWQoKSkKKyAgICAgICAgICAgIHdlYkZpbGUuY2xvc2UoKQorICAg
ICAgICAgICAgbG9jYWxGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNobW9kKGxvY2FsX2Zp
bGVuYW1lLCAwNzc3KQorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3I6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvcjoKKyAgICAg
ICAgICAgIHByaW50ICJUaGUgdXJsICVzIGlzIG1hbGZvcm1lZC4iICUgdXJsCisgICAgICAgICAg
ICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gbG9jYWxGaWxlLm5hbWUKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2ZhaWx1cmVfZmluZGVyX3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRlcl90ZXN0LnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmViM2MKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9m
YWlsdXJlX2ZpbmRlcl90ZXN0LnB5CkBAIC0wLDAgKzEsMzk4IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgemlwZmlsZQor
Citmcm9tIGZhaWx1cmVfZmluZGVyIGltcG9ydCBGYWlsdXJlRmluZGVyCisKK1RFU1RfQlVJTERF
Ul9PVVRQVVQgPSAiIiIwOTA3MjMgMTA6Mzg6MjIgdGVzdF9zaGVsbF90aHJlYWQucHk6Mjg5Cisg
ICAgICAgICAgICBFUlJPUiBjaHJvbWUvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tZXRyaWNzLmh0bWwg
ZmFpbGVkOgorICAgICAgICAgICAgICBUZXh0IGRpZmYgbWlzbWF0Y2gKKyAgICAgICAgICAgIDA5
MDcyMyAxMDozODoyMSB0ZXN0X3NoZWxsX3RocmVhZC5weToyODkKKyAgICAgICAgICAgIEVSUk9S
IGNocm9tZS9mYXN0L2RvbS94c3MtREVOSUVELWphdmFzY3JpcHQtdmFyaWF0aW9ucy5odG1sIGZh
aWxlZDoKKyAgICAgICAgICAgICAgVGV4dCBkaWZmIG1pc21hdGNoCisgICAgICAgICAgICAwOTA3
MjMgMTA6Mzc6NTggdGVzdF9zaGVsbF90aHJlYWQucHk6Mjg5CisgICAgICAgICAgICBFUlJPUiBM
YXlvdXRUZXN0cy9wbHVnaW5zL2JpbmRpbmdzLXRlc3QuaHRtbCBmYWlsZWQ6CisgICAgICAgICAg
ICAgIFRleHQgZGlmZiBtaXNtYXRjaAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0V4cGVjdGVk
IHRvIGNyYXNoLCBidXQgcGFzc2VkICgxKToKKyAgY2hyb21lL2Zhc3QvZm9ybXMvdGV4dGFyZWEt
bWV0cmljcy5odG1sCisKK1JlZ3Jlc3Npb25zOiBVbmV4cGVjdGVkIGZhaWx1cmVzICgyKToKKyAg
Y2hyb21lL2Zhc3QvZG9tL3hzcy1ERU5JRUQtamF2YXNjcmlwdC12YXJpYXRpb25zLmh0bWwgPSBG
QUlMCisgIExheW91dFRlc3RzL3BsdWdpbnMvYmluZGluZ3MtdGVzdC5odG1sID0gRkFJTAorLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisiIiIKKworVEVTVF9GQUlMVVJFXzEgPSAoImxheW91dC10ZXN0
LXJlc3VsdHMvY2hyb21lL2Zhc3QvZm9ybXMvIgorICAgICAgICAgICAgICAgICAgInRleHRhcmVh
LW1ldHJpY3MtYWN0dWFsLnR4dCIpCitURVNUX0ZBSUxVUkVfMiA9ICgibGF5b3V0LXRlc3QtcmVz
dWx0cy9jaHJvbWUvZmFzdC9kb20vIgorICAgICAgICAgICAgICAgICAgInhzcy1ERU5JRUQtamF2
YXNjcmlwdC12YXJpYXRpb25zLWFjdHVhbC50eHQiKQorVEVTVF9GQUlMVVJFXzMgPSAoImxheW91
dC10ZXN0LXJlc3VsdHMvTGF5b3V0VGVzdHMvcGx1Z2lucy8iCisgICAgICAgICAgICAgICAgICAi
YmluZGluZ3MtdGVzdC1hY3R1YWwudHh0IikKKworVEVTVF9BUkNISVZFX09VVFBVVCA9ICIiIgor
QWRkaW5nIGxheW91dC10ZXN0LXJlc3VsdHNccGVuZGluZ1xmYXN0XHJlcGFpbnRcbm90LXJlYWwt
YWN0dWFsLmNoZWNrc3VtCitBZGRpbmcgbGF5b3V0LXRlc3QtcmVzdWx0c1xwZW5kaW5nXGZhc3Rc
cmVwYWludFxub3QtcmVhbC1hY3R1YWwucG5nCitBZGRpbmcgbGF5b3V0LXRlc3QtcmVzdWx0c1xw
ZW5kaW5nXGZhc3RccmVwYWludFxub3QtcmVhbC1hY3R1YWwudHh0CitsYXN0IGNoYW5nZTogMjIw
NTcKK2J1aWxkIG5hbWU6IHdlYmtpdC1yZWwKK2hvc3QgbmFtZTogY29kZjEzOAorc2F2aW5nIHJl
c3VsdHMgdG8gXFxteVx0ZXN0XGxvY2F0aW9uXHdlYmtpdC1yZWxcMjIwNTcKK3Byb2dyYW0gZmlu
aXNoZWQgd2l0aCBleGl0IGNvZGUgMAorIiIiCisKK1RFU1RfVEVTVF9FWFBFQ1RBVElPTlMgPSAi
IiIKK0JVRzEyMzQgY2hyb21lL2Zhc3QvZm9ybXMvdGV4dGFyZWEtbWV0cmljcy5odG1sID0gQ1JB
U0gKKyIiIgorCitURVNUX0JVSUxERVJfTE9HX0ZJTEUgPSAiVEVTVF9idWlsZGVyLmxvZyIKK1RF
U1RfQVJDSElWRV9MT0dfRklMRSA9ICJURVNUX2FyY2hpdmUubG9nIgorVEVTVF9EVU1NWV9aSVBf
RklMRSA9ICJURVNUX3ppcGZpbGUuemlwIgorVEVTVF9FWFBFQ1RBVElPTlNfRklMRSA9ICJURVNU
X2V4cGVjdGF0aW9ucy50eHQiCisKK1dFQktJVF9CVUlMREVSX05VTUJFUiA9ICI5ODAwIgorV0VC
S0lUX0ZBSUxVUkVTID0gKAorICBbIkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvYW5pbWF0
ZWQtc3ZnLWFzLW1hc2suaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9i
YWNrZ3JvdW5kLWNsaXAtdGV4dC5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91
bmRzL21hc2stY29tcG9zaXRlLmh0bWwiLAorICAgIkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3Vu
ZHMvcmVwZWF0L21hc2stbmVnYXRpdmUtb2Zmc2V0LXJlcGVhdC5odG1sIiwKKyAgICJMYXlvdXRU
ZXN0cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTMuaHRtbCIsCisgICAiTGF5
b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9zdmctYXMtYmFja2dyb3VuZC02Lmh0bWwiLAorICAg
IkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvc3ZnLWFzLW1hc2suaHRtbCIsCisgICAiTGF5
b3V0VGVzdHMvZmFzdC9ibG9jay9mbG9hdC8wMTMuaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFz
dC9ibG9jay9mbG9hdC9uZXN0ZWQtY2xlYXJhbmNlLmh0bWwiLAorICAgIkxheW91dFRlc3RzL2Zh
c3QvYmxvY2svcG9zaXRpb25pbmcvMDQ3Lmh0bWwiXSkKKworQ0hST01JVU1fQkFTRUxJTkUgPSAi
Y2hyb21lL2Zhc3QvZm9ybXMvYmFzaWMtYnV0dG9ucy5odG1sIgorRVhQRUNURURfQ0hST01JVU1f
TE9DQUxfQkFTRUxJTkUgPSAiLi9jaHJvbWUvZmFzdC9mb3Jtcy9iYXNpYy1idXR0b25zLmh0bWwi
CitFWFBFQ1RFRF9DSFJPTUlVTV9VUkxfQkFTRUxJTkUgPSAoImh0dHA6Ly9zcmMuY2hyb21pdW0u
b3JnL3ZpZXd2Yy9jaHJvbWUvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
cnVuay9zcmMvd2Via2l0L2RhdGEvbGF5b3V0X3Rlc3RzL2Nocm9tZS8iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImZhc3QvZm9ybXMvYmFzaWMtYnV0dG9ucy5odG1sIikKKwor
V0VCS0lUX0JBU0VMSU5FID0gIkxheW91dFRlc3RzL2Zhc3QvZm9ybXMvMTE0MjMuaHRtbCIKK0VY
UEVDVEVEX1dFQktJVF9MT0NBTF9CQVNFTElORSA9ICIuL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
MTE0MjMuaHRtbCIKK0VYUEVDVEVEX1dFQktJVF9VUkxfQkFTRUxJTkUgPSAoCisgICAgImh0dHA6
Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay8iCisgICAgIkxheW91dFRl
c3RzL2Zhc3QvZm9ybXMvMTE0MjMuaHRtbCIpCisKK1RFU1RfWklQX0ZJTEUgPSAoImh0dHA6Ly9i
dWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvbGF5b3V0X3Rlc3RfcmVzdWx0cy8iCisgICAgICAg
ICAgICAgICAgICJ3ZWJraXQtcmVsLzIxNDMyL2xheW91dC10ZXN0LXJlc3VsdHMuemlwIikKKwor
RVhQRUNURURfUkVWSVNJT04gPSAiMjA4NjEiCitFWFBFQ1RFRF9CVUlMRF9OQU1FID0gIndlYmtp
dC1yZWwiCisKK1NWR19URVNUX0VYUEVDVEFUSU9OID0gKAorICAgICJMYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL2ZvcmVpZ24tb2JqZWN0LXNrZXctZXhwZWN0ZWQucG5nIikKK1NWR19URVNUX0VYUEVD
VEFUSU9OX1VQU1RSRUFNID0gKCJMYXlvdXRUZXN0cy9zdmcvY3VzdG9tLyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb3JlaWduLW9iamVjdC1za2V3LWV4cGVjdGVkLXVwc3Ry
ZWFtLnBuZyIpCitXRUJBUkNISVZFX1RFU1RfRVhQRUNUQVRJT04gPSAoIkxheW91dFRlc3RzL3dl
YmFyY2hpdmUvYWRvcHQtYXR0cmlidXRlLSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic3R5bGVkLWJvZHktd2ViYXJjaGl2ZS1leHBlY3RlZC53ZWJhcmNoaXZlIikKK0RPTV9URVNU
X0VYUEVDVEFUSU9OID0gKCJMYXlvdXRUZXN0cy9mYXN0L2RvbS8iCisgICAgICAgICAgICAgICAg
ICAgICAgICAiYXR0cmlidXRlLWRvd25jYXN0LXJpZ2h0LWV4cGVjdGVkLnR4dCIpCitET01fVEVT
VF9FWFBFQ1RBVElPTl9VUFNUUkVBTSA9ICgiTGF5b3V0VGVzdHMvZmFzdC9kb20vIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZS1kb3duY2FzdC1yaWdodC0iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQtdXBzdHJlYW0ucG5nIikK
KworVEVTVF9FWFBFQ1RBVElPTlMgPSAiIiIKK0JVRzEyMzQgV09OVEZJWCA6IExheW91dFRlc3Rz
L2Zhc3QvYmFja2dyb3VuZHMvc3ZnLWFzLWJhY2tncm91bmQtMy5odG1sID0gRkFJTAorQlVHMzQ1
NiBXSU4gOiBMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTYu
aHRtbCA9IENSQVNICitCVUc0NTY3IDogTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9zdmct
YXMtbWFzay5odG1sID0gUEFTUworV09OVEZJWCA6IExheW91dFRlc3RzL2Zhc3QvYmxvY2svID0g
RkFJTAorIiIiCisKK0VYUEVDVF9FWEFDVF9NQVRDSCA9ICJMYXlvdXRUZXN0cy9mYXN0L2JhY2tn
cm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTYuaHRtbCIKK0VYUEVDVF9HRU5FUkFMX01BVENIID0g
IkxheW91dFRlc3RzL2Zhc3QvYmxvY2svZmxvYXQvMDEzLmh0bWwiCitFWFBFQ1RfTk9fTUFUQ0gg
PSAiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9zdmctYXMtYmFja2dyb3VuZC05OS5odG1s
IgorCitXRUJLSVRfT1JHID0gIndlYmtpdC5vcmciCitDSFJPTUlVTV9PUkcgPSAiY2hyb21pdW0u
b3JnIgorCisKK2NsYXNzIEZhaWx1cmVGaW5kZXJUZXN0KG9iamVjdCk6CisKKyAgICBkZWYgcnVu
VGVzdHMoc2VsZik6CisgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBUcnVlCisKKyAgICAgICAg
dGVzdHMgPSBbInRlc3RXaGl0ZXNwYWNlSW5CdWlsZGVyTmFtZSIsCisgICAgICAgICAgICAgICAg
ICJ0ZXN0R2V0TGFzdEJ1aWxkIiwKKyAgICAgICAgICAgICAgICAgInRlc3RGaW5kTWF0Y2hlc0lu
QnVpbGRlck91dHB1dCIsCisgICAgICAgICAgICAgICAgICJ0ZXN0U2NyYXBlQnVpbGRlck91dHB1
dCIsCisgICAgICAgICAgICAgICAgICJ0ZXN0R2V0Q2hyb21pdW1CYXNlbGluZSIsCisgICAgICAg
ICAgICAgICAgICJ0ZXN0R2V0V2Via2l0QmFzZWxpbmUiLAorICAgICAgICAgICAgICAgICAidGVz
dFppcERvd25sb2FkIiwKKyAgICAgICAgICAgICAgICAgInRlc3RVc2VMb2NhbE91dHB1dCIsCisg
ICAgICAgICAgICAgICAgICJ0ZXN0VHJhbnNsYXRlQnVpbGRUb1ppcCIsCisgICAgICAgICAgICAg
ICAgICJ0ZXN0R2V0QmFzZWxpbmUiLAorICAgICAgICAgICAgICAgICAidGVzdEZpbmRUZXN0RXhw
ZWN0YXRpb25zIiwKKyAgICAgICAgICAgICAgICAgInRlc3RGdWxsIl0KKworICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBldmFsKHRlc3QgKyAiKCkiKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAg
ICAgICAgICAgICAgcHJpbnQgIlsgT0sgICAgICBdICVzIiAlIHRlc3QKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcHJpbnQgIlsgICAgRkFJTCBdICVzIiAlIHRlc3QKKyAgICAgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmludCAiWyAgRVJST1IgIF0gJXMiICUgdGVz
dAorICAgICAgICByZXR1cm4gYWxsX3Rlc3RzX3Bhc3NlZAorCisKK2RlZiBfZ2V0X2Jhc2ljX2Zh
aWx1cmVfZmluZGVyKCk6CisgICAgcmV0dXJuIEZhaWx1cmVGaW5kZXIoTm9uZSwgIldlYmtpdCIs
IEZhbHNlLCAiIiwgIi4iLCAxMCwgRmFsc2UpCisKKworZGVmIF90ZXN0X2xhc3RfYnVpbGQoZmFp
bHVyZV9maW5kZXIpOgorICAgIHRyeToKKyAgICAgICAgbGFzdF9idWlsZCA9IGZhaWx1cmVfZmlu
ZGVyLmdldF9sYXN0X2J1aWxkKCkKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBsYXN0X2J1aWxkIGlz
IG5vdCBlbXB0eSBhbmQgaXMgYSBudW1iZXIuCisgICAgICAgIGJ1aWxkID0gaW50KGxhc3RfYnVp
bGQpCisgICAgICAgIHJldHVybiAoYnVpbGQgPiAwKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0
dXJuIEZhbHNlCisKKworZGVmIHRlc3RfZ2V0X2xhc3RfYnVpbGQoKToKKyAgICB0ZXN0ID0gX2dl
dF9iYXNpY19mYWlsdXJlX2ZpbmRlcigpCisgICAgcmV0dXJuIF90ZXN0X2xhc3RfYnVpbGQodGVz
dCkKKworCitkZWYgdGVzdF93aGl0ZXNwYWNlX2luX2J1aWxkZXJfbmFtZSgpOgorICAgIHRlc3Qg
PSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0ZXN0LnNldF9wbGF0Zm9ybSgiV2Vi
a2l0ICh3ZWJraXQub3JnKSIpCisgICAgcmV0dXJuIF90ZXN0X2xhc3RfYnVpbGQodGVzdCkKKwor
CitkZWYgdGVzdF9zY3JhcGVfYnVpbGRlcl9vdXRwdXQoKToKKworICAgICMgVHJ5IG9uIHRoZSBk
ZWZhdWx0IGJ1aWxkZXIuCisgICAgdGVzdCA9IF9nZXRfYmFzaWNfZmFpbHVyZV9maW5kZXIoKQor
ICAgIHRlc3QuYnVpbGQgPSAiOTgwMCIKKyAgICBvdXRwdXQgPSB0ZXN0Ll9zY3JhcGVfYnVpbGRl
cl9vdXRwdXQoKQorICAgIGlmIG5vdCBvdXRwdXQ6CisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgIyBUcnkgb24gYSBjcmF6eSBidWlsZGVyIG9uIHRoZSBGWUkgd2F0ZXJmYWxsLgorICAgIHRl
c3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0ZXN0LmJ1aWxkID0gIjE3NjYi
CisgICAgdGVzdC5zZXRfcGxhdGZvcm0oIldlYmtpdCBMaW51eCAod2Via2l0Lm9yZykiKQorICAg
IG91dHB1dCA9IHRlc3QuX3NjcmFwZV9idWlsZGVyX291dHB1dCgpCisgICAgaWYgbm90IG91dHB1
dDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiB0ZXN0
X2ZpbmRfbWF0Y2hlc19pbl9idWlsZGVyX291dHB1dCgpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2lj
X2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0ZXN0LmV4Y2x1ZGVfa25vd25fZmFpbHVyZXMgPSBUcnVl
CisgICAgbWF0Y2hlcyA9IHRlc3QuX2ZpbmRfbWF0Y2hlc19pbl9idWlsZGVyX291dHB1dChURVNU
X0JVSUxERVJfT1VUUFVUKQorICAgICMgVmVyaWZ5IHRoYXQgd2UgZm91bmQgeCBtYXRjaGVzLgor
ICAgIGlmIGxlbihtYXRjaGVzKSAhPSAyOgorICAgICAgICBwcmludCAiRGlkIG5vdCBmaW5kIGFs
bCB1bmV4cGVjdGVkIGZhaWx1cmVzLiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICB0ZXN0
LmV4Y2x1ZGVfa25vd25fZmFpbHVyZXMgPSBGYWxzZQorICAgIG1hdGNoZXMgPSB0ZXN0Ll9maW5k
X21hdGNoZXNfaW5fYnVpbGRlcl9vdXRwdXQoVEVTVF9CVUlMREVSX09VVFBVVCkKKyAgICBpZiBs
ZW4obWF0Y2hlcykgIT0gMzoKKyAgICAgICAgcHJpbnQgIkRpZCBub3QgZmluZCBhbGwgZmFpbHVy
ZXMuIgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBfdGVz
dF9iYXNlbGluZSh0ZXN0X25hbWUsIGV4cGVjdGVkX2xvY2FsLCBleHBlY3RlZF91cmwpOgorICAg
IHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICAjIFRlc3QgYmFzZWxpbmUg
dGhhdCBpcyBvYnZpb3VzbHkgaW4gQ2hyb21pdW0ncyB0cmVlLgorICAgIGJhc2VsaW5lID0gdGVz
dC5fZ2V0X2Jhc2VsaW5lKHRlc3RfbmFtZSwgIi4iLCBGYWxzZSkKKyAgICB0cnk6CisgICAgICAg
IG9zLnJlbW92ZShiYXNlbGluZS5sb2NhbF9maWxlKQorICAgICAgICBpZiAoYmFzZWxpbmUubG9j
YWxfZmlsZSAhPSBleHBlY3RlZF9sb2NhbCBvcgorICAgICAgICAgICAgYmFzZWxpbmUuYmFzZWxp
bmVfdXJsICE9IGV4cGVjdGVkX3VybCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBl
eGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKworZGVmIHRl
c3RfZ2V0X2Nocm9taXVtX2Jhc2VsaW5lKCk6CisgICAgcmV0dXJuIF90ZXN0X2Jhc2VsaW5lKENI
Uk9NSVVNX0JBU0VMSU5FLCBFWFBFQ1RFRF9DSFJPTUlVTV9MT0NBTF9CQVNFTElORSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9DSFJPTUlVTV9VUkxfQkFTRUxJTkUpCisKKwor
ZGVmIHRlc3RfZ2V0X3dlYmtpdF9iYXNlbGluZSgpOgorICAgIHJldHVybiBfdGVzdF9iYXNlbGlu
ZShXRUJLSVRfQkFTRUxJTkUsIEVYUEVDVEVEX1dFQktJVF9MT0NBTF9CQVNFTElORSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9XRUJLSVRfVVJMX0JBU0VMSU5FKQorCisKK2Rl
ZiB0ZXN0X3VzZV9sb2NhbF9vdXRwdXQoKToKKyAgICB0ZXN0X3Jlc3VsdCA9IFRydWUKKyAgICB0
cnk6CisgICAgICAgIF93cml0ZV9maWxlKFRFU1RfQlVJTERFUl9MT0dfRklMRSwgVEVTVF9CVUlM
REVSX09VVFBVVCkKKyAgICAgICAgX3dyaXRlX2ZpbGUoVEVTVF9BUkNISVZFX0xPR19GSUxFLCBU
RVNUX0FSQ0hJVkVfT1VUUFVUKQorICAgICAgICBfd3JpdGVfZmlsZShURVNUX0VYUEVDVEFUSU9O
U19GSUxFLCBURVNUX1RFU1RfRVhQRUNUQVRJT05TKQorICAgICAgICB6aXAgPSB6aXBmaWxlLlpp
cEZpbGUoVEVTVF9EVU1NWV9aSVBfRklMRSwgJ3cnKQorICAgICAgICB6aXAud3JpdGUoVEVTVF9C
VUlMREVSX0xPR19GSUxFLCBURVNUX0ZBSUxVUkVfMSkKKyAgICAgICAgemlwLndyaXRlKFRFU1Rf
QlVJTERFUl9MT0dfRklMRSwgVEVTVF9GQUlMVVJFXzIpCisgICAgICAgIHppcC53cml0ZShURVNU
X0JVSUxERVJfTE9HX0ZJTEUsIFRFU1RfRkFJTFVSRV8zKQorICAgICAgICB6aXAuY2xvc2UoKQor
ICAgICAgICB0ZXN0ID0gX2dldF9iYXNpY19mYWlsdXJlX2ZpbmRlcigpCisgICAgICAgIHRlc3Qu
YXJjaGl2ZV9zdGVwX2xvZ19maWxlID0gVEVTVF9BUkNISVZFX0xPR19GSUxFCisgICAgICAgIHRl
c3QuYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGUgPSBURVNUX0JVSUxERVJfTE9HX0ZJTEUKKyAgICAg
ICAgdGVzdC50ZXN0X2V4cGVjdGF0aW9uc19maWxlID0gVEVTVF9FWFBFQ1RBVElPTlNfRklMRQor
ICAgICAgICB0ZXN0LnppcF9maWxlID0gVEVTVF9EVU1NWV9aSVBfRklMRQorICAgICAgICB0ZXN0
LmRvbnRfZG93bmxvYWQgPSBUcnVlCisgICAgICAgIHRlc3QuZXhjbHVkZV9rbm93bl9mYWlsdXJl
cyA9IFRydWUKKyAgICAgICAgdGVzdC5kZWxldGVfemlwX2ZpbGUgPSBGYWxzZQorICAgICAgICBm
YWlsdXJlcyA9IHRlc3QuZ2V0X2ZhaWx1cmVzKCkKKyAgICAgICAgaWYgbm90IGZhaWx1cmVzIG9y
IGxlbihmYWlsdXJlcykgIT0gMjoKKyAgICAgICAgICAgIHByaW50ICJEaWQgbm90IGdldCBleHBl
Y3RlZCBudW1iZXIgb2YgZmFpbHVyZXMgOiIKKyAgICAgICAgICAgIGZvciBmYWlsdXJlIGluIGZh
aWx1cmVzOgorICAgICAgICAgICAgICAgIHByaW50IGZhaWx1cmUudGVzdF9wYXRoCisgICAgICAg
ICAgICB0ZXN0X3Jlc3VsdCA9IEZhbHNlCisgICAgZmluYWxseToKKyAgICAgICAgb3MucmVtb3Zl
KFRFU1RfQlVJTERFUl9MT0dfRklMRSkKKyAgICAgICAgb3MucmVtb3ZlKFRFU1RfQVJDSElWRV9M
T0dfRklMRSkKKyAgICAgICAgb3MucmVtb3ZlKFRFU1RfRVhQRUNUQVRJT05TX0ZJTEUpCisgICAg
ICAgIG9zLnJlbW92ZShURVNUX0RVTU1ZX1pJUF9GSUxFKQorICAgIHJldHVybiB0ZXN0X3Jlc3Vs
dAorCisKK2RlZiBfd3JpdGVfZmlsZShmaWxlbmFtZSwgY29udGVudHMpOgorICAgIG15ZmlsZSA9
IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICBteWZpbGUud3JpdGUoY29udGVudHMpCisgICAgbXlm
aWxlLmNsb3NlKCkKKworCitkZWYgdGVzdF96aXBfZG93bmxvYWQoKToKKyAgICB0ZXN0ID0gX2dl
dF9iYXNpY19mYWlsdXJlX2ZpbmRlcigpCisgICAgdHJ5OgorICAgICAgICB0ZXN0Ll9kb3dubG9h
ZF9maWxlKFRFU1RfWklQX0ZJTEUsICJ0ZXN0LnppcCIsICJiIikgIyAiYiIgLT4gYmluYXJ5Cisg
ICAgICAgIG9zLnJlbW92ZSgidGVzdC56aXAiKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4
Y2VwdDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHRlc3RfdHJhbnNsYXRlX2J1aWxk
X3RvX3ppcCgpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0
ZXN0LmJ1aWxkID0gV0VCS0lUX0JVSUxERVJfTlVNQkVSCisgICAgcmV2aXNpb24sIGJ1aWxkX25h
bWUgPSB0ZXN0Ll9nZXRfcmV2aXNpb25fYW5kX2J1aWxkX2Zyb21fYXJjaGl2ZV9zdGVwKCkKKyAg
ICBpZiByZXZpc2lvbiAhPSBFWFBFQ1RFRF9SRVZJU0lPTiBvciBidWlsZF9uYW1lICE9IEVYUEVD
VEVEX0JVSUxEX05BTUU6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisK
KworZGVmIHRlc3RfZ2V0X2Jhc2VsaW5lKCk6CisgICAgdGVzdCA9IF9nZXRfYmFzaWNfZmFpbHVy
ZV9maW5kZXIoKQorICAgIHJlc3VsdCA9IFRydWUKKyAgICB0ZXN0LnBsYXRmb3JtID0gImNocm9t
aXVtLW1hYyIKKyAgICBiYXNlbGluZSA9IHRlc3QuX2dldF9iYXNlbGluZShXRUJBUkNISVZFX1RF
U1RfRVhQRUNUQVRJT04sICIuIikKKyAgICBpZiBub3QgYmFzZWxpbmUubG9jYWxfZmlsZSBvciBi
YXNlbGluZS5iYXNlbGluZV91cmwuZmluZChXRUJLSVRfT1JHKSA9PSAtMToKKyAgICAgICAgcmVz
dWx0ID0gRmFsc2UKKyAgICAgICAgcHJpbnQgIldlYmFyY2hpdmUgbGF5b3V0IHRlc3Qgbm90IGZv
dW5kIGF0IHdlYmtpdC5vcmc6ICVzIiAlIHVybAorICAgIHRlc3QucGxhdGZvcm0gPSAiY2hyb21p
dW0td2luIgorICAgIGJhc2VsaW5lID0gdGVzdC5fZ2V0X2Jhc2VsaW5lKFNWR19URVNUX0VYUEVD
VEFUSU9OLCAiLiIpCisgICAgaWYgKG5vdCBiYXNlbGluZS5sb2NhbF9maWxlIG9yCisgICAgICAg
IGJhc2VsaW5lLmJhc2VsaW5lX3VybC5maW5kKENIUk9NSVVNX09SRykgPT0gLTEpOgorICAgICAg
ICByZXN1bHQgPSBGYWxzZQorICAgICAgICBwcmludCAiU1ZHIGxheW91dCB0ZXN0IGZvdW5kIGF0
ICVzLCBub3QgY2hyb21pdW0ub3JnIiAlIHVybAorICAgIGJhc2VsaW5lID0gdGVzdC5fZ2V0X2Jh
c2VsaW5lKFNWR19URVNUX0VYUEVDVEFUSU9OLCAiLiIsIFRydWUpCisgICAgaWYgbm90IGJhc2Vs
aW5lLmxvY2FsX2ZpbGUgb3IgYmFzZWxpbmUuYmFzZWxpbmVfdXJsLmZpbmQoV0VCS0lUX09SRykg
PT0gLTE6CisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIHByaW50ICJVcHN0cmVhbSBT
VkcgbGF5b3V0IHRlc3QgTk9UIGZvdW5kIGF0IHdlYmtpdC5vcmchIgorICAgIGJhc2VsaW5lID0g
dGVzdC5fZ2V0X2Jhc2VsaW5lKERPTV9URVNUX0VYUEVDVEFUSU9OLCAiLiIsIFRydWUpCisgICAg
aWYgKG5vdCBiYXNlbGluZS5sb2NhbF9maWxlIG9yCisgICAgICAgIGJhc2VsaW5lLmJhc2VsaW5l
X3VybC5maW5kKCIvcGxhdGZvcm0vIikgPiAtMSk6CisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisg
ICAgICAgIHByaW50ICgiVXBzdHJlYW0gU1ZHIGxheW91dCB0ZXN0IGZvdW5kIGluIGEgIgorICAg
ICAgICAgICAgICAgInBsYXRmb3JtIGRpcmVjdG9yeTogJXMiICUgdXJsKQorICAgIG9zLnJlbW92
ZShXRUJBUkNISVZFX1RFU1RfRVhQRUNUQVRJT04pCisgICAgb3MucmVtb3ZlKFNWR19URVNUX0VY
UEVDVEFUSU9OKQorICAgIG9zLnJlbW92ZShTVkdfVEVTVF9FWFBFQ1RBVElPTl9VUFNUUkVBTSkK
KyAgICBvcy5yZW1vdmUoRE9NX1RFU1RfRVhQRUNUQVRJT05fVVBTVFJFQU0pCisgICAgZGVsZXRl
X2RpcigiTGF5b3V0VGVzdHMiKQorICAgIHJldHVybiByZXN1bHQKKworCitkZWYgZGVsZXRlX2Rp
cihkaXJlY3RvcnkpOgorICAgICIiIiBSZWN1cnNpdmVseSBkZWxldGVzIGVtcHR5IGRpcmVjdG9y
aWVzIGdpdmVuIGEgcm9vdC4KKyAgICBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlv
biBpZiB0aGV5IGFyZSBub3QgZW1wdHkuICIiIgorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBp
biBvcy53YWxrKGRpcmVjdG9yeSwgdG9wZG93bj1GYWxzZSk6CisgICAgICAgIGZvciBkIGluIGRp
cnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5q
b2luKHJvb3QsIGQpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MK
KyAgICBvcy5ybWRpcihkaXJlY3RvcnkpCisKKworZGVmIHRlc3RfZnVsbCgpOgorICAgICIiIiBW
ZXJpZmllcyB0aGF0IHRoZSBlbnRpcmUgc3lzdGVtIHdvcmtzIGVuZC10by1lbmQuICIiIgorICAg
IHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICB0ZXN0LmJ1aWxkID0gV0VC
S0lUX0JVSUxERVJfTlVNQkVSCisgICAgdGVzdC5kb250X2Rvd25sb2FkID0gVHJ1ZSAgIyBEcnkg
cnVuIG9ubHksIG5vIGRvd25sb2FkaW5nIG5lZWRlZC4KKyAgICBmYWlsdXJlcyA9IHRlc3QuZ2V0
X2ZhaWx1cmVzKCkKKyAgICAjIFZlcmlmeSB0aGF0IHRoZSBtYXggZmFpbHVyZXMgcGFyYW1ldGVy
IHdvcmtzLgorICAgIGlmIG5vdCBmYWlsdXJlcyBvciBsZW4oZmFpbHVyZXMpID4gMTA6CisgICAg
ICAgICJHb3Qgbm8gZmFpbHVyZXMgb3IgdG9vIG1hbnkgZmFpbHVyZXMuIgorICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICMgVmVyaWZ5IHRoZSBmYWlsdXJlcyBtYXRjaCB0aGUgbGlzdCBvZiBl
eHBlY3RlZCBmYWlsdXJlcy4KKyAgICBmb3IgZmFpbHVyZSBpbiBmYWlsdXJlczoKKyAgICAgICAg
aWYgbm90IChmYWlsdXJlLnRlc3RfcGF0aCBpbiBXRUJLSVRfRkFJTFVSRVMpOgorICAgICAgICAg
ICAgcHJpbnQgIkZvdW5kIGEgZmFpbHVyZSBJIGRpZCBub3QgZXhwZWN0IHRvIHNlZS4iCisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHRlc3RfZmlu
ZF90ZXN0X2V4cGVjdGF0aW9ucygpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmlu
ZGVyKCkKKyAgICB0ZXN0Ll90ZXN0X2V4cGVjdGF0aW9uc19jYWNoZSA9IFRFU1RfRVhQRUNUQVRJ
T05TCisgICAgbWF0Y2ggPSB0ZXN0Ll9nZXRfdGVzdF9leHBlY3RhdGlvbnNfbGluZShFWFBFQ1Rf
RVhBQ1RfTUFUQ0gpCisgICAgaWYgbm90IG1hdGNoOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAg
ICBtYXRjaCA9IHRlc3QuX2dldF90ZXN0X2V4cGVjdGF0aW9uc19saW5lKEVYUEVDVF9HRU5FUkFM
X01BVENIKQorICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgbWF0
Y2ggPSB0ZXN0Ll9nZXRfdGVzdF9leHBlY3RhdGlvbnNfbGluZShFWFBFQ1RfTk9fTUFUQ0gpCisg
ICAgcmV0dXJuIG5vdCBtYXRjaAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAg
ZmZ0ID0gRmFpbHVyZUZpbmRlclRlc3QoKQorICAgIHJlc3VsdCA9IGZmdC5ydW5UZXN0cygpCisg
ICAgaWYgcmVzdWx0OgorICAgICAgICBwcmludCAiQWxsIHRlc3RzIHBhc3NlZC4iCisgICAgZWxz
ZToKKyAgICAgICAgcHJpbnQgIk5vdCBhbGwgdGVzdHMgcGFzc2VkLiIKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0
bWxfZ2VuZXJhdG9yLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvaHRtbF9nZW5lcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTRlOGZjNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9y
LnB5CkBAIC0wLDAgKzEsMjU0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IHJlCisKK2Zyb20gZmFpbHVyZSBpbXBvcnQgRmFpbHVyZQorCitD
SFJPTUlVTV9CVUdfVVJMID0gImh0dHA6Ly9jcmJ1Zy5jb20vIgorCisKK2RlZiBleHRyYWN0X2Zp
cnN0X3ZhbHVlKHN0cmluZywgcmVnZXgpOgorICAgIG0gPSByZS5zZWFyY2gocmVnZXgsIHN0cmlu
ZykKKyAgICBpZiBtIGFuZCBtLmdyb3VwKDEpOgorICAgICAgICByZXR1cm4gbS5ncm91cCgxKQor
ICAgIHJldHVybiBOb25lCisKKyMgVE9ETyhnd2lsc29uKTogUmVmYWN0b3IgSFRNTCBnZW5lcmF0
aW9uIGludG8gYSBIVE1MIHRlbXBsYXRpbmcgc3lzdGVtIGxpa2UKKyMgRGphbmdvIHRlbXBsYXRl
cy4KKworCitjbGFzcyBIVE1MR2VuZXJhdG9yKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgZmFpbHVyZXMsIG91dHB1dF9kaXIsIGJ1aWxkLCBwbGF0Zm9ybSwKKyAgICAgICAgICAg
ICAgICAgZXhjbHVkZV9rbm93bl9mYWlsdXJlcyk6CisgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBm
YWlsdXJlcworICAgICAgICBzZWxmLm91dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNl
bGYuYnVpbGQgPSBidWlsZAorICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAg
ICAgc2VsZi5leGNsdWRlX2tub3duX2ZhaWx1cmVzID0gZXhjbHVkZV9rbm93bl9mYWlsdXJlcwor
ICAgICAgICBzZWxmLmltYWdlX3NpemUgPSAiMjAwcHgiCisKKyAgICBkZWYgZ2VuZXJhdGVfaHRt
bChzZWxmKToKKyAgICAgICAgaHRtbCA9ICIiCisgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAg
ICAgICAgICAgPGh0bWw+CisgICAgICAgICAgICAgICAgICA8aGVhZD4KKyAgICAgICAgICAgICAg
ICAgICAgPHN0eWxlPgorICAgICAgICAgICAgICAgICAgICAgIGJvZHkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgIGgyIHsKKyAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgLm1haW5UYWJsZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kOiAjNjY2NjY2OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAubWFpblRhYmxlIHRkICwgLm1haW5UYWJsZSB0aCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgLnRpdGxlbGluayB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb250LXNpemU6IDE4cHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdl
aWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgLmRldGFpbCB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDNweDsKKyAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIDwvc3R5bGU+CisgICAgICAgICAgICAgICAg
ICA8L2hlYWQ+CisgICAgICAgICAgICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgICAgICAiIiIK
KyAgICAgICAgdGl0bGUgPSAiQWxsIGZhaWx1cmVzIgorICAgICAgICBpZiBzZWxmLmV4Y2x1ZGVf
a25vd25fZmFpbHVyZXM6CisgICAgICAgICAgICB0aXRsZSA9ICJSZWdyZXNzaW9ucyIKKworICAg
ICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgIDxoMT4lcyBmb3IgYnVpbGQgJXMgKCVz
KTwvaDE+CisgICAgICAgICAgICAgICAgIiIiICUgKHRpdGxlLCBzZWxmLmJ1aWxkLCBzZWxmLnBs
YXRmb3JtKQorCisgICAgICAgIHRlc3RfbnVtYmVyID0gMAorCisgICAgICAgICMgVE9ETyhnd2ls
c29uKTogUmVmYWN0b3IgdGhpcyB0byBkbyBhIGpvaW4oKSBvbiBhbiBhcnJheSBvZiBIVE1MLAor
ICAgICAgICAjIHJhdGhlciB0aGFuIGFwcGVuZGluZyBzdHJpbmdzIGluIGEgbG9vcC4KKyAgICAg
ICAgZm9yIGZhaWx1cmUgaW4gc2VsZi5mYWlsdXJlczoKKyAgICAgICAgICAgIHRlc3RfbnVtYmVy
ICs9IDEKKyAgICAgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgPHRhYmxlIHN0
eWxlPSJib3JkZXI6IDFweCBzb2xpZCBibGFjazsgd2lkdGg6IDEyMDBweDsKKyAgICAgICAgICAg
ICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7IiBjZWxsc3BhY2luZz0iMCIgY2VsbHBh
ZGRpbmc9IjQiPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8
dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNDREVDREU7CisgICAgICAgICAgICAgICAgICAg
ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7Ij4KKyAgICAgICAgICAgICAgICAgICAg
PHNwYW4gY2xhc3M9InRpdGxlbGluayI+JXMuJm5ic3A7Jm5ic3A7JXM8L3NwYW4+PC90ZD48L3Ry
PgorICAgICAgICAgICAgICAgICAgPHRyPjx0ZD4mbmJzcDsmbmJzcDtMYXN0IG1vZGlmaWVkOiA8
YSBocmVmPSIlcyI+JXM8L2E+CisgICAgICAgICAgICAgICAgIiIiICUgKHRlc3RfbnVtYmVyLCBm
YWlsdXJlLnRlc3RfcGF0aCwgZmFpbHVyZS5nZXRfdGVzdF9ob21lKCksCisgICAgICAgICAgICAg
ICAgICAgICAgIGZhaWx1cmUudGVzdF9hZ2UpCisgICAgICAgICAgICBodG1sICs9ICI8ZGl2IGNs
YXNzPSdkZXRhaWwnPiIKKyAgICAgICAgICAgIGh0bWwgKz0gIjxwcmU+JXM8L3ByZT4iICUgXAor
ICAgICAgICAgICAgICAgICAgICAoc2VsZi5fZ2VuZXJhdGVfbGlua2lmaWVkX3RleHRfZXhwZWN0
YXRpb25zKGZhaWx1cmUpKQorCisgICAgICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX2Zs
YWtpbmVzc19odG1sKGZhaWx1cmUpCisKKyAgICAgICAgICAgIGlmIGZhaWx1cmUuY3Jhc2hlZDoK
KyAgICAgICAgICAgICAgICBodG1sICs9ICI8ZGl2PlRlc3QgPGI+Q1JBU0hFRDwvYj48L2Rpdj4i
CisgICAgICAgICAgICBlbGlmIGZhaWx1cmUudGltZW91dDoKKyAgICAgICAgICAgICAgICBodG1s
ICs9ICI8ZGl2PlRlc3QgPGI+VElNRUQgT1VUPC9iPjwvZGl2PiIKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDx0
YWJsZSBjbGFzcz0ibWFpblRhYmxlIiBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTU+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
dGggd2lkdGg9JzI1MCc+Jm5ic3A7PC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
dGggd2lkdGg9JzIwMCc+RXhwZWN0ZWQ8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDx0aCB3aWR0aD0nMjAwJz5BY3R1YWw8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDx0aCB3aWR0aD0nMjAwJz5EaWZmZXJlbmNlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8dGggd2lkdGg9JzIwMCc+VXBzdHJlYW08L3RoPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAgICAg
ICBpZiBmYWlsdXJlLnRleHRfZGlmZl9taXNtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgaHRt
bCArPSBzZWxmLl9nZW5lcmF0ZV90ZXh0X2ZhaWx1cmVfaHRtbChmYWlsdXJlKQorCisgICAgICAg
ICAgICAgICAgaWYgZmFpbHVyZS5pbWFnZV9taXNtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAg
aHRtbCArPSBzZWxmLl9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX2h0bWwoZmFpbHVyZSkKKworICAg
ICAgICAgICAgICAgIGh0bWwgKz0gIjwvdGFibGU+IgorICAgICAgICAgICAgaHRtbCArPSAiPC9k
aXY+PC90ZD48L3RyPjwvdGFibGU+PGJyPiIKKyAgICAgICAgaHRtbCArPSAiIiI8L2JvZHk+PC9o
dG1sPiIiIgorCisgICAgICAgICMgVE9ETyhnd2lsc29uKTogQ2hhbmdlIHRoaXMgZmlsZW5hbWUg
dG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LgorICAgICAgICBodG1sX2ZpbGVuYW1lID0g
IiVzL2luZGV4LSVzLmh0bWwiICUgKHNlbGYub3V0cHV0X2Rpciwgc2VsZi5idWlsZCkKKyAgICAg
ICAgaHRtbEZpbGUgPSBvcGVuKGh0bWxfZmlsZW5hbWUsICd3JykKKyAgICAgICAgaHRtbEZpbGUu
d3JpdGUoaHRtbCkKKyAgICAgICAgaHRtbEZpbGUuY2xvc2UoKQorICAgICAgICByZXR1cm4gaHRt
bF9maWxlbmFtZQorCisgICAgZGVmIF9nZW5lcmF0ZV9saW5raWZpZWRfdGV4dF9leHBlY3RhdGlv
bnMoc2VsZiwgZmFpbHVyZSk6CisgICAgICAgIGlmIG5vdCBmYWlsdXJlLnRlc3RfZXhwZWN0YXRp
b25zX2xpbmU6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgYnVnX251bWJlciA9IGV4
dHJhY3RfZmlyc3RfdmFsdWUoZmFpbHVyZS50ZXN0X2V4cGVjdGF0aW9uc19saW5lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQlVHKFxkKykiKQorICAgICAgICBp
ZiBub3QgYnVnX251bWJlciBvciBidWdfbnVtYmVyID09ICIiOgorICAgICAgICAgICAgcmV0dXJu
ICIiCisgICAgICAgIHJldHVybiBmYWlsdXJlLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUucmVwbGFj
ZSgiQlVHIiArIGJ1Z19udW1iZXIsCisgICAgICAgICAgICAiPGEgaHJlZj0nJXMlcyc+QlVHJXM8
L2E+IiAlIChDSFJPTUlVTV9CVUdfVVJMLCBidWdfbnVtYmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVnX251bWJlcikpCisKKyAgICAjIFRPRE8oZ3dpbHNv
bik6IEZpeCB0aGlzIHNvIHRoYXQgaXQgc2hvd3MgdGhlIGxhc3QgdGVuIHJ1bnMKKyAgICAjIG5v
dCBqdXN0IGEgIm1ldGVyIiBvZiBmbGFraW5lc3MuCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZsYWtp
bmVzc19odG1sKHNlbGYsIGZhaWx1cmUpOgorICAgICAgICBodG1sID0gIiIKKyAgICAgICAgaWYg
bm90IGZhaWx1cmUuZmxha2luZXNzOgorICAgICAgICAgICAgcmV0dXJuIGh0bWwKKyAgICAgICAg
aHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICA8dGFibGU+CisgICAgICAgICAgICAgICAgICA8
dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5GbGFraW5lc3M6ICglcyk8L3RkPgorICAgICAg
ICAgICAgICAgICIiIiAlIChmYWlsdXJlLmZsYWtpbmVzcykKKworICAgICAgICBmbGFreV9yZWQg
PSBpbnQocm91bmQoaW50KGZhaWx1cmUuZmxha2luZXNzKSAvIDUpKQorICAgICAgICBmbGFreV9n
cmVlbiA9IDEwIC0gZmxha3lfcmVkCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGZsYWt5X2dy
ZWVuKToKKyAgICAgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgICAgIDx0ZCBz
dHlsZT0iYmFja2dyb3VuZDogZ3JlZW4iPiZuYnNwOyZuYnNwOzwvdGQ+CisgICAgICAgICAgICAg
ICAgICAgICIiIgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBmbGFreV9yZWQpOgorICAgICAg
ICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJiYWNrZ3Jv
dW5kOiByZWQiPiZuYnNwOyZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICIiIgorICAg
ICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAg
ICA8L3RhYmxlPjxicj4KKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGh0bWwK
KworICAgIGRlZiBfZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX2h0bWwoc2VsZiwgZmFpbHVyZSk6Cisg
ICAgICAgIGh0bWwgPSAiIgorICAgICAgICBpZiBub3QgZmFpbHVyZS5nZXRfdGV4dF9iYXNlbGlu
ZV9sb2NhdGlvbigpOgorICAgICAgICAgICAgcmV0dXJuICIiIjx0cj48dGQgY29sc3Bhbj0nNSc+
VGhpcyB0ZXN0IGxpa2VseSBkb2VzIG5vdCBoYXZlIGFueQorICAgICAgICAgICAgICAgICAgICAg
IFRFWFQgYmFzZWxpbmUgZm9yIHRoaXMgcGxhdGZvcm0sIG9yIG9uZSBjb3VsZCBub3QKKyAgICAg
ICAgICAgICAgICAgICAgICBiZSBmb3VuZC48L3RkPjwvdHI+IiIiCisgICAgICAgIGh0bWwgKz0g
IiIiCisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAg
ICAgICAgICAgICAgICAgICAgICA8Yj48YSBocmVmPSIlcyI+UmVuZGVyIFRyZWUgRHVtcDwvYT48
L2I+PGJyPgorICAgICAgICAgICAgICAgICAgICAgIDxiPiVzPC9iPiBiYXNlbGluZTxicj4KKyAg
ICAgICAgICAgICAgICAgICAgICBBZ2U6ICVzPGJyPgorICAgICAgICAgICAgICAgICAgICA8L3Rk
PgorICAgICAgICAgICAgICAgICIiIiAlIChmYWlsdXJlLnRleHRfYmFzZWxpbmVfdXJsLAorICAg
ICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF90ZXh0X2Jhc2VsaW5lX2xvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUudGV4dF9iYXNlbGluZV9hZ2UpCisgICAg
ICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX3RkKAorICAgICAgICAgICAg
ZmFpbHVyZS5nZXRfZXhwZWN0ZWRfdGV4dF9maWxlbmFtZSgpLCAiZXhwZWN0ZWQgdGV4dCIpCisg
ICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX3RkKAorICAgICAgICAg
ICAgZmFpbHVyZS5nZXRfYWN0dWFsX3RleHRfZmlsZW5hbWUoKSwgImFjdHVhbCB0ZXh0IikKKyAg
ICAgICAgaHRtbCArPSBzZWxmLl9nZW5lcmF0ZV90ZXh0X2ZhaWx1cmVfdGQoCisgICAgICAgICAg
ICBmYWlsdXJlLmdldF90ZXh0X2RpZmZfZmlsZW5hbWUoKSwgInRleHQgZGlmZiIpCisgICAgICAg
IGh0bWwgKz0gIjx0ZD4mbmJzcDs8L3RkPiIKKyAgICAgICAgaHRtbCArPSAiPC90cj4iCisgICAg
ICAgIHJldHVybiBodG1sCisKKyAgICBkZWYgX2dlbmVyYXRlX3RleHRfZmFpbHVyZV90ZChzZWxm
LCBmaWxlX3BhdGgsIGFuY2hvcl90ZXh0KToKKyAgICAgICAgcmV0dXJuICgiPHRkIGFsaWduPWNl
bnRlcj4iCisgICAgICAgICAgICAgICAgIjxhIGhyZWY9Jy4vbGF5b3V0LXRlc3QtcmVzdWx0cy0l
cy8lcyc+JXM8L2E+PC90ZD4iKSAlICgKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkLCBmaWxl
X3BhdGgsIGFuY2hvcl90ZXh0KQorCisgICAgZGVmIF9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX2h0
bWwoc2VsZiwgZmFpbHVyZSk6CisgICAgICAgIGlmIG5vdCBmYWlsdXJlLmdldF9pbWFnZV9iYXNl
bGluZV9sb2NhdGlvbigpOgorICAgICAgICAgICAgcmV0dXJuICIiIjx0cj48dGQgY29sc3Bhbj0n
NSc+VGhpcyB0ZXN0IGxpa2VseSBkb2VzIG5vdCBoYXZlIGFueQorICAgICAgICAgICAgICAgICAg
ICAgIElNQUdFIGJhc2VsaW5lIGZvciB0aGlzIHBsYXRmb3JtLCBvciBvbmUgY291bGQgbm90IGJl
CisgICAgICAgICAgICAgICAgICAgICAgZm91bmQuPC90ZD48L3RyPiIiIgorICAgICAgICBodG1s
ID0gIiIiCisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkPjxiPjxhIGhyZWY9IiVzIj5Q
aXhlbCBEdW1wPC9hPjwvYj48YnI+CisgICAgICAgICAgICA8Yj4lczwvYj4gYmFzZWxpbmU8YnI+
QWdlOiAlczwvdGQ+CisgICAgICAgICAgIiIiICUgKGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVfdXJs
LAorICAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF9pbWFnZV9iYXNlbGluZV9sb2NhdGlvbigp
LAorICAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX2FnZSkKKyAgICAgICAg
aHRtbCArPSBzZWxmLl9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX3RkKAorICAgICAgICAgICAgZmFp
bHVyZS5nZXRfZXhwZWN0ZWRfaW1hZ2VfZmlsZW5hbWUoKSkKKyAgICAgICAgaHRtbCArPSBzZWxm
Ll9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX3RkKAorICAgICAgICAgICAgZmFpbHVyZS5nZXRfYWN0
dWFsX2ltYWdlX2ZpbGVuYW1lKCkpCisgICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVfaW1h
Z2VfZmFpbHVyZV90ZCgKKyAgICAgICAgICAgIGZhaWx1cmUuZ2V0X2ltYWdlX2RpZmZfZmlsZW5h
bWUoKSkKKyAgICAgICAgaWYgKGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVfdXBzdHJlYW1fbG9jYWwg
YW5kCisgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3Vwc3RyZWFtX2xvY2FsICE9
ICIiKToKKyAgICAgICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVfaW1hZ2VfZmFpbHVyZV90
ZCgKKyAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF9pbWFnZV91cHN0cmVhbV9maWxlbmFtZSgp
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAgICAg
ICAgICAgPHRkPiZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICBo
dG1sICs9ICI8L3RyPiIKKyAgICAgICAgcmV0dXJuIGh0bWwKKworICAgIGRlZiBfZ2VuZXJhdGVf
aW1hZ2VfZmFpbHVyZV90ZChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiAoIjx0ZD48
YSBocmVmPScuL2xheW91dC10ZXN0LXJlc3VsdHMtJXMvJXMnPiIKKyAgICAgICAgICAgICAgICAi
PGltZyBzdHlsZT0nd2lkdGg6ICVzJyBzcmM9Jy4vbGF5b3V0LXRlc3QtcmVzdWx0cy0lcy8lcycg
Lz4iCisgICAgICAgICAgICAgICAgIjwvYT48L3RkPiIpICUgKHNlbGYuYnVpbGQsIGZpbGVuYW1l
LCBzZWxmLmltYWdlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
YnVpbGQsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIuYmF0IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2
ZXIuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGRkMjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5iYXQKQEAgLTAsMCArMSBAQAorJX5kcDAuLlwuLlwu
LlwuLlx0aGlyZF9wYXJ0eVxweXRob25fMjRccHl0aG9uLmV4ZSAlfmRwMGh0dHBfc2VydmVyLnB5
ICUqCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmY2I0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9o
dHRwX3NlcnZlci5weQpAQCAtMCwwICsxLDI3OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
IENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBs
aWdodHRwZCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3Vi
cHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0
IHVybGxpYgorCitpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQoraW1wb3J0IHBhdGhfdXRpbHMKKwor
Y2xhc3MgSHR0cGROb3RTdGFydGVkKEV4Y2VwdGlvbik6IHBhc3MKKworZGVmIHJlbW92ZV9sb2df
ZmlsZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6CisgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRl
cikKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0
YXJ0c193aXRoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIs
IGZpbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQorCisKK2NsYXNzIExpZ2h0
dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgorICAgICMgV2Via2l0IHRlc3Rz
CisgICAgdHJ5OgorICAgICAgICBfd2Via2l0X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2h0dHAnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMnKQorICAgICAg
ICBfanNfdGVzdF9yZXNvdXJjZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3Bh
cnR5JywgJ1dlYktpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMnLCAnZmFzdCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanMnLCAncmVzb3VyY2VzJykKKyAg
ICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAgICAgIF93ZWJraXRfdGVzdHMg
PSBOb25lCisgICAgICAgIF9qc190ZXN0X3Jlc291cmNlID0gTm9uZQorCisgICAgIyBQYXRoIHdo
ZXJlIHdlIGNhbiBhY2Nlc3MgYWxsIG9mIHRoZSB0ZXN0cworICAgIF9hbGxfdGVzdHMgPSBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnKQor
ICAgICMgU2VsZiBnZW5lcmF0ZWQgY2VydGlmaWNhdGUgZm9yIFNTTCBzZXJ2ZXIgKGZvciBjbGll
bnQgY2VydCBnZXQKKyAgICAjIDxiYXNlLXBhdGg+XGNocm9tZVx0ZXN0XGRhdGFcc3NsXGNlcnRz
XHJvb3RfY2FfY2VydC5jcnQpCisgICAgX3BlbV9maWxlID0gcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZSgKKyAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykp
LCAnaHR0cGQyLnBlbScpCisgICAgIyBPbmUgbWFwcGluZyB3aGVyZSB3ZSBjYW4gZ2V0IHRvIGV2
ZXJ5dGhpbmcKKyAgICBWSVJUVUFMQ09ORklHID0gW3sncG9ydCc6IDgwODEsICdkb2Nyb290Jzog
X2FsbF90ZXN0c31dCisKKyAgICBpZiBfd2Via2l0X3Rlc3RzOgorICAgICAgICBWSVJUVUFMQ09O
RklHLmV4dGVuZCgKKyAgICAgICAgICAjIFRocmVlIG1hcHBpbmdzIChvbmUgd2l0aCBTU0wgZW5h
YmxlZCkgZm9yIExheW91dFRlc3RzIGh0dHAgdGVzdHMKKyAgICAgICAgICBbeydwb3J0JzogODAw
MCwgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKKyAgICAgICAgICAgeydwb3J0JzogODA4MCwg
J2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKKyAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ2Rv
Y3Jvb3QnOiBfd2Via2l0X3Rlc3RzLCAnc3NsY2VydCc6IF9wZW1fZmlsZX1dKQorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG91dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgcm9vdD1Ob25lLCByZWdpc3Rlcl9jeWd3aW49Tm9uZSwgcnVuX2Jh
Y2tncm91bmQ9Tm9uZSk6CisgICAgICAgICIiIkFyZ3M6CisgICAgICAgICAgb3V0cHV0X2Rpcjog
dGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAg
ICAgICAgIiIiCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAg
IHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAg
IHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbiA9IHJlZ2lz
dGVyX2N5Z3dpbgorICAgICAgICBzZWxmLl9ydW5fYmFja2dyb3VuZCA9IHJ1bl9iYWNrZ3JvdW5k
CisgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNl
bGYuX3BvcnQpCisKKyAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3Byb2Nlc3MgIT0gTm9uZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJhaXNlICdMaWdodHRwZCBhbHJlYWR5IHJ1
bm5pbmcnCisKKyAgICAgICAgYmFzZV9jb25mX2ZpbGUgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCd0aGlyZF9wYXJ0eScsCisgICAgICAgICAgICAnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycs
ICd3ZWJraXRweScsICdsYXlvdXRfdGVzdHMnLAorICAgICAgICAgICAgJ2xheW91dF9wYWNrYWdl
JywgJ2xpZ2h0dHBkLmNvbmYnKQorICAgICAgICBvdXRfY29uZl9maWxlID0gb3MucGF0aC5qb2lu
KHNlbGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJykKKyAgICAgICAgdGltZV9zdHIgPSB0
aW1lLnN0cmZ0aW1lKCIlZCViJVktJUglTSVTIikKKyAgICAgICAgYWNjZXNzX2ZpbGVfbmFtZSA9
ICJhY2Nlc3MubG9nLSIgKyB0aW1lX3N0ciArICIudHh0IgorICAgICAgICBhY2Nlc3NfbG9nID0g
b3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGFjY2Vzc19maWxlX25hbWUpCisgICAgICAg
IGxvZ19maWxlX25hbWUgPSAiZXJyb3IubG9nLSIgKyB0aW1lX3N0ciArICIudHh0IgorICAgICAg
ICBlcnJvcl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFt
ZSkKKworICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2Vl
cCB0aGUgbGFzdCBvbmVzLgorICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9k
aXIsICJhY2Nlc3MubG9nLSIpCisgICAgICAgIHJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0
X2RpciwgImVycm9yLmxvZy0iKQorCisgICAgICAgICMgV3JpdGUgb3V0IHRoZSBjb25maWcKKyAg
ICAgICAgZiA9IGZpbGUoYmFzZV9jb25mX2ZpbGUsICdyYicpCisgICAgICAgIGJhc2VfY29uZiA9
IGYucmVhZCgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBmaWxlKG91dF9jb25m
X2ZpbGUsICd3YicpCisgICAgICAgIGYud3JpdGUoYmFzZV9jb25mKQorCisgICAgICAgICMgV3Jp
dGUgb3V0IG91ciBjZ2kgaGFuZGxlcnMuICBSdW4gcGVybCB0aHJvdWdoIGVudiBzbyB0aGF0IGl0
CisgICAgICAgICMgcHJvY2Vzc2VzIHRoZSAjISBsaW5lIGFuZCBydW5zIHBlcmwgd2l0aCB0aGUg
cHJvcGVyIGNvbW1hbmQKKyAgICAgICAgIyBsaW5lIGFyZ3VtZW50cy4gRW11bGF0ZSBhcGFjaGUn
cyBtb2RfYXNpcyB3aXRoIGEgY2F0IGNnaSBoYW5kbGVyLgorICAgICAgICBmLndyaXRlKCgnY2dp
LmFzc2lnbiA9ICggIi5jZ2kiICA9PiAiL3Vzci9iaW4vZW52IixcbicKKyAgICAgICAgICAgICAg
ICAgJyAgICAgICAgICAgICAgICIucGwiICAgPT4gIi91c3IvYmluL2VudiIsXG4nCisgICAgICAg
ICAgICAgICAgICcgICAgICAgICAgICAgICAiLmFzaXMiID0+ICIvYmluL2NhdCIsXG4nCisgICAg
ICAgICAgICAgICAgICcgICAgICAgICAgICAgICAiLnBocCIgID0+ICIlcyIgKVxuXG4nKSAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5saWdodHRwZF9w
aHBfcGF0aCgpKQorCisgICAgICAgICMgU2V0dXAgbG9nIGZpbGVzCisgICAgICAgIGYud3JpdGUo
KCdzZXJ2ZXIuZXJyb3Jsb2cgPSAiJXMiXG4nCisgICAgICAgICAgICAgICAgICdhY2Nlc3Nsb2cu
ZmlsZW5hbWUgPSAiJXMiXG5cbicpICUgKGVycm9yX2xvZywgYWNjZXNzX2xvZykpCisKKyAgICAg
ICAgIyBTZXR1cCB1cGxvYWQgZm9sZGVycy4gVXBsb2FkIGZvbGRlciBpcyB0byBob2xkIHRlbXBv
cmFyeSB1cGxvYWQgZmlsZXMKKyAgICAgICAgIyBhbmQgYWxzbyBQT1NUIGRhdGEuIFRoaXMgaXMg
dXNlZCB0byBzdXBwb3J0IFhIUiBsYXlvdXQgdGVzdHMgdGhhdAorICAgICAgICAjIGRvZXMgUE9T
VC4KKyAgICAgICAgZi53cml0ZSgoJ3NlcnZlci51cGxvYWQtZGlycyA9ICggIiVzIiApXG5cbicp
ICUgKHNlbGYuX291dHB1dF9kaXIpKQorCisgICAgICAgICMgU2V0dXAgYSBsaW5rIHRvIHdoZXJl
IHRoZSBqcyB0ZXN0IHRlbXBsYXRlcyBhcmUgc3RvcmVkCisgICAgICAgIGYud3JpdGUoKCdhbGlh
cy51cmwgPSAoICIvanMtdGVzdC1yZXNvdXJjZXMiID0+ICIlcyIgKVxuXG4nKSAlCisgICAgICAg
ICAgICAgICAgICAgIChzZWxmLl9qc190ZXN0X3Jlc291cmNlKSkKKworICAgICAgICAjIGR1bXAg
b3V0IG9mIHZpcnR1YWwgaG9zdCBjb25maWcgYXQgdGhlIGJvdHRvbS4KKyAgICAgICAgaWYgc2Vs
Zi5fcm9vdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAgICAgICAgICAgIyBI
YXZlIGJvdGggcG9ydCBhbmQgcm9vdCBkaXIuCisgICAgICAgICAgICAgICAgbWFwcGluZ3MgPSBb
eydwb3J0Jzogc2VsZi5fcG9ydCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fV0KKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgIyBIYXZlIG9ubHkgYSByb290IGRpciAtIHNldCB0aGUg
cG9ydHMgYXMgZm9yIExheW91dFRlc3RzLgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyB1c2Vk
IGluIHVpX3Rlc3RzIHRvIHJ1biBodHRwIHRlc3RzIGFnYWluc3QgYSBicm93c2VyLgorCisgICAg
ICAgICAgICAgICAgIyBkZWZhdWx0IHNldCBvZiBwb3J0cyBhcyBmb3IgTGF5b3V0VGVzdHMgYnV0
IHdpdGggYQorICAgICAgICAgICAgICAgICMgc3BlY2lmaWVkIHJvb3QuCisgICAgICAgICAgICAg
ICAgbWFwcGluZ3MgPSBbeydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9vdCc6IHNlbGYu
X3Jvb3R9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Ny
b290Jzogc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQn
OiBMaWdodHRwZC5fcGVtX2ZpbGV9XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGlu
Z3MgPSBzZWxmLlZJUlRVQUxDT05GSUcKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gbWFwcGluZ3M6
CisgICAgICAgICAgICBzc2xfc2V0dXAgPSAnJworICAgICAgICAgICAgaWYgJ3NzbGNlcnQnIGlu
IG1hcHBpbmc6CisgICAgICAgICAgICAgICAgc3NsX3NldHVwID0gKCcgIHNzbC5lbmdpbmUgPSAi
ZW5hYmxlIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBzc2wucGVtZmlsZSA9
ICIlcyJcbicgJSBtYXBwaW5nWydzc2xjZXJ0J10pCisKKyAgICAgICAgICAgIGYud3JpdGUoKCck
U0VSVkVSWyJzb2NrZXQiXSA9PSAiMTI3LjAuMC4xOiVkIiB7XG4nCisgICAgICAgICAgICAgICAg
ICAgICAnICBzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIlcyJcbicgKworICAgICAgICAgICAgICAg
ICAgICAgc3NsX3NldHVwICsKKyAgICAgICAgICAgICAgICAgICAgICd9XG5cbicpICUgKG1hcHBp
bmdbJ3BvcnQnXSwgbWFwcGluZ1snZG9jcm9vdCddKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAg
ICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMubGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCkK
KyAgICAgICAgbW9kdWxlX3BhdGggPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX21vZHVsZV9wYXRoKCkK
KyAgICAgICAgc3RhcnRfY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAj
IE5ld2x5IHdyaXR0ZW4gY29uZmlnIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICctZicsIHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uoc2VsZi5fb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLmNvbmYnKSwK
KyAgICAgICAgICAgICAgICAgICAgICMgV2hlcmUgaXQgY2FuIGZpbmQgaXRzIG1vZHVsZSBkeW5h
bWljIGxpYnJhcmllcworICAgICAgICAgICAgICAgICAgICAgJy1tJywgbW9kdWxlX3BhdGhdCisK
KyAgICAgICAgaWYgbm90IHNlbGYuX3J1bl9iYWNrZ3JvdW5kOgorICAgICAgICAgICAgc3RhcnRf
Y21kLmFwcGVuZCgjIERvbid0IGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJy1EJykKKworICAgICAgICAjIENvcHkgbGlibGlnaHRjb21wLmR5bGliIHRvIC90bXAvbGln
aHR0cGQvbGliIHRvIHdvcmsgYXJvdW5kIHRoZQorICAgICAgICAjIGJ1ZyB0aGF0IG1vZF9hbGlh
cy5zbyBsb2FkcyBpdCBmcm9tIHRoZSBoYXJkIGNvZGVkIHBhdGguCisgICAgICAgIGlmIHN5cy5w
bGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHRtcF9tb2R1bGVfcGF0aCA9ICcvdG1w
L2xpZ2h0dHBkL2xpYicKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0bXBfbW9k
dWxlX3BhdGgpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRtcF9tb2R1bGVfcGF0aCkK
KyAgICAgICAgICAgIGxpYl9maWxlID0gJ2xpYmxpZ2h0Y29tcC5keWxpYicKKyAgICAgICAgICAg
IHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4obW9kdWxlX3BhdGgsIGxpYl9maWxlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4odG1wX21vZHVsZV9wYXRoLCBs
aWJfZmlsZSkpCisKKyAgICAgICAgIyBQdXQgdGhlIGN5Z3dpbiBkaXJlY3RvcnkgZmlyc3QgaW4g
dGhlIHBhdGggdG8gZmluZCBjeWd3aW4xLmRsbAorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCisg
ICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAgICAgICAg
ICAgZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAorICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAg
ICAgICAgICBlbnZbJ1BBVEgnXSkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMy
JyBhbmQgc2VsZi5fcmVnaXN0ZXJfY3lnd2luOgorICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXR1cF9tb3Vu
dC5iYXQnKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihzZXR1cF9tb3VudCkud2FpdCgp
CisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU3RhcnRpbmcgaHR0cCBzZXJ2ZXInKQorICAgICAg
ICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIGVudj1lbnYpCisK
KyAgICAgICAgIyBXYWl0IGZvciBzZXJ2ZXIgdG8gc3RhcnQuCisgICAgICAgIHNlbGYubWFwcGlu
Z3MgPSBtYXBwaW5ncworICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0
aW9uKAorICAgICAgICAgICAgc2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCisK
KyAgICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKKyAgICAgICAgaWYgbm90
IHNlcnZlcl9zdGFydGVkIG9yIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSAhPSBOb25lOgorICAg
ICAgICAgICAgcmFpc2UgZ29vZ2xlLmh0dHBkX3V0aWxzLkh0dHBkTm90U3RhcnRlZCgnRmFpbGVk
IHRvIHN0YXJ0IGh0dHBkLicpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nl
c3NmdWxseSBzdGFydGVkIikKKworICAgICMgVE9ETyhkZWFubSk6IEZpbmQgYSBuaWNlciB3YXkg
dG8gc2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cgZmlsZXMgYXJlCisgICAgIyBwcm9iYWJseSBu
b3QgYmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBweXRob24gaGF2ZSBvcy5r
aWxsID8KKworICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90
IGZvcmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICBodHRwZF9waWQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAg
ICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAgICAgICBwYXRoX3V0aWxz
LnNodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9waWQpCisKKyAgICAgICAgaWYgc2VsZi5fcHJv
Y2VzczoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gTm9uZQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgICMgUHJv
dmlkZSBzb21lIGNvbW1hbmQgbGluZSBwYXJhbXMgZm9yIHN0YXJ0aW5nL3N0b3BwaW5nIHRoZSBo
dHRwIHNlcnZlcgorICAgICMgbWFudWFsbHkuIEFsc28gdXNlZCBpbiB1aV90ZXN0cyB0byBydW4g
aHR0cCBsYXlvdXQgdGVzdHMgaW4gYSBicm93c2VyLgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRw
YXJzZS5PcHRpb25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWsnLCAn
LS1zZXJ2ZXInLAorICAgICAgICBoZWxwPSdTZXJ2ZXIgYWN0aW9uIChzdGFydHxzdG9wKScpCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBvcnQnLAorICAgICAgICBoZWxw
PSdQb3J0IHRvIGxpc3RlbiBvbiAob3ZlcnJpZGVzIGxheW91dCB0ZXN0IHBvcnRzKScpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJvb3QnLAorICAgICAgICBoZWxwPSdB
YnNvbHV0ZSBwYXRoIHRvIERvY3VtZW50Um9vdCAob3ZlcnJpZGVzIGxheW91dCB0ZXN0IHJvb3Rz
KScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXJlZ2lzdGVyX2N5Z3dpbicsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlc3Q9InJlZ2lzdGVyX2N5Z3dpbiIsIGhlbHA9
J1JlZ2lzdGVyIEN5Z3dpbiBwYXRocyAob24gV2luIHRyeSBib3RzKScpCisgICAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctLXJ1bl9iYWNrZ3JvdW5kJywgYWN0aW9uPSJzdG9yZV90cnVlIiwK
KyAgICAgICAgZGVzdD0icnVuX2JhY2tncm91bmQiLAorICAgICAgICBoZWxwPSdSdW4gb24gYmFj
a2dyb3VuZCAoZm9yIHJ1bm5pbmcgYXMgVUkgdGVzdCknKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBv
cHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgbm90IG9wdGlvbnMuc2VydmVyOgor
ICAgICAgICBwcmludCAoJ1VzYWdlOiAlcyAtLXNlcnZlciB7c3RhcnR8c3RvcH0gWy0tcm9vdD1y
b290X2Rpcl0nCisgICAgICAgICAgICAgICAnIFstLXBvcnQ9cG9ydF9udW1iZXJdJyAlIHN5cy5h
cmd2WzBdKQorICAgIGVsc2U6CisgICAgICAgIGlmIChvcHRpb25zLnJvb3QgaXMgTm9uZSkgYW5k
IChvcHRpb25zLnBvcnQgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgIyBzcGVjaWZ5aW5nIHJv
b3QgYnV0IG5vdCBwb3J0IG1lYW5zIHdlIHdhbnQgaHR0cGQgb24gZGVmYXVsdAorICAgICAgICAg
ICAgIyBzZXQgb2YgcG9ydHMgdGhhdCBMYXlvdXRUZXN0IHVzZSwgYnV0IHBvaW50aW5nIHRvIGEg
ZGlmZmVyZW50CisgICAgICAgICAgICAjIHNvdXJjZSBvZiB0ZXN0cy4gU3BlY2lmeWluZyBwb3J0
IGJ1dCBubyByb290IGRvZXMgbm90IHNlZW0KKyAgICAgICAgICAgICMgbWVhbmluZ2Z1bC4KKyAg
ICAgICAgICAgIHJhaXNlICdTcGVjaWZ5aW5nIHBvcnQgcmVxdWlyZXMgYWxzbyBhIHJvb3QuJwor
ICAgICAgICBodHRwZCA9IExpZ2h0dHBkKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3J0PW9wdGlvbnMucG9ydCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICByb290PW9wdGlvbnMucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
cl9jeWd3aW49b3B0aW9ucy5yZWdpc3Rlcl9jeWd3aW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcnVuX2JhY2tncm91bmQ9b3B0aW9ucy5ydW5fYmFja2dyb3VuZCkKKyAgICAgICAgaWYgJ3N0
YXJ0JyA9PSBvcHRpb25zLnNlcnZlcjoKKyAgICAgICAgICAgIGh0dHBkLnN0YXJ0KCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGh0dHBkLnN0b3AoZm9yY2U9VHJ1ZSkKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2h0dHBfc2VydmVyLnNoIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uNzMxNzI0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnNoCkBA
IC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKworZXhl
Y19kaXI9JChkaXJuYW1lICQwKQorCitpZiBbICIkT1NUWVBFIiA9ICJjeWd3aW4iIF07IHRoZW4K
KyAgc3lzdGVtX3Jvb3Q9YGN5Z3BhdGggIiRTWVNURU1ST09UImAKKyAgUEFUSD0iL3Vzci9iaW46
JHN5c3RlbV9yb290L3N5c3RlbTMyOiRzeXN0ZW1fcm9vdDokc3lzdGVtX3Jvb3Qvc3lzdGVtMzIv
V0JFTSIKKyAgZXhwb3J0IFBBVEgKKyAgcHl0aG9uX3Byb2c9IiRleGVjX2Rpci8uLi8uLi8uLi8u
Li90aGlyZF9wYXJ0eS9weXRob25fMjQvcHl0aG9uLmV4ZSIKK2Vsc2UKKyAgcHl0aG9uX3Byb2c9
cHl0aG9uCisgICMgV2hlbiBub3QgdXNpbmcgdGhlIGluY2x1ZGVkIHB5dGhvbiwgd2UgZG9uJ3Qg
Z2V0IGF1dG9tYXRpYyBzaXRlLnB5IHBhdGhzLgorICAjIFNwZWNpZmljYWxseSwgcnVuX3dlYmtp
dF90ZXN0cyBuZWVkcyB0aGUgcGF0aHMgaW46CisgICMgdGhpcmRfcGFydHkvcHl0aG9uXzI0L0xp
Yi9zaXRlLXBhY2thZ2VzL2dvb2dsZS5wdGgKKyAgUFlUSE9OUEFUSD0iJHtleGVjX2Rpcn0vLi4v
Li4vLi4vLi4vdG9vbHMvcHl0aG9uOiRQWVRIT05QQVRIIgorICBleHBvcnQgUFlUSE9OUEFUSAor
ZmkKKworIiRweXRob25fcHJvZyIgIiRleGVjX2Rpci9odHRwX3NlcnZlci5weSIgIiRAIgpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMDQ4NgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2h0dHBfc2VydmVyX2Jhc2UucHkKQEAgLTAsMCArMSw2NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkJhc2UgY2xhc3Mgd2l0aCBjb21tb24gcm91
dGluZXMgYmV0d2VlbiB0aGUgQXBhY2hlIGFuZCBMaWdodHRwZCBzZXJ2ZXJzLiIiIgorCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKKworCitjbGFzcyBIdHRwU2Vy
dmVyQmFzZShvYmplY3QpOgorCisgICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24p
OgorICAgICAgICAiIiJSZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBp
dCBzdWNjZWVkcy4gUmV0dXJucworICAgICAgICB3aGV0aGVyIGl0IHN1Y2NlZWRlZC4iIiIKKyAg
ICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHdoaWxlIHRpbWUudGltZSgp
IC0gc3RhcnRfdGltZSA8IDIwOgorICAgICAgICAgICAgaWYgYWN0aW9uKCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2Vs
Zik6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24g
YWxsIHRoZSBkZXNpcmVkIHBvcnRzLiIiIgorICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLm1h
cHBpbmdzOgorICAgICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6CisgICAgICAgICAg
ICAgICAgaHR0cF9zdWZmaXggPSAncycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgaHR0cF9zdWZmaXggPSAnJworCisgICAgICAgICAgICB1cmwgPSAnaHR0cCVzOi8vMTI3LjAu
MC4xOiVkLycgJSAoaHR0cF9zdWZmaXgsIG1hcHBpbmdbJ3BvcnQnXSkKKworICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsKQorICAg
ICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBydW5uaW5nIGF0ICVzIiAlIHVybCkK
KyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVi
dWcoIlNlcnZlciBOT1QgcnVubmluZyBhdCAlcyIgJSB1cmwpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW0g
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9odHRwZDIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDliNzgK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwZDIucGVtCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tQkVH
SU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRVpEQ0NBa3lnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBC
QVFVRkFEQmdNUkF3RGdZRFZRUURFd2RVWlhOMAorSUVOQk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJF
R0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgorVFc5MWJuUmhhVzRnVm1sbGR6
RVNNQkFHQTFVRUNoTUpRMlZ5ZENCVVpYTjBNQjRYRFRBNE1EY3lPREl5TXpJeQorT0ZvWERURXpN
RGN5TnpJeU16SXlPRm93U2pFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbQor
YjNKdWFXRXhFakFRQmdOVkJBb1RDVU5sY25RZ1ZHVnpkREVTTUJBR0ExVUVBeE1KTVRJM0xqQXVN
QzR4TUlHZgorTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUURRajJ0UFdQVWdidUk0
SDMvM2RudHRxVmJuZHdVMworM0JkUkNkNjdERk00NEdScnNqRFNINGJZL0ViRnlYOUQ1MmQvaXk2
WmFBbURlUGNDejVrL2ZnUDNETXVqeWtZRworcWdOaVYyeXd4VGxNajdObE4yQzdTUnQ2OGZRTVpy
NWlJN3J5cGR4dWFadDlsU01EM0VOQmZmWXR1TFR5WmQ5YQorM0pQSmUxVGFJYWI1R3dJREFRQUJv
NEhDTUlHL01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGQ1lMQnY1SworeDVzTE5WbHBMaDVG
d1R3aGREbDdNSUdTQmdOVkhTTUVnWW93Z1llQUZGM09mNW5qMUJsQk1VL0d6N0VsOVZxdgorNDVj
eG9XU2tZakJnTVJBd0RnWURWUVFERXdkVVpYTjBJRU5CTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVH
QTFVRQorQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpF
U01CQUdBMVVFQ2hNSgorUTJWeWRDQlVaWE4wZ2drQTFGR1QxRC9lMlU0d0RRWUpLb1pJaHZjTkFR
RUZCUUFEZ2dJQkFFdGtWbUxPYlVnaworYjJjSUEyUytRRHRpZnExVWdWZkJieXR2UjJsRm1uQURP
UjU1bW8wZ0hRRzNISHFxNGcwMzRMbW9WWERIaFVrOAorR2I2YUZpdjRRdWJtVmhMWGNVZWxUUlh3
aU52R3prVzdwQzZKcnExMDVoZFBqelhNS1RjbWlMYW9wbTVGcWZjNworaGo1Q24xU2pzcGM4cGRl
UWpyYmVNZHZjYTdLbEZyR1A4WWt3Q1UyeE9PWDlQaU45RzA5NjZCV2ZqbnIvZlpacAorK09RVnVV
RkhkaUFad3RoRU11RHBBQVhIcVlYSXNlcm1nZE9wZ0phQTUzY2Y4TnFCVjJRR2h0Rmd0c0pDUm9p
dQorN0RLcWh5UldCR3l6MTlWSUgyYjd5KzZxdlFWeHVIazE5a0tSTTBuZnR3L3lOY0pubTdndHR0
ZXNwTVVQc09NYQorYTJTRDFHMGhtMFRORDZ2eGFCaGdSM2NWcXBsL3FJcEFkRmkwMFRtN2hUeVlF
N0k0M3pQVzAzdCsvRHBDdDNVbQorRU1SWnNROTBjbzVxK2JjeC92UTdZQXR3VWgzMHVNYjB3cGli
ZXlDd0RwOGNxTm1TaVJrRXVjL0ZqVFllczV0OAorNWdSLy9XWDFsMCtxanJqdXNPOU5tb0xucTJZ
azZVY2lvWCt6K3E2Wi9kdWRHZnFoTGZlV0QyUTBMV1lBMjQyQworZDdrbTVZM0tBdDFQSmRWc29m
L2FpVmhWZGRkWS9PSUVLVFJRaFdFZERib3N5MmVoMTZCQ0tYVDJGRnZoTkRnMQorQVlGdm42SThu
ajlJbGRNSmlJYzNEZGhhY0VBRXpSTWVSZ1BkekFhMWdyaUtVR2tueHN5VHlSaWk4cnUwV1M2dwor
RENOcmxET1ZYZHpZR0Vab29CSTc2QkRWWTBXMGFralYKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0t
LS0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNYUUlCQUFLQmdRRFFqMnRQ
V1BVZ2J1STRIMy8zZG50dHFWYm5kd1UzM0JkUkNkNjdERk00NEdScnNqRFMKK0g0YlkvRWJGeVg5
RDUyZC9peTZaYUFtRGVQY0N6NWsvZmdQM0RNdWp5a1lHcWdOaVYyeXd4VGxNajdObE4yQzcKK1NS
dDY4ZlFNWnI1aUk3cnlwZHh1YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhM0pQSmUxVGFJYWI1R3dJ
REFRQUIKK0FvR0FOSFh1OHoyWUl6bGhFK2J3aEdtOE1HQnBLTDNxaFJ1S2plcmlxTUEzNnRXZXpP
dzhsWTR5bUVBVStVbHYKK0JzQ2RheHF5ZFFvVFlvdTU3bTRUeVVIRWN4cTlwcTNIMHpCMHFMNzA5
RGRIaS90NHpiVjlYSW9BekM1djAvaEcKKzkrQ2EyOVR3QzAyRkN3K3FMa05ydHdDcHdPY1FtYyti
UHhxdkZ1MWlNaWFoVVJFQ1FRRDJJL0hpMjQxM0NNWnoKK1RCamw4Zk1pVk85R2hBMkowc2M4UWkr
WWNnSmFrYUxEOXhjYmFpTGtUelBaRGxBMzg5QzFiNklhK3BvQXI0WUEKK1ZlMEZGYnhwQWtFQTJP
b2JheXlIRS9RdFBFcW95Nk5MUjU3amlybVZCTm1TV1dkNGxBeUw1VUlISVlWdHRKWmcKKzhDTHZi
emFVL2lER3dSK3dLc002NjRyS1BIRW10bHlvNHdKQkFNZVNxWU81Wk9DSkd1OU5XanJIak0zZmRB
c0cKKzh6czJ6aGlMeWErZmNVMGlISWtzQlc1VEJtdDcxSncvd01jOVI1SjFLMGtZdkZtbDk4NjUz
TzVzaTFFQ1FCQ2sKK1JWNC9tRTFybWx6WnpZRnlFY0I0N0RRa2NNNWljdHZ4R0VzamUwZ25mS3lS
dEF6NnpJMGY0UWJEUlVNSitMV3cKK1hLK3JNc1lIYStTZk9iMGI5c2tDUVFDTGRlb25zSXBGRHYv
VXYrZmxISVN5MFdBK0FGa0xYclJrQktoNkcvT0QKK2RNSGFOZXZrSmdVbnBjZVZFbmtyZGVucDVD
Y0VvRlRJMTdwZCtuQmdEbS9CCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1
bHRzX2dlbmVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Iy
NmU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkK
QEAgLTAsMCArMSwxODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKK2Zyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25z
Citmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCisKKworY2xhc3MgSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0
c0dlbmVyYXRvcik6CisgICAgIiIiQSBKU09OIHJlc3VsdHMgZ2VuZXJhdG9yIGZvciBsYXlvdXQg
dGVzdHMuIiIiCisKKyAgICBMQVlPVVRfVEVTVFNfUEFUSCA9ICJMYXlvdXRUZXN0cyIKKworICAg
ICMgQWRkaXRpb25hbCBKU09OIGZpZWxkcy4KKyAgICBXT05URklYID0gIndvbnRmaXhDb3VudHMi
CisgICAgREVGRVJSRUQgPSAiZGVmZXJyZWRDb3VudHMiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAgIHJlc3Vs
dHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgIHRlc3RfdGltaW5n
cywgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgYWxsX3Rlc3RzKToKKyAgICAgICAgIiIi
TW9kaWZpZXMgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiBHcmFicyBpdCBvZmYgdGhlIGFyY2hpdmUg
ZGlyZWN0b3J5CisgICAgICAgIGlmIGl0IGlzIG5vdCBmb3VuZCBsb2NhbGx5LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IFJlc3VsdHNTdW1tYXJ5IG9iamVjdCBz
dG9yaW5nIHRoZSBzdW1tYXJ5IG9mIHRoZSB0ZXN0CisgICAgICAgICAgICAgIHJlc3VsdHMuCisg
ICAgICAgICAgKHNlZSB0aGUgY29tbWVudCBvZiBKU09OUmVzdWx0c0dlbmVyYXRvci5fX2luaXRf
XyBmb3Igb3RoZXIgQXJncykKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fYnVpbGRlcl9u
YW1lID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWlsZF9uYW1l
CisgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgorICAgICAgICBzZWxm
Ll9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAorICAgICAgICBzZWxmLl9yZXN1
bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLAorICAg
ICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAgICBzZWxmLl9leHBlY3RhdGlv
bnMgPSBleHBlY3RhdGlvbnMKKworICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9za2lwcGVk
X3Rlc3RzIGFuZCBzZWxmLl9wYXNzZWRfdGVzdHMgYXMgd2UKKyAgICAgICAgIyBvdmVycmlkZSBf
SW5zZXJ0RmFpbHVyZVN1bW1hcmllcy4KKworICAgICAgICAjIFdlIHdhbnQgcmVsYXRpdmUgcGF0
aHMgdG8gTGF5b3V0VGVzdCByb290IGZvciBKU09OIG91dHB1dC4KKyAgICAgICAgcGF0aF90b19u
YW1lID0gc2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdAorICAgICAg
ICBzZWxmLl9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHNlbGYuX2Zh
aWx1cmVzID0gZGljdCgKKyAgICAgICAgICAgIChwYXRoX3RvX25hbWUodGVzdCksIHRlc3RfZmFp
bHVyZXMuZGV0ZXJtaW5lX3Jlc3VsdF90eXBlKGZhaWx1cmVzKSkKKyAgICAgICAgICAgIGZvciAo
dGVzdCwgZmFpbHVyZXMpIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzLml0ZXJpdGVtcygpKQor
ICAgICAgICBzZWxmLl9hbGxfdGVzdHMgPSBbcGF0aF90b19uYW1lKHRlc3QpIGZvciB0ZXN0IGlu
IGFsbF90ZXN0c10KKyAgICAgICAgc2VsZi5fdGVzdF90aW1pbmdzID0gZGljdCgKKyAgICAgICAg
ICAgIChwYXRoX3RvX25hbWUodGVzdF90dXBsZS5maWxlbmFtZSksIHRlc3RfdHVwbGUudGVzdF9y
dW5fdGltZSkKKyAgICAgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfdGltaW5ncykKKwor
ICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgpCisKKyAgICBkZWYgX2dldF9wYXRo
X3JlbGF0aXZlX3RvX2xheW91dF90ZXN0X3Jvb3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlJl
dHVybnMgdGhlIHBhdGggb2YgdGhlIHRlc3QgcmVsYXRpdmUgdG8gdGhlIGxheW91dCB0ZXN0IHJv
b3QuCisgICAgICAgIEZvciBleGFtcGxlLCBmb3I6CisgICAgICAgICAgc3JjL3RoaXJkX3BhcnR5
L1dlYktpdC9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvby5odG1sCisgICAgICAgIFdlIHdvdWxk
IHJldHVybgorICAgICAgICAgIGZhc3QvZm9ybXMvZm9vLmh0bWwKKyAgICAgICAgIiIiCisgICAg
ICAgIGluZGV4ID0gdGVzdC5maW5kKHNlbGYuTEFZT1VUX1RFU1RTX1BBVEgpCisgICAgICAgIGlm
IGluZGV4IGlzIG5vdCAtMToKKyAgICAgICAgICAgIGluZGV4ICs9IGxlbihzZWxmLkxBWU9VVF9U
RVNUU19QQVRIKQorCisgICAgICAgIGlmIGluZGV4IGlzIC0xOgorICAgICAgICAgICAgIyBBbHJl
YWR5IGEgcmVsYXRpdmUgcGF0aC4KKyAgICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IHRlc3QKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IHRlc3RbaW5kZXggKyAxOl0K
KworICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgcGF0aHMgYXJlIHVuaXgtc3R5bGUuCisgICAgICAg
IHJldHVybiByZWxhdGl2ZVBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisKKyAgICAjIG92ZXJyaWRl
CisgICAgZGVmIF9jb252ZXJ0X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNf
anNvbik6CisgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5W
RVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICBhcmNoaXZlX3ZlcnNpb24g
PSByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0KKworICAgICAgICBzdXBlcihKU09OTGF5
b3V0UmVzdWx0c0dlbmVyYXRvciwKKyAgICAgICAgICAgICAgc2VsZikuX2NvbnZlcnRfanNvbl90
b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQorCisgICAgICAgICMgdmVyc2lvbiAyLT4z
CisgICAgICAgIGlmIGFyY2hpdmVfdmVyc2lvbiA9PSAyOgorICAgICAgICAgICAgZm9yIHJlc3Vs
dHNfZm9yX2J1aWxkZXIgaW4gcmVzdWx0c19qc29uLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cyA9IHJlc3VsdHNfZm9y
X2J1aWxkZXJbc2VsZi5URVNUU10KKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfcmVzdWx0
czoKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgcGF0aHMgYXJlIHJlbGF0aXZlCisg
ICAgICAgICAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5
b3V0X3Rlc3Rfcm9vdCh0ZXN0KQorICAgICAgICAgICAgICAgIGlmIHRlc3RfcGF0aCAhPSB0ZXN0
OgorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHNbdGVzdF9wYXRoXSA9IHRlc3RfcmVz
dWx0c1t0ZXN0XQorICAgICAgICAgICAgICAgICAgICBkZWwgdGVzdF9yZXN1bHRzW3Rlc3RdCisK
KyAgICAjIG92ZXJyaWRlCisgICAgZGVmIF9pbnNlcnRfZmFpbHVyZV9zdW1tYXJpZXMoc2VsZiwg
cmVzdWx0c19mb3JfYnVpbGRlcik6CisgICAgICAgIHN1bW1hcnkgPSBzZWxmLl9yZXN1bHRfc3Vt
bWFyeQorCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19m
b3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbigoc2V0KHN1bW1hcnkuZmFpbHVyZXMua2V5cygp
KSB8CisgICAgICAgICAgICAgICAgc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4
cGVjdGF0aW9ucy5TS0lQXSkgJgorICAgICAgICAgICAgICAgIHN1bW1hcnkudGVzdHNfYnlfdGlt
ZWxpbmVbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSksCisgICAgICAgICAgICBzZWxmLkZJWEFCTEVf
Q09VTlQpCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19m
b3JfYnVpbGRlciwKKyAgICAgICAgICAgIHNlbGYuX2dldF9mYWlsdXJlX3N1bW1hcnlfZW50cnko
dGVzdF9leHBlY3RhdGlvbnMuTk9XKSwKKyAgICAgICAgICAgIHNlbGYuRklYQUJMRSkKKyAgICAg
ICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAor
ICAgICAgICAgICAgbGVuKHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF90aW1lbGlu
ZSgKKyAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5OT1cpKSwgc2VsZi5BTExfRklY
QUJMRV9DT1VOVCkKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fZ2V0X2ZhaWx1cmVfc3VtbWFyeV9l
bnRyeSh0ZXN0X2V4cGVjdGF0aW9ucy5ERUZFUiksCisgICAgICAgICAgICBzZWxmLkRFRkVSUkVE
KQorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1
aWxkZXIsCisgICAgICAgICAgICBzZWxmLl9nZXRfZmFpbHVyZV9zdW1tYXJ5X2VudHJ5KHRlc3Rf
ZXhwZWN0YXRpb25zLldPTlRGSVgpLAorICAgICAgICAgICAgc2VsZi5XT05URklYKQorCisgICAg
IyBvdmVycmlkZQorICAgIGRlZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0
ZXN0X25hbWUsIHRlc3RzKToKKyAgICAgICAgc3VwZXIoSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0
b3IsIHNlbGYpLl9ub3JtYWxpemVfcmVzdWx0c19qc29uKAorICAgICAgICAgICAgdGVzdCwgdGVz
dF9uYW1lLCB0ZXN0cykKKworICAgICAgICAjIFJlbW92ZSB0ZXN0cyB0aGF0IGRvbid0IGV4aXN0
IGFueW1vcmUuCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoX3V0aWxzLmxh
eW91dF90ZXN0c19kaXIoKSwgdGVzdF9uYW1lKQorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRo
Lm5vcm1wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxf
cGF0aCk6CisgICAgICAgICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQorCisgICAgZGVmIF9nZXRf
ZmFpbHVyZV9zdW1tYXJ5X2VudHJ5KHNlbGYsIHRpbWVsaW5lKToKKyAgICAgICAgIiIiQ3JlYXRl
cyBhIHN1bW1hcnkgb2JqZWN0IHRvIGluc2VydCBpbnRvIHRoZSBKU09OLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgc3VtbWFyeSAgIFJlc3VsdFN1bW1hcnkgb2JqZWN0IHdpdGggdGVzdCBy
ZXN1bHRzCisgICAgICAgICAgdGltZWxpbmUgIGN1cnJlbnQgdGVzdF9leHBlY3RhdGlvbnMgdGlt
ZWxpbmUgdG8gYnVpbGQgZW50cnkgZm9yCisgICAgICAgICAgICAgICAgICAgIChlLmcuLCB0ZXN0
X2V4cGVjdGF0aW9ucy5OT1csIGV0Yy4pCisgICAgICAgICIiIgorICAgICAgICBlbnRyeSA9IHt9
CisgICAgICAgIHN1bW1hcnkgPSBzZWxmLl9yZXN1bHRfc3VtbWFyeQorICAgICAgICB0aW1lbGlu
ZV90ZXN0cyA9IHN1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdCisgICAgICAgIGVu
dHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKAorICAgICAgICAgICAgc3VtbWFyeS50ZXN0c19i
eV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSAmCisgICAgICAgICAgICB0aW1l
bGluZV90ZXN0cykKKyAgICAgICAgZW50cnlbc2VsZi5QQVNTX1JFU1VMVF0gPSBsZW4oCisgICAg
ICAgICAgICBzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlBB
U1NdICYKKyAgICAgICAgICAgIHRpbWVsaW5lX3Rlc3RzKQorICAgICAgICBmb3IgZmFpbHVyZV90
eXBlIGluIHN1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb24ua2V5cygpOgorICAgICAgICAgICAg
aWYgZmFpbHVyZV90eXBlIG5vdCBpbiBzZWxmLkZBSUxVUkVfVE9fQ0hBUjoKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgY291bnQgPSBsZW4oc3VtbWFyeS50ZXN0c19ieV9l
eHBlY3RhdGlvbltmYWlsdXJlX3R5cGVdICYKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVs
aW5lX3Rlc3RzKQorICAgICAgICAgICAgZW50cnlbc2VsZi5GQUlMVVJFX1RPX0NIQVJbZmFpbHVy
ZV90eXBlXV0gPSBjb3VudAorICAgICAgICByZXR1cm4gZW50cnkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NmUxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsNDE4IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJs
bGliMgoraW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9u
cworCitzeXMucGF0aC5hcHBlbmQocGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFy
dHknLCAnV2ViS2l0JywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnV2ViS2l0VG9vbHMnKSkgCitpbXBvcnQgc2ltcGxlanNvbgorCisKK2NsYXNzIEpTT05SZXN1
bHRzR2VuZXJhdG9yKG9iamVjdCk6CisKKyAgICBNQVhfTlVNQkVSX09GX0JVSUxEX1JFU1VMVFNf
VE9fTE9HID0gNzUwCisgICAgIyBNaW4gdGltZSAoc2Vjb25kcykgdGhhdCB3aWxsIGJlIGFkZGVk
IHRvIHRoZSBKU09OLgorICAgIE1JTl9USU1FID0gMQorICAgIEpTT05fUFJFRklYID0gIkFERF9S
RVNVTFRTKCIKKyAgICBKU09OX1NVRkZJWCA9ICIpOyIKKyAgICBQQVNTX1JFU1VMVCA9ICJQIgor
ICAgIFNLSVBfUkVTVUxUID0gIlgiCisgICAgTk9fREFUQV9SRVNVTFQgPSAiTiIKKyAgICBWRVJT
SU9OID0gMworICAgIFZFUlNJT05fS0VZID0gInZlcnNpb24iCisgICAgUkVTVUxUUyA9ICJyZXN1
bHRzIgorICAgIFRJTUVTID0gInRpbWVzIgorICAgIEJVSUxEX05VTUJFUlMgPSAiYnVpbGROdW1i
ZXJzIgorICAgIFdFQktJVF9TVk4gPSAid2Via2l0UmV2aXNpb24iCisgICAgQ0hST01FX1NWTiA9
ICJjaHJvbWVSZXZpc2lvbiIKKyAgICBUSU1FID0gInNlY29uZHNTaW5jZUVwb2NoIgorICAgIFRF
U1RTID0gInRlc3RzIgorCisgICAgRklYQUJMRV9DT1VOVCA9ICJmaXhhYmxlQ291bnQiCisgICAg
RklYQUJMRSA9ICJmaXhhYmxlQ291bnRzIgorICAgIEFMTF9GSVhBQkxFX0NPVU5UID0gImFsbEZp
eGFibGVDb3VudCIKKworICAgICMgTm90ZSB0aGF0IHdlIG9taXQgdGVzdF9leHBlY3RhdGlvbnMu
RkFJTCBmcm9tIHRoaXMgbGlzdCBiZWNhdXNlCisgICAgIyBpdCBzaG91bGQgbmV2ZXIgc2hvdyB1
cCAoaXQncyBhIGxlZ2FjeSBpbnB1dCBleHBlY3RhdGlvbiwgbmV2ZXIKKyAgICAjIGFuIG91dHB1
dCBleHBlY3RhdGlvbikuCisgICAgRkFJTFVSRV9UT19DSEFSID0ge3Rlc3RfZXhwZWN0YXRpb25z
LkNSQVNIOiAiQyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlRJ
TUVPVVQ6ICJUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuSU1B
R0U6ICJJIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVEVYVDog
IkYiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5NSVNTSU5HOiAi
TyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFX1BMVVNf
VEVYVDogIloifQorICAgIEZBSUxVUkVfQ0hBUlMgPSBGQUlMVVJFX1RPX0NIQVIudmFsdWVzKCkK
KworICAgIFJFU1VMVFNfRklMRU5BTUUgPSAicmVzdWx0cy5qc29uIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgICAg
ICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAorICAgICAgICB0ZXN0
X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMsIGFsbF90ZXN0
cyk6CisgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQg
b2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQorICAgICAgICBpZiBpdCBpcyBub3QgZm91bmQgbG9j
YWxseS4KKworICAgICAgICBBcmdzCisgICAgICAgICAgYnVpbGRlcl9uYW1lOiB0aGUgYnVpbGRl
ciBuYW1lIChlLmcuIFdlYmtpdCkuCisgICAgICAgICAgYnVpbGRfbmFtZTogdGhlIGJ1aWxkIG5h
bWUgKGUuZy4gd2Via2l0LXJlbCkuCisgICAgICAgICAgYnVpbGRfbnVtYmVyOiB0aGUgYnVpbGQg
bnVtYmVyLgorICAgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGg6IEFic29sdXRlIHBhdGgg
dG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICAgICAgICAgICAgICByZXN1bHRzIGpz
b24gZmlsZS4KKyAgICAgICAgICBidWlsZGVyX2Jhc2VfdXJsOiB0aGUgVVJMIHdoZXJlIHdlIGhh
dmUgdGhlIGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgICB0ZXN0X3RpbWluZ3M6IE1h
cCBvZiB0ZXN0IG5hbWUgdG8gYSB0ZXN0X3J1bi10aW1lLgorICAgICAgICAgIGZhaWx1cmVzOiBN
YXAgb2YgdGVzdCBuYW1lIHRvIGEgZmFpbHVyZSB0eXBlIChvZiB0ZXN0X2V4cGVjdGF0aW9ucyku
CisgICAgICAgICAgcGFzc2VkX3Rlc3RzOiBBIHNldCBjb250YWluaW5nIGFsbCB0aGUgcGFzc2Vk
IHRlc3RzLgorICAgICAgICAgIHNraXBwZWRfdGVzdHM6IEEgc2V0IGNvbnRhaW5pbmcgYWxsIHRo
ZSBza2lwcGVkIHRlc3RzLgorICAgICAgICAgIGFsbF90ZXN0czogTGlzdCBvZiBhbGwgdGhlIHRl
c3RzIHRoYXQgd2VyZSBydW4uICBUaGlzIHNob3VsZCBub3QKKyAgICAgICAgICAgICAgaW5jbHVk
ZSBza2lwcGVkIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYnVpbGRlcl9uYW1l
ID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWlsZF9uYW1lCisg
ICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgorICAgICAgICBzZWxmLl9i
dWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAorICAgICAgICBzZWxmLl9yZXN1bHRz
X2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLAorICAgICAg
ICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3Mg
PSB0ZXN0X3RpbWluZ3MKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSBmYWlsdXJlcworICAgICAg
ICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRfdGVzdHMKKyAgICAgICAgc2VsZi5fc2tpcHBl
ZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKKyAgICAgICAgc2VsZi5fYWxsX3Rlc3RzID0gYWxsX3Rl
c3RzCisKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV9qc29uX291dHB1dChzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGVzIHRoZSBKU09O
IG91dHB1dCBmaWxlLiIiIgorICAgICAgICBqc29uID0gc2VsZi5fZ2V0X2pzb24oKQorICAgICAg
ICBpZiBqc29uOgorICAgICAgICAgICAgcmVzdWx0c19maWxlID0gb3BlbihzZWxmLl9yZXN1bHRz
X2ZpbGVfcGF0aCwgInciKQorICAgICAgICAgICAgcmVzdWx0c19maWxlLndyaXRlKGpzb24pCisg
ICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xvc2UoKQorCisgICAgZGVmIF9nZXRfc3ZuX3Jldmlz
aW9uKHNlbGYsIGluX2RpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3Zu
IHJldmlzaW9uIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgaW5fZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5IHdoZXJlIHN2biBpcyB0byBiZSBydW4u
CisgICAgICAgICIiIgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKFsic3ZuIiwg
ImluZm8iLCAiLS14bWwiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9
aW5fZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPShz
eXMucGxhdGZvcm0gPT0gJ3dpbjMyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICB0cnk6
CisgICAgICAgICAgICBkb20gPSB4bWwuZG9tLm1pbmlkb20ucGFyc2VTdHJpbmcob3V0cHV0KQor
ICAgICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZW50cnknKVswXS5n
ZXRBdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgJ3JldmlzaW9uJykKKyAgICAgICAgZXhjZXB0
IHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIiIKKwor
ICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKKyAgICAgICAgIiIiUmVh
ZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgUmV0dXJucyAo
YXJjaGl2ZWRfcmVzdWx0cywgZXJyb3IpIHR1cGxlIHdoZXJlIGVycm9yIGlzIE5vbmUgaWYgcmVz
dWx0cworICAgICAgICB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkLgorICAgICAgICAiIiIKKyAgICAg
ICAgcmVzdWx0c19qc29uID0ge30KKyAgICAgICAgb2xkX3Jlc3VsdHMgPSBOb25lCisgICAgICAg
IGVycm9yID0gTm9uZQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3Jlc3VsdHNf
ZmlsZV9wYXRoKToKKyAgICAgICAgICAgIG9sZF9yZXN1bHRzX2ZpbGUgPSBvcGVuKHNlbGYuX3Jl
c3VsdHNfZmlsZV9wYXRoLCAiciIpCisgICAgICAgICAgICBvbGRfcmVzdWx0cyA9IG9sZF9yZXN1
bHRzX2ZpbGUucmVhZCgpCisgICAgICAgIGVsaWYgc2VsZi5fYnVpbGRlcl9iYXNlX3VybDoKKyAg
ICAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgSlNPTiBmaWxlIG9uIHRo
ZSBidWlsZGJvdCBzZXJ2ZXIuCisgICAgICAgICAgICByZXN1bHRzX2ZpbGVfdXJsID0gKHNlbGYu
X2J1aWxkZXJfYmFzZV91cmwgKworICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgKyAi
LyIgKyBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJM
b2NhbCByZXN1bHRzLmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJpbmcgIgorICAgICAg
ICAgICAgICAgICJpdCBvZmYgdGhlIGFyY2hpdmUgYXQgIiArIHJlc3VsdHNfZmlsZV91cmwpCisK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSB1cmxsaWIy
LnVybG9wZW4ocmVzdWx0c19maWxlX3VybCkKKyAgICAgICAgICAgICAgICBpbmZvID0gcmVzdWx0
c19maWxlLmluZm8oKQorICAgICAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gcmVzdWx0c19maWxl
LnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBodHRwX2Vycm9y
OgorICAgICAgICAgICAgICAgICMgQSBub24tNHh4IHN0YXR1cyBjb2RlIG1lYW5zIHRoZSBib3Qg
aXMgaG9zZWQgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgIyBhbmQgd2UgY2FuJ3Qg
Z3JhYiB0aGUgcmVzdWx0cy5qc29uIGZpbGUgb2ZmIG9mIGl0LgorICAgICAgICAgICAgICAgIGlm
IChodHRwX2Vycm9yLmNvZGUgPCA0MDAgYW5kIGh0dHBfZXJyb3IuY29kZSA+PSA1MDApOgorICAg
ICAgICAgICAgICAgICAgICBlcnJvciA9IGh0dHBfZXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCB1
cmxsaWIyLlVSTEVycm9yLCB1cmxfZXJyb3I6CisgICAgICAgICAgICAgICAgZXJyb3IgPSB1cmxf
ZXJyb3IKKworICAgICAgICBpZiBvbGRfcmVzdWx0czoKKyAgICAgICAgICAgICMgU3RyaXAgdGhl
IHByZWZpeCBhbmQgc3VmZml4IHNvIHdlIGNhbiBnZXQgdGhlIGFjdHVhbCBKU09OIG9iamVjdC4K
KyAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gb2xkX3Jlc3VsdHNbbGVuKHNlbGYuSlNPTl9QUkVG
SVgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4ob2xkX3Jlc3Vs
dHMpIC0gbGVuKHNlbGYuSlNPTl9TVUZGSVgpXQorCisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgcmVzdWx0c19qc29uID0gc2ltcGxlanNvbi5sb2FkcyhvbGRfcmVzdWx0cykKKyAg
ICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJyZXN1bHRz
Lmpzb24gd2FzIG5vdCB2YWxpZCBKU09OLiBDbG9iYmVyaW5nLiIpCisgICAgICAgICAgICAgICAg
IyBUaGUgSlNPTiBmaWxlIGlzIG5vdCB2YWxpZCBKU09OLiBKdXN0IGNsb2JiZXIgdGhlIHJlc3Vs
dHMuCisgICAgICAgICAgICAgICAgcmVzdWx0c19qc29uID0ge30KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ09sZCBKU09OIHJlc3VsdHMgZG8gbm90IGV4aXN0LiBT
dGFydGluZyBmcmVzaC4nKQorICAgICAgICAgICAgcmVzdWx0c19qc29uID0ge30KKworICAgICAg
ICByZXR1cm4gcmVzdWx0c19qc29uLCBlcnJvcgorCisgICAgZGVmIF9nZXRfanNvbihzZWxmKToK
KyAgICAgICAgIiIiR2V0cyB0aGUgcmVzdWx0cyBmb3IgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiIi
IgorICAgICAgICByZXN1bHRzX2pzb24sIGVycm9yID0gc2VsZi5fZ2V0X2FyY2hpdmVkX2pzb25f
cmVzdWx0cygpCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgIyBJZiB0aGVyZSB3YXMg
YW4gZXJyb3IgZG9uJ3Qgd3JpdGUgYSByZXN1bHRzLmpzb24KKyAgICAgICAgICAgICMgZmlsZSBh
dCBhbGwgYXMgaXQgd291bGQgbG9zZSBhbGwgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBib3QuCisg
ICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJBcmNoaXZlIGRpcmVjdG9yeSBpcyBpbmFjY2Vzc2li
bGUuIE5vdCBtb2RpZnlpbmcgIgorICAgICAgICAgICAgICAgICJvciBjbG9iYmVyaW5nIHRoZSBy
ZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFtZQorICAgICAgICBp
ZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAg
ICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMgbm90IGluIHRoZSBy
ZXN1bHRzLmpzb24gZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICUgYnVpbGRlcl9u
YW1lKQorCisgICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVz
dWx0c19qc29uKQorCisgICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29u
OgorICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAoCisgICAgICAgICAg
ICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigpKQorCisgICAgICAg
IHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXQorCisgICAg
ICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9yX2J1aWxkZXIpCisK
KyAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3VsdHNfZm9yX2J1aWxk
ZXIpCisKKyAgICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0
IHR5cGUgYW5kIHRpbWUuCisgICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxm
LlRFU1RTXQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxmLl9mYWlsdXJlcy5p
dGVya2V5cygpKQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtl
eXMoKSkKKyAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6CisgICAgICAgICAg
ICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCisKKyAgICAg
ICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2Rpbmcu
CisgICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1bHRzX2pzb24sIHNl
cGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuSlNPTl9QUkVGSVggKyBy
ZXN1bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgKKworICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVf
c3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgorICAgICAgICAiIiJJbnNlcnRz
IGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBKU09OLgorICAgICAg
ICBUaGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxmLl9wYXNzZWRfdGVz
dHMgYW5kCisgICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJWEFCTEUsIEZJWEFC
TEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UCisgICAgICAgIGVudHJpZXMuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRh
aW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRl
ci4KKyAgICAgICAgIiIiCisgICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIgb2YgdGVzdHMgdGhh
dCBmYWlsZWQuCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0
c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFpbHVyZXMua2V5cygp
KSB8IHNlbGYuX3NraXBwZWRfdGVzdHMpLAorICAgICAgICAgICAgc2VsZi5GSVhBQkxFX0NPVU5U
KQorCisgICAgICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9u
YXJ5LgorICAgICAgICBlbnRyeSA9IHt9CisgICAgICAgIGVudHJ5W3NlbGYuU0tJUF9SRVNVTFRd
ID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCisgICAgICAgIGVudHJ5W3NlbGYuUEFTU19SRVNV
TFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykKKyAgICAgICAgZ2V0ID0gZW50cnkuZ2V0Cisg
ICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFsdWVzKCk6CisgICAg
ICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVd
CisgICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1cmVfY2hhciwgMCkg
KyAxCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJlIHN1bW1hcnkgZGlj
dGlvbmFyeS4KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRz
X2Zvcl9idWlsZGVyLCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLkZJWEFCTEUpCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiBhbGwg
dGhlIHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCisgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxl
bihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKKyAgICAgICAgICAgIHNl
bGYuQUxMX0ZJWEFCTEVfQ09VTlQpCisKKyAgICBkZWYgX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwga2V5KToKKyAgICAgICAgIiIiSW5z
ZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtleSBpbiB0aGUgcmVz
dWx0cyBmb3IKKyAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBsaXN0IGlmIG5vIHN1
Y2ggbGlzdCBleGlzdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9i
dWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAg
ICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgICBpdGVtOiBOdW1iZXIgb3Igc3Ry
aW5nIHRvIGluc2VydCBpbnRvIHRoZSBsaXN0LgorICAgICAgICAgIGtleTogS2V5IGluIHJlc3Vs
dHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgorICAgICAgICAiIiIK
KyAgICAgICAgaWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6CisgICAgICAgICAgICByYXdf
bGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmF3X2xpc3QgPSBbXQorCisgICAgICAgIHJhd19saXN0Lmluc2VydCgwLCBpdGVtKQorICAg
ICAgICByYXdfbGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxU
U19UT19MT0ddCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9IHJhd19saXN0CisK
KyAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxmLCBpdGVtLCBlbmNv
ZGVkX3Jlc3VsdHMpOgorICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGludG8gdGhlIHJ1bi1s
ZW5ndGggZW5jb2RlZCByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgaXRlbTog
U3RyaW5nIG9yIG51bWJlciB0byBpbnNlcnQuCisgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBy
dW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlzLCBlLmcuCisgICAg
ICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KKyAgICAgICAgIiIiCisg
ICAgICAgIGlmIGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVuY29kZWRfcmVzdWx0
c1swXVsxXToKKyAgICAgICAgICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9yZXN1bHRzWzBdWzBd
CisgICAgICAgICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERf
UkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1bHRzWzBdWzBdID0g
bnVtX3Jlc3VsdHMgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFVzZSBhIGxpc3Qg
aW5zdGVhZCBvZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGluZyBzaW5jZQorICAg
ICAgICAgICAgIyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUgY29uY2lzZS4KKyAg
ICAgICAgICAgIGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1dKQorCisgICAgZGVm
IF9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKKyAg
ICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2ZXJzaW9uIG51bWJl
ciwgY3VycmVudCB0aW1lIGV0YykKKyAgICAgICAgaW50byB0aGUgSlNPTi4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmlu
ZyB0aGUgdGVzdCByZXN1bHRzIGZvcgorICAgICAgICAgICAgICBhIHNpbmdsZSBidWlsZGVyLgor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyLCBzZWxmLkJV
SUxEX05VTUJFUlMpCisKKyAgICAgICAgcGF0aF90b193ZWJraXQgPSBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dlYkNvcmUnKQorICAgICAgICBzZWxmLl9p
bnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAg
ICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fd2Via2l0KSwKKyAgICAgICAgICAgIHNl
bGYuV0VCS0lUX1NWTikKKworICAgICAgICBwYXRoX3RvX2Nocm9tZV9iYXNlID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgpCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNp
b24ocGF0aF90b19jaHJvbWVfYmFzZSksCisgICAgICAgICAgICBzZWxmLkNIUk9NRV9TVk4pCisK
KyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWls
ZGVyLAorICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKKyAgICAgICAgICAgIHNlbGYuVElN
RSkKKworICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNlbGYsIHRlc3RfbmFt
ZSwgdGVzdHMpOgorICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGggaXRzIHJlc3Vs
dHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRlc3QgcmVzdWx0IGVudHJpZXMuCisg
ICAgICAgICIiIgorCisgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJhdG9yLlBBU1Nf
UkVTVUxUCisgICAgICAgIHRpbWUgPSAwCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiBz
ZWxmLl9hbGxfdGVzdHM6CisgICAgICAgICAgICByZXN1bHQgPSBKU09OUmVzdWx0c0dlbmVyYXRv
ci5OT19EQVRBX1JFU1VMVAorCisgICAgICAgIGlmIHRlc3RfbmFtZSBpbiBzZWxmLl9mYWlsdXJl
czoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW3NlbGYuX2ZhaWx1
cmVzW3Rlc3RfbmFtZV1dCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYuX3Rlc3RfdGlt
aW5nczoKKyAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0byBnZXQgdGltZSBpbiBzZWNvbmRz
LgorICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0X3RpbWluZ3NbdGVzdF9uYW1lXSkK
KworICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgorICAgICAgICAgICAgdGVzdHNb
dGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKCkKKworICAg
ICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0
ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5SRVNVTFRTXSkKKyAg
ICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHRpbWUsIHRoaXNUZXN0
W3NlbGYuVElNRVNdKQorICAgICAgICBzZWxmLl9ub3JtYWxpemVfcmVzdWx0c19qc29uKHRoaXNU
ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQorCisgICAgZGVmIF9jb252ZXJ0X2pzb25fdG9fY3VycmVu
dF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6CisgICAgICAgICIiIklmIHRoZSBKU09OIGRv
ZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRvIHRoZQorICAg
ICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9uIG51bWJlci4K
KyAgICAgICAgIiIiCisgICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJlc3VsdHNfanNv
biBhbmQKKyAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9PSBzZWxm
LlZFUlNJT04pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVzdWx0c19qc29uW3Nl
bGYuVkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCisKKyAgICBkZWYgX2NyZWF0ZV9yZXN1bHRz
X2FuZF90aW1lc19qc29uKHNlbGYpOgorICAgICAgICByZXN1bHRzX2FuZF90aW1lcyA9IHt9Cisg
ICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQorICAgICAgICByZXN1
bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCisgICAgICAgIHJldHVybiByZXN1bHRzX2Fu
ZF90aW1lcworCisgICAgZGVmIF9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9qc29uKHNlbGYp
OgorICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0ge30KKyAgICAgICAgcmVzdWx0c19mb3Jf
YnVpbGRlcltzZWxmLlRFU1RTXSA9IHt9CisgICAgICAgIHJldHVybiByZXN1bHRzX2Zvcl9idWls
ZGVyCisKKyAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKHNl
bGYsIGVuY29kZWRfbGlzdCk6CisgICAgICAgICIiIlJlbW92ZXMgaXRlbXMgZnJvbSB0aGUgcnVu
LWxlbmd0aCBlbmNvZGVkIGxpc3QgYWZ0ZXIgdGhlIGZpbmFsCisgICAgICAgIGl0ZW0gdGhhdCBl
eGNlZWRzIHRoZSBtYXggbnVtYmVyIG9mIGJ1aWxkcyB0byB0cmFjay4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxlbmd0aCBlbmNvZGVkIHJlc3VsdHMu
IEFuIGFycmF5IG9mIGFycmF5cywgZS5nLgorICAgICAgICAgICAgICBbWzMsJ0EnXSxbMSwnUSdd
XSBlbmNvZGVzIEFBQVEuCisgICAgICAgICIiIgorICAgICAgICBudW1fYnVpbGRzID0gMAorICAg
ICAgICBpbmRleCA9IDAKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBlbmNvZGVkX2xpc3Q6CisgICAg
ICAgICAgICBudW1fYnVpbGRzID0gbnVtX2J1aWxkcyArIHJlc3VsdFswXQorICAgICAgICAgICAg
aW5kZXggPSBpbmRleCArIDEKKyAgICAgICAgICAgIGlmIG51bV9idWlsZHMgPiBzZWxmLk1BWF9O
VU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZWRfbGlzdFs6aW5kZXhdCisgICAgICAgIHJldHVybiBlbmNvZGVkX2xpc3QKKworICAgIGRl
ZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKToK
KyAgICAgICAgIiIiIFBydW5lIHRlc3RzIHdoZXJlIGFsbCBydW5zIHBhc3Mgb3IgdGVzdHMgdGhh
dCBubyBsb25nZXIgZXhpc3QgYW5kCisgICAgICAgIHRydW5jYXRlIGFsbCByZXN1bHRzIHRvIG1h
eE51bWJlck9mQnVpbGRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdDogUmVzdWx0
c0FuZFRpbWVzIG9iamVjdCBmb3IgdGhpcyB0ZXN0LgorICAgICAgICAgIHRlc3RfbmFtZTogTmFt
ZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgICB0ZXN0czogVGhlIEpTT04gb2JqZWN0IHdpdGggYWxs
IHRoZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAg
IHRlc3Rbc2VsZi5SRVNVTFRTXSA9IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJf
b2ZfYnVpbGRzKAorICAgICAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdKQorICAgICAgICB0ZXN0
W3NlbGYuVElNRVNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWls
ZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYuVElNRVNdKQorCisgICAgICAgIGlzX2FsbF9wYXNz
ID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYuUkVTVUxUU10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlBBU1Nf
UkVTVUxUKQorICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNlbGYuX2lzX3Jlc3VsdHNfYWxsX29m
X3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAorICAgICAgICAgICAgc2VsZi5OT19EQVRBX1JFU1VM
VCkKKyAgICAgICAgbWF4X3RpbWUgPSBtYXgoW3RpbWVbMV0gZm9yIHRpbWUgaW4gdGVzdFtzZWxm
LlRJTUVTXV0pCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIHBhc3Nlcy9uby1kYXRhIGZyb20gdGhl
IHJlc3VsdHMgdG8gcmVkdWNlIG5vaXNlIGFuZAorICAgICAgICAjIGZpbGVzaXplLiBJZiBhIHRl
c3QgcGFzc2VzIGV2ZXJ5IHJ1biwgYnV0IHRha2VzID4gTUlOX1RJTUUgdG8gcnVuLAorICAgICAg
ICAjIGRvbid0IHRocm93IGF3YXkgdGhlIGRhdGEuCisgICAgICAgIGlmIGlzX2FsbF9ub19kYXRh
IG9yIChpc19hbGxfcGFzcyBhbmQgbWF4X3RpbWUgPD0gc2VsZi5NSU5fVElNRSk6CisgICAgICAg
ICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQorCisgICAgZGVmIF9pc19yZXN1bHRzX2FsbF9vZl90
eXBlKHNlbGYsIHJlc3VsdHMsIHR5cGUpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgYWxs
IHRoZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZQorICAgICAgICAoZS5nLiBhbGwgcGFz
c2VzKS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihyZXN1bHRzKSA9PSAxIGFuZCByZXN1bHRzWzBd
WzFdID09IHR5cGUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2xpZ2h0dHBkLmNvbmYgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMTUwZGQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9saWdodHRwZC5jb25mCkBAIC0wLDAgKzEsODkgQEAKK3NlcnZlci50YWcgICAgICAgICAg
ICAgICAgICA9ICJMaWdodFRQRC8xLjQuMTkgKFdpbjMyKSIKK3NlcnZlci5tb2R1bGVzICAgICAg
ICAgICAgICA9ICggIm1vZF9hY2Nlc3Nsb2ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibW9kX2FsaWFzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9j
Z2kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3Jld3JpdGUiICkKKwor
IyBkZWZhdWx0IGRvY3VtZW50IHJvb3QgcmVxdWlyZWQKK3NlcnZlci5kb2N1bWVudC1yb290ID0g
Ii4iCisKKyMgZmlsZXMgdG8gY2hlY2sgZm9yIGlmIC4uLi8gaXMgcmVxdWVzdGVkCitpbmRleC1m
aWxlLm5hbWVzICAgICAgICAgICAgPSAoICJpbmRleC5waHAiLCAiaW5kZXgucGwiLCAiaW5kZXgu
Y2dpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4Lmh0bWwiLCAiaW5k
ZXguaHRtIiwgImRlZmF1bHQuaHRtIiApCisjIG1pbWV0eXBlIG1hcHBpbmcKK21pbWV0eXBlLmFz
c2lnbiAgICAgICAgICAgICA9ICgKKyAgIi5naWYiICAgICAgICAgID0+ICAgICAgImltYWdlL2dp
ZiIsCisgICIuanBnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5qcGVnIiAg
ICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLnBuZyIgICAgICAgICAgPT4gICAgICAi
aW1hZ2UvcG5nIiwKKyAgIi5zdmciICAgICAgICAgID0+ICAgICAgImltYWdlL3N2Zyt4bWwiLAor
ICAiLmNzcyIgICAgICAgICAgPT4gICAgICAidGV4dC9jc3MiLAorICAiLmh0bWwiICAgICAgICAg
PT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5odG0iICAgICAgICAgID0+ICAgICAgInRleHQvaHRt
bCIsCisgICIueGh0bWwiICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAor
ICAiLmpzIiAgICAgICAgICAgPT4gICAgICAidGV4dC9qYXZhc2NyaXB0IiwKKyAgIi5sb2ciICAg
ICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNvbmYiICAgICAgICAgPT4gICAgICAi
dGV4dC9wbGFpbiIsCisgICIudGV4dCIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAg
Ii50eHQiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmR0ZCIgICAgICAgICAg
PT4gICAgICAidGV4dC94bWwiLAorICAiLnhtbCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwi
LAorICAiLm1hbmlmZXN0IiAgICAgPT4gICAgICAidGV4dC9jYWNoZS1tYW5pZmVzdCIsCisgKQor
CisjIFVzZSB0aGUgIkNvbnRlbnQtVHlwZSIgZXh0ZW5kZWQgYXR0cmlidXRlIHRvIG9idGFpbiBt
aW1lIHR5cGUgaWYgcG9zc2libGUKK21pbWV0eXBlLnVzZS14YXR0ciAgICAgICAgICA9ICJlbmFi
bGUiCisKKyMjCisjIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIG5vdCBiZSBoYW5kbGUgdmlhIHN0
YXRpYy1maWxlIHRyYW5zZmVyCisjCisjIC5waHAsIC5wbCwgLmZjZ2kgYXJlIG1vc3Qgb2Z0ZW4g
aGFuZGxlZCBieSBtb2RfZmFzdGNnaSBvciBtb2RfY2dpCitzdGF0aWMtZmlsZS5leGNsdWRlLWV4
dGVuc2lvbnMgPSAoICIucGhwIiwgIi5wbCIsICIuY2dpIiApCisKK3NlcnZlci5iaW5kID0gImxv
Y2FsaG9zdCIKK3NlcnZlci5wb3J0ID0gODAwMQorCisjIyB2aXJ0dWFsIGRpcmVjdG9yeSBsaXN0
aW5ncworZGlyLWxpc3RpbmcuYWN0aXZhdGUgICAgICAgID0gImVuYWJsZSIKKyNkaXItbGlzdGlu
Zy5lbmNvZGluZyAgICAgICA9ICJpc28tODg1OS0yIgorI2Rpci1saXN0aW5nLmV4dGVybmFsLWNz
cyAgID0gInN0eWxlL29sZHN0eWxlLmNzcyIKKworIyMgZW5hYmxlIGRlYnVnZ2luZworI2RlYnVn
LmxvZy1yZXF1ZXN0LWhlYWRlciAgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVzcG9uc2UtaGVh
ZGVyICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlcXVlc3QtaGFuZGxpbmcgPSAiZW5hYmxlIgor
I2RlYnVnLmxvZy1maWxlLW5vdC1mb3VuZCAgID0gImVuYWJsZSIKKworIyMjIyBTU0wgZW5naW5l
Cisjc3NsLmVuZ2luZSAgICAgICAgICAgICAgICAgPSAiZW5hYmxlIgorI3NzbC5wZW1maWxlICAg
ICAgICAgICAgICAgID0gInNlcnZlci5wZW0iCisKKyMgUmV3cml0ZSBydWxlIGZvciB1dGYtOCBw
YXRoIHRlc3QgKExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL3V0ZjgtcGF0aC5odG1sKQorIyBT
ZWUgdGhlIGFwYWNoZSByZXdyaXRlIHJ1bGUgYXQgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkv
aW50ZXJjZXB0Ly5odGFjY2VzcworIyBSZXdyaXRlIHJ1bGUgZm9yIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvYXBwY2FjaGUvY3lyaWxsaWMtdXJpLmh0bWwuCisjIFNlZSB0aGUgYXBhY2hlIHJld3Jp
dGUgcnVsZSBhdAorIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9p
bnRlcmNlcHQvLmh0YWNjZXNzCit1cmwucmV3cml0ZS1vbmNlID0gKAorICAiXi91cmkvaW50ZXJj
ZXB0LyguKikiID0+ICIvdXJpL3Jlc291cmNlcy9wcmludC11cmkucGhwIiwKKyAgIl4vYXBwY2Fj
aGUvcmVzb3VyY2VzL2ludGVyY2VwdC8oLiopIiA9PiAiL2FwcGNhY2hlL3Jlc291cmNlcy9wcmlu
dC11cmkucGhwIgorKQorCisjIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
cmVzcG9uc2UtZW5jb2RpbmcuaHRtbCB1c2VzIGFuIGh0YWNjZXNzCisjIHRvIG92ZXJyaWRlIGNo
YXJzZXQgZm9yIHJlcGx5Mi50eHQsIHJlcGx5Mi54bWwsIGFuZCByZXBseTQudHh0LgorJEhUVFBb
InVybCJdID1+ICJeL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZXBseTIuKHR4dHx4bWwpIiB7
CisgIG1pbWV0eXBlLmFzc2lnbiA9ICgKKyAgICAiLnR4dCIgPT4gInRleHQvcGxhaW47IGNoYXJz
ZXQ9d2luZG93cy0xMjUxIiwKKyAgICAiLnhtbCIgPT4gInRleHQveG1sOyBjaGFyc2V0PXdpbmRv
d3MtMTI1MSIKKyAgKQorfQorJEhUVFBbInVybCJdID1+ICJeL3htbGh0dHByZXF1ZXN0L3Jlc291
cmNlcy9yZXBseTQudHh0IiB7CisgIG1pbWV0eXBlLmFzc2lnbiA9ICggIi50eHQiID0+ICJ0ZXh0
L3BsYWluOyBjaGFyc2V0PWtvaTgtciIgKQorfQorCisjIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
YXBwY2FjaGUvd3JvbmctY29udGVudC10eXBlLmh0bWwgdXNlcyBhbiBodGFjY2VzcworIyB0byBv
dmVycmlkZSBtaW1lIHR5cGUgZm9yIHdyb25nLWNvbnRlbnQtdHlwZS5tYW5pZmVzdC4KKyRIVFRQ
WyJ1cmwiXSA9fiAiXi9hcHBjYWNoZS9yZXNvdXJjZXMvd3JvbmctY29udGVudC10eXBlLm1hbmlm
ZXN0IiB7CisgIG1pbWV0eXBlLmFzc2lnbiA9ICggIi5tYW5pZmVzdCIgPT4gInRleHQvcGxhaW4i
ICkKK30KKworIyBBdXRvZ2VuZXJhdGVkIHRlc3Qtc3BlY2lmaWMgY29uZmlnIGZvbGxvd3MuCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDk0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9t
ZXRlcmVkX3N0cmVhbS5weQpAQCAtMCwwICsxLDk2IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCitQYWNrYWdlIHRoYXQgaW1wbGVtZW50cyBhIHN0
cmVhbSB3cmFwcGVyIHRoYXQgaGFzICdtZXRlcnMnIGFzIHdlbGwgYXMKK3JlZ3VsYXIgb3V0cHV0
LiBBICdtZXRlcicgaXMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0IHRoYXQgY2FuIGJlIGVyYXNlZAor
YW5kIHJld3JpdHRlbiByZXBlYXRlZGx5LCB3aXRob3V0IHByb2R1Y2luZyBtdWx0aXBsZSBsaW5l
cyBvZiBvdXRwdXQuIEl0CitjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGVmZmVjdHMgbGlrZSBwcm9n
cmVzcyBiYXJzLgorIiIiCisKKworY2xhc3MgTWV0ZXJlZFN0cmVhbToKKyAgICAiIiJUaGlzIGNs
YXNzIGlzIGEgd3JhcHBlciBhcm91bmQgYSBzdHJlYW0gdGhhdCBhbGxvd3MgeW91IHRvIGltcGxl
bWVudAorICAgIG1ldGVycy4KKworICAgIEl0IGNhbiBiZSB1c2VkIGxpa2UgYSBzdHJlYW0sIGJ1
dCBjYWxsaW5nIHVwZGF0ZSgpIHdpbGwgcHJpbnQKKyAgICB0aGUgc3RyaW5nIGZvbGxvd2VkIGJ5
IG9ubHkgYSBjYXJyaWFnZSByZXR1cm4gKGluc3RlYWQgb2YgYSBjYXJyaWFnZQorICAgIHJldHVy
biBhbmQgYSBsaW5lIGZlZWQpLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBwcm9ncmVz
cyBiYXJzIGFuZAorICAgIG90aGVyIHNvcnRzIG9mIG1ldGVycy4gTm90ZSB0aGF0IGFueXRoaW5n
IHdyaXR0ZW4gYnkgdXBkYXRlKCkgd2lsbCBiZQorICAgIGVyYXNlZCBieSBhIHN1YnNlcXVlbnQg
dXBkYXRlKCksIHdyaXRlKCksIG9yIGZsdXNoKCkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdmVyYm9zZSwgc3RyZWFtKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAg
ICAgdmVyYm9zZTogd2hldGhlciB1cGRhdGUgaXMgYSBuby1vcAorICAgICAgICAgIHN0cmVhbTog
b3V0cHV0IHN0cmVhbSB0byB3cml0ZSB0bworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZGly
dHkgPSBGYWxzZQorICAgICAgICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQorICAgICAgICBzZWxm
Ll9zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgc2VsZi5fbGFzdF91cGRhdGUgPSAiIgorCisgICAg
ZGVmIHdyaXRlKHNlbGYsIHR4dCk6CisgICAgICAgICIiIldyaXRlIHRleHQgZGlyZWN0bHkgdG8g
dGhlIHN0cmVhbSwgb3ZlcndyaXRpbmcgYW5kIHJlc2V0dGluZyB0aGUKKyAgICAgICAgbWV0ZXIu
IiIiCisgICAgICAgIGlmIHNlbGYuX2RpcnR5OgorICAgICAgICAgICAgc2VsZi51cGRhdGUoIiIp
CisgICAgICAgICAgICBzZWxmLl9kaXJ0eSA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0cmVhbS53
cml0ZSh0eHQpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICIiIkZsdXNoIGFueSBi
dWZmZXJlZCBvdXRwdXQuIiIiCisgICAgICAgIHNlbGYuX3N0cmVhbS5mbHVzaCgpCisKKyAgICBk
ZWYgdXBkYXRlKHNlbGYsIHN0cik6CisgICAgICAgICIiIldyaXRlIGFuIHVwZGF0ZSB0byB0aGUg
c3RyZWFtIHRoYXQgd2lsbCBnZXQgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQKKyAgICAgICAgdXBk
YXRlKCkgb3IgYnkgYSB3cml0ZSgpLgorCisgICAgICAgIFRoaXMgaXMgdXNlZCBmb3IgcHJvZ3Jl
c3MgdXBkYXRlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUgcHJlc2VydmVkIGluCisgICAgICAgIHRo
ZSBsb2cuIE5vdGUgdGhhdCB2ZXJib3NlIGRpc2FibGVzIHRoaXMgcm91dGluZTsgd2UgaGF2ZSB0
aGlzIGluCisgICAgICAgIGNhc2Ugd2UgYXJlIGxvZ2dpbmcgbG90cyBvZiBvdXRwdXQgYW5kIHRo
ZSB1cGRhdGUoKXMgd2lsbCBnZXQgbG9zdAorICAgICAgICBvciB3b24ndCB3b3JrIHByb3Blcmx5
ICh0eXBpY2FsbHkgYmVjYXVzZSB2ZXJib3NlIHN0cmVhbXMgYXJlCisgICAgICAgIHJlZGlyZWN0
ZWQgdG8gZmlsZXMuCisKKyAgICAgICAgVE9ETyhkcHJhbmtlKTogZmlndXJlIG91dCBpZiB0aGVy
ZSBpcyBhIHdheSB0byBkZXRlY3QgaWYgd2UncmUgd3JpdGluZworICAgICAgICB0byBhIHN0cmVh
bSB0aGF0IGhhbmRsZXMgQ1JzIGNvcnJlY3RseSAoZS5nLiwgdGVybWluYWxzKS4gVGhhdCBtaWdo
dAorICAgICAgICBiZSBhIGNsZWFuZXIgd2F5IG9mIGhhbmRsaW5nIHRoaXMuCisgICAgICAgICIi
IgorICAgICAgICBpZiBzZWxmLl92ZXJib3NlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgIyBQcmludCB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiBiYWNrc3BhY2VzIHRvIGVyYXNlIHRo
ZSBwcmV2aW91cworICAgICAgICAjIG1lc3NhZ2UuCisgICAgICAgIHNlbGYuX3N0cmVhbS53cml0
ZSgiXGIiICogbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSkKKyAgICAgICAgc2VsZi5fc3RyZWFtLndy
aXRlKHN0cikKKyAgICAgICAgbnVtX3JlbWFpbmluZyA9IGxlbihzZWxmLl9sYXN0X3VwZGF0ZSkg
LSBsZW4oc3RyKQorICAgICAgICBpZiBudW1fcmVtYWluaW5nID4gMDoKKyAgICAgICAgICAgIHNl
bGYuX3N0cmVhbS53cml0ZSgiICIgKiBudW1fcmVtYWluaW5nICsgIlxiIiAqIG51bV9yZW1haW5p
bmcpCisgICAgICAgIHNlbGYuX2xhc3RfdXBkYXRlID0gc3RyCisgICAgICAgIHNlbGYuX2RpcnR5
ID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvcGF0aF91dGlscy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkMDYyYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3BhdGhfdXRpbHMucHkKQEAgLTAsMCArMSwzOTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0eSBt
ZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgcGF0aHMgYW5kCitmaWxlbmFtZXMgZm9yIHRlc3QgcmVz
dWx0cyBhbmQgYmFzZWxpbmVzLiBJdCBhbHNvIGNvbnRhaW5zIHdyYXBwZXJzCitvZiBhIGZldyBy
b3V0aW5lcyBpbiBwbGF0Zm9ybV91dGlscy5weSBzbyB0aGF0IHBsYXRmb3JtX3V0aWxzLnB5IGNh
bgorYmUgY29uc2lkZXJlZCBhICdwcm90ZWN0ZWQnIHBhY2thZ2UgLSBpLmUuLCB0aGlzIGZpbGUg
c2hvdWxkIGJlCit0aGUgb25seSBmaWxlIHRoYXQgZXZlciBpbmNsdWRlcyBwbGF0Zm9ybV91dGls
cy4gVGhpcyBsZWFkcyB0bwordXMgaW5jbHVkaW5nIGEgZmV3IHRoaW5ncyB0aGF0IGRvbid0IHJl
YWxseSBoYXZlIGFueXRoaW5nIHRvIGRvCisgd2l0aCBwYXRocywgdW5mb3J0dW5hdGVseS4iIiIK
KworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCisKK2lt
cG9ydCBwbGF0Zm9ybV91dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxzX3dpbgoraW1wb3J0IHBs
YXRmb3JtX3V0aWxzX21hYworaW1wb3J0IHBsYXRmb3JtX3V0aWxzX2xpbnV4CisKKyMgQ2FjaGUg
c29tZSB2YWx1ZXMgc28gd2UgZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGVtLiBfYmFzZWRp
ciBpcworIyB1c2VkIGJ5IFBhdGhGcm9tQmFzZSgpIGFuZCBjYWNoZXMgdGhlIGZ1bGwgKG5hdGl2
ZSkgcGF0aCB0byB0aGUgdG9wCisjIG9mIHRoZSBzb3VyY2UgdHJlZSAoL3NyYykuIF9iYXNlbGlu
ZV9zZWFyY2hfcGF0aCBpcyB1c2VkIGJ5CisjIEV4cGVjdGVkQmFzZWxpbmVzKCkgYW5kIGNhY2hl
cyB0aGUgbGlzdCBvZiBuYXRpdmUgcGF0aHMgdG8gc2VhcmNoCisjIGZvciBiYXNlbGluZSByZXN1
bHRzLgorX2Jhc2VkaXIgPSBOb25lCitfYmFzZWxpbmVfc2VhcmNoX3BhdGggPSBOb25lCisKKwor
Y2xhc3MgUGF0aE5vdEZvdW5kKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2RlZiBsYXlvdXRf
dGVzdHNfZGlyKCk6CisgICAgIiIiUmV0dXJucyB0aGUgZnVsbHktcXVhbGlmaWVkIHBhdGggdG8g
dGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbnB1dAorICAgIGRhdGEgZm9yIHRoZSBzcGVj
aWZpZWQgbGF5b3V0IHRlc3QuIiIiCisgICAgcmV0dXJuIHBhdGhfZnJvbV9iYXNlKCd0aGlyZF9w
YXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnKQorCisKK2RlZiBjaHJvbWl1bV9iYXNlbGlu
ZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0
aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZXhwZWN0ZWQKKyAgICBiYXNlbGluZSByZXN1bHRzIGZy
b20gY2hyb21pdW0gcG9ydHMuIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwgdGhlCisgICAgY3VycmVu
dGx5IGV4ZWN1dGluZyBwbGF0Zm9ybSBpcyB1c2VkLgorCisgICAgTm90ZTogYWx0aG91Z2ggZGly
ZWN0bHkgcmVmZXJlbmNpbmcgaW5kaXZpZHVhbCBwbGF0Zm9ybV91dGlsc18qIGZpbGVzIGlzCisg
ICAgdXN1YWxseSBkaXNjb3VyYWdlZCwgd2UgYWxsb3cgaXQgaGVyZSBzbyB0aGF0IHRoZSByZWJh
c2VsaW5pbmcgdG9vbCBjYW4KKyAgICBwdWxsIGJhc2VsaW5lcyBmb3IgcGxhdGZvcm1zIG90aGVy
IHRoYW4gdGhlIGhvc3QgcGxhdGZvcm0uIiIiCisKKyAgICAjIE5vcm1hbGl6ZSB0aGUgcGxhdGZv
cm0gc3RyaW5nLgorICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZShwbGF0Zm9ybSkKKyAgICBp
ZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS1tYWMnKToKKyAgICAgICAgcmV0dXJuIHBs
YXRmb3JtX3V0aWxzX21hYy5iYXNlbGluZV9wYXRoKHBsYXRmb3JtKQorICAgIGVsaWYgcGxhdGZv
cm0uc3RhcnRzd2l0aCgnY2hyb21pdW0td2luJyk6CisgICAgICAgIHJldHVybiBwbGF0Zm9ybV91
dGlsc193aW4uYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKKyAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0
c3dpdGgoJ2Nocm9taXVtLWxpbnV4Jyk6CisgICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc19s
aW51eC5iYXNlbGluZV9wYXRoKHBsYXRmb3JtKQorCisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxz
LmJhc2VsaW5lX3BhdGgoKQorCisKK2RlZiB3ZWJraXRfYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSk6
CisgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmlu
ZyBleHBlY3RlZAorICAgIGJhc2VsaW5lIHJlc3VsdHMgZnJvbSBXZWJLaXQgcG9ydHMuIiIiCisg
ICAgcmV0dXJuIHBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0
VGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSkK
KworCitkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0
dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1
bHRzIGZvciBhCisgICAgZ2l2ZW4gcGxhdGZvcm0sIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBh
dGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mCisgICAgdGhlIHNvdXJjZSB0cmVlLiBJZiBw
YXJhbWV0ZXIgcGxhdGZvcm0gaXMgTm9uZSwgcmV0dXJucyB0aGUgbGlzdCBmb3IgdGhlCisgICAg
Y3VycmVudCBwbGF0Zm9ybSB0aGF0IHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbi4KKworICAgIE5v
dGU6IGFsdGhvdWdoIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGluZGl2aWR1YWwgcGxhdGZvcm1fdXRp
bHNfKiBmaWxlcyBpcworICAgIHVzdWFsbHkgZGlzY291cmFnZWQsIHdlIGFsbG93IGl0IGhlcmUg
c28gdGhhdCB0aGUgcmViYXNlbGluaW5nIHRvb2wgY2FuCisgICAgcHVsbCBiYXNlbGluZXMgZm9y
IHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBob3N0IHBsYXRmb3JtLiIiIgorCisgICAgIyBOb3Jt
YWxpemUgdGhlIHBsYXRmb3JtIG5hbWUuCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKHBs
YXRmb3JtKQorICAgIGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLW1hYycpOgorICAg
ICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbWFjLmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRm
b3JtKQorICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0td2luJyk6CisgICAg
ICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc193aW4uYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZv
cm0pCisgICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS1saW51eCcpOgorICAg
ICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbGludXguYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxh
dGZvcm0pCisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCkK
KworCitkZWYgZXhwZWN0ZWRfYmFzZWxpbmVzKGZpbGVuYW1lLCBzdWZmaXgsIHBsYXRmb3JtPU5v
bmUsIGFsbF9iYXNlbGluZXM9RmFsc2UpOgorICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCBmaW5k
cyB3aGVyZSB0aGUgYmFzZWxpbmUgcmVzdWx0cyBhcmUgbG9jYXRlZC4KKworICAgIEFyZ3M6Cisg
ICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRlc3QgZmlsZQorICAgICAgIHN1
ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMsIGluY2x1ZGluZyBkb3Q7
IGUuZy4gJy50eHQnCisgICAgICAgICAgIG9yICcucG5nJy4gIFRoaXMgc2hvdWxkIG5vdCBiZSBO
b25lLCBidXQgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICBwbGF0Zm9ybTogbGF5b3V0
IHRlc3QgcGxhdGZvcm06ICd3aW4nLCAnbGludXgnIG9yICdtYWMnLiBEZWZhdWx0cyB0bworICAg
ICAgICAgICAgICAgICB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKyAgICAgICBhbGxfYmFzZWxpbmVz
OiBJZiBUcnVlLCByZXR1cm4gYW4gb3JkZXJlZCBsaXN0IG9mIGFsbCBiYXNlbGluZSBwYXRocwor
ICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZ2l2ZW4gcGxhdGZvcm0uIElmIEZhbHNlLCBy
ZXR1cm4gb25seSB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICBvbmUuCisgICAgUmV0
dXJucworICAgICAgIGEgbGlzdCBvZiAoIHBsYXRmb3JtX2RpciwgcmVzdWx0c19maWxlbmFtZSAp
LCB3aGVyZQorICAgICAgICAgcGxhdGZvcm1fZGlyIC0gYWJzIHBhdGggdG8gdGhlIHRvcCBvZiB0
aGUgcmVzdWx0cyB0cmVlIChvciB0ZXN0IHRyZWUpCisgICAgICAgICByZXN1bHRzX2ZpbGVuYW1l
IC0gcmVsYXRpdmUgcGF0aCBmcm9tIHRvcCBvZiB0cmVlIHRvIHRoZSByZXN1bHRzIGZpbGUKKyAg
ICAgICAgICAgKG9zLnBhdGguam9pbiBvZiB0aGUgdHdvIGdpdmVzIHlvdSB0aGUgZnVsbCBwYXRo
IHRvIHRoZSBmaWxlLAorICAgICAgICAgICAgdW5sZXNzIE5vbmUgd2FzIHJldHVybmVkLikKKyAg
ICAgIFJldHVybiB2YWx1ZXMgd2lsbCBiZSBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvciB0
aGUgY3VycmVudCBwbGF0Zm9ybQorICAgICAgKGUuZy4sICJcXCIgZm9yIHBhdGggc2VwYXJhdG9y
cyBvbiBXaW5kb3dzKS4gSWYgdGhlIHJlc3VsdHMgZmlsZSBpcyBub3QKKyAgICAgIGZvdW5kLCB0
aGVuIE5vbmUgd2lsbCBiZSByZXR1cm5lZCBmb3IgdGhlIGRpcmVjdG9yeSwgYnV0IHRoZSBleHBl
Y3RlZAorICAgICAgcmVsYXRpdmUgcGF0aG5hbWUgd2lsbCBzdGlsbCBiZSByZXR1cm5lZC4KKyAg
ICAiIiIKKyAgICBnbG9iYWwgX2Jhc2VsaW5lX3NlYXJjaF9wYXRoCisgICAgZ2xvYmFsIF9zZWFy
Y2hfcGF0aF9wbGF0Zm9ybQorICAgIHRlc3RuYW1lID0gb3MucGF0aC5zcGxpdGV4dChyZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSlbMF0KKworICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0g
dGVzdG5hbWUgKyAnLWV4cGVjdGVkJyArIHN1ZmZpeAorCisgICAgaWYgKF9iYXNlbGluZV9zZWFy
Y2hfcGF0aCBpcyBOb25lKSBvciAoX3NlYXJjaF9wYXRoX3BsYXRmb3JtICE9IHBsYXRmb3JtKToK
KyAgICAgICAgX2Jhc2VsaW5lX3NlYXJjaF9wYXRoID0gYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxh
dGZvcm0pCisgICAgICAgIF9zZWFyY2hfcGF0aF9wbGF0Zm9ybSA9IHBsYXRmb3JtCisKKyAgICBi
YXNlbGluZXMgPSBbXQorICAgIGZvciBwbGF0Zm9ybV9kaXIgaW4gX2Jhc2VsaW5lX3NlYXJjaF9w
YXRoOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGly
LCBiYXNlbGluZV9maWxlbmFtZSkpOgorICAgICAgICAgICAgYmFzZWxpbmVzLmFwcGVuZCgocGxh
dGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCisKKyAgICAgICAgaWYgbm90IGFsbF9iYXNl
bGluZXMgYW5kIGJhc2VsaW5lczoKKyAgICAgICAgICAgIHJldHVybiBiYXNlbGluZXMKKworICAg
ICMgSWYgaXQgd2Fzbid0IGZvdW5kIGluIGEgcGxhdGZvcm0gZGlyZWN0b3J5LCByZXR1cm4gdGhl
IGV4cGVjdGVkIHJlc3VsdAorICAgICMgaW4gdGhlIHRlc3QgZGlyZWN0b3J5LCBldmVuIGlmIG5v
IHN1Y2ggZmlsZSBhY3R1YWxseSBleGlzdHMuCisgICAgcGxhdGZvcm1fZGlyID0gbGF5b3V0X3Rl
c3RzX2RpcigpCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2Rp
ciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKKyAgICAgICAgYmFzZWxpbmVzLmFwcGVuZCgocGxhdGZv
cm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCisKKyAgICBpZiBiYXNlbGluZXM6CisgICAgICAg
IHJldHVybiBiYXNlbGluZXMKKworICAgIHJldHVybiBbKE5vbmUsIGJhc2VsaW5lX2ZpbGVuYW1l
KV0KKworCitkZWYgZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsIHN1ZmZpeCk6CisgICAgIiIi
R2l2ZW4gYSB0ZXN0IG5hbWUsIHJldHVybnMgYW4gYWJzb2x1dGUgcGF0aCB0byBpdHMgZXhwZWN0
ZWQgcmVzdWx0cy4KKworICAgIElmIG5vIGV4cGVjdGVkIHJlc3VsdHMgYXJlIGZvdW5kIGluIGFu
eSBvZiB0aGUgc2VhcmNoZWQgZGlyZWN0b3JpZXMsIHRoZQorICAgIGRpcmVjdG9yeSBpbiB3aGlj
aCB0aGUgdGVzdCBpdHNlbGYgaXMgbG9jYXRlZCB3aWxsIGJlIHJldHVybmVkLiBUaGUgcmV0dXJu
CisgICAgdmFsdWUgaXMgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHBsYXRmb3Jt
IChlLmcuLCAiXFwiIGZvcgorICAgIHBhdGggc2VwYXJhdG9ycyBvbiB3aW5kb3dzKS4KKworICAg
IEFyZ3M6CisgICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRlc3QgZmlsZQor
ICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMsIGluY2x1
ZGluZyBkb3Q7IGUuZy4gJy50eHQnCisgICAgICAgICAgIG9yICcucG5nJy4gIFRoaXMgc2hvdWxk
IG5vdCBiZSBOb25lLCBidXQgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICBwbGF0Zm9y
bTogdGhlIG1vc3Qtc3BlY2lmaWMgZGlyZWN0b3J5IG5hbWUgdG8gdXNlIHRvIGJ1aWxkIHRoZQor
ICAgICAgICAgICBzZWFyY2ggbGlzdCBvZiBkaXJlY3RvcmllcywgZS5nLiwgJ2Nocm9taXVtLXdp
bicsIG9yCisgICAgICAgICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCcgKHdlIGZvbGxvdyB0aGUg
V2ViS2l0IGZvcm1hdCkKKyAgICAiIiIKKyAgICBwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVu
YW1lID0gZXhwZWN0ZWRfYmFzZWxpbmVzKGZpbGVuYW1lLCBzdWZmaXgpWzBdCisgICAgaWYgcGxh
dGZvcm1fZGlyOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFz
ZWxpbmVfZmlsZW5hbWUpCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihsYXlvdXRfdGVzdHNfZGly
KCksIGJhc2VsaW5lX2ZpbGVuYW1lKQorCisKK2RlZiByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZp
bGVuYW1lKToKKyAgICAiIiJQcm92aWRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgdGVzdCByZWxhdGl2
ZSB0byB0aGUgbGF5b3V0IHRlc3RzCisgICAgZGlyZWN0b3J5IGFzIGEgdW5peCBzdHlsZSBwYXRo
IChhL2IvYykuIiIiCisgICAgcmV0dXJuIF93aW5fcGF0aF90b191bml4KGZpbGVuYW1lW2xlbihs
YXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdKQorCisKK2RlZiBfd2luX3BhdGhfdG9fdW5peChwYXRo
KToKKyAgICAiIiJDb252ZXJ0IGEgd2luZG93cyBwYXRoIHRvIHVzZSB1bml4LXN0eWxlIHBhdGgg
c2VwYXJhdG9ycyAoYS9iL2MpLiIiIgorICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywgJy8n
KQorCisjCisjIFJvdXRpbmVzIHRoYXQgYXJlIGFyZ3VhYmx5IHBsYXRmb3JtLXNwZWNpZmljIGJ1
dCBoYXZlIGJlZW4gbWFkZQorIyBnZW5lcmljIGZvciBub3cgKHRoZXkgdXNlZCB0byBiZSBpbiBw
bGF0Zm9ybV91dGlsc18qKQorIworCisKK2RlZiBmaWxlbmFtZV90b191cmkoZnVsbF9wYXRoKToK
KyAgICAiIiJDb252ZXJ0IGEgdGVzdCBmaWxlIHRvIGEgVVJJLiIiIgorICAgIExBWU9VVFRFU1Rf
SFRUUF9ESVIgPSAiaHR0cC90ZXN0cy8iCisgICAgTEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSID0g
IndlYnNvY2tldC90ZXN0cy8iCisKKyAgICByZWxhdGl2ZV9wYXRoID0gX3dpbl9wYXRoX3RvX3Vu
aXgocmVsYXRpdmVfdGVzdF9maWxlbmFtZShmdWxsX3BhdGgpKQorICAgIHBvcnQgPSBOb25lCisg
ICAgdXNlX3NzbCA9IEZhbHNlCisKKyAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZ
T1VUVEVTVF9IVFRQX0RJUik6CisgICAgICAgICMgaHR0cC90ZXN0cy8gcnVuIG9mZiBwb3J0IDgw
MDAgYW5kIHNzbC8gb2ZmIDg0NDMKKyAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3Bh
dGhbbGVuKExBWU9VVFRFU1RfSFRUUF9ESVIpOl0KKyAgICAgICAgcG9ydCA9IDgwMDAKKyAgICBl
bGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aChMQVlPVVRURVNUX1dFQlNPQ0tFVF9ESVIpOgor
ICAgICAgICAjIHdlYnNvY2tldC90ZXN0cy8gcnVuIG9mZiBwb3J0IDg4ODAgYW5kIDkzMjMKKyAg
ICAgICAgIyBOb3RlOiB0aGUgcm9vdCBpcyAvLCBub3Qgd2Vic29ja2V0L3Rlc3RzLworICAgICAg
ICBwb3J0ID0gODg4MAorCisgICAgIyBNYWtlIGh0dHAvdGVzdHMvbG9jYWwgcnVuIGFzIGxvY2Fs
IGZpbGVzLiBUaGlzIGlzIHRvIG1pbWljIHRoZQorICAgICMgbG9naWMgaW4gcnVuLXdlYmtpdC10
ZXN0cy4KKyAgICAjIFRPRE8oamlhbmxpKTogQ29uc2lkZXIgZXh0ZW5kaW5nIHRoaXMgdG8gIm1l
ZGlhLyIuCisgICAgaWYgcG9ydCBhbmQgbm90IHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aCgibG9j
YWwvIik6CisgICAgICAgIGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aCgic3NsLyIpOgorICAg
ICAgICAgICAgcG9ydCArPSA0NDMKKyAgICAgICAgICAgIHByb3RvY29sID0gImh0dHBzIgorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcHJvdG9jb2wgPSAiaHR0cCIKKyAgICAgICAgcmV0dXJu
ICIlczovLzEyNy4wLjAuMToldS8lcyIgJSAocHJvdG9jb2wsIHBvcnQsIHJlbGF0aXZlX3BhdGgp
CisKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICAgICAg
cmV0dXJuICJmaWxlOi8vLyIgKyBnZXRfYWJzb2x1dGVfcGF0aChmdWxsX3BhdGgpCisgICAgcmV0
dXJuICJmaWxlOi8vIiArIGdldF9hYnNvbHV0ZV9wYXRoKGZ1bGxfcGF0aCkKKworCitkZWYgZ2V0
X2Fic29sdXRlX3BhdGgocGF0aCk6CisgICAgIiIiUmV0dXJucyBhbiBhYnNvbHV0ZSBVTklYIHBh
dGguIiIiCisgICAgcmV0dXJuIF93aW5fcGF0aF90b191bml4KG9zLnBhdGguYWJzcGF0aChwYXRo
KSkKKworCitkZWYgbWF5YmVfbWFrZV9kaXJlY3RvcnkoKnBhdGgpOgorICAgICIiIkNyZWF0ZXMg
dGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiIiIgor
ICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpwYXRoKSkKKyAgICBl
eGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Cisg
ICAgICAgICAgICByYWlzZQorCisKK2RlZiBwYXRoX2Zyb21fYmFzZSgqY29tcHMpOgorICAgICIi
IlJldHVybnMgYW4gYWJzb2x1dGUgZmlsZW5hbWUgZnJvbSBhIHNldCBvZiBjb21wb25lbnRzIHNw
ZWNpZmllZAorICAgIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiBJZiB0
aGUgcGF0aCBkb2VzIG5vdCBleGlzdCwKKyAgICB0aGUgZXhjZXB0aW9uIFBhdGhOb3RGb3VuZCBp
cyByYWlzZWQuIiIiCisgICAgZ2xvYmFsIF9iYXNlZGlyCisgICAgaWYgX2Jhc2VkaXIgPT0gTm9u
ZToKKyAgICAgICAgIyBXZSBjb21wdXRlIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGJ5IGZp
bmRpbmcgdGhlIGFic29sdXRlCisgICAgICAgICMgcGF0aCBvZiB0aGlzIHNvdXJjZSBmaWxlLCBh
bmQgdGhlbiBjbGltYmluZyB1cCB0aHJlZSBkaXJlY3RvcmllcworICAgICAgICAjIGFzIGdpdmVu
IGluIHN1YnBhdGguIElmIHdlIG1vdmUgdGhpcyBmaWxlLCBzdWJwYXRoIG5lZWRzIHRvIGJlCisg
ICAgICAgICMgdXBkYXRlZC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVf
XykKKyAgICAgICAgc3VicGF0aCA9IG9zLnBhdGguam9pbigndGhpcmRfcGFydHknLCAnV2ViS2l0
JykKKyAgICAgICAgX2Jhc2VkaXIgPSBwYXRoWzpwYXRoLmluZGV4KHN1YnBhdGgpXQorICAgIHBh
dGggPSBvcy5wYXRoLmpvaW4oX2Jhc2VkaXIsICpjb21wcykKKyAgICBpZiBub3Qgb3MucGF0aC5l
eGlzdHMocGF0aCk6CisgICAgICAgIHJhaXNlIFBhdGhOb3RGb3VuZCgnY291bGQgbm90IGZpbmQg
JXMnICUgKHBhdGgpKQorICAgIHJldHVybiBwYXRoCisKKworZGVmIHJlbW92ZV9kaXJlY3Rvcnko
KnBhdGgpOgorICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3RvcnksIGV2ZW4gaWYg
aXQncyBtYXJrZWQgcmVhZC1vbmx5LgorCisgICAgUmVtb3ZlIHRoZSBkaXJlY3RvcnkgbG9jYXRl
ZCBhdCAqcGF0aCwgaWYgaXQgZXhpc3RzLgorCisgICAgc2h1dGlsLnJtdHJlZSgpIGRvZXNuJ3Qg
d29yayBvbiBXaW5kb3dzIGlmIGFueSBvZiB0aGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyAgICBh
cmUgcmVhZC1vbmx5LCB3aGljaCBzdm4gcmVwb3NpdG9yaWVzIGFuZCBzb21lIC5zdm4gZmlsZXMg
YXJlLiAgV2UgbmVlZCB0bworICAgIGJlIGFibGUgdG8gZm9yY2UgdGhlIGZpbGVzIHRvIGJlIHdy
aXRhYmxlIChpLmUuLCBkZWxldGFibGUpIGFzIHdlIHRyYXZlcnNlCisgICAgdGhlIHRyZWUuCisK
KyAgICBFdmVuIHdpdGggYWxsIHRoaXMsIFdpbmRvd3Mgc3RpbGwgc29tZXRpbWVzIGZhaWxzIHRv
IGRlbGV0ZSBhIGZpbGUsIGNpdGluZworICAgIGEgcGVybWlzc2lvbiBlcnJvciAobWF5YmUgc29t
ZXRoaW5nIHRvIGRvIHdpdGggYW50aXZpcnVzIHNjYW5zIG9yIGRpc2sKKyAgICBpbmRleGluZyku
ICBUaGUgYmVzdCBzdWdnZXN0aW9uIGFueSBvZiB0aGUgdXNlciBmb3J1bXMgaGFkIHdhcyB0byB3
YWl0IGEKKyAgICBiaXQgYW5kIHRyeSBhZ2Fpbiwgc28gd2UgZG8gdGhhdCB0b28uICBJdCdzIGhh
bmQtd2F2aW5nLCBidXQgc29tZXRpbWVzIGl0CisgICAgd29ya3MuIDovCisgICAgIiIiCisgICAg
ZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKCpwYXRoKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0
cyhmaWxlX3BhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIHdpbjMyID0gRmFsc2UKKyAgICBp
ZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgd2luMzIgPSBUcnVlCisgICAgICAg
ICMgU29tZSBwZW9wbGUgZG9uJ3QgaGF2ZSB0aGUgQVBJcyBpbnN0YWxsZWQuIEluIHRoYXQgY2Fz
ZSB3ZSdsbCBkbworICAgICAgICAjIHdpdGhvdXQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHdpbjMyYXBpID0gX19pbXBvcnRfXygnd2luMzJhcGknKQorICAgICAgICAgICAgd2luMzJjb24g
PSBfX2ltcG9ydF9fKCd3aW4zMmNvbicpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAg
ICAgICAgICAgIHdpbjMyID0gRmFsc2UKKworICAgICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnko
cm1mdW5jLCBwYXRoKToKKyAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIHN0YXQuU19JV1JJVEUp
CisgICAgICAgICAgICBpZiB3aW4zMjoKKyAgICAgICAgICAgICAgICB3aW4zMmFwaS5TZXRGaWxl
QXR0cmlidXRlcyhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpbjMyY29uLkZJTEVfQVRUUklCVVRFX05PUk1BTCkKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCisgICAgICAgICAgICBleGNlcHQgRW52
aXJvbm1lbnRFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVB
Q0NFUzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBwcmludCAn
RmFpbGVkIHRvIGRlbGV0ZSAlczogdHJ5aW5nIGFnYWluJyAlIHJlcHIocGF0aCkKKyAgICAgICAg
ICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBh
dGgpCisgICAgZWxzZToKKworICAgICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1mdW5jLCBw
YXRoKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICAgICAg
ICAgIHJldHVybiBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQorCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGlu
IG9zLndhbGsoZmlsZV9wYXRoLCB0b3Bkb3duPUZhbHNlKToKKyAgICAgICAgIyBGb3IgUE9TSVg6
ICBtYWtpbmcgdGhlIGRpcmVjdG9yeSB3cml0YWJsZSBndWFyYW50ZWVzIHJlbW92YWJpbGl0eS4K
KyAgICAgICAgIyBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZSBub24tcmVhZC1vbmx5IGJpdHMgaW4g
dGhlIGNobW9kIHZhbHVlLgorICAgICAgICBvcy5jaG1vZChyb290LCAwNzcwKQorICAgICAgICBm
b3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHJlbW92ZV93aXRoX3JldHJ5KG9zLnJlbW92
ZSwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgor
ICAgICAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3Mucm1kaXIsIG9zLnBhdGguam9pbihyb290
LCBuYW1lKSkKKworICAgIHJlbW92ZV93aXRoX3JldHJ5KG9zLnJtZGlyLCBmaWxlX3BhdGgpCisK
KyMKKyMgV3JhcHBlcnMgYXJvdW5kIHBsYXRmb3JtX3V0aWxzCisjCisKKworZGVmIHBsYXRmb3Jt
X25hbWUocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY2hy
b21pdW0gcGxhdGZvcm0gbmFtZSBmb3IgfHBsYXRmb3JtfC4gSWYKKyAgICAgICB8cGxhdGZvcm18
IGlzIE5vbmUsIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNocm9taXVtIHBsYXRmb3JtIG9uIHRo
ZQorICAgICAgIGN1cnJlbnRseSBydW5uaW5nIHN5c3RlbS4gSWYgfHBsYXRmb3JtfCBpcyBvZiB0
aGUgZm9ybSAnY2hyb21pdW0tKicsCisgICAgICAgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLCBv
dGhlcndpc2UgJ2Nocm9taXVtLScgaXMgcHJlcGVuZGVkLiIiIgorICAgIGlmIHBsYXRmb3JtID09
IE5vbmU6CisgICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5wbGF0Zm9ybV9uYW1lKCkKKyAg
ICBpZiBub3QgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tJyk6CisgICAgICAgIHBsYXRm
b3JtID0gImNocm9taXVtLSIgKyBwbGF0Zm9ybQorICAgIHJldHVybiBwbGF0Zm9ybQorCisKK2Rl
ZiBwbGF0Zm9ybV92ZXJzaW9uKCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLnBsYXRmb3Jt
X3ZlcnNpb24oKQorCisKK2RlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKKyAgICByZXR1
cm4gcGxhdGZvcm1fdXRpbHMubGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCkKKworCitkZWYgbGln
aHR0cGRfbW9kdWxlX3BhdGgoKToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMubGlnaHR0cGRf
bW9kdWxlX3BhdGgoKQorCisKK2RlZiBsaWdodHRwZF9waHBfcGF0aCgpOgorICAgIHJldHVybiBw
bGF0Zm9ybV91dGlscy5saWdodHRwZF9waHBfcGF0aCgpCisKKworZGVmIHdkaWZmX3BhdGgoKToK
KyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMud2RpZmZfcGF0aCgpCisKKworZGVmIHRlc3Rfc2hl
bGxfcGF0aCh0YXJnZXQpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy50ZXN0X3NoZWxsX3Bh
dGgodGFyZ2V0KQorCisKK2RlZiBpbWFnZV9kaWZmX3BhdGgodGFyZ2V0KToKKyAgICByZXR1cm4g
cGxhdGZvcm1fdXRpbHMuaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCkKKworCitkZWYgbGF5b3V0X3Rl
c3RfaGVscGVyX3BhdGgodGFyZ2V0KToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMubGF5b3V0
X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KQorCisKK2RlZiBmdXp6eV9tYXRjaF9wYXRoKCk6Cisg
ICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmZ1enp5X21hdGNoX3BhdGgoKQorCisKK2RlZiBzaHV0
X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxz
LnNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKQorCisKK2RlZiBraWxsX2FsbF90ZXN0
X3NoZWxscygpOgorICAgIHBsYXRmb3JtX3V0aWxzLmtpbGxfYWxsX3Rlc3Rfc2hlbGxzKCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHMucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllN2I0YgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Bs
YXRmb3JtX3V0aWxzLnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJQbGF0Zm9ybS1zcGVjaWZpYyB1dGlsaXRpZXMgYW5k
IHBzZXVkby1jb25zdGFudHMKKworQW55IGZ1bmN0aW9ucyB3aG9zZSBpbXBsZW1lbnRhdGlvbnMg
b3IgdmFsdWVzIGRpZmZlciBmcm9tIG9uZSBwbGF0Zm9ybSB0bworYW5vdGhlciBzaG91bGQgYmUg
ZGVmaW5lZCBpbiB0aGVpciByZXNwZWN0aXZlIHBsYXRmb3JtX3V0aWxzXzxwbGF0Zm9ybT4ucHkK
K21vZHVsZXMuIFRoZSBhcHByb3ByaWF0ZSBvbmUgb2YgdGhvc2Ugd2lsbCBiZSBpbXBvcnRlZCBp
bnRvIHRoaXMgbW9kdWxlIHRvCitwcm92aWRlIGNhbGxlcnMgd2l0aCBhIGNvbW1vbiwgcGxhdGZv
cm0taW5kZXBlbmRlbnQgaW50ZXJmYWNlLgorCitUaGlzIGZpbGUgc2hvdWxkIG9ubHkgZXZlciBi
ZSBpbXBvcnRlZCBieSBsYXlvdXRfcGFja2FnZS5wYXRoX3V0aWxzLgorIiIiCisKK2ltcG9ydCBz
eXMKKworIyBXZSBtYXkgbm90IHN1cHBvcnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgYSB1
c2VyIGhhcyBpbnN0YWxsZWQgKEN5Z3dpbgorIyBlc3BlY2lhbGx5IGhhcyBoYWQgcHJvYmxlbXMp
LCBidXQgd2UnbGwgYWxsb3cgdGhlIHBsYXRmb3JtIHV0aWxzIHRvIGJlCisjIGluY2x1ZGVkIGlu
IGFueSBjYXNlIHNvIHdlIGRvbid0IGdldCBhbiBpbXBvcnQgZXJyb3IuCitpZiBzeXMucGxhdGZv
cm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICBmcm9tIHBsYXRmb3JtX3V0aWxzX3dpbiBp
bXBvcnQgKgorZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgZnJvbSBwbGF0Zm9y
bV91dGlsc19tYWMgaW1wb3J0ICoKK2VsaWYgc3lzLnBsYXRmb3JtIGluICgnbGludXgnLCAnbGlu
dXgyJywgJ2ZyZWVic2Q3JywgJ29wZW5ic2Q0Jyk6CisgICAgZnJvbSBwbGF0Zm9ybV91dGlsc19s
aW51eCBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0
Zm9ybV91dGlsc19saW51eC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
N2IyN2M3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkKQEAgLTAs
MCArMSwyNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
VGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisiIiJUaGlzIGlzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGF5b3V0X3BhY2th
Z2UucGxhdGZvcm1fdXRpbHMKKyAgIHBhY2thZ2UuIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBp
bXBvcnRlZCBieSB0aGF0IHBhY2thZ2UuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAor
aW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCisKK2ltcG9ydCBw
YXRoX3V0aWxzCitpbXBvcnQgcGxhdGZvcm1fdXRpbHNfd2luCisKKworZGVmIHBsYXRmb3JtX25h
bWUoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybSB3ZSdyZSBjdXJy
ZW50bHkgcnVubmluZyBvbi4iIiIKKyAgICByZXR1cm4gJ2Nocm9taXVtLWxpbnV4JyArIHBsYXRm
b3JtX3ZlcnNpb24oKQorCisKK2RlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6CisgICAgIiIiUmV0dXJu
cyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgor
ICAgICctc25vd2xlb3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2gg
YmV0d2VlbgorICAgIG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgorICAgIHJldHVy
biAnJworCisKK2RlZiBnZXRfbnVtX2NvcmVzKCk6CisgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVy
IG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRlZCBtYWNoaW5lcywKKyAg
ICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHByb2Nlc3NvcnMuIiIi
CisgICAgbnVtX2NvcmVzID0gb3Muc3lzY29uZigiU0NfTlBST0NFU1NPUlNfT05MTiIpCisgICAg
aWYgaXNpbnN0YW5jZShudW1fY29yZXMsIGludCkgYW5kIG51bV9jb3JlcyA+IDA6CisgICAgICAg
IHJldHVybiBudW1fY29yZXMKKyAgICByZXR1cm4gMQorCisKK2RlZiBiYXNlbGluZV9wYXRoKHBs
YXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRv
cCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQorICAgIGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNp
ZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZvcm18IGlzIE5vbmUsCisgICAgdGhlbiB0
aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVzZWQuIiIiCisgICAgaWYgcGxhdGZvcm0g
aXMgTm9uZToKKyAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKCkKKyAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3Rz
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0
Zm9ybSwgJ0xheW91dFRlc3RzJykKKworCitkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZv
cm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFy
Y2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgorICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBh
dGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKKyAgICBy
ZXR1cm4gW2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pLAorICAgICAgICAgICAgcGxhdGZvcm1fdXRp
bHNfd2luLmJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpLAorICAgICAgICAgICAgcGF0aF91
dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2luJyksCisgICAgICAgICAgICBwYXRoX3V0aWxz
LndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KKworCitkZWYgYXBhY2hlX2V4ZWN1dGFibGVf
cGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFj
aGUiIiIKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKCIvdXNyIiwgInNiaW4iLCAiYXBhY2hlMiIp
CisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgIHJldHVybiBwYXRoCisgICAg
cHJpbnQgIlVuYWJsZSB0byBmaW5lIEFwYWNoZSBleGVjdXRhYmxlICVzIiAlIHBhdGgKKyAgICBf
bWlzc2luZ19hcGFjaGUoKQorCisKK2RlZiBhcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCgpOgorICAg
ICIiIlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCisgICAgcmV0dXJu
IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJkX3BhcnR5IiwgIldlYktpdCIsICJMYXlv
dXRUZXN0cyIsCisgICAgICAgICJodHRwIiwgImNvbmYiLCAiYXBhY2hlMi1kZWJpYW4taHR0cGQu
Y29uZiIpCisKKworZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgorICAgICIiIlJldHVy
bnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgorICAgIGJpbnBhdGgg
PSAiL3Vzci9zYmluL2xpZ2h0dHBkIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGJpbnBhdGgpOgor
ICAgICAgICByZXR1cm4gYmlucGF0aAorICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBMaWdIVFRQ
ZCBleGVjdXRhYmxlICVzIiAlIGJpbnBhdGgKKyAgICBfbWlzc2luZ19saWdodHRwZCgpCisKKwor
ZGVmIGxpZ2h0dHBkX21vZHVsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlicmFyeSBt
b2R1bGUgcGF0aCBmb3IgTGlnSFRUUGQiIiIKKyAgICBtb2RwYXRoID0gIi91c3IvbGliL2xpZ2h0
dHBkIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vZHBhdGgpOgorICAgICAgICByZXR1cm4gbW9k
cGF0aAorICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBMaWdIVFRQZCBtb2R1bGVzICVzIiAlIG1v
ZHBhdGgKKyAgICBfbWlzc2luZ19saWdodHRwZCgpCisKKworZGVmIGxpZ2h0dHBkX3BocF9wYXRo
KCk6CisgICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1dGFibGUgcGF0aCBmb3IgTGlnSFRUUGQi
IiIKKyAgICBiaW5wYXRoID0gIi91c3IvYmluL3BocC1jZ2kiCisgICAgaWYgb3MucGF0aC5leGlz
dHMoYmlucGF0aCk6CisgICAgICAgIHJldHVybiBiaW5wYXRoCisgICAgcHJpbnQgIlVuYWJsZSB0
byBmaW5kIFBIUCBDR0kgZXhlY3V0YWJsZSAlcyIgJSBiaW5wYXRoCisgICAgX21pc3NpbmdfbGln
aHR0cGQoKQorCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgIiIiUGF0aCB0byB0aGUgV0RpZmYg
ZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNzdW1lIGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZAorICAg
IGluIHRoZSB1c2VyJ3MgJFBBVEguIiIiCisgICAgcmV0dXJuICd3ZGlmZicKKworCitkZWYgaW1h
Z2VfZGlmZl9wYXRoKHRhcmdldCk6CisgICAgIiIiUGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBiaW5h
cnkuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcg
b3IgcmVsZWFzZSkiIiIKKyAgICByZXR1cm4gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKHRhcmdl
dCwgJ2ltYWdlX2RpZmYnKQorCisKK2RlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQp
OgorICAgICIiIlBhdGggdG8gdGhlIGxheW91dF90ZXN0IGhlbHBlciBiaW5hcnksIGlmIG5lZWRl
ZCwgZW1wdHkgb3RoZXJ3aXNlIiIiCisgICAgcmV0dXJuICcnCisKKworZGVmIHRlc3Rfc2hlbGxf
cGF0aCh0YXJnZXQpOgorICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYmluYXJ5
IHBhdGggZm9yIG91ciBUZXN0U2hlbGwuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBCdWls
ZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkgIiIiCisgICAgaWYgdGFyZ2V0IGluICgn
RGVidWcnLCAnUmVsZWFzZScpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWJ1Z19wYXRo
ID0gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCdEZWJ1ZycsICd0ZXN0X3NoZWxsJykKKyAgICAg
ICAgICAgIHJlbGVhc2VfcGF0aCA9IF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cygnUmVsZWFzZScs
ICd0ZXN0X3NoZWxsJykKKworICAgICAgICAgICAgZGVidWdfbXRpbWUgPSBvcy5zdGF0KGRlYnVn
X3BhdGgpLnN0X210aW1lCisgICAgICAgICAgICByZWxlYXNlX210aW1lID0gb3Muc3RhdChyZWxl
YXNlX3BhdGgpLnN0X210aW1lCisKKyAgICAgICAgICAgIGlmIGRlYnVnX210aW1lID4gcmVsZWFz
ZV9tdGltZSBhbmQgdGFyZ2V0ID09ICdSZWxlYXNlJyBvciBcCisgICAgICAgICAgICAgICByZWxl
YXNlX210aW1lID4gZGVidWdfbXRpbWUgYW5kIHRhcmdldCA9PSAnRGVidWcnOgorICAgICAgICAg
ICAgICAgIGxvZ2dpbmcuaW5mbygnXHgxYlszMW1XYXJuaW5nOiB5b3UgYXJlIG5vdCBydW5uaW5n
IHRoZSBtb3N0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY2VudCB0ZXN0X3No
ZWxsIGJpbmFyeS4gWW91IG5lZWQgdG8gcGFzcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICctLWRlYnVnIG9yIG5vdCB0byBzZWxlY3QgYmV0d2VlbiBEZWJ1ZyBhbmQgJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnUmVsZWFzZS5ceDFiWzBtJykKKyAgICAgICAgIyBUaGlz
IHdpbGwgZmFpbCBpZiB3ZSBkb24ndCBoYXZlIGJvdGggYSBkZWJ1ZyBhbmQgcmVsZWFzZSBiaW5h
cnkuCisgICAgICAgICMgVGhhdCdzIGZpbmUgYmVjYXVzZSwgaW4gdGhpcyBjYXNlLCB3ZSBtdXN0
IGFscmVhZHkgYmUgcnVubmluZyB0aGUKKyAgICAgICAgIyBtb3N0IHVwLXRvLWRhdGUgb25lLgor
ICAgICAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAgICAgICAgICBwYXNz
CisKKyAgICByZXR1cm4gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKHRhcmdldCwgJ3Rlc3Rfc2hl
bGwnKQorCisKK2RlZiBmdXp6eV9tYXRjaF9wYXRoKCk6CisgICAgIiIiUmV0dXJuIHRoZSBwYXRo
IHRvIHRoZSBmdXp6eSBtYXRjaGVyIGJpbmFyeS4iIiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5w
YXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnZnV6enltYXRjaCcsICdmdXp6eW1hdGNoJykK
KworCitkZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgorICAgICIiIlNodXQg
ZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkgc2h1
dCBkb3duLgorCisgICAgQXJnczoKKyAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElEIG9m
IHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAiIiIKKyAgICAjIHNlcnZlcl9waWQgaXMgbm90IHNl
dCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFudWFsbHkuCisgICAgaWYgc2Vy
dmVyX3BpZCBpcyBOb25lOgorICAgICAgICAjIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNlIGl0IGNv
dWxkIGNvbmZsaWN0IHdpdGggd2ViIHNlcnZlciBwcm9jZXNzZXMKKyAgICAgICAgIyBub3Qgc3Rh
cnRlZCBieSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCisgICAgICAg
IGtpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKKyAgICAgICAga2lsbF9hbGxfcHJvY2Vzcygn
YXBhY2hlMicpCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mua2lsbChz
ZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICNUT0RPKG1tb3NzKSBNYXli
ZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPworICAgICAgICBleGNlcHQgT1NF
cnJvcjoKKyAgICAgICAgICAgICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4gZnJv
bSBhIHN0YWxlIGh0dHBkLnBpZCBmaWxlKSwKKyAgICAgICAgICAgICMgc28gaWYga2lsbCBmYWls
cyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0byAna2lsbGFsbCcgd2ViCisgICAgICAgICAg
ICAjIHNlcnZlcnMuCisgICAgICAgICAgICBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoTm9uZSkKKwor
CitkZWYga2lsbF9wcm9jZXNzKHBpZCk6CisgICAgIiIiRm9yY2VmdWxseSBraWxsIHRoZSBwcm9j
ZXNzLgorCisgICAgQXJnczoKKyAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRvIGJl
IGtpbGxlZC4KKyAgICAiIiIKKyAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCisKKwor
ZGVmIGtpbGxfYWxsX3Byb2Nlc3MocHJvY2Vzc19uYW1lKToKKyAgICBudWxsID0gb3Blbihvcy5k
ZXZudWxsKQorICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBv
cy5nZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lXSwgc3Rk
ZXJyPW51bGwpCisgICAgbnVsbC5jbG9zZSgpCisKKworZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxz
KCk6CisgICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVsbCBiaW5hcnkg
Y3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAga2lsbF9hbGxfcHJvY2VzcygndGVzdF9zaGVsbCcp
CisKKyMKKyMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zCisjCisKKworZGVmIF9taXNzaW5nX2xp
Z2h0dHBkKCk6CisgICAgcHJpbnQgJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0
IGluc3RhbGwgbGlnaHR0cGQgcGhwNS1jZ2kiJworICAgIHByaW50ICdGb3IgY29tcGxldGUgTGlu
dXggYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKKyAgICBwcmludCAnaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycKKyAg
ICBzeXMuZXhpdCgxKQorCisKK2RlZiBfbWlzc2luZ19hcGFjaGUoKToKKyAgICBwcmludCAoJ1Bs
ZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0IGluc3RhbGwgYXBhY2hlMiAnCisgICAg
ICAgICdsaWJhcGFjaGUyLW1vZC1waHA1IicpCisgICAgcHJpbnQgJ0ZvciBjb21wbGV0ZSBMaW51
eCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JworICAgIHByaW50ICdodHRwOi8vY29k
ZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MaW51eEJ1aWxkSW5zdHJ1Y3Rpb25zJworICAg
IHN5cy5leGl0KDEpCisKKworZGVmIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cygqcGF0aGllcyk6
CisgICAgIyBGSVhNRShka2VnZWwpOiB1c2UgbGF0ZXN0IG9yIHdhcm4gaWYgbW9yZSB0aGFuIG9u
ZSBmb3VuZD8KKyAgICBmb3IgZGlyIGluIFsic2NvbnNidWlsZCIsICJvdXQiLCAieGNvZGVidWls
ZCJdOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zy
b21fYmFzZShkaXIsICpwYXRoaWVzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNz
CisgICAgcmFpc2UgcGF0aF91dGlscy5QYXRoTm90Rm91bmQoIlVuYWJsZSB0byBmaW5kICVzIGlu
IGJ1aWxkIHRyZWUiICUKKyAgICAgICAgKG9zLnBhdGguam9pbigqcGF0aGllcykpKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvcGxhdGZvcm1fdXRpbHNfbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbWFjLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYWExMGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wbGF0Zm9ybV91dGlsc19tYWMucHkKQEAgLTAsMCArMSwyMDEgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIGlzIHRoZSBNYWMgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCisgICBwYWNrYWdl
LiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgor
CitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnBy
b2Nlc3MKKworaW1wb3J0IHBhdGhfdXRpbHMKKworCitkZWYgcGxhdGZvcm1fbmFtZSgpOgorICAg
ICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRseSBydW5u
aW5nIG9uLiIiIgorICAgICMgQXQgdGhlIG1vbWVudCBhbGwgY2hyb21pdW0gbWFjIHJlc3VsdHMg
YXJlIHZlcnNpb24taW5kZXBlbmRlbnQuIEF0IHNvbWUKKyAgICAjIHBvaW50IHdlIG1heSBuZWVk
IHRvIHJldHVybiAnY2hyb21pdW0tbWFjJyArIFBsYXRmb3JtVmVyc2lvbigpCisgICAgcmV0dXJu
ICdjaHJvbWl1bS1tYWMnCisKKworZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKKyAgICAiIiJSZXR1
cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBlLmcuICctdmlzdGEnIG9y
CisgICAgJy1zbm93bGVvcGFyZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBkaXN0aW5ndWlz
aCBiZXR3ZWVuCisgICAgbWlub3IgdmVyc2lvbnMsIGl0IHJldHVybnMgJycuIiIiCisgICAgb3Nf
dmVyc2lvbl9zdHJpbmcgPSBwbGF0Zm9ybS5tYWNfdmVyKClbMF0gICMgZS5nLiAiMTAuNS42Igor
ICAgIGlmIG5vdCBvc192ZXJzaW9uX3N0cmluZzoKKyAgICAgICAgcmV0dXJuICctbGVvcGFyZCcK
KworICAgIHJlbGVhc2VfdmVyc2lvbiA9IGludChvc192ZXJzaW9uX3N0cmluZy5zcGxpdCgnLicp
WzFdKQorCisgICAgIyB3ZSBkb24ndCBzdXBwb3J0ICd0aWdlcicgb3IgZWFybGllciByZWxlYXNl
cworICAgIGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA1OgorICAgICAgICByZXR1cm4gJy1sZW9wYXJk
JworICAgIGVsaWYgcmVsZWFzZV92ZXJzaW9uID09IDY6CisgICAgICAgIHJldHVybiAnLXNub3ds
ZW9wYXJkJworCisgICAgcmV0dXJuICcnCisKKworZGVmIGdldF9udW1fY29yZXMoKToKKyAgICAi
IiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRo
cmVhZGVkIG1hY2hpbmVzLAorICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBh
Y3R1YWwgcHJvY2Vzc29ycy4iIiIKKyAgICByZXR1cm4gaW50KG9zLnBvcGVuMigic3lzY3RsIC1u
IGh3Lm5jcHUiKVsxXS5yZWFkKCkpCisKKworZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9u
ZSk6CisgICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBz
b3VyY2UgdHJlZSBmb3IgdGhlCisgICAgYmFzZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBsYXRm
b3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKKyAgICB0aGVuIHRoZSB2ZXJzaW9u
IGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKKyAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgor
ICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQorICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5
b3V0VGVzdHMnKQorCisjIFRPRE86IFdlIHNob3VsZCBhZGQgbGVvcGFyZCBhbmQgc25vd2xlb3Bh
cmQgdG8gdGhlIGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2sKKyMgb25jZSB3ZSBzdGFydCBydW5uaW5n
IHRoZSB0ZXN0cyBmcm9tIHNub3dsZW9wYXJkLgorCisKK2RlZiBiYXNlbGluZV9zZWFyY2hfcGF0
aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVz
IHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGluCisgICAgb3JkZXIgb2YgcHJlZmVy
ZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIi
IgorICAgIHJldHVybiBbYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSksCisgICAgICAgICAgICBwYXRo
X3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnICsgcGxhdGZvcm1fdmVyc2lvbigpKSwK
KyAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQorCisK
K2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwg
d2hpY2ggd2UgYXNzdW1lIGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZAorICAgIGluIHRoZSB1c2Vy
J3MgJFBBVEguIiIiCisgICAgcmV0dXJuICd3ZGlmZicKKworCitkZWYgaW1hZ2VfZGlmZl9wYXRo
KHRhcmdldCk6CisgICAgIiIiUGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBleGVjdXRhYmxlCisKKyAg
ICBBcmdzOgorICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRj
LiIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywg
dGFyZ2V0LCAnaW1hZ2VfZGlmZicpCisKKworZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRh
cmdldCk6CisgICAgIiIiUGF0aCB0byB0aGUgbGF5b3V0X3Rlc3RfaGVscGVyIGV4ZWN1dGFibGUs
IGlmIG5lZWRlZCwgZW1wdHkgb3RoZXJ3aXNlCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBi
dWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIiIgorICAgIHJldHVybiBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRfdGVzdF9oZWxwZXInKQorCisKK2RlZiB0ZXN0
X3NoZWxsX3BhdGgodGFyZ2V0KToKKyAgICAiIiJQYXRoIHRvIHRoZSB0ZXN0X3NoZWxsIGV4ZWN1
dGFibGUuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywn
UmVsZWFzZScsZXRjLiIiIgorICAgICMgVE9ETyhwaW5rZXJ0b24pOiBtYWtlIHx0YXJnZXR8IGhh
cHB5IHdpdGggY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgorICAgIHJldHVybiBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAnVGVzdFNoZWxsLmFwcCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnRzJywgJ01hY09T
JywgJ1Rlc3RTaGVsbCcpCisKKworZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAi
IiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCisgICAgcmV0
dXJuIG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImh0dHBkIikKKworCitkZWYgYXBhY2hl
X2NvbmZpZ19maWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIEFwYWNoZSBj
b25maWcgZmlsZSIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCJ0aGly
ZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAorICAgICAgICAiaHR0cCIsICJjb25m
IiwgImFwYWNoZTItaHR0cGQuY29uZiIpCisKKworZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0
aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQ
ZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScs
ICdsaWdodHRwZCcsICdtYWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdiaW4nLCAnbGlnaHR0cGQnKQorCisKK2RlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgorICAg
ICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAg
cmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBk
JywgJ21hYycsICdsaWInKQorCisKK2RlZiBsaWdodHRwZF9waHBfcGF0aCgpOgorICAgICIiIlJl
dHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAgcmV0dXJu
IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21h
YycsICdiaW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaHAtY2dp
JykKKworCitkZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgorICAgICIiIlNo
dXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkg
c2h1dCBkb3duLgorCisgICAgICBBcmdzOgorICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2Vz
cyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgIiIiCisgICAgIyBzZXJ2ZXJfcGlkIGlz
IG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAg
IGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAgICAgICAgIyBUT0RPKG1tb3NzKSBUaGlzIGlzbid0
IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoIGxpZ2h0dHBkCisgICAgICAgICMg
cHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LCBidXQgZ29vZCBlbm91Z2gg
Zm9yIG5vdy4KKyAgICAgICAga2lsbF9hbGxfcHJvY2VzcygnbGlnaHR0cGQnKQorICAgICAgICBr
aWxsX2FsbF9wcm9jZXNzKCdodHRwZCcpCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICMg
VE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1c3QgdG8gYmUgc3VyZT8KKyAg
ICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBi
YWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBodHRwZC5waWQgZmlsZSksCisgICAgICAgICAgICAj
IHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJRCwganVzdCB0cnkgdG8gJ2tpbGxhbGwn
IHdlYgorICAgICAgICAgICAgIyBzZXJ2ZXJzLgorICAgICAgICAgICAgc2h1dF9kb3duX2h0dHBf
c2VydmVyKE5vbmUpCisKKworZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgorICAgICIiIkZvcmNlZnVs
bHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgIEFyZ3M6CisgICAgICBwaWQ6IFRoZSBpZCBvZiB0
aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCisgICAgIiIiCisgICAgb3Mua2lsbChwaWQsIHNpZ25h
bC5TSUdLSUxMKQorCisKK2RlZiBraWxsX2FsbF9wcm9jZXNzKHByb2Nlc3NfbmFtZSk6CisgICAg
IyBPbiBNYWMgT1MgWCAxMC42LCBraWxsYWxsIGhhcyBhIG5ldyBjb25zdHJhaW50OiAtU0lHTkFM
TkFNRSBvcgorICAgICMgLVNJR05BTE5VTUJFUiBtdXN0IGNvbWUgZmlyc3QuICBFeGFtcGxlIHBy
b2JsZW06CisgICAgIyAgICQga2lsbGFsbCAtdSAkVVNFUiAtVEVSTSBsaWdodHRwZAorICAgICMg
ICBraWxsYWxsOiBpbGxlZ2FsIG9wdGlvbiAtLSBUCisgICAgIyBVc2Ugb2YgdGhlIGVhcmxpZXIg
LVRFUk0gcGxhY2VtZW50IGlzIGp1c3QgZmluZSBvbiAxMC41LgorICAgIG51bGwgPSBvcGVuKG9z
LmRldm51bGwpCisgICAgc3VicHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcsICctVEVSTScsICctdScs
IG9zLmdldGVudignVVNFUicpLAorICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lXSwg
c3RkZXJyPW51bGwpCisgICAgbnVsbC5jbG9zZSgpCisKKworZGVmIGtpbGxfYWxsX3Rlc3Rfc2hl
bGxzKCk6CisgICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVsbCBiaW5h
cnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAga2lsbF9hbGxfcHJvY2VzcygnVGVzdFNoZWxs
JykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX3dpbi5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX3dp
bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2JiZWMzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfd2luLnB5CkBAIC0wLDAgKzEsMjEwIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1
bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGhpcyBpcyB0aGUg
TGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxz
CisgICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBw
YWNrYWdlLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRoX3V0aWxzCitpbXBvcnQgc3VicHJv
Y2VzcworaW1wb3J0IHN5cworCisKK2RlZiBwbGF0Zm9ybV9uYW1lKCk6CisgICAgIiIiUmV0dXJu
cyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIi
CisgICAgIyBXZSdyZSBub3QgcmVhZHkgZm9yIHZlcnNpb24tc3BlY2lmaWMgcmVzdWx0cyB5ZXQu
IFdoZW4gd2UgdW5jb21tZW50CisgICAgIyB0aGlzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIGl0IHRv
IHRoZSBCYXNlbGluZVNlYXJjaFBhdGgoKQorICAgIHJldHVybiAnY2hyb21pdW0td2luJyArIHBs
YXRmb3JtX3ZlcnNpb24oKQorCisKK2RlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6CisgICAgIiIiUmV0
dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBv
cgorICAgICctc25vd2xlb3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vp
c2ggYmV0d2VlbgorICAgIG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgorICAgIHdp
bnZlciA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCisgICAgaWYgd2ludmVyWzBdID09IDYgYW5k
ICh3aW52ZXJbMV0gPT0gMSk6CisgICAgICAgIHJldHVybiAnLTcnCisgICAgaWYgd2ludmVyWzBd
ID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMCk6CisgICAgICAgIHJldHVybiAnLXZpc3RhJworICAg
IGlmIHdpbnZlclswXSA9PSA1IGFuZCAod2ludmVyWzFdID09IDEgb3Igd2ludmVyWzFdID09IDIp
OgorICAgICAgICByZXR1cm4gJy14cCcKKyAgICByZXR1cm4gJycKKworCitkZWYgZ2V0X251bV9j
b3JlcygpOgorICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGlu
ZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCisgICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0
aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgorICAgIHJldHVybiBpbnQob3MuZW52
aXJvbi5nZXQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJywgMSkpCisKKworZGVmIGJhc2VsaW5lX3Bh
dGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0
aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgdGhlCisgICAgYmFzZWxpbmVzIGZvciB0aGUg
c3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKKyAgICB0
aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKKyAgICBpZiBwbGF0
Zm9ybSBpcyBOb25lOgorICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQorICAgIHJl
dHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRf
dGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScs
IHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorCisKK2RlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChw
bGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRv
IHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGluCisgICAgb3JkZXIgb2YgcHJlZmVyZW5j
ZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIiIgor
ICAgIGRpcnMgPSBbXQorICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6CisgICAgICAgIHBsYXRmb3Jt
ID0gcGxhdGZvcm1fbmFtZSgpCisKKyAgICBpZiBwbGF0Zm9ybSA9PSAnY2hyb21pdW0td2luLXhw
JzoKKyAgICAgICAgZGlycy5hcHBlbmQoYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkpCisgICAgaWYg
cGxhdGZvcm0gaW4gKCdjaHJvbWl1bS13aW4teHAnLCAnY2hyb21pdW0td2luLXZpc3RhJyk6Cisg
ICAgICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbi12aXN0YScpKQor
ICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpKQorICAgIGRpcnMu
YXBwZW5kKHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpKQorICAgIGRpcnMu
YXBwZW5kKHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpKQorICAgIHJldHVy
biBkaXJzCisKKworZGVmIHdkaWZmX3BhdGgoKToKKyAgICAiIiJQYXRoIHRvIHRoZSBXRGlmZiBl
eGVjdXRhYmxlLCB3aG9zZSBiaW5hcnkgaXMgY2hlY2tlZCBpbiBvbiBXaW4iIiIKKyAgICByZXR1
cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2Jp
bicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dkaWZmLmV4ZScpCisK
KworZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgorICAgICIiIlJldHVybiB0aGUgcGxhdGZv
cm0tc3BlY2lmaWMgYmluYXJ5IHBhdGggZm9yIHRoZSBpbWFnZSBjb21wYXJlIHV0aWwuCisgICAg
ICAgICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1
bHQgbG9jYXRpb24KKyAgICAgICAgIGluIHBhdGhfdXRpbHMuCisKKyAgICBBcmdzOgorICAgICAg
dGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKKyAgICAiIiIKKyAg
ICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRhcmdldCwgJ2ltYWdlX2RpZmYuZXhlJykKKworCitkZWYg
bGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKKyAgICAiIiJSZXR1cm4gdGhlIHBsYXRm
b3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciB0aGUgbGF5b3V0IHRlc3QgaGVscGVyLgorICAg
IFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBs
b2NhdGlvbgorICAgIGluIHBhdGhfdXRpbHMuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBC
dWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKKyAgICAiIiIKKyAgICByZXR1cm4g
X2ZpbmRfYmluYXJ5KHRhcmdldCwgJ2xheW91dF90ZXN0X2hlbHBlci5leGUnKQorCisKK2RlZiB0
ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToKKyAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNp
ZmljIGJpbmFyeSBwYXRoIGZvciBvdXIgVGVzdFNoZWxsLgorICAgICAgIFdlIHVzZSB0aGlzIGlm
IHdlIGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgorICAgICAg
IGluIHBhdGhfdXRpbHMuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQg
bW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKKyAgICAiIiIKKyAgICByZXR1cm4gX2ZpbmRfYmluYXJ5
KHRhcmdldCwgJ3Rlc3Rfc2hlbGwuZXhlJykKKworCitkZWYgYXBhY2hlX2V4ZWN1dGFibGVfcGF0
aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUi
IiIKKyAgICBwYXRoID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAn
Y3lnd2luJywgInVzciIsICJzYmluIikKKyAgICAjIERvbid0IHJldHVybiBodHRwZC5leGUgc2lu
Y2Ugd2Ugd2FudCB0byB1c2UgdGhpcyBmcm9tIGN5Z3dpbi4KKyAgICByZXR1cm4gb3MucGF0aC5q
b2luKHBhdGgsICJodHRwZCIpCisKKworZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6Cisg
ICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKKyAgICByZXR1
cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxh
eW91dFRlc3RzIiwKKyAgICAgICAgImh0dHAiLCAiY29uZiIsICJjeWd3aW4taHR0cGQuY29uZiIp
CisKKworZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhl
IGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaWdodFRQRC5leGUnKQorCisKK2Rl
ZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9k
dWxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICdsaWInKQorCisKK2RlZiBs
aWdodHRwZF9waHBfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBh
dGggZm9yIExpZ0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICdwaHA1JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAncGhwLWNnaS5leGUnKQorCisKK2RlZiBzaHV0X2Rvd25f
aHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6CisgICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3
ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBmdWxseSBzaHV0IGRvd24uCisKKyAgICBBcmdz
OgorICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVy
LgorICAgICAgICAgIFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2Qu
CisgICAgIiIiCisgICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcv
aW0nLCAnTGlnaHRUUEQuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJv
Y2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSku
d2FpdCgpCisgICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0n
LCAnaHR0cGQuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFLAorICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgp
CisKKworZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgorICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUg
cHJvY2Vzcy4KKworICAgIEFyZ3M6CisgICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0
byBiZSBraWxsZWQuCisgICAgIiIiCisgICAgc3VicHJvY2Vzcy5jYWxsKCgndGFza2tpbGwuZXhl
JywgJy9mJywgJy9waWQnLCBzdHIocGlkKSksCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJ
UEUpCisKKworZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxzKHNlbGYpOgorICAgICIiIktpbGxzIGFs
bCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIi
IgorICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ3Rl
c3Rfc2hlbGwuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFLAorICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgp
CisKKyMKKyMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zLgorIworCisKK2RlZiBfZmluZF9iaW5h
cnkodGFyZ2V0LCBiaW5hcnkpOgorICAgICIiIk9uIFdpbmRvd3MsIHdlIGxvb2sgZm9yIGJpbmFy
aWVzIHRoYXQgd2UgY29tcGlsZSBpbiBwb3RlbnRpYWxseQorICAgIHR3byBwbGFjZXM6IHNyYy93
ZWJraXQvJHRhcmdldCAocHJlZmVyYWJseSwgd2hpY2ggd2UgZ2V0IGlmIHdlCisgICAgYnVpbHQg
dXNpbmcgd2Via2l0X2dsdWUuZ3lwKSwgb3Igc3JjL2Nocm9tZS8kdGFyZ2V0IChpZiBjb21waWxl
ZCBzb21lCisgICAgb3RoZXIgd2F5KS4iIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCB0YXJnZXQsIGJpbmFyeSkKKyAgICBleGNl
cHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJl
dHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCdjaHJvbWUnLCB0YXJnZXQsIGJpbmFyeSkK
KyAgICAgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICAgICAgcmV0
dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ2J1aWxkJywgdGFyZ2V0LCBiaW5hcnkpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjQ3ZjcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQpAQCAtMCwwICsxLDgxOCBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgaGVscGVyIGNsYXNzIGZvciBy
ZWFkaW5nIGluIGFuZCBkZWFsaW5nIHdpdGggdGVzdHMgZXhwZWN0YXRpb25zCitmb3IgbGF5b3V0
IHRlc3RzLgorIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1w
b3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBwYXRoX3V0aWxzCisKK3N5cy5wYXRoLmFwcGVu
ZChwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJLaXRUb29scycpKSAK
K2ltcG9ydCBzaW1wbGVqc29uCisKKyMgVGVzdCBleHBlY3RhdGlvbiBhbmQgbW9kaWZpZXIgY29u
c3RhbnRzLgorKFBBU1MsIEZBSUwsIFRFWFQsIElNQUdFLCBJTUFHRV9QTFVTX1RFWFQsIFRJTUVP
VVQsIENSQVNILCBTS0lQLCBXT05URklYLAorIERFRkVSLCBTTE9XLCBSRUJBU0VMSU5FLCBNSVNT
SU5HLCBGTEFLWSwgTk9XLCBOT05FKSA9IHJhbmdlKDE2KQorCisjIFRlc3QgZXhwZWN0YXRpb24g
ZmlsZSB1cGRhdGUgYWN0aW9uIGNvbnN0YW50cworKE5PX0NIQU5HRSwgUkVNT1ZFX1RFU1QsIFJF
TU9WRV9QTEFURk9STSwgQUREX1BMQVRGT1JNU19FWENFUFRfVEhJUykgPSByYW5nZSg0KQorCisK
K2NsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CisgICAgVEVTVF9MSVNUID0gInRlc3RfZXhwZWN0YXRp
b25zLnR4dCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cywgZGlyZWN0b3J5LCBwbGF0
Zm9ybSwgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2RlLAorICAgICAgICB0ZXN0c19hcmVfcHJl
c2VudD1UcnVlKToKKyAgICAgICAgIiIiUmVhZHMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIGZpbGVz
IGZyb20gdGhlIGdpdmVuIGRpcmVjdG9yeS4iIiIKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9p
bihkaXJlY3RvcnksIHNlbGYuVEVTVF9MSVNUKQorICAgICAgICBzZWxmLl9leHBlY3RlZF9mYWls
dXJlcyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlKHBhdGgsIHRlc3RzLCBwbGF0Zm9ybSwKKyAgICAg
ICAgICAgIGlzX2RlYnVnX21vZGUsIGlzX2xpbnRfbW9kZSwgdGVzdHNfYXJlX3ByZXNlbnQ9dGVz
dHNfYXJlX3ByZXNlbnQpCisKKyAgICAjIFRPRE8ob2phbik6IEFsbG93IGZvciByZW1vdmluZyBz
a2lwcGVkIHRlc3RzIHdoZW4gZ2V0dGluZyB0aGUgbGlzdCBvZgorICAgICMgdGVzdHMgdG8gcnVu
LCBidXQgbm90IHdoZW4gZ2V0dGluZyBtZXRyaWNzLgorICAgICMgVE9ETyhvamFuKTogUmVwbGFj
ZSB0aGUgR2V0KiBjYWxscyBoZXJlIHdpdGggdGhlIG1vcmUgc2FuZSBBUEkgZXhwb3NlZAorICAg
ICMgYnkgVGVzdEV4cGVjdGF0aW9uc0ZpbGUgYmVsb3cuIE1heWJlIG1lcmdlIHRoZSB0d28gY2xh
c3NlcyBlbnRpcmVseT8KKworICAgIGRlZiBnZXRfZXhwZWN0YXRpb25zX2pzb25fZm9yX2FsbF9w
bGF0Zm9ybXMoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBzZWxmLl9leHBl
Y3RlZF9mYWlsdXJlcy5nZXRfZXhwZWN0YXRpb25zX2pzb25fZm9yX2FsbF9wbGF0Zm9ybXMoKSkK
KworICAgIGRlZiBnZXRfcmViYXNlbGluaW5nX2ZhaWx1cmVzKHNlbGYpOgorICAgICAgICByZXR1
cm4gKHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF90ZXN0X3NldChSRUJBU0VMSU5FLCBGQUlM
KSB8CisgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X3Rlc3Rfc2V0
KFJFQkFTRUxJTkUsIElNQUdFKSB8CisgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0ZWRfZmFp
bHVyZXMuZ2V0X3Rlc3Rfc2V0KFJFQkFTRUxJTkUsIFRFWFQpIHwKKyAgICAgICAgICAgICAgICBz
ZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdF9zZXQoUkVCQVNFTElORSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfUExVU19U
RVhUKSkKKworICAgIGRlZiBnZXRfb3B0aW9ucyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF9vcHRpb25zKHRlc3QpCisKKyAgICBkZWYgZ2V0
X2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVk
X2ZhaWx1cmVzLmdldF9leHBlY3RhdGlvbnModGVzdCkKKworICAgIGRlZiBnZXRfZXhwZWN0YXRp
b25zX3N0cmluZyhzZWxmLCB0ZXN0KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZXhwZWN0YXRv
bnMgZm9yIHRoZSBnaXZlbiB0ZXN0IGFzIGFuIHVwcGVyY2FzZSBzdHJpbmcuCisgICAgICAgIElm
IHRoZXJlIGFyZSBubyBleHBlY3RhdGlvbnMgZm9yIHRoZSB0ZXN0LCB0aGVuICJQQVNTIiBpcyBy
ZXR1cm5lZC4iIiIKKyAgICAgICAgZXhwZWN0YXRpb25zID0gc2VsZi5nZXRfZXhwZWN0YXRpb25z
KHRlc3QpCisgICAgICAgIHJldHZhbCA9IFtdCisKKyAgICAgICAgZm9yIGV4cGVjdGF0aW9uIGlu
IGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIGZvciBpdGVtIGluIFRlc3RFeHBlY3RhdGlvbnNG
aWxlLkVYUEVDVEFUSU9OUy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGl0ZW1bMV0gPT0g
ZXhwZWN0YXRpb246CisgICAgICAgICAgICAgICAgICAgIHJldHZhbC5hcHBlbmQoaXRlbVswXSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gIiAiLmpvaW4ocmV0
dmFsKS51cHBlcigpCisKKyAgICBkZWYgZ2V0X3RpbWVsaW5lX2Zvcl90ZXN0KHNlbGYsIHRlc3Qp
OgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X3RpbWVsaW5lX2Zv
cl90ZXN0KHRlc3QpCisKKyAgICBkZWYgZ2V0X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUoc2VsZiwg
cmVzdWx0X3R5cGUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0
X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUocmVzdWx0X3R5cGUpCisKKyAgICBkZWYgZ2V0X3Rlc3Rz
X3dpdGhfdGltZWxpbmUoc2VsZiwgdGltZWxpbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhw
ZWN0ZWRfZmFpbHVyZXMuZ2V0X3Rlc3RzX3dpdGhfdGltZWxpbmUodGltZWxpbmUpCisKKyAgICBk
ZWYgbWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAg
ICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIGdvdCBvbmUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMg
Zm9yIHRoaXMgdGVzdC4iIiIKKyAgICAgICAgcmV0dXJuIChyZXN1bHQgaW4gc2VsZi5fZXhwZWN0
ZWRfZmFpbHVyZXMuZ2V0X2V4cGVjdGF0aW9ucyh0ZXN0KSBvcgorICAgICAgICAgICAgICAgIChy
ZXN1bHQgaW4gKElNQUdFLCBURVhULCBJTUFHRV9QTFVTX1RFWFQpIGFuZAorICAgICAgICAgICAg
ICAgIEZBSUwgaW4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X2V4cGVjdGF0aW9ucyh0ZXN0
KSkgb3IKKyAgICAgICAgICAgICAgICByZXN1bHQgPT0gTUlTU0lORyBhbmQgc2VsZi5pc19yZWJh
c2VsaW5pbmcodGVzdCkgb3IKKyAgICAgICAgICAgICAgICByZXN1bHQgPT0gU0tJUCBhbmQgc2Vs
Zi5fZXhwZWN0ZWRfZmFpbHVyZXMuaGFzX21vZGlmaWVyKHRlc3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
S0lQKSkKKworICAgIGRlZiBpc19yZWJhc2VsaW5pbmcoc2VsZiwgdGVzdCk6CisgICAgICAgIHJl
dHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5oYXNfbW9kaWZpZXIodGVzdCwgUkVCQVNFTElO
RSkKKworICAgIGRlZiBoYXNfbW9kaWZpZXIoc2VsZiwgdGVzdCwgbW9kaWZpZXIpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuaGFzX21vZGlmaWVyKHRlc3QsIG1vZGlm
aWVyKQorCisgICAgZGVmIHJlbW92ZV9wbGF0Zm9ybV9mcm9tX2ZpbGUoc2VsZiwgdGVzdHMsIHBs
YXRmb3JtLCBiYWNrdXA9RmFsc2UpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFp
bHVyZXMucmVtb3ZlX3BsYXRmb3JtX2Zyb21fZmlsZSh0ZXN0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJhY2t1cCkKKworCitkZWYgc3RyaXBfY29tbWVudHMobGluZSk6CisgICAgIiIi
U3RyaXBzIGNvbW1lbnRzIGZyb20gYSBsaW5lIGFuZCByZXR1cm4gTm9uZSBpZiB0aGUgbGluZSBp
cyBlbXB0eQorICAgIG9yIGVsc2UgdGhlIGNvbnRlbnRzIG9mIGxpbmUgd2l0aCBsZWFkaW5nIGFu
ZCB0cmFpbGluZyBzcGFjZXMgcmVtb3ZlZAorICAgIGFuZCBhbGwgb3RoZXIgd2hpdGVzcGFjZSBj
b2xsYXBzZWQiIiIKKworICAgIGNvbW1lbnRJbmRleCA9IGxpbmUuZmluZCgnLy8nKQorICAgIGlm
IGNvbW1lbnRJbmRleCBpcyAtMToKKyAgICAgICAgY29tbWVudEluZGV4ID0gbGVuKGxpbmUpCisK
KyAgICBsaW5lID0gcmUuc3ViKHInXHMrJywgJyAnLCBsaW5lWzpjb21tZW50SW5kZXhdLnN0cmlw
KCkpCisgICAgaWYgbGluZSA9PSAnJzoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBlbHNlOgor
ICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIE1vZGlmaWVyc0FuZEV4cGVjdGF0aW9uczoK
KyAgICAiIiJBIGhvbGRlciBmb3IgbW9kaWZpZXJzIGFuZCBleHBlY3RhdGlvbnMgb24gYSB0ZXN0
IHRoYXQgc2VyaWFsaXplcyB0bworICAgIEpTT04uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbW9kaWZpZXJzLCBleHBlY3RhdGlvbnMpOgorICAgICAgICBzZWxmLm1vZGlmaWVycyA9IG1v
ZGlmaWVycworICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucworCisKK2Ns
YXNzIEV4cGVjdGF0aW9uc0pzb25FbmNvZGVyKHNpbXBsZWpzb24uSlNPTkVuY29kZXIpOgorICAg
ICIiIkpTT04gZW5jb2RlciB0aGF0IGNhbiBoYW5kbGUgTW9kaWZpZXJzQW5kRXhwZWN0YXRpb25z
IG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAg
ICBpZiBpc2luc3RhbmNlKG9iaiwgTW9kaWZpZXJzQW5kRXhwZWN0YXRpb25zKToKKyAgICAgICAg
ICAgIHJldHVybiB7Im1vZGlmaWVycyI6IG9iai5tb2RpZmllcnMsCisgICAgICAgICAgICAgICAg
ICAgICJleHBlY3RhdGlvbnMiOiBvYmouZXhwZWN0YXRpb25zfQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmV0dXJuIEpTT05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgb2JqKQorCisKK2NsYXNz
IFRlc3RFeHBlY3RhdGlvbnNGaWxlOgorICAgICIiIlRlc3QgZXhwZWN0YXRpb24gZmlsZXMgY29u
c2lzdCBvZiBsaW5lcyB3aXRoIHNwZWNpZmljYXRpb25zIG9mIHdoYXQKKyAgICB0byBleHBlY3Qg
ZnJvbSBsYXlvdXQgdGVzdCBjYXNlcy4gVGhlIHRlc3QgY2FzZXMgY2FuIGJlIGRpcmVjdG9yaWVz
CisgICAgaW4gd2hpY2ggY2FzZSB0aGUgZXhwZWN0YXRpb25zIGFwcGx5IHRvIGFsbCB0ZXN0IGNh
c2VzIGluIHRoYXQKKyAgICBkaXJlY3RvcnkgYW5kIGFueSBzdWJkaXJlY3RvcnkuIFRoZSBmb3Jt
YXQgb2YgdGhlIGZpbGUgaXMgYWxvbmcgdGhlCisgICAgbGluZXMgb2Y6CisKKyAgICAgIExheW91
dFRlc3RzL2Zhc3QvanMvZml4bWUuanMgPSBGQUlMCisgICAgICBMYXlvdXRUZXN0cy9mYXN0L2pz
L2ZsYWt5LmpzID0gRkFJTCBQQVNTCisgICAgICBMYXlvdXRUZXN0cy9mYXN0L2pzL2NyYXNoLmpz
ID0gQ1JBU0ggVElNRU9VVCBGQUlMIFBBU1MKKyAgICAgIC4uLgorCisgICAgVG8gYWRkIG90aGVy
IG9wdGlvbnM6CisgICAgICBTS0lQIDogTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0g
VElNRU9VVCBQQVNTCisgICAgICBERUJVRyA6IExheW91dFRlc3RzL2Zhc3QvanMvbm8tZ29vZC5q
cyA9IFRJTUVPVVQgUEFTUworICAgICAgREVCVUcgU0tJUCA6IExheW91dFRlc3RzL2Zhc3QvanMv
bm8tZ29vZC5qcyA9IFRJTUVPVVQgUEFTUworICAgICAgTElOVVggREVCVUcgU0tJUCA6IExheW91
dFRlc3RzL2Zhc3QvanMvbm8tZ29vZC5qcyA9IFRJTUVPVVQgUEFTUworICAgICAgREVGRVIgTElO
VVggV0lOIDogTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisK
KyAgICBTS0lQOiBEb2Vzbid0IHJ1biB0aGUgdGVzdC4KKyAgICBTTE9XOiBUaGUgdGVzdCB0YWtl
cyBhIGxvbmcgdGltZSB0byBydW4sIGJ1dCBkb2VzIG5vdCB0aW1lb3V0IGluZGVmaW5pdGVseS4K
KyAgICBXT05URklYOiBGb3IgdGVzdHMgdGhhdCB3ZSBuZXZlciBpbnRlbmQgdG8gcGFzcyBvbiBh
IGdpdmVuIHBsYXRmb3JtLgorICAgIERFRkVSOiBUZXN0IGRvZXMgbm90IGNvdW50IGluIG91ciBz
dGF0aXN0aWNzIGZvciB0aGUgY3VycmVudCByZWxlYXNlLgorICAgIERFQlVHOiBFeHBlY3RhdGlv
bnMgYXBwbHkgb25seSB0byB0aGUgZGVidWcgYnVpbGQuCisgICAgUkVMRUFTRTogRXhwZWN0YXRp
b25zIGFwcGx5IG9ubHkgdG8gcmVsZWFzZSBidWlsZC4KKyAgICBMSU5VWC9XSU4vV0lOLVhQL1dJ
Ti1WSVNUQS9XSU4tNy9NQUM6IEV4cGVjdGF0aW9ucyBhcHBseSBvbmx5IHRvIHRoZXNlCisgICAg
ICAgIHBsYXRmb3Jtcy4KKworICAgIE5vdGVzOgorICAgICAgLUEgdGVzdCBjYW5ub3QgYmUgYm90
aCBTTE9XIGFuZCBUSU1FT1VUCisgICAgICAtQSB0ZXN0IGNhbm5vdCBiZSBib3RoIERFRkVSIGFu
ZCBXT05URklYCisgICAgICAtQSB0ZXN0IHNob3VsZCBvbmx5IGJlIG9uZSBvZiBJTUFHRSwgVEVY
VCwgSU1BR0UrVEVYVCwgb3IgRkFJTC4gRkFJTCBpcworICAgICAgIGEgbWlncmF0b3J5IHN0YXRl
IHRoYXQgY3VycmVudGx5IG1lYW5zIGVpdGhlciBJTUFHRSwgVEVYVCwgb3IKKyAgICAgICBJTUFH
RStURVhULiBPbmNlIHdlIGhhdmUgZmluaXNoZWQgbWlncmF0aW5nIHRoZSBleHBlY3RhdGlvbnMs
IHdlIHdpbGwKKyAgICAgICBjaGFuZ2UgRkFJTCB0byBoYXZlIHRoZSBtZWFuaW5nIG9mIElNQUdF
K1RFWFQgYW5kIHJlbW92ZSB0aGUgSU1BR0UrVEVYVAorICAgICAgIGlkZW50aWZpZXIuCisgICAg
ICAtQSB0ZXN0IGNhbiBiZSBpbmNsdWRlZCB0d2ljZSwgYnV0IG5vdCB2aWEgdGhlIHNhbWUgcGF0
aC4KKyAgICAgIC1JZiBhIHRlc3QgaXMgaW5jbHVkZWQgdHdpY2UsIHRoZW4gdGhlIG1vcmUgcHJl
Y2lzZSBwYXRoIHdpbnMuCisgICAgICAtQ1JBU0ggdGVzdHMgY2Fubm90IGJlIERFRkVSIG9yIFdP
TlRGSVgKKyAgICAiIiIKKworICAgIEVYUEVDVEFUSU9OUyA9IHsncGFzcyc6IFBBU1MsCisgICAg
ICAgICAgICAgICAgICAgICdmYWlsJzogRkFJTCwKKyAgICAgICAgICAgICAgICAgICAgJ3RleHQn
OiBURVhULAorICAgICAgICAgICAgICAgICAgICAnaW1hZ2UnOiBJTUFHRSwKKyAgICAgICAgICAg
ICAgICAgICAgJ2ltYWdlK3RleHQnOiBJTUFHRV9QTFVTX1RFWFQsCisgICAgICAgICAgICAgICAg
ICAgICd0aW1lb3V0JzogVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgJ2NyYXNoJzogQ1JB
U0gsCisgICAgICAgICAgICAgICAgICAgICdtaXNzaW5nJzogTUlTU0lOR30KKworICAgIEVYUEVD
VEFUSU9OX0RFU0NSSVBUSU9OUyA9IHtTS0lQOiAoJ3NraXBwZWQnLCAnc2tpcHBlZCcpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTOiAoJ3Bhc3MnLCAncGFzc2VzJyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBSUw6ICgnZmFpbHVyZScsICdmYWlsdXJl
cycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVhUOiAoJ3RleHQgZGlmZiBt
aXNtYXRjaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dCBk
aWZmIG1pc21hdGNoJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFOiAo
J2ltYWdlIG1pc21hdGNoJywgJ2ltYWdlIG1pc21hdGNoJyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElNQUdFX1BMVVNfVEVYVDogKCdpbWFnZSBhbmQgdGV4dCBtaXNtYXRjaCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbWFn
ZSBhbmQgdGV4dCBtaXNtYXRjaCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
UkFTSDogKCd0ZXN0IHNoZWxsIGNyYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAndGVzdCBzaGVsbCBjcmFzaGVzJyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJTUVPVVQ6ICgndGVzdCB0aW1lZCBvdXQnLCAndGVzdHMgdGltZWQgb3V0Jyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JU1NJTkc6ICgnbm8gZXhwZWN0ZWQg
cmVzdWx0IGZvdW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdubyBleHBlY3RlZCByZXN1bHRzIGZvdW5kJyl9CisKKyAgICBFWFBFQ1RBVElPTl9PUkRFUiA9
IChQQVNTLCBDUkFTSCwgVElNRU9VVCwgTUlTU0lORywgSU1BR0VfUExVU19URVhULAorICAgICAg
IFRFWFQsIElNQUdFLCBGQUlMLCBTS0lQKQorCisgICAgQkFTRV9QTEFURk9STVMgPSAoJ2xpbnV4
JywgJ21hYycsICd3aW4nKQorICAgIFBMQVRGT1JNUyA9IEJBU0VfUExBVEZPUk1TICsgKCd3aW4t
eHAnLCAnd2luLXZpc3RhJywgJ3dpbi03JykKKworICAgIEJVSUxEX1RZUEVTID0gKCdkZWJ1Zycs
ICdyZWxlYXNlJykKKworICAgIE1PRElGSUVSUyA9IHsnc2tpcCc6IFNLSVAsCisgICAgICAgICAg
ICAgICAgICd3b250Zml4JzogV09OVEZJWCwKKyAgICAgICAgICAgICAgICAgJ2RlZmVyJzogREVG
RVIsCisgICAgICAgICAgICAgICAgICdzbG93JzogU0xPVywKKyAgICAgICAgICAgICAgICAgJ3Jl
YmFzZWxpbmUnOiBSRUJBU0VMSU5FLAorICAgICAgICAgICAgICAgICAnbm9uZSc6IE5PTkV9CisK
KyAgICBUSU1FTElORVMgPSB7J3dvbnRmaXgnOiBXT05URklYLAorICAgICAgICAgICAgICAgICAn
bm93JzogTk9XLAorICAgICAgICAgICAgICAgICAnZGVmZXInOiBERUZFUn0KKworICAgIFJFU1VM
VF9UWVBFUyA9IHsnc2tpcCc6IFNLSVAsCisgICAgICAgICAgICAgICAgICAgICdwYXNzJzogUEFT
UywKKyAgICAgICAgICAgICAgICAgICAgJ2ZhaWwnOiBGQUlMLAorICAgICAgICAgICAgICAgICAg
ICAnZmxha3knOiBGTEFLWX0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBmdWxsX3Rl
c3RfbGlzdCwgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsCisgICAgICAgIGlzX2xpbnRfbW9kZSwg
ZXhwZWN0YXRpb25zX2FzX3N0cj1Ob25lLCBzdXBwcmVzc19lcnJvcnM9RmFsc2UsCisgICAgICAg
IHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aDogVGhl
IHBhdGggdG8gdGhlIGV4cGVjdGF0aW9uIGZpbGUuIEFuIGVycm9yIGlzIHRocm93biBpZiBhIHRl
c3QgaXMKKyAgICAgICAgICAgIGxpc3RlZCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgZnVsbF90
ZXN0X2xpc3Q6IFRoZSBsaXN0IG9mIGFsbCB0ZXN0cyB0byBiZSBydW4gcGVuZGluZyBwcm9jZXNz
aW5nIG9mCisgICAgICAgICAgICB0aGUgZXhwZWN0aW9ucyBmb3IgdGhvc2UgdGVzdHMuCisgICAg
ICAgIHBsYXRmb3JtOiBXaGljaCBwbGF0Zm9ybSBmcm9tIHNlbGYuUExBVEZPUk1TIHRvIGZpbHRl
ciB0ZXN0cyBmb3IuCisgICAgICAgIGlzX2RlYnVnX21vZGU6IFdoZXRoZXIgd2UgdGVzdGluZyBh
IHRlc3Rfc2hlbGwgYnVpbHQgZGVidWcgbW9kZS4KKyAgICAgICAgaXNfbGludF9tb2RlOiBXaGV0
aGVyIHRoaXMgaXMganVzdCBsaW50aW5nIHRlc3RfZXhwZWNhdGF0aW9ucy50eHQuCisgICAgICAg
IGV4cGVjdGF0aW9uc19hc19zdHI6IENvbnRlbnRzIG9mIHRoZSBleHBlY3RhdGlvbnMgZmlsZS4g
VXNlZCBpbnN0ZWFkIG9mCisgICAgICAgICAgICB0aGUgcGF0aC4gVGhpcyBtYWtlcyB1bml0dGVz
dGluZyBzYW5lLgorICAgICAgICBzdXBwcmVzc19lcnJvcnM6IFdoZXRoZXIgdG8gc3VwcHJlc3Mg
bGludCBlcnJvcnMuCisgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50OiBXaGV0aGVyIHRoZSB0ZXN0
IGZpbGVzIGFyZSBwcmVzZW50IGluIHRoZSBsb2NhbAorICAgICAgICAgICAgZmlsZXN5c3RlbS4g
VGhlIExUVEYgRGFzaGJvYXJkIHVzZXMgRmFsc2UgaGVyZSB0byBhdm9pZCBoYXZpbmcgdG8KKyAg
ICAgICAgICAgIGtlZXAgYSBsb2NhbCBjb3B5IG9mIHRoZSB0cmVlLgorICAgICAgICAiIiIKKwor
ICAgICAgICBzZWxmLl9wYXRoID0gcGF0aAorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNfYXNf
c3RyID0gZXhwZWN0YXRpb25zX2FzX3N0cgorICAgICAgICBzZWxmLl9pc19saW50X21vZGUgPSBp
c19saW50X21vZGUKKyAgICAgICAgc2VsZi5fdGVzdHNfYXJlX3ByZXNlbnQgPSB0ZXN0c19hcmVf
cHJlc2VudAorICAgICAgICBzZWxmLl9mdWxsX3Rlc3RfbGlzdCA9IGZ1bGxfdGVzdF9saXN0Cisg
ICAgICAgIHNlbGYuX3N1cHByZXNzX2Vycm9ycyA9IHN1cHByZXNzX2Vycm9ycworICAgICAgICBz
ZWxmLl9lcnJvcnMgPSBbXQorICAgICAgICBzZWxmLl9ub25fZmF0YWxfZXJyb3JzID0gW10KKyAg
ICAgICAgc2VsZi5fcGxhdGZvcm0gPSBzZWxmLnRvX3Rlc3RfcGxhdGZvcm1fbmFtZShwbGF0Zm9y
bSkKKyAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiVW5rbm93biBwbGF0Zm9ybSAnJXMnIiAlIChwbGF0Zm9ybSkpCisgICAgICAg
IHNlbGYuX2lzX2RlYnVnX21vZGUgPSBpc19kZWJ1Z19tb2RlCisKKyAgICAgICAgIyBNYXBzIHJl
bGF0aXZlIHRlc3QgcGF0aHMgYXMgbGlzdGVkIGluIHRoZSBleHBlY3RhdGlvbnMgZmlsZSB0byBh
CisgICAgICAgICMgbGlzdCBvZiBtYXBzIGNvbnRhaW5pbmcgbW9kaWZpZXJzIGFuZCBleHBlY3Rh
dGlvbnMgZm9yIGVhY2ggdGltZQorICAgICAgICAjIHRoZSB0ZXN0IGlzIGxpc3RlZCBpbiB0aGUg
ZXhwZWN0YXRpb25zIGZpbGUuCisgICAgICAgIHNlbGYuX2FsbF9leHBlY3RhdGlvbnMgPSB7fQor
CisgICAgICAgICMgTWFwcyBhIHRlc3QgdG8gaXRzIGxpc3Qgb2YgZXhwZWN0YXRpb25zLgorICAg
ICAgICBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9ucyA9IHt9CisKKyAgICAgICAgIyBNYXBzIGEg
dGVzdCB0byBpdHMgbGlzdCBvZiBvcHRpb25zIChzdHJpbmcgdmFsdWVzKQorICAgICAgICBzZWxm
Ll90ZXN0X3RvX29wdGlvbnMgPSB7fQorCisgICAgICAgICMgTWFwcyBhIHRlc3QgdG8gaXRzIGxp
c3Qgb2YgbW9kaWZpZXJzOiB0aGUgY29uc3RhbnRzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAj
IHRoZSBvcHRpb25zIG1pbnVzIGFueSBidWcgb3IgcGxhdGZvcm0gc3RyaW5ncworICAgICAgICBz
ZWxmLl90ZXN0X3RvX21vZGlmaWVycyA9IHt9CisKKyAgICAgICAgIyBNYXBzIGEgdGVzdCB0byB0
aGUgYmFzZSBwYXRoIHRoYXQgaXQgd2FzIGxpc3RlZCB3aXRoIGluIHRoZSBsaXN0LgorICAgICAg
ICBzZWxmLl90ZXN0X2xpc3RfcGF0aHMgPSB7fQorCisgICAgICAgIHNlbGYuX21vZGlmaWVyX3Rv
X3Rlc3RzID0gc2VsZi5fZGljdF9vZl9zZXRzKHNlbGYuTU9ESUZJRVJTKQorICAgICAgICBzZWxm
Ll9leHBlY3RhdGlvbl90b190ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0cyhzZWxmLkVYUEVDVEFU
SU9OUykKKyAgICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3Nl
dHMoc2VsZi5USU1FTElORVMpCisgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzID0g
c2VsZi5fZGljdF9vZl9zZXRzKHNlbGYuUkVTVUxUX1RZUEVTKQorCisgICAgICAgIHNlbGYuX3Jl
YWQoc2VsZi5fZ2V0X2l0ZXJhYmxlX2V4cGVjdGF0aW9ucygpKQorCisgICAgZGVmIF9kaWN0X29m
X3NldHMoc2VsZiwgc3RyaW5nc190b19jb25zdGFudHMpOgorICAgICAgICAiIiJUYWtlcyBhIGRp
Y3Qgb2Ygc3RyaW5ncy0+Y29uc3RhbnRzIGFuZCByZXR1cm5zIGEgZGljdCBtYXBwaW5nCisgICAg
ICAgIGVhY2ggY29uc3RhbnQgdG8gYW4gZW1wdHkgc2V0LiIiIgorICAgICAgICBkID0ge30KKyAg
ICAgICAgZm9yIGMgaW4gc3RyaW5nc190b19jb25zdGFudHMudmFsdWVzKCk6CisgICAgICAgICAg
ICBkW2NdID0gc2V0KCkKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBfZ2V0X2l0ZXJhYmxl
X2V4cGVjdGF0aW9ucyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgdGhhdCBj
YW4gYmUgaXRlcmF0ZWQgb3Zlci4gQWxsb3dzIGZvciBub3QgY2FyaW5nCisgICAgICAgIGFib3V0
IHdoZXRoZXIgd2UncmUgaXRlcmF0aW5nIG92ZXIgYSBmaWxlIG9yIGEgbmV3LWxpbmUgc2VwYXJh
dGVkCisgICAgICAgIHN0cmluZy4iIiIKKyAgICAgICAgaWYgc2VsZi5fZXhwZWN0YXRpb25zX2Fz
X3N0cjoKKyAgICAgICAgICAgIGl0ZXJhYmxlID0gW3ggKyAiXG4iIGZvciB4IGluCisgICAgICAg
ICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX2FzX3N0ci5zcGxpdCgiXG4iKV0KKyAgICAgICAg
ICAgICMgU3RyaXAgZmluYWwgZW50cnkgaWYgaXQncyBlbXB0eSB0byBhdm9pZCBhZGRlZCBpbiBh
biBleHRyYQorICAgICAgICAgICAgIyBuZXdsaW5lLgorICAgICAgICAgICAgaWYgaXRlcmFibGVb
bGVuKGl0ZXJhYmxlKSAtIDFdID09ICJcbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJh
YmxlWzpsZW4oaXRlcmFibGUpIC0gMV0KKyAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4oc2VsZi5fcGF0aCkKKworICAgIGRl
ZiB0b190ZXN0X3BsYXRmb3JtX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybnMg
dGhlIHRlc3QgZXhwZWN0YXRpb24gcGxhdGZvcm0gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEKKyAg
ICAgICAgZ2l2ZW4gcGxhdGZvcm0gbmFtZSwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubyBtYXRjaC4i
IiIKKyAgICAgICAgY2hyb21pdW1fcHJlZml4ID0gJ2Nocm9taXVtLScKKyAgICAgICAgbmFtZSA9
IG5hbWUubG93ZXIoKQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoY2hyb21pdW1fcHJlZml4
KToKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lW2xlbihjaHJvbWl1bV9wcmVmaXgpOl0KKyAgICAg
ICAgaWYgbmFtZSBpbiBzZWxmLlBMQVRGT1JNUzoKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X3Rlc3Rfc2V0KHNlbGYsIG1vZGlmaWVy
LCBleHBlY3RhdGlvbj1Ob25lLCBpbmNsdWRlX3NraXBzPVRydWUpOgorICAgICAgICBpZiBleHBl
Y3RhdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9tb2RpZmllcl90b190
ZXN0c1ttb2RpZmllcl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RzID0gKHNlbGYu
X2V4cGVjdGF0aW9uX3RvX3Rlc3RzW2V4cGVjdGF0aW9uXSAmCisgICAgICAgICAgICAgICAgc2Vs
Zi5fbW9kaWZpZXJfdG9fdGVzdHNbbW9kaWZpZXJdKQorCisgICAgICAgIGlmIG5vdCBpbmNsdWRl
X3NraXBzOgorICAgICAgICAgICAgdGVzdHMgPSB0ZXN0cyAtIHNlbGYuZ2V0X3Rlc3Rfc2V0KFNL
SVAsIGV4cGVjdGF0aW9uKQorCisgICAgICAgIHJldHVybiB0ZXN0cworCisgICAgZGVmIGdldF90
ZXN0c193aXRoX3Jlc3VsdF90eXBlKHNlbGYsIHJlc3VsdF90eXBlKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzW3Jlc3VsdF90eXBlXQorCisgICAgZGVmIGdldF90
ZXN0c193aXRoX3RpbWVsaW5lKHNlbGYsIHRpbWVsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3RpbWVsaW5lX3RvX3Rlc3RzW3RpbWVsaW5lXQorCisgICAgZGVmIGdldF9vcHRpb25zKHNlbGYs
IHRlc3QpOgorICAgICAgICAiIiJUaGlzIHJldHVybnMgdGhlIGVudGlyZSBzZXQgb2Ygb3B0aW9u
cyBmb3IgdGhlIGdpdmVuIHRlc3QKKyAgICAgICAgKHRoZSBtb2RpZmllcnMgcGx1cyB0aGUgQlVH
WFhYWCBpZGVudGlmaWVyKS4gVGhpcyBpcyB1c2VkIGJ5IHRoZQorICAgICAgICBMVFRGIGRhc2hi
b2FyZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfdG9fb3B0aW9uc1t0ZXN0XQorCisg
ICAgZGVmIGhhc19tb2RpZmllcihzZWxmLCB0ZXN0LCBtb2RpZmllcik6CisgICAgICAgIHJldHVy
biB0ZXN0IGluIHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzW21vZGlmaWVyXQorCisgICAgZGVmIGdl
dF9leHBlY3RhdGlvbnMoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Rv
X2V4cGVjdGF0aW9uc1t0ZXN0XQorCisgICAgZGVmIGdldF9leHBlY3RhdGlvbnNfanNvbl9mb3Jf
YWxsX3BsYXRmb3JtcyhzZWxmKToKKyAgICAgICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3Jk
ZXIgdG8gZ2V0IGNvbXBhY3QgZW5jb2RpbmcuCisgICAgICAgIHJldHVybiBFeHBlY3RhdGlvbnNK
c29uRW5jb2RlcihzZXBhcmF0b3JzPSgnLCcsICc6JykpLmVuY29kZSgKKyAgICAgICAgICAgIHNl
bGYuX2FsbF9leHBlY3RhdGlvbnMpCisKKyAgICBkZWYgY29udGFpbnMoc2VsZiwgdGVzdCk6Cisg
ICAgICAgIHJldHVybiB0ZXN0IGluIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25zCisKKyAgICBk
ZWYgcmVtb3ZlX3BsYXRmb3JtX2Zyb21fZmlsZShzZWxmLCB0ZXN0cywgcGxhdGZvcm0sIGJhY2t1
cD1GYWxzZSk6CisgICAgICAgICIiIlJlbW92ZSB0aGUgcGxhdGZvcm0gb3B0aW9uIGZyb20gdGVz
dCBleHBlY3RhdGlvbnMgZmlsZS4KKworICAgICAgICBJZiBhIHRlc3QgaXMgaW4gdGhlIHRlc3Qg
bGlzdCBhbmQgaGFzIGFuIG9wdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICAgICAgIHBs
YXRmb3JtLCByZW1vdmUgdGhlIG1hdGNoaW5nIHBsYXRmb3JtIGFuZCBzYXZlIHRoZSB1cGRhdGVk
IHRlc3QgYmFjaworICAgICAgICB0byB0aGUgZmlsZS4gSWYgbm8gb3RoZXIgcGxhdGZvcm1zIHJl
bWFpbmluZyBhZnRlciByZW1vdmFsLCBkZWxldGUgdGhlCisgICAgICAgIHRlc3QgZnJvbSB0aGUg
ZmlsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RzOiBsaXN0IG9mIHRlc3RzIHRo
YXQgbmVlZCB0byB1cGRhdGUuLgorICAgICAgICAgIHBsYXRmb3JtOiB3aGljaCBwbGF0Zm9ybSBv
cHRpb24gdG8gcmVtb3ZlLgorICAgICAgICAgIGJhY2t1cDogaWYgdHJ1ZSwgdGhlIG9yaWdpbmFs
IHRlc3QgZXhwZWN0YXRpb25zIGZpbGUgaXMgc2F2ZWQgYXMKKyAgICAgICAgICAgICAgICAgIFtz
ZWxmLlRFU1RfTElTVF0ub3JpZy5ZWVlZTU1EREhITU1TUworCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgbm8KKyAgICAgICAgIiIiCisKKyAgICAgICAgbmV3X2ZpbGUgPSBzZWxmLl9wYXRo
ICsgJy5uZXcnCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ09yaWdpbmFsIGZpbGU6ICIlcyInLCBz
ZWxmLl9wYXRoKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCdOZXcgZmlsZTogIiVzIicsIG5ld19m
aWxlKQorICAgICAgICBmX29yaWcgPSBzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKCkK
KyAgICAgICAgZl9uZXcgPSBvcGVuKG5ld19maWxlLCAndycpCisKKyAgICAgICAgdGVzdHNfcmVt
b3ZlZCA9IDAKKyAgICAgICAgdGVzdHNfdXBkYXRlZCA9IDAKKyAgICAgICAgbGluZW5vID0gMAor
ICAgICAgICBmb3IgbGluZSBpbiBmX29yaWc6CisgICAgICAgICAgICBsaW5lbm8gKz0gMQorICAg
ICAgICAgICAgYWN0aW9uID0gc2VsZi5fZ2V0X3BsYXRmb3JtX3VwZGF0ZV9hY3Rpb24obGluZSwg
bGluZW5vLCB0ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3JtKQorICAgICAgICAgICAgaWYgYWN0aW9uID09IE5PX0NIQU5H
RToKKyAgICAgICAgICAgICAgICAjIFNhdmUgdGhlIG9yaWdpbmFsIGxpbmUgYmFjayB0byB0aGUg
ZmlsZQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ05vIGNoYW5nZSB0byB0ZXN0OiAl
cycsIGxpbmUpCisgICAgICAgICAgICAgICAgZl9uZXcud3JpdGUobGluZSkKKyAgICAgICAgICAg
IGVsaWYgYWN0aW9uID09IFJFTU9WRV9URVNUOgorICAgICAgICAgICAgICAgIHRlc3RzX3JlbW92
ZWQgKz0gMQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVGVzdCByZW1vdmVkOiAlcycs
IGxpbmUpCisgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSBSRU1PVkVfUExBVEZPUk06CisgICAg
ICAgICAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBuZXdf
b3B0aW9ucyA9IHBhcnRzWzBdLnJlcGxhY2UocGxhdGZvcm0udXBwZXIoKSArICcgJywgJycsIDEp
CisgICAgICAgICAgICAgICAgbmV3X2xpbmUgPSAoJyVzOiVzJyAlIChuZXdfb3B0aW9ucywgcGFy
dHNbMV0pKQorICAgICAgICAgICAgICAgIGZfbmV3LndyaXRlKG5ld19saW5lKQorICAgICAgICAg
ICAgICAgIHRlc3RzX3VwZGF0ZWQgKz0gMQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygn
VGVzdCB1cGRhdGVkOiAnKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBvbGQ6ICVz
JywgbGluZSkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgbmV3OiAlcycsIG5ld19s
aW5lKQorICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gQUREX1BMQVRGT1JNU19FWENFUFRfVEhJ
UzoKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKQorICAgICAgICAgICAg
ICAgIG5ld19vcHRpb25zID0gcGFydHNbMF0KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxm
LlBMQVRGT1JNUzoKKyAgICAgICAgICAgICAgICAgICAgcCA9IHAudXBwZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgIyBUaGlzIGlzIGEgdGVtcCBzb2x1dGlvbiBmb3IgcmViYXNlbGluaW5nIHRv
b2wuCisgICAgICAgICAgICAgICAgICAgICMgRG8gbm90IGFkZCB0YWdzIFdJTi03IGFuZCBXSU4t
VklTVEEgdG8gdGVzdCBleHBlY3RhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUg
b3JpZ2luYWwgbGluZSBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBwbGF0Zm9ybSBvcHRpb24uCisgICAg
ICAgICAgICAgICAgICAgICMgVE9ETyh2aWN0b3J3KTogUmVtb3ZlIFdJTi1WSVNUQSBhbmQgV0lO
LTcgb25jZSB3ZSBoYXZlCisgICAgICAgICAgICAgICAgICAgICMgcmVsaWFibGUgV2luIDcgYW5k
IFdpbiBWaXN0YSBidWlsZGJvdHMgc2V0dXAuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBw
IGluIChwbGF0Zm9ybS51cHBlcigpLCAnV0lOLVZJU1RBJywgJ1dJTi03Jyk6CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdfb3B0aW9ucyArPSBwICsgJyAnCisgICAgICAgICAgICAgICAgbmV3
X2xpbmUgPSAoJyVzOiVzJyAlIChuZXdfb3B0aW9ucywgcGFydHNbMV0pKQorICAgICAgICAgICAg
ICAgIGZfbmV3LndyaXRlKG5ld19saW5lKQorICAgICAgICAgICAgICAgIHRlc3RzX3VwZGF0ZWQg
Kz0gMQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVGVzdCB1cGRhdGVkOiAnKQorICAg
ICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBvbGQ6ICVzJywgbGluZSkKKyAgICAgICAgICAg
ICAgICBsb2dnaW5nLmluZm8oJyAgbmV3OiAlcycsIG5ld19saW5lKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdVbmtub3duIHVwZGF0ZSBhY3Rpb246
ICVkOyBsaW5lOiAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGxp
bmUpCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdUb3RhbCB0ZXN0cyByZW1vdmVkOiAlZCcsIHRl
c3RzX3JlbW92ZWQpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnVG90YWwgdGVzdHMgdXBkYXRlZDog
JWQnLCB0ZXN0c191cGRhdGVkKQorCisgICAgICAgIGZfb3JpZy5jbG9zZSgpCisgICAgICAgIGZf
bmV3LmNsb3NlKCkKKworICAgICAgICBpZiBiYWNrdXA6CisgICAgICAgICAgICBkYXRlX3N1ZmZp
eCA9IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZS5sb2NhbHRpbWUodGltZS50aW1lKCkpKQorICAgICAgICAg
ICAgYmFja3VwX2ZpbGUgPSAoJyVzLm9yaWcuJXMnICUgKHNlbGYuX3BhdGgsIGRhdGVfc3VmZml4
KSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJhY2t1cF9maWxlKToKKyAgICAgICAg
ICAgICAgICBvcy5yZW1vdmUoYmFja3VwX2ZpbGUpCisgICAgICAgICAgICBsb2dnaW5nLmluZm8o
J1NhdmluZyBvcmlnaW5hbCBmaWxlIHRvICIlcyInLCBiYWNrdXBfZmlsZSkKKyAgICAgICAgICAg
IG9zLnJlbmFtZShzZWxmLl9wYXRoLCBiYWNrdXBfZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG9zLnJlbW92ZShzZWxmLl9wYXRoKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1Nh
dmluZyBuZXcgZmlsZSB0byAiJXMiJywgc2VsZi5fcGF0aCkKKyAgICAgICAgb3MucmVuYW1lKG5l
d19maWxlLCBzZWxmLl9wYXRoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHBhcnNl
X2V4cGVjdGF0aW9uc19saW5lKHNlbGYsIGxpbmUsIGxpbmVubyk6CisgICAgICAgICIiIlBhcnNl
cyBhIGxpbmUgZnJvbSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgYW5kIHJldHVybnMgYSB0dXBsZQor
ICAgICAgICB3aXRoIHRoZSB0ZXN0IHBhdGgsIG9wdGlvbnMgYXMgYSBsaXN0LCBleHBlY3RhdGlv
bnMgYXMgYSBsaXN0LiIiIgorICAgICAgICBsaW5lID0gc3RyaXBfY29tbWVudHMobGluZSkKKyAg
ICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUsIE5vbmUp
CisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisgICAgICAgIGlmIGxpbmUuZmluZCgiOiIpIGlzIC0x
OgorICAgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb24gPSBsaW5lLnNwbGl0KCI9IikKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiOiIpCisgICAgICAg
ICAgICBvcHRpb25zID0gc2VsZi5fZ2V0X29wdGlvbnNfbGlzdChwYXJ0c1swXSkKKyAgICAgICAg
ICAgIHRlc3RfYW5kX2V4cGVjdGF0aW9uID0gcGFydHNbMV0uc3BsaXQoJz0nKQorCisgICAgICAg
IHRlc3QgPSB0ZXN0X2FuZF9leHBlY3RhdGlvblswXS5zdHJpcCgpCisgICAgICAgIGlmIChsZW4o
dGVzdF9hbmRfZXhwZWN0YXRpb24pIGlzIG5vdCAyKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9l
cnJvcihsaW5lbm8sICJNaXNzaW5nIGV4cGVjdGF0aW9ucy4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb24pCisgICAgICAgICAgICBleHBlY3RhdGlvbnMg
PSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9n
ZXRfb3B0aW9uc19saXN0KHRlc3RfYW5kX2V4cGVjdGF0aW9uWzFdKQorCisgICAgICAgIHJldHVy
biAodGVzdCwgb3B0aW9ucywgZXhwZWN0YXRpb25zKQorCisgICAgZGVmIF9nZXRfcGxhdGZvcm1f
dXBkYXRlX2FjdGlvbihzZWxmLCBsaW5lLCBsaW5lbm8sIHRlc3RzLCBwbGF0Zm9ybSk6CisgICAg
ICAgICIiIkNoZWNrIHRoZSBwbGF0Zm9ybSBvcHRpb24gYW5kIHJldHVybiB0aGUgYWN0aW9uIG5l
ZWRzIHRvIGJlIHRha2VuLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgbGluZTogY3VycmVu
dCBsaW5lIGluIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuCisgICAgICAgICAgbGluZW5vOiBjdXJy
ZW50IGxpbmUgbnVtYmVyIG9mIGxpbmUKKyAgICAgICAgICB0ZXN0czogbGlzdCBvZiB0ZXN0cyB0
aGF0IG5lZWQgdG8gdXBkYXRlLi4KKyAgICAgICAgICBwbGF0Zm9ybTogd2hpY2ggcGxhdGZvcm0g
b3B0aW9uIHRvIHJlbW92ZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIE5PX0NIQU5H
RTogbm8gY2hhbmdlIHRvIHRoZSBsaW5lIChjb21tZW50cywgdGVzdCBub3QgaW4gdGhlIGxpc3Qg
ZXRjKQorICAgICAgICAgIFJFTU9WRV9URVNUOiByZW1vdmUgdGhlIHRlc3QgZnJvbSBmaWxlLgor
ICAgICAgICAgIFJFTU9WRV9QTEFURk9STTogcmVtb3ZlIHRoaXMgcGxhdGZvcm0gb3B0aW9uIGZy
b20gdGhlIHRlc3QuCisgICAgICAgICAgQUREX1BMQVRGT1JNU19FWENFUFRfVEhJUzogYWRkIGFs
bCB0aGUgcGxhdGZvcm1zIGV4Y2VwdCB0aGlzIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRl
c3QsIG9wdGlvbnMsIGV4cGVjdGF0aW9ucyA9IHNlbGYucGFyc2VfZXhwZWN0YXRpb25zX2xpbmUo
bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lbm8pCisgICAgICAgIGlmIG5vdCB0ZXN0IG9yIHRlc3Qgbm90
IGluIHRlc3RzOgorICAgICAgICAgICAgcmV0dXJuIE5PX0NIQU5HRQorCisgICAgICAgIGhhc19h
bnlfcGxhdGZvcm0gPSBGYWxzZQorICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6CisgICAg
ICAgICAgICBpZiBvcHRpb24gaW4gc2VsZi5QTEFURk9STVM6CisgICAgICAgICAgICAgICAgaGFz
X2FueV9wbGF0Zm9ybSA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9uID09IHBs
YXRmb3JtOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUkVNT1ZFX1BMQVRGT1JNCisKKyAg
ICAgICAgIyBJZiB0aGVyZSBpcyBubyBwbGF0Zm9ybSBzcGVjaWZpZWQsIHRoZW4gaXQgbWVhbnMg
YXBwbHkgdG8gYWxsCisgICAgICAgICMgcGxhdGZvcm1zLiBSZXR1cm4gdGhlIGFjdGlvbiB0byBh
ZGQgYWxsIHRoZSBwbGF0Zm9ybXMgZXhjZXB0IHRoaXMKKyAgICAgICAgIyBvbmUuCisgICAgICAg
IGlmIG5vdCBoYXNfYW55X3BsYXRmb3JtOgorICAgICAgICAgICAgcmV0dXJuIEFERF9QTEFURk9S
TVNfRVhDRVBUX1RISVMKKworICAgICAgICByZXR1cm4gUkVNT1ZFX1RFU1QKKworICAgIGRlZiBf
aGFzX3ZhbGlkX21vZGlmaWVyc19mb3JfY3VycmVudF9wbGF0Zm9ybShzZWxmLCBvcHRpb25zLCBs
aW5lbm8sCisgICAgICAgIHRlc3RfYW5kX2V4cGVjdGF0aW9ucywgbW9kaWZpZXJzKToKKyAgICAg
ICAgIiIiUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHBsYXRmb3JtIGlzIGluIHRoZSBvcHRp
b25zIGxpc3Qgb3IgaWYKKyAgICAgICAgbm8gcGxhdGZvcm1zIGFyZSBsaXN0ZWQgYW5kIGlmIHRo
ZXJlIGFyZSBubyBmYXRhbCBlcnJvcnMgaW4gdGhlCisgICAgICAgIG9wdGlvbnMgbGlzdC4KKwor
ICAgICAgICBBcmdzOgorICAgICAgICAgIG9wdGlvbnM6IExpc3Qgb2YgbG93ZXJjYXNlIG9wdGlv
bnMuCisgICAgICAgICAgbGluZW5vOiBUaGUgbGluZSBpbiB0aGUgZmlsZSB3aGVyZSB0aGUgdGVz
dCBpcyBsaXN0ZWQuCisgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb25zOiBUaGUgcGF0aCBh
bmQgZXhwZWN0YXRpb25zIGZvciB0aGUgdGVzdC4KKyAgICAgICAgICBtb2RpZmllcnM6IFRoZSBz
ZXQgdG8gcG9wdWxhdGUgd2l0aCBtb2RpZmllcnMuCisgICAgICAgICIiIgorICAgICAgICBoYXNf
YW55X3BsYXRmb3JtID0gRmFsc2UKKyAgICAgICAgaGFzX2J1Z19pZCA9IEZhbHNlCisgICAgICAg
IGZvciBvcHRpb24gaW4gb3B0aW9uczoKKyAgICAgICAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLk1P
RElGSUVSUzoKKyAgICAgICAgICAgICAgICBtb2RpZmllcnMuYWRkKG9wdGlvbikKKyAgICAgICAg
ICAgIGVsaWYgb3B0aW9uIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgICAgIGhhc19h
bnlfcGxhdGZvcm0gPSBUcnVlCisgICAgICAgICAgICBlbGlmIG9wdGlvbi5zdGFydHN3aXRoKCdi
dWcnKToKKyAgICAgICAgICAgICAgICBoYXNfYnVnX2lkID0gVHJ1ZQorICAgICAgICAgICAgZWxp
ZiBvcHRpb24gbm90IGluIHNlbGYuQlVJTERfVFlQRVM6CisgICAgICAgICAgICAgICAgc2VsZi5f
YWRkX2Vycm9yKGxpbmVubywgJ0ludmFsaWQgbW9kaWZpZXIgZm9yIHRlc3Q6ICVzJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgdGVzdF9hbmRfZXhwZWN0YXRpb25z
KQorCisgICAgICAgIGlmIGhhc19hbnlfcGxhdGZvcm0gYW5kIG5vdCBzZWxmLl9tYXRjaF9wbGF0
Zm9ybShvcHRpb25zKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5v
dCBoYXNfYnVnX2lkIGFuZCAnd29udGZpeCcgbm90IGluIG9wdGlvbnM6CisgICAgICAgICAgICAj
IFRPRE8ob2phbik6IFR1cm4gdGhpcyBpbnRvIGFuIEFkZEVycm9yIGNhbGwgb25jZSBhbGwgdGhl
CisgICAgICAgICAgICAjIHRlc3RzIGhhdmUgQlVHIGlkZW50aWZpZXJzLgorICAgICAgICAgICAg
c2VsZi5fbG9nX25vbl9mYXRhbF9lcnJvcihsaW5lbm8sICdUZXN0IGxhY2tzIEJVRyBtb2RpZmll
ci4nLAorICAgICAgICAgICAgICAgIHRlc3RfYW5kX2V4cGVjdGF0aW9ucykKKworICAgICAgICBp
ZiAncmVsZWFzZScgaW4gb3B0aW9ucyBvciAnZGVidWcnIGluIG9wdGlvbnM6CisgICAgICAgICAg
ICBpZiBzZWxmLl9pc19kZWJ1Z19tb2RlIGFuZCAnZGVidWcnIG5vdCBpbiBvcHRpb25zOgorICAg
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX2Rl
YnVnX21vZGUgYW5kICdyZWxlYXNlJyBub3QgaW4gb3B0aW9uczoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgICAgICBpZiAnd29udGZpeCcgaW4gb3B0aW9ucyBhbmQgJ2RlZmVy
JyBpbiBvcHRpb25zOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywgJ1Rlc3Qg
Y2Fubm90IGJlIGJvdGggREVGRVIgYW5kIFdPTlRGSVguJywKKyAgICAgICAgICAgICAgICB0ZXN0
X2FuZF9leHBlY3RhdGlvbnMpCisKKyAgICAgICAgaWYgc2VsZi5faXNfbGludF9tb2RlIGFuZCAn
cmViYXNlbGluZScgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5l
bm8sCisgICAgICAgICAgICAgICAgJ1JFQkFTRUxJTkUgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Ig
cnVubmluZyByZWJhc2VsaW5lLnB5LiAnCisgICAgICAgICAgICAgICAgJ0Nhbm5vdCBiZSBjaGVj
a2VkIGluLicsIHRlc3RfYW5kX2V4cGVjdGF0aW9ucykKKworICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIF9tYXRjaF9wbGF0Zm9ybShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgIiIiTWF0
Y2ggdGhlIGxpc3Qgb2Ygb3B0aW9ucyBhZ2FpbnN0IG91ciBzcGVjaWZpZWQgcGxhdGZvcm0uIElm
IGFueQorICAgICAgICBvZiB0aGUgb3B0aW9ucyBwcmVmaXgtbWF0Y2ggc2VsZi5fcGxhdGZvcm0s
IHJldHVybiBUcnVlLiBUaGlzIGhhbmRsZXMKKyAgICAgICAgdGhlIGNhc2Ugd2hlcmUgYSB0ZXN0
IGlzIG1hcmtlZCBXSU4gYW5kIHRoZSBwbGF0Zm9ybSBpcyBXSU4tVklTVEEuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBvcHRpb25zOiBsaXN0IG9mIG9wdGlvbnMKKyAgICAgICAgIiIiCisg
ICAgICAgIGZvciBvcHQgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIGlmIHNlbGYuX3BsYXRmb3Jt
LnN0YXJ0c3dpdGgob3B0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgIGRlZiBfYWRkX3RvX2FsbF9leHBlY3RhdGlvbnMoc2VsZiwgdGVz
dCwgb3B0aW9ucywgZXhwZWN0YXRpb25zKToKKyAgICAgICAgIyBNYWtlIGFsbCBwYXRocyB1bml4
LXN0eWxlIHNvIHRoZSBkYXNoYm9hcmQgZG9lc24ndCBuZWVkIHRvLgorICAgICAgICB0ZXN0ID0g
dGVzdC5yZXBsYWNlKCdcXCcsICcvJykKKyAgICAgICAgaWYgbm90IHRlc3QgaW4gc2VsZi5fYWxs
X2V4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIHNlbGYuX2FsbF9leHBlY3RhdGlvbnNbdGVzdF0g
PSBbXQorICAgICAgICBzZWxmLl9hbGxfZXhwZWN0YXRpb25zW3Rlc3RdLmFwcGVuZCgKKyAgICAg
ICAgICAgIE1vZGlmaWVyc0FuZEV4cGVjdGF0aW9ucyhvcHRpb25zLCBleHBlY3RhdGlvbnMpKQor
CisgICAgZGVmIF9yZWFkKHNlbGYsIGV4cGVjdGF0aW9ucyk6CisgICAgICAgICIiIkZvciBlYWNo
IHRlc3QgaW4gYW4gZXhwZWN0YXRpb25zIGl0ZXJhYmxlLCBnZW5lcmF0ZSB0aGUKKyAgICAgICAg
ZXhwZWN0YXRpb25zIGZvciBpdC4iIiIKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICBmb3Ig
bGluZSBpbiBleHBlY3RhdGlvbnM6CisgICAgICAgICAgICBsaW5lbm8gKz0gMQorCisgICAgICAg
ICAgICB0ZXN0X2xpc3RfcGF0aCwgb3B0aW9ucywgZXhwZWN0YXRpb25zID0gXAorICAgICAgICAg
ICAgICAgIHNlbGYucGFyc2VfZXhwZWN0YXRpb25zX2xpbmUobGluZSwgbGluZW5vKQorICAgICAg
ICAgICAgaWYgbm90IGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisg
ICAgICAgICAgICBzZWxmLl9hZGRfdG9fYWxsX2V4cGVjdGF0aW9ucyh0ZXN0X2xpc3RfcGF0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKG9wdGlv
bnMpLnVwcGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ICIuam9pbihleHBlY3RhdGlvbnMpLnVwcGVyKCkpCisKKyAgICAgICAgICAgIG1vZGlmaWVycyA9
IHNldCgpCisgICAgICAgICAgICBpZiBvcHRpb25zIGFuZCBub3Qgc2VsZi5faGFzX3ZhbGlkX21v
ZGlmaWVyc19mb3JfY3VycmVudF9wbGF0Zm9ybSgKKyAgICAgICAgICAgICAgICBvcHRpb25zLCBs
aW5lbm8sIHRlc3RfbGlzdF9wYXRoLCBtb2RpZmllcnMpOgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucyA9IHNlbGYuX3BhcnNlX2V4cGVjdGF0aW9u
cyhleHBlY3RhdGlvbnMsIGxpbmVubywKKyAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkK
KworICAgICAgICAgICAgaWYgJ3Nsb3cnIGluIG9wdGlvbnMgYW5kIFRJTUVPVVQgaW4gZXhwZWN0
YXRpb25zOgorICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sCisgICAgICAg
ICAgICAgICAgICAgICdBIHRlc3QgY2FuIG5vdCBiZSBib3RoIHNsb3cgYW5kIHRpbWVvdXQuIElm
IGl0IHRpbWVzIG91dCAnCisgICAgICAgICAgICAgICAgICAgICdpbmRlZmluaXRlbHksIHRoZW4g
aXQgc2hvdWxkIGJlIGp1c3QgdGltZW91dC4nLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X2xp
c3RfcGF0aCkKKworICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRp
bHMubGF5b3V0X3Rlc3RzX2RpcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RfbGlzdF9wYXRoKQorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5ub3Jt
cGF0aChmdWxsX3BhdGgpCisgICAgICAgICAgICAjIFdlYktpdCdzIHdheSBvZiBza2lwcGluZyB0
ZXN0cyBpcyB0byBhZGQgYSAtZGlzYWJsZWQgc3VmZml4LgorICAgICAgICAgICAgIyBTbyB3ZSBz
aG91bGQgY29uc2lkZXIgdGhlIHBhdGggZXhpc3RpbmcgaWYgdGhlIHBhdGggb3IgdGhlCisgICAg
ICAgICAgICAjIC1kaXNhYmxlZCB2ZXJzaW9uIGV4aXN0cy4KKyAgICAgICAgICAgIGlmIChzZWxm
Ll90ZXN0c19hcmVfcHJlc2VudCBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCkKKyAg
ICAgICAgICAgICAgICBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCArICctZGlzYWJs
ZWQnKSk6CisgICAgICAgICAgICAgICAgIyBMb2cgYSBub24gZmF0YWwgZXJyb3IgaGVyZSBzaW5j
ZSB5b3UgaGl0IHRoaXMgY2FzZSBhbnkKKyAgICAgICAgICAgICAgICAjIHRpbWUgeW91IHVwZGF0
ZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgd2l0aG91dCBzeW5jaW5nCisgICAgICAgICAgICAgICAg
IyB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX25v
bl9mYXRhbF9lcnJvcihsaW5lbm8sICdQYXRoIGRvZXMgbm90IGV4aXN0LicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZnVsbF90ZXN0X2xpc3Q6
CisgICAgICAgICAgICAgICAgdGVzdHMgPSBbdGVzdF9saXN0X3BhdGhdCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHRlc3RzID0gc2VsZi5fZXhwYW5kX3Rlc3RzKHRlc3RfbGlz
dF9wYXRoKQorCisgICAgICAgICAgICBzZWxmLl9hZGRfdGVzdHModGVzdHMsIGV4cGVjdGF0aW9u
cywgdGVzdF9saXN0X3BhdGgsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v
ZGlmaWVycywgb3B0aW9ucykKKworICAgICAgICBpZiBub3Qgc2VsZi5fc3VwcHJlc3NfZXJyb3Jz
IGFuZCAoCisgICAgICAgICAgICBsZW4oc2VsZi5fZXJyb3JzKSBvciBsZW4oc2VsZi5fbm9uX2Zh
dGFsX2Vycm9ycykpOgorICAgICAgICAgICAgaWYgc2VsZi5faXNfZGVidWdfbW9kZToKKyAgICAg
ICAgICAgICAgICBidWlsZF90eXBlID0gJ0RFQlVHJworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBidWlsZF90eXBlID0gJ1JFTEVBU0UnCisgICAgICAgICAgICBwcmludCAiXG5G
QUlMVVJFUyBGT1IgUExBVEZPUk06ICVzLCBCVUlMRF9UWVBFOiAlcyIgXAorICAgICAgICAgICAg
ICAgICUgKHNlbGYuX3BsYXRmb3JtLnVwcGVyKCksIGJ1aWxkX3R5cGUpCisKKyAgICAgICAgICAg
IGZvciBlcnJvciBpbiBzZWxmLl9ub25fZmF0YWxfZXJyb3JzOgorICAgICAgICAgICAgICAgIGxv
Z2dpbmcuZXJyb3IoZXJyb3IpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZXJyb3JzKToKKyAg
ICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcignXG4nLmpvaW4obWFwKHN0ciwgc2VsZi5f
ZXJyb3JzKSkpCisKKyAgICAgICAgIyBOb3cgYWRkIGluIHRoZSB0ZXN0cyB0aGF0IHdlcmVuJ3Qg
cHJlc2VudCBpbiB0aGUgZXhwZWN0YXRpb25zIGZpbGUKKyAgICAgICAgZXhwZWN0YXRpb25zID0g
c2V0KFtQQVNTXSkKKyAgICAgICAgb3B0aW9ucyA9IFtdCisgICAgICAgIG1vZGlmaWVycyA9IFtd
CisgICAgICAgIGlmIHNlbGYuX2Z1bGxfdGVzdF9saXN0OgorICAgICAgICAgICAgZm9yIHRlc3Qg
aW4gc2VsZi5fZnVsbF90ZXN0X2xpc3Q6CisgICAgICAgICAgICAgICAgaWYgbm90IHRlc3QgaW4g
c2VsZi5fdGVzdF9saXN0X3BhdGhzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRfdGVz
dCh0ZXN0LCBtb2RpZmllcnMsIGV4cGVjdGF0aW9ucywgb3B0aW9ucykKKworICAgIGRlZiBfZ2V0
X29wdGlvbnNfbGlzdChzZWxmLCBsaXN0U3RyaW5nKToKKyAgICAgICAgcmV0dXJuIFtwYXJ0LnN0
cmlwKCkubG93ZXIoKSBmb3IgcGFydCBpbiBsaXN0U3RyaW5nLnN0cmlwKCkuc3BsaXQoJyAnKV0K
KworICAgIGRlZiBfcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYsIGV4cGVjdGF0aW9ucywgbGluZW5v
LCB0ZXN0X2xpc3RfcGF0aCk6CisgICAgICAgIHJlc3VsdCA9IHNldCgpCisgICAgICAgIGZvciBw
YXJ0IGluIGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0IGluIHNlbGYuRVhQ
RUNUQVRJT05TOgorICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sICdVbnN1
cHBvcnRlZCBleHBlY3RhdGlvbjogJXMnICUgcGFydCwKKyAgICAgICAgICAgICAgICAgICAgdGVz
dF9saXN0X3BhdGgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4cGVj
dGF0aW9uID0gc2VsZi5FWFBFQ1RBVElPTlNbcGFydF0KKyAgICAgICAgICAgIHJlc3VsdC5hZGQo
ZXhwZWN0YXRpb24pCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfZXhwYW5kX3Rl
c3RzKHNlbGYsIHRlc3RfbGlzdF9wYXRoKToKKyAgICAgICAgIiIiQ29udmVydCB0aGUgdGVzdCBz
cGVjaWZpY2F0aW9uIHRvIGFuIGFic29sdXRlLCBub3JtYWxpemVkCisgICAgICAgIHBhdGggYW5k
IG1ha2Ugc3VyZSBkaXJlY3RvcmllcyBlbmQgd2l0aCB0aGUgT1MgcGF0aCBzZXBhcmF0b3IuIiIi
CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGly
KCksIHRlc3RfbGlzdF9wYXRoKQorICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRo
KQorICAgICAgICBwYXRoID0gc2VsZi5fZml4X2RpcihwYXRoKQorCisgICAgICAgIHJlc3VsdCA9
IFtdCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2Z1bGxfdGVzdF9saXN0OgorICAgICAgICAg
ICAgaWYgdGVzdC5zdGFydHN3aXRoKHBhdGgpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQodGVzdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9maXhfZGlyKHNlbGYs
IHBhdGgpOgorICAgICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEg
ZGlyZWN0b3J5LCBhbmQgaWYgc28sIGFwcGVuZAorICAgICAgICB0aGUgZGlyZWN0b3J5IHNlcGFy
YXRvciBpZiBuZWNlc3NhcnkuIiIiCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX2FyZV9wcmVzZW50
OgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICBw
YXRoID0gb3MucGF0aC5qb2luKHBhdGgsICcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
IyBJZiB3ZSBjYW4ndCBjaGVjayB0aGUgZmlsZXN5c3RlbSB0byBzZWUgaWYgdGhpcyBpcyBhIGRp
cmVjdG9yeSwKKyAgICAgICAgICAgICMgd2UgYXNzdW1lIHRoYXQgZmlsZXMgdy9vIGFuIGV4dGVu
c2lvbiBhcmUgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAjIFRPRE8oZHByYW5rZSk6IFdoYXQg
aGFwcGVucyB3LyBMYXlvdXRUZXN0cy9jc3MyLjEgPworICAgICAgICAgICAgaWYgb3MucGF0aC5z
cGxpdGV4dChwYXRoKVsxXSA9PSAnJzoKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5q
b2luKHBhdGgsICcnKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9hZGRfdGVzdHMo
c2VsZiwgdGVzdHMsIGV4cGVjdGF0aW9ucywgdGVzdF9saXN0X3BhdGgsIGxpbmVubywKKyAgICAg
ICAgICAgICAgICAgICBtb2RpZmllcnMsIG9wdGlvbnMpOgorICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0czoKKyAgICAgICAgICAgIGlmIHNlbGYuX2FscmVhZHlfc2Vlbl90ZXN0KHRlc3QsIHRlc3Rf
bGlzdF9wYXRoLCBsaW5lbm8pOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAg
ICAgIHNlbGYuX2NsZWFyX2V4cGVjdGF0aW9uc19mb3JfdGVzdCh0ZXN0LCB0ZXN0X2xpc3RfcGF0
aCkKKyAgICAgICAgICAgIHNlbGYuX2FkZF90ZXN0KHRlc3QsIG1vZGlmaWVycywgZXhwZWN0YXRp
b25zLCBvcHRpb25zKQorCisgICAgZGVmIF9hZGRfdGVzdChzZWxmLCB0ZXN0LCBtb2RpZmllcnMs
IGV4cGVjdGF0aW9ucywgb3B0aW9ucyk6CisgICAgICAgICIiIlNldHMgdGhlIGV4cGVjdGVkIHN0
YXRlIGZvciBhIGdpdmVuIHRlc3QuCisKKyAgICAgICAgVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhl
IHRlc3QgaGFzIG5vdCBiZWVuIGFkZGVkIGJlZm9yZS4gSWYgaXQgaGFzLAorICAgICAgICB1c2Ug
X0NsZWFyRXhwZWN0YXRpb25zRm9yVGVzdCgpIHRvIHJlc2V0IHRoZSBzdGF0ZSBwcmlvciB0bwor
ICAgICAgICBjYWxsaW5nIHRoaXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiB0
ZXN0IHRvIGFkZAorICAgICAgICAgIG1vZGlmaWVyczogc2VxdWVuY2Ugb2YgbW9kaWZpZXIga2V5
d29yZHMgKCd3b250Zml4JywgJ3Nsb3cnLCBldGMuKQorICAgICAgICAgIGV4cGVjdGF0aW9uczog
c2VxdWVuY2Ugb2YgZXhwZWN0YXRpb25zIChQQVNTLCBJTUFHRSwgZXRjLikKKyAgICAgICAgICBv
cHRpb25zOiBzZXF1ZW5jZSBvZiBrZXl3b3JkcyBhbmQgYnVnIGlkZW50aWZpZXJzLiIiIgorICAg
ICAgICBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9uc1t0ZXN0XSA9IGV4cGVjdGF0aW9ucworICAg
ICAgICBmb3IgZXhwZWN0YXRpb24gaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgc2VsZi5f
ZXhwZWN0YXRpb25fdG9fdGVzdHNbZXhwZWN0YXRpb25dLmFkZCh0ZXN0KQorCisgICAgICAgIHNl
bGYuX3Rlc3RfdG9fb3B0aW9uc1t0ZXN0XSA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fdGVzdF90
b19tb2RpZmllcnNbdGVzdF0gPSBzZXQoKQorICAgICAgICBmb3IgbW9kaWZpZXIgaW4gbW9kaWZp
ZXJzOgorICAgICAgICAgICAgbW9kX3ZhbHVlID0gc2VsZi5NT0RJRklFUlNbbW9kaWZpZXJdCisg
ICAgICAgICAgICBzZWxmLl9tb2RpZmllcl90b190ZXN0c1ttb2RfdmFsdWVdLmFkZCh0ZXN0KQor
ICAgICAgICAgICAgc2VsZi5fdGVzdF90b19tb2RpZmllcnNbdGVzdF0uYWRkKG1vZF92YWx1ZSkK
KworICAgICAgICBpZiAnd29udGZpeCcgaW4gbW9kaWZpZXJzOgorICAgICAgICAgICAgc2VsZi5f
dGltZWxpbmVfdG9fdGVzdHNbV09OVEZJWF0uYWRkKHRlc3QpCisgICAgICAgIGVsaWYgJ2RlZmVy
JyBpbiBtb2RpZmllcnM6CisgICAgICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0c1tERUZF
Ul0uYWRkKHRlc3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90aW1lbGluZV90
b190ZXN0c1tOT1ddLmFkZCh0ZXN0KQorCisgICAgICAgIGlmICdza2lwJyBpbiBtb2RpZmllcnM6
CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0c1tTS0lQXS5hZGQodGVzdCkK
KyAgICAgICAgZWxpZiBleHBlY3RhdGlvbnMgPT0gc2V0KFtQQVNTXSk6CisgICAgICAgICAgICBz
ZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0c1tQQVNTXS5hZGQodGVzdCkKKyAgICAgICAgZWxpZiBs
ZW4oZXhwZWN0YXRpb25zKSA+IDE6CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90b190
ZXN0c1tGTEFLWV0uYWRkKHRlc3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9y
ZXN1bHRfdHlwZV90b190ZXN0c1tGQUlMXS5hZGQodGVzdCkKKworICAgIGRlZiBfY2xlYXJfZXhw
ZWN0YXRpb25zX2Zvcl90ZXN0KHNlbGYsIHRlc3QsIHRlc3RfbGlzdF9wYXRoKToKKyAgICAgICAg
IiIiUmVtb3ZlIHByZXhpc3RpbmcgZXhwZWN0YXRpb25zIGZvciB0aGlzIHRlc3QuCisgICAgICAg
IFRoaXMgaGFwcGVucyBpZiB3ZSBhcmUgc2VlaW5nIGEgbW9yZSBwcmVjaXNlIHBhdGgKKyAgICAg
ICAgdGhhbiBhIHByZXZpb3VzIGxpc3RpbmcuCisgICAgICAgICIiIgorICAgICAgICBpZiB0ZXN0
IGluIHNlbGYuX3Rlc3RfbGlzdF9wYXRoczoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdG9fZXhw
ZWN0YXRpb25zLnBvcCh0ZXN0LCAnJykKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9mcm9tX3Nl
dHModGVzdCwgc2VsZi5fZXhwZWN0YXRpb25fdG9fdGVzdHMpCisgICAgICAgICAgICBzZWxmLl9y
ZW1vdmVfZnJvbV9zZXRzKHRlc3QsIHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzKQorICAgICAgICAg
ICAgc2VsZi5fcmVtb3ZlX2Zyb21fc2V0cyh0ZXN0LCBzZWxmLl90aW1lbGluZV90b190ZXN0cykK
KyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9mcm9tX3NldHModGVzdCwgc2VsZi5fcmVzdWx0X3R5
cGVfdG9fdGVzdHMpCisKKyAgICAgICAgc2VsZi5fdGVzdF9saXN0X3BhdGhzW3Rlc3RdID0gb3Mu
cGF0aC5ub3JtcGF0aCh0ZXN0X2xpc3RfcGF0aCkKKworICAgIGRlZiBfcmVtb3ZlX2Zyb21fc2V0
cyhzZWxmLCB0ZXN0LCBkaWN0KToKKyAgICAgICAgIiIiUmVtb3ZlcyB0aGUgZ2l2ZW4gdGVzdCBm
cm9tIHRoZSBzZXRzIGluIHRoZSBkaWN0aW9uYXJ5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
ICAgdGVzdDogdGVzdCB0byBsb29rIGZvcgorICAgICAgICAgIGRpY3Q6IGRpY3Qgb2Ygc2V0cyBv
ZiBmaWxlcyIiIgorICAgICAgICBmb3Igc2V0X29mX3Rlc3RzIGluIGRpY3QuaXRlcnZhbHVlcygp
OgorICAgICAgICAgICAgaWYgdGVzdCBpbiBzZXRfb2ZfdGVzdHM6CisgICAgICAgICAgICAgICAg
c2V0X29mX3Rlc3RzLnJlbW92ZSh0ZXN0KQorCisgICAgZGVmIF9hbHJlYWR5X3NlZW5fdGVzdChz
ZWxmLCB0ZXN0LCB0ZXN0X2xpc3RfcGF0aCwgbGluZW5vKToKKyAgICAgICAgIiIiUmV0dXJucyB0
cnVlIGlmIHdlJ3ZlIGFscmVhZHkgc2VlbiBhIG1vcmUgcHJlY2lzZSBwYXRoIGZvciB0aGlzIHRl
c3QKKyAgICAgICAgdGhhbiB0aGUgdGVzdF9saXN0X3BhdGguCisgICAgICAgICIiIgorICAgICAg
ICBpZiBub3QgdGVzdCBpbiBzZWxmLl90ZXN0X2xpc3RfcGF0aHM6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBwcmV2X2Jhc2VfcGF0aCA9IHNlbGYuX3Rlc3RfbGlzdF9wYXRo
c1t0ZXN0XQorICAgICAgICBpZiAocHJldl9iYXNlX3BhdGggPT0gb3MucGF0aC5ub3JtcGF0aCh0
ZXN0X2xpc3RfcGF0aCkpOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywgJ0R1
cGxpY2F0ZSBleHBlY3RhdGlvbnMuJywgdGVzdCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisK
KyAgICAgICAgIyBDaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gYSBtb3JlIHByZWNpc2UgcGF0
aC4KKyAgICAgICAgcmV0dXJuIHByZXZfYmFzZV9wYXRoLnN0YXJ0c3dpdGgob3MucGF0aC5ub3Jt
cGF0aCh0ZXN0X2xpc3RfcGF0aCkpCisKKyAgICBkZWYgX2FkZF9lcnJvcihzZWxmLCBsaW5lbm8s
IG1zZywgcGF0aCk6CisgICAgICAgICIiIlJlcG9ydHMgYW4gZXJyb3IgdGhhdCB3aWxsIHByZXZl
bnQgcnVubmluZyB0aGUgdGVzdHMuIERvZXMgbm90CisgICAgICAgIGltbWVkaWF0ZWx5IHJhaXNl
IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIHdlJ2QgbGlrZSB0byBhZ2dyZWdhdGUgYWxsIHRoZQorICAg
ICAgICBlcnJvcnMgc28gdGhleSBjYW4gYWxsIGJlIHByaW50ZWQgb3V0LiIiIgorICAgICAgICBz
ZWxmLl9lcnJvcnMuYXBwZW5kKCdcbkxpbmU6JXMgJXMgJXMnICUgKGxpbmVubywgbXNnLCBwYXRo
KSkKKworICAgIGRlZiBfbG9nX25vbl9mYXRhbF9lcnJvcihzZWxmLCBsaW5lbm8sIG1zZywgcGF0
aCk6CisgICAgICAgICIiIlJlcG9ydHMgYW4gZXJyb3IgdGhhdCB3aWxsIG5vdCBwcmV2ZW50IHJ1
bm5pbmcgdGhlIHRlc3RzLiBUaGVzZSBhcmUKKyAgICAgICAgc3RpbGwgZXJyb3JzLCBidXQgbm90
IGJhZCBlbm91Z2ggdG8gd2FycmFudCBicmVha2luZyB0ZXN0IHJ1bm5pbmcuIiIiCisgICAgICAg
IHNlbGYuX25vbl9mYXRhbF9lcnJvcnMuYXBwZW5kKCdMaW5lOiVzICVzICVzJyAlIChsaW5lbm8s
IG1zZywgcGF0aCkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9mYWlsdXJl
cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTU3ZGVhCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvdGVzdF9mYWlsdXJlcy5weQpAQCAtMCwwICsxLDI2NyBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFt
ZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkNsYXNzZXMgZm9yIGZhaWx1
cmVzIHRoYXQgb2NjdXIgZHVyaW5nIHRlc3RzLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB0ZXN0
X2V4cGVjdGF0aW9ucworCisKK2RlZiBkZXRlcm1pbmVfcmVzdWx0X3R5cGUoZmFpbHVyZV9saXN0
KToKKyAgICAiIiJUYWtlcyBhIHNldCBvZiB0ZXN0X2ZhaWx1cmVzIGFuZCByZXR1cm5zIHdoaWNo
IHJlc3VsdCB0eXBlIGJlc3QgZml0cworICAgIHRoZSBsaXN0IG9mIGZhaWx1cmVzLiAiQmVzdCBm
aXRzIiBtZWFucyB3ZSB1c2UgdGhlIHdvcnN0IHR5cGUgb2YgZmFpbHVyZS4KKworICAgIFJldHVy
bnM6CisgICAgICBvbmUgb2YgdGhlIHRlc3RfZXhwZWN0YXRpb25zIHJlc3VsdCB0eXBlcyAtIFBB
U1MsIFRFWFQsIENSQVNILCBldGMuIiIiCisKKyAgICBpZiBub3QgZmFpbHVyZV9saXN0IG9yIGxl
bihmYWlsdXJlX2xpc3QpID09IDA6CisgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5Q
QVNTCisKKyAgICBmYWlsdXJlX3R5cGVzID0gW3R5cGUoZikgZm9yIGYgaW4gZmFpbHVyZV9saXN0
XQorICAgIGlmIEZhaWx1cmVDcmFzaCBpbiBmYWlsdXJlX3R5cGVzOgorICAgICAgICByZXR1cm4g
dGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gKKyAgICBlbGlmIEZhaWx1cmVUaW1lb3V0IGluIGZhaWx1
cmVfdHlwZXM6CisgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUCisgICAg
ZWxpZiAoRmFpbHVyZU1pc3NpbmdSZXN1bHQgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAgICAg
IEZhaWx1cmVNaXNzaW5nSW1hZ2UgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAgICAgIEZhaWx1
cmVNaXNzaW5nSW1hZ2VIYXNoIGluIGZhaWx1cmVfdHlwZXMpOgorICAgICAgICByZXR1cm4gdGVz
dF9leHBlY3RhdGlvbnMuTUlTU0lORworICAgIGVsc2U6CisgICAgICAgIGlzX3RleHRfZmFpbHVy
ZSA9IEZhaWx1cmVUZXh0TWlzbWF0Y2ggaW4gZmFpbHVyZV90eXBlcworICAgICAgICBpc19pbWFn
ZV9mYWlsdXJlID0gKEZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3QgaW4gZmFpbHVyZV90eXBlcyBv
cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCBp
biBmYWlsdXJlX3R5cGVzKQorICAgICAgICBpZiBpc190ZXh0X2ZhaWx1cmUgYW5kIGlzX2ltYWdl
X2ZhaWx1cmU6CisgICAgICAgICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMuSU1BR0VfUExV
U19URVhUCisgICAgICAgIGVsaWYgaXNfdGV4dF9mYWlsdXJlOgorICAgICAgICAgICAgcmV0dXJu
IHRlc3RfZXhwZWN0YXRpb25zLlRFWFQKKyAgICAgICAgZWxpZiBpc19pbWFnZV9mYWlsdXJlOgor
ICAgICAgICAgICAgcmV0dXJuIHRlc3RfZXhwZWN0YXRpb25zLklNQUdFCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmNsYXNzaWZpYWJsZSBzZXQgb2YgZmFp
bHVyZXM6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIoZmFpbHVyZV90eXBl
cykpCisKKworY2xhc3MgVGVzdEZhaWx1cmUob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNl
IGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgZmFpbHVyZSBpbnRlcmZhY2UuIiIiCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0cmlu
ZyBkZXNjcmliaW5nIHRoZSBmYWlsdXJlIGluIG1vcmUgZGV0YWlsLiIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1dChzZWxmLCBmaWxl
bmFtZSk6CisgICAgICAgICIiIlJldHVybnMgYW4gSFRNTCBzdHJpbmcgdG8gYmUgaW5jbHVkZWQg
b24gdGhlIHJlc3VsdHMuaHRtbCBwYWdlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZAorCisgICAgZGVmIHNob3VsZF9raWxsX3Rlc3Rfc2hlbGwoc2VsZik6CisgICAgICAgICIiIlJl
dHVybnMgVHJ1ZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgdGVzdCBzaGVsbCBiZWZvcmUgdGhlIG5l
eHQKKyAgICAgICAgdGVzdC4iIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcmVs
YXRpdmVfb3V0cHV0X2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lLCBtb2RpZmllcik6CisgICAgICAg
ICIiIlJldHVybnMgYSByZWxhdGl2ZSBmaWxlbmFtZSBpbnNpZGUgdGhlIG91dHB1dCBkaXIgdGhh
dCBjb250YWlucworICAgICAgICBtb2RpZmllci4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaWYg
ZmlsZW5hbWUgaXMgZmFzdFxkb21cZm9vLmh0bWwgYW5kIG1vZGlmaWVyIGlzCisgICAgICAgICIt
ZXhwZWN0ZWQudHh0IiwgdGhlIHJldHVybiB2YWx1ZSBpcyBmYXN0XGRvbVxmb28tZXhwZWN0ZWQu
dHh0CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogcmVsYXRpdmUgZmlsZW5h
bWUgdG8gdGVzdCBmaWxlCisgICAgICAgICAgbW9kaWZpZXI6IGEgc3RyaW5nIHRvIHJlcGxhY2Ug
dGhlIGV4dGVuc2lvbiBvZiBmaWxlbmFtZSB3aXRoCisKKyAgICAgICAgUmV0dXJuOgorICAgICAg
ICAgIFRoZSByZWxhdGl2ZSB3aW5kb3dzIHBhdGggdG8gdGhlIG91dHB1dCBmaWxlbmFtZQorICAg
ICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsg
bW9kaWZpZXIKKworCitjbGFzcyBGYWlsdXJlV2l0aFR5cGUoVGVzdEZhaWx1cmUpOgorICAgICIi
IkJhc2UgY2xhc3MgdGhhdCBwcm9kdWNlcyBzdGFuZGFyZCBIVE1MIG91dHB1dCBiYXNlZCBvbiB0
aGUgdGVzdCB0eXBlLgorCisgICAgU3ViY2xhc3NlcyBtYXkgY29tbW9ubHkgY2hvb3NlIHRvIG92
ZXJyaWRlIHRoZSBSZXN1bHRIdG1sT3V0cHV0LCBidXQgc3RpbGwKKyAgICB1c2UgdGhlIHN0YW5k
YXJkIE91dHB1dExpbmtzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rf
dHlwZSk6CisgICAgICAgIFRlc3RGYWlsdXJlLl9faW5pdF9fKHNlbGYpCisgICAgICAgICMgVE9E
TyhvamFuKTogVGhpcyBjbGFzcyBubyBsb25nZXIgbmVlZHMgdG8ga25vdyB0aGUgdGVzdF90eXBl
LgorICAgICAgICBzZWxmLl90ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKKworICAgICMgRmlsZW5hbWUg
c3VmZml4ZXMgdXNlZCBieSBSZXN1bHRIdG1sT3V0cHV0LgorICAgIE9VVF9GSUxFTkFNRVMgPSBb
XQorCisgICAgZGVmIG91dHB1dF9saW5rcyhzZWxmLCBmaWxlbmFtZSwgb3V0X25hbWVzKToKKyAg
ICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBob2xkaW5nIGFsbCBhcHBsaWNhYmxlIG91dHB1dCBm
aWxlIGxpbmtzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWU6IHRoZSB0ZXN0
IGZpbGVuYW1lLCB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcmVzdWx0IGZpbGUgbmFtZXMKKyAgICAg
ICAgICBvdXRfbmFtZXM6IGxpc3Qgb2YgZmlsZW5hbWUgc3VmZml4ZXMgZm9yIHRoZSBmaWxlcy4g
SWYgdGhyZWUgb3IgbW9yZQorICAgICAgICAgICAgICBzdWZmaXhlcyBhcmUgaW4gdGhlIGxpc3Qs
IHRoZXkgc2hvdWxkIGJlIFthY3R1YWwsIGV4cGVjdGVkLCBkaWZmLAorICAgICAgICAgICAgICB3
ZGlmZl0uIFR3byBzdWZmaXhlcyBzaG91bGQgYmUgW2FjdHVhbCwgZXhwZWN0ZWRdLCBhbmQgYQor
ICAgICAgICAgICAgICBzaW5nbGUgaXRlbSBpcyB0aGUgW2FjdHVhbF0gZmlsZW5hbWUgc3VmZml4
LgorICAgICAgICAgICAgICBJZiBvdXRfbmFtZXMgaXMgZW1wdHksIHJldHVybnMgdGhlIGVtcHR5
IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIGxpbmtzID0gWycnXQorICAgICAgICB1cmlz
ID0gW3NlbGYucmVsYXRpdmVfb3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLCBmbikgZm9yCisgICAg
ICAgICAgICAgICAgZm4gaW4gb3V0X25hbWVzXQorICAgICAgICBpZiBsZW4odXJpcykgPiAxOgor
ICAgICAgICAgICAgbGlua3MuYXBwZW5kKCI8YSBocmVmPSclcyc+ZXhwZWN0ZWQ8L2E+IiAlIHVy
aXNbMV0pCisgICAgICAgIGlmIGxlbih1cmlzKSA+IDA6CisgICAgICAgICAgICBsaW5rcy5hcHBl
bmQoIjxhIGhyZWY9JyVzJz5hY3R1YWw8L2E+IiAlIHVyaXNbMF0pCisgICAgICAgIGlmIGxlbih1
cmlzKSA+IDI6CisgICAgICAgICAgICBsaW5rcy5hcHBlbmQoIjxhIGhyZWY9JyVzJz5kaWZmPC9h
PiIgJSB1cmlzWzJdKQorICAgICAgICBpZiBsZW4odXJpcykgPiAzOgorICAgICAgICAgICAgbGlu
a3MuYXBwZW5kKCI8YSBocmVmPSclcyc+d2RpZmY8L2E+IiAlIHVyaXNbM10pCisgICAgICAgIHJl
dHVybiAnICcuam9pbihsaW5rcykKKworICAgIGRlZiByZXN1bHRfaHRtbF9vdXRwdXQoc2VsZiwg
ZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5tZXNzYWdlKCkgKyBzZWxmLm91dHB1dF9s
aW5rcyhmaWxlbmFtZSwgc2VsZi5PVVRfRklMRU5BTUVTKQorCisKK2NsYXNzIEZhaWx1cmVUaW1l
b3V0KFRlc3RGYWlsdXJlKToKKyAgICAiIiJUZXN0IHRpbWVkIG91dC4gIFdlIGFsc28gd2FudCB0
byByZXN0YXJ0IHRoZSB0ZXN0IHNoZWxsIGlmIHRoaXMKKyAgICBoYXBwZW5zLiIiIgorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiVGVzdCB0
aW1lZCBvdXQiCisKKyAgICBkZWYgcmVzdWx0X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToK
KyAgICAgICAgcmV0dXJuICI8c3Ryb25nPiVzPC9zdHJvbmc+IiAlIHNlbGYubWVzc2FnZSgpCisK
KyAgICBkZWYgc2hvdWxkX2tpbGxfdGVzdF9zaGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworCitjbGFzcyBGYWlsdXJlQ3Jhc2goVGVzdEZhaWx1cmUpOgorICAgICIiIlRlc3Qgc2hl
bGwgY3Jhc2hlZC4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgor
ICAgICAgICByZXR1cm4gIlRlc3Qgc2hlbGwgY3Jhc2hlZCIKKworICAgIGRlZiByZXN1bHRfaHRt
bF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAjIFRPRE8odGMpOiBjcmVhdGUgYSBs
aW5rIHRvIHRoZSBtaW5pZHVtcCBmaWxlCisgICAgICAgIHN0YWNrID0gc2VsZi5yZWxhdGl2ZV9v
dXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsICItc3RhY2sudHh0IikKKyAgICAgICAgcmV0dXJuICI8
c3Ryb25nPiVzPC9zdHJvbmc+IDxhIGhyZWY9JXM+c3RhY2s8L2E+IiAlIChzZWxmLm1lc3NhZ2Uo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFjaykKKworICAgIGRlZiBzaG91bGRfa2lsbF90ZXN0X3NoZWxsKHNlbGYpOgor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIEZhaWx1cmVNaXNzaW5nUmVzdWx0KEZhaWx1
cmVXaXRoVHlwZSk6CisgICAgIiIiRXhwZWN0ZWQgcmVzdWx0IHdhcyBtaXNzaW5nLiIiIgorICAg
IE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwudHh0Il0KKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgbWVzc2FnZSgpOgorICAgICAgICByZXR1cm4gIk5vIGV4cGVjdGVkIHJlc3VsdHMgZm91
bmQiCisKKyAgICBkZWYgcmVzdWx0X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAg
ICAgcmV0dXJuICgiPHN0cm9uZz4lczwvc3Ryb25nPiIgJSBzZWxmLm1lc3NhZ2UoKSArCisgICAg
ICAgICAgICAgICAgc2VsZi5vdXRwdXRfbGlua3MoZmlsZW5hbWUsIHNlbGYuT1VUX0ZJTEVOQU1F
UykpCisKKworY2xhc3MgRmFpbHVyZVRleHRNaXNtYXRjaChGYWlsdXJlV2l0aFR5cGUpOgorICAg
ICIiIlRleHQgZGlmZiBvdXRwdXQgZmFpbGVkLiIiIgorICAgICMgRmlsZW5hbWUgc3VmZml4ZXMg
dXNlZCBieSBSZXN1bHRIdG1sT3V0cHV0LgorICAgIE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwu
dHh0IiwgIi1leHBlY3RlZC50eHQiLCAiLWRpZmYudHh0Il0KKyAgICBPVVRfRklMRU5BTUVTX1dE
SUZGID0gWyItYWN0dWFsLnR4dCIsICItZXhwZWN0ZWQudHh0IiwgIi1kaWZmLnR4dCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiLXdkaWZmLmh0bWwiXQorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHRlc3RfdHlwZSwgaGFzX3dkaWZmKToKKyAgICAgICAgRmFpbHVyZVdpdGhUeXBlLl9f
aW5pdF9fKHNlbGYsIHRlc3RfdHlwZSkKKyAgICAgICAgaWYgaGFzX3dkaWZmOgorICAgICAgICAg
ICAgc2VsZi5PVVRfRklMRU5BTUVTID0gc2VsZi5PVVRfRklMRU5BTUVTX1dESUZGCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJUZXh0IGRp
ZmYgbWlzbWF0Y2giCisKKworY2xhc3MgRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2goRmFpbHVyZVdp
dGhUeXBlKToKKyAgICAiIiJBY3R1YWwgcmVzdWx0IGhhc2ggd2FzIG1pc3NpbmcuIiIiCisgICAg
IyBDaHJvbWUgZG9lc24ndCBrbm93IHRvIGRpc3BsYXkgYSAuY2hlY2tzdW0gZmlsZSBhcyB0ZXh0
LCBzbyBkb24ndCBib3RoZXIKKyAgICAjIHB1dHRpbmcgaW4gYSBsaW5rIHRvIHRoZSBhY3R1YWwg
cmVzdWx0LgorICAgIE9VVF9GSUxFTkFNRVMgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBtZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiTm8gZXhwZWN0ZWQgaW1hZ2UgaGFzaCBm
b3VuZCIKKworICAgIGRlZiByZXN1bHRfaHRtbF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAg
ICAgICByZXR1cm4gIjxzdHJvbmc+JXM8L3N0cm9uZz4iICUgc2VsZi5tZXNzYWdlKCkKKworCitj
bGFzcyBGYWlsdXJlTWlzc2luZ0ltYWdlKEZhaWx1cmVXaXRoVHlwZSk6CisgICAgIiIiQWN0dWFs
IHJlc3VsdCBpbWFnZSB3YXMgbWlzc2luZy4iIiIKKyAgICBPVVRfRklMRU5BTUVTID0gWyItYWN0
dWFsLnBuZyJdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAg
ICAgcmV0dXJuICJObyBleHBlY3RlZCBpbWFnZSBmb3VuZCIKKworICAgIGRlZiByZXN1bHRfaHRt
bF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gKCI8c3Ryb25nPiVzPC9z
dHJvbmc+IiAlIHNlbGYubWVzc2FnZSgpICsKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9s
aW5rcyhmaWxlbmFtZSwgc2VsZi5PVVRfRklMRU5BTUVTKSkKKworCitjbGFzcyBGYWlsdXJlSW1h
Z2VIYXNoTWlzbWF0Y2goRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJJbWFnZSBoYXNoZXMgZGlk
bid0IG1hdGNoLiIiIgorICAgIE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwucG5nIiwgIi1leHBl
Y3RlZC5wbmciLCAiLWRpZmYucG5nIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVz
c2FnZSgpOgorICAgICAgICAjIFdlIGNhbGwgdGhpcyBhIHNpbXBsZSBpbWFnZSBtaXNtYXRjaCB0
byBhdm9pZCBjb25mdXNpb24sIHNpbmNlCisgICAgICAgICMgd2UgbGluayB0byB0aGUgUE5HcyBy
YXRoZXIgdGhhbiB0aGUgY2hlY2tzdW1zLgorICAgICAgICByZXR1cm4gIkltYWdlIG1pc21hdGNo
IgorCisKK2NsYXNzIEZhaWx1cmVGdXp6eUZhaWx1cmUoRmFpbHVyZVdpdGhUeXBlKToKKyAgICAi
IiJJbWFnZSBoYXNoZXMgZGlkbid0IG1hdGNoLiIiIgorICAgIE9VVF9GSUxFTkFNRVMgPSBbIi1h
Y3R1YWwucG5nIiwgIi1leHBlY3RlZC5wbmciXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBtZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiRnV6enkgaW1hZ2UgbWF0Y2ggYWxzbyBmYWls
ZWQiCisKKworY2xhc3MgRmFpbHVyZUltYWdlSGFzaEluY29ycmVjdChGYWlsdXJlV2l0aFR5cGUp
OgorICAgICIiIkFjdHVhbCByZXN1bHQgaGFzaCBpcyBpbmNvcnJlY3QuIiIiCisgICAgIyBDaHJv
bWUgZG9lc24ndCBrbm93IHRvIGRpc3BsYXkgYSAuY2hlY2tzdW0gZmlsZSBhcyB0ZXh0LCBzbyBk
b24ndCBib3RoZXIKKyAgICAjIHB1dHRpbmcgaW4gYSBsaW5rIHRvIHRoZSBhY3R1YWwgcmVzdWx0
LgorICAgIE9VVF9GSUxFTkFNRVMgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBt
ZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiSW1hZ2VzIG1hdGNoLCBleHBlY3RlZCBpbWFnZSBo
YXNoIGluY29ycmVjdC4gIgorCisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1dChzZWxmLCBmaWxl
bmFtZSk6CisgICAgICAgIHJldHVybiAiPHN0cm9uZz4lczwvc3Ryb25nPiIgJSBzZWxmLm1lc3Nh
Z2UoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9maWxlcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmZTEzNgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfZmlsZXMucHkKQEAgLTAsMCArMSw5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIlRoaXMgbW9kdWxlIGlzIHVzZWQgdG8gZmluZCBhbGwgb2Yg
dGhlIGxheW91dCB0ZXN0IGZpbGVzIHVzZWQgYnkgQ2hyb21pdW0KKyhhY3Jvc3MgYWxsIHBsYXRm
b3JtcykuIEl0IGV4cG9zZXMgb25lIHB1YmxpYyBmdW5jdGlvbiAtIEdhdGhlclRlc3RGaWxlcygp
IC0KK3doaWNoIHRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcGF0aHMuIElmIGEgbGlzdCBpcyBw
YXNzZWQgaW4sIHRoZSByZXR1cm5lZAorbGlzdCBvZiB0ZXN0IGZpbGVzIGlzIGNvbnN0cmFpbmVk
IHRvIHRob3NlIGZvdW5kIHVuZGVyIHRoZSBwYXRocyBwYXNzZWQgaW4sCitpLmUuIGNhbGxpbmcg
R2F0aGVyVGVzdEZpbGVzKFsiTGF5b3V0VGVzdHMvZmFzdCJdKSB3aWxsIG9ubHkgcmV0dXJuIGZp
bGVzCit1bmRlciB0aGF0IGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IGdsb2IKK2ltcG9ydCBvcwor
aW1wb3J0IHBhdGhfdXRpbHMKKworIyBXaGVuIGNvbGxlY3RpbmcgdGVzdCBjYXNlcywgd2UgaW5j
bHVkZSBhbnkgZmlsZSB3aXRoIHRoZXNlIGV4dGVuc2lvbnMuCitfc3VwcG9ydGVkX2ZpbGVfZXh0
ZW5zaW9ucyA9IHNldChbJy5odG1sJywgJy5zaHRtbCcsICcueG1sJywgJy54aHRtbCcsICcucGwn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcucGhwJywgJy5zdmcnXSkKKyMg
V2hlbiBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHNraXAgdGhlc2UgZGlyZWN0b3JpZXMKK19za2lw
cGVkX2RpcmVjdG9yaWVzID0gc2V0KFsnLnN2bicsICdfc3ZuJywgJ3Jlc291cmNlcycsICdzY3Jp
cHQtdGVzdHMnXSkKKworCitkZWYgZ2F0aGVyX3Rlc3RfZmlsZXMocGF0aHMpOgorICAgICIiIkdl
bmVyYXRlIGEgc2V0IG9mIHRlc3QgZmlsZXMgYW5kIHJldHVybiB0aGVtLgorCisgICAgQXJnczoK
KyAgICAgIHBhdGhzOiBhIGxpc3Qgb2YgY29tbWFuZCBsaW5lIHBhdGhzIHJlbGF0aXZlIHRvIHRo
ZSB3ZWJraXQvdGVzdHMKKyAgICAgICAgICBkaXJlY3RvcnkuIGdsb2IgcGF0dGVybnMgYXJlIG9r
LgorICAgICIiIgorICAgIHBhdGhzX3RvX3dhbGsgPSBzZXQoKQorICAgICMgaWYgcGF0aHMgaXMg
ZW1wdHksIHByb3ZpZGUgYSBwcmUtZGVmaW5lZCBsaXN0LgorICAgIGlmIHBhdGhzOgorICAgICAg
ICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgICMgSWYgdGhlcmUncyBhbiAqIGluIHRo
ZSBuYW1lLCBhc3N1bWUgaXQncyBhIGdsb2IgcGF0dGVybi4KKyAgICAgICAgICAgIHBhdGggPSBv
cy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksIHBhdGgpCisgICAgICAg
ICAgICBpZiBwYXRoLmZpbmQoJyonKSA+IC0xOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lcyA9
IGdsb2IuZ2xvYihwYXRoKQorICAgICAgICAgICAgICAgIHBhdGhzX3RvX3dhbGsudXBkYXRlKGZp
bGVuYW1lcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGF0aHNfdG9fd2Fs
ay5hZGQocGF0aCkKKyAgICBlbHNlOgorICAgICAgICBwYXRoc190b193YWxrLmFkZChwYXRoX3V0
aWxzLmxheW91dF90ZXN0c19kaXIoKSkKKworICAgICMgTm93IHdhbGsgYWxsIHRoZSBwYXRocyBw
YXNzZWQgaW4gb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgZ2V0IGZpbGVuYW1lcworICAgIHRlc3Rf
ZmlsZXMgPSBzZXQoKQorICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX3dhbGs6CisgICAgICAgIGlm
IG9zLnBhdGguaXNmaWxlKHBhdGgpIGFuZCBfaGFzX3N1cHBvcnRlZF9leHRlbnNpb24ocGF0aCk6
CisgICAgICAgICAgICB0ZXN0X2ZpbGVzLmFkZChvcy5wYXRoLm5vcm1wYXRoKHBhdGgpKQorICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mu
d2FsayhwYXRoKToKKyAgICAgICAgICAgICMgZG9uJ3Qgd2FsayBza2lwcGVkIGRpcmVjdG9yaWVz
IGFuZCBzdWIgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocm9v
dCkgaW4gX3NraXBwZWRfZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgZGVsIGRpcnNbOl0K
KyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4g
ZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgX2hhc19zdXBwb3J0ZWRfZXh0ZW5zaW9uKGZpbGVu
YW1lKToKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocm9vdCwg
ZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5ub3JtcGF0
aChmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9maWxlcy5hZGQoZmlsZW5hbWUp
CisKKyAgICByZXR1cm4gdGVzdF9maWxlcworCisKK2RlZiBfaGFzX3N1cHBvcnRlZF9leHRlbnNp
b24oZmlsZW5hbWUpOgorICAgICIiIlJldHVybiB0cnVlIGlmIGZpbGVuYW1lIGlzIG9uZSBvZiB0
aGUgZmlsZSBleHRlbnNpb25zIHdlIHdhbnQgdG8gcnVuIGEKKyAgICB0ZXN0IG9uLiIiIgorICAg
IGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdCisgICAgcmV0dXJuIGV4
dGVuc2lvbiBpbiBfc3VwcG9ydGVkX2ZpbGVfZXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9z
aGVsbF90aHJlYWQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xMGQwNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90
aHJlYWQucHkKQEAgLTAsMCArMSw1MTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisiIiJBIFRocmVhZCBvYmplY3QgZm9yIHJ1bm5pbmcgdGhlIHRlc3Qg
c2hlbGwgYW5kIHByb2Nlc3NpbmcgVVJMcyBmcm9tIGEKK3NoYXJlZCBxdWV1ZS4KKworRWFjaCB0
aHJlYWQgcnVucyBhIHNlcGFyYXRlIGluc3RhbmNlIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFyeSBh
bmQgdmFsaWRhdGVzCit0aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBVUkxzIHRv
IHByb2Nlc3MgaW4gdGhlIHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJlYWQgZXhpdHMuCisiIiIKKwor
aW1wb3J0IGNvcHkKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQoraW1w
b3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWQK
K2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCBwYXRoX3V0aWxzCitpbXBv
cnQgdGVzdF9mYWlsdXJlcworCisKK2RlZiBwcm9jZXNzX291dHB1dChwcm9jLCB0ZXN0X2luZm8s
IHRlc3RfdHlwZXMsIHRlc3RfYXJncywgdGFyZ2V0LCBvdXRwdXRfZGlyKToKKyAgICAiIiJSZWNl
aXZlcyB0aGUgb3V0cHV0IGZyb20gYSB0ZXN0X3NoZWxsIHByb2Nlc3MsIHN1YmplY3RzIGl0IHRv
IGEgbnVtYmVyCisgICAgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmYWlsdXJlIHR5
cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgorCisgICAgQXJnczoKKyAgICAgIHByb2M6IGFuIGFjdGl2
ZSB0ZXN0X3NoZWxsIHByb2Nlc3MKKyAgICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcg
dGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAorICAgICAgdGVzdF90eXBlczogbGlz
dCBvZiB0ZXN0IHR5cGVzIHRvIHN1YmplY3QgdGhlIG91dHB1dCB0bworICAgICAgdGVzdF9hcmdz
OiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGVhY2ggdGVzdAorICAgICAgdGFyZ2V0OiBEZWJ1
ZyBvciBSZWxlYXNlCisgICAgICBvdXRwdXRfZGlyOiBkaXJlY3RvcnkgdG8gcHV0IGNyYXNoIHN0
YWNrIHRyYWNlcyBpbnRvCisKKyAgICBSZXR1cm5zOiBhIGxpc3Qgb2YgZmFpbHVyZSBvYmplY3Rz
IGFuZCB0aW1lcyBmb3IgdGhlIHRlc3QgYmVpbmcgcHJvY2Vzc2VkCisgICAgIiIiCisgICAgb3V0
bGluZXMgPSBbXQorICAgIGV4dHJhX2xpbmVzID0gW10KKyAgICBmYWlsdXJlcyA9IFtdCisgICAg
Y3Jhc2ggPSBGYWxzZQorCisgICAgIyBTb21lIHRlc3QgYXJncywgc3VjaCBhcyB0aGUgaW1hZ2Ug
aGFzaCwgbWF5IGJlIGFkZGVkIG9yIGNoYW5nZWQgb24gYQorICAgICMgdGVzdC1ieS10ZXN0IGJh
c2lzLgorICAgIGxvY2FsX3Rlc3RfYXJncyA9IGNvcHkuY29weSh0ZXN0X2FyZ3MpCisKKyAgICBz
dGFydF90aW1lID0gdGltZS50aW1lKCkKKworICAgIGxpbmUgPSBwcm9jLnN0ZG91dC5yZWFkbGlu
ZSgpCisKKyAgICAjIE9ubHkgc3RhcnQgc2F2aW5nIG91dHB1dCBsaW5lcyBvbmNlIHdlJ3ZlIGxv
YWRlZCB0aGUgVVJMIGZvciB0aGUgdGVzdC4KKyAgICB1cmwgPSBOb25lCisgICAgdGVzdF9zdHJp
bmcgPSB0ZXN0X2luZm8udXJpLnN0cmlwKCkKKworICAgIHdoaWxlIGxpbmUucnN0cmlwKCkgIT0g
IiNFT0YiOgorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGNyYXNoZWQuCisgICAgICAg
IGlmIGxpbmUgPT0gJycgYW5kIHByb2MucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisKKyAgICAgICAg
ICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZvciBhYnJ1
cHQKKyAgICAgICAgICAgICMgdGVybWluYXRpb24uIFRoaXMgaGFwcGVucyBpZiB3ZSBoaXQgY3Ry
bCtjIGZyb20gdGhlIHByb21wdCBhbmQKKyAgICAgICAgICAgICMgd2UgaGFwcGVuIHRvIGJlIHdh
aXRpbmcgb24gdGhlIHRlc3Rfc2hlbGwuCisgICAgICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUg
Zm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlCisgICAgICAgICAgICAj
IGFib3ZlIGNvZGUgaXMgdmFsaWQuIFdoYXQgd29ya3MgZm9yIG1lIHVuZGVyIExpbnV4IHRvIGRl
dGVjdAorICAgICAgICAgICAgIyBjdHJsK2MgaXMgZm9yIHRoZSBzdWJwcm9jZXNzIHJldHVybmNv
ZGUgdG8gYmUgbmVnYXRpdmUgU0lHSU5ULgorICAgICAgICAgICAgIyBBbmQgdGhhdCBhZ3JlZXMg
d2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgaWYgKC0xMDcz
NzQxNTEwID09IHByb2MucmV0dXJuY29kZSBvcgorICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJ
R0lOVCA9PSBwcm9jLnJldHVybmNvZGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJk
SW50ZXJydXB0CisgICAgICAgICAgICBjcmFzaCA9IFRydWUKKyAgICAgICAgICAgIGJyZWFrCisK
KyAgICAgICAgIyBEb24ndCBpbmNsdWRlICNVUkwgbGluZXMgaW4gb3VyIG91dHB1dAorICAgICAg
ICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiNVUkw6Iik6CisgICAgICAgICAgICB1cmwgPSBsaW5lLnJz
dHJpcCgpWzU6XQorICAgICAgICAgICAgaWYgdXJsICE9IHRlc3Rfc3RyaW5nOgorICAgICAgICAg
ICAgICAgIGxvZ2dpbmcuZmF0YWwoIlRlc3QgZ290IG91dCBvZiBzeW5jOlxufCVzfFxufCVzfCIg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVybCwgdGVzdF9zdHJpbmcpKQorICAg
ICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ0ZXN0IG91dCBvZiBzeW5jIikKKyAg
ICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIiNNRDU6Iik6CisgICAgICAgICAgICBsb2NhbF90
ZXN0X2FyZ3MuaGFzaCA9IGxpbmUucnN0cmlwKClbNTpdCisgICAgICAgIGVsaWYgbGluZS5zdGFy
dHN3aXRoKCIjVEVTVF9USU1FRF9PVVQiKToKKyAgICAgICAgICAgICMgVGVzdCB0aW1lZCBvdXQs
IGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHJlYWQgdW50aWwgI0VPRi4KKyAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCisgICAgICAgIGVsaWYg
dXJsOgorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBleHRyYV9saW5lcy5hcHBlbmQobGluZSkKKworICAgICAgICBsaW5lID0gcHJv
Yy5zdGRvdXQucmVhZGxpbmUoKQorCisgICAgZW5kX3Rlc3RfdGltZSA9IHRpbWUudGltZSgpCisK
KyAgICBpZiBsZW4oZXh0cmFfbGluZXMpOgorICAgICAgICBleHRyYSA9ICIiLmpvaW4oZXh0cmFf
bGluZXMpCisgICAgICAgIGlmIGNyYXNoOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3Rh
Y2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAodGVzdF9zdHJpbmcsIGV4dHJhKSkKKyAgICAgICAgICAg
ICMgU3RyaXAgb2ZmICJmaWxlOi8vIiBzaW5jZSBSZWxhdGl2ZVRlc3RGaWxlbmFtZSBleHBlY3Rz
CisgICAgICAgICAgICAjIGZpbGVzeXN0ZW0gcGF0aHMuCisgICAgICAgICAgICBmaWxlbmFtZSA9
IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X3N0cmluZ1s3Ol0pKQorICAgICAgICAgICAgZmlsZW5h
bWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3RhY2sudHh0IgorICAgICAg
ICAgICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVu
YW1lKVswXSkKKyAgICAgICAgICAgIG9wZW4oZmlsZW5hbWUsICJ3YiIpLndyaXRlKGV4dHJhKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUHJldmlvdXMgdGVzdCBv
dXRwdXQgZXh0cmEgbGluZXMgYWZ0ZXIgZHVtcDpcbiVzIiAlCisgICAgICAgICAgICAgICAgZXh0
cmEpCisKKyAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMuCisgICAg
dGltZV9mb3JfZGlmZnMgPSB7fQorICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoKKyAg
ICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgbmV3X2ZhaWx1cmVz
ID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHRlc3RfaW5mby5maWxlbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MsICcnLmpvaW4ob3V0
bGluZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9jYWxfdGVzdF9hcmdzLCB0YXJnZXQpCisgICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZh
aWx1cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZSBkb24ndAorICAgICAgICAj
IGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1yZXBvcnQgZm9yIHRpbWVv
dXRzIHNpbmNlCisgICAgICAgICMgd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGlt
YWdlIG91dHB1dC4KKyAgICAgICAgaWYgbm90IGNyYXNoOgorICAgICAgICAgICAgZmFpbHVyZXMu
ZXh0ZW5kKG5ld19mYWlsdXJlcykKKyAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlLl9f
Y2xhc3NfXy5fX25hbWVfX10gPSAoCisgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2Rp
ZmZfdGltZSkKKworICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0g
ZW5kX3Rlc3RfdGltZQorICAgIHRlc3RfcnVuX3RpbWUgPSBlbmRfdGVzdF90aW1lIC0gc3RhcnRf
dGltZQorICAgIHJldHVybiBUZXN0U3RhdHModGVzdF9pbmZvLmZpbGVuYW1lLCBmYWlsdXJlcywg
dGVzdF9ydW5fdGltZSwKKyAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLCB0aW1lX2Zv
cl9kaWZmcykKKworCitkZWYgc3RhcnRfdGVzdF9zaGVsbChjb21tYW5kLCBhcmdzKToKKyAgICAi
IiJSZXR1cm5zIHRoZSBwcm9jZXNzIGZvciBhIG5ldyB0ZXN0X3NoZWxsIHN0YXJ0ZWQgaW4gbGF5
b3V0LXRlc3RzIG1vZGUuCisgICAgIiIiCisgICAgY21kID0gW10KKyAgICAjIEhvb2sgZm9yIGlu
amVjdGluZyB2YWxncmluZCBvciBvdGhlciBydW50aW1lIGluc3RydW1lbnRhdGlvbiwKKyAgICAj
IHVzZWQgYnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90ZXN0cy5weS4KKyAgICB3cmFw
cGVyID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCisgICAgaWYgd3Jh
cHBlciAhPSBOb25lOgorICAgICAgICBjbWQgKz0gW3dyYXBwZXJdCisgICAgY21kICs9IGNvbW1h
bmQgKyBbJy0tbGF5b3V0LXRlc3RzJ10gKyBhcmdzCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9w
ZW4oY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQ
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKwor
CitjbGFzcyBUZXN0U3RhdHM6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZh
aWx1cmVzLCB0ZXN0X3J1bl90aW1lLAorICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9h
bGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVu
YW1lCisgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBmYWlsdXJlcworICAgICAgICBzZWxmLnRlc3Rf
cnVuX3RpbWUgPSB0ZXN0X3J1bl90aW1lCisgICAgICAgIHNlbGYudG90YWxfdGltZV9mb3JfYWxs
X2RpZmZzID0gdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzCisgICAgICAgIHNlbGYudGltZV9mb3Jf
ZGlmZnMgPSB0aW1lX2Zvcl9kaWZmcworCisKK2NsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFk
aW5nLlRocmVhZCk6CisgICAgIiIiVGhyZWFkIHdyYXBwZXIgZm9yIHJ1bm5pbmcgYSBzaW5nbGUg
dGVzdCBmaWxlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rfc2hlbGxfY29tbWFu
ZCwgc2hlbGxfYXJncywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLAorICAgICAgICB0ZXN0X2FyZ3Ms
IHRhcmdldCwgb3V0cHV0X2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAg
ICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBh
bmQgdGltZW91dAorICAgICAgICAgIG91dHB1dF9kaXI6IERpcmVjdG9yeSB0byBwdXQgY3Jhc2gg
c3RhY2tzIGludG8uCisgICAgICAgICAgU2VlIFRlc3RTaGVsbFRocmVhZCBmb3IgZG9jdW1lbnRh
dGlvbiBvZiB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
dGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9jb21tYW5kID0g
dGVzdF9zaGVsbF9jb21tYW5kCisgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3MgPSBzaGVsbF9hcmdz
CisgICAgICAgIHNlbGYuX3Rlc3RfaW5mbyA9IHRlc3RfaW5mbworICAgICAgICBzZWxmLl90ZXN0
X3R5cGVzID0gdGVzdF90eXBlcworICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MK
KyAgICAgICAgc2VsZi5fdGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgIHNlbGYuX291dHB1dF9kaXIg
PSBvdXRwdXRfZGlyCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBwcm9jID0gc3RhcnRf
dGVzdF9zaGVsbChzZWxmLl9jb21tYW5kLCBzZWxmLl9zaGVsbF9hcmdzICsKKyAgICAgICAgICAg
IFsiLS10aW1lLW91dC1tcz0iICsgc2VsZi5fdGVzdF9pbmZvLnRpbWVvdXQsIHNlbGYuX3Rlc3Rf
aW5mby51cmldKQorICAgICAgICBzZWxmLl90ZXN0X3N0YXRzID0gcHJvY2Vzc19vdXRwdXQocHJv
Yywgc2VsZi5fdGVzdF9pbmZvLAorICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5f
dGVzdF9hcmdzLCBzZWxmLl90YXJnZXQsIHNlbGYuX291dHB1dF9kaXIpCisKKyAgICBkZWYgZ2V0
X3Rlc3Rfc3RhdHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3N0YXRzCisKKwor
Y2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSwgdGVzdF9zaGVsbF9j
b21tYW5kLAorICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHNoZWxsX2Fy
Z3MsIG9wdGlvbnMpOgorICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUg
Zm9yIHRoaXMgdGVzdCBzaGVsbCB0aHJlYWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBm
aWxlbmFtZV9saXN0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgY29udGFp
bnMgbGlzdHMKKyAgICAgICAgICAgICAgb2YgdHVwbGVzIG9mIChmaWxlbmFtZSwgdXJpKSBwYWly
cy4KKyAgICAgICAgICByZXN1bHRfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhh
dCB3aWxsIGNvbnRhaW4gdHVwbGVzIG9mCisgICAgICAgICAgICAgICh0ZXN0LCBmYWlsdXJlIGxp
c3RzKSBmb3IgdGhlIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgICB0ZXN0X3NoZWxsX2NvbW1hbmQ6
IEEgbGlzdCBzcGVjaWZ5aW5nIHRoZSBjb21tYW5kK2FyZ3MgZm9yCisgICAgICAgICAgICAgIHRl
c3Rfc2hlbGwKKyAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5cGUgb2JqZWN0
cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgIGFnYWluc3QuCisgICAgICAg
ICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8gZWFjaCBUZXN0
VHlwZS4KKyAgICAgICAgICBzaGVsbF9hcmdzOiBBbnkgZXh0cmEgYXJndW1lbnRzIHRvIGJlIHBh
c3NlZCB0byB0ZXN0X3NoZWxsLmV4ZS4KKyAgICAgICAgICBvcHRpb25zOiBBIHByb3BlcnR5IGRp
Y3Rpb25hcnkgYXMgcHJvZHVjZWQgYnkgb3B0cGFyc2UuIFRoZQorICAgICAgICAgICAgICBjb21t
YW5kLWxpbmUgb3B0aW9ucyBzaG91bGQgbWF0Y2ggdGhvc2UgZXhwZWN0ZWQgYnkKKyAgICAgICAg
ICAgICAgcnVuX3dlYmtpdF90ZXN0czsgdGhleSBhcmUgdHlwaWNhbGx5IHBhc3NlZCB2aWEgdGhl
CisgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciBjbGFzcy4iIiIKKyAg
ICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9maWxl
bmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1ZQorICAgICAgICBzZWxmLl9yZXN1
bHRfcXVldWUgPSByZXN1bHRfcXVldWUKKyAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtd
CisgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCA9IHRlc3Rfc2hlbGxfY29tbWFuZAor
ICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcworICAgICAgICBzZWxmLl90ZXN0
X2FyZ3MgPSB0ZXN0X2FyZ3MKKyAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jID0gTm9uZQor
ICAgICAgICBzZWxmLl9zaGVsbF9hcmdzID0gc2hlbGxfYXJncworICAgICAgICBzZWxmLl9vcHRp
b25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNl
bGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQorICAgICAgICBzZWxmLl9kaXJlY3RvcnlfdGltaW5n
X3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fdGVzdF9zdGF0cyA9IFtdCisgICAgICAgIHNlbGYu
X251bV90ZXN0cyA9IDAKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IDAKKyAgICAgICAgc2Vs
Zi5fc3RvcF90aW1lID0gMAorCisgICAgICAgICMgQ3VycmVudCBkaXJlY3Rvcnkgb2YgdGVzdHMg
d2UncmUgcnVubmluZy4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBOb25lCisgICAgICAg
ICMgTnVtYmVyIG9mIHRlc3RzIGluIHNlbGYuX2N1cnJlbnRfZGlyLgorICAgICAgICBzZWxmLl9u
dW1fdGVzdHNfaW5fY3VycmVudF9kaXIgPSBOb25lCisgICAgICAgICMgVGltZSBhdCB3aGljaCB3
ZSBzdGFydGVkIHJ1bm5pbmcgdGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2Rpci4KKyAgICAgICAg
c2VsZi5fY3VycmVudF9kaXJfc3RhcnRfdGltZSA9IE5vbmUKKworICAgIGRlZiBnZXRfZGlyZWN0
b3J5X3RpbWluZ19zdGF0cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Rpb25hcnkg
bWFwcGluZyB0ZXN0IGRpcmVjdG9yeSB0byBhIHR1cGxlIG9mCisgICAgICAgIChudW1iZXIgb2Yg
dGVzdHMgaW4gdGhhdCBkaXJlY3RvcnksIHRpbWUgdG8gcnVuIHRoZSB0ZXN0cykiIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2RpcmVjdG9yeV90aW1pbmdfc3RhdHMKKworICAgIGRlZiBnZXRfaW5k
aXZpZHVhbF90ZXN0X3N0YXRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiAo
dGVzdF9maWxlbmFtZSwgdGltZV90b19ydW5fdGVzdCwKKyAgICAgICAgdG90YWxfdGltZV9mb3Jf
YWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykgdHVwbGVzLiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fdGVzdF9zdGF0cworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiU2V0IGEg
ZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCisgICAgICAgIHNlbGYuX2NhbmNl
bGVkID0gVHJ1ZQorCisgICAgZGVmIGdldF9leGNlcHRpb25faW5mbyhzZWxmKToKKyAgICAgICAg
IiIiSWYgcnVuKCkgdGVybWluYXRlZCBvbiBhbiB1bmNhdWdodCBleGNlcHRpb24sIHJldHVybiBp
dCBoZXJlCisgICAgICAgICgodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgdHVwbGUpLgorICAgICAg
ICBSZXR1cm5zIE5vbmUgaWYgcnVuKCkgdGVybWluYXRlZCBub3JtYWxseS4gTWVhbnQgdG8gYmUg
Y2FsbGVkIGFmdGVyCisgICAgICAgIGpvaW5pbmcgdGhpcyB0aHJlYWQuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9leGNlcHRpb25faW5mbworCisgICAgZGVmIGdldF90b3RhbF90aW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gbWF4KHNlbGYuX3N0b3BfdGltZSAtIHNlbGYuX3N0YXJ0X3RpbWUs
IDAuMCkKKworICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fbnVtX3Rlc3RzCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiJEZWxlZ2F0ZSBt
YWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5jYXVnaHQKKyAgICAg
ICAgZXhjZXB0aW9ucy4iIiIKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgp
CisgICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkKKyAgICAgICAg
ICAgIHNlbGYuX3J1bih0ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQorICAg
ICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5h
bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkpKQor
ICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIFNhdmUgdGhlIGV4Y2VwdGlvbiBmb3Igb3Vy
IGNhbGxlciB0byBzZWUuCisgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5l
eGNfaW5mbygpCisgICAgICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQorICAg
ICAgICAgICAgIyBSZS1yYWlzZSBpdCBhbmQgZGllLgorICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cignJXMgZHlpbmc6ICVzJyAlIChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8pKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAg
c2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKKworICAgIGRlZiBydW5faW5fbWFpbl90aHJl
YWQoc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiVGhpcyBo
b29rIGFsbG93cyB1cyB0byBydW4gdGhlIHRlc3RzIGZyb20gdGhlIG1haW4gdGhyZWFkIGlmCisg
ICAgICAgIC0tbnVtLXRlc3Qtc2hlbGxzPT0xLCBpbnN0ZWFkIG9mIGhhdmluZyB0byBhbHdheXMg
cnVuIHR3byBvciBtb3JlCisgICAgICAgIHRocmVhZHMuIFRoaXMgYWxsb3dzIHVzIHRvIGRlYnVn
IHRoZSB0ZXN0IGhhcm5lc3Mgd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICAgZG8gbXVsdGktdGhy
ZWFkZWQgZGVidWdnaW5nLiIiIgorICAgICAgICBzZWxmLl9ydW4odGVzdF9ydW5uZXIsIHJlc3Vs
dF9zdW1tYXJ5KQorCisgICAgZGVmIF9ydW4oc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1t
YXJ5KToKKyAgICAgICAgIiIiTWFpbiB3b3JrIGVudHJ5IHBvaW50IG9mIHRoZSB0aHJlYWQuIEJh
c2ljYWxseSB3ZSBwdWxsIHVybHMgZnJvbSB0aGUKKyAgICAgICAgZmlsZW5hbWUgcXVldWUgYW5k
IHJ1biB0aGUgdGVzdHMgdW50aWwgd2UgcnVuIG91dCBvZiB1cmxzLgorCisgICAgICAgIElmIHRl
c3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBkYXRlU3Vt
bWFyeSgpCisgICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgorICAgICAg
ICBiYXRjaF9zaXplID0gMAorICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5iYXRjaF9zaXplOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IGJhdGNoX3NpemUgPSBpbnQoc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplKQorICAgICAgICAgICAg
ZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiSWdub3JpbmcgaW52YWxpZCBi
YXRjaCBzaXplICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy5iYXRjaF9zaXplKQorCisgICAgICAgICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcg
dG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4KKyAgICAgICAgIyBUaGlzIGlzIGNy
ZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQu
CisgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRlc3RzX3J1bi50eHQiKQorICAgICAgICB0ZXN0c19ydW5fZmlsZSA9IG9wZW4odGVz
dHNfcnVuX2ZpbGVuYW1lLCAiYSIpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAg
IGlmIHNlbGYuX2NhbmNlbGVkOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVGVzdGlu
ZyBjYW5jZWxlZCcpCisgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAg
ICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZmlsZW5hbWVf
bGlzdCkgaXMgMDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2RpciBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGlyZWN0b3J5X3RpbWluZ19zdGF0c1tz
ZWxmLl9jdXJyZW50X2Rpcl0gPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbnVt
X3Rlc3RzX2luX2N1cnJlbnRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGlt
ZSgpIC0gc2VsZi5fY3VycmVudF9kaXJfc3RhcnRfdGltZSkKKworICAgICAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIsIHNlbGYuX2ZpbGVuYW1l
X2xpc3QgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1
ZXVlLmdldF9ub3dhaXQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF90ZXN0X3NoZWxsKCkKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4K
KworICAgICAgICAgICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2RpciA9IGxlbihz
ZWxmLl9maWxlbmFtZV9saXN0KQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyX3N0
YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgICAgICAgICB0ZXN0X2luZm8gPSBzZWxmLl9m
aWxlbmFtZV9saXN0LnBvcCgpCisKKyAgICAgICAgICAgICMgV2UgaGF2ZSBhIHVybCwgcnVuIHRl
c3RzLgorICAgICAgICAgICAgYmF0Y2hfY291bnQgKz0gMQorICAgICAgICAgICAgc2VsZi5fbnVt
X3Rlc3RzICs9IDEKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAg
ICAgICAgICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX3J1bl90ZXN0X3NpbmdseSh0ZXN0X2luZm8p
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzID0gc2VsZi5fcnVu
X3Rlc3QodGVzdF9pbmZvKQorCisgICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfaW5mby5maWxl
bmFtZQorICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUud3JpdGUoZmlsZW5hbWUgKyAiXG4iKQor
ICAgICAgICAgICAgaWYgZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgIyBDaGVjayBhbmQga2ls
bCB0ZXN0IHNoZWxsIGlmIHdlIG5lZWQgdG9vLgorICAgICAgICAgICAgICAgIGlmIGxlbihbMSBm
b3IgZiBpbiBmYWlsdXJlcyBpZiBmLnNob3VsZF9raWxsX3Rlc3Rfc2hlbGwoKV0pOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9raWxsX3Rlc3Rfc2hlbGwoKQorICAgICAgICAgICAgICAgICAg
ICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgor
ICAgICAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAgICAgICAgICAjIFBy
aW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAgICAgIGVycm9yX3N0ciA9ICdc
bicuam9pbihbJyAgJyArIGYubWVzc2FnZSgpIGZvciBmIGluIGZhaWx1cmVzXSkKKyAgICAgICAg
ICAgICAgICBsb2dnaW5nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1l
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3Jfc3RyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpKQor
ICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dCgoZmlsZW5hbWUsIGZhaWx1cmVzKSkK
KworICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50ID4gYmF0Y2hf
c2l6ZToKKyAgICAgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50
LgorICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfdGVzdF9zaGVsbCgpCisgICAgICAgICAgICAg
ICAgYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgorICAgICAg
ICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQorCisg
ICAgZGVmIF9ydW5fdGVzdF9zaW5nbHkoc2VsZiwgdGVzdF9pbmZvKToKKyAgICAgICAgIiIiUnVu
IGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3JjaW5nIGEgaGFyZCB0aW1lIGxpbWl0
LgorCisgICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVjdCB0aGUgdGVybWluYXRpb24gb2Yg
YSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKKyAgICAgICAgc3RhdGUgb3IgcHJvZ3Jlc3MsIHdl
IGNhbiBvbmx5IHJ1biBwZXItdGVzdCB0aW1lb3V0cyB3aGVuIHJ1bm5pbmcgdGVzdAorICAgICAg
ICBmaWxlcyBzaW5nbHkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0X2luZm86IE9i
amVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAg
ICAgICBSZXR1cm46CisgICAgICAgICAgQSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMgZGVz
Y3JpYmluZyB0aGUgZXJyb3IuCisgICAgICAgICIiIgorICAgICAgICB3b3JrZXIgPSBTaW5nbGVU
ZXN0VGhyZWFkKHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9zaGVsbF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl90ZXN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3Rlc3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgICAgIHdvcmtlci5zdGFydCgpCisKKyAgICAg
ICAgIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgb25lIHRlc3QgcGVyIHRlc3Rfc2hlbGwgcHJvY2Vzcywg
d2UgY2FuIGVuZm9yY2UKKyAgICAgICAgIyBhIGhhcmQgdGltZW91dC4gdGhlIHRlc3Rfc2hlbGwg
d2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0CisgICAgICAgICMgV2Ugd2FudCB0byBiZSBs
YXJnZXIgdGhhbiB0aGF0LgorICAgICAgICB3b3JrZXIuam9pbihpbnQodGVzdF9pbmZvLnRpbWVv
dXQpICogMy4wIC8gMTAwMC4wKQorICAgICAgICBpZiB3b3JrZXIuaXNBbGl2ZSgpOgorICAgICAg
ICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcs
IHRoZQorICAgICAgICAgICAgIyB0ZXN0X3NoZWxsLmV4ZSBpcyBjb21wbGV0ZWx5IGh1bmcgYW5k
IHRoZXJlJ3Mgbm90aGluZworICAgICAgICAgICAgIyBtb3JlIHdlIGNhbiBkbyB3aXRoIGl0LiAg
V2UgaGF2ZSB0byBraWxsIGFsbCB0aGUKKyAgICAgICAgICAgICMgdGVzdF9zaGVsbHMgdG8gZnJl
ZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgb25lIHRl
c3Rfc2hlbGwgdGhyZWFkLCB3ZSdsbCBlbmQgdXAga2lsbGluZyB0aGUgb3RoZXIKKyAgICAgICAg
ICAgICMgdGVzdF9zaGVsbHMgdG9vLCBpbnRyb2R1Y2luZyBzcHVyaW91cyBjcmFzaGVzLiBXZSBh
Y2NlcHQgdGhhdAorICAgICAgICAgICAgIyB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3Np
bmcgdGhlIHJlc3Qgb2YgdGhpcyB0aHJlYWQncworICAgICAgICAgICAgIyByZXN1bHRzLgorICAg
ICAgICAgICAgbG9nZ2luZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgdGVz
dF9zaGVsbHMnKQorICAgICAgICAgICAgcGF0aF91dGlscy5raWxsX2FsbF90ZXN0X3NoZWxscygp
CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RhdHMgPSB3b3JrZXIuZ2V0X3Rlc3Rfc3Rh
dHMoKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9zdGF0cy5hcHBlbmQoc3RhdHMpCisgICAgICAg
ICAgICBmYWlsdXJlcyA9IHN0YXRzLmZhaWx1cmVzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVF
cnJvciwgZToKKyAgICAgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgICAgIGxvZ2dpbmcu
ZXJyb3IoJ0Nhbm5vdCBnZXQgcmVzdWx0cyBvZiB0ZXN0OiAlcycgJQorICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpCisKKyAgICAgICAgcmV0dXJuIGZhaWx1cmVz
CisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5mbyk6CisgICAgICAgICIiIlJ1biBh
IHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgdGVzdF9zaGVsbCBwcm9jZXNzLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUg
dGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisKKyAgICAgICAgUmV0dXJuOgorICAgICAg
ICAgIEEgbGlzdCBvZiBUZXN0RmFpbHVyZSBvYmplY3RzIGRlc2NyaWJpbmcgdGhlIGVycm9yLgor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZW5zdXJlX3Rlc3Rfc2hlbGxfaXNfcnVubmluZygp
CisgICAgICAgICMgQXJncyB0byB0ZXN0X3NoZWxsIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qg
b2YKKyAgICAgICAgIyAidXJpIHRpbWVvdXQgcGl4ZWxfaGFzaCIKKyAgICAgICAgIyBUaGUgdGlt
ZW91dCBhbmQgcGl4ZWxfaGFzaCBhcmUgb3B0aW9uYWwuICBUaGUgdGltZW91dCBpcyB1c2VkIGlm
IHRoaXMKKyAgICAgICAgIyB0ZXN0IGhhcyBhIGN1c3RvbSB0aW1lb3V0LiBUaGUgcGl4ZWxfaGFz
aCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuCisgICAgICAgICMgaW1hZ2UgZHVtcCBpZiB0aGUg
Y2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsKKyAgICAgICAg
IyB2YWx1ZSBpZiB3ZSBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4KKyAgICAgICAgIyAo
T3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGlu
dG8KKyAgICAgICAgIyB0aGUgYmFzZWxpbmUuKQorICAgICAgICBpbWFnZV9oYXNoID0gdGVzdF9p
bmZvLmltYWdlX2hhc2gKKyAgICAgICAgaWYgaW1hZ2VfaGFzaCBhbmQgc2VsZi5fdGVzdF9hcmdz
Lm5ld19iYXNlbGluZToKKyAgICAgICAgICAgIGltYWdlX2hhc2ggPSAiIgorICAgICAgICBzZWxm
Ll90ZXN0X3NoZWxsX3Byb2Muc3RkaW4ud3JpdGUoKCIlcyAlcyAlc1xuIiAlCisgICAgICAgICAg
ICAodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hhc2gpKSkKKworICAg
ICAgICAjIElmIHRoZSB0ZXN0IHNoZWxsIGlzIGRlYWQsIHRoZSBhYm92ZSBtYXkgY2F1c2UgYW4g
SU9FcnJvciBhcyB3ZQorICAgICAgICAjIHRyeSB0byB3cml0ZSBvbnRvIHRoZSBicm9rZW4gcGlw
ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGVzdCBmb3IKKyAgICAgICAgIyB0aGlzIHRlc3Qgc2hl
bGwgcHJvY2VzcywgdGhhbiB0aGUgdGVzdCBzaGVsbCBkaWQgbm90CisgICAgICAgICMgc3VjY2Vz
c2Z1bGx5IHN0YXJ0LiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgdGVzdCwgdGhlbiB0aGUKKyAg
ICAgICAgIyBwcmV2aW91cyB0ZXN0cyBoYXZlIGNhdXNlZCBzb21lIGtpbmQgb2YgZGVsYXllZCBj
cmFzaC4gV2UgZG9uJ3QKKyAgICAgICAgIyB0cnkgdG8gcmVjb3ZlciBoZXJlLgorICAgICAgICBz
ZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkaW4uZmx1c2goKQorCisgICAgICAgIHN0YXRzID0gcHJv
Y2Vzc19vdXRwdXQoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLCB0ZXN0X2luZm8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3Rv
cnkpCisKKyAgICAgICAgc2VsZi5fdGVzdF9zdGF0cy5hcHBlbmQoc3RhdHMpCisgICAgICAgIHJl
dHVybiBzdGF0cy5mYWlsdXJlcworCisgICAgZGVmIF9lbnN1cmVfdGVzdF9zaGVsbF9pc19ydW5u
aW5nKHNlbGYpOgorICAgICAgICAiIiJTdGFydCB0aGUgc2hhcmVkIHRlc3Qgc2hlbGwsIGlmIGl0
J3Mgbm90IHJ1bm5pbmcuICBOb3QgZm9yIHVzZSB3aGVuCisgICAgICAgIHJ1bm5pbmcgdGVzdHMg
c2luZ2x5LCBzaW5jZSB0aG9zZSBlYWNoIHN0YXJ0IGEgc2VwYXJhdGUgdGVzdCBzaGVsbCBpbgor
ICAgICAgICB0aGVpciBvd24gdGhyZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKG5vdCBz
ZWxmLl90ZXN0X3NoZWxsX3Byb2Mgb3IKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJv
Yy5wb2xsKCkgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9j
ID0gc3RhcnRfdGVzdF9zaGVsbChzZWxmLl90ZXN0X3NoZWxsX2NvbW1hbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsX2Fy
Z3MpCisKKyAgICBkZWYgX2tpbGxfdGVzdF9zaGVsbChzZWxmKToKKyAgICAgICAgIiIiS2lsbCB0
aGUgdGVzdCBzaGVsbCBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKKyAgICAgICAgaWYgc2Vs
Zi5fdGVzdF9zaGVsbF9wcm9jOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0
ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRvdXQuY2xv
c2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGVycjoKKyAgICAg
ICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAg
ICAgIGlmIChzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJykgYW5kCisgICAg
ICAgICAgICAgICAgbm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5wb2xsKCkpOgorICAgICAgICAg
ICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1lcyBvbiBP
UyBYLgorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKKyAgICAg
ICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnBpZCldLCBzdGRl
cnI9bnVsbCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS93ZWJzb2NrZXRfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjdmYzQ3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93ZWJzb2NrZXRfc2VydmVyLnB5CkBAIC0wLDAg
KzEsMzE2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiQSBjbGFzcyB0byBoZWxwIHN0YXJ0L3N0b3AgdGhlIFB5V2ViU29ja2V0IHNlcnZlciB1c2Vk
IGJ5IGxheW91dCB0ZXN0cy4iIiIKKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNl
CitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZp
bGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCisKK2ltcG9ydCBwYXRoX3V0aWxzCitpbXBv
cnQgcGxhdGZvcm1fdXRpbHMKK2ltcG9ydCBodHRwX3NlcnZlcgorCitfV1NfTE9HX1BSRUZJWCA9
ICdweXdlYnNvY2tldC53cy5sb2ctJworX1dTU19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0Lndz
cy5sb2ctJworCitfREVGQVVMVF9XU19QT1JUID0gODg4MAorX0RFRkFVTFRfV1NTX1BPUlQgPSA5
MzIzCisKKworZGVmIHVybF9pc19hbGl2ZSh1cmwpOgorICAiIiJDaGVja3MgdG8gc2VlIGlmIHdl
IGdldCBhbiBodHRwIHJlc3BvbnNlIGZyb20gfHVybHwuCisgIFdlIHBvbGwgdGhlIHVybCA1IHRp
bWVzIHdpdGggYSAxIHNlY29uZCBkZWxheS4gIElmIHdlIGRvbid0CisgIGdldCBhIHJlcGx5IGlu
IHRoYXQgdGltZSwgd2UgZ2l2ZSB1cCBhbmQgYXNzdW1lIHRoZSBodHRwZAorICBkaWRuJ3Qgc3Rh
cnQgcHJvcGVybHkuCisKKyAgQXJnczoKKyAgICB1cmw6IFRoZSBVUkwgdG8gY2hlY2suCisgIFJl
dHVybjoKKyAgICBUcnVlIGlmIHRoZSB1cmwgaXMgYWxpdmUuCisgICIiIgorICB3YWl0X3RpbWUg
PSA1CisgIHdoaWxlIHdhaXRfdGltZSA+IDA6CisgICAgdHJ5OgorICAgICAgcmVzcG9uc2UgPSB1
cmxsaWIudXJsb3Blbih1cmwpCisgICAgICAjIFNlcnZlciBpcyB1cCBhbmQgcmVzcG9uZGluZy4K
KyAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICBwYXNzCisgICAg
d2FpdF90aW1lIC09IDEKKyAgICAjIFdhaXQgYSBzZWNvbmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICB0
aW1lLnNsZWVwKDEpCisKKyAgcmV0dXJuIEZhbHNlCisKKworZGVmIHJlbW92ZV9sb2dfZmlsZXMo
Zm9sZGVyLCBzdGFydHNfd2l0aCk6CisgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKKyAg
ICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193
aXRoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUp
CisgICAgICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQorCisKK2NsYXNzIFB5V2ViU29ja2V0
Tm90U3RhcnRlZChFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBQeVdlYlNvY2tldE5v
dEZvdW5kKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFB5V2ViU29ja2V0KGh0dHBf
c2VydmVyLkxpZ2h0dHBkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBw
b3J0PV9ERUZBVUxUX1dTX1BPUlQsCisgICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgdXNlX3Rscz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgcHJpdmF0ZV9rZXk9
aHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX3BlbV9maWxlLAorICAgICAgICAgICAgICAgICBjZXJ0aWZp
Y2F0ZT1odHRwX3NlcnZlci5MaWdodHRwZC5fcGVtX2ZpbGUsCisgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyX2N5Z3dpbj1Ob25lLAorICAgICAgICAgICAgICAgICBwaWRmaWxlPU5vbmUpOgorICAg
ICAgICAiIiJBcmdzOgorICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRv
IHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBo
dHRwX3NlcnZlci5MaWdodHRwZC5fX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PXBvcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJvb3Q9cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVnaXN0ZXJfY3lnd2luPXJlZ2lzdGVyX2N5Z3dpbikKKyAgICAgICAg
c2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5v
bmUKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QK
KyAgICAgICAgc2VsZi5fdXNlX3RscyA9IHVzZV90bHMKKyAgICAgICAgc2VsZi5fcHJpdmF0ZV9r
ZXkgPSBwcml2YXRlX2tleQorICAgICAgICBzZWxmLl9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRl
CisgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNl
bGYuX3BvcnQpCisgICAgICAgIGlmIHNlbGYuX3VzZV90bHM6CisgICAgICAgICAgICBzZWxmLl9z
ZXJ2ZXJfbmFtZSA9ICdQeVdlYlNvY2tldChTZWN1cmUpJworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQnCisgICAgICAgIHNlbGYuX3Bp
ZGZpbGUgPSBwaWRmaWxlCisgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorCisgICAgICAgICMg
V2Via2l0IHRlc3RzCisgICAgICAgIGlmIHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICBzZWxmLl9s
YXlvdXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5fcm9vdCkKKyAgICAgICAgICAgIHNl
bGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgICAgICAgICAg
b3MucGF0aC5qb2luKHNlbGYuX3Jvb3QsICd3ZWJzb2NrZXQnLCAndGVzdHMnKSkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0
X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKKyAgICAgICAgICAgICAgICAgICAg
J3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycsICd3ZWJzb2NrZXQnLAorICAg
ICAgICAgICAgICAgICAgICAndGVzdHMnKQorICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90
ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAgICAgICAgICAgICAgICd0
aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnKQorICAgICAgICAgICAgZXhjZXB0
IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICAgICAgICAgIHNlbGYuX3dlYl9zb2Nr
ZXRfdGVzdHMgPSBOb25lCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBz
ZWxmLl93ZWJfc29ja2V0X3Rlc3RzOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdObyBuZWVk
IHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByYWlzZSBQ
eVdlYlNvY2tldE5vdFN0YXJ0ZWQoJyVzIGlzIGFscmVhZHkgcnVubmluZy4nICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSkKKworICAg
ICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMnKQorICAgICAgICBp
ZiBzZWxmLl91c2VfdGxzOgorICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BSRUZJ
WAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU19MT0dfUFJFRklY
CisgICAgICAgIGxvZ19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGltZV9zdHIKKworICAgICAg
ICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBv
bmVzLgorICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVm
aXgpCisKKyAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIs
IGxvZ19maWxlX25hbWUgKyAiLWVyci50eHQiKQorCisgICAgICAgIG91dHB1dF9sb2cgPSBvcy5w
YXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICItb3V0LnR4dCIpCisg
ICAgICAgIHNlbGYuX3dzb3V0ID0gb3BlbihvdXRwdXRfbG9nLCAidyIpCisKKyAgICAgICAgcHl0
aG9uX2ludGVycCA9IHN5cy5leGVjdXRhYmxlCisgICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAorICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dl
YktpdCcsICdXZWJLaXRUb29scycsICdweXdlYnNvY2tldCcpCisgICAgICAgIHB5d2Vic29ja2V0
X3NjcmlwdCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAgICAgICAndGhpcmRf
cGFydHknLCAnV2ViS2l0JywgJ1dlYktpdFRvb2xzJywgJ3B5d2Vic29ja2V0JywKKyAgICAgICAg
ICAgICdtb2RfcHl3ZWJzb2NrZXQnLCAnc3RhbmRhbG9uZS5weScpCisgICAgICAgIHN0YXJ0X2Nt
ZCA9IFsKKyAgICAgICAgICAgIHB5dGhvbl9pbnRlcnAsIHB5d2Vic29ja2V0X3NjcmlwdCwKKyAg
ICAgICAgICAgICctcCcsIHN0cihzZWxmLl9wb3J0KSwKKyAgICAgICAgICAgICctZCcsIHNlbGYu
X2xheW91dF90ZXN0cywKKyAgICAgICAgICAgICctcycsIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMs
CisgICAgICAgICAgICAnLWwnLCBlcnJvcl9sb2csCisgICAgICAgIF0KKworICAgICAgICBoYW5k
bGVyX21hcF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXJfbWFwLnR4dCcpCisg
ICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGhhbmRsZXJfbWFwX2ZpbGUpOgorICAgICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygnVXNpbmcgaGFuZGxlcl9tYXBfZmlsZTogJXMnICUgaGFuZGxlcl9tYXBf
ZmlsZSkKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoJy1tJykKKyAgICAgICAgICAgIHN0
YXJ0X2NtZC5hcHBlbmQoaGFuZGxlcl9tYXBfZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGxvZ2dpbmcud2FybmluZygnTm8gaGFuZGxlcl9tYXBfZmlsZSBmb3VuZCcpCisKKyAgICAg
ICAgaWYgc2VsZi5fdXNlX3RsczoKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5leHRlbmQoWyctdCcs
ICctaycsIHNlbGYuX3ByaXZhdGVfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jy1jJywgc2VsZi5fY2VydGlmaWNhdGVdKQorCisgICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGly
ZWN0b3J5IGZpcnN0IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKKyAgICAgICAgZW52
ID0gb3MuZW52aXJvbgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2lu
MzInKToKKyAgICAgICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgKKyAgICAgICAgICAg
ICAgICBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAn
YmluJyksCisgICAgICAgICAgICAgICAgZW52WydQQVRIJ10pCisKKyAgICAgICAgaWYgc3lzLnBs
YXRmb3JtID09ICd3aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKKyAgICAgICAgICAg
IHNldHVwX21vdW50ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAn
Y3lnd2luJywKKyAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykKKyAgICAgICAgICAg
IHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQorCisgICAgICAgIGVudlsnUFlU
SE9OUEFUSCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQorCisgICAg
ICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciBvbiAlZC4nICUgKAorICAgICAg
ICAgICAgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQorICAgICAgICBsb2dnaW5nLmRl
YnVnKCdjbWRsaW5lOiAlcycgJSAnICcuam9pbihzdGFydF9jbWQpKQorICAgICAgICBzZWxmLl9w
cm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIHN0ZG91dD1zZWxmLl93c291dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nl
c3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9
ZW52KQorCisgICAgICAgICMgV2FpdCBhIGJpdCBiZWZvcmUgY2hlY2tpbmcgdGhlIGxpdmVuZXNz
IG9mIHRoZSBzZXJ2ZXIuCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorCisgICAgICAgIGlmIHNl
bGYuX3VzZV90bHM6CisgICAgICAgICAgICB1cmwgPSAnaHR0cHMnCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICB1cmwgPSAnaHR0cCcKKyAgICAgICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAu
MTolZC8nICUgc2VsZi5fcG9ydAorICAgICAgICBpZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6Cisg
ICAgICAgICAgICBmcCA9IG9wZW4ob3V0cHV0X2xvZykKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5l
cnJvcihsaW5lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcC5jbG9z
ZSgpCisgICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoCisgICAgICAgICAg
ICAgICAgJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4nICUKKyAgICAgICAg
ICAgICAgICAgICAgKHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkKKworICAgICAgICAj
IE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQorICAgICAgICBpZiBzZWxmLl9wcm9jZXNz
LnJldHVybmNvZGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3Rh
cnRlZCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2Vs
Zi5fc2VydmVyX25hbWUpCisgICAgICAgIGlmIHNlbGYuX3BpZGZpbGU6CisgICAgICAgICAgICBm
ID0gb3BlbihzZWxmLl9waWRmaWxlLCAndycpCisgICAgICAgICAgICBmLndyaXRlKCIlZCIgJSBz
ZWxmLl9wcm9jZXNzLnBpZCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHN0b3Ao
c2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlz
X3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX3Byb2Nl
c3M6CisgICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAgICAgICBlbGlmIHNl
bGYuX3BpZGZpbGU6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRmaWxlKQorICAgICAg
ICAgICAgcGlkID0gaW50KGYucmVhZCgpLnN0cmlwKCkpCisgICAgICAgICAgICBmLmNsb3NlKCkK
KworICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RG
b3VuZCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUg
c2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU2h1dHRpbmcgZG93
biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkKKyAgICAgICAgcGxh
dGZvcm1fdXRpbHMua2lsbF9wcm9jZXNzKHBpZCkKKworICAgICAgICBpZiBzZWxmLl9wcm9jZXNz
OgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuX3By
b2Nlc3MgPSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAgICAgICBzZWxm
Ll93c291dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKworCitpZiAn
X19tYWluX18nID09IF9fbmFtZV9fOgorICAgICMgUHJvdmlkZSBzb21lIGNvbW1hbmQgbGluZSBw
YXJhbXMgZm9yIHN0YXJ0aW5nIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIKKyAgICAjIG1hbnVhbGx5
LgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbignLS1zZXJ2ZXInLCB0eXBlPSdjaG9pY2UnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnc3RhcnQnLCAnc3RvcCddLCBkZWZhdWx0PSdz
dGFydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NlcnZlciBhY3Rpb24g
KHN0YXJ0fHN0b3ApJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9y
dCcsIGRlc3Q9J3BvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5v
bmUsIGhlbHA9J1BvcnQgdG8gbGlzdGVuIG9uJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRp
b24oJy1yJywgJy0tcm9vdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Fi
c29sdXRlIHBhdGggdG8gRG9jdW1lbnRSb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cyknKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ndXNlIFRMUyAod3NzOi8vKScpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctaycsICctLXByaXZhdGVfa2V5JywgZGVzdD0ncHJp
dmF0ZV9rZXknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxw
PSdUTFMgcHJpdmF0ZSBrZXkgZmlsZS4nKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbign
LWMnLCAnLS1jZXJ0aWZpY2F0ZScsIGRlc3Q9J2NlcnRpZmljYXRlJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmljYXRlIGZpbGUuJykK
KyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJfY3lnd2luJywgYWN0aW9u
PSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icmVnaXN0
ZXJfY3lnd2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUmVnaXN0ZXIg
Q3lnd2luIHBhdGhzIChvbiBXaW4gdHJ5IGJvdHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oJy0tcGlkZmlsZScsIGhlbHA9J3BhdGggdG8gcGlkIGZpbGUuJykKKyAgICBvcHRpb25z
LCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIG5vdCBvcHRpb25z
LnBvcnQ6CisgICAgICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgIG9wdGlvbnMu
cG9ydCA9IF9ERUZBVUxUX1dTU19QT1JUCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcHRp
b25zLnBvcnQgPSBfREVGQVVMVF9XU19QT1JUCisKKyAgICBrd2RzID0geydwb3J0Jzogb3B0aW9u
cy5wb3J0LCAndXNlX3Rscyc6IG9wdGlvbnMudXNlX3Rsc30KKyAgICBpZiBvcHRpb25zLnJvb3Q6
CisgICAgICAgIGt3ZHNbJ3Jvb3QnXSA9IG9wdGlvbnMucm9vdAorICAgIGlmIG9wdGlvbnMucHJp
dmF0ZV9rZXk6CisgICAgICAgIGt3ZHNbJ3ByaXZhdGVfa2V5J10gPSBvcHRpb25zLnByaXZhdGVf
a2V5CisgICAgaWYgb3B0aW9ucy5jZXJ0aWZpY2F0ZToKKyAgICAgICAga3dkc1snY2VydGlmaWNh
dGUnXSA9IG9wdGlvbnMuY2VydGlmaWNhdGUKKyAgICBrd2RzWydyZWdpc3Rlcl9jeWd3aW4nXSA9
IG9wdGlvbnMucmVnaXN0ZXJfY3lnd2luCisgICAgaWYgb3B0aW9ucy5waWRmaWxlOgorICAgICAg
ICBrd2RzWydwaWRmaWxlJ10gPSBvcHRpb25zLnBpZGZpbGUKKworICAgIHB5d2Vic29ja2V0ID0g
UHlXZWJTb2NrZXQodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAqKmt3ZHMpCisKKyAgICBpZiAnc3Rh
cnQnID09IG9wdGlvbnMuc2VydmVyOgorICAgICAgICBweXdlYnNvY2tldC5zdGFydCgpCisgICAg
ZWxzZToKKyAgICAgICAgcHl3ZWJzb2NrZXQuc3RvcChmb3JjZT1UcnVlKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJv
bWl1bV93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI4MTFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHkKQEAgLTAsMCArMSwxMDI4IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiUmViYXNlbGluaW5nIHRvb2wgdGhhdCBhdXRvbWF0
aWNhbGx5IHByb2R1Y2VzIGJhc2VsaW5lcyBmb3IgYWxsIHBsYXRmb3Jtcy4KKworVGhlIHNjcmlw
dCBkb2VzIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2ggcGxhdGZvcm0gc3BlY2lmaWVkOgorICAxLiBD
b21waWxlIGEgbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nLgorICAyLiBEb3du
bG9hZCB0ZXN0IHJlc3VsdCBhcmNoaXZlIGZyb20gYnVpbGRib3QgZm9yIHRoZSBwbGF0Zm9ybS4K
KyAgMy4gRXh0cmFjdCBiYXNlbGluZXMgZnJvbSB0aGUgYXJjaGl2ZSBmaWxlIGZvciBhbGwgaWRl
bnRpZmllZCBmaWxlcy4KKyAgNC4gQWRkIG5ldyBiYXNlbGluZXMgdG8gU1ZOIHJlcG9zaXRvcnku
CisgIDUuIEZvciBlYWNoIHRlc3QgdGhhdCBoYXMgYmVlbiByZWJhc2VsaW5lZCwgcmVtb3ZlIHRo
aXMgcGxhdGZvcm0gb3B0aW9uIGZyb20KKyAgICAgdGhlIHRlc3QgaW4gdGVzdF9leHBlY3RhdGlv
bi50eHQuIElmIG5vIG90aGVyIHBsYXRmb3JtcyByZW1haW4gYWZ0ZXIKKyAgICAgcmVtb3ZhbCwg
ZGVsZXRlIHRoZSByZWJhc2VsaW5lZCB0ZXN0IGZyb20gdGhlIGZpbGUuCisKK0F0IHRoZSBlbmQs
IHRoZSBzY3JpcHQgZ2VuZXJhdGVzIGEgaHRtbCB0aGF0IGNvbXBhcmVzIG9sZCBhbmQgbmV3IGJh
c2VsaW5lcy4KKyIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQg
b3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBz
eXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB3
ZWJicm93c2VyCitpbXBvcnQgemlwZmlsZQorCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBw
YXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwor
ZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCitmcm9tIHRlc3RfdHlwZXMgaW1wb3J0
IHRleHRfZGlmZgorCisjIFJlcG9zaXRvcnkgdHlwZSBjb25zdGFudHMuCitSRVBPX1NWTiwgUkVQ
T19VTktOT1dOID0gcmFuZ2UoMikKKworQkFTRUxJTkVfU1VGRklYRVMgPSBbJy50eHQnLCAnLnBu
ZycsICcuY2hlY2tzdW0nXQorUkVCQVNFTElORV9QTEFURk9STV9PUkRFUiA9IFsnbWFjJywgJ3dp
bicsICd3aW4teHAnLCAnd2luLXZpc3RhJywgJ2xpbnV4J10KK0FSQ0hJVkVfRElSX05BTUVfRElD
VCA9IHsnd2luJzogJ3dlYmtpdC1yZWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd3aW4t
dmlzdGEnOiAnd2Via2l0LWRiZy12aXN0YScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3dp
bi14cCc6ICd3ZWJraXQtcmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWFjJzogJ3dl
YmtpdC1yZWwtbWFjNScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbnV4JzogJ3dlYmtp
dC1yZWwtbGludXgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd3aW4tY2FuYXJ5JzogJ3dl
YmtpdC1yZWwtd2Via2l0LW9yZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbi12aXN0
YS1jYW5hcnknOiAnd2Via2l0LWRiZy12aXN0YScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
J3dpbi14cC1jYW5hcnknOiAnd2Via2l0LXJlbC13ZWJraXQtb3JnJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAnbWFjLWNhbmFyeSc6ICd3ZWJraXQtcmVsLW1hYy13ZWJraXQtb3JnJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAnbGludXgtY2FuYXJ5JzogJ3dlYmtpdC1yZWwtbGludXgt
d2Via2l0LW9yZyd9CisKKworZGVmIHJ1bl9zaGVsbF93aXRoX3JldHVybl9jb2RlKGNvbW1hbmQs
IHByaW50X291dHB1dD1GYWxzZSk6CisgICAgIiIiRXhlY3V0ZXMgYSBjb21tYW5kIGFuZCByZXR1
cm5zIHRoZSBvdXRwdXQgYW5kIHByb2Nlc3MgcmV0dXJuIGNvZGUuCisKKyAgICBBcmdzOgorICAg
ICAgY29tbWFuZDogcHJvZ3JhbSBhbmQgYXJndW1lbnRzLgorICAgICAgcHJpbnRfb3V0cHV0OiBp
ZiB0cnVlLCBwcmludCB0aGUgY29tbWFuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dC4KKwor
ICAgIFJldHVybnM6CisgICAgICBjb21tYW5kIG91dHB1dCwgcmV0dXJuIGNvZGUKKyAgICAiIiIK
KworICAgICMgVXNlIGEgc2hlbGwgZm9yIHN1YmNvbW1hbmRzIG9uIFdpbmRvd3MgdG8gZ2V0IGEg
UEFUSCBzZWFyY2guCisgICAgdXNlX3NoZWxsID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dp
bicpCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQs
IHNoZWxsPXVzZV9zaGVsbCkKKyAgICBpZiBwcmludF9vdXRwdXQ6CisgICAgICAgIG91dHB1dF9h
cnJheSA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsaW5lID0gcC5zdGRv
dXQucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIGlmIHByaW50X291dHB1dDoKKyAgICAgICAgICAgICAgICBwcmlu
dCBsaW5lLnN0cmlwKCdcbicpCisgICAgICAgICAgICBvdXRwdXRfYXJyYXkuYXBwZW5kKGxpbmUp
CisgICAgICAgIG91dHB1dCA9ICcnLmpvaW4ob3V0cHV0X2FycmF5KQorICAgIGVsc2U6CisgICAg
ICAgIG91dHB1dCA9IHAuc3Rkb3V0LnJlYWQoKQorICAgIHAud2FpdCgpCisgICAgcC5zdGRvdXQu
Y2xvc2UoKQorCisgICAgcmV0dXJuIG91dHB1dCwgcC5yZXR1cm5jb2RlCisKKworZGVmIHJ1bl9z
aGVsbChjb21tYW5kLCBwcmludF9vdXRwdXQ9RmFsc2UpOgorICAgICIiIkV4ZWN1dGVzIGEgY29t
bWFuZCBhbmQgcmV0dXJucyB0aGUgb3V0cHV0LgorCisgICAgQXJnczoKKyAgICAgIGNvbW1hbmQ6
IHByb2dyYW0gYW5kIGFyZ3VtZW50cy4KKyAgICAgIHByaW50X291dHB1dDogaWYgdHJ1ZSwgcHJp
bnQgdGhlIGNvbW1hbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQuCisKKyAgICBSZXR1cm5z
OgorICAgICAgY29tbWFuZCBvdXRwdXQKKyAgICAiIiIKKworICAgIG91dHB1dCwgcmV0dXJuX2Nv
ZGUgPSBydW5fc2hlbGxfd2l0aF9yZXR1cm5fY29kZShjb21tYW5kLCBwcmludF9vdXRwdXQpCisg
ICAgcmV0dXJuIG91dHB1dAorCisKK2RlZiBsb2dfZGFzaGVkX3N0cmluZyh0ZXh0LCBwbGF0Zm9y
bSwgbG9nZ2luZ19sZXZlbD1sb2dnaW5nLklORk8pOgorICAgICIiIkxvZyB0ZXh0IG1lc3NhZ2Ug
d2l0aCBkYXNoZXMgb24gYm90aCBzaWRlcy4iIiIKKworICAgIG1zZyA9IHRleHQKKyAgICBpZiBw
bGF0Zm9ybToKKyAgICAgICAgbXNnICs9ICc6ICcgKyBwbGF0Zm9ybQorICAgIGlmIGxlbihtc2cp
IDwgNzg6CisgICAgICAgIGRhc2hlcyA9ICctJyAqICgoNzggLSBsZW4obXNnKSkgLyAyKQorICAg
ICAgICBtc2cgPSAnJXMgJXMgJXMnICUgKGRhc2hlcywgbXNnLCBkYXNoZXMpCisKKyAgICBpZiBs
b2dnaW5nX2xldmVsID09IGxvZ2dpbmcuRVJST1I6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IobXNn
KQorICAgIGVsaWYgbG9nZ2luZ19sZXZlbCA9PSBsb2dnaW5nLldBUk5JTkc6CisgICAgICAgIGxv
Z2dpbmcud2Fybihtc2cpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2luZy5pbmZvKG1zZykKKwor
CitkZWYgc2V0dXBfaHRtbF9kaXJlY3RvcnkoaHRtbF9kaXJlY3RvcnkpOgorICAgICIiIlNldHVw
IHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgaHRtbCByZXN1bHRzLgorCisgICAgICAgQWxsIGh0bWwg
cmVsYXRlZCBmaWxlcyBhcmUgc3RvcmVkIGluIHRoZSAicmViYXNlbGluZV9odG1sIiBzdWJkaXJl
Y3RvcnkuCisKKyAgICBBcmdzOgorICAgICAgaHRtbF9kaXJlY3Rvcnk6IHBhcmVudCBkaXJlY3Rv
cnkgdGhhdCBzdG9yZXMgdGhlIHJlYmFzZWxpbmluZyByZXN1bHRzLgorICAgICAgICAgICAgICAg
ICAgICAgIElmIE5vbmUsIGEgdGVtcCBkaXJlY3RvcnkgaXMgY3JlYXRlZC4KKworICAgIFJldHVy
bnM6CisgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgc3RvcmVzIHRoZSBodG1sIHJlbGF0ZWQgcmVi
YXNlbGluaW5nIHJlc3VsdHMuCisgICAgIiIiCisKKyAgICBpZiBub3QgaHRtbF9kaXJlY3Rvcnk6
CisgICAgICAgIGh0bWxfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgZWxpZiBu
b3Qgb3MucGF0aC5leGlzdHMoaHRtbF9kaXJlY3RvcnkpOgorICAgICAgICBvcy5ta2RpcihodG1s
X2RpcmVjdG9yeSkKKworICAgIGh0bWxfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKGh0bWxfZGly
ZWN0b3J5LCAncmViYXNlbGluZV9odG1sJykKKyAgICBsb2dnaW5nLmluZm8oJ0h0bWwgZGlyZWN0
b3J5OiAiJXMiJywgaHRtbF9kaXJlY3RvcnkpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhodG1s
X2RpcmVjdG9yeSk6CisgICAgICAgIHNodXRpbC5ybXRyZWUoaHRtbF9kaXJlY3RvcnksIFRydWUp
CisgICAgICAgIGxvZ2dpbmcuaW5mbygnRGVsZXRlZCBmaWxlIGF0IGh0bWwgZGlyZWN0b3J5OiAi
JXMiJywgaHRtbF9kaXJlY3RvcnkpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaHRtbF9k
aXJlY3RvcnkpOgorICAgICAgICBvcy5ta2RpcihodG1sX2RpcmVjdG9yeSkKKyAgICByZXR1cm4g
aHRtbF9kaXJlY3RvcnkKKworCitkZWYgZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKGh0bWxfZGly
ZWN0b3J5LCBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdF90eXBlKToKKyAgICAiIiJHZXQgZnVsbCBwYXRoIG9mIHRoZSBiYXNl
bGluZSByZXN1bHQgZmlsZS4KKworICAgIEFyZ3M6CisgICAgICBodG1sX2RpcmVjdG9yeTogZGly
ZWN0b3J5IHRoYXQgc3RvcmVzIHRoZSBodG1sIHJlbGF0ZWQgZmlsZXMuCisgICAgICBiYXNlbGlu
ZV9maWxlbmFtZTogbmFtZSBvZiB0aGUgYmFzZWxpbmUgZmlsZS4KKyAgICAgIHBsYXRmb3JtOiB3
aW4sIGxpbnV4IG9yIG1hYworICAgICAgcmVzdWx0X3R5cGU6IHR5cGUgb2YgdGhlIGJhc2VsaW5l
IHJlc3VsdDogJy50eHQnLCAnLnBuZycuCisKKyAgICBSZXR1cm5zOgorICAgICAgRnVsbCBwYXRo
IG9mIHRoZSBiYXNlbGluZSBmaWxlIGZvciByZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24u
CisgICAgIiIiCisKKyAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2VsaW5lX2Zp
bGVuYW1lKQorICAgIHJlc3VsdF9maWxlbmFtZSA9ICclcy0lcy0lcyVzJyAlIChiYXNlLCBwbGF0
Zm9ybSwgcmVzdWx0X3R5cGUsIGV4dCkKKyAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihodG1s
X2RpcmVjdG9yeSwgcmVzdWx0X2ZpbGVuYW1lKQorICAgIGxvZ2dpbmcuZGVidWcoJyAgUmVzdWx0
IGZpbGUgZnVsbCBwYXRoOiAiJXMiLicsIGZ1bGxwYXRoKQorICAgIHJldHVybiBmdWxscGF0aAor
CisKK2NsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgdG8gcHJvZHVjZSBu
ZXcgYmFzZWxpbmVzIGZvciBhIGdpdmVuIHBsYXRmb3JtLiIiIgorCisgICAgUkVWSVNJT05fUkVH
RVggPSByJzxhIGhyZWY9XCIoXGQrKS9cIj4nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGxh
dGZvcm0sIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9maWxlX2RpciA9IHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICd0b29scycsCisgICAgICAgICAgICAnbGF5b3V0X3Rlc3Rz
JykKKyAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLl9vcHRp
b25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMgPSBbXQorICAg
ICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgdGVz
dHMgYW5kIGV4cGVjdGF0aW9ucyBoZWxwZXIgd2hpY2ggaXMgdXNlZCB0bzoKKyAgICAgICAgIyAg
IC0uIGNvbXBpbGUgbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nLgorICAgICAg
ICAjICAgLS4gdXBkYXRlIHRoZSB0ZXN0cyBpbiB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlIGFmdGVy
IHJlYmFzZWxpbmUKKyAgICAgICAgIyAgICAgIGlzIGRvbmUuCisgICAgICAgIHNlbGYuX3Rlc3Rf
ZXhwZWN0YXRpb25zID0gXAorICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVj
dGF0aW9ucyhOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9maWxlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGYWxzZSkKKworICAgICAgICBzZWxmLl9yZXBvX3R5cGUgPSBzZWxmLl9nZXRf
cmVwb190eXBlKCkKKworICAgIGRlZiBydW4oc2VsZiwgYmFja3VwKToKKyAgICAgICAgIiIiUnVu
IHJlYmFzZWxpbmUgcHJvY2Vzcy4iIiIKKworICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnQ29t
cGlsaW5nIHJlYmFzZWxpbmluZyB0ZXN0cycsIHNlbGYuX3BsYXRmb3JtKQorICAgICAgICBpZiBu
b3Qgc2VsZi5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoKToKKyAgICAgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ0Rvd25sb2FkaW5nIGFyY2hpdmUn
LCBzZWxmLl9wbGF0Zm9ybSkKKyAgICAgICAgYXJjaGl2ZV9maWxlID0gc2VsZi5fZG93bmxvYWRf
YnVpbGRib3RfYXJjaGl2ZSgpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnJykKKyAgICAgICAgaWYg
bm90IGFyY2hpdmVfZmlsZToKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ05vIGFyY2hpdmUg
Zm91bmQuJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19kYXNoZWRf
c3RyaW5nKCdFeHRyYWN0aW5nIGFuZCBhZGRpbmcgbmV3IGJhc2VsaW5lcycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtKQorICAgICAgICBpZiBub3Qgc2VsZi5fZXh0
cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMoYXJjaGl2ZV9maWxlKToKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdVcGRhdGluZyByZWJhc2Vs
aW5lZCB0ZXN0cyBpbiBmaWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxh
dGZvcm0pCisgICAgICAgIHNlbGYuX3VwZGF0ZV9yZWJhc2VsaW5lZF90ZXN0c19pbl9maWxlKGJh
Y2t1cCkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcnKQorCisgICAgICAgIGlmIGxlbihzZWxmLl9y
ZWJhc2VsaW5pbmdfdGVzdHMpICE9IGxlbihzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyk6CisgICAg
ICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ05PVCBBTEwgVEVTVFMgVEhBVCBORUVEIFJFQkFTRUxJ
TklORyBIQVZFIEJFRU4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRUJBU0VMSU5F
RC4nKQorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCcgIFRvdGFsIHRlc3RzIG5lZWRpbmcg
cmViYXNlbGluaW5nOiAlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYu
X3JlYmFzZWxpbmluZ190ZXN0cykpCisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJyAgVG90
YWwgdGVzdHMgcmViYXNlbGluZWQ6ICVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZW4oc2VsZi5fcmViYXNlbGluZWRfdGVzdHMpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdBbGwgdGVzdHMgbmVlZGluZyByZWJhc2VsaW5pbmcg
d2VyZSBzdWNjZXNzZnVsbHkgJworICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmVk
LicpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBnZXRfcmViYXNlbGluaW5nX3Rl
c3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzCisKKyAg
ICBkZWYgX2dldF9yZXBvX3R5cGUoc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgcmVwb3NpdG9y
eSB0eXBlIHRoYXQgY2xpZW50IGlzIHVzaW5nLiIiIgorICAgICAgICBvdXRwdXQsIHJldHVybl9j
b2RlID0gcnVuX3NoZWxsX3dpdGhfcmV0dXJuX2NvZGUoWydzdm4nLCAnaW5mbyddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2Up
CisgICAgICAgIGlmIHJldHVybl9jb2RlID09IDA6CisgICAgICAgICAgICByZXR1cm4gUkVQT19T
Vk4KKworICAgICAgICByZXR1cm4gUkVQT19VTktOT1dOCisKKyAgICBkZWYgX2NvbXBpbGVfcmVi
YXNlbGluaW5nX3Rlc3RzKHNlbGYpOgorICAgICAgICAiIiJDb21waWxlIGxpc3Qgb2YgdGVzdHMg
dGhhdCBuZWVkIHJlYmFzZWxpbmluZyBmb3IgdGhlIHBsYXRmb3JtLgorCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgTGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nIG9yCisg
ICAgICAgICAgTm9uZSBpZiB0aGVyZSBpcyBubyBzdWNoIHRlc3QuCisgICAgICAgICIiIgorCisg
ICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9IFwKKyAgICAgICAgICAgIHNlbGYuX3Rl
c3RfZXhwZWN0YXRpb25zLmdldF9yZWJhc2VsaW5pbmdfZmFpbHVyZXMoKQorICAgICAgICBpZiBu
b3Qgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdO
byB0ZXN0cyBmb3VuZCB0aGF0IG5lZWQgcmViYXNlbGluaW5nLicpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygnVG90YWwgbnVtYmVyIG9mIHRlc3RzIG5l
ZWRpbmcgcmViYXNlbGluaW5nICcKKyAgICAgICAgICAgICAgICAgICAgICdmb3IgIiVzIjogIiVk
IicsIHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuX3JlYmFz
ZWxpbmluZ190ZXN0cykpCisKKyAgICAgICAgdGVzdF9ubyA9IDEKKyAgICAgICAgZm9yIHRlc3Qg
aW4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcg
ICVkOiAlcycsIHRlc3Rfbm8sIHRlc3QpCisgICAgICAgICAgICB0ZXN0X25vICs9IDEKKworICAg
ICAgICByZXR1cm4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzCisKKyAgICBkZWYgX2dldF9sYXRl
c3RfcmV2aXNpb24oc2VsZiwgdXJsKToKKyAgICAgICAgIiIiR2V0IHRoZSBsYXRlc3QgbGF5b3V0
IHRlc3QgcmV2aXNpb24gbnVtYmVyIGZyb20gYnVpbGRib3QuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICB1cmw6IFVybCB0byByZXRyaWV2ZSBsYXlvdXQgdGVzdCByZXZpc2lvbiBudW1iZXJz
LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgbGF0ZXN0IHJldmlzaW9uIG9yCisgICAg
ICAgICAgTm9uZSBvbiBmYWlsdXJlLgorICAgICAgICAiIiIKKworICAgICAgICBsb2dnaW5nLmRl
YnVnKCdVcmwgdG8gcmV0cmlldmUgcmV2aXNpb246ICIlcyInLCB1cmwpCisKKyAgICAgICAgZiA9
IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAg
IGYuY2xvc2UoKQorCisgICAgICAgIHJldmlzaW9ucyA9IHJlLmZpbmRhbGwoc2VsZi5SRVZJU0lP
Tl9SRUdFWCwgY29udGVudCkKKyAgICAgICAgaWYgbm90IHJldmlzaW9uczoKKyAgICAgICAgICAg
IGxvZ2dpbmcuZXJyb3IoJ0ZhaWxlZCB0byBmaW5kIHJldmlzaW9uLCBjb250ZW50OiAiJXMiJywg
Y29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV2aXNpb25zLnNv
cnQoa2V5PWludCkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdMYXRlc3QgcmV2aXNpb246ICIlcyIn
LCByZXZpc2lvbnNbbGVuKHJldmlzaW9ucykgLSAxXSkKKyAgICAgICAgcmV0dXJuIHJldmlzaW9u
c1tsZW4ocmV2aXNpb25zKSAtIDFdCisKKyAgICBkZWYgX2dldF9hcmNoaXZlX2Rpcl9uYW1lKHNl
bGYsIHBsYXRmb3JtLCB3ZWJraXRfY2FuYXJ5KToKKyAgICAgICAgIiIiR2V0IG5hbWUgb2YgdGhl
IGxheW91dCB0ZXN0IGFyY2hpdmUgZGlyZWN0b3J5LgorCisgICAgICAgIFJldHVybnM6CisgICAg
ICAgICAgRGlyZWN0b3J5IG5hbWUgb3IKKyAgICAgICAgICBOb25lIG9uIGZhaWx1cmUKKyAgICAg
ICAgIiIiCisKKyAgICAgICAgaWYgd2Via2l0X2NhbmFyeToKKyAgICAgICAgICAgIHBsYXRmb3Jt
ICs9ICctY2FuYXJ5JworCisgICAgICAgIGlmIHBsYXRmb3JtIGluIEFSQ0hJVkVfRElSX05BTUVf
RElDVDoKKyAgICAgICAgICAgIHJldHVybiBBUkNISVZFX0RJUl9OQU1FX0RJQ1RbcGxhdGZvcm1d
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdDYW5ub3QgZmluZCBw
bGF0Zm9ybSBrZXkgJXMgaW4gYXJjaGl2ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdk
aXJlY3RvcnkgbmFtZSBkaWN0aW9uYXJ5JywgcGxhdGZvcm0pCisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgZGVmIF9nZXRfYXJjaGl2ZV91cmwoc2VsZik6CisgICAgICAgICIiIkdlbmVy
YXRlIHRoZSB1cmwgdG8gZG93bmxvYWQgbGF0ZXN0IGxheW91dCB0ZXN0IGFyY2hpdmUuCisKKyAg
ICAgICAgUmV0dXJuczoKKyAgICAgICAgICBVcmwgdG8gZG93bmxvYWQgYXJjaGl2ZSBvcgorICAg
ICAgICAgIE5vbmUgb24gZmFpbHVyZQorICAgICAgICAiIiIKKworICAgICAgICBkaXJfbmFtZSA9
IHNlbGYuX2dldF9hcmNoaXZlX2Rpcl9uYW1lKHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMud2Via2l0X2Nh
bmFyeSkKKyAgICAgICAgaWYgbm90IGRpcl9uYW1lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICBsb2dnaW5nLmRlYnVnKCdCdWlsZGJvdCBwbGF0Zm9ybSBkaXIgbmFtZTogIiVz
IicsIGRpcl9uYW1lKQorCisgICAgICAgIHVybF9iYXNlID0gJyVzLyVzLycgJSAoc2VsZi5fb3B0
aW9ucy5hcmNoaXZlX3VybCwgZGlyX25hbWUpCisgICAgICAgIGxhdGVzdF9yZXZpc2lvbiA9IHNl
bGYuX2dldF9sYXRlc3RfcmV2aXNpb24odXJsX2Jhc2UpCisgICAgICAgIGlmIGxhdGVzdF9yZXZp
c2lvbiBpcyBOb25lIG9yIGxhdGVzdF9yZXZpc2lvbiA8PSAwOgorICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgICAgICBhcmNoaXZlX3VybCA9ICgnJXMlcy9sYXlvdXQtdGVzdC1yZXN1bHRz
LnppcCcgJSAodXJsX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXRlc3RfcmV2aXNpb24pKQorICAgICAgICBsb2dnaW5nLmlu
Zm8oJ0FyY2hpdmUgdXJsOiAiJXMiJywgYXJjaGl2ZV91cmwpCisgICAgICAgIHJldHVybiBhcmNo
aXZlX3VybAorCisgICAgZGVmIF9kb3dubG9hZF9idWlsZGJvdF9hcmNoaXZlKHNlbGYpOgorICAg
ICAgICAiIiJEb3dubG9hZCBsYXlvdXQgdGVzdCBhcmNoaXZlIGZpbGUgZnJvbSBidWlsZGJvdC4K
KworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIFRydWUgaWYgZG93bmxvYWQgc3VjY2VlZGVk
IG9yCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKworICAgICAgICB1
cmwgPSBzZWxmLl9nZXRfYXJjaGl2ZV91cmwoKQorICAgICAgICBpZiB1cmwgaXMgTm9uZToKKyAg
ICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZm4gPSB1cmxsaWIudXJscmV0cmlldmUo
dXJsKVswXQorICAgICAgICBsb2dnaW5nLmluZm8oJ0FyY2hpdmUgZG93bmxvYWRlZCBhbmQgc2F2
ZWQgdG8gZmlsZTogIiVzIicsIGZuKQorICAgICAgICByZXR1cm4gZm4KKworICAgIGRlZiBfZXh0
cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMoc2VsZiwgYXJjaGl2ZV9maWxlKToKKyAgICAgICAg
IiIiRXh0cmFjdCBuZXcgYmFzZWxpbmVzIGZyb20gYXJjaGl2ZSBhbmQgYWRkIHRoZW0gdG8gU1ZO
IHJlcG9zaXRvcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBhcmNoaXZlX2ZpbGU6IGZ1
bGwgcGF0aCB0byB0aGUgYXJjaGl2ZSBmaWxlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAg
ICAgTGlzdCBvZiB0ZXN0cyB0aGF0IGhhdmUgYmVlbiByZWJhc2VsaW5lZCBvcgorICAgICAgICAg
IE5vbmUgb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgemlwX2ZpbGUgPSB6aXBm
aWxlLlppcEZpbGUoYXJjaGl2ZV9maWxlLCAncicpCisgICAgICAgIHppcF9uYW1lbGlzdCA9IHpp
cF9maWxlLm5hbWVsaXN0KCkKKworICAgICAgICBsb2dnaW5nLmRlYnVnKCd6aXAgZmlsZSBuYW1l
bGlzdDonKQorICAgICAgICBmb3IgbmFtZSBpbiB6aXBfbmFtZWxpc3Q6CisgICAgICAgICAgICBs
b2dnaW5nLmRlYnVnKCcgICcgKyBuYW1lKQorCisgICAgICAgIHBsYXRmb3JtID0gcGF0aF91dGls
cy5wbGF0Zm9ybV9uYW1lKHNlbGYuX3BsYXRmb3JtKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCdQ
bGF0Zm9ybSBkaXI6ICIlcyInLCBwbGF0Zm9ybSkKKworICAgICAgICB0ZXN0X25vID0gMQorICAg
ICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyA9IFtdCisgICAgICAgIGZvciB0ZXN0IGluIHNl
bGYuX3JlYmFzZWxpbmluZ190ZXN0czoKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVGVzdCAl
ZDogJXMnLCB0ZXN0X25vLCB0ZXN0KQorCisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAg
ICAgICAgICBzdm5fZXJyb3IgPSBGYWxzZQorICAgICAgICAgICAgdGVzdF9iYXNlbmFtZSA9IG9z
LnBhdGguc3BsaXRleHQodGVzdClbMF0KKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gQkFTRUxJ
TkVfU1VGRklYRVM6CisgICAgICAgICAgICAgICAgYXJjaGl2ZV90ZXN0X25hbWUgPSAoJ2xheW91
dC10ZXN0LXJlc3VsdHMvJXMtYWN0dWFsJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAodGVzdF9iYXNlbmFtZSwgc3VmZml4KSkKKyAgICAgICAgICAgICAgICBsb2dn
aW5nLmRlYnVnKCcgIEFyY2hpdmUgdGVzdCBmaWxlIG5hbWU6ICIlcyInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJjaGl2ZV90ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgaWYg
bm90IGFyY2hpdmVfdGVzdF9uYW1lIGluIHppcF9uYW1lbGlzdDoKKyAgICAgICAgICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCcgICVzIGZpbGUgbm90IGluIGFyY2hpdmUuJywgc3VmZml4KQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVl
CisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgICVzIGZpbGUgZm91bmQgaW4gYXJjaGl2
ZS4nLCBzdWZmaXgpCisKKyAgICAgICAgICAgICAgICAjIEV4dHJhY3QgbmV3IGJhc2VsaW5lIGZy
b20gYXJjaGl2ZSBhbmQgc2F2ZSBpdCB0byBhIHRlbXAgZmlsZS4KKyAgICAgICAgICAgICAgICBk
YXRhID0gemlwX2ZpbGUucmVhZChhcmNoaXZlX3Rlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICB0
ZW1wX2ZkLCB0ZW1wX25hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeCkKKyAgICAgICAgICAg
ICAgICBmID0gb3MuZmRvcGVuKHRlbXBfZmQsICd3YicpCisgICAgICAgICAgICAgICAgZi53cml0
ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfZmlsZW5hbWUgPSAnJXMtZXhwZWN0ZWQlcycgJSAodGVzdF9iYXNlbmFtZSwgc3VmZml4
KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Z1bGxwYXRoID0gb3MucGF0aC5qb2luKAorICAg
ICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLmNocm9taXVtX2Jhc2VsaW5lX3BhdGgocGxhdGZv
cm0pLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSkKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZF9mdWxscGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoZXhwZWN0ZWRfZnVsbHBh
dGgpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICBFeHBlY3RlZCBmaWxlIGZ1bGwg
cGF0aDogIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9mdWxs
cGF0aCkKKworICAgICAgICAgICAgICAgICMgVE9ETyh2aWN0b3J3KTogZm9yIG5vdywgdGhlIHJl
YmFzZWxpbmluZyB0b29sIGNoZWNrcyB3aGV0aGVyCisgICAgICAgICAgICAgICAgIyBvciBub3Qg
VEhJUyBiYXNlbGluZSBpcyBkdXBsaWNhdGUgYW5kIHNob3VsZCBiZSBza2lwcGVkLgorICAgICAg
ICAgICAgICAgICMgV2UgY291bGQgaW1wcm92ZSB0aGUgdG9vbCB0byBjaGVjayBhbGwgYmFzZWxp
bmVzIGluIHVwcGVyCisgICAgICAgICAgICAgICAgIyBhbmQgbG93ZXIKKyAgICAgICAgICAgICAg
ICAjIGxldmVscyBhbmQgcmVtb3ZlIGFsbCBkdXBsaWNhdGVkIGJhc2VsaW5lcy4KKyAgICAgICAg
ICAgICAgICBpZiBzZWxmLl9pc19kdXBfYmFzZWxpbmUodGVtcF9uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZnVsbHBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3VmZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fcGxhdGZvcm0pOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUo
dGVtcF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWxldGVfYmFzZWxpbmUoZXhw
ZWN0ZWRfZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAg
ICAgICAgICAjIENyZWF0ZSB0aGUgbmV3IGJhc2VsaW5lIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0
IGFscmVhZHkKKyAgICAgICAgICAgICAgICAjIGV4aXN0LgorICAgICAgICAgICAgICAgIHBhdGhf
dXRpbHMubWF5YmVfbWFrZV9kaXJlY3RvcnkoCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgu
ZGlybmFtZShleHBlY3RlZF9mdWxscGF0aCkpCisKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92
ZSh0ZW1wX25hbWUsIGV4cGVjdGVkX2Z1bGxwYXRoKQorCisgICAgICAgICAgICAgICAgaWYgbm90
IHNlbGYuX3N2bl9hZGQoZXhwZWN0ZWRfZnVsbHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBz
dm5fZXJyb3IgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBzdWZmaXggIT0gJy5jaGVja3N1
bSc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9odG1sX2Jhc2VsaW5lX2ZpbGVz
KGV4cGVjdGVkX2Z1bGxwYXRoKQorCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAg
ICAgICAgICAgbG9nZ2luZy53YXJuKCcgIE5vIG5ldyBiYXNlbGluZXMgZm91bmQgaW4gYXJjaGl2
ZS4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzdm5fZXJyb3I6Cisg
ICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybignICBGYWlsZWQgdG8gYWRkIGJhc2VsaW5l
cyB0byBTVk4uJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBs
b2dnaW5nLmluZm8oJyAgUmViYXNlbGluZSBzdWNjZWVkZWQuJykKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMuYXBwZW5kKHRlc3QpCisKKyAgICAgICAgICAgIHRl
c3Rfbm8gKz0gMQorCisgICAgICAgIHppcF9maWxlLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3Zl
KGFyY2hpdmVfZmlsZSkKKworICAgICAgICByZXR1cm4gc2VsZi5fcmViYXNlbGluZWRfdGVzdHMK
KworICAgIGRlZiBfaXNfZHVwX2Jhc2VsaW5lKHNlbGYsIG5ld19iYXNlbGluZSwgYmFzZWxpbmVf
cGF0aCwgdGVzdCwgc3VmZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtKToK
KyAgICAgICAgIiIiQ2hlY2sgd2hldGhlciBhIGJhc2VsaW5lIGlzIGR1cGxpY2F0ZSBhbmQgY2Fu
IGZhbGxiYWNrIHRvIHNhbWUKKyAgICAgICAgICAgYmFzZWxpbmUgZm9yIGFub3RoZXIgcGxhdGZv
cm0uIEZvciBleGFtcGxlLCBpZiBhIHRlc3QgaGFzIHNhbWUKKyAgICAgICAgICAgYmFzZWxpbmUg
b24gbGludXggYW5kIHdpbmRvd3MsIHRoZW4gd2Ugb25seSBzdG9yZSB3aW5kb3dzCisgICAgICAg
ICAgIGJhc2VsaW5lIGFuZCBsaW51eCBiYXNlbGluZSB3aWxsIGZhbGxiYWNrIHRvIHRoZSB3aW5k
b3dzIHZlcnNpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBleHBlY3RlZF9maWxlbmFt
ZTogYmFzZWxpbmUgZXhwZWN0YXRpb24gZmlsZSBuYW1lLgorICAgICAgICAgIHRlc3Q6IHRlc3Qg
bmFtZS4KKyAgICAgICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1
bHRzLCBpbmNsdWRpbmcgZG90OworICAgICAgICAgICAgICAgICAgZS5nLiAnLnR4dCcgb3IgJy5w
bmcnLgorICAgICAgICAgIHBsYXRmb3JtOiBiYXNlbGluZSBwbGF0Zm9ybSAnbWFjJywgJ3dpbicg
b3IgJ2xpbnV4Jy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIFRydWUgaWYgdGhlIGJh
c2VsaW5lIGlzIHVubmVjZXNzYXJ5LgorICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAg
ICAgIiIiCisgICAgICAgIHRlc3RfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5s
YXlvdXRfdGVzdHNfZGlyKCksIHRlc3QpCisgICAgICAgIGFsbF9iYXNlbGluZXMgPSBwYXRoX3V0
aWxzLmV4cGVjdGVkX2Jhc2VsaW5lcyh0ZXN0X2ZpbGVwYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LCBwbGF0Zm9ybSwgVHJ1
ZSkKKyAgICAgICAgZm9yIChmYWxsYmFja19kaXIsIGZhbGxiYWNrX2ZpbGUpIGluIGFsbF9iYXNl
bGluZXM6CisgICAgICAgICAgICBpZiBmYWxsYmFja19kaXIgYW5kIGZhbGxiYWNrX2ZpbGU6Cisg
ICAgICAgICAgICAgICAgZmFsbGJhY2tfZnVsbHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKAorICAg
ICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZmFsbGJhY2tfZGlyLCBmYWxsYmFja19maWxl
KSkKKyAgICAgICAgICAgICAgICBpZiBmYWxsYmFja19mdWxscGF0aC5sb3dlcigpICE9IGJhc2Vs
aW5lX3BhdGgubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2RpZmZf
YmFzZWxpbmVzKG5ld19iYXNlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhbGxiYWNrX2Z1bGxwYXRoKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2dpbmcuaW5mbygnICBGb3VuZCBzYW1lIGJhc2VsaW5lIGF0ICVzJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja19mdWxscGF0aCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgIGRlZiBfZGlmZl9iYXNlbGluZXMoc2VsZiwgZmlsZTEsIGZpbGUyKToKKyAgICAg
ICAgIiIiQ2hlY2sgd2hldGhlciB0d28gYmFzZWxpbmVzIGFyZSBkaWZmZXJlbnQuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBmaWxlMSwgZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGJhc2Vs
aW5lcyB0byBjb21wYXJlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgVHJ1ZSBpZiB0
d28gZmlsZXMgYXJlIGRpZmZlcmVudCBvciBoYXZlIGRpZmZlcmVudCBleHRlbnNpb25zLgorICAg
ICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZXh0MSA9IG9z
LnBhdGguc3BsaXRleHQoZmlsZTEpWzFdLnVwcGVyKCkKKyAgICAgICAgZXh0MiA9IG9zLnBhdGgu
c3BsaXRleHQoZmlsZTIpWzFdLnVwcGVyKCkKKyAgICAgICAgaWYgZXh0MSAhPSBleHQyOgorICAg
ICAgICAgICAgbG9nZ2luZy53YXJuKCdGaWxlcyB0byBjb21wYXJlIGhhdmUgZGlmZmVyZW50IGV4
dC4gJworICAgICAgICAgICAgICAgICAgICAgICAgICdGaWxlMTogJXM7IEZpbGUyOiAlcycsIGZp
bGUxLCBmaWxlMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgZXh0MSA9
PSAnLlBORyc6CisgICAgICAgICAgICByZXR1cm4gaW1hZ2VfZGlmZi5JbWFnZURpZmYoc2VsZi5f
cGxhdGZvcm0sICcnKS5kaWZmX2ZpbGVzKGZpbGUxLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlMikKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0ZXh0X2RpZmYuVGVzdFRleHREaWZmKHNl
bGYuX3BsYXRmb3JtLCAnJykuZGlmZl9maWxlcyhmaWxlMSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl
MikKKworICAgIGRlZiBfZGVsZXRlX2Jhc2VsaW5lKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAg
IiIiUmVtb3ZlIHRoZSBmaWxlIGZyb20gcmVwb3NpdG9yeSBhbmQgZGVsZXRlIGl0IGZyb20gZGlz
ay4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiBmdWxsIHBhdGggb2YgdGhl
IGZpbGUgdG8gZGVsZXRlLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBub3QgZmlsZW5hbWUg
b3Igbm90IG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIGlmIHNlbGYuX3JlcG9fdHlwZSA9PSBSRVBPX1NWTjoKKyAgICAgICAgICAgIHBhcmVu
dF9kaXIsIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKKyAgICAgICAgICAgIG9y
aWdpbmFsX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcy5jaGRpcihwYXJlbnRfZGly
KQorICAgICAgICAgICAgcnVuX3NoZWxsKFsnc3ZuJywgJ2RlbGV0ZScsICctLWZvcmNlJywgYmFz
ZW5hbWVdLCBGYWxzZSkKKyAgICAgICAgICAgIG9zLmNoZGlyKG9yaWdpbmFsX2RpcikKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKworICAgIGRlZiBfdXBk
YXRlX3JlYmFzZWxpbmVkX3Rlc3RzX2luX2ZpbGUoc2VsZiwgYmFja3VwKToKKyAgICAgICAgIiIi
VXBkYXRlIHRoZSByZWJhc2VsaW5lZCB0ZXN0cyBpbiB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgYmFja3VwOiBpZiBUcnVlLCBiYWNrdXAgdGhlIG9y
aWdpbmFsIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAg
ICAgICBubworICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0
czoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zLnJlbW92ZV9wbGF0Zm9ybV9m
cm9tX2ZpbGUoCisgICAgICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMsIHNlbGYu
X3BsYXRmb3JtLCBiYWNrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLmlu
Zm8oJ05vIHRlc3Qgd2FzIHJlYmFzZWxpbmVkIHNvIG5vdGhpbmcgdG8gcmVtb3ZlLicpCisKKyAg
ICBkZWYgX3N2bl9hZGQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJBZGQgdGhlIGZpbGUg
dG8gU1ZOIHJlcG9zaXRvcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTog
ZnVsbCBwYXRoIG9mIHRoZSBmaWxlIHRvIGFkZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAg
ICAgIFRydWUgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gU1ZOIG9yIGlzIHN1Y2Vzc2Z1
bGx5IGFkZGVkCisgICAgICAgICAgICAgICB0byBTVk4uCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3
aXNlLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBub3QgZmlsZW5hbWU6CisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgICAgICBwYXJlbnRfZGlyLCBiYXNlbmFtZSA9IG9zLnBhdGgu
c3BsaXQoZmlsZW5hbWUpCisgICAgICAgIGlmIHNlbGYuX3JlcG9fdHlwZSAhPSBSRVBPX1NWTiBv
ciBwYXJlbnRfZGlyID09IGZpbGVuYW1lOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJObyBz
dm4gY2hlY2tvdXQgZm91bmQsIHNraXAgc3ZuIGFkZC4iKQorICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgICAgICBvcmlnaW5hbF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRp
cihwYXJlbnRfZGlyKQorICAgICAgICBzdGF0dXNfb3V0cHV0ID0gcnVuX3NoZWxsKFsnc3ZuJywg
J3N0YXR1cycsIGJhc2VuYW1lXSwgRmFsc2UpCisgICAgICAgIG9zLmNoZGlyKG9yaWdpbmFsX2Rp
cikKKyAgICAgICAgb3V0cHV0ID0gc3RhdHVzX291dHB1dC51cHBlcigpCisgICAgICAgIGlmIG91
dHB1dC5zdGFydHN3aXRoKCdBJykgb3Igb3V0cHV0LnN0YXJ0c3dpdGgoJ00nKToKKyAgICAgICAg
ICAgIGxvZ2dpbmcuaW5mbygnICBGaWxlIGFscmVhZHkgYWRkZWQgdG8gU1ZOOiAiJXMiJywgZmls
ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGlmIG91dHB1dC5maW5k
KCdJUyBOT1QgQSBXT1JLSU5HIENPUFknKSA+PSAwOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZv
KCcgIEZpbGUgaXMgbm90IGEgd29ya2luZyBjb3B5LCBhZGQgaXRzIHBhcmVudDogIiVzIicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X2RpcikKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLl9zdm5fYWRkKHBhcmVudF9kaXIpCisKKyAgICAgICAgb3MuY2hkaXIocGFyZW50X2RpcikK
KyAgICAgICAgYWRkX291dHB1dCA9IHJ1bl9zaGVsbChbJ3N2bicsICdhZGQnLCBiYXNlbmFtZV0s
IFRydWUpCisgICAgICAgIG9zLmNoZGlyKG9yaWdpbmFsX2RpcikKKyAgICAgICAgb3V0cHV0ID0g
YWRkX291dHB1dC51cHBlcigpLnJzdHJpcCgpCisgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRo
KCdBJykgYW5kIG91dHB1dC5maW5kKGJhc2VuYW1lLnVwcGVyKCkpID49IDA6CisgICAgICAgICAg
ICBsb2dnaW5nLmluZm8oJyAgQWRkZWQgbmV3IGZpbGU6ICIlcyInLCBmaWxlbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuX3N2bl9wcm9wX3NldChmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICAgICAgaWYgKG5vdCBzdGF0dXNfb3V0cHV0KSBhbmQgKGFkZF9vdXRwdXQudXBw
ZXIoKS5maW5kKAorICAgICAgICAgICAgJ0FMUkVBRFkgVU5ERVIgVkVSU0lPTiBDT05UUk9MJykg
Pj0gMCk6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgRmlsZSBhbHJlYWR5IHVuZGVyIFNW
TiBhbmQgaGFzIG5vIGNoYW5nZTogIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmls
ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGxvZ2dpbmcud2Fybign
ICBGYWlsZWQgdG8gYWRkIGZpbGUgdG8gU1ZOOiAiJXMiJywgZmlsZW5hbWUpCisgICAgICAgIGxv
Z2dpbmcud2FybignICBTdm4gc3RhdHVzIG91dHB1dDogIiVzIicsIHN0YXR1c19vdXRwdXQpCisg
ICAgICAgIGxvZ2dpbmcud2FybignICBTdm4gYWRkIG91dHB1dDogIiVzIicsIGFkZF9vdXRwdXQp
CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9zdm5fcHJvcF9zZXQoc2VsZiwgZmls
ZW5hbWUpOgorICAgICAgICAiIiJTZXQgdGhlIGJhc2VsaW5lIHByb3BlcnR5CisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogZnVsbCBwYXRoIG9mIHRoZSBmaWxlIHRvIGFkZC4K
KworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgYWxyZWFkeSBl
eGlzdHMgaW4gU1ZOIG9yIGlzIHN1Y2Vzc2Z1bGx5IGFkZGVkCisgICAgICAgICAgICAgICB0byBT
Vk4uCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgZXh0
ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMV0udXBwZXIoKQorICAgICAgICBpZiBleHQg
IT0gJy5UWFQnIGFuZCBleHQgIT0gJy5QTkcnIGFuZCBleHQgIT0gJy5DSEVDS1NVTSc6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBwYXJlbnRfZGlyLCBiYXNlbmFtZSA9IG9zLnBhdGgu
c3BsaXQoZmlsZW5hbWUpCisgICAgICAgIG9yaWdpbmFsX2RpciA9IG9zLmdldGN3ZCgpCisgICAg
ICAgIG9zLmNoZGlyKHBhcmVudF9kaXIpCisgICAgICAgIGlmIGV4dCA9PSAnLlBORyc6CisgICAg
ICAgICAgICBjbWQgPSBbJ3N2bicsICdwc2V0JywgJ3N2bjptaW1lLXR5cGUnLCAnaW1hZ2UvcG5n
JywgYmFzZW5hbWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSBbJ3N2bicsICdw
c2V0JywgJ3N2bjplb2wtc3R5bGUnLCAnTEYnLCBiYXNlbmFtZV0KKworICAgICAgICBsb2dnaW5n
LmRlYnVnKCcgIFNldCBzdm4gcHJvcDogJXMnLCAnICcuam9pbihjbWQpKQorICAgICAgICBydW5f
c2hlbGwoY21kLCBGYWxzZSkKKyAgICAgICAgb3MuY2hkaXIob3JpZ2luYWxfZGlyKQorCisgICAg
ZGVmIF9jcmVhdGVfaHRtbF9iYXNlbGluZV9maWxlcyhzZWxmLCBiYXNlbGluZV9mdWxscGF0aCk6
CisgICAgICAgICIiIkNyZWF0ZSBiYXNlbGluZSBmaWxlcyAob2xkLCBuZXcgYW5kIGRpZmYpIGlu
IGh0bWwgZGlyZWN0b3J5LgorCisgICAgICAgICAgIFRoZSBmaWxlcyBhcmUgdXNlZCB0byBjb21w
YXJlIHRoZSByZWJhc2VsaW5pbmcgcmVzdWx0cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
IGJhc2VsaW5lX2Z1bGxwYXRoOiBmdWxsIHBhdGggb2YgdGhlIGV4cGVjdGVkIGJhc2VsaW5lIGZp
bGUuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBiYXNlbGluZV9mdWxscGF0aCBvciBu
b3Qgb3MucGF0aC5leGlzdHMoYmFzZWxpbmVfZnVsbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgIyBDb3B5IHRoZSBuZXcgYmFzZWxpbmUgdG8gaHRtbCBkaXJlY3RvcnkgZm9y
IHJlc3VsdCBjb21wYXJpc29uLgorICAgICAgICBiYXNlbGluZV9maWxlbmFtZSA9IG9zLnBhdGgu
YmFzZW5hbWUoYmFzZWxpbmVfZnVsbHBhdGgpCisgICAgICAgIG5ld19maWxlID0gZ2V0X3Jlc3Vs
dF9maWxlX2Z1bGxwYXRoKHNlbGYuX29wdGlvbnMuaHRtbF9kaXJlY3RvcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBzZWxm
Ll9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J25ldycpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShiYXNlbGluZV9mdWxscGF0aCwgbmV3X2Zp
bGUpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnICBIdG1sOiBjb3BpZWQgbmV3IGJhc2VsaW5lIGZp
bGUgZnJvbSAiJXMiIHRvICIlcyIuJywKKyAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2Z1
bGxwYXRoLCBuZXdfZmlsZSkKKworICAgICAgICAjIEdldCB0aGUgb2xkIGJhc2VsaW5lIGZyb20g
U1ZOIGFuZCBzYXZlIHRvIHRoZSBodG1sIGRpcmVjdG9yeS4KKyAgICAgICAgb3V0cHV0ID0gcnVu
X3NoZWxsKFsnc3ZuJywgJ2NhdCcsICctcicsICdCQVNFJywgYmFzZWxpbmVfZnVsbHBhdGhdKQor
ICAgICAgICBpZiAobm90IG91dHB1dCkgb3IgKG91dHB1dC51cHBlcigpLnJzdHJpcCgpLmVuZHN3
aXRoKAorICAgICAgICAgICAgJ05PIFNVQ0ggRklMRSBPUiBESVJFQ1RPUlknKSk6CisgICAgICAg
ICAgICBsb2dnaW5nLmluZm8oJyAgTm8gYmFzZSBmaWxlOiAiJXMiJywgYmFzZWxpbmVfZnVsbHBh
dGgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYmFzZV9maWxlID0gZ2V0X3Jlc3VsdF9m
aWxlX2Z1bGxwYXRoKHNlbGYuX29wdGlvbnMuaHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwgc2VsZi5f
cGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
b2xkJykKKyAgICAgICAgZiA9IG9wZW4oYmFzZV9maWxlLCAnd2InKQorICAgICAgICBmLndyaXRl
KG91dHB1dCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnICBIdG1s
OiBjcmVhdGVkIG9sZCBiYXNlbGluZSBmaWxlOiAiJXMiLicsCisgICAgICAgICAgICAgICAgICAg
ICBiYXNlX2ZpbGUpCisKKyAgICAgICAgIyBHZXQgdGhlIGRpZmYgYmV0d2VlbiBvbGQgYW5kIG5l
dyBiYXNlbGluZXMgYW5kIHNhdmUgdG8gdGhlIGh0bWwgZGlyLgorICAgICAgICBpZiBiYXNlbGlu
ZV9maWxlbmFtZS51cHBlcigpLmVuZHN3aXRoKCcuVFhUJyk6CisgICAgICAgICAgICAjIElmIHRo
ZSB1c2VyIHNwZWNpZmllZCBhIGN1c3RvbSBkaWZmIGNvbW1hbmQgaW4gdGhlaXIgc3ZuIGNvbmZp
ZworICAgICAgICAgICAgIyBmaWxlLCB0aGVuIGl0J2xsIGJlIHVzZWQgd2hlbiB3ZSBkbyBzdm4g
ZGlmZiwgd2hpY2ggd2UgZG9uJ3Qgd2FudAorICAgICAgICAgICAgIyB0byBoYXBwZW4gc2luY2Ug
d2Ugd2FudCB0aGUgdW5pZmllZCBkaWZmLiAgVXNpbmcgLS1kaWZmLWNtZD1kaWZmCisgICAgICAg
ICAgICAjIGRvZXNuJ3QgYWx3YXlzIHdvcmssIHNpbmNlIHRoZXkgY2FuIGhhdmUgYW5vdGhlciBk
aWZmIGV4ZWN1dGFibGUKKyAgICAgICAgICAgICMgaW4gdGhlaXIgcGF0aCB0aGF0IGdpdmVzIGRp
ZmZlcmVudCBsaW5lIGVuZGluZ3MuICBTbyB3ZSB1c2UgYQorICAgICAgICAgICAgIyBib2d1cyB0
ZW1wIGRpcmVjdG9yeSBhcyB0aGUgY29uZmlnIGRpcmVjdG9yeSwgd2hpY2ggZ2V0cworICAgICAg
ICAgICAgIyBhcm91bmQgdGhlc2UgcHJvYmxlbXMuCisgICAgICAgICAgICBpZiBzeXMucGxhdGZv
cm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICAgICAgICAgcGFyZW50X2RpciA9IHRlbXBm
aWxlLmdldHRlbXBkaXIoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJl
bnRfZGlyID0gc3lzLnBhdGhbMF0gICMgdGVtcGRpciBpcyBub3Qgc2VjdXJlLgorICAgICAgICAg
ICAgYm9ndXNfZGlyID0gb3MucGF0aC5qb2luKHBhcmVudF9kaXIsICJ0ZW1wX3N2bl9jb25maWci
KQorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICBIdG1sOiB0ZW1wIGNvbmZpZyBkaXI6ICIl
cyIuJywgYm9ndXNfZGlyKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJvZ3Vz
X2Rpcik6CisgICAgICAgICAgICAgICAgb3MubWtkaXIoYm9ndXNfZGlyKQorICAgICAgICAgICAg
ICAgIGRlbGV0ZV9ib2d1c19kaXIgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIGRlbGV0ZV9ib2d1c19kaXIgPSBGYWxzZQorCisgICAgICAgICAgICBvdXRwdXQgPSBy
dW5fc2hlbGwoWyJzdm4iLCAiZGlmZiIsICItLWNvbmZpZy1kaXIiLCBib2d1c19kaXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZnVsbHBhdGhdKQorICAgICAgICAg
ICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgICAgIGRpZmZfZmlsZSA9IGdldF9yZXN1bHRfZmls
ZV9mdWxscGF0aCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVj
dG9yeSwgYmFzZWxpbmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRm
b3JtLCAnZGlmZicpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4oZGlmZl9maWxlLCAnd2InKQor
ICAgICAgICAgICAgICAgIGYud3JpdGUob3V0cHV0KQorICAgICAgICAgICAgICAgIGYuY2xvc2Uo
KQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBIdG1sOiBjcmVhdGVkIGJhc2VsaW5l
IGRpZmYgZmlsZTogIiVzIi4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmX2Zp
bGUpCisKKyAgICAgICAgICAgIGlmIGRlbGV0ZV9ib2d1c19kaXI6CisgICAgICAgICAgICAgICAg
c2h1dGlsLnJtdHJlZShib2d1c19kaXIsIFRydWUpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnICBIdG1sOiByZW1vdmVkIHRlbXAgY29uZmlnIGRpcjogIiVzIi4nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9ndXNfZGlyKQorCisKK2NsYXNzIEh0bWxHZW5lcmF0b3Io
b2JqZWN0KToKKyAgICAiIiJDbGFzcyB0byBnZW5lcmF0ZSByZWJhc2VsaW5pbmcgcmVzdWx0IGNv
bXBhcmlzb24gaHRtbC4iIiIKKworICAgIEhUTUxfUkVCQVNFTElORSA9ICgnPGh0bWw+JworICAg
ICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JworICAgICAgICAgICAgICAgICAgICAgICAnPHN0
eWxlPicKKyAgICAgICAgICAgICAgICAgICAgICAgJ2JvZHkge2ZvbnQtZmFtaWx5OiBzYW5zLXNl
cmlmO30nCisgICAgICAgICAgICAgICAgICAgICAgICcubWFpblRhYmxlIHtiYWNrZ3JvdW5kOiAj
NjY2NjY2O30nCisgICAgICAgICAgICAgICAgICAgICAgICcubWFpblRhYmxlIHRkICwgLm1haW5U
YWJsZSB0aCB7YmFja2dyb3VuZDogd2hpdGU7fScKKyAgICAgICAgICAgICAgICAgICAgICAgJy5k
ZXRhaWwge21hcmdpbi1sZWZ0OiAxMHB4OyBtYXJnaW4tdG9wOiAzcHg7fScKKyAgICAgICAgICAg
ICAgICAgICAgICAgJzwvc3R5bGU+JworICAgICAgICAgICAgICAgICAgICAgICAnPHRpdGxlPlJl
YmFzZWxpbmluZyBSZXN1bHQgQ29tcGFyaXNvbiAoJSh0aW1lKXMpJworICAgICAgICAgICAgICAg
ICAgICAgICAnPC90aXRsZT4nCisgICAgICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+JworICAg
ICAgICAgICAgICAgICAgICAgICAnPGJvZHk+JworICAgICAgICAgICAgICAgICAgICAgICAnPGgy
PlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFyaXNvbiAoJSh0aW1lKXMpPC9oMj4nCisgICAgICAg
ICAgICAgICAgICAgICAgICclKGJvZHkpcycKKyAgICAgICAgICAgICAgICAgICAgICAgJzwvYm9k
eT4nCisgICAgICAgICAgICAgICAgICAgICAgICc8L2h0bWw+JykKKyAgICBIVE1MX05PX1JFQkFT
RUxJTklOR19URVNUUyA9ICgKKyAgICAgICAgJzxwPk5vIHRlc3RzIGZvdW5kIHRoYXQgbmVlZCBy
ZWJhc2VsaW5pbmcuPC9wPicpCisgICAgSFRNTF9UQUJMRV9URVNUID0gKCc8dGFibGUgY2xhc3M9
Im1haW5UYWJsZSIgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01PicKKyAgICAgICAgICAgICAg
ICAgICAgICAgJyVzPC90YWJsZT48YnI+JykKKyAgICBIVE1MX1RSX1RFU1QgPSAoJzx0cj4nCisg
ICAgICAgICAgICAgICAgICAgICc8dGggc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNDREVDREU7
IGJvcmRlci1ib3R0b206ICcKKyAgICAgICAgICAgICAgICAgICAgJzFweCBzb2xpZCBibGFjazsg
Zm9udC1zaXplOiAxOHB0OyBmb250LXdlaWdodDogYm9sZCIgJworICAgICAgICAgICAgICAgICAg
ICAnY29sc3Bhbj0iNSI+JworICAgICAgICAgICAgICAgICAgICAnPGEgaHJlZj0iJXMiPiVzPC9h
PicKKyAgICAgICAgICAgICAgICAgICAgJzwvdGg+JworICAgICAgICAgICAgICAgICAgICAnPC90
cj4nKQorICAgIEhUTUxfVEVTVF9ERVRBSUwgPSAoJzxkaXYgY2xhc3M9ImRldGFpbCI+JworICAg
ICAgICAgICAgICAgICAgICAgICAgJzx0cj4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPHRo
IHdpZHRoPSIxMDAiPkJhc2VsaW5lPC90aD4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPHRo
IHdpZHRoPSIxMDAiPlBsYXRmb3JtPC90aD4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPHRo
IHdpZHRoPSIyMDAiPk9sZDwvdGg+JworICAgICAgICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0
aD0iMjAwIj5OZXc8L3RoPicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8dGggd2lkdGg9IjE1
MCI+RGlmZmVyZW5jZTwvdGg+JworICAgICAgICAgICAgICAgICAgICAgICAgJzwvdHI+JworICAg
ICAgICAgICAgICAgICAgICAgICAgJyVzJworICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2
PicpCisgICAgSFRNTF9URF9OT0xJTksgPSAnPHRkIGFsaWduPWNlbnRlcj48YT4lczwvYT48L3Rk
PicKKyAgICBIVE1MX1REX0xJTksgPSAnPHRkIGFsaWduPWNlbnRlcj48YSBocmVmPSIlKHVyaSlz
Ij4lKG5hbWUpczwvYT48L3RkPicKKyAgICBIVE1MX1REX0xJTktfSU1HID0gKCc8dGQ+PGEgaHJl
Zj0iJSh1cmkpcyI+JworICAgICAgICAgICAgICAgICAgICAgICAgJzxpbWcgc3R5bGU9IndpZHRo
OiAyMDAiIHNyYz0iJSh1cmkpcyIgLz48L2E+PC90ZD4nKQorICAgIEhUTUxfVFIgPSAnPHRyPiVz
PC90cj4nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcGxhdGZvcm1zLCByZWJh
c2VsaW5pbmdfdGVzdHMpOgorICAgICAgICBzZWxmLl9odG1sX2RpcmVjdG9yeSA9IG9wdGlvbnMu
aHRtbF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5fcGxhdGZvcm1zID0gcGxhdGZvcm1zCisgICAg
ICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9IHJlYmFzZWxpbmluZ190ZXN0cworICAgICAg
ICBzZWxmLl9odG1sX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5odG1sX2RpcmVjdG9yeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWJhc2VsaW5lLmh0bWwn
KQorCisgICAgZGVmIGdlbmVyYXRlX2h0bWwoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIGh0
bWwgZmlsZSBmb3IgcmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJpc29uLiIiIgorCisgICAgICAg
IGxvZ2dpbmcuaW5mbygnR2VuZXJhdGluZyBodG1sIGZpbGUnKQorCisgICAgICAgIGh0bWxfYm9k
eSA9ICcnCisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6CisgICAgICAg
ICAgICBodG1sX2JvZHkgKz0gc2VsZi5IVE1MX05PX1JFQkFTRUxJTklOR19URVNUUworICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0
cykKKyAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorCisgICAgICAgICAgICB0ZXN0X25vID0gMQor
ICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCdUZXN0ICVkOiAlcycsIHRlc3Rfbm8sIHRlc3QpCisgICAgICAgICAgICAgICAgaHRtbF9i
b2R5ICs9IHNlbGYuX2dlbmVyYXRlX2h0bWxfZm9yX29uZV90ZXN0KHRlc3QpCisKKyAgICAgICAg
aHRtbCA9IHNlbGYuSFRNTF9SRUJBU0VMSU5FICUgKHsndGltZSc6IHRpbWUuYXNjdGltZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib2R5JzogaHRtbF9ib2R5
fSkKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZyhodG1sKQorCisgICAgICAgIGYgPSBvcGVuKHNlbGYu
X2h0bWxfZmlsZSwgJ3cnKQorICAgICAgICBmLndyaXRlKGh0bWwpCisgICAgICAgIGYuY2xvc2Uo
KQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygnQmFzZWxpbmUgY29tcGFyaXNvbiBodG1sIGdlbmVy
YXRlZCBhdCAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2h0bWxfZmlsZSkKKwor
ICAgIGRlZiBzaG93X2h0bWwoc2VsZik6CisgICAgICAgICIiIkxhdW5jaCB0aGUgcmViYXNlbGlu
aW5nIGh0bWwgaW4gYnJ3b3Nlci4iIiIKKworICAgICAgICBsb2dnaW5nLmluZm8oJ0xhdW5jaGlu
ZyBodG1sOiAiJXMiJywgc2VsZi5faHRtbF9maWxlKQorCisgICAgICAgIGh0bWxfdXJpID0gcGF0
aF91dGlscy5maWxlbmFtZV90b191cmkoc2VsZi5faHRtbF9maWxlKQorICAgICAgICB3ZWJicm93
c2VyLm9wZW4oaHRtbF91cmksIDEpCisKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdIdG1sIGxhdW5j
aGVkLicpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHNlbGYsIHRlc3RfYmFz
ZW5hbWUsIHN1ZmZpeCwgcGxhdGZvcm0pOgorICAgICAgICAiIiJHZW5lcmF0ZSBsaW5rcyBmb3Ig
YmFzZWxpbmUgcmVzdWx0cyAob2xkLCBuZXcgYW5kIGRpZmYpLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgdGVzdF9iYXNlbmFtZTogYmFzZSBmaWxlbmFtZSBvZiB0aGUgdGVzdAorICAgICAg
ICAgIHN1ZmZpeDogYmFzZWxpbmUgZmlsZSBzdWZmaXhlczogJy50eHQnLCAnLnBuZycKKyAgICAg
ICAgICBwbGF0Zm9ybTogd2luLCBsaW51eCBvciBtYWMKKworICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgIGh0bWwgbGlua3MgZm9yIHNob3dpbmcgYmFzZWxpbmUgcmVzdWx0cyAob2xkLCBuZXcg
YW5kIGRpZmYpCisgICAgICAgICIiIgorCisgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0gJyVz
LWV4cGVjdGVkJXMnICUgKHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCkKKyAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnICAgIGJhc2VsaW5lIGZpbGVuYW1lOiAiJXMiJywgYmFzZWxpbmVfZmlsZW5hbWUpCisK
KyAgICAgICAgbmV3X2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5faHRtbF9k
aXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwgJ25ldycpCisgICAgICAgIGxvZ2dpbmcuaW5mbygn
ICAgIE5ldyBiYXNlbGluZSBmaWxlOiAiJXMiJywgbmV3X2ZpbGUpCisgICAgICAgIGlmIG5vdCBv
cy5wYXRoLmV4aXN0cyhuZXdfZmlsZSk6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgICBO
byBuZXcgYmFzZWxpbmUgZmlsZTogIiVzIicsIG5ld19maWxlKQorICAgICAgICAgICAgcmV0dXJu
ICcnCisKKyAgICAgICAgb2xkX2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5f
aHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwgJ29sZCcpCisgICAgICAgIGxvZ2dpbmcu
aW5mbygnICAgIE9sZCBiYXNlbGluZSBmaWxlOiAiJXMiJywgb2xkX2ZpbGUpCisgICAgICAgIGlm
IHN1ZmZpeCA9PSAnLnBuZyc6CisgICAgICAgICAgICBodG1sX3RkX2xpbmsgPSBzZWxmLkhUTUxf
VERfTElOS19JTUcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGh0bWxfdGRfbGluayA9IHNl
bGYuSFRNTF9URF9MSU5LCisKKyAgICAgICAgbGlua3MgPSAnJworICAgICAgICBpZiBvcy5wYXRo
LmV4aXN0cyhvbGRfZmlsZSk6CisgICAgICAgICAgICBsaW5rcyArPSBodG1sX3RkX2xpbmsgJSB7
CisgICAgICAgICAgICAgICAgJ3VyaSc6IHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKG9sZF9m
aWxlKSwKKyAgICAgICAgICAgICAgICAnbmFtZSc6IGJhc2VsaW5lX2ZpbGVuYW1lfQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgICAgTm8gb2xkIGJhc2VsaW5lIGZp
bGU6ICIlcyInLCBvbGRfZmlsZSkKKyAgICAgICAgICAgIGxpbmtzICs9IHNlbGYuSFRNTF9URF9O
T0xJTksgJSAnJworCisgICAgICAgIGxpbmtzICs9IGh0bWxfdGRfbGluayAlIHsndXJpJzogcGF0
aF91dGlscy5maWxlbmFtZV90b191cmkobmV3X2ZpbGUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ25hbWUnOiBiYXNlbGluZV9maWxlbmFtZX0KKworICAgICAgICBkaWZmX2Zp
bGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5faHRtbF9kaXJlY3RvcnksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFt
ZSwgcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZGlmZicpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnICAgIEJhc2VsaW5lIGRpZmYgZmlsZTog
IiVzIicsIGRpZmZfZmlsZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGlmZl9maWxlKToK
KyAgICAgICAgICAgIGxpbmtzICs9IGh0bWxfdGRfbGluayAlIHsndXJpJzogcGF0aF91dGlscy5m
aWxlbmFtZV90b191cmkoCisgICAgICAgICAgICAgICAgZGlmZl9maWxlKSwgJ25hbWUnOiAnRGlm
Zid9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgICBObyBiYXNl
bGluZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZmX2ZpbGUpCisgICAgICAgICAgICBsaW5rcyArPSBz
ZWxmLkhUTUxfVERfTk9MSU5LICUgJycKKworICAgICAgICByZXR1cm4gbGlua3MKKworICAgIGRl
ZiBfZ2VuZXJhdGVfaHRtbF9mb3Jfb25lX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIkdl
bmVyYXRlIGh0bWwgZm9yIG9uZSByZWJhc2VsaW5pbmcgdGVzdC4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgIHRlc3Q6IGxheW91dCB0ZXN0IG5hbWUKKworICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgIGh0bWwgdGhhdCBjb21wYXJlcyBiYXNlbGluZSByZXN1bHRzIGZvciB0aGUgdGVzdC4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgdGVzdF9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUo
b3MucGF0aC5zcGxpdGV4dCh0ZXN0KVswXSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCcgIGJhc2Vu
YW1lOiAiJXMiJywgdGVzdF9iYXNlbmFtZSkKKyAgICAgICAgcm93cyA9IFtdCisgICAgICAgIGZv
ciBzdWZmaXggaW4gQkFTRUxJTkVfU1VGRklYRVM6CisgICAgICAgICAgICBpZiBzdWZmaXggPT0g
Jy5jaGVja3N1bSc6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCcgIENoZWNraW5nICVzIGZpbGVzJywgc3VmZml4KQorICAgICAgICAgICAgZm9y
IHBsYXRmb3JtIGluIHNlbGYuX3BsYXRmb3JtczoKKyAgICAgICAgICAgICAgICBsaW5rcyA9IHNl
bGYuX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCwKKyAgICAg
ICAgICAgICAgICAgICAgcGxhdGZvcm0pCisgICAgICAgICAgICAgICAgaWYgbGlua3M6CisgICAg
ICAgICAgICAgICAgICAgIHJvdyA9IHNlbGYuSFRNTF9URF9OT0xJTksgJSBzZWxmLl9nZXRfYmFz
ZWxpbmVfcmVzdWx0X3R5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXgpCisgICAg
ICAgICAgICAgICAgICAgIHJvdyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgcGxhdGZvcm0KKyAg
ICAgICAgICAgICAgICAgICAgcm93ICs9IGxpbmtzCisgICAgICAgICAgICAgICAgICAgIGxvZ2dp
bmcuZGVidWcoJyAgICBodG1sIHJvdzogJXMnLCByb3cpCisKKyAgICAgICAgICAgICAgICAgICAg
cm93cy5hcHBlbmQoc2VsZi5IVE1MX1RSICUgcm93KQorCisgICAgICAgIGlmIHJvd3M6CisgICAg
ICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNf
ZGlyKCksIHRlc3QpCisgICAgICAgICAgICBodG1sID0gc2VsZi5IVE1MX1RSX1RFU1QgJSAocGF0
aF91dGlscy5maWxlbmFtZV90b191cmkodGVzdF9wYXRoKSwKKyAgICAgICAgICAgICAgICB0ZXN0
KQorICAgICAgICAgICAgaHRtbCArPSBzZWxmLkhUTUxfVEVTVF9ERVRBSUwgJSAnICcuam9pbihy
b3dzKQorCisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcgICAgaHRtbCBmb3IgdGVzdDogJXMn
LCBodG1sKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuSFRNTF9UQUJMRV9URVNUICUgaHRtbAor
CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIF9nZXRfYmFzZWxpbmVfcmVzdWx0X3R5cGUo
c2VsZiwgc3VmZml4KToKKyAgICAgICAgIiIiTmFtZSBvZiB0aGUgYmFzZWxpbmUgcmVzdWx0IHR5
cGUuIiIiCisKKyAgICAgICAgaWYgc3VmZml4ID09ICcucG5nJzoKKyAgICAgICAgICAgIHJldHVy
biAnUGl4ZWwnCisgICAgICAgIGVsaWYgc3VmZml4ID09ICcudHh0JzoKKyAgICAgICAgICAgIHJl
dHVybiAnUmVuZGVyIFRyZWUnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ090
aGVyJworCisKK2RlZiBtYWluKCk6CisgICAgIiIiTWFpbiBmdW5jdGlvbiB0byBwcm9kdWNlIG5l
dyBiYXNlbGluZXMuIiIiCisKKyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFy
c2VyKCkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J2luY2x1ZGUgZGVidWctbGV2ZWwgbG9nZ2luZy4nKQorCisgICAgb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBsYXRmb3JtcycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ9J21hYyx3aW4sd2luLXhwLHdpbi12aXN0YSxsaW51eCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdDb21tYSBkZWxpbWl0ZWQgbGlz
dCBvZiBwbGF0Zm9ybXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhh
dCBuZWVkIHJlYmFzZWxpbmluZy4nKSkKKworICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbign
LXUnLCAnLS1hcmNoaXZlX3VybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9KCdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2J1aWxkYm90LycKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dF90ZXN0X3Jlc3VsdHMnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1VybCB0byBmaW5kIHRoZSBsYXlvdXQgdGVzdCBy
ZXN1bHQgYXJjaGl2ZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmaWxl
LicpKQorCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdycsICctLXdlYmtpdF9jYW5h
cnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSgnSWYgVHJ1ZSwgcHVsbCBiYXNlbGluZXMgZnJvbSB3ZWJr
aXQub3JnICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbmFyeSBib3Qu
JykpCisKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYmFja3VwJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0oJ1doZXRoZXIgb3Igbm90IHRvIGJhY2t1cCB0aGUgb3JpZ2luYWwgdGVz
dCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBleHBlY3RhdGlvbnMgZmls
ZSBhZnRlciByZWJhc2VsaW5lLicpKQorCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCct
ZCcsICctLWh0bWxfZGlyZWN0b3J5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdD0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1RoZSBkaXJlY3Rv
cnkgdGhhdCBzdG9yZXMgdGhlIHJlc3VsdHMgZm9yJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnIHJlYmFzZWxpbmluZyBjb21wYXJpc29uLicpKQorCisgICAgb3B0aW9ucyA9
IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpWzBdCisKKyAgICAjIFNldCB1cCBvdXIgbG9nZ2lu
ZyBmb3JtYXQuCisgICAgbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy52
ZXJib3NlOgorICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgbG9nZ2luZy5i
YXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQ9KCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6JShsaW5lbm8pLTNkICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJyUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9JyV5JW0lZCAlSDolTTolUycpCisKKyAgICAjIFZl
cmlmeSAncGxhdGZvcm1zJyBvcHRpb24gaXMgdmFsaWQKKyAgICBpZiBub3Qgb3B0aW9ucy5wbGF0
Zm9ybXM6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0ludmFsaWQgInBsYXRmb3JtcyIgb3B0aW9u
LiAtLXBsYXRmb3JtcyBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lmaWVk
IGluIG9yZGVyIHRvIHJlYmFzZWxpbmUuJykKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwbGF0
Zm9ybXMgPSBbcC5zdHJpcCgpLmxvd2VyKCkgZm9yIHAgaW4gb3B0aW9ucy5wbGF0Zm9ybXMuc3Bs
aXQoJywnKV0KKyAgICBmb3IgcGxhdGZvcm0gaW4gcGxhdGZvcm1zOgorICAgICAgICBpZiBub3Qg
cGxhdGZvcm0gaW4gUkVCQVNFTElORV9QTEFURk9STV9PUkRFUjoKKyAgICAgICAgICAgIGxvZ2dp
bmcuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIlcyInICUgKHBsYXRmb3JtKSkKKyAgICAgICAg
ICAgIHN5cy5leGl0KDEpCisKKyAgICAjIEFkanVzdCB0aGUgcGxhdGZvcm0gb3JkZXIgc28gcmVi
YXNlbGluZSB0b29sIGlzIHJ1bm5pbmcgYXQgdGhlIG9yZGVyIG9mCisgICAgIyAnbWFjJywgJ3dp
bicgYW5kICdsaW51eCcuIFRoaXMgaXMgaW4gc2FtZSBvcmRlciB3aXRoIGxheW91dCB0ZXN0IGJh
c2VsaW5lCisgICAgIyBzZWFyY2ggcGF0aHMuIEl0IHNpbXBsaWZpZXMgaG93IHRoZSByZWJhc2Vs
aW5lIHRvb2wgZGV0ZWN0cyBkdXBsaWNhdGUKKyAgICAjIGJhc2VsaW5lcy4gQ2hlY2sgX0lzRHVw
QmFzZWxpbmUgbWV0aG9kIGZvciBkZXRhaWxzLgorICAgIHJlYmFzZWxpbmVfcGxhdGZvcm1zID0g
W10KKyAgICBmb3IgcGxhdGZvcm0gaW4gUkVCQVNFTElORV9QTEFURk9STV9PUkRFUjoKKyAgICAg
ICAgaWYgcGxhdGZvcm0gaW4gcGxhdGZvcm1zOgorICAgICAgICAgICAgcmViYXNlbGluZV9wbGF0
Zm9ybXMuYXBwZW5kKHBsYXRmb3JtKQorCisgICAgb3B0aW9ucy5odG1sX2RpcmVjdG9yeSA9IHNl
dHVwX2h0bWxfZGlyZWN0b3J5KG9wdGlvbnMuaHRtbF9kaXJlY3RvcnkpCisKKyAgICByZWJhc2Vs
aW5pbmdfdGVzdHMgPSBzZXQoKQorICAgIGJhY2t1cCA9IG9wdGlvbnMuYmFja3VwCisgICAgZm9y
IHBsYXRmb3JtIGluIHJlYmFzZWxpbmVfcGxhdGZvcm1zOgorICAgICAgICByZWJhc2VsaW5lciA9
IFJlYmFzZWxpbmVyKHBsYXRmb3JtLCBvcHRpb25zKQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygn
JykKKyAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxpbmUgc3RhcnRlZCcsIHBsYXRm
b3JtKQorICAgICAgICBpZiByZWJhc2VsaW5lci5ydW4oYmFja3VwKToKKyAgICAgICAgICAgICMg
T25seSBuZWVkIHRvIGJhY2t1cCBvbmUgb3JpZ2luYWwgY29weSBvZiB0ZXN0IGV4cGVjdGF0aW9u
IGZpbGUuCisgICAgICAgICAgICBiYWNrdXAgPSBGYWxzZQorICAgICAgICAgICAgbG9nX2Rhc2hl
ZF9zdHJpbmcoJ1JlYmFzZWxpbmUgZG9uZScsIHBsYXRmb3JtKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxpbmUgZmFpbGVkJywgcGxhdGZvcm0s
IGxvZ2dpbmcuRVJST1IpCisKKyAgICAgICAgcmViYXNlbGluaW5nX3Rlc3RzIHw9IHNldChyZWJh
c2VsaW5lci5nZXRfcmViYXNlbGluaW5nX3Rlc3RzKCkpCisKKyAgICBsb2dnaW5nLmluZm8oJycp
CisgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbiBz
dGFydGVkJywgTm9uZSkKKyAgICBodG1sX2dlbmVyYXRvciA9IEh0bWxHZW5lcmF0b3Iob3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9y
bXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYmFzZWxpbmluZ190ZXN0
cykKKyAgICBodG1sX2dlbmVyYXRvci5nZW5lcmF0ZV9odG1sKCkKKyAgICBodG1sX2dlbmVyYXRv
ci5zaG93X2h0bWwoKQorICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5pbmcgcmVzdWx0
IGNvbXBhcmlzb24gZG9uZScsIE5vbmUpCisKKyAgICBzeXMuZXhpdCgwKQorCitpZiAnX19tYWlu
X18nID09IF9fbmFtZV9fOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhiOTdm
OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAgLTAsMCArMSwxNjk3IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiUnVuIGxheW91
dCB0ZXN0cyB1c2luZyB0aGUgdGVzdF9zaGVsbC4KKworVGhpcyBpcyBhIHBvcnQgb2YgdGhlIGV4
aXN0aW5nIHdlYmtpdCB0ZXN0IHNjcmlwdCBydW4td2Via2l0LXRlc3RzLgorCitUaGUgVGVzdFJ1
bm5lciBjbGFzcyBydW5zIGEgc2VyaWVzIG9mIHRlc3RzIChUZXN0VHlwZSBpbnRlcmZhY2UpIGFn
YWluc3QgYSBzZXQKK29mIHRlc3QgZmlsZXMuICBJZiBhIHRlc3QgZmlsZSBmYWlscyBhIFRlc3RU
eXBlLCBpdCByZXR1cm5zIGEgbGlzdCBUZXN0RmFpbHVyZQorb2JqZWN0cyB0byB0aGUgVGVzdFJ1
bm5lci4gIFRoZSBUZXN0UnVubmVyIHRoZW4gYWdncmVnYXRlcyB0aGUgVGVzdEZhaWx1cmVzIHRv
CitjcmVhdGUgYSBmaW5hbCByZXBvcnQuCisKK1RoaXMgc2NyaXB0IHJlYWRzIHNldmVyYWwgZmls
ZXMsIGlmIHRoZXkgZXhpc3QgaW4gdGhlIHRlc3RfbGlzdHMgc3ViZGlyZWN0b3J5CituZXh0IHRv
IHRoaXMgc2NyaXB0IGl0c2VsZi4gIEVhY2ggc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIHBhdGhz
IHRvIGluZGl2aWR1YWwKK3Rlc3RzIG9yIGVudGlyZSBzdWJkaXJlY3RvcmllcyBvZiB0ZXN0cywg
cmVsYXRpdmUgdG8gdGhlIG91dGVybW9zdCB0ZXN0CitkaXJlY3RvcnkuICBFbnRpcmUgbGluZXMg
c3RhcnRpbmcgd2l0aCAnLy8nIChjb21tZW50cykgd2lsbCBiZSBpZ25vcmVkLgorCitGb3IgZGV0
YWlscyBvZiB0aGUgZmlsZXMnIGNvbnRlbnRzIGFuZCBwdXJwb3Nlcywgc2VlIHRlc3RfbGlzdHMv
UkVBRE1FLgorIiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGdsb2IKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgbWF0aAoraW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQor
aW1wb3J0IHJhbmRvbQoraW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgYXBhY2hlX2h0dHBfc2VydmVyCitmcm9tIGxheW91dF9wYWNrYWdl
IGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgaHR0
cF9zZXJ2ZXIKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jlc3VsdHNf
Z2VuZXJhdG9yCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQorZnJv
bSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJvbSBsYXlvdXRfcGFja2FnZSBp
bXBvcnQgcGxhdGZvcm1fdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFp
bHVyZXMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rfc2hlbGxfdGhyZWFkCitmcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZpbGVzCitmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCB3ZWJzb2NrZXRfc2VydmVyCitmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IGZ1enp5X2ltYWdl
X2RpZmYKK2Zyb20gdGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgorZnJvbSB0ZXN0X3R5cGVz
IGltcG9ydCB0ZXN0X3R5cGVfYmFzZQorZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYK
Kworc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5
JykpCitpbXBvcnQgc2ltcGxlanNvbgorCisjIEluZGljYXRlcyB0aGF0IHdlIHdhbnQgZGV0YWls
ZWQgcHJvZ3Jlc3MgdXBkYXRlcyBpbiB0aGUgb3V0cHV0IChwcmludHMKKyMgZGlyZWN0b3J5LWJ5
LWRpcmVjdG9yeSBmZWVkYmFjaykuCitMT0dfREVUQUlMRURfUFJPR1JFU1MgPSAnZGV0YWlsZWQt
cHJvZ3Jlc3MnCisKKyMgTG9nIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hpbGUgcnVubmluZyAo
aW5zdGVhZCBvZiBqdXN0IGF0IHRoZSBlbmQpLgorTE9HX1VORVhQRUNURUQgPSAndW5leHBlY3Rl
ZCcKKworIyBCdWlsZGVyIGJhc2UgVVJMIHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3Qg
cmVzdWx0cy4KK0JVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9i
dWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKKworVGVzdEV4cGVjdGF0aW9uc0ZpbGUgPSB0
ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zRmlsZQorCisKK2NsYXNzIFRlc3RJbmZv
OgorICAgICIiIkdyb3VwcyBpbmZvcm1hdGlvbiBhYm91dCBhIHRlc3QgZm9yIGVhc3kgcGFzc2lu
ZyBvZiBkYXRhLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lb3V0
KToKKyAgICAgICAgIiIiR2VuZXJhdGVzIHRoZSBVUkkgYW5kIHN0b3JlcyB0aGUgZmlsZW5hbWUg
YW5kIHRpbWVvdXQgZm9yIHRoaXMgdGVzdC4KKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxl
bmFtZTogRnVsbCBwYXRoIHRvIHRoZSB0ZXN0LgorICAgICAgICAgIHRpbWVvdXQ6IFRpbWVvdXQg
Zm9yIHJ1bm5pbmcgdGhlIHRlc3QgaW4gVGVzdFNoZWxsLgorICAgICAgICAgICIiIgorICAgICAg
ICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi51cmkgPSBwYXRoX3V0aWxz
LmZpbGVuYW1lX3RvX3VyaShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91
dAorICAgICAgICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVu
YW1lKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcuY2hlY2tzdW0nKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBz
ZWxmLmltYWdlX2hhc2ggPSBvcGVuKGV4cGVjdGVkX2hhc2hfZmlsZSwgInIiKS5yZWFkKCkKKyAg
ICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlcnJuby5FTk9FTlQgIT0g
ZS5lcnJubzoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgc2VsZi5pbWFnZV9o
YXNoID0gTm9uZQorCisKK2NsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKKyAgICAiIiJBIGNs
YXNzIGZvciBwYXJ0aXRpb25pbmcgdGhlIHRlc3QgcmVzdWx0cyB3ZSBnZXQgaW50byBidWNrZXRz
LgorCisgICAgVGhpcyBjbGFzcyBpcyBiYXNpY2FsbHkgYSBnbG9yaWZpZWQgc3RydWN0IGFuZCBp
dCdzIHByaXZhdGUgdG8gdGhpcyBmaWxlCisgICAgc28gd2UgZG9uJ3QgYm90aGVyIHdpdGggYW55
IGluZm9ybWF0aW9uIGhpZGluZy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3Rh
dGlvbnMsIHRlc3RfZmlsZXMpOgorICAgICAgICBzZWxmLnRvdGFsID0gbGVuKHRlc3RfZmlsZXMp
CisgICAgICAgIHNlbGYucmVtYWluaW5nID0gc2VsZi50b3RhbAorICAgICAgICBzZWxmLmV4cGVj
dGF0aW9ucyA9IGV4cGVjdGF0aW9ucworICAgICAgICBzZWxmLmV4cGVjdGVkID0gMAorICAgICAg
ICBzZWxmLnVuZXhwZWN0ZWQgPSAwCisgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb24g
PSB7fQorICAgICAgICBzZWxmLnRlc3RzX2J5X3RpbWVsaW5lID0ge30KKyAgICAgICAgc2VsZi5y
ZXN1bHRzID0ge30KKyAgICAgICAgc2VsZi51bmV4cGVjdGVkX3Jlc3VsdHMgPSB7fQorICAgICAg
ICBzZWxmLmZhaWx1cmVzID0ge30KKyAgICAgICAgc2VsZi50ZXN0c19ieV9leHBlY3RhdGlvblt0
ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSA9IHNldCgpCisgICAgICAgIGZvciBleHBlY3RhdGlvbiBp
biBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlMudmFsdWVzKCk6CisgICAgICAgICAg
ICBzZWxmLnRlc3RzX2J5X2V4cGVjdGF0aW9uW2V4cGVjdGF0aW9uXSA9IHNldCgpCisgICAgICAg
IGZvciB0aW1lbGluZSBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5USU1FTElORVMudmFsdWVzKCk6
CisgICAgICAgICAgICBzZWxmLnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXSA9ICgKKyAgICAg
ICAgICAgICAgICBleHBlY3RhdGlvbnMuZ2V0X3Rlc3RzX3dpdGhfdGltZWxpbmUodGltZWxpbmUp
KQorCisgICAgZGVmIGFkZChzZWxmLCB0ZXN0LCBmYWlsdXJlcywgcmVzdWx0LCBleHBlY3RlZCk6
CisgICAgICAgICIiIkFkZCBhIHJlc3VsdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBiaW4uCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiB0ZXN0IGZpbGUgbmFtZQorICAgICAgICAgIGZh
aWx1cmVzOiBsaXN0IG9mIGZhaWx1cmUgb2JqZWN0cyBmcm9tIHRlc3QgZXhlY3V0aW9uCisgICAg
ICAgICAgcmVzdWx0OiByZXN1bHQgb2YgdGVzdCAoUEFTUywgSU1BR0UsIGV0Yy4pLgorICAgICAg
ICAgIGV4cGVjdGVkOiB3aGV0aGVyIHRoZSByZXN1bHQgd2FzIHdoYXQgd2UgZXhwZWN0ZWQgaXQg
dG8gYmUuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb25b
cmVzdWx0XS5hZGQodGVzdCkKKyAgICAgICAgc2VsZi5yZXN1bHRzW3Rlc3RdID0gcmVzdWx0Cisg
ICAgICAgIHNlbGYucmVtYWluaW5nIC09IDEKKyAgICAgICAgaWYgbGVuKGZhaWx1cmVzKToKKyAg
ICAgICAgICAgIHNlbGYuZmFpbHVyZXNbdGVzdF0gPSBmYWlsdXJlcworICAgICAgICBpZiBleHBl
Y3RlZDoKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgKz0gMQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi51bmV4cGVjdGVkX3Jlc3VsdHNbdGVzdF0gPSByZXN1bHQKKyAgICAgICAg
ICAgIHNlbGYudW5leHBlY3RlZCArPSAxCisKKworY2xhc3MgVGVzdFJ1bm5lcjoKKyAgICAiIiJB
IGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVz
IG9mIGxheW91dAorICAgIHRlc3QgZmlsZXMuIiIiCisKKyAgICBIVFRQX1NVQkRJUiA9IG9zLnNl
cC5qb2luKFsnJywgJ2h0dHAnLCAnJ10pCisgICAgV0VCU09DS0VUX1NVQkRJUiA9IG9zLnNlcC5q
b2luKFsnJywgJ3dlYnNvY2tldCcsICcnXSkKKworICAgICMgVGhlIHBlci10ZXN0IHRpbWVvdXQg
aW4gbWlsbGlzZWNvbmRzLCBpZiBubyAtLXRpbWUtb3V0LW1zIG9wdGlvbiB3YXMKKyAgICAjIGdp
dmVuIHRvIHJ1bl93ZWJraXRfdGVzdHMuIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIGRl
ZmF1bHQgdGltZW91dAorICAgICMgaW4gdGVzdF9zaGVsbC5leGUuCisgICAgREVGQVVMVF9URVNU
X1RJTUVPVVRfTVMgPSA2ICogMTAwMAorCisgICAgTlVNX1JFVFJZX09OX1VORVhQRUNURURfRkFJ
TFVSRSA9IDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBtZXRlcik6CisgICAg
ICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBv
cHRpb25zCisgICAgICAgICAgbWV0ZXI6IGEgTWV0ZXJlZFN0cmVhbSBvYmplY3QgdG8gcmVjb3Jk
IHVwZGF0ZXMgdG8uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cworICAgICAgICBzZWxmLl9tZXRlciA9IG1ldGVyCisKKyAgICAgICAgaWYgb3B0aW9ucy51c2Vf
YXBhY2hlOgorICAgICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBhcGFjaGVfaHR0cF9zZXJ2
ZXIuTGF5b3V0VGVzdEFwYWNoZUh0dHBkKAorICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0
c19kaXJlY3RvcnkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZl
ciA9IGh0dHBfc2VydmVyLkxpZ2h0dHBkKG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisKKyAg
ICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2Nr
ZXQoCisgICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICAjIGRp
c2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMu
CisgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2Vy
dmVyLlB5V2ViU29ja2V0KAorICAgICAgICAjICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0
b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMyMykKKworICAgICAgICAjIGEgbGlzdCBvZiBUZXN0
VHlwZSBvYmplY3RzCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSBbXQorCisgICAgICAgICMg
YSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAorICAgICAg
ICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0
ID0gTm9uZQorICAgICAgICBzZWxmLl9maWxlX2RpciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3dlYmtpdCcsICd0b29scycsCisgICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKKyAgICAg
ICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVldWUuUXVldWUoKQorCisgICAgICAgICMgVGhlc2Ug
YXJlIHVzZWQgZm9yIC0tbG9nIGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0YXR1cyBieQor
ICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBOb25lCisg
ICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiIKKyAgICAgICAgc2VsZi5fY3Vy
cmVudF90ZXN0X251bWJlciA9IDAKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBs
b2dnaW5nLmRlYnVnKCJmbHVzaGluZyBzdGRvdXQiKQorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNo
KCkKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiZmx1c2hpbmcgc3RkZXJyIikKKyAgICAgICAgc3lz
LnN0ZGVyci5mbHVzaCgpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInN0b3BwaW5nIGh0dHAgc2Vy
dmVyIikKKyAgICAgICAgIyBTdG9wIHRoZSBodHRwIHNlcnZlci4KKyAgICAgICAgc2VsZi5faHR0
cF9zZXJ2ZXIuc3RvcCgpCisgICAgICAgICMgU3RvcCB0aGUgV2ViIFNvY2tldCAvIFdlYiBTb2Nr
ZXQgU2VjdXJlIHNlcnZlcnMuCisgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgp
CisgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIuU3RvcCgpCisKKyAgICBk
ZWYgZ2F0aGVyX2ZpbGVfcGF0aHMoc2VsZiwgcGF0aHMpOgorICAgICAgICAiIiJGaW5kIGFsbCB0
aGUgZmlsZXMgdG8gdGVzdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHBhdGhzOiBhIGxp
c3Qgb2YgZ2xvYnMgdG8gdXNlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHRzLiIiIgorICAgICAgICBz
ZWxmLl90ZXN0X2ZpbGVzID0gdGVzdF9maWxlcy5nYXRoZXJfdGVzdF9maWxlcyhwYXRocykKKwor
ICAgIGRlZiBwYXJzZV9leHBlY3RhdGlvbnMoc2VsZiwgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUp
OgorICAgICAgICAiIiJQYXJzZSB0aGUgZXhwZWN0YXRpb25zIGZyb20gdGhlIHRlc3RfbGlzdCBm
aWxlcyBhbmQgcmV0dXJuIGEgZGF0YQorICAgICAgICBzdHJ1Y3R1cmUgaG9sZGluZyB0aGVtLiBU
aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHRlc3RfbGlzdCBmaWxlcyBoYXZlCisgICAgICAgIGludmFs
aWQgc3ludGF4LiIiIgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9maWxlczoK
KyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICB0ZXN0X2ZpbGVzID0gc2VsZi5fdGVzdF9maWxlcworCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlv
bnModGVzdF9maWxlcywKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2RpciwgcGxhdGZvcm0s
IGlzX2RlYnVnX21vZGUsCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3Rf
ZmlsZXMpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0YXRpb25zCisgICAgICAgIGV4
Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubGludF90
ZXN0X2ZpbGVzOgorICAgICAgICAgICAgICAgIHByaW50IHN0cihlcnIpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgZGVmIHByZXBhcmVfbGlzdHNf
YW5kX3ByaW50X291dHB1dChzZWxmLCB3cml0ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhcHByb3By
aWF0ZSBzdWJzZXRzIG9mIHRlc3QgbGlzdHMgYW5kIHJldHVybnMgYQorICAgICAgICBSZXN1bHRT
dW1tYXJ5IG9iamVjdC4gQWxzbyBwcmludHMgZXhwZWN0ZWQgdGVzdCBjb3VudHMuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChl
LmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgIyBSZW1vdmUgc2tpcHBlZCAtIGJvdGggZml4YWJsZSBh
bmQgaWdub3JlZCAtIGZpbGVzIGZyb20gdGhlCisgICAgICAgICMgdG9wLWxldmVsIGxpc3Qgb2Yg
ZmlsZXMgdG8gdGVzdC4KKyAgICAgICAgbnVtX2FsbF90ZXN0X2ZpbGVzID0gbGVuKHNlbGYuX3Rl
c3RfZmlsZXMpCisgICAgICAgIHdyaXRlKCJGb3VuZDogICVkIHRlc3RzIiAlIChsZW4oc2VsZi5f
dGVzdF9maWxlcykpKQorICAgICAgICBza2lwcGVkID0gc2V0KCkKKyAgICAgICAgaWYgbnVtX2Fs
bF90ZXN0X2ZpbGVzID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZm9yY2U6CisgICAgICAgICAg
ICBza2lwcGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuU0tJUCkKKyAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgLT0gc2tpcHBlZAorCisgICAgICAgICMgQ3JlYXRl
IGEgc29ydGVkIGxpc3Qgb2YgdGVzdCBmaWxlcyBzbyB0aGUgc3Vic2V0IGNodW5rLAorICAgICAg
ICAjIGlmIHVzZWQsIGNvbnRhaW5zIGFscGhhYmV0aWNhbGx5IGNvbnNlY3V0aXZlIHRlc3RzLgor
ICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBsaXN0KHNlbGYuX3Rlc3RfZmlsZXMpCisg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmFuZG9taXplX29yZGVyOgorICAgICAgICAgICAgcmFu
ZG9tLnNodWZmbGUoc2VsZi5fdGVzdF9maWxlc19saXN0KQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0LnNvcnQoKQorCisgICAgICAgICMgSWYgdGhlIHVz
ZXIgc3BlY2lmaWVzIHRoZXkganVzdCB3YW50IHRvIHJ1biBhIHN1YnNldCBvZiB0aGUgdGVzdHMs
CisgICAgICAgICMganVzdCBncmFiIGEgc3Vic2V0IG9mIHRoZSBub24tc2tpcHBlZCB0ZXN0cy4K
KyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fY2h1bmsgb3Igc2VsZi5fb3B0aW9ucy5ydW5f
cGFydDoKKyAgICAgICAgICAgIGNodW5rX3ZhbHVlID0gc2VsZi5fb3B0aW9ucy5ydW5fY2h1bmsg
b3Igc2VsZi5fb3B0aW9ucy5ydW5fcGFydAorICAgICAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYu
X3Rlc3RfZmlsZXNfbGlzdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChjaHVu
a19udW0sIGNodW5rX2xlbikgPSBjaHVua192YWx1ZS5zcGxpdCgiOiIpCisgICAgICAgICAgICAg
ICAgY2h1bmtfbnVtID0gaW50KGNodW5rX251bSkKKyAgICAgICAgICAgICAgICBhc3NlcnQoY2h1
bmtfbnVtID49IDApCisgICAgICAgICAgICAgICAgdGVzdF9zaXplID0gaW50KGNodW5rX2xlbikK
KyAgICAgICAgICAgICAgICBhc3NlcnQodGVzdF9zaXplID4gMCkKKyAgICAgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCJpbnZhbGlkIGNodW5rICclcyci
ICUgY2h1bmtfdmFsdWUpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAg
ICAgIyBHZXQgdGhlIG51bWJlciBvZiB0ZXN0cworICAgICAgICAgICAgbnVtX3Rlc3RzID0gbGVu
KHRlc3RfZmlsZXMpCisKKyAgICAgICAgICAgICMgR2V0IHRoZSBzdGFydCBvZmZzZXQgb2YgdGhl
IHNsaWNlLgorICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fY2h1bms6CisgICAgICAg
ICAgICAgICAgY2h1bmtfbGVuID0gdGVzdF9zaXplCisgICAgICAgICAgICAgICAgIyBJbiB0aGlz
IGNhc2UgY2h1bmtfbnVtIGNhbiBiZSByZWFsbHkgbGFyZ2UuIFdlIG5lZWQKKyAgICAgICAgICAg
ICAgICAjIHRvIG1ha2UgdGhlIHNsYXZlIGZpdCBpbiB0aGUgY3VycmVudCBudW1iZXIgb2YgdGVz
dHMuCisgICAgICAgICAgICAgICAgc2xpY2Vfc3RhcnQgPSAoY2h1bmtfbnVtICogY2h1bmtfbGVu
KSAlIG51bV90ZXN0cworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFZhbGlk
YXRlIHRoZSBkYXRhLgorICAgICAgICAgICAgICAgIGFzc2VydCh0ZXN0X3NpemUgPD0gbnVtX3Rl
c3RzKQorICAgICAgICAgICAgICAgIGFzc2VydChjaHVua19udW0gPD0gdGVzdF9zaXplKQorCisg
ICAgICAgICAgICAgICAgIyBUbyBjb3VudCB0aGUgY2h1bmtfbGVuLCBhbmQgbWFrZSBzdXJlIHdl
IGRvbid0IHNraXAKKyAgICAgICAgICAgICAgICAjIHNvbWUgdGVzdHMsIHdlIHJvdW5kIHRvIHRo
ZSBuZXh0IHZhbHVlIHRoYXQgZml0cyBleGFjdGx5CisgICAgICAgICAgICAgICAgIyBhbGwgdGhl
IHBhcnRzLgorICAgICAgICAgICAgICAgIHJvdW5kZWRfdGVzdHMgPSBudW1fdGVzdHMKKyAgICAg
ICAgICAgICAgICBpZiByb3VuZGVkX3Rlc3RzICUgdGVzdF9zaXplICE9IDA6CisgICAgICAgICAg
ICAgICAgICAgIHJvdW5kZWRfdGVzdHMgPSAobnVtX3Rlc3RzICsgdGVzdF9zaXplIC0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3Rlc3RzICUgdGVzdF9zaXplKSkK
KworICAgICAgICAgICAgICAgIGNodW5rX2xlbiA9IHJvdW5kZWRfdGVzdHMgLyB0ZXN0X3NpemUK
KyAgICAgICAgICAgICAgICBzbGljZV9zdGFydCA9IGNodW5rX2xlbiAqIChjaHVua19udW0gLSAx
KQorICAgICAgICAgICAgICAgICMgSXQgZG9lcyBub3QgbWluZCBpZiB3ZSBnbyBvdmVyIHRlc3Rf
c2l6ZS4KKworICAgICAgICAgICAgIyBHZXQgdGhlIGVuZCBvZmZzZXQgb2YgdGhlIHNsaWNlLgor
ICAgICAgICAgICAgc2xpY2VfZW5kID0gbWluKG51bV90ZXN0cywgc2xpY2Vfc3RhcnQgKyBjaHVu
a19sZW4pCisKKyAgICAgICAgICAgIGZpbGVzID0gdGVzdF9maWxlc1tzbGljZV9zdGFydDpzbGlj
ZV9lbmRdCisKKyAgICAgICAgICAgIHRlc3RzX3J1bl9tc2cgPSAnUnVubmluZzogJWQgdGVzdHMg
KGNodW5rIHNsaWNlIFslZDolZF0gb2YgJWQpJyAlICgKKyAgICAgICAgICAgICAgICAoc2xpY2Vf
ZW5kIC0gc2xpY2Vfc3RhcnQpLCBzbGljZV9zdGFydCwgc2xpY2VfZW5kLCBudW1fdGVzdHMpCisg
ICAgICAgICAgICB3cml0ZSh0ZXN0c19ydW5fbXNnKQorCisgICAgICAgICAgICAjIElmIHdlIHJl
YWNoZWQgdGhlIGVuZCBhbmQgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdGVzdHMsIHdlIHJ1biBzb21l
CisgICAgICAgICAgICAjIGZyb20gdGhlIGJlZ2lubmluZy4KKyAgICAgICAgICAgIGlmIChzZWxm
Ll9vcHRpb25zLnJ1bl9jaHVuayBhbmQKKyAgICAgICAgICAgICAgICAoc2xpY2VfZW5kIC0gc2xp
Y2Vfc3RhcnQgPCBjaHVua19sZW4pKToKKyAgICAgICAgICAgICAgICBleHRyYSA9IDEgKyBjaHVu
a19sZW4gLSAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpCisgICAgICAgICAgICAgICAgZXh0cmFf
bXNnID0gKCcgICBsYXN0IGNodW5rIGlzIHBhcnRpYWwsIGFwcGVuZGluZyBbMDolZF0nICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSkKKyAgICAgICAgICAgICAgICB3cml0ZShl
eHRyYV9tc2cpCisgICAgICAgICAgICAgICAgdGVzdHNfcnVuX21zZyArPSAiXG4iICsgZXh0cmFf
bXNnCisgICAgICAgICAgICAgICAgZmlsZXMuZXh0ZW5kKHRlc3RfZmlsZXNbMDpleHRyYV0pCisg
ICAgICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCisgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZSA9
IG9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAidyIpCisgICAgICAgICAgICB0ZXN0c19ydW5fZmls
ZS53cml0ZSh0ZXN0c19ydW5fbXNnICsgIlxuIikKKyAgICAgICAgICAgIHRlc3RzX3J1bl9maWxl
LmNsb3NlKCkKKworICAgICAgICAgICAgbGVuX3NraXBfY2h1bmsgPSBpbnQobGVuKGZpbGVzKSAq
IGxlbihza2lwcGVkKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdChs
ZW4oc2VsZi5fdGVzdF9maWxlcykpKQorICAgICAgICAgICAgc2tpcF9jaHVua19saXN0ID0gbGlz
dChza2lwcGVkKVswOmxlbl9za2lwX2NodW5rXQorICAgICAgICAgICAgc2tpcF9jaHVuayA9IHNl
dChza2lwX2NodW5rX2xpc3QpCisKKyAgICAgICAgICAgICMgVXBkYXRlIGV4cGVjdGF0aW9ucyBz
byB0aGF0IHRoZSBzdGF0cyBhcmUgY2FsY3VsYXRlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICAj
IFdlIG5lZWQgdG8gcGFzcyBhIGxpc3QgdGhhdCBpbmNsdWRlcyB0aGUgcmlnaHQgIyBvZiBza2lw
cGVkIGZpbGVzCisgICAgICAgICAgICAjIHRvIFBhcnNlRXhwZWN0YXRpb25zIHNvIHRoYXQgUmVz
dWx0U3VtbWFyeSgpIHdpbGwgZ2V0IHRoZSBjb3JyZWN0CisgICAgICAgICAgICAjIHN0YXRzLiBT
bywgd2UgYWRkIGluIHRoZSBzdWJzZXQgb2Ygc2tpcHBlZCBmaWxlcywgYW5kIHRoZW4KKyAgICAg
ICAgICAgICMgc3VidHJhY3QgdGhlbSBiYWNrIG91dC4KKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
ZmlsZXNfbGlzdCA9IGZpbGVzICsgc2tpcF9jaHVua19saXN0CisgICAgICAgICAgICBzZWxmLl90
ZXN0X2ZpbGVzID0gc2V0KHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKworICAgICAgICAgICAgc2Vs
Zi5fZXhwZWN0YXRpb25zID0gc2VsZi5wYXJzZV9leHBlY3RhdGlvbnMoCisgICAgICAgICAgICAg
ICAgcGF0aF91dGlscy5wbGF0Zm9ybV9uYW1lKCksIHNlbGYuX29wdGlvbnMudGFyZ2V0ID09ICdE
ZWJ1ZycpCisKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoZmlsZXMpCisgICAg
ICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBmaWxlcworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2tpcF9jaHVuayA9IHNraXBwZWQKKworICAgICAgICByZXN1bHRfc3VtbWFyeSA9
IFJlc3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0YXRpb25zLAorICAgICAgICAgICAgc2VsZi5fdGVz
dF9maWxlcyB8IHNraXBfY2h1bmspCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3Vs
dHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0X2V4cGVj
dGF0aW9ucy5QQVNTLCAicGFzc2VzIikKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVz
dWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLkZBSUwsICJmYWlsdXJlcyIpCisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVk
X3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0
X2V4cGVjdGF0aW9ucy5GTEFLWSwgImZsYWt5IikKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0
ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHRl
c3RfZXhwZWN0YXRpb25zLlNLSVAsICJza2lwcGVkIikKKworCisgICAgICAgIGlmIHNlbGYuX29w
dGlvbnMuZm9yY2U6CisgICAgICAgICAgICB3cml0ZSgnUnVubmluZyBhbGwgdGVzdHMsIGluY2x1
ZGluZyBza2lwcyAoLS1mb3JjZSknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBOb3Rl
IHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgcnVuIHRoZSBza2lwcGVkIHRlc3RzICh0aGV5IHdlcmUK
KyAgICAgICAgICAgICMgc3VidHJhY3RlZCBvdXQgb2Ygc2VsZi5fdGVzdF9maWxlcywgYWJvdmUp
LCBidXQgd2Ugc3R1YiBvdXQgdGhlCisgICAgICAgICAgICAjIHJlc3VsdHMgaGVyZSBzbyB0aGUg
c3RhdGlzdGljcyBjYW4gcmVtYWluIGFjY3VyYXRlLgorICAgICAgICAgICAgZm9yIHRlc3QgaW4g
c2tpcF9jaHVuazoKKyAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQodGVzdCwgW10s
IHRlc3RfZXhwZWN0YXRpb25zLlNLSVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkPVRydWUpCisgICAgICAgIHdyaXRlKCIiKQorCisgICAgICAgIHJldHVybiBy
ZXN1bHRfc3VtbWFyeQorCisgICAgZGVmIGFkZF90ZXN0X3R5cGUoc2VsZiwgdGVzdF90eXBlKToK
KyAgICAgICAgIiIiQWRkIGEgVGVzdFR5cGUgdG8gdGhlIFRlc3RSdW5uZXIuIiIiCisgICAgICAg
IHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKHRlc3RfdHlwZSkKKworICAgIGRlZiBfZ2V0X2Rpcl9m
b3JfdGVzdF9maWxlKHNlbGYsIHRlc3RfZmlsZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGhp
Z2hlc3QtbGV2ZWwgZGlyZWN0b3J5IGJ5IHdoaWNoIHRvIHNoYXJkIHRoZSBnaXZlbgorICAgICAg
ICB0ZXN0IGZpbGUuIiIiCisgICAgICAgIGluZGV4ID0gdGVzdF9maWxlLnJmaW5kKG9zLnNlcCAr
ICdMYXlvdXRUZXN0cycgKyBvcy5zZXApCisKKyAgICAgICAgdGVzdF9maWxlID0gdGVzdF9maWxl
W2luZGV4ICsgbGVuKCdMYXlvdXRUZXN0cy8nKTpdCisgICAgICAgIHRlc3RfZmlsZV9wYXJ0cyA9
IHRlc3RfZmlsZS5zcGxpdChvcy5zZXAsIDEpCisgICAgICAgIGRpcmVjdG9yeSA9IHRlc3RfZmls
ZV9wYXJ0c1swXQorICAgICAgICB0ZXN0X2ZpbGUgPSB0ZXN0X2ZpbGVfcGFydHNbMV0KKworICAg
ICAgICAjIFRoZSBodHRwIHRlc3RzIGFyZSB2ZXJ5IHN0YWJsZSBvbiBtYWMvbGludXguCisgICAg
ICAgICMgVE9ETyhvamFuKTogTWFrZSB0aGUgaHR0cCBzZXJ2ZXIgb24gV2luZG93cyBiZSBhcGFj
aGUgc28gd2UgY2FuCisgICAgICAgICMgdHVybiBzaGFyZCB0aGUgaHR0cCB0ZXN0cyB0aGVyZSBh
cyB3ZWxsLiBTd2l0Y2hpbmcgdG8gYXBhY2hlIGlzCisgICAgICAgICMgd2hhdCBtYWRlIHRoZW0g
c3RhYmxlIG9uIGxpbnV4L21hYy4KKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gZGlyZWN0b3J5Cisg
ICAgICAgIHdoaWxlICgoZGlyZWN0b3J5ICE9ICdodHRwJyBvciBzeXMucGxhdGZvcm0gaW4gKCdk
YXJ3aW4nLCAnbGludXgyJykpCisgICAgICAgICAgICAgICAgYW5kIHRlc3RfZmlsZS5maW5kKG9z
LnNlcCkgPj0gMCk6CisgICAgICAgICAgICB0ZXN0X2ZpbGVfcGFydHMgPSB0ZXN0X2ZpbGUuc3Bs
aXQob3Muc2VwLCAxKQorICAgICAgICAgICAgZGlyZWN0b3J5ID0gdGVzdF9maWxlX3BhcnRzWzBd
CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBvcy5wYXRoLmpvaW4ocmV0dXJuX3ZhbHVlLCBk
aXJlY3RvcnkpCisgICAgICAgICAgICB0ZXN0X2ZpbGUgPSB0ZXN0X2ZpbGVfcGFydHNbMV0KKwor
ICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCisKKyAgICBkZWYgX2dldF90ZXN0X2luZm9fZm9y
X2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgYXBwcm9wcmlh
dGUgVGVzdEluZm8gb2JqZWN0IGZvciB0aGUgZmlsZS4gTW9zdGx5IHRoaXMKKyAgICAgICAgaXMg
dXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGltZW91dCB2YWx1ZSAoaW4gbXMpIHRvIHVzZSBmb3Ig
dGhlIGdpdmVuCisgICAgICAgIHRlc3QuIiIiCisgICAgICAgIGlmIHNlbGYuX2V4cGVjdGF0aW9u
cy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKToKKyAgICAg
ICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMuc2xvd190aW1l
X291dF9tcykKKyAgICAgICAgcmV0dXJuIFRlc3RJbmZvKHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9u
cy50aW1lX291dF9tcykKKworICAgIGRlZiBfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmLCB0ZXN0
X2ZpbGVzKToKKyAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQgc2FmZSBxdWV1ZSBvZiBsaXN0
cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKKyAgICAgICAgdHVwbGVzLiBFYWNoIFRl
c3RTaGVsbFRocmVhZCBwdWxscyBhIGxpc3QgZnJvbSB0aGlzIHF1ZXVlIGFuZCBydW5zCisgICAg
ICAgIHRob3NlIHRlc3RzIGluIG9yZGVyIGJlZm9yZSBncmFiYmluZyB0aGUgbmV4dCBhdmFpbGFi
bGUgbGlzdC4KKworICAgICAgICBTaGFyZCB0aGUgbGlzdHMgYnkgZGlyZWN0b3J5LiBUaGlzIGhl
bHBzIGVuc3VyZSB0aGF0IHRlc3RzIHRoYXQgZGVwZW5kCisgICAgICAgIG9uIGVhY2ggb3RoZXIg
KGFrYSBiYWQgdGVzdHMhKSBjb250aW51ZSB0byBydW4gdG9nZXRoZXIgYXMgbW9zdAorICAgICAg
ICBjcm9zcy10ZXN0cyBkZXBlbmRlbmNpZXMgdGVuZCB0byBvY2N1ciB3aXRoaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LgorCisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBUaGUgUXVldWUgb2YgbGlz
dHMgb2YgVGVzdEluZm8gb2JqZWN0cy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgKHNlbGYu
X29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsIG9yCisgICAgICAgICAgICBzZWxm
Ll9pc19zaW5nbGVfdGhyZWFkZWQoKSk6CisgICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IFF1
ZXVlLlF1ZXVlKCkKKyAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAg
ICAgICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoCisgICAgICAgICAgICAgICAgICAgICgn
LicsIFtzZWxmLl9nZXRfdGVzdF9pbmZvX2Zvcl9maWxlKHRlc3RfZmlsZSldKSkKKyAgICAgICAg
ICAgIHJldHVybiBmaWxlbmFtZV9xdWV1ZQorCisgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9Cisg
ICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAgICAgICAgICAgIGRpcmVjdG9y
eSA9IHNlbGYuX2dldF9kaXJfZm9yX3Rlc3RfZmlsZSh0ZXN0X2ZpbGUpCisgICAgICAgICAgICB0
ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJlY3RvcnksIFtdKQorICAgICAgICAgICAgdGVzdHNf
YnlfZGlyW2RpcmVjdG9yeV0uYXBwZW5kKAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF90ZXN0
X2luZm9fZm9yX2ZpbGUodGVzdF9maWxlKSkKKworICAgICAgICAjIFNvcnQgYnkgdGhlIG51bWJl
ciBvZiB0ZXN0cyBpbiB0aGUgZGlyIHNvIHRoYXQgdGhlIG9uZXMgd2l0aCB0aGUKKyAgICAgICAg
IyBtb3N0IHRlc3RzIGdldCBydW4gZmlyc3QgaW4gb3JkZXIgdG8gbWF4aW1pemUgcGFyYWxsZWxp
emF0aW9uLgorICAgICAgICAjIE51bWJlciBvZiB0ZXN0cyBpcyBhIGdvb2QgZW5vdWdoLCBidXQg
bm90IHBlcmZlY3QsIGFwcHJveGltYXRpb24KKyAgICAgICAgIyBvZiBob3cgbG9uZyB0aGF0IHNl
dCBvZiB0ZXN0cyB3aWxsIHRha2UgdG8gcnVuLiBXZSBjYW4ndCBqdXN0IHVzZQorICAgICAgICAj
IGEgUHJpb3JpdHlRdWV1ZSB1bnRpbCB3ZSBtb3ZlICMgdG8gUHl0aG9uIDIuNi4KKyAgICAgICAg
dGVzdF9saXN0cyA9IFtdCisgICAgICAgIGh0dHBfdGVzdHMgPSBOb25lCisgICAgICAgIGZvciBk
aXJlY3RvcnkgaW4gdGVzdHNfYnlfZGlyOgorICAgICAgICAgICAgdGVzdF9saXN0ID0gdGVzdHNf
YnlfZGlyW2RpcmVjdG9yeV0KKyAgICAgICAgICAgICMgS2VlcCB0aGUgdGVzdHMgaW4gYWxwaGFi
ZXRpY2FsIG9yZGVyLgorICAgICAgICAgICAgIyBUT0RPOiBSZW1vdmUgb25jZSB0ZXN0cyBhcmUg
Zml4ZWQgc28gdGhleSBjYW4gYmUgcnVuIGluIGFueQorICAgICAgICAgICAgIyBvcmRlci4KKyAg
ICAgICAgICAgIHRlc3RfbGlzdC5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRlc3RfbGlzdF90dXBs
ZSA9IChkaXJlY3RvcnksIHRlc3RfbGlzdCkKKyAgICAgICAgICAgIGlmIGRpcmVjdG9yeSA9PSAn
TGF5b3V0VGVzdHMnICsgb3Muc2VwICsgJ2h0dHAnOgorICAgICAgICAgICAgICAgIGh0dHBfdGVz
dHMgPSB0ZXN0X2xpc3RfdHVwbGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
dGVzdF9saXN0cy5hcHBlbmQodGVzdF9saXN0X3R1cGxlKQorICAgICAgICB0ZXN0X2xpc3RzLnNv
cnQobGFtYmRhIGEsIGI6IGNtcChsZW4oYlsxXSksIGxlbihhWzFdKSkpCisKKyAgICAgICAgIyBQ
dXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QuIFRoZXJlIGFyZSBvbmx5IGEgY291cGxlIGh1bmRyZWQg
b2YgdGhlbSwKKyAgICAgICAgIyBidXQgZWFjaCBodHRwIHRlc3QgdGFrZXMgYSB2ZXJ5IGxvbmcg
dGltZSB0byBydW4sIHNvIHNvcnRpbmcgYnkgdGhlCisgICAgICAgICMgbnVtYmVyIG9mIHRlc3Rz
IGRvZXNuJ3QgYWNjdXJhdGVseSBjYXB0dXJlIGhvdyBsb25nIHRoZXkgdGFrZSB0byBydW4uCisg
ICAgICAgIGlmIGh0dHBfdGVzdHM6CisgICAgICAgICAgICB0ZXN0X2xpc3RzLmluc2VydCgwLCBo
dHRwX3Rlc3RzKQorCisgICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAg
ICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUu
cHV0KGl0ZW0pCisgICAgICAgIHJldHVybiBmaWxlbmFtZV9xdWV1ZQorCisgICAgZGVmIF9nZXRf
dGVzdF9zaGVsbF9hcmdzKHNlbGYsIGluZGV4KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVw
bGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIHRlc3Rfc2hlbGwuIiIiCisgICAgICAg
IHNoZWxsX2FyZ3MgPSBbXQorICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0
QXJndW1lbnRzKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHM6
CisgICAgICAgICAgICBwbmdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3Vs
dHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBuZ19y
ZXN1bHQlcy5wbmciICUgaW5kZXgpCisgICAgICAgICAgICBzaGVsbF9hcmdzLmFwcGVuZCgiLS1w
aXhlbC10ZXN0cz0iICsgcG5nX3BhdGgpCisgICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGgg
PSBwbmdfcGF0aAorCisgICAgICAgIHRlc3RfYXJncy5uZXdfYmFzZWxpbmUgPSBzZWxmLl9vcHRp
b25zLm5ld19iYXNlbGluZQorCisgICAgICAgIHRlc3RfYXJncy5zaG93X3NvdXJjZXMgPSBzZWxm
Ll9vcHRpb25zLnNvdXJjZXMKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnN0YXJ0dXBfZGlh
bG9nOgorICAgICAgICAgICAgc2hlbGxfYXJncy5hcHBlbmQoJy0tdGVzdHNoZWxsLXN0YXJ0dXAt
ZGlhbG9nJykKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmdwX2ZhdWx0X2Vycm9yX2JveDoK
KyAgICAgICAgICAgIHNoZWxsX2FyZ3MuYXBwZW5kKCctLWdwLWZhdWx0LWVycm9yLWJveCcpCisK
KyAgICAgICAgcmV0dXJuICh0ZXN0X2FyZ3MsIHNoZWxsX2FyZ3MpCisKKyAgICBkZWYgX2NvbnRh
aW5zX3Rlc3RzKHNlbGYsIHN1YmRpcik6CisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gc2VsZi5f
dGVzdF9maWxlc19saXN0OgorICAgICAgICAgICAgaWYgdGVzdF9maWxlLmZpbmQoc3ViZGlyKSA+
PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIF9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3RocmVhZHMoc2VsZiwgdGVzdF9zaGVs
bF9iaW5hcnksIHRlc3RfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFydHMg
dGhlIFRlc3RTaGVsbFRocmVhZChzKS4KKworICAgICAgICBSZXR1cm46CisgICAgICAgICAgVGhl
IGxpc3Qgb2YgdGhyZWFkcy4KKyAgICAgICAgIiIiCisgICAgICAgIHRlc3Rfc2hlbGxfY29tbWFu
ZCA9IFt0ZXN0X3NoZWxsX2JpbmFyeV0KKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLndyYXBw
ZXI6CisgICAgICAgICAgICAjIFRoaXMgc3BsaXQoKSBpc24ndCByZWFsbHkgd2hhdCB3ZSB3YW50
IC0tIGl0IGluY29ycmVjdGx5IHdpbGwKKyAgICAgICAgICAgICMgc3BsaXQgcXVvdGVkIHN0cmlu
Z3Mgd2l0aGluIHRoZSB3cmFwcGVyIGFyZ3VtZW50IC0tIGJ1dCBpbgorICAgICAgICAgICAgIyBw
cmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0taGVscCBvdXRwdXQgd2FybnMK
KyAgICAgICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgorICAgICAgICAgICAgdGVzdF9zaGVsbF9j
b21tYW5kID0gKHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgpICsKKyAgICAgICAgICAgICAg
ICB0ZXN0X3NoZWxsX2NvbW1hbmQpCisKKyAgICAgICAgZmlsZW5hbWVfcXVldWUgPSBzZWxmLl9n
ZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmlsZXMpCisKKyAgICAgICAgIyBJbnN0YW50aWF0ZSBU
ZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgorICAgICAgICB0aHJlYWRzID0gW10KKyAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKGludChzZWxmLl9vcHRpb25zLm51bV90ZXN0X3NoZWxscykp
OgorICAgICAgICAgICAgIyBDcmVhdGUgc2VwYXJhdGUgVGVzdFR5cGVzIGluc3RhbmNlcyBmb3Ig
ZWFjaCB0aHJlYWQuCisgICAgICAgICAgICB0ZXN0X3R5cGVzID0gW10KKyAgICAgICAgICAgIGZv
ciB0IGluIHNlbGYuX3Rlc3RfdHlwZXM6CisgICAgICAgICAgICAgICAgdGVzdF90eXBlcy5hcHBl
bmQodChzZWxmLl9vcHRpb25zLnBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCisKKyAgICAgICAgICAg
IHRlc3RfYXJncywgc2hlbGxfYXJncyA9IHNlbGYuX2dldF90ZXN0X3NoZWxsX2FyZ3MoaSkKKyAg
ICAgICAgICAgIHRocmVhZCA9IHRlc3Rfc2hlbGxfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChmaWxl
bmFtZV9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5kLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdHlw
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNoZWxsX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucykKKyAgICAgICAgICAgIGlmIHNl
bGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgorICAgICAgICAgICAgICAgIHRocmVhZC5ydW5faW5f
bWFpbl90aHJlYWQoc2VsZiwgcmVzdWx0X3N1bW1hcnkpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0
aHJlYWQpCisKKyAgICAgICAgcmV0dXJuIHRocmVhZHMKKworICAgIGRlZiBfc3RvcF9sYXlvdXRf
dGVzdF9oZWxwZXIoc2VsZiwgcHJvYyk6CisgICAgICAgICIiIlN0b3AgdGhlIGxheW91dCB0ZXN0
IGhlbHBlciBhbmQgY2xvc2VzIGl0IGRvd24uIiIiCisgICAgICAgIGlmIHByb2M6CisgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJTdG9wcGluZyBsYXlvdXQgdGVzdCBoZWxwZXIiKQorICAgICAg
ICAgICAgcHJvYy5zdGRpbi53cml0ZSgieFxuIikKKyAgICAgICAgICAgIHByb2Muc3RkaW4uY2xv
c2UoKQorICAgICAgICAgICAgcHJvYy53YWl0KCkKKworICAgIGRlZiBfaXNfc2luZ2xlX3RocmVh
ZGVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIHJ1biBhbGwg
dGhlIHRlc3RzIGluIHRoZSBtYWluIHRocmVhZC4iIiIKKyAgICAgICAgcmV0dXJuIGludChzZWxm
Ll9vcHRpb25zLm51bV90ZXN0X3NoZWxscykgPT0gMQorCisgICAgZGVmIF9ydW5fdGVzdHMoc2Vs
ZiwgdGVzdF9zaGVsbF9iaW5hcnksIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAg
ICAiIiJSdW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgorCisgICAgICAgIFJldHVybjog
QSB0dXBsZSAoZmFpbHVyZXMsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgICAgIGZhaWx1cmVzIGlzIGEg
bWFwIGZyb20gdGVzdCB0byBsaXN0IG9mIGZhaWx1cmUgdHlwZXMKKyAgICAgICAgICAgIHRocmVh
ZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0cyB3aXRoIHRoZSB0b3RhbCBydW50aW1lCisgICAg
ICAgICAgICAgIG9mIGVhY2ggdGhyZWFkIHdpdGggJ25hbWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFs
X3RpbWUnIHByb3BlcnRpZXMKKyAgICAgICAgICAgIHRlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2Yg
dGltaW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICBvZiB0
aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5X25hbWUsIG51bV90ZXN0c10KKyAgICAgICAgICAgIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVz
dAorICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVu
X3RpbWU6dGVzdF9ydW5fdGltZX0KKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5
IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCisgICAgICAgICIiIgorICAgICAg
ICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfdGVzdF9zaGVsbF90aHJlYWRzKHRlc3Rfc2hl
bGxfYmluYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbGVfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKKworICAgICAgICAjIFdhaXQgZm9yIHRoZSB0
aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29sbGVjdCB0ZXN0IGZhaWx1cmVzLgorICAgICAgICBmYWls
dXJlcyA9IHt9CisgICAgICAgIHRlc3RfdGltaW5ncyA9IHt9CisgICAgICAgIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzID0gW10KKyAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAg
d2hpbGUgdGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgIyBMZXQgaXQgdGlt
ZW91dCBvY2Nhc2lvbmFsbHkgc28gaXQgY2FuIG5vdGljZSBhCisgICAgICAgICAgICAgICAgICAg
ICMgS2V5Ym9hcmRJbnRlcnJ1cHQuIEFjdHVhbGx5LCB0aGUgdGltZW91dCBkb2Vzbid0CisgICAg
ICAgICAgICAgICAgICAgICMgcmVhbGx5IG1hdHRlcjogYXBwYXJlbnRseSBpdCBzdWZmaWNlcyB0
byBub3QgdXNlCisgICAgICAgICAgICAgICAgICAgICMgYW4gaW5kZWZpbml0ZSBibG9ja2luZyBq
b2luIGZvciBpdCB0bworICAgICAgICAgICAgICAgICAgICAjIGJlIGludGVycnVwdGlibGUgYnkg
S2V5Ym9hcmRJbnRlcnJ1cHQuCisgICAgICAgICAgICAgICAgICAgIHRocmVhZC5qb2luKDAuMSkK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkK
KyAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQoeyduYW1lJzogdGhyZWFkLmdl
dE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1fdGVz
dHMnOiB0aHJlYWQuZ2V0X251bV90ZXN0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCisgICAg
ICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVwZGF0ZSh0aHJlYWQuZ2V0X2RpcmVjdG9yeV90aW1p
bmdfc3RhdHMoKSkKKyAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5leHRl
bmQoCisgICAgICAgICAgICAgICAgICAgIHRocmVhZC5nZXRfaW5kaXZpZHVhbF90ZXN0X3N0YXRz
KCkpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGZvciB0
aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICB0aHJlYWQuY2FuY2VsKCkKKyAgICAg
ICAgICAgIHNlbGYuX3N0b3BfbGF5b3V0X3Rlc3RfaGVscGVyKGxheW91dF90ZXN0X2hlbHBlcl9w
cm9jKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgor
ICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIGEgVGVzdFNoZWxsVGhyZWFkIGRpZWQgYmVmb3Jl
IG5vcm1hbCBjb21wbGV0aW9uLgorICAgICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQu
Z2V0X2V4Y2VwdGlvbl9pbmZvKCkKKyAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlv
biBoZXJlIHRvIG1ha2UgaXQgY2xlYXIgdGhhdAorICAgICAgICAgICAgICAgICMgdGVzdGluZyB3
YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLCB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1bgorICAgICAg
ICAgICAgICAgICMgd291bGQgYmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgICAg
ICAgICByYWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlv
bl9pbmZvWzJdCisKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgcGljayB1cCBhbnkgcmVtYWluaW5n
IHRlc3RzLgorICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQorICAg
ICAgICByZXR1cm4gKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzKQorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAg
ICIiIlJ1biBhbGwgb3VyIHRlc3RzIG9uIGFsbCBvdXIgdGVzdCBmaWxlcy4KKworICAgICAgICBG
b3IgZWFjaCB0ZXN0IGZpbGUsIHdlIHJ1biBlYWNoIHRlc3QgdHlwZS4gSWYgdGhlcmUgYXJlIGFu
eSBmYWlsdXJlcywKKyAgICAgICAgd2UgY29sbGVjdCB0aGVtIGZvciByZXBvcnRpbmcuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogYSBzdW1tYXJ5IG9iamVjdCB0
cmFja2luZyB0aGUgdGVzdCByZXN1bHRzLgorCisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBX
ZSByZXR1cm4gbm9uemVybyBpZiB0aGVyZSBhcmUgcmVncmVzc2lvbnMgY29tcGFyZWQgdG8gdGhl
IGxhc3QgcnVuLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3Rlc3RfZmlsZXM6
CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkK
KyAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnkgPSBwYXRoX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChz
ZWxmLl9vcHRpb25zLnRhcmdldCkKKworICAgICAgICAjIFN0YXJ0IHVwIGFueSBoZWxwZXIgbmVl
ZGVkCisgICAgICAgIGxheW91dF90ZXN0X2hlbHBlcl9wcm9jID0gTm9uZQorICAgICAgICBpZiBu
b3Qgc2VsZi5fb3B0aW9ucy5ub19waXhlbF90ZXN0czoKKyAgICAgICAgICAgIGhlbHBlcl9wYXRo
ID0gcGF0aF91dGlscy5sYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCgKKyAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLnRhcmdldCkKKyAgICAgICAgICAgIGlmIGxlbihoZWxwZXJfcGF0aCk6Cisg
ICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgbGF5b3V0IGhlbHBlciAlcyIg
JSBoZWxwZXJfcGF0aCkKKyAgICAgICAgICAgICAgICBsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYyA9
IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICAgICAgICAgIFtoZWxwZXJfcGF0aF0sIHN0
ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nl
c3MuUElQRSwgc3RkZXJyPU5vbmUpCisgICAgICAgICAgICAgICAgaXNfcmVhZHkgPSBsYXlvdXRf
dGVzdF9oZWxwZXJfcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5v
dCBpc19yZWFkeS5zdGFydHN3aXRoKCdyZWFkeScpOgorICAgICAgICAgICAgICAgICAgICBsb2dn
aW5nLmVycm9yKCJsYXlvdXRfdGVzdF9oZWxwZXIgZmFpbGVkIHRvIGJlIHJlYWR5IikKKworICAg
ICAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9udHMs
IC4uLikgYXJlIGNvcnJlY3QuCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm5vY2hlY2tf
c3lzX2RlcHM6CisgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbdGVzdF9zaGVs
bF9iaW5hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1jaGVjay1s
YXlvdXQtdGVzdC1zeXMtZGVwcyJdKQorICAgICAgICAgICAgaWYgcHJvYy53YWl0KCkgIT0gMDoK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkFib3J0aW5nIGJlY2F1c2Ugc3lzdGVtIGRl
cGVuZGVuY2llcyBjaGVjayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQu
XG4gVG8gb3ZlcnJpZGUsIGludm9rZSB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIi0tbm9jaGVjay1zeXMtZGVwcyIpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKwor
ICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLkhUVFBfU1VCRElSKToKKyAgICAg
ICAgICAgIHNlbGYuX2h0dHBfc2VydmVyLnN0YXJ0KCkKKworICAgICAgICBpZiBzZWxmLl9jb250
YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9TVUJESVIpOgorICAgICAgICAgICAgc2VsZi5fd2Vi
c29ja2V0X3NlcnZlci5zdGFydCgpCisgICAgICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1
cmVfc2VydmVyLlN0YXJ0KCkKKworICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdz
LCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9ICgKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0
cyh0ZXN0X3NoZWxsX2JpbmFyeSwgc2VsZi5fdGVzdF9maWxlc19saXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpKQorCisgICAgICAgICMgV2UgZXhjbHVkZSB0
aGUgY3Jhc2hlcyBmcm9tIHRoZSBsaXN0IG9mIHJlc3VsdHMgdG8gcmV0cnksIGJlY2F1c2UKKyAg
ICAgICAgIyB3ZSB3YW50IHRvIHRyZWF0IGV2ZW4gYSBwb3RlbnRpYWxseSBmbGFreSBjcmFzaCBh
cyBhbiBlcnJvci4KKyAgICAgICAgZmFpbHVyZXMgPSBzZWxmLl9nZXRfZmFpbHVyZXMocmVzdWx0
X3N1bW1hcnksIGluY2x1ZGVfY3Jhc2hlcz1GYWxzZSkKKyAgICAgICAgcmV0cmllcyA9IDAKKyAg
ICAgICAgcmV0cnlfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHdoaWxlIChyZXRy
aWVzIDwgc2VsZi5OVU1fUkVUUllfT05fVU5FWFBFQ1RFRF9GQUlMVVJFIGFuZAorICAgICAgICAg
ICAgICAgbGVuKGZhaWx1cmVzKSk6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJSZXRyeWlu
ZyAlZCB1bmV4cGVjdGVkIGZhaWx1cmUocykiICUgbGVuKGZhaWx1cmVzKSkKKyAgICAgICAgICAg
IHJldHJpZXMgKz0gMQorICAgICAgICAgICAgcmV0cnlfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnko
c2VsZi5fZXhwZWN0YXRpb25zLCBmYWlsdXJlcy5rZXlzKCkpCisgICAgICAgICAgICBzZWxmLl9y
dW5fdGVzdHModGVzdF9zaGVsbF9iaW5hcnksIGZhaWx1cmVzLmtleXMoKSwgcmV0cnlfc3VtbWFy
eSkKKyAgICAgICAgICAgIGZhaWx1cmVzID0gc2VsZi5fZ2V0X2ZhaWx1cmVzKHJldHJ5X3N1bW1h
cnksIGluY2x1ZGVfY3Jhc2hlcz1UcnVlKQorCisgICAgICAgIHNlbGYuX3N0b3BfbGF5b3V0X3Rl
c3RfaGVscGVyKGxheW91dF90ZXN0X2hlbHBlcl9wcm9jKQorICAgICAgICBlbmRfdGltZSA9IHRp
bWUudGltZSgpCisKKyAgICAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIoc2VsZi5f
b3B0aW9ucywgJ3RpbWluZycpCisgICAgICAgIHNlbGYuX3ByaW50X3RpbWluZ19zdGF0aXN0aWNz
KHdyaXRlLCBlbmRfdGltZSAtIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKKworICAgICAgICBzZWxm
Ll9tZXRlci51cGRhdGUoIiIpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgor
ICAgICAgICAgICAgIyBXZSB3cml0ZSB0aGlzIGJsb2NrIHRvIHN0ZG91dCBmb3IgY29tcGF0aWJp
bGl0eSB3aXRoIHRoZQorICAgICAgICAgICAgIyBidWlsZGJvdCBsb2cgcGFyc2VyLCB3aGljaCBv
bmx5IGxvb2tzIGF0IHN0ZG91dCwgbm90IHN0ZGVyciA6KAorICAgICAgICAgICAgd3JpdGUgPSBs
YW1iZGEgczogc3lzLnN0ZG91dC53cml0ZSgiJXNcbiIgJSBzKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ2Fj
dHVhbCcpCisKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkod3JpdGUsIHJlc3Vs
dF9zdW1tYXJ5KQorCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3Rk
ZXJyLmZsdXNoKCkKKworICAgICAgICBpZiAoTE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYu
X29wdGlvbnMubG9nIG9yCisgICAgICAgICAgICAoTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0
aW9ucy5sb2cgYW5kCisgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudG90YWwgIT0gcmVzdWx0
X3N1bW1hcnkuZXhwZWN0ZWQpKToKKyAgICAgICAgICAgIHByaW50CisKKyAgICAgICAgIyBUaGlz
IHN1bW1hcnkgZGF0YSBnZXRzIHdyaXR0ZW4gdG8gc3Rkb3V0IHJlZ2FyZGxlc3Mgb2YgbG9nIGxl
dmVsCisgICAgICAgIHNlbGYuX3ByaW50X29uZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1bW1hcnku
dG90YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnku
ZXhwZWN0ZWQpCisKKyAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gc2VsZi5fc3VtbWFyaXpl
X3VuZXhwZWN0ZWRfcmVzdWx0cyhyZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHJldHJ5X3N1
bW1hcnkpCisgICAgICAgIHNlbGYuX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1bmV4cGVjdGVk
X3Jlc3VsdHMpCisKKyAgICAgICAgIyBXcml0ZSB0aGUgc2FtZSBkYXRhIHRvIGxvZyBmaWxlcy4K
KyAgICAgICAgc2VsZi5fd3JpdGVfanNvbl9maWxlcyh1bmV4cGVjdGVkX3Jlc3VsdHMsIHJlc3Vs
dF9zdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncykKKworICAgICAgICAjIFdyaXRlIHRoZSBzdW1tYXJ5IHRvIGRpc2sgKHJlc3VsdHMu
aHRtbCkgYW5kIG1heWJlIG9wZW4gdGhlCisgICAgICAgICMgdGVzdF9zaGVsbCB0byB0aGlzIGZp
bGUuCisgICAgICAgIHdyb3RlX3Jlc3VsdHMgPSBzZWxmLl93cml0ZV9yZXN1bHRzX2h0bWxfZmls
ZShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMubm9zaG93X3Jl
c3VsdHMgYW5kIHdyb3RlX3Jlc3VsdHM6CisgICAgICAgICAgICBzZWxmLl9zaG93X3Jlc3VsdHNf
aHRtbF9maWxlKCkKKworICAgICAgICAjIElnbm9yZSBmbGFreSBmYWlsdXJlcyBhbmQgdW5leHBl
Y3RlZCBwYXNzZXMgc28gd2UgZG9uJ3QgdHVybiB0aGUKKyAgICAgICAgIyBib3QgcmVkIGZvciB0
aG9zZS4KKyAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWRfcmVzdWx0c1snbnVtX3JlZ3Jlc3Npb25z
J10KKworICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAg
ICAgICIiIlVwZGF0ZSB0aGUgc3VtbWFyeSB3aGlsZSBydW5uaW5nIHRlc3RzLiIiIgorICAgICAg
ICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICh0ZXN0LCBm
YWlsX2xpc3QpID0gc2VsZi5fcmVzdWx0X3F1ZXVlLmdldF9ub3dhaXQoKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHRlc3RfZmFpbHVyZXMuZGV0ZXJtaW5lX3Jlc3VsdF90eXBlKGZhaWxfbGlz
dCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVz
X2FuX2V4cGVjdGVkX3Jlc3VsdCh0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKKyAgICAgICAg
ICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQodGVzdCwgZmFpbF9saXN0LCByZXN1bHQsIGV4cGVj
dGVkKQorICAgICAgICAgICAgICAgIGlmIChMT0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5f
b3B0aW9ucy5sb2cgYW5kCisgICAgICAgICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLmV4cGVy
aW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgorICAgICAgICAgICAgICAgICAgICAgc2VsZi5faXNf
c2luZ2xlX3RocmVhZGVkKCkpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGlzcGxheV9k
ZXRhaWxlZF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXhwZWN0ZWQgYW5kIExPR19VTkVYUEVDVEVEIGlu
IHNlbGYuX29wdGlvbnMubG9nOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRf
dW5leHBlY3RlZF90ZXN0X3Jlc3VsdCh0ZXN0LCByZXN1bHQpCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2Rpc3BsYXlfb25lX2xpbmVfcHJvZ3Jlc3MocmVzdWx0X3N1bW1hcnkpCisgICAgICAg
ICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICBk
ZWYgX2Rpc3BsYXlfb25lX2xpbmVfcHJvZ3Jlc3Moc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgorICAg
ICAgICAiIiJEaXNwbGF5cyB0aGUgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgdGVzdCBydW4uIiIiCisg
ICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgiVGVzdGluZzogJWQgcmFuIGFzIGV4cGVjdGVkLCAl
ZCBkaWRuJ3QsICVkIGxlZnQiICUKKyAgICAgICAgICAgIChyZXN1bHRfc3VtbWFyeS5leHBlY3Rl
ZCwgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZCwKKyAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eS5yZW1haW5pbmcpKQorCisgICAgZGVmIF9kaXNwbGF5X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYs
IHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiRGlzcGxheSBkZXRhaWxlZCBwcm9ncmVzcyBv
dXRwdXQgd2hlcmUgd2UgcHJpbnQgdGhlIGRpcmVjdG9yeSBuYW1lCisgICAgICAgIGFuZCBvbmUg
ZG90IGZvciBlYWNoIGNvbXBsZXRlZCB0ZXN0LiBUaGlzIGlzIHRyaWdnZXJlZCBieQorICAgICAg
ICAiLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3MiLiIiIgorICAgICAgICBpZiBzZWxmLl9jdXJyZW50
X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpOgorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgbmV4dF90ZXN0ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYu
X2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1l
KAorICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVz
dCkpCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID09ICIiOgorICAgICAg
ICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIgJSAobmV4dF9kaXIpCisg
ICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IG5leHRfZGlyCisKKyAgICAgICAgd2hpbGUg
bmV4dF90ZXN0IGluIHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHM6CisgICAgICAgICAgICBpZiBuZXh0
X2RpciAhPSBzZWxmLl9jdXJyZW50X2RpcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53
cml0ZSgiJXNcbiIgJSAoc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIpKQorICAgICAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAuIiAlIChuZXh0X2RpcikKKyAg
ICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IG5leHRfZGlyCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyICs9ICIuIgor
CisgICAgICAgICAgICBpZiAobmV4dF90ZXN0IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRf
cmVzdWx0cyBhbmQKKyAgICAgICAgICAgICAgICBMT0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRp
b25zLmxvZyk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkudW5leHBl
Y3RlZF9yZXN1bHRzW25leHRfdGVzdF0KKyAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0
ZSgiJXNcbiIgJSBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikKKyAgICAgICAgICAgICAgICBz
ZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KG5leHRfdGVzdCwgcmVzdWx0KQorICAg
ICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgc2VsZi5f
Y3VycmVudF9kaXIKKworICAgICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciArPSAx
CisgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90
ZXN0X2ZpbGVzX2xpc3QpOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIG5l
eHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVy
XQorICAgICAgICAgICAgbmV4dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICAg
ICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisKKyAgICAg
ICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nOgorICAgICAgICAgICAgcmVtYWluX3N0ciA9
ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKQorICAgICAgICAgICAgc2VsZi5f
bWV0ZXIudXBkYXRlKCIlcyVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNl
bGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyLCByZW1haW5fc3RyKSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCIlc1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0cikpCisKKyAgICBkZWYgX2dldF9mYWlsdXJlcyhzZWxmLCByZXN1bHRfc3VtbWFyeSwg
aW5jbHVkZV9jcmFzaGVzKToKKyAgICAgICAgIiIiRmlsdGVycyBhIGRpY3Qgb2YgcmVzdWx0cyBh
bmQgcmV0dXJucyBvbmx5IHRoZSBmYWlsdXJlcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5OiB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdCBydW4KKyAgICAgICAgICBp
bmNsdWRlX2NyYXNoZXM6IHdoZXRoZXIgY3Jhc2hlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1
dC4KKyAgICAgICAgICAgIFdlIHVzZSBGYWxzZSB3aGVuIGZpbmRpbmcgdGhlIGxpc3Qgb2YgZmFp
bHVyZXMgdG8gcmV0cnkKKyAgICAgICAgICAgIHRvIHNlZSBpZiB0aGUgcmVzdWx0cyB3ZXJlIGZs
YWt5LiBBbHRob3VnaCB0aGUgY3Jhc2hlcyBtYXkgYWxzbyBiZQorICAgICAgICAgICAgZmxha3ks
IHdlIHRyZWF0IHRoZW0gYXMgaWYgdGhleSBhcmVuJ3Qgc28gdGhhdCB0aGV5J3JlIG5vdCBpZ25v
cmVkLgorICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIGEgZGljdCBvZiBmaWxlcyAtPiByZXN1
bHRzCisgICAgICAgICIiIgorICAgICAgICBmYWlsZWRfcmVzdWx0cyA9IHt9CisgICAgICAgIGZv
ciB0ZXN0LCByZXN1bHQgaW4gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzLml0ZXJp
dGVtcygpOgorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNT
IG9yCisgICAgICAgICAgICAgICAgcmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIIGFu
ZCBub3QgaW5jbHVkZV9jcmFzaGVzKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgZmFpbGVkX3Jlc3VsdHNbdGVzdF0gPSByZXN1bHQKKworICAgICAgICByZXR1cm4gZmFp
bGVkX3Jlc3VsdHMKKworICAgIGRlZiBfc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxm
LCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSk6CisgICAgICAgICIiIlN1bW1hcml6ZSBh
bnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KKworICAgICAgICBUT0RPKGRwcmFua2Up
OiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0dXJlIGludG8gYSBzZXBhcmF0ZSBjbGFzcz8KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9t
IGluaXRpYWwgdGVzdCBydW5zCisgICAgICAgICAgcmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmpl
Y3QgZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiByZXRyaWVkIHRlc3RzCisgICAgICAgIFJldHVybnM6
CisgICAgICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4
cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUKKyAgICAgICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2lu
ZyBmaWVsZHM6CisgICAgICAgICAgICAndmVyc2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEg
aW4gdGhpcyB2ZXJzaW9uKQorICAgICAgICAgICAgJ2ZpeGFibGUnOiAjIG9mIGZpeGFibGUgdGVz
dHMgKE5PVyAtIFBBU1MpCisgICAgICAgICAgICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0
cyAoTk9XICYgU0tJUFBFRCkKKyAgICAgICAgICAgICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5v
bi1mbGFreSBmYWlsdXJlcworICAgICAgICAgICAgJ251bV9mbGFreSc6ICMgb2YgZmxha3kgZmFp
bHVyZXMKKyAgICAgICAgICAgICdudW1fcGFzc2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3Nlcwor
ICAgICAgICAgICAgJ3Rlc3RzJzogYSBkaWN0IG9mIHRlc3RzIC0+IHsnZXhwZWN0ZWQnOiAnLi4u
JywgJ2FjdHVhbCc6ICcuLi4nfQorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0cyA9IHt9Cisg
ICAgICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9IDEKKworICAgICAgICB0YmUgPSByZXN1bHRfc3Vt
bWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbgorICAgICAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50
ZXN0c19ieV90aW1lbGluZQorICAgICAgICByZXN1bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rl
c3RfZXhwZWN0YXRpb25zLk5PV10gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdKQorICAgICAgICByZXN1bHRzWydza2lwcGVkJ10g
PSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKQorCisgICAgICAgIG51bV9w
YXNzZXMgPSAwCisgICAgICAgIG51bV9mbGFreSA9IDAKKyAgICAgICAgbnVtX3JlZ3Jlc3Npb25z
ID0gMAorICAgICAgICBrZXl3b3JkcyA9IHt9CisgICAgICAgIGZvciBrLCB2IGluIFRlc3RFeHBl
Y3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGtleXdv
cmRzW3ZdID0gay51cHBlcigpCisKKyAgICAgICAgdGVzdHMgPSB7fQorICAgICAgICBmb3IgZmls
ZW5hbWUsIHJlc3VsdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUg
b3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKKyAgICAgICAgICAgICMgd2hldGhlciBvciBub3QgaXQg
Y3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQpLAorICAgICAgICAg
ICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1bHQgbm90IGZsYWt5LgorICAgICAgICAg
ICAgdGVzdCA9IHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAg
ICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNf
c3RyaW5nKGZpbGVuYW1lKQorICAgICAgICAgICAgYWN0dWFsID0gW2tleXdvcmRzW3Jlc3VsdF1d
CisKKyAgICAgICAgICAgIGlmIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgorICAg
ICAgICAgICAgICAgIG51bV9wYXNzZXMgKz0gMQorICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0g
dGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6CisgICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25z
ICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90
IGluIHJldHJ5X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzOgorICAgICAgICAgICAgICAgICAg
ICBhY3R1YWwuZXh0ZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRp
b25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgZmls
ZW5hbWUpLnNwbGl0KCIgIikpCisgICAgICAgICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0g
cmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jlc3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAgICAg
ICAgICAgIGlmIHJlc3VsdCAhPSByZXRyeV9yZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBhY3R1YWwuYXBwZW5kKGtleXdvcmRzW3JldHJ5X3Jlc3VsdF0pCisgICAgICAgICAgICAgICAg
ICAgICAgICBudW1fZmxha3kgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKKworICAgICAgICAgICAgdGVz
dHNbdGVzdF0gPSB7fQorICAgICAgICAgICAgdGVzdHNbdGVzdF1bJ2V4cGVjdGVkJ10gPSBleHBl
Y3RlZAorICAgICAgICAgICAgdGVzdHNbdGVzdF1bJ2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFs
KQorCisgICAgICAgIHJlc3VsdHNbJ3Rlc3RzJ10gPSB0ZXN0cworICAgICAgICByZXN1bHRzWydu
dW1fcGFzc2VzJ10gPSBudW1fcGFzc2VzCisgICAgICAgIHJlc3VsdHNbJ251bV9mbGFreSddID0g
bnVtX2ZsYWt5CisgICAgICAgIHJlc3VsdHNbJ251bV9yZWdyZXNzaW9ucyddID0gbnVtX3JlZ3Jl
c3Npb25zCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGRlZiBfd3JpdGVfanNvbl9m
aWxlcyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgorICAgICAgICAiIiJXcml0
ZXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3QgcnVuIGFzIEpTT04gZmlsZXMgaW50byB0aGUgcmVz
dWx0cworICAgICAgICBkaXIuCisKKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBm
aWxlcyB3cml0dGVuIGludG8gdGhlIHJlc3VsdHMgZGlyOgorICAgICAgICAgIHVuZXhwZWN0ZWRf
cmVzdWx0cy5qc29uOiBBIHNob3J0IGxpc3Qgb2YgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cy4KKyAg
ICAgICAgICAgIFRoaXMgaXMgdXNlZCBieSB0aGUgYnVpbGRib3RzIHRvIGRpc3BsYXkgcmVzdWx0
cy4KKyAgICAgICAgICBleHBlY3RhdGlvbnMuanNvbjogVGhpcyBpcyB1c2VkIGJ5IHRoZSBmbGFr
aW5lc3MgZGFzaGJvYXJkLgorICAgICAgICAgIHJlc3VsdHMuanNvbjogQSBmdWxsIGxpc3Qgb2Yg
dGhlIHJlc3VsdHMgLSB1c2VkIGJ5IHRoZSBmbGFraW5lc3MKKyAgICAgICAgICAgIGRhc2hib2Fy
ZCBhbmQgdGhlIGFnZ3JlZ2F0ZSByZXN1bHRzIGRhc2hib2FyZC4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0czogZGljdCBvZiB1bmV4cGVjdGVkIHJlc3VsdHMK
KyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogZnVsbCBzdW1tYXJ5IG9iamVjdAorICAgICAgICAg
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBsaXN0IG9mIHRlc3QgdGltZXMgKHVzZWQgYnkgdGhl
IGZsYWtpbmVzcworICAgICAgICAgICAgZGFzaGJvYXJkKS4KKyAgICAgICAgIiIiCisgICAgICAg
IGxvZ2dpbmcuZGVidWcoIldyaXRpbmcgSlNPTiBmaWxlcyBpbiAlcy4iICUKKyAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICB1bmV4
cGVjdGVkX2ZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5LAorICAgICAgICAgICAgInVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uIiksICJ3IikKKyAg
ICAgICAgdW5leHBlY3RlZF9maWxlLndyaXRlKHNpbXBsZWpzb24uZHVtcHModW5leHBlY3RlZF9y
ZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydF9rZXlzPVRydWUsIGlu
ZGVudD0yKSkKKyAgICAgICAgdW5leHBlY3RlZF9maWxlLmNsb3NlKCkKKworICAgICAgICAjIFdy
aXRlIGEganNvbiBmaWxlIG9mIHRoZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgZmlsZSBmb3IgdGhl
IGxheW91dAorICAgICAgICAjIHRlc3RzIGRhc2hib2FyZC4KKyAgICAgICAgZXhwZWN0YXRpb25z
X2ZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
LAorICAgICAgICAgICAgImV4cGVjdGF0aW9ucy5qc29uIiksICJ3IikKKyAgICAgICAgZXhwZWN0
YXRpb25zX2pzb24gPSBcCisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVj
dGF0aW9uc19qc29uX2Zvcl9hbGxfcGxhdGZvcm1zKCkKKyAgICAgICAgZXhwZWN0YXRpb25zX2Zp
bGUud3JpdGUoIkFERF9FWFBFQ1RBVElPTlMoIiArIGV4cGVjdGF0aW9uc19qc29uICsgIik7IikK
KyAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUuY2xvc2UoKQorCisgICAgICAgIGpzb25fbGF5b3V0
X3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKAorICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5idWlsZGVyX25hbWUsIHNlbGYuX29wdGlvbnMuYnVpbGRfbmFtZSwK
KyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYnVpbGRfbnVtYmVyLCBzZWxmLl9vcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgQlVJTERFUl9CQVNFX1VSTCwgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMsIHJlc3VsdF9z
dW1tYXJ5LCBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zygi
RmluaXNoZWQgd3JpdGluZyBKU09OIGZpbGVzLiIpCisKKyAgICBkZWYgX3ByaW50X2V4cGVjdGVk
X3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlX3N0
cik6CisgICAgICAgICIiIlByaW50IHRoZSBudW1iZXIgb2YgdGhlIHRlc3RzIGluIGEgZ2l2ZW4g
cmVzdWx0IGNsYXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgd3JpdGU6IEEgY2FsbGJh
Y2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgorICAgICAgICAg
ICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgcmVzdWx0X3N1bW1hcnkgLSB0aGUgb2Jq
ZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHRzIHRvIHJlcG9ydCBvbgorICAgICAgICAgIHJl
c3VsdF90eXBlIC0gdGhlIHBhcnRpY3VsYXIgcmVzdWx0IHR5cGUgdG8gcmVwb3J0IGluIHRoZSBz
dW1tYXJ5LgorICAgICAgICAgIHJlc3VsdF90eXBlX3N0ciAtIGEgc3RyaW5nIGRlc2NyaXB0aW9u
IG9mIHRoZSByZXN1bHRfdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RzID0gc2VsZi5f
ZXhwZWN0YXRpb25zLmdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKHJlc3VsdF90eXBlKQorICAg
ICAgICBub3cgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0ZXN0X2V4cGVjdGF0
aW9ucy5OT1ddCisgICAgICAgIHdvbnRmaXggPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1l
bGluZVt0ZXN0X2V4cGVjdGF0aW9ucy5XT05URklYXQorICAgICAgICBkZWZlciA9IHJlc3VsdF9z
dW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3Rlc3RfZXhwZWN0YXRpb25zLkRFRkVSXQorCisgICAg
ICAgICMgV2UgdXNlIGEgZmFuY3kgZm9ybWF0IHN0cmluZyBpbiBvcmRlciB0byBwcmludCB0aGUg
ZGF0YSBvdXQgaW4gYQorICAgICAgICAjIG5pY2VseS1hbGlnbmVkIHRhYmxlLgorICAgICAgICBm
bXRzdHIgPSAoIkV4cGVjdDogJSU1ZCAlJS04cyAoJSUlZGQgbm93LCAlJSVkZCBkZWZlciwgJSUl
ZGQgd29udGZpeCkiCisgICAgICAgICAgICAgICAgICAlIChzZWxmLl9udW1fZGlnaXRzKG5vdyks
IHNlbGYuX251bV9kaWdpdHMoZGVmZXIpLAorICAgICAgICAgICAgICAgICAgc2VsZi5fbnVtX2Rp
Z2l0cyh3b250Zml4KSkpCisgICAgICAgIHdyaXRlKGZtdHN0ciAlIChsZW4odGVzdHMpLCByZXN1
bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5vdyksCisgICAgICAgICAgICAgIGxlbih0ZXN0cyAm
IGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZpeCkpKQorCisgICAgZGVmIF9udW1fZGlnaXRzKHNl
bGYsIG51bSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBkaWdpdHMgbmVlZGVk
IHRvIHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9mIGEKKyAgICAgICAgc2VxdWVuY2UuIiIiCisgICAg
ICAgIG5kaWdpdHMgPSAxCisgICAgICAgIGlmIGxlbihudW0pOgorICAgICAgICAgICAgbmRpZ2l0
cyA9IGludChtYXRoLmxvZzEwKGxlbihudW0pKSkgKyAxCisgICAgICAgIHJldHVybiBuZGlnaXRz
CisKKyAgICBkZWYgX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHNlbGYsIHdyaXRlLCB0b3RhbF90
aW1lLCB0aHJlYWRfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJl
Y3RvcnlfdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJlY29yZCB0
aW1pbmctc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4s
IGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAg
ICAgICAgICB0b3RhbF90aW1lOiB0b3RhbCBlbGFwc2VkIHRpbWUgKGluIHNlY29uZHMpIGZvciB0
aGUgdGVzdCBydW4KKyAgICAgICAgICB0aHJlYWRfdGltaW5nczogd2FsbCBjbG9jayB0aW1lIGVh
Y2ggdGhyZWFkIHJhbiBmb3IKKyAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzOiB0aW1p
bmcgYnkgZGlyZWN0b3J5CisgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IHRpbWlu
ZyBieSBmaWxlCisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0
aGUgdGVzdCBydW4KKyAgICAgICAgIiIiCisgICAgICAgIHdyaXRlKCJUZXN0IHRpbWluZzoiKQor
ICAgICAgICB3cml0ZSgiICAlNi4yZiB0b3RhbCB0ZXN0aW5nIHRpbWUiICUgdG90YWxfdGltZSkK
KyAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHdyaXRlKCJUaHJlYWQgdGltaW5nOiIpCisgICAg
ICAgIGN1bWxfdGltZSA9IDAKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkX3RpbWluZ3M6CisgICAg
ICAgICAgICB3cml0ZSgiICAgICUxMHM6ICU1ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQorICAgICAg
ICAgICAgICAgICAgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUnXSkp
CisgICAgICAgICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSddCisgICAgICAgIHdyaXRl
KCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlCisgICAgICAgICAgICAgIChj
dW1sX3RpbWUsIGN1bWxfdGltZSAvIGludChzZWxmLl9vcHRpb25zLm51bV90ZXN0X3NoZWxscykp
KQorICAgICAgICB3cml0ZSgiIikKKworICAgICAgICBzZWxmLl9wcmludF9hZ2dyZWdhdGVfdGVz
dF9zdGF0aXN0aWNzKHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2Vs
Zi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5KQorICAgICAgICBzZWxmLl9wcmludF9kaXJlY3RvcnlfdGltaW5ncyh3cml0ZSwgZGly
ZWN0b3J5X3Rlc3RfdGltaW5ncykKKworICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3Rh
dGlzdGljcyhzZWxmLCB3cml0ZSwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgorICAgICAgICAi
IiJQcmludHMgYWdncmVnYXRlIHN0YXRpc3RpY3MgKGUuZy4gbWVkaWFuLCBtZWFuLCBldGMuKSBm
b3IgYWxsIHRlc3RzLgorICAgICAgICBBcmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNr
IHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAg
ICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczog
TGlzdCBvZiB0ZXN0X3NoZWxsX3RocmVhZC5UZXN0U3RhdHMgZm9yIGFsbAorICAgICAgICAgICAg
ICB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfdHlwZXMgPSBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5nc1swXS50aW1lX2Zvcl9kaWZmcy5rZXlzKCkKKyAgICAgICAgdGltZXNfZm9yX3Rl
c3Rfc2hlbGwgPSBbXQorICAgICAgICB0aW1lc19mb3JfZGlmZl9wcm9jZXNzaW5nID0gW10KKyAg
ICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZSA9IHt9CisgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4g
dGVzdF90eXBlczoKKyAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXSA9
IFtdCisKKyAgICAgICAgZm9yIHRlc3Rfc3RhdHMgaW4gaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6
CisgICAgICAgICAgICB0aW1lc19mb3JfdGVzdF9zaGVsbC5hcHBlbmQodGVzdF9zdGF0cy50ZXN0
X3J1bl90aW1lKQorICAgICAgICAgICAgdGltZXNfZm9yX2RpZmZfcHJvY2Vzc2luZy5hcHBlbmQo
CisgICAgICAgICAgICAgICAgdGVzdF9zdGF0cy50b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMpCisg
ICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcyA9IHRlc3Rfc3RhdHMudGltZV9mb3JfZGlmZnMKKyAg
ICAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoKKyAgICAgICAgICAgICAgICB0
aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlwZV0uYXBwZW5kKAorICAgICAgICAgICAgICAgICAg
ICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGVdKQorCisgICAgICAgIHNlbGYuX3ByaW50X3N0YXRp
c3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAgICAgICJQRVIgVEVTVCBUSU1F
IElOIFRFU1RTSEVMTCAoc2Vjb25kcyk6IiwgdGltZXNfZm9yX3Rlc3Rfc2hlbGwpCisgICAgICAg
IHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAg
ICAgICJQRVIgVEVTVCBESUZGIFBST0NFU1NJTkcgVElNRVMgKHNlY29uZHMpOiIsCisgICAgICAg
ICAgICB0aW1lc19mb3JfZGlmZl9wcm9jZXNzaW5nKQorICAgICAgICBmb3IgdGVzdF90eXBlIGlu
IHRlc3RfdHlwZXM6CisgICAgICAgICAgICBzZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0
X3RpbWluZ3Mod3JpdGUsCisgICAgICAgICAgICAgICAgIlBFUiBURVNUIFRJTUVTIEJZIFRFU1Qg
VFlQRTogJXMiICUgdGVzdF90eXBlLAorICAgICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5
cGVbdGVzdF90eXBlXSkKKworICAgIGRlZiBfcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHNl
bGYsIHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlByaW50cyB0aGUgcnVu
IHRpbWVzIGZvciBzbG93LCB0aW1lb3V0IGFuZCBjcmFzaCB0ZXN0cy4KKyAgICAgICAgQXJnczoK
KyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExv
Z2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAg
ICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IExpc3Qgb2YgdGVzdF9zaGVsbF90aHJlYWQuVGVz
dFN0YXRzIGZvciBhbGwKKyAgICAgICAgICAgICAgdGVzdHMuCisgICAgICAgICAgcmVzdWx0X3N1
bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0ZXN0IHJ1bgorICAgICAgICAiIiIKKyAgICAgICAg
IyBSZXZlcnNlLXNvcnQgYnkgdGhlIHRpbWUgc3BlbnQgaW4gdGVzdF9zaGVsbC4KKyAgICAgICAg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Muc29ydChsYW1iZGEgYSwgYjoKKyAgICAgICAgICAgIGNt
cChiLnRlc3RfcnVuX3RpbWUsIGEudGVzdF9ydW5fdGltZSkpCisKKyAgICAgICAgbnVtX3ByaW50
ZWQgPSAwCisgICAgICAgIHNsb3dfdGVzdHMgPSBbXQorICAgICAgICB0aW1lb3V0X29yX2NyYXNo
X3Rlc3RzID0gW10KKyAgICAgICAgdW5leHBlY3RlZF9zbG93X3Rlc3RzID0gW10KKyAgICAgICAg
Zm9yIHRlc3RfdHVwbGUgaW4gaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6CisgICAgICAgICAgICBm
aWxlbmFtZSA9IHRlc3RfdHVwbGUuZmlsZW5hbWUKKyAgICAgICAgICAgIGlzX3RpbWVvdXRfY3Jh
c2hfb3Jfc2xvdyA9IEZhbHNlCisgICAgICAgICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnMuaGFz
X21vZGlmaWVyKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKToKKyAgICAgICAgICAgICAgICBpc190
aW1lb3V0X2NyYXNoX29yX3Nsb3cgPSBUcnVlCisgICAgICAgICAgICAgICAgc2xvd190ZXN0cy5h
cHBlbmQodGVzdF90dXBsZSkKKworICAgICAgICAgICAgaWYgZmlsZW5hbWUgaW4gcmVzdWx0X3N1
bW1hcnkuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnku
cmVzdWx0c1tmaWxlbmFtZV0KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IHRlc3RfZXhw
ZWN0YXRpb25zLlRJTUVPVVQgb3IKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID09IHRlc3Rf
ZXhwZWN0YXRpb25zLkNSQVNIKToKKyAgICAgICAgICAgICAgICAgICAgaXNfdGltZW91dF9jcmFz
aF9vcl9zbG93ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rl
c3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQorCisgICAgICAgICAgICBpZiAobm90IGlzX3RpbWVvdXRf
Y3Jhc2hfb3Jfc2xvdyBhbmQKKyAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA8IHNlbGYuX29w
dGlvbnMubnVtX3Nsb3dfdGVzdHNfdG9fbG9nKToKKyAgICAgICAgICAgICAgICBudW1fcHJpbnRl
ZCA9IG51bV9wcmludGVkICsgMQorICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRfc2xvd190ZXN0
cy5hcHBlbmQodGVzdF90dXBsZSkKKworICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5f
cHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0ZSwgIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUg
bm90ICIKKyAgICAgICAgICAgICJtYXJrZWQgYXMgU0xPVyBhbmQgZGlkIG5vdCB0aW1lb3V0L2Ny
YXNoOiIgJQorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5udW1fc2xvd190ZXN0c190b19sb2cs
IHVuZXhwZWN0ZWRfc2xvd190ZXN0cykKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYu
X3ByaW50X3Rlc3RfbGlzdF90aW1pbmcod3JpdGUsICJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMpCisgICAgICAg
IHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAi
VGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jhc2hlZDoiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVvdXRfb3JfY3Jhc2hfdGVzdHMpCisgICAgICAgIHdyaXRlKCIi
KQorCisgICAgZGVmIF9wcmludF90ZXN0X2xpc3RfdGltaW5nKHNlbGYsIHdyaXRlLCB0aXRsZSwg
dGVzdF9saXN0KToKKyAgICAgICAgIiIiUHJpbnQgdGltaW5nIGluZm8gZm9yIGVhY2ggdGVzdC4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGlu
Zm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91
dC53cml0ZS4KKyAgICAgICAgICB0aXRsZTogc2VjdGlvbiBoZWFkaW5nCisgICAgICAgICAgdGVz
dF9saXN0OiB0ZXN0cyB0aGF0IGZhbGwgaW4gdGhpcyBzZWN0aW9uCisgICAgICAgICIiIgorICAg
ICAgICB3cml0ZSh0aXRsZSkKKyAgICAgICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF9saXN0Ogor
ICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X3R1cGxlLmZpbGVuYW1lW2xlbigKKyAgICAgICAg
ICAgICAgICBwYXRoX3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0KKyAgICAgICAgICAg
IGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpCisgICAgICAgICAgICB0ZXN0
X3J1bl90aW1lID0gcm91bmQodGVzdF90dXBsZS50ZXN0X3J1bl90aW1lLCAxKQorICAgICAgICAg
ICAgd3JpdGUoIiAgJXMgdG9vayAlcyBzZWNvbmRzIiAlIChmaWxlbmFtZSwgdGVzdF9ydW5fdGlt
ZSkpCisKKyAgICBkZWYgX3ByaW50X2RpcmVjdG9yeV90aW1pbmdzKHNlbGYsIHdyaXRlLCBkaXJl
Y3RvcnlfdGVzdF90aW1pbmdzKToKKyAgICAgICAgIiIiUHJpbnQgdGltaW5nIGluZm8gYnkgZGly
ZWN0b3J5IGZvciBhbnkgZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICB0YWtlID4gMTAgc2Vjb25k
cyB0byBydW4uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0
byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAg
IHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5nOiB0aW1l
IGluZm8gZm9yIGVhY2ggZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICB0aW1pbmdzID0g
W10KKyAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBkaXJlY3RvcnlfdGVzdF90aW1pbmdzOgorICAg
ICAgICAgICAgbnVtX3Rlc3RzLCB0aW1lX2Zvcl9kaXJlY3RvcnkgPSBkaXJlY3RvcnlfdGVzdF90
aW1pbmdzW2RpcmVjdG9yeV0KKyAgICAgICAgICAgIHRpbWluZ3MuYXBwZW5kKChyb3VuZCh0aW1l
X2Zvcl9kaXJlY3RvcnksIDEpLCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtX3Rlc3RzKSkKKyAgICAgICAgdGltaW5ncy5zb3J0KCkKKworICAgICAgICB3cml0ZSgi
VGltZSB0byBwcm9jZXNzIHNsb3dlc3Qgc3ViZGlyZWN0b3JpZXM6IikKKyAgICAgICAgbWluX3Nl
Y29uZHNfdG9fcHJpbnQgPSAxMAorICAgICAgICBmb3IgdGltaW5nIGluIHRpbWluZ3M6CisgICAg
ICAgICAgICBpZiB0aW1pbmdbMF0gPiBtaW5fc2Vjb25kc190b19wcmludDoKKyAgICAgICAgICAg
ICAgICB3cml0ZSgiICAlcyB0b29rICVzIHNlY29uZHMgdG8gcnVuICVzIHRlc3RzLiIgJSAodGlt
aW5nWzFdLAorICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ1swXSwgdGltaW5nWzJdKSkKKyAg
ICAgICAgd3JpdGUoIiIpCisKKyAgICBkZWYgX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGlt
aW5ncyhzZWxmLCB3cml0ZSwgdGl0bGUsIHRpbWluZ3MpOgorICAgICAgICAiIiJQcmludHMgdGhl
IG1lZGlhbiwgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSB2YWx1ZXMgaW4KKyAg
ICAgICAgdGltaW5ncy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxi
YWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAg
ICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgICB0aXRsZTogVGl0bGUgZm9yIHRoZXNl
IHRpbWluZ3MuCisgICAgICAgICAgdGltaW5nczogQSBsaXN0IG9mIGZsb2F0cyByZXByZXNlbnRp
bmcgdGltZXMuCisgICAgICAgICIiIgorICAgICAgICB3cml0ZSh0aXRsZSkKKyAgICAgICAgdGlt
aW5ncy5zb3J0KCkKKworICAgICAgICBudW1fdGVzdHMgPSBsZW4odGltaW5ncykKKyAgICAgICAg
cGVyY2VudGlsZTkwID0gdGltaW5nc1tpbnQoLjkgKiBudW1fdGVzdHMpXQorICAgICAgICBwZXJj
ZW50aWxlOTkgPSB0aW1pbmdzW2ludCguOTkgKiBudW1fdGVzdHMpXQorCisgICAgICAgIGlmIG51
bV90ZXN0cyAlIDIgPT0gMToKKyAgICAgICAgICAgIG1lZGlhbiA9IHRpbWluZ3NbKChudW1fdGVz
dHMgLSAxKSAvIDIpIC0gMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvd2VyID0gdGlt
aW5nc1tudW1fdGVzdHMgLyAyIC0gMV0KKyAgICAgICAgICAgIHVwcGVyID0gdGltaW5nc1tudW1f
dGVzdHMgLyAyXQorICAgICAgICAgICAgbWVkaWFuID0gKGZsb2F0KGxvd2VyICsgdXBwZXIpKSAv
IDIKKworICAgICAgICBtZWFuID0gc3VtKHRpbWluZ3MpIC8gbnVtX3Rlc3RzCisKKyAgICAgICAg
Zm9yIHRpbWUgaW4gdGltaW5nczoKKyAgICAgICAgICAgIHN1bV9vZl9kZXZpYXRpb25zID0gbWF0
aC5wb3codGltZSAtIG1lYW4sIDIpCisKKyAgICAgICAgc3RkX2RldmlhdGlvbiA9IG1hdGguc3Fy
dChzdW1fb2ZfZGV2aWF0aW9ucyAvIG51bV90ZXN0cykKKyAgICAgICAgd3JpdGUoIiAgTWVkaWFu
OiAgICAgICAgICAlNi4zZiIgJSBtZWRpYW4pCisgICAgICAgIHdyaXRlKCIgIE1lYW46ICAgICAg
ICAgICAgJTYuM2YiICUgbWVhbikKKyAgICAgICAgd3JpdGUoIiAgOTB0aCBwZXJjZW50aWxlOiAl
Ni4zZiIgJSBwZXJjZW50aWxlOTApCisgICAgICAgIHdyaXRlKCIgIDk5dGggcGVyY2VudGlsZTog
JTYuM2YiICUgcGVyY2VudGlsZTk5KQorICAgICAgICB3cml0ZSgiICBTdGFuZGFyZCBkZXY6ICAg
ICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCisgICAgICAgIHdyaXRlKCIiKQorCisgICAgZGVmIF9w
cmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAg
ICAiIiJQcmludCBhIHNob3J0IHN1bW1hcnkgYWJvdXQgaG93IG1hbnkgdGVzdHMgcGFzc2VkLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5m
byB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVyKSBvcgorICAgICAgICAgICAgICBzeXMuc3Rkb3V0
LndyaXRlLgorICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBpbmZvcm1hdGlvbiB0byBsb2cKKyAg
ICAgICAgIiIiCisgICAgICAgIGZhaWxlZCA9IGxlbihyZXN1bHRfc3VtbWFyeS5mYWlsdXJlcykK
KyAgICAgICAgc2tpcHBlZCA9IGxlbigKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3Rz
X2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBdKQorICAgICAgICB0b3RhbCA9
IHJlc3VsdF9zdW1tYXJ5LnRvdGFsCisgICAgICAgIHBhc3NlZCA9IHRvdGFsIC0gZmFpbGVkIC0g
c2tpcHBlZAorICAgICAgICBwY3RfcGFzc2VkID0gMC4wCisgICAgICAgIGlmIHRvdGFsID4gMDoK
KyAgICAgICAgICAgIHBjdF9wYXNzZWQgPSBmbG9hdChwYXNzZWQpICogMTAwIC8gdG90YWwKKwor
ICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgd3JpdGUoIj0+IFJlc3VsdHM6ICVkLyVkIHRlc3Rz
IHBhc3NlZCAoJS4xZiUlKSIgJQorICAgICAgICAgICAgICAgICAgICAgKHBhc3NlZCwgdG90YWws
IHBjdF9wYXNzZWQpKQorICAgICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVz
dWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVz
dF9leHBlY3RhdGlvbnMuTk9XLCAiVGVzdHMgdG8gYmUgZml4ZWQgZm9yIHRoZSBjdXJyZW50IHJl
bGVhc2UiKQorCisgICAgICAgIHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRf
c3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0X2V4
cGVjdGF0aW9ucy5ERUZFUiwKKyAgICAgICAgICAgICJUZXN0cyB3ZSdsbCBmaXggaW4gdGhlIGZ1
dHVyZSBpZiB0aGV5IGZhaWwgKERFRkVSKSIpCisKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAg
IHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwK
KyAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLldPTlRGSVgsCisgICAgICAgICAgICAiVGVz
dHMgdGhhdCB3aWxsIG9ubHkgYmUgZml4ZWQgaWYgdGhleSBjcmFzaCAoV09OVEZJWCkiKQorCisg
ICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1
bW1hcnksIHRpbWVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZGluZyk6CisgICAgICAgICIiIlByaW50IGEgc3VtbWFyeSBibG9jayBvZiByZXN1bHRzIGZvciBh
IHBhcnRpY3VsYXIgdGltZWxpbmUgb2YgdGVzdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
IHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRl
cikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgICByZXN1bHRf
c3VtbWFyeTogc3VtbWFyeSB0byBwcmludCByZXN1bHRzIGZvcgorICAgICAgICAgIHRpbWVsaW5l
OiB0aGUgdGltZWxpbmUgdG8gcHJpbnQgcmVzdWx0cyBmb3IgKE5PVCwgV09OVEZJWCwgZXRjLikK
KyAgICAgICAgICBoZWFkaW5nOiBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHRpbWVsaW5l
CisgICAgICAgICIiIgorICAgICAgICB0b3RhbCA9IGxlbihyZXN1bHRfc3VtbWFyeS50ZXN0c19i
eV90aW1lbGluZVt0aW1lbGluZV0pCisgICAgICAgIG5vdF9wYXNzaW5nID0gKHRvdGFsIC0KKyAg
ICAgICAgICAgbGVuKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhw
ZWN0YXRpb25zLlBBU1NdICYKKyAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5
X3RpbWVsaW5lW3RpbWVsaW5lXSkpCisgICAgICAgIHdyaXRlKCI9PiAlcyAoJWQpOiIgJSAoaGVh
ZGluZywgbm90X3Bhc3NpbmcpKQorCisgICAgICAgIGZvciByZXN1bHQgaW4gVGVzdEV4cGVjdGF0
aW9uc0ZpbGUuRVhQRUNUQVRJT05fT1JERVI6CisgICAgICAgICAgICBpZiByZXN1bHQgPT0gdGVz
dF9leHBlY3RhdGlvbnMuUEFTUzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgcmVzdWx0cyA9IChyZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbltyZXN1bHRd
ICYKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxp
bmVbdGltZWxpbmVdKQorICAgICAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVY
UEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHRdCisgICAgICAgICAgICBpZiBub3RfcGFzc2lu
ZyBhbmQgbGVuKHJlc3VsdHMpOgorICAgICAgICAgICAgICAgIHBjdCA9IGxlbihyZXN1bHRzKSAq
IDEwMC4wIC8gbm90X3Bhc3NpbmcKKyAgICAgICAgICAgICAgICB3cml0ZSgiICAlNWQgJS0yNHMg
KCU0LjFmJSUpIiAlIChsZW4ocmVzdWx0cyksCisgICAgICAgICAgICAgICAgICAgICAgZGVzY1ts
ZW4ocmVzdWx0cykgIT0gMV0sIHBjdCkpCisKKyAgICBkZWYgX3ByaW50X29uZV9saW5lX3N1bW1h
cnkoc2VsZiwgdG90YWwsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBz
dW1tYXJ5IG9mIHRoZSB0ZXN0IHJ1biB0byBzdGRvdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICB0b3RhbDogdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1bgorICAgICAgICAgIGV4cGVjdGVk
OiBudW1iZXIgb2YgZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICAiIiIKKyAgICAgICAgdW5leHBl
Y3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKKyAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgorICAg
ICAgICAgICAgcHJpbnQgIkFsbCAlZCB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuIiAlIGV4cGVjdGVk
CisgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKKyAgICAgICAgICAgIHByaW50ICIxIHRlc3Qg
cmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6IiAlIHVuZXhwZWN0ZWQKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHByaW50ICIlZCB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoi
ICUgKGV4cGVjdGVkLAorICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQpCisKKyAgICBkZWYgX3By
aW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3VsdHMpOgorICAgICAg
ICAiIiJQcmludHMgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZv
cm0gdG8gc3Rkb3V0LiIiIgorICAgICAgICBwYXNzZXMgPSB7fQorICAgICAgICBmbGFreSA9IHt9
CisgICAgICAgIHJlZ3Jlc3Npb25zID0ge30KKworICAgICAgICBpZiBsZW4odW5leHBlY3RlZF9y
ZXN1bHRzWyd0ZXN0cyddKToKKyAgICAgICAgICAgIHByaW50ICIiCisKKyAgICAgICAgZm9yIHRl
c3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddLml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3BsaXQoIiAiKQorICAgICAg
ICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0KCIgIikKKyAgICAgICAg
ICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKKyAgICAgICAgICAgICAgICBpZiAnQ1JBU0gnIGlu
IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFz
c2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVk
IHRvIGNyYXNoLCBidXQgcGFzc2VkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3QpCisgICAgICAgICAgICAgICAgZWxpZiAnVElNRU9VVCcgaW4gZXhwZWN0
ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gdGlt
ZW91dCwgYnV0IHBhc3NlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBf
YWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGZhaWwsIGJ1dCBwYXNzZWQnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgIGVsaWYg
bGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAgICAgICAgICMgV2UgZ3JvdXAgZmxha3kgdGVzdHMg
YnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgorICAgICAgICAgICAgICAgIF9hZGRf
dG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0dWFsWzBdLCB0ZXN0KQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocmVncmVzc2lvbnMsIHJl
c3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisgICAgICAgIGlmIGxlbihwYXNzZXMpOgorICAgICAg
ICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAg
ICAgIHByaW50ICIlczogKCVkKSIgJSAoa2V5LCBsZW4odGVzdHMpKQorICAgICAgICAgICAgICAg
IHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAg
ICAgICAgICAgICAgICBwcmludCAiICAlcyIgJSB0ZXN0CisgICAgICAgICAgICAgICAgcHJpbnQK
KworICAgICAgICBpZiBsZW4oZmxha3kpOgorICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVz
dEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCisgICAgICAgICAgICBm
b3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCisgICAg
ICAgICAgICAgICAgcHJpbnQgIlVuZXhwZWN0ZWQgZmxha2luZXNzOiAlcyAoJWQpIiAlICgKKyAg
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKQorICAg
ICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorCisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4g
dGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVuZXhwZWN0ZWRfcmVzdWx0c1sn
dGVzdHMnXVt0ZXN0XQorICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVh
bCddLnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4
cGVjdGVkJ10uc3BsaXQoIiAiKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhw
ZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCisgICAgICAgICAgICAgICAg
ICAgIG5ld19leHBlY3RhdGlvbnNfbGlzdCA9IGxpc3Qoc2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0
ZWQpKQorICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyA9ICVzIiAlICh0ZXN0LCAiICIu
am9pbihuZXdfZXhwZWN0YXRpb25zX2xpc3QpKQorICAgICAgICAgICAgICAgIHByaW50CisKKyAg
ICAgICAgaWYgbGVuKHJlZ3Jlc3Npb25zKToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRl
c3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUworICAgICAgICAgICAg
Zm9yIGtleSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigp
XQorICAgICAgICAgICAgICAgIHByaW50ICJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICgl
ZCkiICUgKAorICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0
ZXN0cykpCisgICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCisgICAgICAgICAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICVzID0gJXMiICUg
KHRlc3QsIGtleSkKKyAgICAgICAgICAgICAgICBwcmludAorCisgICAgICAgIGlmIGxlbih1bmV4
cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFuZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAg
ICAgICAgICBwcmludCAiLSIgKiA3OAorCisgICAgZGVmIF9wcmludF91bmV4cGVjdGVkX3Rlc3Rf
cmVzdWx0KHNlbGYsIHRlc3QsIHJlc3VsdCk6CisgICAgICAgICIiIlByaW50cyBvbmUgdW5leHBl
Y3RlZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgorICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9u
c0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF1bMF0KKyAgICAgICAgc2VsZi5f
bWV0ZXIud3JpdGUoIiAgJXMgLT4gdW5leHBlY3RlZCAlc1xuIiAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIChwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdCksIGRlc2Mp
KQorCisgICAgZGVmIF93cml0ZV9yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRfc3VtbWFy
eSk6CisgICAgICAgICIiIldyaXRlIHJlc3VsdHMuaHRtbCB3aGljaCBpcyBhIHN1bW1hcnkgb2Yg
dGVzdHMgdGhhdCBmYWlsZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRfc3Vt
bWFyeTogYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzIDopCisKKyAgICAgICAgUmV0dXJuczoKKyAg
ICAgICAgICBUcnVlIGlmIGFueSByZXN1bHRzIHdlcmUgd3JpdHRlbiAoc2luY2UgZXhwZWN0ZWQg
ZmFpbHVyZXMgbWF5IGJlCisgICAgICAgICAgb21pdHRlZCkKKyAgICAgICAgIiIiCisgICAgICAg
ICMgdGVzdCBmYWlsdXJlcworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmZ1bGxfcmVzdWx0c19o
dG1sOgorICAgICAgICAgICAgdGVzdF9maWxlcyA9IHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzLmtl
eXMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdW5leHBlY3RlZF9mYWlsdXJlcyA9IHNl
bGYuX2dldF9mYWlsdXJlcyhyZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICBpbmNsdWRl
X2NyYXNoZXM9VHJ1ZSkKKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSB1bmV4cGVjdGVkX2ZhaWx1
cmVzLmtleXMoKQorICAgICAgICBpZiBub3QgbGVuKHRlc3RfZmlsZXMpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgb3V0X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYu
X29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVzdWx0cy5odG1sIikKKyAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKG91dF9maWxl
bmFtZSwgJ3cnKQorICAgICAgICAjIGhlYWRlcgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmZ1
bGxfcmVzdWx0c19odG1sOgorICAgICAgICAgICAgaDIgPSAiVGVzdCBGYWlsdXJlcyIKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGgyID0gIlVuZXhwZWN0ZWQgVGVzdCBGYWlsdXJlcyIKKyAg
ICAgICAgb3V0X2ZpbGUud3JpdGUoIjxodG1sPjxoZWFkPjx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1
bHRzICglKHRpbWUpcykiCisgICAgICAgICAgICAgICAgICAgICAgICI8L3RpdGxlPjwvaGVhZD48
Ym9keT48aDI+JShoMilzICglKHRpbWUpcyk8L2gyPlxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAlIHsnaDInOiBoMiwgJ3RpbWUnOiB0aW1lLmFzY3RpbWUoKX0pCisKKyAgICAgICAgdGVzdF9m
aWxlcy5zb3J0KCkKKyAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiB0ZXN0X2ZpbGVzOgorICAgICAg
ICAgICAgdGVzdF9mYWlsdXJlcyA9IHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzLmdldCh0ZXN0X2Zp
bGUsIFtdKQorICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjxwPjxhIGhyZWY9JyVzJz4lczwv
YT48YnIgLz5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGhfdXRpbHMuZmls
ZW5hbWVfdG9fdXJpKHRlc3RfZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9maWxlKSkpCisgICAgICAgICAg
ICBmb3IgZmFpbHVyZSBpbiB0ZXN0X2ZhaWx1cmVzOgorICAgICAgICAgICAgICAgIG91dF9maWxl
LndyaXRlKCImbmJzcDsmbmJzcDslczxici8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICUgZmFpbHVyZS5yZXN1bHRfaHRtbF9vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9maWxlKSkp
CisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiPC9wPlxuIikKKworICAgICAgICAjIGZvb3Rl
cgorICAgICAgICBvdXRfZmlsZS53cml0ZSgiPC9ib2R5PjwvaHRtbD5cbiIpCisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgX3Nob3dfcmVzdWx0c19odG1sX2ZpbGUoc2VsZik6CisgICAg
ICAgICIiIkxhdW5jaGVzIHRoZSB0ZXN0IHNoZWxsIG9wZW4gdG8gdGhlIHJlc3VsdHMuaHRtbCBw
YWdlLiIiIgorICAgICAgICByZXN1bHRzX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlc3VsdHMuaHRtbCIpCisgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3BhdGhf
dXRpbHMudGVzdF9zaGVsbF9wYXRoKHNlbGYuX29wdGlvbnMudGFyZ2V0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0aF91dGlscy5maWxlbmFtZV90b191cmkocmVzdWx0c19maWxlbmFt
ZSldKQorCisKK2RlZiBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZGljdCwga2V5LCB2YWx1ZSk6Cisg
ICAgZGljdC5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKKworCitkZWYgcmVhZF90
ZXN0X2ZpbGVzKGZpbGVzKToKKyAgICB0ZXN0cyA9IFtdCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6
CisgICAgICAgIGZvciBsaW5lIGluIG9wZW4oZmlsZSk6CisgICAgICAgICAgICBsaW5lID0gdGVz
dF9leHBlY3RhdGlvbnMuc3RyaXBfY29tbWVudHMobGluZSkKKyAgICAgICAgICAgIGlmIGxpbmU6
CisgICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKGxpbmUpCisgICAgcmV0dXJuIHRlc3RzCisK
KworZGVmIGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCBsb2dfb3B0aW9uKToKKyAgICAi
IiJSZXR1cm5zIGEgd3JpdGUoKSBmdW5jdGlvbiB0aGF0IHdpbGwgd3JpdGUgdGhlIHN0cmluZyB0
byBsb2dnaW5nLmluZm8oKQorICAgIGlmIGNvbXAgd2FzIHNwZWNpZmllZCBpbiAtLWxvZyBvciBp
ZiAtLXZlcmJvc2UgaXMgdHJ1ZS4gT3RoZXJ3aXNlIHRoZQorICAgIG1lc3NhZ2UgaXMgZHJvcHBl
ZC4KKworICAgIEFyZ3M6CisgICAgICBvcHRpb25zOiBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRp
b25zIGZyb20gb3B0cGFyc2UKKyAgICAgIGxvZ19vcHRpb246IG9wdGlvbiB0byBtYXRjaCBpbiBv
cHRpb25zLmxvZyBpbiBvcmRlciBmb3IgdGhlIG1lc3NhZ2VzCisgICAgICAgICAgdG8gYmUgbG9n
Z2VkIChlLmcuLCAnYWN0dWFsJyBvciAnZXhwZWN0ZWQnKQorICAgICIiIgorICAgIGlmIG9wdGlv
bnMudmVyYm9zZSBvciBsb2dfb3B0aW9uIGluIG9wdGlvbnMubG9nLnNwbGl0KCIsIik6CisgICAg
ICAgIHJldHVybiBsb2dnaW5nLmluZm8KKyAgICByZXR1cm4gbGFtYmRhIHN0cjogMQorCisKK2Rl
ZiBtYWluKG9wdGlvbnMsIGFyZ3MpOgorICAgICIiIlJ1biB0aGUgdGVzdHMuICBXaWxsIGNhbGwg
c3lzLmV4aXQgd2hlbiBjb21wbGV0ZS4KKworICAgIEFyZ3M6CisgICAgICBvcHRpb25zOiBhIGRp
Y3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgICAgIGFyZ3M6IGEgbGlzdCBvZiBz
dWIgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdG8gdGVzdAorICAgICIiIgorCisgICAgaWYgb3B0aW9u
cy5zb3VyY2VzOgorICAgICAgICBvcHRpb25zLnZlcmJvc2UgPSBUcnVlCisKKyAgICAjIFNldCB1
cCBvdXIgbG9nZ2luZyBmb3JtYXQuCisgICAgbWV0ZXIgPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVk
U3RyZWFtKG9wdGlvbnMudmVyYm9zZSwgc3lzLnN0ZGVycikKKyAgICBsb2dfZm10ID0gJyUobWVz
c2FnZSlzJworICAgIGxvZ19kYXRlZm10ID0gJyV5JW0lZCAlSDolTTolUycKKyAgICBsb2dfbGV2
ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZ19m
bXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubyktNGQgJShsZXZlbG5hbWUp
cyAnCisgICAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMnKQorICAgICAgICBsb2dfbGV2ZWwg
PSBsb2dnaW5nLkRFQlVHCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWws
IGZvcm1hdD1sb2dfZm10LCBkYXRlZm10PWxvZ19kYXRlZm10LAorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyZWFtPW1ldGVyKQorCisgICAgaWYgbm90IG9wdGlvbnMudGFyZ2V0OgorICAgICAg
ICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgb3B0aW9ucy50YXJnZXQgPSAiRGVidWci
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcHRpb25zLnRhcmdldCA9ICJSZWxlYXNlIgor
CisgICAgaWYgbm90IG9wdGlvbnMudXNlX2FwYWNoZToKKyAgICAgICAgb3B0aW9ucy51c2VfYXBh
Y2hlID0gc3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpCisKKyAgICBpZiBvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5LnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgIyBBc3N1bWUg
aXQncyBhbiBhYnNvbHV0ZSBwYXRoIGFuZCBub3JtYWxpemUuCisgICAgICAgIG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkgPSBwYXRoX3V0aWxzLmdldF9hYnNvbHV0ZV9wYXRoKAorICAgICAgICAg
ICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICBlbHNlOgorICAgICAgICAjIElmIGl0
J3MgYSByZWxhdGl2ZSBwYXRoLCBtYWtlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHJlbGF0aXZlIHRv
CisgICAgICAgICMgRGVidWcgb3IgUmVsZWFzZS4KKyAgICAgICAgYmFzZWRpciA9IHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcpCisgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJl
Y3RvcnkgPSBwYXRoX3V0aWxzLmdldF9hYnNvbHV0ZV9wYXRoKAorICAgICAgICAgICAgb3MucGF0
aC5qb2luKGJhc2VkaXIsIG9wdGlvbnMudGFyZ2V0LCBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
KSkKKworICAgIGlmIG9wdGlvbnMuY2xvYmJlcl9vbGRfcmVzdWx0czoKKyAgICAgICAgIyBKdXN0
IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90
aGVyCisgICAgICAgICMgZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5IGFyZSBleHBsaWNp
dGx5IHVzZWQgZm9yIGNyb3NzLXJ1bgorICAgICAgICAjIHRyYWNraW5nLgorICAgICAgICBwYXRo
ID0gb3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksICdMYXlvdXRUZXN0cycp
CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJt
dHJlZShwYXRoKQorCisgICAgIyBFbnN1cmUgcGxhdGZvcm0gaXMgdmFsaWQgYW5kIGZvcmNlIGl0
IHRvIHRoZSBmb3JtICdjaHJvbWl1bS08cGxhdGZvcm0+Jy4KKyAgICBvcHRpb25zLnBsYXRmb3Jt
ID0gcGF0aF91dGlscy5wbGF0Zm9ybV9uYW1lKG9wdGlvbnMucGxhdGZvcm0pCisKKyAgICBpZiBu
b3Qgb3B0aW9ucy5udW1fdGVzdF9zaGVsbHM6CisgICAgICAgICMgVE9ETyhvamFuKTogSW52ZXN0
aWdhdGUgcGVyZi9mbGFraW5lc3MgaW1wYWN0IG9mIHVzaW5nIG51bWNvcmVzICsgMS4KKyAgICAg
ICAgb3B0aW9ucy5udW1fdGVzdF9zaGVsbHMgPSBwbGF0Zm9ybV91dGlscy5nZXRfbnVtX2NvcmVz
KCkKKworICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25maWcn
KQorICAgIHdyaXRlKCJSdW5uaW5nICVzIHRlc3Rfc2hlbGxzIGluIHBhcmFsbGVsIiAlIG9wdGlv
bnMubnVtX3Rlc3Rfc2hlbGxzKQorCisgICAgaWYgbm90IG9wdGlvbnMudGltZV9vdXRfbXM6Cisg
ICAgICAgIGlmIG9wdGlvbnMudGFyZ2V0ID09ICJEZWJ1ZyI6CisgICAgICAgICAgICBvcHRpb25z
LnRpbWVfb3V0X21zID0gc3RyKDIgKiBUZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01T
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cihU
ZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQorCisgICAgb3B0aW9ucy5zbG93X3Rp
bWVfb3V0X21zID0gc3RyKDUgKiBpbnQob3B0aW9ucy50aW1lX291dF9tcykpCisgICAgd3JpdGUo
IlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cgdGVzdCB0aW1lb3V0OiAlcyIgJQorICAgICAgICAg
IChvcHRpb25zLnRpbWVfb3V0X21zLCBvcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpKQorCisgICAg
IyBJbmNsdWRlIGFsbCB0ZXN0cyBpZiBub25lIGFyZSBzcGVjaWZpZWQuCisgICAgbmV3X2FyZ3Mg
PSBbXQorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgaWYgYXJnIGFuZCBhcmcgIT0gJyc6
CisgICAgICAgICAgICBuZXdfYXJncy5hcHBlbmQoYXJnKQorCisgICAgcGF0aHMgPSBuZXdfYXJn
cworICAgIGlmIG5vdCBwYXRoczoKKyAgICAgICAgcGF0aHMgPSBbXQorICAgIGlmIG9wdGlvbnMu
dGVzdF9saXN0OgorICAgICAgICBwYXRocyArPSByZWFkX3Rlc3RfZmlsZXMob3B0aW9ucy50ZXN0
X2xpc3QpCisKKyAgICAjIENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0
IGFscmVhZHkgZXhpc3QuCisgICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgIG1ldGVyLnVwZGF0ZSgiR2F0aGVyaW5nIGZpbGVz
IC4uLiIpCisKKyAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIob3B0aW9ucywgbWV0ZXIpCisg
ICAgdGVzdF9ydW5uZXIuZ2F0aGVyX2ZpbGVfcGF0aHMocGF0aHMpCisKKyAgICBpZiBvcHRpb25z
LmxpbnRfdGVzdF9maWxlczoKKyAgICAgICAgIyBDcmVhdGluZyB0aGUgZXhwZWNhdGlvbnMgZm9y
IGVhY2ggcGxhdGZvcm0vdGFyZ2V0IHBhaXIgZG9lcyBhbGwgdGhlCisgICAgICAgICMgdGVzdCBs
aXN0IHBhcnNpbmcgYW5kIGVuc3VyZXMgaXQncyBjb3JyZWN0IHN5bnRheCAoZS5nLiBubyBkdXBl
cykuCisgICAgICAgIGZvciBwbGF0Zm9ybSBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5QTEFURk9S
TVM6CisgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm0s
IGlzX2RlYnVnX21vZGU9VHJ1ZSkKKyAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVj
dGF0aW9ucyhwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZT1GYWxzZSkKKyAgICAgICAgcHJpbnQgKCJJ
ZiB0aGVyZSBhcmUgbm8gZmFpbCBtZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsIHRoZW4g
dGhlICIKKyAgICAgICAgICAgICJsaW50IHN1Y2NlZWRlZC4iKQorICAgICAgICBzeXMuZXhpdCgw
KQorCisgICAgdHJ5OgorICAgICAgICB0ZXN0X3NoZWxsX2JpbmFyeV9wYXRoID0gcGF0aF91dGls
cy50ZXN0X3NoZWxsX3BhdGgob3B0aW9ucy50YXJnZXQpCisgICAgZXhjZXB0IHBhdGhfdXRpbHMu
UGF0aE5vdEZvdW5kOgorICAgICAgICBwcmludCAiXG5FUlJPUjogdGVzdF9zaGVsbCBpcyBub3Qg
Zm91bmQuIEJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBidWlsdCIKKyAgICAgICAgcHJpbnQgIml0IGFu
ZCB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgYnVpbGQuIFRoaXMgc2NyaXB0IgorICAg
ICAgICBwcmludCAid2lsbCBydW4gdGhlIFJlbGVhc2Ugb25lIGJ5IGRlZmF1bHQuIFVzZSAtLWRl
YnVnIHRvIHVzZSB0aGUiCisgICAgICAgIHByaW50ICJEZWJ1ZyBidWlsZC5cbiIKKyAgICAgICAg
c3lzLmV4aXQoMSkKKworICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMs
ICJjb25maWciKQorICAgIHdyaXRlKCJVc2luZyBwbGF0Zm9ybSAnJXMnIiAlIG9wdGlvbnMucGxh
dGZvcm0pCisgICAgd3JpdGUoIlBsYWNpbmcgdGVzdCByZXN1bHRzIGluICVzIiAlIG9wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpCisgICAgaWYgb3B0aW9ucy5uZXdfYmFzZWxpbmU6CisgICAgICAg
IHdyaXRlKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUKKyAgICAgICAgICAgICAgcGF0
aF91dGlscy5jaHJvbWl1bV9iYXNlbGluZV9wYXRoKG9wdGlvbnMucGxhdGZvcm0pKQorICAgIHdy
aXRlKCJVc2luZyAlcyBidWlsZCBhdCAlcyIgJSAob3B0aW9ucy50YXJnZXQsIHRlc3Rfc2hlbGxf
YmluYXJ5X3BhdGgpKQorICAgIGlmIG9wdGlvbnMubm9fcGl4ZWxfdGVzdHM6CisgICAgICAgIHdy
aXRlKCJOb3QgcnVubmluZyBwaXhlbCB0ZXN0cyIpCisgICAgd3JpdGUoIiIpCisKKyAgICBtZXRl
ci51cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCisgICAgdGVzdF9ydW5uZXIucGFy
c2VfZXhwZWN0YXRpb25zKG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMudGFyZ2V0ID09ICdEZWJ1
ZycpCisKKyAgICBtZXRlci51cGRhdGUoIlByZXBhcmluZyB0ZXN0cyAuLi4iKQorICAgIHdyaXRl
ID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICJleHBlY3RlZCIpCisgICAgcmVzdWx0
X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5wcmVwYXJlX2xpc3RzX2FuZF9wcmludF9vdXRwdXQod3Jp
dGUpCisKKyAgICBpZiAnY3lnd2luJyA9PSBzeXMucGxhdGZvcm06CisgICAgICAgIGxvZ2dpbmcu
d2FybigiIyIgKiA0MCkKKyAgICAgICAgbG9nZ2luZy53YXJuKCIjIFVORVhQRUNURUQgUFlUSE9O
IFZFUlNJT04iKQorICAgICAgICBsb2dnaW5nLndhcm4oIiMgVGhpcyBzY3JpcHQgc2hvdWxkIGJl
IHJ1biB1c2luZyB0aGUgdmVyc2lvbiBvZiBweXRob24iKQorICAgICAgICBsb2dnaW5nLndhcm4o
IiMgaW4gdGhpcmRfcGFydHkvcHl0aG9uXzI0LyIpCisgICAgICAgIGxvZ2dpbmcud2FybigiIyIg
KiA0MCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hl
IGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KKyAgICBjYWNoZWRpciA9IG9zLnBh
dGguc3BsaXQodGVzdF9zaGVsbF9iaW5hcnlfcGF0aClbMF0KKyAgICBjYWNoZWRpciA9IG9zLnBh
dGguam9pbihjYWNoZWRpciwgImNhY2hlIikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhjYWNoZWRp
cik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoY2FjaGVkaXIpCisKKyAgICB0ZXN0X3J1bm5lci5h
ZGRfdGVzdF90eXBlKHRleHRfZGlmZi5UZXN0VGV4dERpZmYpCisgICAgaWYgbm90IG9wdGlvbnMu
bm9fcGl4ZWxfdGVzdHM6CisgICAgICAgIHRlc3RfcnVubmVyLmFkZF90ZXN0X3R5cGUoaW1hZ2Vf
ZGlmZi5JbWFnZURpZmYpCisgICAgICAgIGlmIG9wdGlvbnMuZnV6enlfcGl4ZWxfdGVzdHM6Cisg
ICAgICAgICAgICB0ZXN0X3J1bm5lci5hZGRfdGVzdF90eXBlKGZ1enp5X2ltYWdlX2RpZmYuRnV6
enlJbWFnZURpZmYpCisKKyAgICBtZXRlci51cGRhdGUoIlN0YXJ0aW5nIC4uLiIpCisgICAgaGFz
X25ld19mYWlsdXJlcyA9IHRlc3RfcnVubmVyLnJ1bihyZXN1bHRfc3VtbWFyeSkKKworICAgIGxv
Z2dpbmcuZGVidWcoIkV4aXQgc3RhdHVzOiAlZCIgJSBoYXNfbmV3X2ZhaWx1cmVzKQorICAgIHN5
cy5leGl0KGhhc19uZXdfZmFpbHVyZXMpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToK
KyAgICAiIiJQcm92aWRlcyBhIGRlZmF1bHQgc2V0IG9mIGNvbW1hbmQgbGluZSBhcmdzLgorCisg
ICAgUmV0dXJucyBhIHR1cGxlIG9mIG9wdGlvbnMsIGFyZ3MgZnJvbSBvcHRwYXJzZSIiIgorICAg
IG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiIiwgIi0tbm8tcGl4ZWwtdGVzdHMiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSJkaXNhYmxlIHBpeGVsLXRvLXBpeGVsIFBORyBjb21w
YXJpc29ucyIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1mdXp6eS1waXhl
bC10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkFs
c28gdXNlIGZ1enp5IG1hdGNoaW5nIHRvIGNvbXBhcmUgcGl4ZWwgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0IG91dHB1dHMuIikKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oIiIsICItLXJlc3VsdHMtZGlyZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0ibGF5b3V0LXRlc3QtcmVzdWx0cyIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCByZXN1bHRzIGRpcmVjdG9yeSBzb3VyY2UgZGlyLCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlbGF0aXZlIHRvIERlYnVnIG9y
IFJlbGVhc2UiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbmV3LWJhc2Vs
aW5lIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ic2F2ZSBh
bGwgZ2VuZXJhdGVkIHJlc3VsdHMgYXMgbmV3IGJhc2VsaW5lcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIGludG8gdGhlIHBsYXRmb3JtIGRpcmVjdG9yeSwgb3ZlcndyaXRp
bmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGF0ZXZlcidzIGFscmVh
ZHkgdGhlcmUuIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW5vc2hvdy1y
ZXN1bHRzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iZG9uJ3QgbGF1bmNoIHRoZSB0ZXN0X3NoZWxsIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdpdGggcmVzdWx0cyBhZnRlciB0aGUgdGVzdHMg
YXJlIGRvbmUiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tZnVsbC1yZXN1
bHRzLWh0bWwiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJzaG93IGFsbCBmYWlsdXJlcyBpbiAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzLmh0bWwsIHJhdGhlciB0aGFuIG9ubHkgcmVn
cmVzc2lvbnMiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tY2xvYmJlci1v
bGQtcmVzdWx0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkNsb2JiZXJzIHRlc3QgcmVzdWx0cyBmcm9tICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZXZpb3VzIHJ1bnMuIikKKyAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWxpbnQtdGVzdC1maWxlcyIsIGFjdGlvbj0ic3Rv
cmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhl
bHA9Ik1ha2VzIHN1cmUgdGhlIHRlc3QgZmlsZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFyc2UgZm9yIGFsbCBjb25maWd1cmF0aW9ucy4gRG9lcyBub3QgcnVuIGFueSAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0cy4iKQorICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbigiIiwgIi0tZm9yY2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJSdW4gYWxsIHRlc3RzLCBldmVuIHRob3NlIG1hcmtlZCBTS0lQICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gdGhlIHRlc3QgbGlzdCIpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1udW0tdGVzdC1zaGVsbHMiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2YgdGVzdHNoZWxscyB0byBydW4g
aW4gcGFyYWxsZWwuIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXVzZS1h
cGFjaGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJXaGV0
aGVyIHRvIHVzZSBhcGFjaGUgaW5zdGVhZCBvZiBsaWdodHRwZC4iKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiIiwgIi0tdGltZS1vdXQtbXMiLCBkZWZhdWx0PU5vbmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNldCB0aGUgdGltZW91dCBmb3IgZWFjaCB0ZXN0
IikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJ1bi1zaW5nbHkiLCBhY3Rp
b249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gYSBzZXBhcmF0ZSB0
ZXN0X3NoZWxsIGZvciBlYWNoIHRlc3QiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigi
IiwgIi0tZGVidWciLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ1c2UgdGhlIGRlYnVnIGJpbmFyeSBpbnN0ZWFk
IG9mIHRoZSByZWxlYXNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYmlu
YXJ5IikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW51bS1zbG93LXRlc3Rz
LXRvLWxvZyIsIGRlZmF1bHQ9NTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
Ik51bWJlciBvZiBzbG93IHRlc3RzIHdob3NlIHRpbWluZ3MgIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0byBwcmludC4iKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bigiIiwgIi0tcGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJP
dmVycmlkZSB0aGUgcGxhdGZvcm0gZm9yIGV4cGVjdGVkIHJlc3VsdHMiKQorICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdGFyZ2V0IiwgZGVmYXVsdD0iIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0iU2V0IHRoZSBidWlsZCB0YXJnZXQgY29uZmlndXJhdGlv
biAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihvdmVycmlkZXMgLS1kZWJ1
ZykiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbG9nIiwgYWN0aW9uPSJz
dG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImRldGFpbGVkLXBy
b2dyZXNzLHVuZXhwZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJs
b2cgdmFyaW91cyB0eXBlcyBvZiBkYXRhLiBUaGUgcGFyYW0gc2hvdWxkIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIGJlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIGZy
b206ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjdHVhbCxjb25maWcsIiArIExP
R19ERVRBSUxFRF9QUk9HUkVTUyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsZXhw
ZWN0ZWQsdGltaW5nLCIgKyBMT0dfVU5FWFBFQ1RFRCArICIgIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiKGRlZmF1bHRzIHRvICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3MsdW5leHBlY3RlZCkiKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVkZSBk
ZWJ1Zy1sZXZlbCBsb2dnaW5nIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICIt
LXNvdXJjZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJzaG93IGV4cGVjdGVkIHJlc3VsdCBmaWxlIHBhdGggZm9yIGVhY2ggIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IChpbXBsaWVzIC0tdmVyYm9zZSki
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tc3RhcnR1cC1kaWFsb2ciLCBh
Y3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjcmVhdGUgYSBkaWFs
b2cgb24gdGVzdF9zaGVsbC5leGUgc3RhcnR1cCIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0
aW9uKCIiLCAiLS1ncC1mYXVsdC1lcnJvci1ib3giLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSJlbmFibGUgV2luZG93cyBHUCBmYXVsdCBlcnJvciBib3giKQor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0td3JhcHBlciIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9IndyYXBwZXIgY29tbWFuZCB0byBpbnNlcnQgYmVmb3Jl
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b2NhdGlvbnMgb2YgdGVz
dF9zaGVsbDsgb3B0aW9uIGlzIHNwbGl0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAib24gd2hpdGVzcGFjZSBiZWZvcmUgcnVubmluZy4gKEV4YW1wbGU6ICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiLS13cmFwcGVyPSd2YWxncmluZCAtLXNtYy1jaGVj
az1hbGwnKSIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS10ZXN0LWxpc3Qi
LCBhY3Rpb249ImFwcGVuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJl
YWQgbGlzdCBvZiB0ZXN0cyB0byBydW4gZnJvbSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWV0YXZhcj0iRklMRSIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIi
LCAiLS1ub2NoZWNrLXN5cy1kZXBzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0iRG9uJ3QgY2hlY2sgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIodGhlbWVzKSIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCIiLCAiLS1yYW5kb21pemUtb3JkZXIiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSgiUnVuIHRlc3RzIGluIHJhbmRvbSBvcmRlciAodXNl
ZnVsIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFja2luZyBk
b3duIGNvcnJ1cHRpb24pIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1y
dW4tY2h1bmsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJSdW4gYSBzcGVjaWZpZWQgY2h1bmsg
KG46bCksIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudGggb2Yg
bGVuIGwsIG9mIHRoZSBsYXlvdXQgdGVzdHMiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRp
b24oIiIsICItLXJ1bi1wYXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiUnVuIGEgc3BlY2lm
aWVkIHBhcnQgKG46bSksIHRoZSBudGggb2YgbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiBwYXJ0cywgb2YgdGhlIGxheW91dCB0ZXN0cyIpKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiIiwgIi0tYmF0Y2gtc2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0o
IlJ1biBhIHRoZSB0ZXN0cyBpbiBiYXRjaGVzIChuKSwgYWZ0ZXIgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZXZlcnkgbiB0ZXN0cywgdGhlIHRlc3Qgc2hlbGwgaXMgIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXVuY2hlZC4iKSkKKyAgICBv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWJ1aWxkZXItbmFtZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IkRVTU1ZX0JVSUxERVJfTkFNRSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJUaGUgbmFtZSBvZiB0aGUgYnVpbGRlciBzaG93
biBvbiB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2F0ZXJmYWxs
IHJ1bm5pbmcgdGhpcyBzY3JpcHQgZS5nLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJXZWJLaXQuIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1i
dWlsZC1uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iRFVNTVlf
QlVJTERfTkFNRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJUaGUgbmFt
ZSBvZiB0aGUgYnVpbGRlciB1c2VkIGluIGl0cyBwYXRoLCAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJlLmcuIHdlYmtpdC1yZWwuIikpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCIiLCAiLS1idWlsZC1udW1iZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PSJEVU1NWV9CVUlMRF9OVU1CRVIiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSgiVGhlIGJ1aWxkIG51bWJlciBvZiB0aGUgYnVpbGRlciBydW5uaW5nIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBzY3JpcHQuIikpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxs
ZWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBk
ZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gYWxs
IHRlc3RzIGluIHBhcmFsbGVsIikKKyAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdz
KGFyZ3MpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgb3B0aW9ucywgYXJncyA9
IHBhcnNlX2FyZ3MoKQorICAgIG1haW4ob3B0aW9ucywgYXJncykKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0cHV0X2Zvcm1hdHRl
ci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rfb3V0
cHV0X2Zvcm1hdHRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWU4
MDdjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdGVzdF9vdXRwdXRfZm9ybWF0dGVyLnB5CkBAIC0wLDAgKzEsMTI5IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1
bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCitUaGlzIGlzIGEg
c2NyaXB0IGZvciBnZW5lcmF0aW5nIGVhc2lseS12aWV3YWJsZSBjb21wYXJpc29ucyBvZiB0ZXh0
IGFuZCBwaXhlbAorZGlmZnMuCisiIiIKK2ltcG9ydCBvcHRwYXJzZQorCitmcm9tIGxheW91dF9w
YWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgZmFpbHVyZQorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgZmFpbHVyZV9maW5kZXIKK2Zy
b20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGZhaWx1cmVfZmluZGVyX3Rlc3QKK2Zyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IGh0bWxfZ2VuZXJhdG9yCisKK0RFRkFVTFRfQlVJTERFUiA9ICJXZWJr
aXQiCisKKworZGVmIG1haW4ob3B0aW9ucywgYXJncyk6CisKKyAgICBpZiBvcHRpb25zLnJ1bl90
ZXN0czoKKyAgICAgICAgZmZ0ID0gZmFpbHVyZV9maW5kZXJfdGVzdC5GYWlsdXJlRmluZGVyVGVz
dCgpCisgICAgICAgIHJldHVybiBmZnQucnVuVGVzdHMoKQorCisgICAgIyBUT0RPKGd3aWxzb24p
OiBBZGQgYSBjaGVjayB0aGF0IHZlcmlmaWVzIHRoZSBnaXZlbiBwbGF0Zm9ybSBleGlzdHMuCisK
KyAgICBmaW5kZXIgPSBmYWlsdXJlX2ZpbmRlci5GYWlsdXJlRmluZGVyKG9wdGlvbnMuYnVpbGRf
bnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cy5wbGF0Zm9ybV9idWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKG5vdCBvcHRpb25zLmluY2x1ZGVfZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZXN0X3JlZ2V4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vdXRwdXRfZGlyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KG9wdGlvbnMubWF4X2ZhaWx1
cmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
dmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMuYnVpbGRlcl9sb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zLmFyY2hpdmVfbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucy56aXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZXhwZWN0YXRpb25zX2ZpbGUpCisgICAgZmluZGVyLnVzZV9s
b2NhbF9iYXNlbGluZXMgPSBvcHRpb25zLmxvY2FsCisgICAgZmFpbHVyZV9saXN0ID0gZmluZGVy
LmdldF9mYWlsdXJlcygpCisKKyAgICBpZiBub3QgZmFpbHVyZV9saXN0OgorICAgICAgICBwcmlu
dCAiRGlkIG5vdCBmaW5kIGFueSBmYWlsdXJlcy4iCisgICAgICAgIHJldHVybgorCisgICAgZ2Vu
ZXJhdG9yID0gaHRtbF9nZW5lcmF0b3IuSFRNTEdlbmVyYXRvcihmYWlsdXJlX2xpc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm91dHB1dF9k
aXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kZXIu
YnVpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLnBsYXRmb3JtX2J1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobm90IG9wdGlvbnMuaW5jbHVkZV9leHBlY3RlZCkpCisgICAgZmlsZW5hbWUg
PSBnZW5lcmF0b3IuZ2VuZXJhdGVfaHRtbCgpCisKKyAgICBpZiBmaWxlbmFtZSBhbmQgb3B0aW9u
cy52ZXJib3NlOgorICAgICAgICBwcmludCAiRmlsZSBjcmVhdGVkIGF0ICVzIiAlIGZpbGVuYW1l
CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBh
cnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICIt
LXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJE
aXNwbGF5IGxvdHMgb2Ygb3V0cHV0LiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIt
aSIsICItLWluY2x1ZGUtZXhwZWN0ZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJJbmNsdWRlIGV4cGVjdGVkIGZhaWx1cmVzIGluIG91dHB1dCIpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXBsYXRmb3JtLWJ1aWxkZXIiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PURFRkFVTFRfQlVJTERFUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoZSBnaXZlbiBidWlsZGVyIikKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYnVpbGQtbnVtYmVyIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSJVc2UgdGhlIGdpdmVuIGJ1aWxkIG51bWJlciIpCisgICAgb3B0aW9u
X3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QtcmVnZXgiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9IlVzZSB0aGUgZ2l2ZW4gcmVnZXggdG8gZmlsdGVyIHRlc3RzIikKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0LWRpciIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Ii4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSJPdXRwdXQgZmlsZXMgdG8gZ2l2ZW4gZGlyZWN0b3J5IikKKyAgICBvcHRpb25fcGFyc2Vy
LmFkZF9vcHRpb24oIi1tIiwgIi0tbWF4LWZhaWx1cmVzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IkxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWlsdXJlcyIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCItciIsICItLXJ1bi10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9IlJ1bnMgdW5pdCB0ZXN0cyIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCItdSIsICItLWJ1aWxkZXItbG9nIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSgiVXNlIHRoZSBsb2NhbCBidWlsZGVyIGxvZyBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImluc3RlYWQgb2Ygc2NyYXBpbmcgdGhlIGJ1aWxkYm90cyIpKQorICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1hcmNoaXZlLWxvZyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0oIlVzZSB0aGUgbG9jYWwgYXJjaGl2ZSBsb2cgZmlsZSAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0ZWFkIG9mIHNjcmFwaW5nIHRoZSBidWls
ZGJvdHMiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0tZXhwZWN0YXRp
b25zLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJVc2UgdGhlIGxvY2FsIHRlc3QgZXhw
ZWN0YXRpb25zIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5z
dGVhZCBvZiBzY3JhcGluZyB0aGUgYnVpbGRib3RzIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCIteiIsICItLXppcC1maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVXNlIHRo
ZSBsb2NhbCB0ZXN0IG91dHB1dCB6aXAgZmlsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbnN0ZWFkIG9mIHNjcmFwaW5nIHRoZSBidWlsZGJvdHMiKSkKKyAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbG9jYWwiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVXNlIGxvY2FsIGJhc2VsaW5lcyBpbnN0ZWFkIG9m
IHNjcmFwaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VsaW5l
cyBmcm9tIHNvdXJjZSB3ZWJzaXRlcyIpKQorCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9w
YXJzZXIucGFyc2VfYXJncygpCisgICAgbWFpbihvcHRpb25zLCBhcmdzKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRwdXRfeG1s
X3RvX2pzb24ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X291dHB1dF94bWxfdG9fanNvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwLi45NDgxODBhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF9vdXRwdXRfeG1sX3RvX2pzb24ucHkKQEAgLTAsMCArMSwx
NTkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIK
K1RoaXMgaXMgYSBzY3JpcHQgZm9yIGdlbmVyYXRpbmcgSlNPTiBmcm9tIEpVbml0IFhNTCBvdXRw
dXQgKGdlbmVyYXRlZCBieQorZ29vZ2xlIHRlc3RzIHdpdGggLS1ndGVzdF9vdXRwdXQ9eG1sIG9w
dGlvbikuCisiIiIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcwor
aW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSB4bWwuZG9tIGltcG9ydCBtaW5pZG9tCisK
K2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKK2Zyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfZXhwZWN0YXRpb25zCisKKyMgQnVpbGRlciBiYXNlIFVSTCB3aGVyZSB3ZSBoYXZl
IHRoZSBhcmNoaXZlZCB0ZXN0IHJlc3VsdHMuCitCVUlMREVSX0JBU0VfVVJMID0gImh0dHA6Ly9i
dWlsZC5jaHJvbWl1bS5vcmcvYnVpbGRib3QvZ3Rlc3QtcmVzdWx0cy8iCisKKworY2xhc3MgSlNP
TkdlbmVyYXRvckZyb21YTUwob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRp
b25zKToKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKworICAgICAgICAjIENoZWNr
IHRoZSByZXN1bHRzIGRpcmVjdG9yeQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2Vs
Zi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBvcy5ta2RpcihzZWxm
Ll9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgICAgIHJlc3VsdHNfeG1sX2ZpbGUg
PSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdHNfeG1sX2ZpbGUgPSBvcGVu
KHNlbGYuX29wdGlvbnMuaW5wdXRfcmVzdWx0c194bWwpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9y
LCBlOgorICAgICAgICAgICAgbG9nZ2luZy5mYXRhbCgiQ2Fubm90IG9wZW4gZmlsZSAlcyIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuaW5wdXRfcmVzdWx0c194bWwp
CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHN1bW1hcnkgPSBzZWxmLl9wYXJz
ZV90ZXN0X3Jlc3VsdHNfeG1sKAorICAgICAgICAgICAgbWluaWRvbS5wYXJzZShyZXN1bHRzX3ht
bF9maWxlKS5kb2N1bWVudEVsZW1lbnQpCisgICAgICAgIHJlc3VsdHNfeG1sX2ZpbGUuY2xvc2Uo
KQorCisgICAgICAgIGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3Io
CisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkZXJfbmFtZSwgc2VsZi5fb3B0aW9ucy5i
dWlsZF9uYW1lLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWlsZF9udW1iZXIsIHNlbGYu
X29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1
aWxkZXJfYmFzZV91cmwsCisgICAgICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3MsCisgICAgICAg
ICAgICBzZWxmLl9mYWlsdXJlcywgc2VsZi5fcGFzc2VkX3Rlc3RzLCBzZWxmLl9za2lwcGVkX3Rl
c3RzLAorICAgICAgICAgICAgc2VsZi5fdGVzdHNfbGlzdCkKKworICAgIGRlZiBfcGFyc2VfdGVz
dF9yZXN1bHRzX3htbChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5fdGVzdHNfbGlzdCA9IHNl
dCgpCisgICAgICAgIHNlbGYuX3Bhc3NlZF90ZXN0cyA9IHNldCgpCisgICAgICAgIHNlbGYuX3Nr
aXBwZWRfdGVzdHMgPSBzZXQoKQorICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3MgPSB7fQorICAg
ICAgICBzZWxmLl9mYWlsdXJlcyA9IHt9CisKKyAgICAgICAgdGVzdGNhc2VzID0gbm9kZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgndGVzdGNhc2UnKQorICAgICAgICBmb3IgdGVzdGNhc2UgaW4gdGVz
dGNhc2VzOgorICAgICAgICAgICAgbmFtZSA9IHRlc3RjYXNlLmdldEF0dHJpYnV0ZSgnbmFtZScp
CisgICAgICAgICAgICBjbGFzc25hbWUgPSB0ZXN0Y2FzZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzbmFt
ZScpCisgICAgICAgICAgICB0ZXN0X25hbWUgPSAiJXMuJXMiICUgKGNsYXNzbmFtZSwgbmFtZSkK
KworICAgICAgICAgICAgc3RhdHVzID0gdGVzdGNhc2UuZ2V0QXR0cmlidXRlKCdzdGF0dXMnKQor
ICAgICAgICAgICAgaWYgc3RhdHVzID09ICdub3RydW4nOgorICAgICAgICAgICAgICAgIGlmIG5h
bWUuc3RhcnRzd2l0aCgnRElTQUJMRURfJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Nr
aXBwZWRfdGVzdHMuYWRkKHRlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisg
ICAgICAgICAgICBmYWlsdXJlcyA9IHRlc3RjYXNlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmYWls
dXJlJykKKyAgICAgICAgICAgIGlmIGZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHNlbGYuX2Zh
aWx1cmVzW3Rlc3RfbmFtZV0gPSB0ZXN0X2V4cGVjdGF0aW9ucy5URVhUCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3Bhc3NlZF90ZXN0cy5hZGQodGVzdF9uYW1lKQor
CisgICAgICAgICAgICBzZWxmLl90ZXN0X3RpbWluZ3NbdGVzdF9uYW1lXSA9IGZsb2F0KAorICAg
ICAgICAgICAgICAgIHRlc3RjYXNlLmdldEF0dHJpYnV0ZSgndGltZScpKQorICAgICAgICAgICAg
c2VsZi5fdGVzdHNfbGlzdC5hZGQodGVzdF9uYW1lKQorCisKK2RlZiBtYWluKG9wdGlvbnMsIGFy
Z3MpOgorICAgICIiIlBhcnNlIHRoZSB0ZXN0cyByZXN1bHRzIGFuZCBnZW5lcmF0ZSBKU09OIGZp
bGVzLgorCisgICAgQXJnczoKKyAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5k
IGxpbmUgb3B0aW9ucworICAgICAgYXJnczogYSBsaXN0IG9mIHN1YiBkaXJlY3RvcmllcyBvciBm
aWxlcyB0byB0ZXN0CisgICAgIiIiCisKKyAgICBpZiBub3Qgb3B0aW9ucy50ZXN0X3R5cGU6Cisg
ICAgICAgIGxvZ2dpbmcuZXJyb3IoIi0tdGVzdC10eXBlIG5lZWRzIHRvIGJlIHNwZWNpZmllZC4i
KQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgY2Fub25fdGVzdF90eXBlID0gb3B0aW9ucy50
ZXN0X3R5cGUucmVwbGFjZSgiLSIsICJfIikKKyAgICBpZiBub3Qgb3B0aW9ucy5pbnB1dF9yZXN1
bHRzX3htbDoKKyAgICAgICAgb3B0aW9ucy5pbnB1dF9yZXN1bHRzX3htbCA9ICIlcy54bWwiICUg
KGNhbm9uX3Rlc3RfdHlwZSkKKyAgICBpZiBub3Qgb3B0aW9ucy5idWlsZGVyX2Jhc2VfdXJsOgor
ICAgICAgICBvcHRpb25zLmJ1aWxkZXJfYmFzZV91cmwgPSAiJXMlcy8iICUgKEJVSUxERVJfQkFT
RV9VUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucy50ZXN0X3R5cGUpCisKKyAgICBKU09OR2VuZXJhdG9yRnJvbVhNTChvcHRpb25zKQorCisg
ICAgcmV0dXJuCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgb3B0aW9uX3BhcnNl
ciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCIiLCAiLS10ZXN0LXR5cGUiLCBkZWZhdWx0PSIiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJUZXN0IHR5cGUgdGhhdCBnZW5lcmF0ZWQgdGhlIHJlc3VsdHMgWE1MLCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGUuZy4gdW5pdC10ZXN0cy4iKQorICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcmVzdWx0cy1kaXJlY3RvcnkiLCBkZWZh
dWx0PSIuLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCByZXN1
bHRzIGRpcmVjdG9yeSBzb3VyY2UgZGlyLiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCIiLCAiLS1pbnB1dC1yZXN1bHRzLXhtbCIsIGRlZmF1bHQ9IiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9IlRlc3QgcmVzdWx0cyB4bWwgZmlsZSAoaW5wdXQgZm9yIHVzKS4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZWZhdWx0IGlzIFRFU1RfVFlQ
RS54bWwiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tYnVpbGRlci1iYXNl
LXVybCIsIGRlZmF1bHQ9IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJB
IFVSTCB3aGVyZSB3ZSBoYXZlIHRoZSBhcmNoaXZlZCB0ZXN0ICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMuIChkZWZhdWx0PSVzVEVTVF9UWVBFX3Jlc3VsdHMv
KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBCVUlMREVSX0JBU0VfVVJM
KSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLWJ1aWxkZXItbmFtZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IkRVTU1ZX0JVSUxERVJfTkFNRSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRoZSBuYW1lIG9mIHRoZSBidWls
ZGVyIHNob3duIG9uIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndh
dGVyZmFsbCBydW5uaW5nIHRoaXMgc2NyaXB0IGUuZy4gV2ViS2l0LiIpCisgICAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZC1uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0iRFVNTVlfQlVJTERfTkFNRSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9IlRoZSBuYW1lIG9mIHRoZSBidWlsZGVyIHVzZWQgaW4gaXRzIHBhdGgs
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZS5nLiB3ZWJraXQtcmVsLiIp
CisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZC1udW1iZXIiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJEVU1NWV9CVUlMRF9OVU1CRVIiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUaGUgYnVpbGQgbnVtYmVyIG9mIHRo
ZSBidWlsZGVyIHJ1bm5pbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRo
aXMgc2NyaXB0LiIpCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJn
cygpCisgICAgbWFpbihvcHRpb25zLCBhcmdzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRfXy5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvX19pbml0X18u
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9m
dXp6eV9pbWFnZV9kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjEzNGI1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYu
cHkKQEAgLTAsMCArMSw3MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
QykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIkNvbXBhcmVzIHRoZSBpbWFnZSBvdXRwdXQgb2YgYSB0ZXN0IHRvIHRoZSBl
eHBlY3RlZCBpbWFnZSBvdXRwdXQgdXNpbmcKK2Z1enp5IG1hdGNoaW5nLgorIiIiCisKK2ltcG9y
dCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0
IHN1YnByb2Nlc3MKKworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJv
bSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJvbSB0ZXN0X3R5cGVzIGlt
cG9ydCB0ZXN0X3R5cGVfYmFzZQorCisKK2NsYXNzIEZ1enp5SW1hZ2VEaWZmKHRlc3RfdHlwZV9i
YXNlLlRlc3RUeXBlQmFzZSk6CisKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5h
bWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgICAgICAiIiJJbXBsZW1l
bnRhdGlvbiBvZiBDb21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5k
CisgICAgICAgIGNoZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExh
eW91dFRlc3QgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgZmFpbHVyZXMgPSBbXQor
CisgICAgICAgICMgSWYgd2UgZGlkbid0IHByb2R1Y2UgYSBoYXNoIGZpbGUsIHRoaXMgdGVzdCBt
dXN0IGJlIHRleHQtb25seS4KKyAgICAgICAgaWYgdGVzdF9hcmdzLmhhc2ggaXMgTm9uZToKKyAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgICAgIGV4cGVjdGVkX3BuZ19maWxlID0g
cGF0aF91dGlscy5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQorCisgICAgICAg
IGlmIHRlc3RfYXJncy5zaG93X3NvdXJjZXM6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCdV
c2luZyAlcycgJSBleHBlY3RlZF9wbmdfZmlsZSkKKworICAgICAgICAjIEFsc28gcmVwb3J0IGEg
bWlzc2luZyBleHBlY3RlZCBQTkcgZmlsZS4KKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxl
KGV4cGVjdGVkX3BuZ19maWxlKToKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2Uoc2VsZikpCisKKyAgICAgICAgIyBSdW4gdGhlIGZ1
enp5bWF0Y2hlcgorICAgICAgICByID0gc3VicHJvY2Vzcy5jYWxsKFtwYXRoX3V0aWxzLmZ1enp5
X21hdGNoX3BhdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MucG5n
X3BhdGgsIGV4cGVjdGVkX3BuZ19maWxlXSkKKyAgICAgICAgaWYgciAhPSAwOgorICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUZ1enp5RmFpbHVyZShzZWxm
KSkKKworICAgICAgICByZXR1cm4gZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2Vf
ZGlmZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGJmMTg5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC0wLDAgKzEsMjI0IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29tcGFyZXMgdGhlIGltYWdlIG91
dHB1dCBvZiBhIHRlc3QgdG8gdGhlIGV4cGVjdGVkIGltYWdlIG91dHB1dC4KKworQ29tcGFyZXMg
aGFzaGVzIGZvciB0aGUgZ2VuZXJhdGVkIGFuZCBleHBlY3RlZCBpbWFnZXMuIElmIHRoZSBvdXRw
dXQgZG9lc24ndAorbWF0Y2gsIHJldHVybnMgRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoIGFuZCBv
dXRwdXRzIGJvdGggaGFzaGVzIGludG8gdGhlIGxheW91dAordGVzdCByZXN1bHRzIGRpcmVjdG9y
eS4KKyIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9y
dCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKK2Zy
b20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKKworIyBDYWNoZSB3aGV0aGVyIHdl
IGhhdmUgdGhlIGltYWdlX2RpZmYgZXhlY3V0YWJsZSBhdmFpbGFibGUuCitfY29tcGFyZV9hdmFp
bGFibGUgPSBUcnVlCitfY29tcGFyZV9tc2dfcHJpbnRlZCA9IEZhbHNlCisKKworY2xhc3MgSW1h
Z2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CisKKyAgICBkZWYgX2NvcHlfb3V0
cHV0X3BuZyhzZWxmLCB0ZXN0X2ZpbGVuYW1lLCBzb3VyY2VfaW1hZ2UsIGV4dGVuc2lvbik6Cisg
ICAgICAgICIiIkNvcGllcyByZXN1bHQgZmlsZXMgaW50byB0aGUgb3V0cHV0IGRpcmVjdG9yeSB3
aXRoIGFwcHJvcHJpYXRlCisgICAgICAgIG5hbWVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
ICAgdGVzdF9maWxlbmFtZTogdGhlIHRlc3QgZmlsZW5hbWUKKyAgICAgICAgICBzb3VyY2VfZmls
ZTogcGF0aCB0byB0aGUgaW1hZ2UgZmlsZSAoZWl0aGVyIGFjdHVhbCBvciBleHBlY3RlZCkKKyAg
ICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbiB0byBpbmRpY2F0ZSAtYWN0dWFsLnBuZyBvciAt
ZXhwZWN0ZWQucG5nCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9tYWtlX291dHB1dF9kaXJl
Y3RvcnkodGVzdF9maWxlbmFtZSkKKyAgICAgICAgZGVzdF9pbWFnZSA9IHNlbGYub3V0cHV0X2Zp
bGVuYW1lKHRlc3RfZmlsZW5hbWUsIGV4dGVuc2lvbikKKworICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzaHV0aWwuY29weWZpbGUoc291cmNlX2ltYWdlLCBkZXN0X2ltYWdlKQorICAgICAgICBl
eGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICMgQSBtaXNzaW5nIGV4cGVjdGVkIFBORyBo
YXMgYWxyZWFkeSBiZWVuIHJlY29yZGVkIGFzIGFuIGVycm9yLgorICAgICAgICAgICAgaWYgZXJy
bm8uRU5PRU5UICE9IGUuZXJybm86CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBf
c2F2ZV9iYXNlbGluZV9maWxlcyhzZWxmLCBmaWxlbmFtZSwgcG5nX3BhdGgsIGNoZWNrc3VtKToK
KyAgICAgICAgIiIiU2F2ZXMgbmV3IGJhc2VsaW5lcyBmb3IgdGhlIFBORyBhbmQgY2hlY2tzdW0u
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogdGVzdCBmaWxlbmFtZQorICAg
ICAgICAgIHBuZ19wYXRoOiBwYXRoIHRvIHRoZSBhY3R1YWwgUE5HIHJlc3VsdCBmaWxlCisgICAg
ICAgICAgY2hlY2tzdW06IHZhbHVlIG9mIHRoZSBhY3R1YWwgY2hlY2tzdW0gcmVzdWx0CisgICAg
ICAgICIiIgorICAgICAgICBwbmdfZmlsZSA9IG9wZW4ocG5nX3BhdGgsICJyYiIpCisgICAgICAg
IHBuZ19kYXRhID0gcG5nX2ZpbGUucmVhZCgpCisgICAgICAgIHBuZ19maWxlLmNsb3NlKCkKKyAg
ICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBwbmdfZGF0YSwgIi5wbmci
KQorICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIGNoZWNrc3VtLCAi
LmNoZWNrc3VtIikKKworICAgIGRlZiBfY3JlYXRlX2ltYWdlX2RpZmYoc2VsZiwgZmlsZW5hbWUs
IHRhcmdldCk6CisgICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBl
Y3RlZC9hY3R1YWwgUE5Hcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiB0
aGUgbmFtZSBvZiB0aGUgdGVzdAorICAgICAgICAgIHRhcmdldDogRGVidWcgb3IgUmVsZWFzZQor
ICAgICAgICAiIiIKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1l
KGZpbGVuYW1lLAorICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0NPTVBBUkUpCisgICAg
ICAgIGFjdHVhbF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAorICAg
ICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0FDVFVBTCArICcucG5nJykKKyAgICAgICAgZXhw
ZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAg
ICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArICcucG5nJykKKworICAgICAgICBnbG9i
YWwgX2NvbXBhcmVfYXZhaWxhYmxlCisgICAgICAgIGNtZCA9ICcnCisKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2VfZGlmZl9wYXRoKHRhcmdl
dCkKKyAgICAgICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLCAnLS1kaWZmJywgYWN0dWFsX2ZpbGVu
YW1lLCBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1l
XQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgX2NvbXBhcmVfYXZh
aWxhYmxlID0gRmFsc2UKKworICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIGlmIF9jb21wYXJl
X2F2YWlsYWJsZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBz
dWJwcm9jZXNzLmNhbGwoY21kKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAg
ICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJu
by5FQUNDRVM6CisgICAgICAgICAgICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNl
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQorICAg
ICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3b3JrIGFyb3Vu
ZCBhIHJhY2UgY29uZGl0aW9uIGluIFB5dGhvbiAyLjQncyBpbXBsZW1lbnRhdGlvbgorICAgICAg
ICAgICAgICAgICMgb2Ygc3VicHJvY2Vzcy5Qb3BlbgorICAgICAgICAgICAgICAgIHBhc3MKKwor
ICAgICAgICBnbG9iYWwgX2NvbXBhcmVfbXNnX3ByaW50ZWQKKworICAgICAgICBpZiBub3QgX2Nv
bXBhcmVfYXZhaWxhYmxlIGFuZCBub3QgX2NvbXBhcmVfbXNnX3ByaW50ZWQ6CisgICAgICAgICAg
ICBfY29tcGFyZV9tc2dfcHJpbnRlZCA9IFRydWUKKyAgICAgICAgICAgIHByaW50KCdpbWFnZV9k
aWZmIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHlvdSBoYXZlIGEgJyArIHRhcmdldCArCisgICAgICAg
ICAgICAgICAgICAnIGJ1aWxkIG9mIHRoZSBpbWFnZV9kaWZmIGV4ZWN1dGFibGUuJykKKworICAg
ICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5h
bWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgICAgICAiIiJJbXBsZW1l
bnRhdGlvbiBvZiBDb21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5k
CisgICAgICAgIGNoZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExh
eW91dFRlc3QgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgZmFpbHVyZXMgPSBbXQor
CisgICAgICAgICMgSWYgd2UgZGlkbid0IHByb2R1Y2UgYSBoYXNoIGZpbGUsIHRoaXMgdGVzdCBt
dXN0IGJlIHRleHQtb25seS4KKyAgICAgICAgaWYgdGVzdF9hcmdzLmhhc2ggaXMgTm9uZToKKyAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgICAgICMgSWYgd2UncmUgZ2VuZXJhdGlu
ZyBhIG5ldyBiYXNlbGluZSwgd2UgcGFzcy4KKyAgICAgICAgaWYgdGVzdF9hcmdzLm5ld19iYXNl
bGluZToKKyAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZmlsZXMoZmlsZW5hbWUsIHRl
c3RfYXJncy5wbmdfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfYXJncy5oYXNoKQorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICAgICAgIyBD
b21wYXJlIGhhc2hlcy4KKyAgICAgICAgZXhwZWN0ZWRfaGFzaF9maWxlID0gcGF0aF91dGlscy5l
eHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmNoZWNrc3VtJykKKyAgICAgICAgZXhwZWN0
ZWRfcG5nX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBu
ZycpCisKKyAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKKyAgICAgICAgICAgIGxv
Z2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX2hhc2hfZmlsZSkKKyAgICAgICAgICAg
IGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxlKQorCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIGV4cGVjdGVkX2hhc2ggPSBvcGVuKGV4cGVjdGVkX2hhc2hfZmls
ZSwgInIiKS5yZWFkKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICBp
ZiBlcnJuby5FTk9FTlQgIT0gZS5lcnJubzoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAg
ICAgICAgZXhwZWN0ZWRfaGFzaCA9ICcnCisKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Zp
bGUoZXhwZWN0ZWRfcG5nX2ZpbGUpOgorICAgICAgICAgICAgIyBSZXBvcnQgYSBtaXNzaW5nIGV4
cGVjdGVkIFBORyBmaWxlLgorICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmls
ZW5hbWUsICcnLCAnLmNoZWNrc3VtJywgdGVzdF9hcmdzLmhhc2gsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9oYXNoLCBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxz
ZSkKKyAgICAgICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgdGVzdF9hcmdz
LnBuZ19wYXRoLCAnLWFjdHVhbC5wbmcnKQorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRl
c3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZShzZWxmKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWlsdXJlcworICAgICAgICBlbGlmIHRlc3RfYXJncy5oYXNoID09IGV4cGVjdGVkX2hhc2g6
CisgICAgICAgICAgICAjIEhhc2ggbWF0Y2hlZCAobm8gZGlmZiBuZWVkZWQsIG9rYXkgdG8gcmV0
dXJuKS4KKyAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisKKyAgICAgICAgc2VsZi53cml0
ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywgdGVzdF9hcmdzLmhhc2gs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2hhc2gsIGRpZmY9RmFs
c2UsIHdkaWZmPUZhbHNlKQorICAgICAgICBzZWxmLl9jb3B5X291dHB1dF9wbmcoZmlsZW5hbWUs
IHRlc3RfYXJncy5wbmdfcGF0aCwgJy1hY3R1YWwucG5nJykKKyAgICAgICAgc2VsZi5fY29weV9v
dXRwdXRfcG5nKGZpbGVuYW1lLCBleHBlY3RlZF9wbmdfZmlsZSwgJy1leHBlY3RlZC5wbmcnKQor
CisgICAgICAgICMgRXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgcmVzdWx0IGluIG9uZSBjb2RlcGF0
aCBiZWxvdyBidXQgd2UKKyAgICAgICAgIyBzdGlsbCBuZWVkIHRvIGNhbGwgQ3JlYXRlSW1hZ2VE
aWZmIGZvciBvdGhlciBjb2RlcGF0aHMuCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NyZWF0ZV9p
bWFnZV9kaWZmKGZpbGVuYW1lLCB0YXJnZXQpCisgICAgICAgIGlmIGV4cGVjdGVkX2hhc2ggPT0g
Jyc6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlz
c2luZ0ltYWdlSGFzaChzZWxmKSkKKyAgICAgICAgZWxpZiB0ZXN0X2FyZ3MuaGFzaCAhPSBleHBl
Y3RlZF9oYXNoOgorICAgICAgICAgICAgIyBIYXNoZXMgZG9uJ3QgbWF0Y2gsIHNvIHNlZSBpZiB0
aGUgaW1hZ2VzIG1hdGNoLiBJZiB0aGV5IGRvLCB0aGVuCisgICAgICAgICAgICAjIHRoZSBoYXNo
IGlzIHdyb25nLgorICAgICAgICAgICAgaWYgcmVzdWx0ID09IDA6CisgICAgICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaEluY29ycmVjdChz
ZWxmKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5k
KHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoKHNlbGYpKQorCisgICAgICAg
IHJldHVybiBmYWlsdXJlcworCisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwgZmlsZTEsIGZpbGUy
KToKKyAgICAgICAgIiIiRGlmZiB0d28gaW1hZ2UgZmlsZXMuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICBmaWxlMSwgZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGZpbGVzIHRvIGNvbXBhcmUu
CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIHR3byBmaWxlcyBhcmUgZGlm
ZmVyZW50LgorICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2VfZGlmZl9w
YXRoKCdEZWJ1ZycpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBs
b2dnaW5nLndhcm4oJ0ZhaWxlZCB0byBmaW5kIGltYWdlIGRpZmYgZXhlY3V0YWJsZS4nKQorICAg
ICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwgZmlsZTEs
IGZpbGUyXQorICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJl
c3VsdCA9IHN1YnByb2Nlc3MuY2FsbChjbWQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgor
ICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGYWlsZWQgdG8gY29tcGFyZSBpbWFnZSBkaWZmOiAl
cycsIGUpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiByZXN1bHQg
PT0gMQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0YWU3MAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90
eXBlX2Jhc2UucHkKQEAgLTAsMCArMSwyNjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisiIiJEZWZpbmVzIHRoZSBpbnRlcmZhY2UgVGVzdFR5cGVCYXNl
IHdoaWNoIG90aGVyIHRlc3QgdHlwZXMgaW5oZXJpdCBmcm9tLgorCitBbHNvIGRlZmluZXMgdGhl
IFRlc3RBcmd1bWVudHMgInN0cnVjdCIgdG8gcGFzcyB0aGVtIGFkZGl0aW9uYWwgYXJndW1lbnRz
LgorIiIiCisKK2ltcG9ydCBjZ2kKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgZXJybm8KK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworCisKK2NsYXNzIFRlc3RBcmd1bWVudHMob2Jq
ZWN0KToKKyAgICAiIiJTdHJ1Y3QtbGlrZSB3cmFwcGVyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50
cyBuZWVkZWQgYnkKKyAgICBzcGVjaWZpYyB0ZXN0cy4iIiIKKyAgICAjIFdoZXRoZXIgdG8gc2F2
ZSBuZXcgYmFzZWxpbmUgcmVzdWx0cy4KKyAgICBuZXdfYmFzZWxpbmUgPSBGYWxzZQorCisgICAg
IyBQYXRoIHRvIHRoZSBhY3R1YWwgUE5HIGZpbGUgZ2VuZXJhdGVkIGJ5IHBpeGVsIHRlc3RzCisg
ICAgcG5nX3BhdGggPSBOb25lCisKKyAgICAjIFZhbHVlIG9mIGNoZWNrc3VtIGdlbmVyYXRlZCBi
eSBwaXhlbCB0ZXN0cy4KKyAgICBoYXNoID0gTm9uZQorCisgICAgIyBXaGV0aGVyIHRvIHVzZSB3
ZGlmZiB0byBnZW5lcmF0ZSBieS13b3JkIGRpZmZzLgorICAgIHdkaWZmID0gRmFsc2UKKworICAg
ICMgV2hldGhlciB0byByZXBvcnQgdGhlIGxvY2F0aW9ucyBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0
IGZpbGVzIHVzZWQuCisgICAgc2hvd19zb3VyY2VzID0gRmFsc2UKKworIyBQeXRob24gYnVnIHdv
cmthcm91bmQuICBTZWUgdGhlIHdkaWZmIGNvZGUgaW4gV3JpdGVPdXRwdXRGaWxlcyBmb3IgYW4K
KyMgZXhwbGFuYXRpb24uCitfd2RpZmZfYXZhaWxhYmxlID0gVHJ1ZQorCisKK2NsYXNzIFRlc3RU
eXBlQmFzZShvYmplY3QpOgorCisgICAgIyBGaWxlbmFtZSBwaWVjZXMgd2hlbiB3cml0aW5nIGZh
aWx1cmVzIHRvIHRoZSB0ZXN0IHJlc3VsdHMgZGlyZWN0b3J5LgorICAgIEZJTEVOQU1FX1NVRkZJ
WF9BQ1RVQUwgPSAiLWFjdHVhbCIKKyAgICBGSUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgPSAiLWV4
cGVjdGVkIgorICAgIEZJTEVOQU1FX1NVRkZJWF9ESUZGID0gIi1kaWZmIgorICAgIEZJTEVOQU1F
X1NVRkZJWF9XRElGRiA9ICItd2RpZmYuaHRtbCIKKyAgICBGSUxFTkFNRV9TVUZGSVhfQ09NUEFS
RSA9ICItZGlmZi5wbmciCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0sIHJvb3Rf
b3V0cHV0X2Rpcik6CisgICAgICAgICIiIkluaXRpYWxpemUgYSBUZXN0VHlwZUJhc2Ugb2JqZWN0
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgcGxhdGZvcm06IHRoZSBwbGF0Zm9ybSAoZS5n
LiwgJ2Nocm9taXVtLW1hYy1sZW9wYXJkJykKKyAgICAgICAgICAgIGlkZW50aWZ5aW5nIHRoZSBw
bGF0Zm9ybS1zcGVjaWZpYyByZXN1bHRzIHRvIGJlIHVzZWQuCisgICAgICAgICAgcm9vdF9vdXRw
dXRfZGlyOiBUaGUgdW5peCBzdHlsZSBwYXRoIHRvIHRoZSBvdXRwdXQgZGlyLgorICAgICAgICAi
IiIKKyAgICAgICAgc2VsZi5fcm9vdF9vdXRwdXRfZGlyID0gcm9vdF9vdXRwdXRfZGlyCisgICAg
ICAgIHNlbGYuX3BsYXRmb3JtID0gcGxhdGZvcm0KKworICAgIGRlZiBfbWFrZV9vdXRwdXRfZGly
ZWN0b3J5KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiQ3JlYXRlcyB0aGUgb3V0cHV0IGRp
cmVjdG9yeSAoaWYgbmVlZGVkKSBmb3IgYSBnaXZlbiB0ZXN0CisgICAgICAgIGZpbGVuYW1lLiIi
IgorICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fcm9vdF9vdXRw
dXRfZGlyLAorICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZp
bGVuYW1lKSkKKyAgICAgICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRo
LnNwbGl0KG91dHB1dF9maWxlbmFtZSlbMF0pCisKKyAgICBkZWYgX3NhdmVfYmFzZWxpbmVfZGF0
YShzZWxmLCBmaWxlbmFtZSwgZGF0YSwgbW9kaWZpZXIpOgorICAgICAgICAiIiJTYXZlcyBhIG5l
dyBiYXNlbGluZSBmaWxlIGludG8gdGhlIHBsYXRmb3JtIGRpcmVjdG9yeS4KKworICAgICAgICBU
aGUgZmlsZSB3aWxsIGJlIG5hbWVkIHNpbXBseSAiPHRlc3Q+LWV4cGVjdGVkPG1vZGlmaWVyPiIs
IHN1aXRhYmxlIGZvcgorICAgICAgICB1c2UgYXMgdGhlIGV4cGVjdGVkIHJlc3VsdHMgaW4gYSBs
YXRlciBydW4uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogcGF0aCB0byB0
aGUgdGVzdCBmaWxlCisgICAgICAgICAgZGF0YTogcmVzdWx0IHRvIGJlIHNhdmVkIGFzIHRoZSBu
ZXcgYmFzZWxpbmUKKyAgICAgICAgICBtb2RpZmllcjogdHlwZSBvZiB0aGUgcmVzdWx0IGZpbGUs
IGUuZy4gIi50eHQiIG9yICIucG5nIgorICAgICAgICAiIiIKKyAgICAgICAgcmVsYXRpdmVfZGly
ID0gb3MucGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgb3V0cHV0X2RpciA9IG9zLnBhdGguam9pbigK
KyAgICAgICAgICAgIHBhdGhfdXRpbHMuY2hyb21pdW1fYmFzZWxpbmVfcGF0aChzZWxmLl9wbGF0
Zm9ybSksIHJlbGF0aXZlX2RpcikKKyAgICAgICAgb3V0cHV0X2ZpbGUgPSBvcy5wYXRoLmJhc2Vu
YW1lKG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsKKyAgICAgICAgICAgIHNlbGYuRklM
RU5BTUVfU1VGRklYX0VYUEVDVEVEICsgbW9kaWZpZXIpCisKKyAgICAgICAgcGF0aF91dGlscy5t
YXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQorICAgICAgICBvdXRwdXRfcGF0aCA9IG9z
LnBhdGguam9pbihvdXRwdXRfZGlyLCBvdXRwdXRfZmlsZSkKKyAgICAgICAgbG9nZ2luZy5kZWJ1
Zygnd3JpdGluZyBuZXcgYmFzZWxpbmUgdG8gIiVzIicgJSAob3V0cHV0X3BhdGgpKQorICAgICAg
ICBvcGVuKG91dHB1dF9wYXRoLCAid2IiKS53cml0ZShkYXRhKQorCisgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmLCBmaWxlbmFtZSwgbW9kaWZpZXIpOgorICAgICAgICAiIiJSZXR1cm5zIGEg
ZmlsZW5hbWUgaW5zaWRlIHRoZSBvdXRwdXQgZGlyIHRoYXQgY29udGFpbnMgbW9kaWZpZXIuCisK
KyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGZpbGVuYW1lIGlzIGM6Ly4uLi9mYXN0L2RvbS9mb28u
aHRtbCBhbmQgbW9kaWZpZXIgaXMKKyAgICAgICAgIi1leHBlY3RlZC50eHQiLCB0aGUgcmV0dXJu
IHZhbHVlIGlzCisgICAgICAgIGM6L2N5Z3dpbi90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0
L2RvbS9mb28tZXhwZWN0ZWQudHh0CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFt
ZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCisgICAgICAgICAgbW9kaWZpZXI6IGEg
c3RyaW5nIHRvIHJlcGxhY2UgdGhlIGV4dGVuc2lvbiBvZiBmaWxlbmFtZSB3aXRoCisKKyAgICAg
ICAgUmV0dXJuOgorICAgICAgICAgIFRoZSBhYnNvbHV0ZSB3aW5kb3dzIHBhdGggdG8gdGhlIG91
dHB1dCBmaWxlbmFtZQorICAgICAgICAiIiIKKyAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gb3Mu
cGF0aC5qb2luKHNlbGYuX3Jvb3Rfb3V0cHV0X2RpciwKKyAgICAgICAgICAgIHBhdGhfdXRpbHMu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBvcy5wYXRo
LnNwbGl0ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgorCisgICAgZGVmIGNvbXBh
cmVfb3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBvdXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0
KToKKyAgICAgICAgIiIiTWV0aG9kIHRoYXQgY29tcGFyZXMgdGhlIG91dHB1dCBmcm9tIHRoZSB0
ZXN0IHdpdGggdGhlCisgICAgICAgIGV4cGVjdGVkIHZhbHVlLgorCisgICAgICAgIFRoaXMgaXMg
YW4gYWJzdHJhY3QgbWV0aG9kIHRvIGJlIGltcGxlbWVudGVkIGJ5IGFsbCBzdWIgY2xhc3Nlcy4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0
byB0ZXN0IGZpbGUKKyAgICAgICAgICBwcm9jOiBhIHJlZmVyZW5jZSB0byB0aGUgdGVzdF9zaGVs
bCBwcm9jZXNzCisgICAgICAgICAgb3V0cHV0OiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBvdXRw
dXQgb2YgdGhlIHRlc3QKKyAgICAgICAgICB0ZXN0X2FyZ3M6IGEgVGVzdEFyZ3VtZW50cyBvYmpl
Y3QgaG9sZGluZyBvcHRpb25hbCBhZGRpdGlvbmFsCisgICAgICAgICAgICAgIGFyZ3VtZW50cwor
ICAgICAgICAgIHRhcmdldDogRGVidWcgb3IgUmVsZWFzZQorCisgICAgICAgIFJldHVybjoKKyAg
ICAgICAgICBhIGxpc3Qgb2YgVGVzdEZhaWx1cmUgb2JqZWN0cywgZW1wdHkgaWYgdGhlIHRlc3Qg
cGFzc2VzCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZAorCisgICAg
ZGVmIHdyaXRlX291dHB1dF9maWxlcyhzZWxmLCBmaWxlbmFtZSwgdGVzdF90eXBlLCBmaWxlX3R5
cGUsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBkaWZmPVRy
dWUsIHdkaWZmPUZhbHNlKToKKyAgICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91dHB1dCwgdGhl
IGV4cGVjdGVkIG91dHB1dCBhbmQgb3B0aW9uYWxseSB0aGUgZGlmZgorICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gdG8gZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgorCisgICAgICAgIFRo
ZSBmdWxsIG91dHB1dCBmaWxlbmFtZSBvZiB0aGUgYWN0dWFsLCBmb3IgZXhhbXBsZSwgd2lsbCBi
ZQorICAgICAgICAgIDxmaWxlbmFtZT48dGVzdF90eXBlPi1hY3R1YWw8ZmlsZV90eXBlPgorICAg
ICAgICBGb3IgaW5zdGFuY2UsCisgICAgICAgICAgbXlfdGVzdC1zaW1wLWFjdHVhbC50eHQKKwor
ICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVuYW1lOiBUaGUgdGVzdCBmaWxlbmFtZQorICAg
ICAgICAgIHRlc3RfdHlwZTogQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdGVzdCB0eXBlLCBlLmcu
ICJzaW1wIgorICAgICAgICAgIGZpbGVfdHlwZTogQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdGVz
dCBvdXRwdXQgZmlsZSB0eXBlLCBlLmcuICIudHh0IgorICAgICAgICAgIG91dHB1dDogQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgdGVzdCBvdXRwdXQKKyAgICAgICAgICBleHBlY3RlZDogQSBzdHJp
bmcgY29udGFpbmluZyB0aGUgZXhwZWN0ZWQgdGVzdCBvdXRwdXQKKyAgICAgICAgICBkaWZmOiBp
ZiBUcnVlLCB3cml0ZSBhIGZpbGUgY29udGFpbmluZyB0aGUgZGlmZnMgdG9vLiBUaGlzIHNob3Vs
ZCBiZQorICAgICAgICAgICAgICBGYWxzZSBmb3IgcmVzdWx0cyB0aGF0IGFyZSBub3QgdGV4dAor
ICAgICAgICAgIHdkaWZmOiBpZiBUcnVlLCB3cml0ZSBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB3
b3JkLWJ5LXdvcmQgZGlmZnMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX21ha2Vfb3V0cHV0
X2RpcmVjdG9yeShmaWxlbmFtZSkKKyAgICAgICAgYWN0dWFsX2ZpbGVuYW1lID0gc2VsZi5vdXRw
dXRfZmlsZW5hbWUoZmlsZW5hbWUsCisgICAgICAgICAgICB0ZXN0X3R5cGUgKyBzZWxmLkZJTEVO
QU1FX1NVRkZJWF9BQ1RVQUwgKyBmaWxlX3R5cGUpCisgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1l
ID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsCisgICAgICAgICAgICB0ZXN0X3R5cGUg
KyBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArIGZpbGVfdHlwZSkKKyAgICAgICAgaWYg
b3V0cHV0OgorICAgICAgICAgICAgb3BlbihhY3R1YWxfZmlsZW5hbWUsICJ3YiIpLndyaXRlKG91
dHB1dCkKKyAgICAgICAgaWYgZXhwZWN0ZWQ6CisgICAgICAgICAgICBvcGVuKGV4cGVjdGVkX2Zp
bGVuYW1lLCAid2IiKS53cml0ZShleHBlY3RlZCkKKworICAgICAgICBpZiBub3Qgb3V0cHV0IG9y
IG5vdCBleHBlY3RlZDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGRpZmY6Cisg
ICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZXhwZWN0ZWQuc3BsaXRsaW5l
cyhUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
c3BsaXRsaW5lcyhUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhY3R1YWxfZmlsZW5hbWUpCisKKyAgICAgICAgICAgIGRpZmZfZmlsZW5hbWUgPSBzZWxm
Lm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICB0ZXN0X3R5cGUgKyBz
ZWxmLkZJTEVOQU1FX1NVRkZJWF9ESUZGICsgZmlsZV90eXBlKQorICAgICAgICAgICAgb3Blbihk
aWZmX2ZpbGVuYW1lLCAid2IiKS53cml0ZSgnJy5qb2luKGRpZmYpKQorCisgICAgICAgIGlmIHdk
aWZmOgorICAgICAgICAgICAgIyBTaGVsbCBvdXQgdG8gd2RpZmYgdG8gZ2V0IGNvbG9yZWQgaW5s
aW5lIGRpZmZzLgorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMud2RpZmZfcGF0
aCgpCisgICAgICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAn
LS1zdGFydC1kZWxldGU9IyNXRElGRl9ERUwjIycsCisgICAgICAgICAgICAgICAgICAgJy0tZW5k
LWRlbGV0ZT0jI1dESUZGX0VORCMjJywKKyAgICAgICAgICAgICAgICAgICAnLS1zdGFydC1pbnNl
cnQ9IyNXRElGRl9BREQjIycsCisgICAgICAgICAgICAgICAgICAgJy0tZW5kLWluc2VydD0jI1dE
SUZGX0VORCMjJywKKyAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWVdCisgICAgICAgICAgICBmaWxlbmFtZSA9IHNl
bGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfdHlwZSArIHNlbGYuRklMRU5BTUVfU1VGRklYX1dESUZGKQorCisgICAgICAgICAgICBn
bG9iYWwgX3dkaWZmX2F2YWlsYWJsZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgIyBQeXRob24ncyBQb3BlbiBoYXMgYSBidWcgdGhhdCBjYXVzZXMgYW55IHBpcGVzIG9wZW5l
ZCB0byBhCisgICAgICAgICAgICAgICAgIyBwcm9jZXNzIHRoYXQgY2FuJ3QgYmUgZXhlY3V0ZWQg
dG8gYmUgbGVha2VkLiAgU2luY2UgdGhpcworICAgICAgICAgICAgICAgICMgY29kZSBpcyBzcGVj
aWZpY2FsbHkgZGVzaWduZWQgdG8gdG9sZXJhdGUgZXhlYyBmYWlsdXJlcworICAgICAgICAgICAg
ICAgICMgdG8gZ3JhY2VmdWxseSBoYW5kbGUgY2FzZXMgd2hlcmUgd2RpZmYgaXMgbm90IGluc3Rh
bGxlZCwKKyAgICAgICAgICAgICAgICAjIHRoZSBidWcgcmVzdWx0cyBpbiBhIG1hc3NpdmUgZmls
ZSBkZXNjcmlwdG9yIGxlYWsuIEFzIGEKKyAgICAgICAgICAgICAgICAjIHdvcmthcm91bmQsIGlm
IGFuIGV4ZWMgZmFpbHVyZSBpcyBldmVyIGV4cGVyaWVuY2VkIGZvcgorICAgICAgICAgICAgICAg
ICMgd2RpZmYsIGFzc3VtZSBpdCdzIG5vdCBhdmFpbGFibGUuICBUaGlzIHdpbGwgbGVhayBvbmUK
KyAgICAgICAgICAgICAgICAjIGZpbGUgZGVzY3JpcHRvciBidXQgdGhhdCdzIGJldHRlciB0aGFu
IGxlYWtpbmcgZWFjaCB0aW1lCisgICAgICAgICAgICAgICAgIyB3ZGlmZiB3b3VsZCBiZSBydW4u
CisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgaHR0cDovL21haWwucHl0aG9u
Lm9yZy9waXBlcm1haWwvcHl0aG9uLWxpc3QvCisgICAgICAgICAgICAgICAgIyAgICAyMDA4LUF1
Z3VzdC81MDU3NTMuaHRtbAorICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9y
Zy9pc3N1ZTMyMTAKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJdCBhbHNv
IGhhcyBhIHRocmVhZGluZyBidWcsIHNvIHdlIGRvbid0IG91dHB1dCB3ZGlmZiBpZgorICAgICAg
ICAgICAgICAgICMgdGhlIFBvcGVuIHJhaXNlcyBhIFZhbHVlRXJyb3IuCisgICAgICAgICAgICAg
ICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIzNgorICAgICAgICAgICAgICAgIGlm
IF93ZGlmZl9hdmFpbGFibGU6CisgICAgICAgICAgICAgICAgICAgIHdkaWZmID0gc3VicHJvY2Vz
cy5Qb3BlbigKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgICAgICAgICB3ZGlmZl9mYWlsZWQg
PSBGYWxzZQorCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgICAg
ICBpZiAoZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVMg
b3IKKyAgICAgICAgICAgICAgICAgICAgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQpOgorICAgICAg
ICAgICAgICAgICAgICBfd2RpZmZfYXZhaWxhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBlCisgICAgICAgICAgICBleGNlcHQgVmFs
dWVFcnJvciwgZToKKyAgICAgICAgICAgICAgICB3ZGlmZl9mYWlsZWQgPSBUcnVlCisKKyAgICAg
ICAgICAgIG91dCA9IG9wZW4oZmlsZW5hbWUsICd3YicpCisKKyAgICAgICAgICAgIGlmIG5vdCBf
d2RpZmZfYXZhaWxhYmxlOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgIndkaWZmIG5vdCBpbnN0YWxsZWQuPGJyLz4gIgorICAgICAgICAgICAgICAgICAg
ICAiSWYgeW91J3JlIHJ1bm5pbmcgT1MgWCwgeW91IGNhbiBpbnN0YWxsIHZpYSBtYWNwb3J0cy4i
CisgICAgICAgICAgICAgICAgICAgICI8YnIvPiIKKyAgICAgICAgICAgICAgICAgICAgIklmIHJ1
bm5pbmcgVWJ1bnR1IGxpbnV4LCB5b3UgY2FuIHJ1biAiCisgICAgICAgICAgICAgICAgICAgICIn
c3VkbyBhcHQtZ2V0IGluc3RhbGwgd2RpZmYnLiIpCisgICAgICAgICAgICBlbGlmIHdkaWZmX2Zh
aWxlZDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJ3dkaWZmIGZhaWxlZCBkdWUgdG8gcnVu
bmluZyB3aXRoIG11bHRpcGxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rfc2hl
bGxzIGluIHBhcmFsbGVsLicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdk
aWZmID0gY2dpLmVzY2FwZSh3ZGlmZikKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJl
cGxhY2UoJyMjV0RJRkZfREVMIyMnLCAnPHNwYW4gY2xhc3M9ZGVsPicpCisgICAgICAgICAgICAg
ICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0FERCMjJywgJzxzcGFuIGNsYXNzPWFk
ZD4nKQorICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9FTkQj
IycsICc8L3NwYW4+JykKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJzxoZWFkPjxzdHlsZT4u
ZGVsIHsgYmFja2dyb3VuZDogI2ZhYTsgfSAnKQorICAgICAgICAgICAgICAgIG91dC53cml0ZSgn
LmFkZCB7IGJhY2tncm91bmQ6ICNhZmE7IH08L3N0eWxlPjwvaGVhZD4nKQorICAgICAgICAgICAg
ICAgIG91dC53cml0ZSgnPHByZT4nICsgd2RpZmYgKyAnPC9wcmU+JykKKworICAgICAgICAgICAg
b3V0LmNsb3NlKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmZjllNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZm
LnB5CkBAIC0wLDAgKzEsMTIyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiQ29tcGFyZXMgdGhlIHRleHQgb3V0cHV0IG9mIGEgdGVzdCB0byB0aGUg
ZXhwZWN0ZWQgdGV4dCBvdXRwdXQuCisKK0lmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCwgcmV0
dXJucyBGYWlsdXJlVGV4dE1pc21hdGNoIGFuZCBvdXRwdXRzIHRoZSBkaWZmCitmaWxlcyBpbnRv
IHRoZSBsYXlvdXQgdGVzdCByZXN1bHRzIGRpcmVjdG9yeS4KKyIiIgorCitpbXBvcnQgZXJybm8K
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAorCitmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVz
Citmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCisKKworZGVmIGlzX3JlbmRl
cl90cmVlX2R1bXAoZGF0YSk6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmIGRhdGEgYXBwZWFycyB0
byBiZSBhIHJlbmRlciB0cmVlIGR1bXAgYXMgb3Bwb3NlZCB0byBhCisgICAgcGxhaW4gdGV4dCBk
dW1wLiIiIgorICAgIHJldHVybiBkYXRhLmZpbmQoIlJlbmRlclZpZXcgYXQgKDAsMCkiKSAhPSAt
MQorCisKK2NsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgor
CisgICAgZGVmIGdldF9ub3JtYWxpemVkX291dHB1dF90ZXh0KHNlbGYsIG91dHB1dCk6CisgICAg
ICAgICMgU29tZSB0ZXN0cyBwcm9kdWNlICJcclxuIiBleHBsaWNpdGx5LiAgT3VyIHN5c3RlbSAo
UHl0aG9uL0N5Z3dpbikKKyAgICAgICAgIyBoZWxwZnVsbHkgY2hhbmdlcyB0aGUgIlxuIiB0byAi
XHJcbiIsIHJlc3VsdGluZyBpbiAiXHJcclxuIi4KKyAgICAgICAgbm9ybSA9IG91dHB1dC5yZXBs
YWNlKCJcclxyXG4iLCAiXHJcbiIpLnN0cmlwKCJcclxuIikucmVwbGFjZSgKKyAgICAgICAgICAg
ICAiXHJcbiIsICJcbiIpCisgICAgICAgIHJldHVybiBub3JtICsgIlxuIgorCisgICAgZGVmIGdl
dF9ub3JtYWxpemVkX2V4cGVjdGVkX3RleHQoc2VsZiwgZmlsZW5hbWUsIHNob3dfc291cmNlcyk6
CisgICAgICAgICIiIkdpdmVuIHRoZSBmaWxlbmFtZSBvZiB0aGUgdGVzdCwgcmVhZCB0aGUgZXhw
ZWN0ZWQgb3V0cHV0IGZyb20gYSBmaWxlCisgICAgICAgIGFuZCBub3JtYWxpemUgdGhlIHRleHQu
ICBSZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIGV4cGVjdGVkIHRleHQsIG9yICcnCisgICAgICAg
IGlmIHRoZSBleHBlY3RlZCBvdXRwdXQgZmlsZSB3YXMgbm90IGZvdW5kLiIiIgorICAgICAgICAj
IFJlYWQgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGV4cGVjdGVkIHRleHQuCisgICAgICAgIGV4cGVj
dGVkX2ZpbGVuYW1lID0gcGF0aF91dGlscy5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy50
eHQnKQorICAgICAgICBpZiBzaG93X3NvdXJjZXM6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVn
KCdVc2luZyAlcycgJSBleHBlY3RlZF9maWxlbmFtZSkKKworICAgICAgICByZXR1cm4gc2VsZi5n
ZXRfbm9ybWFsaXplZF90ZXh0KGV4cGVjdGVkX2ZpbGVuYW1lKQorCisgICAgZGVmIGdldF9ub3Jt
YWxpemVkX3RleHQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0
ZXh0ID0gb3BlbihmaWxlbmFtZSkucmVhZCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgor
ICAgICAgICAgICAgaWYgZXJybm8uRU5PRU5UICE9IGUuZXJybm86CisgICAgICAgICAgICAgICAg
cmFpc2UKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgICMgTm9ybWFsaXplIGxpbmUg
ZW5kaW5ncworICAgICAgICByZXR1cm4gdGV4dC5zdHJpcCgiXHJcbiIpLnJlcGxhY2UoIlxyXG4i
LCAiXG4iKSArICJcbiIKKworICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxlbmFtZSwg
cHJvYywgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CisgICAgICAgICIiIkltcGxlbWVudGF0
aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCB0ZXh0IGFnYWluc3QK
KyAgICAgICAgdGhlIGV4cGVjdGVkIHRleHQgZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3Rvcnku
IiIiCisgICAgICAgIGZhaWx1cmVzID0gW10KKworICAgICAgICAjIElmIHdlJ3JlIGdlbmVyYXRp
bmcgYSBuZXcgYmFzZWxpbmUsIHdlIHBhc3MuCisgICAgICAgIGlmIHRlc3RfYXJncy5uZXdfYmFz
ZWxpbmU6CisgICAgICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIG91
dHB1dCwgIi50eHQiKQorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICAgICAgIyBO
b3JtYWxpemUgdGV4dCB0byBkaWZmCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ2V0X25vcm1hbGl6
ZWRfb3V0cHV0X3RleHQob3V0cHV0KQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZ2V0X25vcm1h
bGl6ZWRfZXhwZWN0ZWRfdGV4dChmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdzLnNob3dfc291cmNlcykKKworICAg
ICAgICAjIFdyaXRlIG91dHB1dCBmaWxlcyBmb3IgbmV3IHRlc3RzLCB0b28uCisgICAgICAgIGlm
IG91dHB1dCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgICMgVGV4dCBkb2Vzbid0IG1hdGNoLCB3
cml0ZSBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhm
aWxlbmFtZSwgIiIsICIudHh0Iiwgb3V0cHV0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZmY9VHJ1ZSwgd2RpZmY9VHJ1ZSkKKworICAgICAgICAgICAg
aWYgZXhwZWN0ZWQgPT0gJyc6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3Rf
ZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdSZXN1bHQoc2VsZikpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUZXh0
TWlzbWF0Y2goc2VsZiwgVHJ1ZSkpCisKKyAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICBk
ZWYgZGlmZl9maWxlcyhzZWxmLCBmaWxlMSwgZmlsZTIpOgorICAgICAgICAiIiJEaWZmIHR3byB0
ZXh0IGZpbGVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZTEsIGZpbGUyOiBmdWxs
IHBhdGhzIG9mIHRoZSBmaWxlcyB0byBjb21wYXJlLgorCisgICAgICAgIFJldHVybnM6CisgICAg
ICAgICAgVHJ1ZSBpZiB0d28gZmlsZXMgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgICBGYWxzZSBv
dGhlcndpc2UuCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiAoc2VsZi5nZXRfbm9ybWFs
aXplZF90ZXh0KGZpbGUxKSAhPQorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X25vcm1hbGl6ZWRf
dGV4dChmaWxlMikpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy91cGRhdGVfZXhwZWN0YXRpb25zX2Zyb21fZGFzaGJvYXJkLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19m
cm9tX2Rhc2hib2FyZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDYw
NTBjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2FyZC5weQpAQCAtMCwwICsx
LDUwMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IlNjcmlwdCB0byByZWFkIGluIHVwZGF0ZXMgaW4gSlNPTiBmb3JtIGZyb20gdGhlIGxheW91dCB0
ZXN0IGRhc2hib2FyZAorYW5kIGFwcGx5IHRoZW0gdG8gdGVzdF9leHBlY3RhdGlvbnMudHh0Lgor
CitVc2FnZToKKzEuIEdvIHRvIGh0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUv
dHJ1bmsvc3JjL3dlYmtpdC90b29scy8KKyAgICAgICBsYXlvdXRfdGVzdHMvZmxha2luZXNzX2Rh
c2hib2FyZC5odG1sI2V4cGVjdGF0aW9uc1VwZGF0ZT10cnVlCisyLiBDb3B5LXBhc3RlIHRoYXQg
SlNPTiBpbnRvIGEgbG9jYWwgZmlsZS4KKzMuIHB5dGhvbiB1cGRhdGVfZXhwZWN0YXRpb25zX2Zy
b21fZGFzaGJvYXJkLnB5IHBhdGgvdG8vbG9jYWwvZmlsZQorIiIiCisKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0
aF91dGlscworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKKwor
c3lzLnBhdGguYXBwZW5kKHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5Jykp
CitpbXBvcnQgc2ltcGxlanNvbgorCisKK2RlZiB1cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0
aW9ucywgdXBkYXRlcyk6CisgICAgZXhwZWN0YXRpb25zID0gRXhwZWN0YXRpb25zVXBkYXRlcihO
b25lLCBOb25lLAorICAgICAgICAnV0lOJywgRmFsc2UsIEZhbHNlLCBleHBlY3RhdGlvbnMsIFRy
dWUpCisgICAgcmV0dXJuIGV4cGVjdGF0aW9ucy51cGRhdGVfYmFzZWRfb25fanNvbih1cGRhdGVz
KQorCisKK2NsYXNzIE9wdGlvbnNBbmRFeHBlY3RhdGlvbnNIb2xkZXIob2JqZWN0KToKKyAgICAi
IiJDb250YWluZXIgZm9yIGEgbGlzdCBvZiBvcHRpb25zIGFuZCBhIGxpc3Qgb2YgZXhwZWN0YXRp
b25zIGZvciBhIGdpdmVuCisgICAgdGVzdC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
cHRpb25zLCBleHBlY3RhdGlvbnMpOgorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisg
ICAgICAgIHNlbGYuZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCisKKworY2xhc3MgQnVpbGRJ
bmZvKE9wdGlvbnNBbmRFeHBlY3RhdGlvbnNIb2xkZXIpOgorICAgICIiIkNvbnRhaW5lciBmb3Ig
YSBsaXN0IG9mIG9wdGlvbnMgYW5kIGV4cGVjdGF0aW9ucyBmb3IgYSBnaXZlbiB0ZXN0IGFzCisg
ICAgd2VsbCBhcyBhIG1hcCBmcm9tIGJ1aWxkX3R5cGUgKGUuZy4gZGVidWcvcmVsZWFzZSkgdG8g
YSBsaXN0IG9mIHBsYXRmb3JtcworICAgIChlLmcuIFsid2luIiwgImxpbnV4Il0pLgorICAgICIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIGV4cGVjdGF0aW9ucywgYnVpbGRf
aW5mbyk6CisgICAgICAgIE9wdGlvbnNBbmRFeHBlY3RhdGlvbnNIb2xkZXIuX19pbml0X18oc2Vs
Ziwgb3B0aW9ucywgZXhwZWN0YXRpb25zKQorICAgICAgICBzZWxmLmJ1aWxkX2luZm8gPSBidWls
ZF9pbmZvCisKKworY2xhc3MgRXhwZWN0YXRpb25zVXBkYXRlcih0ZXN0X2V4cGVjdGF0aW9ucy5U
ZXN0RXhwZWN0YXRpb25zRmlsZSk6CisgICAgIiIiQ2xhc3MgdG8gdXBkYXRlIHRlc3RfZXhwZWN0
YXRpb25zLnR4dCBiYXNlZCBvbiB1cGRhdGVzIGluIHRoZSBmb2xsb3dpbmcKKyAgICBmb3JtOgor
ICAgIHsidGVzdDEuaHRtbCI6IHsKKyAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJG
QUlMIFRJTUVPVVQiLCAiZXh0cmEiOiAiQ1JBU0gifX0KKyAgICAgICJXSU4gREVCVUciOiB7Im1p
c3NpbmciOiAiRkFJTCBUSU1FT1VUIn19CisgICAgICJ0ZXN0Mi5odG1sIjogLi4uCisgICAgfQor
ICAgICIiIgorCisgICAgZGVmIF9nZXRfYnVpbGRfdHlwZXNfYW5kX3BsYXRmb3JtcyhzZWxmLCBv
cHRpb25zKToKKyAgICAgICAgIiIiU3BsaXRzIHVwIHRoZSBvcHRpb25zIGxpc3QgaW50byB0aHJl
ZSBsaXN0czogcGxhdGZvcm1zLAorICAgICAgICBidWlsZF90eXBlcyBhbmQgb3RoZXJfb3B0aW9u
cy4iIiIKKyAgICAgICAgcGxhdGZvcm1zID0gW10KKyAgICAgICAgYnVpbGRfdHlwZXMgPSBbXQor
ICAgICAgICBvdGhlcl9vcHRpb25zID0gW10KKyAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25z
OgorICAgICAgICAgICAgaWYgb3B0aW9uIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAg
ICAgIHBsYXRmb3Jtcy5hcHBlbmQob3B0aW9uKQorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4g
c2VsZi5CVUlMRF9UWVBFUzoKKyAgICAgICAgICAgICAgICBidWlsZF90eXBlcy5hcHBlbmQob3B0
aW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdGhlcl9vcHRpb25zLmFw
cGVuZChvcHRpb24pCisKKyAgICAgICAgaWYgbm90IGxlbihidWlsZF90eXBlcyk6CisgICAgICAg
ICAgICBidWlsZF90eXBlcyA9IHNlbGYuQlVJTERfVFlQRVMKKworICAgICAgICBpZiBub3QgbGVu
KHBsYXRmb3Jtcyk6CisgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBubyBwbGF0Zm9ybXMgc3Bl
Y2lmaWVkLCB1c2UgdGhlIG1vc3QgZ2VuZXJpYyB2ZXJzaW9uCisgICAgICAgICAgICAjIG9mIGVh
Y2ggcGxhdGZvcm0gbmFtZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlZHVwIHRoZW0gbGF0ZXIuCisg
ICAgICAgICAgICBwbGF0Zm9ybXMgPSBzZWxmLkJBU0VfUExBVEZPUk1TCisKKyAgICAgICAgcmV0
dXJuIChwbGF0Zm9ybXMsIGJ1aWxkX3R5cGVzLCBvdGhlcl9vcHRpb25zKQorCisgICAgZGVmIF9h
cHBseV91cGRhdGVzX3RvX3Jlc3VsdHMoc2VsZiwgdGVzdCwgcmVzdWx0cywgdXBkYXRlX2pzb24s
CisgICAgICAgIGV4cGVjdGF0aW9ucywgb3RoZXJfb3B0aW9ucyk6CisgICAgICAgICIiIkFwcGxp
ZXMgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgSlNPTiB0byB0aGUgZXhpc3RpbmcgcmVzdWx0cyBpbgor
ICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0
OiBUaGUgdGVzdCB0byB1cGRhdGUuCisgICAgICAgICAgcmVzdWx0czogVGhlIHJlc3VsdHMgb2Jq
ZWN0IHRvIHVwZGF0ZS4KKyAgICAgICAgICB1cGRhdGVfanNvbjogVGhlIHBhcnNlZCBKU09OIG9i
amVjdCB3aXRoIHRoZSB1cGRhdGVzLgorICAgICAgICAgIGV4cGVjdGF0aW9uczogVGhlIGV4aXN0
aW5nIGV4cGVjdGF0b25zIGZvciB0aGlzIHRlc3QuCisgICAgICAgICAgb3RoZXJfb3B0aW9uczog
VGhlIGV4aXN0aW5nIG1vZGlmaWVycyBmb3IgdGhpcyB0ZXN0CisgICAgICAgICAgICAgIGV4Y2x1
ZGluZyBwbGF0Zm9ybXMgYW5kIGJ1aWxkX3R5cGVzLgorICAgICAgICAiIiIKKyAgICAgICAgdXBk
YXRlcyA9IHVwZGF0ZV9qc29uW3Rlc3RdCisgICAgICAgIGZvciBidWlsZF9pbmZvIGluIHVwZGF0
ZXM6CisgICAgICAgICAgICBwbGF0Zm9ybSwgYnVpbGRfdHlwZSA9IGJ1aWxkX2luZm8ubG93ZXIo
KS5zcGxpdCgnICcpCisKKyAgICAgICAgICAgICMgSWYgdGhlIHBsYXRmb3JtL2J1aWxkX3R5cGUg
aXMgbm90IGN1cnJlbnRseSBsaXN0ZWQgZm9yIHRoZSB0ZXN0LAorICAgICAgICAgICAgIyBza2lw
IGl0IGFzIHRoaXMgcGxhdGZvcm0vYnVpbGRfdHlwZSBtYXkgYmUgbGlzdGVkIGluIGFub3RoZXIK
KyAgICAgICAgICAgICMgbGluZS4KKyAgICAgICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiByZXN1
bHRzIG9yIGJ1aWxkX3R5cGUgbm90IGluIHJlc3VsdHNbcGxhdGZvcm1dOgorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHRoZXNlX3Jlc3VsdHMgPSByZXN1bHRzW3BsYXRm
b3JtXVtidWlsZF90eXBlXQorICAgICAgICAgICAgdGhlc2VfdXBkYXRlcyA9IHVwZGF0ZXNbYnVp
bGRfaW5mb10KKyAgICAgICAgICAgIHRoZXNlX2V4cGVjdGF0aW9ucyA9IHRoZXNlX3Jlc3VsdHMu
ZXhwZWN0YXRpb25zCisgICAgICAgICAgICB0aGVzZV9vcHRpb25zID0gdGhlc2VfcmVzdWx0cy5v
cHRpb25zCisKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2V4dHJhX3VwZGF0ZXModGhlc2VfdXBk
YXRlcywgdGhlc2Vfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhlc2VfZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfbWlzc2luZ191
cGRhdGVzKHRlc3QsIHRoZXNlX3VwZGF0ZXMsIHRoZXNlX29wdGlvbnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2VfZXhwZWN0YXRpb25zKQorCisgICAgZGVm
IF9hcHBseV9leHRyYV91cGRhdGVzKHNlbGYsIHVwZGF0ZXMsIG9wdGlvbnMsIGV4cGVjdGF0aW9u
cyk6CisgICAgICAgICIiIlJlbW92ZSBleHRyYW5lb3VzIGV4cGVjdGF0aW9ucy9vcHRpb25zIGlu
IHRoZSB1cGRhdGVzIG9iamVjdCB0bworICAgICAgICB0aGUgZ2l2ZW4gb3B0aW9ucy9leHBlY3Rh
dGlvbnMgbGlzdHMuCisgICAgICAgICIiIgorICAgICAgICBpZiAiZXh0cmEiIG5vdCBpbiB1cGRh
dGVzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXRlbXMgPSB1cGRhdGVzWyJleHRy
YSJdLmxvd2VyKCkuc3BsaXQoJyAnKQorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAg
ICAgICAgIGlmIGl0ZW0gaW4gc2VsZi5FWFBFQ1RBVElPTlM6CisgICAgICAgICAgICAgICAgaWYg
aXRlbSBpbiBleHBlY3RhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5y
ZW1vdmUoaXRlbSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBp
biBvcHRpb25zOgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlbW92ZShpdGVtKQorCisg
ICAgZGVmIF9hcHBseV9taXNzaW5nX3VwZGF0ZXMoc2VsZiwgdGVzdCwgdXBkYXRlcywgb3B0aW9u
cywgZXhwZWN0YXRpb25zKToKKyAgICAgICAgIiIiQXBwbHkgYW4gYWRkaXRpb24gZXhwZWN0YXRp
b25zL29wdGlvbnMgaW4gdGhlIHVwZGF0ZXMgb2JqZWN0IHRvCisgICAgICAgIHRoZSBnaXZlbiBv
cHRpb25zL2V4cGVjdGF0aW9ucyBsaXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICJtaXNz
aW5nIiBub3QgaW4gdXBkYXRlczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGl0ZW1z
ID0gdXBkYXRlc1sibWlzc2luZyJdLmxvd2VyKCkuc3BsaXQoJyAnKQorICAgICAgICBmb3IgaXRl
bSBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIGl0ZW0gPT0gJ290aGVyJzoKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIERvbid0IGFkZCBUSU1FT1VUIHRvIFNMT1cg
dGVzdHMuIEF1dG9tYXRpbmcgdGhhdCBpcyB0b28KKyAgICAgICAgICAgICMgY29tcGxpY2F0ZWQg
aW5zdGVhZCwgcHJpbnQgb3V0IHRlc3RzIHRoYXQgbmVlZCBtYW51YWwgYXR0ZW50aW9uLgorICAg
ICAgICAgICAgaWYgKChpdGVtID09ICJ0aW1lb3V0IiBhbmQKKyAgICAgICAgICAgICAgICAgKCJz
bG93IiBpbiBvcHRpb25zIG9yICJzbG93IiBpbiBpdGVtcykpIG9yCisgICAgICAgICAgICAgICAg
KGl0ZW0gPT0gInNsb3ciIGFuZAorICAgICAgICAgICAgICAgICAoInRpbWVvdXQiIGluIGV4cGVj
dGF0aW9ucyBvciAidGltZW91dCIgaW4gaXRlbXMpKSk6CisgICAgICAgICAgICAgICAgbG9nZ2lu
Zy5pbmZvKCJORUVEUyBNQU5VQUwgQVRURU5USU9OOiAlcyBtYXkgbmVlZCAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0byBiZSBtYXJrZWQgVElNRU9VVCBvciBTTE9XLiIgJSB0ZXN0
KQorICAgICAgICAgICAgZWxpZiBpdGVtIGluIHNlbGYuRVhQRUNUQVRJT05TOgorICAgICAgICAg
ICAgICAgIGlmIGl0ZW0gbm90IGluIGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0YXRpb25zLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgICAgICAgICBpZiAoImZhaWwi
IGluIGV4cGVjdGF0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtID09ICJp
bWFnZSt0ZXh0IiBvciBpdGVtID09ICJpbWFnZSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBpdGVtID09ICJ0ZXh0IikpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25z
LnJlbW92ZSgiZmFpbCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGl0
ZW0gbm90IGluIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKGl0
ZW0pCisKKyAgICBkZWYgX2FwcGVuZF9wbGF0Zm9ybShzZWxmLCBpdGVtLCBidWlsZF90eXBlLCBw
bGF0Zm9ybSk6CisgICAgICAgICIiIkFwcGVuZHMgdGhlIGdpdmUgYnVpbGRfdHlwZSBhbmQgcGxh
dGZvcm0gdG8gdGhlIEJ1aWxkSW5mbyBpdGVtLgorICAgICAgICAiIiIKKyAgICAgICAgYnVpbGRf
aW5mbyA9IGl0ZW0uYnVpbGRfaW5mbworICAgICAgICBpZiBidWlsZF90eXBlIG5vdCBpbiBidWls
ZF9pbmZvOgorICAgICAgICAgICAgYnVpbGRfaW5mb1tidWlsZF90eXBlXSA9IFtdCisgICAgICAg
IGJ1aWxkX2luZm9bYnVpbGRfdHlwZV0uYXBwZW5kKHBsYXRmb3JtKQorCisgICAgZGVmIF9nZXRf
dXBkYXRlc19kZWR1cGVkX2J5X21hdGNoaW5nX29wdGlvbnNfYW5kX2V4cGVjdGF0aW9ucyhzZWxm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0cyk6CisgICAgICAgICIiIkNvbnZlcnRzIHRoZSByZXN1bHRzLCB3
aGljaCBpcworICAgICAgICByZXN1bHRzW3BsYXRmb3Jtc11bYnVpbGRfdHlwZV0gPSBPcHRpb25z
QW5kRXhwZWN0YXRpb25zSG9sZGVyCisgICAgICAgIHRvIEJ1aWxkSW5mbyBvYmplY3RzLCB3aGlj
aCBkZWR1cGVzIHBsYXRmb3JtL2J1aWxkX3R5cGVzIHRoYXQKKyAgICAgICAgaGF2ZSB0aGUgc2Ft
ZSBleHBlY3RhdGlvbnMgYW5kIG9wdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICB1cGRhdGVz
ID0gW10KKyAgICAgICAgZm9yIHBsYXRmb3JtIGluIHJlc3VsdHM6CisgICAgICAgICAgICBmb3Ig
YnVpbGRfdHlwZSBpbiByZXN1bHRzW3BsYXRmb3JtXToKKyAgICAgICAgICAgICAgICBvcHRpb25z
ID0gcmVzdWx0c1twbGF0Zm9ybV1bYnVpbGRfdHlwZV0ub3B0aW9ucworICAgICAgICAgICAgICAg
IGV4cGVjdGF0aW9ucyA9IHJlc3VsdHNbcGxhdGZvcm1dW2J1aWxkX3R5cGVdLmV4cGVjdGF0aW9u
cworCisgICAgICAgICAgICAgICAgZm91bmRfbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAg
IGZvciB1cGRhdGUgaW4gdXBkYXRlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZS5v
cHRpb25zID09IG9wdGlvbnMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUuZXhw
ZWN0YXRpb25zID09IGV4cGVjdGF0aW9ucyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9hcHBlbmRfcGxhdGZvcm0odXBkYXRlLCBidWlsZF90eXBlLCBwbGF0Zm9ybSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kX21hdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX21hdGNoOgorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdXBkYXRlID0gQnVpbGRJbmZvKG9w
dGlvbnMsIGV4cGVjdGF0aW9ucywge30pCisgICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3Bs
YXRmb3JtKHVwZGF0ZSwgYnVpbGRfdHlwZSwgcGxhdGZvcm0pCisgICAgICAgICAgICAgICAgdXBk
YXRlcy5hcHBlbmQodXBkYXRlKQorCisgICAgICAgIHJldHVybiBzZWxmLl9yb3VuZF91cF9mbGFr
eV91cGRhdGVzKHVwZGF0ZXMpCisKKyAgICBkZWYgX2hhc19tYWpvcml0eV9idWlsZF9jb25maWd1
cmF0aW9ucyhzZWxmLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZTIpOgorICAgICAgICAiIiJSZXR1cm5z
IHRydWUgaWYgdGhlIGNhbmRpZGF0ZSBCdWlsZEluZm8gcmVwcmVzZW50cyBhbGwgYnVpbGQKKyAg
ICAgICAgY29uZmlndXJhdGlvbnMgZXhjZXB0IHRoZSBzaW5nbGUgb25lIGxpc3RlZCBpbiBjYW5k
aWRhdGUyLgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYSB0ZXN0IGlzIEZBSUwgVElNRU9VVCBv
biBhbGwgYm90cyBleGNlcHQgV0lOLVJlbGVhc2UsCisgICAgICAgIHdoZXJlIGl0IGlzIGp1c3Qg
RkFJTC4gT3IgaWYgYSB0ZXN0IGlzIEZBSUwgVElNRU9VVCBvbiBNQUMtUmVsZWFzZSwKKyAgICAg
ICAgTWFjLURlYnVnIGFuZCBMaW51eC1SZWxlYXNlLCBidXQgb25seSBGQUlMIG9uIExpbnV4LURl
YnVnLgorICAgICAgICAiIiIKKyAgICAgICAgYnVpbGRfdHlwZXMgPSBzZWxmLkJVSUxEX1RZUEVT
WzpdCisgICAgICAgIGJ1aWxkX2luZm8gPSBjYW5kaWRhdGUuYnVpbGRfaW5mbworICAgICAgICBp
ZiAicmVsZWFzZSIgbm90IGluIGJ1aWxkX2luZm8gb3IgImRlYnVnIiBub3QgaW4gYnVpbGRfaW5m
bzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmVsZWFzZV9zZXQgPSBzZXQo
YnVpbGRfaW5mb1sicmVsZWFzZSJdKQorICAgICAgICBkZWJ1Z19zZXQgPSBzZXQoYnVpbGRfaW5m
b1siZGVidWciXSkKKyAgICAgICAgaWYgbGVuKHJlbGVhc2Vfc2V0IC0gZGVidWdfc2V0KSBpcyAx
OgorICAgICAgICAgICAgZnVsbF9zZXQgPSByZWxlYXNlX3NldAorICAgICAgICAgICAgcGFydGlh
bF9zZXQgPSBkZWJ1Z19zZXQKKyAgICAgICAgICAgIG5lZWRlZF9idWlsZF90eXBlID0gImRlYnVn
IgorICAgICAgICBlbGlmIGxlbihkZWJ1Z19zZXQgLSByZWxlYXNlX3NldCkgaXMgMToKKyAgICAg
ICAgICAgIGZ1bGxfc2V0ID0gZGVidWdfc2V0CisgICAgICAgICAgICBwYXJ0aWFsX3NldCA9IHJl
bGVhc2Vfc2V0CisgICAgICAgICAgICBuZWVkZWRfYnVpbGRfdHlwZSA9ICJyZWxlYXNlIgorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBidWlsZF9pbmZv
MiA9IGNhbmRpZGF0ZTIuYnVpbGRfaW5mbworICAgICAgICBpZiBuZWVkZWRfYnVpbGRfdHlwZSBu
b3QgaW4gYnVpbGRfaW5mbzI6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJ1
aWxkX3R5cGUgPSBOb25lCisgICAgICAgIGZvciB0aGlzX2J1aWxkX3R5cGUgaW4gYnVpbGRfaW5m
bzI6CisgICAgICAgICAgICAjIENhbiBvbmx5IHdvcmsgaWYgdGhpcyBjYW5kaWRhdGUgaGFzIG9u
ZSBidWlsZF90eXBlLgorICAgICAgICAgICAgaWYgYnVpbGRfdHlwZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQorICAgICAgICAgICAgYnVpbGRfdHlwZSA9IHRoaXNfYnVpbGRfdHlwZQor
CisgICAgICAgIGlmIHNldChidWlsZF9pbmZvMltuZWVkZWRfYnVpbGRfdHlwZV0pID09IGZ1bGxf
c2V0IC0gcGFydGlhbF9zZXQ6CisgICAgICAgICAgICByZXR1cm4gZnVsbF9zZXQKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3JvdW5kX3VwX2ZsYWt5
X3VwZGF0ZXMoc2VsZiwgdXBkYXRlcyk6CisgICAgICAgICIiIkNvbnNvbGlkYXRlcyB0aGUgdXBk
YXRlcyBpbnRvIG9uZSB1cGRhdGUgaWYgNS82IHJlc3VsdHMgYXJlCisgICAgICAgIGZsYWt5IGFu
ZCB0aGUgaXMgYSBzdWJzZXQgb2YgdGhlIGZsYWt5IHJlc3VsdHMgNnRoIGp1c3Qgbm90CisgICAg
ICAgIGhhcHBlbmluZyB0byBmbGFrZSBvciAzLzQgcmVzdWx0cyBhcmUgZmxha3kgYW5kIHRoZSA0
dGggaGFzIGEKKyAgICAgICAgc3Vic2V0IG9mIHRoZSBmbGFreSByZXN1bHRzLgorICAgICAgICAi
IiIKKyAgICAgICAgaWYgbGVuKHVwZGF0ZXMpIGlzIG5vdCAyOgorICAgICAgICAgICAgcmV0dXJu
IHVwZGF0ZXMKKworICAgICAgICBpdGVtMSwgaXRlbTIgPSB1cGRhdGVzCisgICAgICAgIGNhbmRp
ZGF0ZSA9IE5vbmUKKyAgICAgICAgY2FuZGlkYXRlX3BsYXRmb3JtcyA9IHNlbGYuX2hhc19tYWpv
cml0eV9idWlsZF9jb25maWd1cmF0aW9ucyhpdGVtMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtMikKKyAg
ICAgICAgaWYgY2FuZGlkYXRlX3BsYXRmb3JtczoKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGl0
ZW0xCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYW5kaWRhdGVfcGxhdGZvcm1zID0gc2Vs
Zi5faGFzX21ham9yaXR5X2J1aWxkX2NvbmZpZ3VyYXRpb25zKAorICAgICAgICAgICAgICAgIGl0
ZW0xLCBpdGVtMikKKyAgICAgICAgICAgIGlmIGNhbmRpZGF0ZV9wbGF0Zm9ybXM6CisgICAgICAg
ICAgICAgICAgY2FuZGlkYXRlID0gaXRlbTIKKworICAgICAgICBpZiBjYW5kaWRhdGU6CisgICAg
ICAgICAgICBvcHRpb25zMSA9IHNldChpdGVtMS5vcHRpb25zKQorICAgICAgICAgICAgb3B0aW9u
czIgPSBzZXQoaXRlbTIub3B0aW9ucykKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uczEgPSBzZXQo
aXRlbTEuZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgaWYgbm90IGxlbihleHBlY3RhdGlvbnMx
KToKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMxLmFkZCgicGFzcyIpCisgICAgICAgICAg
ICBleHBlY3RhdGlvbnMyID0gc2V0KGl0ZW0yLmV4cGVjdGF0aW9ucykKKyAgICAgICAgICAgIGlm
IG5vdCBsZW4oZXhwZWN0YXRpb25zMik6CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zMi5h
ZGQoInBhc3MiKQorCisgICAgICAgICAgICBvcHRpb25zX3VuaW9uID0gb3B0aW9uczEgfCBvcHRp
b25zMgorICAgICAgICAgICAgZXhwZWN0YXRpb25zX3VuaW9uID0gZXhwZWN0YXRpb25zMSB8IGV4
cGVjdGF0aW9uczIKKyAgICAgICAgICAgICMgSWYgdGhlIG9wdGlvbnMgYW5kIGV4cGVjdGF0aW9u
cyBhcmUgZXF1YWwgdG8gdGhlaXIgcmVzcGVjdGl2ZQorICAgICAgICAgICAgIyB1bmlvbnMgdGhl
biB3ZSBjYW4gcm91bmQgdXAgdG8gaW5jbHVkZSB0aGUgNnRoIHBsYXRmb3JtLgorICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZSA9PSBpdGVtMSBhbmQgb3B0aW9uczEgPT0gb3B0aW9uc191bmlvbiBh
bmQKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMxID09IGV4cGVjdGF0aW9uc191bmlvbiBh
bmQgbGVuKGV4cGVjdGF0aW9uczIpIG9yCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlID09IGl0
ZW0yIGFuZCBvcHRpb25zMiA9PSBvcHRpb25zX3VuaW9uIGFuZAorICAgICAgICAgICAgICAgIGV4
cGVjdGF0aW9uczIgPT0gZXhwZWN0YXRpb25zX3VuaW9uIGFuZCBsZW4oZXhwZWN0YXRpb25zMSkp
OgorICAgICAgICAgICAgICAgIGZvciBidWlsZF90eXBlIGluIHNlbGYuQlVJTERfVFlQRVM6Cisg
ICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5idWlsZF9pbmZvW2J1aWxkX3R5cGVdID0gbGlz
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZV9wbGF0Zm9ybXMpCisgICAgICAg
ICAgICAgICAgdXBkYXRlcyA9IFtjYW5kaWRhdGVdCisgICAgICAgIHJldHVybiB1cGRhdGVzCisK
KyAgICBkZWYgdXBkYXRlX2Jhc2VkX29uX2pzb24oc2VsZiwgdXBkYXRlX2pzb24pOgorICAgICAg
ICAiIiJVcGRhdGVzIHRoZSBleHBlY3RhdGlvbnMgYmFzZWQgb24gdGhlIHVwZGF0ZV9qc29uLCB3
aGljaCBpcyBvZiB0aGUKKyAgICAgICAgZm9sbG93aW5nIGZvcm06CisgICAgICAgIHsiMS5odG1s
IjogeworICAgICAgICAgICJXSU4gREVCVUciOiB7ImV4dHJhIjogIkZBSUwiLCAibWlzc2luZyIs
ICJQQVNTIn0sCisgICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0KKyAg
ICAgICAgfX0KKyAgICAgICAgIiIiCisgICAgICAgIG91dHB1dCA9IFtdCisKKyAgICAgICAgY29t
bWVudF9saW5lcyA9IFtdCisgICAgICAgIHJlbW92ZWRfdGVzdF9vbl9wcmV2aW91c19saW5lID0g
RmFsc2UKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9nZXRf
aXRlcmFibGVfZXhwZWN0YXRpb25zKCk6CisgICAgICAgICAgICBsaW5lbm8gKz0gMQorICAgICAg
ICAgICAgdGVzdCwgb3B0aW9ucywgZXhwZWN0YXRpb25zID0gc2VsZi5wYXJzZV9leHBlY3RhdGlv
bnNfbGluZShsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8pCisKKyAgICAgICAgICAgICMgSWYg
dGhlcmUgYXJlIG5vIHVwZGF0ZXMgZm9yIHRoaXMgdGVzdCwgdGhlbiBvdXRwdXQgdGhlIGxpbmUK
KyAgICAgICAgICAgICMgdW5tb2RpZmllZC4KKyAgICAgICAgICAgIGlmICh0ZXN0IG5vdCBpbiB1
cGRhdGVfanNvbik6CisgICAgICAgICAgICAgICAgaWYgdGVzdDoKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fd3JpdGVfY29tcGxldGVkX2xpbmVzKG91dHB1dCwgY29tbWVudF9saW5lcywgbGlu
ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVk
X3Rlc3Rfb25fcHJldmlvdXNfbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRf
dGVzdF9vbl9wcmV2aW91c19saW5lID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnRfbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBjb21tZW50X2xpbmVzLmFwcGVu
ZChsaW5lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHBsYXRmb3Jt
cywgYnVpbGRfdHlwZXMsIG90aGVyX29wdGlvbnMgPSBcCisgICAgICAgICAgICAgICAgc2VsZi5f
Z2V0X2J1aWxkX3R5cGVzX2FuZF9wbGF0Zm9ybXMob3B0aW9ucykKKworICAgICAgICAgICAgdXBk
YXRlcyA9IHVwZGF0ZV9qc29uW3Rlc3RdCisgICAgICAgICAgICBoYXNfdXBkYXRlc19mb3JfdGhp
c19saW5lID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBidWlsZF9pbmZvIGluIHVwZGF0ZXM6Cisg
ICAgICAgICAgICAgICAgcGxhdGZvcm0sIGJ1aWxkX3R5cGUgPSBidWlsZF9pbmZvLmxvd2VyKCku
c3BsaXQoJyAnKQorICAgICAgICAgICAgICAgIGlmIHBsYXRmb3JtIGluIHBsYXRmb3JtcyBhbmQg
YnVpbGRfdHlwZSBpbiBidWlsZF90eXBlczoKKyAgICAgICAgICAgICAgICAgICAgaGFzX3VwZGF0
ZXNfZm9yX3RoaXNfbGluZSA9IFRydWUKKworICAgICAgICAgICAgIyBJZiB0aGUgdXBkYXRlcyBm
b3IgdGhpcyB0ZXN0IGRvbid0IGFwcGx5IGZvciB0aGUgcGxhdGZvcm1zIC8KKyAgICAgICAgICAg
ICMgYnVpbGQtdHlwZXMgbGlzdGVkIGluIHRoaXMgbGluZSwgdGhlbiBvdXRwdXQgdGhlIGxpbmUg
dW5tb2RpZmllZC4KKyAgICAgICAgICAgIGlmIG5vdCBoYXNfdXBkYXRlc19mb3JfdGhpc19saW5l
OgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2NvbXBsZXRlZF9saW5lcyhvdXRwdXQsIGNv
bW1lbnRfbGluZXMsIGxpbmUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgcmVzdWx0cyA9IHt9CisgICAgICAgICAgICBmb3IgcGxhdGZvcm0gaW4gcGxhdGZvcm1zOgor
ICAgICAgICAgICAgICAgIHJlc3VsdHNbcGxhdGZvcm1dID0ge30KKyAgICAgICAgICAgICAgICBm
b3IgYnVpbGRfdHlwZSBpbiBidWlsZF90eXBlczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
c1twbGF0Zm9ybV1bYnVpbGRfdHlwZV0gPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBPcHRp
b25zQW5kRXhwZWN0YXRpb25zSG9sZGVyKG90aGVyX29wdGlvbnNbOl0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc1s6XSkK
KworICAgICAgICAgICAgc2VsZi5fYXBwbHlfdXBkYXRlc190b19yZXN1bHRzKHRlc3QsIHJlc3Vs
dHMsIHVwZGF0ZV9qc29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGF0aW9ucywgb3RoZXJfb3B0aW9ucykKKworICAgICAgICAgICAgZGVkdXBlZF91
cGRhdGVzID0gXAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF91cGRhdGVzX2RlZHVwZWRfYnlf
bWF0Y2hpbmdfb3B0aW9uc19hbmRfZXhwZWN0YXRpb25zKAorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzKQorICAgICAgICAgICAgcmVtb3ZlZF90ZXN0X29uX3ByZXZpb3VzX2xpbmUgPSBub3Qg
c2VsZi5fd3JpdGVfdXBkYXRlcyhvdXRwdXQsCisgICAgICAgICAgICAgICAgY29tbWVudF9saW5l
cywgdGVzdCwgZGVkdXBlZF91cGRhdGVzKQorICAgICAgICAjIEFwcGVuZCBhbnkgY29tbWVudC93
aGl0ZXNwYWNlIGxpbmVzIGF0IHRoZSBlbmQgb2YgdGVzdF9leHBlY3RhdGlvbnMuCisgICAgICAg
IG91dHB1dC5leHRlbmQoY29tbWVudF9saW5lcykKKyAgICAgICAgcmV0dXJuICIiLmpvaW4ob3V0
cHV0KQorCisgICAgZGVmIF93cml0ZV91cGRhdGVzKHNlbGYsIG91dHB1dCwgY29tbWVudF9saW5l
cywgdGVzdCwgdXBkYXRlcyk6CisgICAgICAgICIiIldyaXRlcyB0aGUgdXBkYXRlcyB0byB0aGUg
b3V0cHV0LgorICAgICAgICBBcmdzOgorICAgICAgICAgIG91dHB1dDogTGlzdCB0byBhcHBlbmQg
dXBkYXRlcyB0by4KKyAgICAgICAgICBjb21tZW50X2xpbmVzOiBDb21tZW50cyB0aGF0IGNvbWUg
YmVmb3JlIHRoaXMgdGVzdCB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgICBwcmVwZW5kaW5n
IGlmZiBhbnkgdGVzdHMgbGluZXMgYXJlIHdyaXR0ZW4gb3V0LgorICAgICAgICAgIHRlc3Q6IFRo
ZSB0ZXN0IGJlaW5nIHVwZGF0aW5nLgorICAgICAgICAgIHVwZGF0ZXM6IExpc3Qgb2YgQnVpbGRJ
bmZvIGluc3RhbmNlcyB0aGF0IHJlcHJlc2VudCB0aGUgZmluYWwgdmFsdWVzCisgICAgICAgICAg
ICAgIGZvciB0aGlzIHRlc3QgbGluZS4uCisgICAgICAgICIiIgorICAgICAgICB3cm90ZV9hbnlf
bGluZXMgPSBGYWxzZQorICAgICAgICBmb3IgdXBkYXRlIGluIHVwZGF0ZXM6CisgICAgICAgICAg
ICBvcHRpb25zID0gdXBkYXRlLm9wdGlvbnMKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucyA9IHVw
ZGF0ZS5leHBlY3RhdGlvbnMKKworICAgICAgICAgICAgaGFzX21lYW5pbmdmdWxfbW9kaWZpZXIg
PSBGYWxzZQorICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICAgICAg
ICAgIGlmIG9wdGlvbiBpbiBzZWxmLk1PRElGSUVSUzoKKyAgICAgICAgICAgICAgICAgICAgaGFz
X21lYW5pbmdmdWxfbW9kaWZpZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisK
KyAgICAgICAgICAgIGhhc19ub25fcGFzc19leHBlY3RhdGlvbiA9IEZhbHNlCisgICAgICAgICAg
ICBmb3IgZXhwZWN0YXRpb24gaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgICAgIGlmIGV4
cGVjdGF0aW9uICE9ICJwYXNzIjoKKyAgICAgICAgICAgICAgICAgICAgaGFzX25vbl9wYXNzX2V4
cGVjdGF0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAg
ICAjIElmIHRoaXMgdGVzdCBpcyBvbmx5IGxlZnQgd2l0aCBwbGF0Zm9ybSwgYnVpbGRfdHlwZSwg
YnVnIG51bWJlcgorICAgICAgICAgICAgIyBhbmQgYSBQQVNTIG9yIG5vIGV4cGVjdGF0aW9uLCB0
aGVuIHdlIGNhbiBleGNsdWRlIGl0IGZyb20KKyAgICAgICAgICAgICMgdGVzdF9leHBlY3RhdGlv
bnMuCisgICAgICAgICAgICBpZiBub3QgaGFzX21lYW5pbmdmdWxfbW9kaWZpZXIgYW5kIG5vdCBo
YXNfbm9uX3Bhc3NfZXhwZWN0YXRpb246CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAg
ICAgICAgICAgaWYgbm90IGhhc19ub25fcGFzc19leHBlY3RhdGlvbjoKKyAgICAgICAgICAgICAg
ICBleHBlY3RhdGlvbnMgPSBbInBhc3MiXQorCisgICAgICAgICAgICBtaXNzaW5nX2J1aWxkX3R5
cGVzID0gbGlzdChzZWxmLkJVSUxEX1RZUEVTKQorICAgICAgICAgICAgc2VudGluYWwgPSBOb25l
CisgICAgICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiB1cGRhdGUuYnVpbGRfaW5mbzoKKyAgICAg
ICAgICAgICAgICBpZiBub3Qgc2VudGluYWw6CisgICAgICAgICAgICAgICAgICAgIHNlbnRpbmFs
ID0gdXBkYXRlLmJ1aWxkX2luZm9bYnVpbGRfdHlwZV0KKyAgICAgICAgICAgICAgICAjIFJlbW92
ZSBidWlsZF90eXBlcyB3aGVyZSB0aGUgbGlzdCBvZiBwbGF0Zm9ybXMgaXMgZXF1YWwuCisgICAg
ICAgICAgICAgICAgaWYgc2VudGluYWwgPT0gdXBkYXRlLmJ1aWxkX2luZm9bYnVpbGRfdHlwZV06
CisgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdfYnVpbGRfdHlwZXMucmVtb3ZlKGJ1aWxkX3R5
cGUpCisKKyAgICAgICAgICAgIGhhc19hbGxfYnVpbGRfdHlwZXMgPSBub3QgbGVuKG1pc3Npbmdf
YnVpbGRfdHlwZXMpCisgICAgICAgICAgICBpZiBoYXNfYWxsX2J1aWxkX3R5cGVzOgorICAgICAg
ICAgICAgICAgIHNlbGYuX3dyaXRlX2xpbmUob3V0cHV0LCBjb21tZW50X2xpbmVzLCB1cGRhdGUs
IG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF90eXBlLCBl
eHBlY3RhdGlvbnMsIHRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNf
YWxsX2J1aWxkX3R5cGVzKQorICAgICAgICAgICAgICAgIHdyb3RlX2FueV9saW5lcyA9IFRydWUK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gdXBk
YXRlLmJ1aWxkX2luZm86CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2xpbmUob3V0
cHV0LCBjb21tZW50X2xpbmVzLCB1cGRhdGUsIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnVpbGRfdHlwZSwgZXhwZWN0YXRpb25zLCB0ZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19hbGxfYnVpbGRfdHlwZXMpCisgICAg
ICAgICAgICAgICAgICAgIHdyb3RlX2FueV9saW5lcyA9IFRydWUKKworICAgICAgICByZXR1cm4g
d3JvdGVfYW55X2xpbmVzCisKKyAgICBkZWYgX3dyaXRlX2NvbXBsZXRlZF9saW5lcyhzZWxmLCBv
dXRwdXQsIGNvbW1lbnRfbGluZXMsIHRlc3RfbGluZT1Ob25lKToKKyAgICAgICAgIiIiV3JpdGVz
IHRoZSBjb21tZW50X2xpbmVzIGFuZCB0ZXN0X2xpbmUgdG8gdGhlIG91dHB1dCBhbmQgZW1wdGll
cworICAgICAgICBvdXQgdGhlIGNvbW1lbnRfbGluZXMuIiIiCisgICAgICAgIG91dHB1dC5leHRl
bmQoY29tbWVudF9saW5lcykKKyAgICAgICAgZGVsIGNvbW1lbnRfbGluZXNbOl0KKyAgICAgICAg
aWYgdGVzdF9saW5lOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh0ZXN0X2xpbmUpCisKKyAg
ICBkZWYgX2dldF9wbGF0Zm9ybShzZWxmLCBwbGF0Zm9ybXMpOgorICAgICAgICAiIiJSZXR1cm5z
IHRoZSBwbGF0Zm9ybSB0byB1c2UuIElmIGFsbCBwbGF0Zm9ybXMgYXJlIGxpc3RlZCwgdGhlbgor
ICAgICAgICByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyBhcyB0aGF0J3Mgd2hhdCB3ZSB3YW50IHRv
IGxpc3QgaW4KKyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMudHh0LgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgcGxhdGZvcm1zOiBMaXN0IG9mIGxvd2VyLWNhc2UgcGxhdGZvcm0gbmFtZXMu
CisgICAgICAgICIiIgorICAgICAgICBwbGF0Zm9ybXMuc29ydCgpCisgICAgICAgIGlmIHBsYXRm
b3JtcyA9PSBsaXN0KHNlbGYuQkFTRV9QTEFURk9STVMpOgorICAgICAgICAgICAgcmV0dXJuICIi
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiAiLmpvaW4ocGxhdGZvcm1zKQor
CisgICAgZGVmIF93cml0ZV9saW5lKHNlbGYsIG91dHB1dCwgY29tbWVudF9saW5lcywgdXBkYXRl
LCBvcHRpb25zLCBidWlsZF90eXBlLAorICAgICAgICBleHBlY3RhdGlvbnMsIHRlc3QsIGV4Y2x1
ZGVfYnVpbGRfdHlwZSk6CisgICAgICAgICIiIldyaXRlcyBhIHRlc3RfZXhwZWN0YXRpb25zLnR4
dCBsaW5lLgorICAgICAgICBBcmdzOgorICAgICAgICAgIG91dHB1dDogTGlzdCB0byBhcHBlbmQg
bmV3IGxpbmVzIHRvLgorICAgICAgICAgIGNvbW1lbnRfbGluZXM6IExpc3Qgb2YgbGluZXMgdG8g
cHJlcGVuZCBiZWZvcmUgdGhlIG5ldyBsaW5lLgorICAgICAgICAgIHVwZGF0ZTogVGhlIHVwZGF0
ZSBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBsaW5lID0gb3B0aW9uc1s6XQorCisgICAg
ICAgIHBsYXRmb3JtcyA9IHNlbGYuX2dldF9wbGF0Zm9ybSh1cGRhdGUuYnVpbGRfaW5mb1tidWls
ZF90eXBlXSkKKyAgICAgICAgaWYgcGxhdGZvcm1zOgorICAgICAgICAgICAgbGluZS5hcHBlbmQo
cGxhdGZvcm1zKQorICAgICAgICBpZiBub3QgZXhjbHVkZV9idWlsZF90eXBlOgorICAgICAgICAg
ICAgbGluZS5hcHBlbmQoYnVpbGRfdHlwZSkKKworICAgICAgICBsaW5lID0gW3gudXBwZXIoKSBm
b3IgeCBpbiBsaW5lXQorICAgICAgICBleHBlY3RhdGlvbnMgPSBbeC51cHBlcigpIGZvciB4IGlu
IGV4cGVjdGF0aW9uc10KKworICAgICAgICBsaW5lID0gbGluZSArIFsiOiIsIHRlc3QsICI9Il0g
KyBleHBlY3RhdGlvbnMKKyAgICAgICAgc2VsZi5fd3JpdGVfY29tcGxldGVkX2xpbmVzKG91dHB1
dCwgY29tbWVudF9saW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
Ii5qb2luKGxpbmUpICsgIlxuIikKKworCitkZWYgbWFpbigpOgorICAgIGxvZ2dpbmcuYmFzaWND
b25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLAorICAgICAgICBmb3JtYXQ9JyUobWVzc2FnZSlzJykK
KworICAgIHVwZGF0ZXMgPSBzaW1wbGVqc29uLmxvYWQob3BlbihzeXMuYXJndlsxXSkpCisKKyAg
ICBwYXRoX3RvX2V4cGVjdGF0aW9ucyA9IHBhdGhfdXRpbHMuZ2V0X2Fic29sdXRlX3BhdGgoCisg
ICAgICAgIG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpCisgICAgcGF0aF90b19leHBlY3Rh
dGlvbnMgPSBvcy5wYXRoLmpvaW4ocGF0aF90b19leHBlY3RhdGlvbnMsCisgICAgICAgICJ0ZXN0
X2V4cGVjdGF0aW9ucy50eHQiKQorCisgICAgb2xkX2V4cGVjdGF0aW9ucyA9IG9wZW4ocGF0aF90
b19leHBlY3RhdGlvbnMpLnJlYWQoKQorICAgIG5ld19leHBlY3RhdGlvbnMgPSB1cGRhdGVfZXhw
ZWN0YXRpb25zKG9sZF9leHBlY3RhdGlvbnMsIHVwZGF0ZXMpCisgICAgb3BlbihwYXRoX3RvX2V4
cGVjdGF0aW9ucywgJ3cnKS53cml0ZShuZXdfZXhwZWN0YXRpb25zKQorCitpZiAnX19tYWluX18n
ID09IF9fbmFtZV9fOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0aW9uc19mcm9tX2Rhc2hib2Fy
ZF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3VwZGF0ZV9leHBlY3RhdGlvbnNfZnJvbV9kYXNoYm9hcmRfdW5pdHRlc3QucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3MjI3OAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3VwZGF0ZV9leHBlY3RhdGlv
bnNfZnJvbV9kYXNoYm9hcmRfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwzNzcgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5h
bWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0dGVzdHMgdG8gbWFr
ZSBzdXJlIHdlIGdlbmVyYXRlIGFuZCB1cGRhdGUgdGhlIGV4cGVjdGVkLSoudHh0IGZpbGVzCitw
cm9wZXJseSBhZnRlciBydW5uaW5nIGxheW91dCB0ZXN0cy4iIiIKKworaW1wb3J0IG9zCitpbXBv
cnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHVwZGF0ZV9leHBlY3RhdGlvbnNfZnJv
bV9kYXNoYm9hcmQKKworCitjbGFzcyBVcGRhdGVFeHBlY3RhdGlvbnNVbml0dGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBUZXN0cworCisgICAg
ZGVmIHRlc3Rfa2VlcHNfdW5tb2RpZmllZF9saW5lcyhzZWxmKToKKyAgICAgICAgZXhwZWN0YXRp
b25zID0gIiIiLy8gRW5zdXJlIGNvbW1lbnRzIGFuZCBuZXdsaW5lcyBkb24ndCBnZXQgc3RyaXBw
ZWQuCisgICAgQlVHMSBTTE9XIDogMS5odG1sID0gUEFTUworCisgICAgQlVHMiA6IDIuaHRtbCA9
IEZBSUwgVElNRU9VVAorICAgICIiIgorICAgICAgICBleHBfcmVzdWx0cyA9ICIiIi8vIEVuc3Vy
ZSBjb21tZW50cyBhbmQgbmV3bGluZXMgZG9uJ3QgZ2V0IHN0cmlwcGVkLgorICAgIEJVRzEgU0xP
VyA6IDEuaHRtbCA9IFBBU1MKKworICAgIEJVRzIgOiAyLmh0bWwgPSBGQUlMIFRJTUVPVVQKKyAg
ICAiIiIKKworICAgICAgICB1cGRhdGVzID0gW10KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0
YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVz
dF9yZW1vdmVfZmxha3lfZXhwZWN0YXRpb24oc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9
ICJCVUcxIDogMS5odG1sID0gVElNRU9VVCBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3Vs
dHMgPSAiQlVHMSA6IDEuaHRtbCA9IFRJTUVPVVRcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5o
dG1sIjogeworICAgICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0sCisg
ICAgICAgICAgICAiV0lOIERFQlVHIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAi
TElOVVggUkVMRUFTRSI6IHsiZXh0cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAgIkxJTlVYIERF
QlVHIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7ImV4
dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7ImV4dHJhIjogIkZBSUwi
fX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0
ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZXhwZWN0YXRpb25f
c2xvd190ZXN0KHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSBTTE9XIDogMS5o
dG1sID0gRkFJTFxuIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgU0xPVyA6IDEu
aHRtbCA9IFBBU1NcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeworICAgICAgICAg
ICAgIldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiV0lOIERF
QlVHIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsi
ZXh0cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJleHRyYSI6ICJG
QUlMIn0sCisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7ImV4dHJhIjogIkZBSUwifSwKKyAg
ICAgICAgICAgICJNQUMgREVCVUciOiB7ImV4dHJhIjogIkZBSUwifX19CisgICAgICAgIHNlbGYu
dXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3Vs
dHMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZXhwZWN0YXRpb24oc2VsZik6CisgICAgICAgIGV4
cGVjdGF0aW9ucyA9ICJCVUcxIDogMS5odG1sID0gRkFJTFxuIgorICAgICAgICBleHBlY3RlZF9y
ZXN1bHRzID0gIiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeworICAgICAgICAgICAg
IldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiV0lOIERFQlVH
IjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsiZXh0
cmEiOiAiRkFJTCJ9LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJleHRyYSI6ICJGQUlM
In0sCisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7ImV4dHJhIjogIkZBSUwifSwKKyAgICAg
ICAgICAgICJNQUMgREVCVUciOiB7ImV4dHJhIjogIkZBSUwifX19CisgICAgICAgIHNlbGYudXBk
YXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMp
CisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZXhwZWN0YXRpb25fZnJvbV9vbmVfcGxhdGZvcm0oc2Vs
Zik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIDogMS5odG1sID0gRkFJTFxuIgorICAg
ICAgICBleHBlY3RlZF9yZXN1bHRzID0gIiIiQlVHMSBNQUMgV0lOIERFQlVHIDogMS5odG1sID0g
RkFJTAorICAgIEJVRzEgUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUwKKyAgICAiIiIKKyAgICAgICAg
dXBkYXRlcyA9IHsiMS5odG1sIjogeyJMSU5VWCBERUJVRyI6IHsiZXh0cmEiOiAiRkFJTCJ9fX0K
KyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywg
ZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9zbG93KHNlbGYpOgorICAg
ICAgICBleHBlY3RhdGlvbnMgPSAiQlVHMSBTTE9XIDogMS5odG1sID0gUEFTU1xuIgorICAgICAg
ICBleHBlY3RlZF9yZXN1bHRzID0gIiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogewor
ICAgICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJTTE9XIn0sCisgICAgICAgICAg
ICAiV0lOIERFQlVHIjogeyJleHRyYSI6ICJTTE9XIn0sCisgICAgICAgICAgICAiTElOVVggUkVM
RUFTRSI6IHsiZXh0cmEiOiAiU0xPVyJ9LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJl
eHRyYSI6ICJTTE9XIn0sCisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7ImV4dHJhIjogIlNM
T1cifSwKKyAgICAgICAgICAgICJNQUMgREVCVUciOiB7ImV4dHJhIjogIlNMT1cifX19CisgICAg
ICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVj
dGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9hZGRfZmxha3lfZXhwZWN0YXRpb24oc2VsZik6
CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIDogMS5odG1sID0gVElNRU9VVFxuIgorICAg
ICAgICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgOiAxLmh0bWwgPSBUSU1FT1VUIEZBSUxcbiIK
KyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeworICAgICAgICAgICAgIldJTiBSRUxFQVNF
IjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7Im1pc3Np
bmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIkxJTlVYIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAi
RkFJTCJ9LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwifSwK
KyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAg
ICAgICAiTUFDIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwifX19CisgICAgICAgIHNlbGYudXBk
YXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMp
CisKKyAgICBkZWYgdGVzdF9hZGRfZXhwZWN0YXRpb25fc2xvd190ZXN0KHNlbGYpOgorICAgICAg
ICBleHBlY3RhdGlvbnMgPSAiQlVHMSBTTE9XIDogMS5odG1sID0gUEFTU1xuIgorICAgICAgICBl
eHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgU0xPVyA6IDEuaHRtbCA9IFBBU1MgRkFJTFxuIgorICAg
ICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAgICAgICAiV0lOIFJFTEVBU0UiOiB7
Im1pc3NpbmciOiAiRkFJTCJ9LAorICAgICAgICAgICAgIldJTiBERUJVRyI6IHsibWlzc2luZyI6
ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlM
In0sCisgICAgICAgICAgICAiTElOVVggREVCVUciOiB7Im1pc3NpbmciOiAiRkFJTCJ9LAorICAg
ICAgICAgICAgIk1BQyBSRUxFQVNFIjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAg
ICJNQUMgREVCVUciOiB7Im1pc3NpbmciOiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVf
ZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKwor
ICAgIGRlZiB0ZXN0X2FkZF9leHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAgIyBub3QgeWV0IGlt
cGxlbWVudGVkCisgICAgICAgIHJldHVybgorCisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICIiCisg
ICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSA6IDEuaHRtbCA9IEZBSUxcbiIKKyAgICAg
ICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeworICAgICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJt
aXNzaW5nIjogIkZBSUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7Im1pc3NpbmciOiAi
RkFJTCJ9LAorICAgICAgICAgICAgIkxJTlVYIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiRkFJTCJ9
LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwifSwKKyAgICAg
ICAgICAgICJNQUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIn0sCisgICAgICAgICAgICAi
TUFDIERFQlVHIjogeyJtaXNzaW5nIjogIkZBSUwifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4
cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAg
ICBkZWYgdGVzdF9hZGRfZXhwZWN0YXRpb25fZm9yX29uZV9wbGF0Zm9ybShzZWxmKToKKyAgICAg
ICAgZXhwZWN0YXRpb25zID0gIkJVRzEgV0lOIDogMS5odG1sID0gVElNRU9VVFxuIgorICAgICAg
ICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgV0lOIDogMS5odG1sID0gVElNRU9VVFxuIgorICAg
ICAgICAjIFRPRE8ob2phbik6IE9uY2Ugd2UgYWRkIGN1cnJlbnRseSB1bmxpc3RlZCB0ZXN0cywg
dGhpcyBleHBlY3QgcmVzdWx0cworICAgICAgICAjIGZvciB0aGlzIHRlc3Qgc2hvdWxkIGJlOgor
ICAgICAgICAjZXhwZWN0ZWRfcmVzdWx0cyA9ICIiIkJVRzEgV0lOIDogMS5odG1sID0gVElNRU9V
VAorICAgICAgICAjQlVHX0FVVE8gTElOVVggREVCVUcgOiAxLmh0bWwgPSBUSU1FT1VUCisgICAg
ICAgICMiIiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeyJMSU5VWCBERUJVRyI6IHsi
bWlzc2luZyI6ICJUSU1FT1VUIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMo
ZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRlc3Rf
YWRkX3Nsb3coc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIDogMS5odG1sID0g
RkFJTFxuIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgU0xPVyA6IDEuaHRtbCA9
IEZBSUxcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeworICAgICAgICAgICAgIldJ
TiBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAgICAgICAgICAgICJXSU4gREVCVUci
OiB7Im1pc3NpbmciOiAiU0xPVyJ9LAorICAgICAgICAgICAgIkxJTlVYIFJFTEVBU0UiOiB7Im1p
c3NpbmciOiAiU0xPVyJ9LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjog
IlNMT1cifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJTTE9XIn0s
CisgICAgICAgICAgICAiTUFDIERFQlVHIjogeyJtaXNzaW5nIjogIlNMT1cifX19CisgICAgICAg
IHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVk
X3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVtb3ZlX211bHRpcGxlX2V4cGVjdGF0aW9u
cyhzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIiQlVHMSBXSU4gOiAxLmh0bWwgPSBG
QUlMCisgICAgQlVHMiBNQUMgOiAxLmh0bWwgPSBGQUlMIiIiCisgICAgICAgIGV4cGVjdGVkX3Jl
c3VsdHMgPSAiIiJCVUcxIFNMT1cgV0lOIDogMS5odG1sID0gRkFJTAorICAgIEJVRzIgTUFDIDog
MS5odG1sID0gVElNRU9VVFxuIiIiCisgICAgICAgICMgVE9ETyhvamFuKTogT25jZSB3ZSBhZGQg
Y3VycmVudGx5IHVubGlzdGVkIHRlc3RzLCB0aGlzIGV4cGVjdCByZXN1bHRzCisgICAgICAgICMg
Zm9yIHRoaXMgdGVzdCBzaG91bGQgYmU6CisgICAgICAgICNleHBlY3RlZF9yZXN1bHRzID0gIiIi
QlVHMSBTTE9XIFdJTiA6IDEuaHRtbCA9IEZBSUwKKyAgICAgICAgI0JVR19BVVRPIExJTlVYIFNM
T1cgOiAxLmh0bWwgPSBQQVNTCisgICAgICAgICNCVUcyIE1BQyA6IDEuaHRtbCA9IFRJTUVPVVQK
KyAgICAgICAgIyIiIgorCisgICAgICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsKKyAgICAgICAg
ICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJTTE9XIn0sCisgICAgICAgICAgICAiV0lO
IERFQlVHIjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAgICAgICAgICAgICJMSU5VWCBSRUxFQVNF
IjogeyJtaXNzaW5nIjogIlNMT1cifSwKKyAgICAgICAgICAgICJMSU5VWCBERUJVRyI6IHsibWlz
c2luZyI6ICJTTE9XIn0sCisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAi
VElNRU9VVCIsICJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTUFDIERFQlVHIjogeyJt
aXNzaW5nIjogIlRJTUVPVVQiLCAiZXh0cmEiOiAiRkFJTCJ9fX0KKyAgICAgICAgc2VsZi51cGRh
dGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykK
KworICAgIGRlZiB0ZXN0X2FkZF9leGlzdGluZ19leHBlY3RhdGlvbihzZWxmKToKKyAgICAgICAg
ZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVk
X3Jlc3VsdHMgPSAiQlVHMSA6IDEuaHRtbCA9IEZBSUxcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsi
MS5odG1sIjogeyJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJGQUlMIn19fQorICAgICAgICBz
ZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9y
ZXN1bHRzKQorCisgICAgZGVmIHRlc3RfYWRkX2ltYWdlX29yX3RleHRfdG9fZmFpbF9leHBlY3Rh
dGlvbihzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIiQlVHMSBXSU4gUkVMRUFTRSA6
IDEuaHRtbCA9IEZBSUwKKyAgICBCVUcxIE1BQyBSRUxFQVNFIDogMS5odG1sID0gRkFJTAorICAg
IEJVRzEgTElOVVggUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUwKKyAgICBCVUcxIExJTlVYIERFQlVH
IDogMS5odG1sID0gVElNRU9VVAorICAgICIiIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0g
IiIiQlVHMSBXSU4gUkVMRUFTRSA6IDEuaHRtbCA9IElNQUdFK1RFWFQKKyAgICBCVUcxIE1BQyBS
RUxFQVNFIDogMS5odG1sID0gSU1BR0UKKyAgICBCVUcxIExJTlVYIFJFTEVBU0UgOiAxLmh0bWwg
PSBURVhUCisgICAgQlVHMSBMSU5VWCBERUJVRyA6IDEuaHRtbCA9IFRJTUVPVVQgSU1BR0UrVEVY
VAorICAgICIiIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAgICAgICAi
V0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiSU1BR0UrVEVYVCJ9LAorICAgICAgICAgICAgIk1B
QyBSRUxFQVNFIjogeyJtaXNzaW5nIjogIklNQUdFIn0sCisgICAgICAgICAgICAiTElOVVggUkVM
RUFTRSI6IHsibWlzc2luZyI6ICJURVhUIn0sCisgICAgICAgICAgICAiTElOVVggREVCVUciOiB7
Im1pc3NpbmciOiAiSU1BR0UrVEVYVCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRp
b25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0
ZXN0X2FkZF9vdGhlcihzZWxmKToKKyAgICAgICAgIyBPdGhlciBpcyBhIGNhdGNoYWxsIGZvciBt
b3JlIG9ic2N1cmUgZXhwZWN0YXRpb25zIHJlc3VsdHMuCisgICAgICAgICMgV2Ugc2hvdWxkIG5l
dmVyIGFkZCBpdCB0byB0ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAgICAgZXhwZWN0YXRpb25zID0g
IkJVRzEgV0lOIFJFTEVBU0UgOiAxLmh0bWwgPSBGQUlMXG4iCisgICAgICAgIGV4cGVjdGVkX3Jl
c3VsdHMgPSAiQlVHMSBXSU4gUkVMRUFTRSA6IDEuaHRtbCA9IEZBSUxcbiIKKyAgICAgICAgdXBk
YXRlcyA9IHsiMS5odG1sIjogeyJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJPVEhFUiJ9fX0K
KyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywg
ZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9ub25fZXhpc3RhbnRfZXhw
ZWN0YXRpb24oc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIDogMS5odG1sID0g
RkFJTFxuIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgOiAxLmh0bWwgPSBGQUlM
XG4iCisgICAgICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsiV0lOIFJFTEVBU0UiOiB7ImV4dHJh
IjogIlRJTUVPVVQifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3Rh
dGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF91cGRhdGVf
c29tZV9wbGF0Zm9ybXMoc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIERFQlVH
IDogMS5odG1sID0gVEVYVCBQQVNTXG4iCisgICAgICAgICMgVE9ETyhvamFuKTogT25jZSB3ZSBh
ZGQgY3VycmVudGx5IHVubGlzdGVkIHRlc3RzLCB0aGUgZXhwZWN0IHJlc3VsdHMKKyAgICAgICAg
IyBmb3IgdGhpcyB0ZXN0IHNob3VsZCBpbmNsdWRlIHRoZSBtaXNzaW5nIGJpdHMgZm9yIFJFTEVB
U0UuCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSBMSU5VWCBERUJVRyA6IDEuaHRt
bCA9IFRFWFQgUEFTU1xuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAg
ICAgICAiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiUEFTUyBURVhUIn0sCisgICAgICAgICAg
ICAiV0lOIERFQlVHIjogeyJleHRyYSI6ICJNSVNTSU5HIFRFWFQifSwKKyAgICAgICAgICAgICJN
QUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJQQVNTIFRFWFQifSwKKyAgICAgICAgICAgICJNQUMg
REVCVUciOiB7ImV4dHJhIjogIk1JU1NJTkcgVEVYVCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVf
ZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKwor
ICAgIGRlZiB0ZXN0X2FkZF90aW1lb3V0X3RvX3Nsb3dfdGVzdChzZWxmKToKKyAgICAgICAgIyBT
TE9XIHRlc3RzIG5lZWRpbmcgVElNRU9VVCBuZWVkIG1hbnVhbCB1cGRhdGluZy4gU2hvdWxkIGp1
c3QgcHJpbnQKKyAgICAgICAgIyBhIGxvZyBhbmQgbm90IG1vZGlmeSB0aGUgdGVzdC4KKyAgICAg
ICAgZXhwZWN0YXRpb25zID0gIkJVRzEgU0xPVyA6IDEuaHRtbCA9IFRFWFRcbiIKKyAgICAgICAg
ZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcxIFNMT1cgOiAxLmh0bWwgPSBURVhUXG4iCisgICAgICAg
IHVwZGF0ZXMgPSB7IjEuaHRtbCI6IHsiV0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiVElNRU9V
VCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgdXBk
YXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2FkZF9zbG93X3RvX3RpbWVv
dXRfdGVzdChzZWxmKToKKyAgICAgICAgIyBTTE9XIHRlc3RzIG5lZWRpbmcgVElNRU9VVCBuZWVk
IG1hbnVhbCB1cGRhdGluZy4gU2hvdWxkIGp1c3QgcHJpbnQKKyAgICAgICAgIyBhIGxvZyBhbmQg
bm90IG1vZGlmeSB0aGUgdGVzdC4KKyAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVRzEgOiAxLmh0
bWwgPSBUSU1FT1VUXG4iCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiQlVHMSA6IDEuaHRt
bCA9IFRJTUVPVVRcbiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMS5odG1sIjogeyJXSU4gUkVMRUFT
RSI6IHsibWlzc2luZyI6ICJTTE9XIn19fQorICAgICAgICBzZWxmLnVwZGF0ZV9leHBlY3RhdGlv
bnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIHRl
c3RfaW5jbHVkZV9sYXN0X3BsYXRmb3JtX2luX2ZsYWtpbmVzcyhzZWxmKToKKyAgICAgICAgIyBJ
ZiBhIHRlc3QgaXMgZmxha3kgb24gNS82IHBsYXRmb3JtcyBhbmQgdGhlIDZ0aCdzIGV4cGVjdGF0
aW9ucyBhcmUgYQorICAgICAgICAjIHN1YnNldCBvZiB0aGUgb3RoZXIgNS82LCB0aGVuIGdpdmUg
dGhlbSBhbGwgdGhlIHNhbWUgZXhwZWN0YXRpb25zLgorICAgICAgICBleHBlY3RhdGlvbnMgPSAi
QlVHMiA6IDEuaHRtbCA9IEZBSUxcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcy
IDogMS5odG1sID0gRkFJTCBUSU1FT1VUXG4iCisgICAgICAgIHVwZGF0ZXMgPSB7IjEuaHRtbCI6
IHsKKyAgICAgICAgICAgICJXSU4gUkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIiwgImV4
dHJhIjogIkZBSUwifSwKKyAgICAgICAgICAgICJXSU4gREVCVUciOiB7Im1pc3NpbmciOiAiVElN
RU9VVCJ9LAorICAgICAgICAgICAgIkxJTlVYIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiVElNRU9V
VCJ9LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifSwK
KyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0sCisgICAg
ICAgICAgICAiTUFDIERFQlVHIjogeyJtaXNzaW5nIjogIlRJTUVPVVQifX19CisgICAgICAgIHNl
bGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jl
c3VsdHMpCisKKyAgICBkZWYgdGVzdF9pbmNsdWRlX2xhc3RfcGxhdGZvcm1faW5fZmxha2luZXNz
X3RocmVlX291dF9vZl9mb3VyKHNlbGYpOgorICAgICAgICAjIElmIGEgdGVzdCBpcyBmbGFreSBv
biA1LzYgcGxhdGZvcm1zIGFuZCB0aGUgNnRoJ3MgZXhwZWN0YXRpb25zIGFyZSBhCisgICAgICAg
ICMgc3Vic2V0IG9mIHRoZSBvdGhlciA1LzYsIHRoZW4gZ2l2ZSB0aGVtIGFsbCB0aGUgc2FtZSBl
eHBlY3RhdGlvbnMuCisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcyIE1BQyBMSU5VWCA6IDEu
aHRtbCA9IEZBSUxcbiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICJCVUcyIExJTlVYIE1B
QyA6IDEuaHRtbCA9IEZBSUwgVElNRU9VVFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwi
OiB7CisgICAgICAgICAgICAiTElOVVggUkVMRUFTRSI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn0s
CisgICAgICAgICAgICAiTUFDIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAg
ICAgICAgICAgIk1BQyBERUJVRyI6IHsibWlzc2luZyI6ICJUSU1FT1VUIn19fQorICAgICAgICBz
ZWxmLnVwZGF0ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCB1cGRhdGVzLCBleHBlY3RlZF9y
ZXN1bHRzKQorCisgICAgZGVmIHRlc3RfZXhjbHVkZV9sYXN0X3BsYXRmb3JtX2Zyb21fZmxha2lu
ZXNzKHNlbGYpOgorICAgICAgICAjIElmIGEgdGVzdCBpcyBmbGFreSBvbiA1LzYgcGxhdGZvcm1z
IGFuZCB0aGUgNnRoJ3MgZXhwZWN0YXRpb25zCisgICAgICAgICMgYXJlIG5vdCBhIHN1YnNldCBv
ZiB0aGUgb3RoZXIgNS82LCB0aGVuIGRvbid0IGdpdmUgdGhlbQorICAgICAgICAjIGFsbCB0aGUg
c2FtZSBleHBlY3RhdGlvbnMuCisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUcxIDogMS5odG1s
ID0gRkFJTFxuIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIiIiQlVHMSBERUJVRyA6IDEu
aHRtbCA9IEZBSUwgVElNRU9VVAorICAgIEJVRzEgTElOVVggTUFDIFJFTEVBU0UgOiAxLmh0bWwg
PSBGQUlMIFRJTUVPVVQKKyAgICBCVUcxIFdJTiBSRUxFQVNFIDogMS5odG1sID0gRkFJTCBDUkFT
SAorICAgICIiIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7CisgICAgICAgICAgICAi
V0lOIFJFTEVBU0UiOiB7Im1pc3NpbmciOiAiQ1JBU0gifSwKKyAgICAgICAgICAgICJXSU4gREVC
VUciOiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAgICAgICAgICAgIkxJTlVYIFJFTEVBU0Ui
OiB7Im1pc3NpbmciOiAiVElNRU9VVCJ9LAorICAgICAgICAgICAgIkxJTlVYIERFQlVHIjogeyJt
aXNzaW5nIjogIlRJTUVPVVQifSwKKyAgICAgICAgICAgICJNQUMgUkVMRUFTRSI6IHsibWlzc2lu
ZyI6ICJUSU1FT1VUIn0sCisgICAgICAgICAgICAiTUFDIERFQlVHIjogeyJtaXNzaW5nIjogIlRJ
TUVPVVQifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMs
IHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9zdHJpcF9jb21tZW50
cyhzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIiQlVHMSA6IDEuaHRtbCA9IFRJTUVP
VVQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFjZSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRo
ZSB0ZXN0IGlzLgorICAgIEJVRzIgV0lOIFJFTEVBU0UgOiAyLmh0bWwgPSBURVhUCisKKyAgICAv
LyBDb21tZW50L3doaXRlc3BhY2UgYWZ0ZXIgdGVzdCBzaG91bGQgcmVtYWluLgorCisgICAgQlVH
MiBNQUMgOiAyLmh0bWwgPSBURVhUCisKKyAgICAvLyBDb21tZW50L3doaXRlc3BhY2UgYXQgZW5k
IG9mIGZpbGUgc2hvdWxkIHJlbWFpbi4KKyAgICAiIiIKKyAgICAgICAgZXhwZWN0ZWRfcmVzdWx0
cyA9ICIiIkJVRzEgOiAxLmh0bWwgPSBUSU1FT1VUCisKKyAgICAvLyBDb21tZW50L3doaXRlc3Bh
Y2UgYWZ0ZXIgdGVzdCBzaG91bGQgcmVtYWluLgorCisgICAgQlVHMiBNQUMgREVCVUcgOiAyLmh0
bWwgPSBURVhUCisKKyAgICAvLyBDb21tZW50L3doaXRlc3BhY2UgYXQgZW5kIG9mIGZpbGUgc2hv
dWxkIHJlbWFpbi4KKyAgICAiIiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMi5odG1sIjogeworICAg
ICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJURVhUIn0sCisgICAgICAgICAgICAi
TUFDIFJFTEVBU0UiOiB7ImV4dHJhIjogIlRFWFQifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4
cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAg
ICBkZWYgdGVzdF9sZWF2ZV9jb21tZW50cyhzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb25zID0g
IiIiQlVHMSA6IDEuaHRtbCA9IFRJTUVPVVQKKworICAgIC8vIENvbW1lbnQvd2hpdGVzcGFjZSBz
aG91bGQgcmVtYWluLgorICAgIEJVRzIgOiAyLmh0bWwgPSBGQUlMIFBBU1MKKyAgICAiIiIKKyAg
ICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9ICIiIkJVRzEgOiAxLmh0bWwgPSBUSU1FT1VUCisKKyAg
ICAvLyBDb21tZW50L3doaXRlc3BhY2Ugc2hvdWxkIHJlbWFpbi4KKyAgICBCVUcyIE1BQyBERUJV
RyA6IDIuaHRtbCA9IEZBSUwgUEFTUworICAgIEJVRzIgTElOVVggTUFDIFJFTEVBU0UgOiAyLmh0
bWwgPSBGQUlMIFBBU1MKKyAgICAiIiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMi5odG1sIjogewor
ICAgICAgICAgICAgIldJTiBSRUxFQVNFIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAg
ICAiV0lOIERFQlVHIjogeyJleHRyYSI6ICJGQUlMIn0sCisgICAgICAgICAgICAiTElOVVggREVC
VUciOiB7ImV4dHJhIjogIkZBSUwifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4cGVjdGF0aW9u
cyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVz
dF9sZWF2ZV9jb21tZW50c19pZl9ub193aGl0ZXNwYWNlX2FmdGVyX3Rlc3Qoc2VsZik6CisgICAg
ICAgIGV4cGVjdGF0aW9ucyA9ICIiIi8vIENvbW1lbnQvd2hpdGVzcGFjZSBzaG91bGQgcmVtYWlu
LgorICAgIEJVRzIgV0lOIFJFTEVBU0UgOiAyLmh0bWwgPSBURVhUCisgICAgQlVHMiA6IDEuaHRt
bCA9IElNQUdFCisgICAgIiIiCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiIiIvLyBDb21t
ZW50L3doaXRlc3BhY2Ugc2hvdWxkIHJlbWFpbi4KKyAgICBCVUcyIDogMS5odG1sID0gSU1BR0UK
KyAgICAiIiIKKyAgICAgICAgdXBkYXRlcyA9IHsiMi5odG1sIjogeyJXSU4gUkVMRUFTRSI6IHsi
ZXh0cmEiOiAiVEVYVCJ9fX0KKyAgICAgICAgc2VsZi51cGRhdGVfZXhwZWN0YXRpb25zKGV4cGVj
dGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiB0ZXN0X2xlYXZl
c191bm1vZGlmaWVkX2V4cGVjdGF0aW9uc191bnRvdWNoZWQoc2VsZik6CisgICAgICAgICMgRW5z
dXJlcyB0ZXN0cyB0aGF0IHdvdWxkIGp1c3QgY2hhbmdlIHNvcnQgb3JkZXIgb2YgYSBsaW5lIGFy
ZSBub29wcy4KKyAgICAgICAgZXhwZWN0YXRpb25zID0gIkJVRzEgV0lOIExJTlVYIDogMS5odG1s
ID0gVElNRU9VVFxuIgorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIkJVRzEgV0lOIExJTlVY
IDogMS5odG1sID0gVElNRU9VVFxuIgorICAgICAgICB1cGRhdGVzID0geyIxLmh0bWwiOiB7Ik1B
QyBSRUxFQVNFIjogeyJtaXNzaW5nIjogIlNMT1cifX19CisgICAgICAgIHNlbGYudXBkYXRlX2V4
cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIHVwZGF0ZXMsIGV4cGVjdGVkX3Jlc3VsdHMpCisKKyAg
ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIEhlbHBlciBmdW5jdGlvbnMKKworICAgIGRlZiB1
cGRhdGVfZXhwZWN0YXRpb25zKHNlbGYsIGV4cGVjdGF0aW9ucywgdXBkYXRlcywgZXhwZWN0ZWRf
cmVzdWx0cyk6CisgICAgICAgIHJlc3VsdHMgPSB1cGRhdGVfZXhwZWN0YXRpb25zX2Zyb21fZGFz
aGJvYXJkLnVwZGF0ZV9leHBlY3RhdGlvbnMoCisgICAgICAgICAgICBleHBlY3RhdGlvbnMsIHVw
ZGF0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcmVzdWx0cywgcmVzdWx0
cykKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vTElDRU5TRS50eHQgYi9XZWJLaXRUb29s
cy9zaW1wbGVqc29uL0xJQ0VOU0UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFkOTVmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL0xJ
Q0VOU0UudHh0CkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykgMjAwNiBCb2IgSXBwb2xp
dG8KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu
eSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBT
b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u
IHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp
YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFu
ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g
ZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j
bHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3
YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN
SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB
SU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4g
Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT
IElOIFRIRQorU09GVFdBUkUuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9zaW1wbGVqc29uL1JF
QURNRS5nb29nbGUgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL1JFQURNRS5nb29nbGUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3MjZjZQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL3NpbXBsZWpzb24vUkVBRE1FLmdvb2dsZQpAQCAtMCwwICsxLDExIEBACitV
Ukw6IGh0dHA6Ly91bmRlZmluZWQub3JnL3B5dGhvbi8jc2ltcGxlanNvbgorVmVyc2lvbjogMS43
LjMKK0xpY2Vuc2U6IE1JVAorTGljZW5zZSBGaWxlOiBMSUNFTlNFLnR4dAorCitEZXNjcmlwdGlv
bjoKK3NpbXBsZWpzb24gaXMgYSBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIgZm9yIFB5dGhvbi4K
KworCitMb2NhbCBNb2RpZmljYXRpb25zOgorUmVtb3ZlZCB1bml0IHRlc3RzIGZyb20gY3VycmVu
dCBkaXN0cmlidXRpb24uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9zaW1wbGVqc29uL19faW5p
dF9fLnB5IGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ2MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvc2ltcGxlanNvbi9fX2luaXRfXy5weQpAQCAtMCwwICsxLDI4NyBAQAorciIiIgorQSBz
aW1wbGUsIGZhc3QsIGV4dGVuc2libGUgSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyCisKK0pTT04g
KEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSA8aHR0cDovL2pzb24ub3JnPiBpcyBhIHN1YnNl
dCBvZgorSmF2YVNjcmlwdCBzeW50YXggKEVDTUEtMjYyIDNyZCBlZGl0aW9uKSB1c2VkIGFzIGEg
bGlnaHR3ZWlnaHQgZGF0YQoraW50ZXJjaGFuZ2UgZm9ybWF0LgorCitzaW1wbGVqc29uIGV4cG9z
ZXMgYW4gQVBJIGZhbWlsaWFyIHRvIHVzZXMgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKK21hcnNo
YWwgYW5kIHBpY2tsZSBtb2R1bGVzLgorCitFbmNvZGluZyBiYXNpYyBQeXRob24gb2JqZWN0IGhp
ZXJhcmNoaWVzOjoKKyAgICAKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gc2lt
cGxlanNvbi5kdW1wcyhbJ2ZvbycsIHsnYmFyJzogKCdiYXonLCBOb25lLCAxLjAsIDIpfV0pCisg
ICAgJ1siZm9vIiwgeyJiYXIiOiBbImJheiIsIG51bGwsIDEuMCwgMl19XScKKyAgICA+Pj4gcHJp
bnQgc2ltcGxlanNvbi5kdW1wcygiXCJmb29cYmFyIikKKyAgICAiXCJmb29cYmFyIgorICAgID4+
PiBwcmludCBzaW1wbGVqc29uLmR1bXBzKHUnXHUxMjM0JykKKyAgICAiXHUxMjM0IgorICAgID4+
PiBwcmludCBzaW1wbGVqc29uLmR1bXBzKCdcXCcpCisgICAgIlxcIgorICAgID4+PiBwcmludCBz
aW1wbGVqc29uLmR1bXBzKHsiYyI6IDAsICJiIjogMCwgImEiOiAwfSwgc29ydF9rZXlzPVRydWUp
CisgICAgeyJhIjogMCwgImIiOiAwLCAiYyI6IDB9CisgICAgPj4+IGZyb20gU3RyaW5nSU8gaW1w
b3J0IFN0cmluZ0lPCisgICAgPj4+IGlvID0gU3RyaW5nSU8oKQorICAgID4+PiBzaW1wbGVqc29u
LmR1bXAoWydzdHJlYW1pbmcgQVBJJ10sIGlvKQorICAgID4+PiBpby5nZXR2YWx1ZSgpCisgICAg
J1sic3RyZWFtaW5nIEFQSSJdJworCitDb21wYWN0IGVuY29kaW5nOjoKKworICAgID4+PiBpbXBv
cnQgc2ltcGxlanNvbgorICAgID4+PiBzaW1wbGVqc29uLmR1bXBzKFsxLDIsMyx7JzQnOiA1LCAn
Nic6IDd9XSwgc2VwYXJhdG9ycz0oJywnLCc6JykpCisgICAgJ1sxLDIsMyx7IjQiOjUsIjYiOjd9
XScKKworUHJldHR5IHByaW50aW5nOjoKKworICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAg
ID4+PiBwcmludCBzaW1wbGVqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1U
cnVlLCBpbmRlbnQ9NCkKKyAgICB7CisgICAgICAgICI0IjogNSwgCisgICAgICAgICI2IjogNwor
ICAgIH0KKworRGVjb2RpbmcgSlNPTjo6CisgICAgCisgICAgPj4+IGltcG9ydCBzaW1wbGVqc29u
CisgICAgPj4+IHNpbXBsZWpzb24ubG9hZHMoJ1siZm9vIiwgeyJiYXIiOlsiYmF6IiwgbnVsbCwg
MS4wLCAyXX1dJykKKyAgICBbdSdmb28nLCB7dSdiYXInOiBbdSdiYXonLCBOb25lLCAxLjAsIDJd
fV0KKyAgICA+Pj4gc2ltcGxlanNvbi5sb2FkcygnIlxcImZvb1xcYmFyIicpCisgICAgdSciZm9v
XHgwOGFyJworICAgID4+PiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgID4+PiBp
byA9IFN0cmluZ0lPKCdbInN0cmVhbWluZyBBUEkiXScpCisgICAgPj4+IHNpbXBsZWpzb24ubG9h
ZChpbykKKyAgICBbdSdzdHJlYW1pbmcgQVBJJ10KKworU3BlY2lhbGl6aW5nIEpTT04gb2JqZWN0
IGRlY29kaW5nOjoKKworICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBkZWYgYXNf
Y29tcGxleChkY3QpOgorICAgIC4uLiAgICAgaWYgJ19fY29tcGxleF9fJyBpbiBkY3Q6CisgICAg
Li4uICAgICAgICAgcmV0dXJuIGNvbXBsZXgoZGN0WydyZWFsJ10sIGRjdFsnaW1hZyddKQorICAg
IC4uLiAgICAgcmV0dXJuIGRjdAorICAgIC4uLiAKKyAgICA+Pj4gc2ltcGxlanNvbi5sb2Fkcygn
eyJfX2NvbXBsZXhfXyI6IHRydWUsICJyZWFsIjogMSwgImltYWciOiAyfScsCisgICAgLi4uICAg
ICBvYmplY3RfaG9vaz1hc19jb21wbGV4KQorICAgICgxKzJqKQorCitFeHRlbmRpbmcgSlNPTkVu
Y29kZXI6OgorICAgIAorICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBjbGFzcyBD
b21wbGV4RW5jb2RlcihzaW1wbGVqc29uLkpTT05FbmNvZGVyKToKKyAgICAuLi4gICAgIGRlZiBk
ZWZhdWx0KHNlbGYsIG9iaik6CisgICAgLi4uICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNv
bXBsZXgpOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gW29iai5yZWFsLCBvYmouaW1hZ10K
KyAgICAuLi4gICAgICAgICByZXR1cm4gc2ltcGxlanNvbi5KU09ORW5jb2Rlci5kZWZhdWx0KHNl
bGYsIG9iaikKKyAgICAuLi4gCisgICAgPj4+IGR1bXBzKDIgKyAxaiwgY2xzPUNvbXBsZXhFbmNv
ZGVyKQorICAgICdbMi4wLCAxLjBdJworICAgID4+PiBDb21wbGV4RW5jb2RlcigpLmVuY29kZSgy
ICsgMWopCisgICAgJ1syLjAsIDEuMF0nCisgICAgPj4+IGxpc3QoQ29tcGxleEVuY29kZXIoKS5p
dGVyZW5jb2RlKDIgKyAxaikpCisgICAgWydbJywgJzIuMCcsICcsICcsICcxLjAnLCAnXSddCisg
ICAgCisKK05vdGUgdGhhdCB0aGUgSlNPTiBwcm9kdWNlZCBieSB0aGlzIG1vZHVsZSdzIGRlZmF1
bHQgc2V0dGluZ3MKK2lzIGEgc3Vic2V0IG9mIFlBTUwsIHNvIGl0IG1heSBiZSB1c2VkIGFzIGEg
c2VyaWFsaXplciBmb3IgdGhhdCBhcyB3ZWxsLgorIiIiCitfX3ZlcnNpb25fXyA9ICcxLjcuMycK
K19fYWxsX18gPSBbCisgICAgJ2R1bXAnLCAnZHVtcHMnLCAnbG9hZCcsICdsb2FkcycsCisgICAg
J0pTT05EZWNvZGVyJywgJ0pTT05FbmNvZGVyJywKK10KKworZnJvbSBkZWNvZGVyIGltcG9ydCBK
U09ORGVjb2RlcgorZnJvbSBlbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgorCitfZGVmYXVsdF9l
bmNvZGVyID0gSlNPTkVuY29kZXIoCisgICAgc2tpcGtleXM9RmFsc2UsCisgICAgZW5zdXJlX2Fz
Y2lpPVRydWUsCisgICAgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwKKyAgICBhbGxvd19uYW49VHJ1ZSwK
KyAgICBpbmRlbnQ9Tm9uZSwKKyAgICBzZXBhcmF0b3JzPU5vbmUsCisgICAgZW5jb2Rpbmc9J3V0
Zi04JworKQorCitkZWYgZHVtcChvYmosIGZwLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lp
PVRydWUsIGNoZWNrX2NpcmN1bGFyPVRydWUsCisgICAgICAgIGFsbG93X25hbj1UcnVlLCBjbHM9
Tm9uZSwgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSwKKyAgICAgICAgZW5jb2Rpbmc9J3V0
Zi04JywgKiprdyk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGBgb2JqYGAgYXMgYSBKU09OIGZv
cm1hdHRlZCBzdHJlYW0gdG8gYGBmcGBgIChhCisgICAgYGAud3JpdGUoKWBgLXN1cHBvcnRpbmcg
ZmlsZS1saWtlIG9iamVjdCkuCisKKyAgICBJZiBgYHNraXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhl
biBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcworICAgIChgYHN0cmBgLCBg
YHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9u
ZWBgKSAKKyAgICB3aWxsIGJlIHNraXBwZWQgaW5zdGVhZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJy
b3JgYC4KKworICAgIElmIGBgZW5zdXJlX2FzY2lpYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBz
b21lIGNodW5rcyB3cml0dGVuIHRvIGBgZnBgYAorICAgIG1heSBiZSBgYHVuaWNvZGVgYCBpbnN0
YW5jZXMsIHN1YmplY3QgdG8gbm9ybWFsIFB5dGhvbiBgYHN0cmBgIHRvCisgICAgYGB1bmljb2Rl
YGAgY29lcmNpb24gcnVsZXMuIFVubGVzcyBgYGZwLndyaXRlKClgYCBleHBsaWNpdGx5CisgICAg
dW5kZXJzdGFuZHMgYGB1bmljb2RlYGAgKGFzIGluIGBgY29kZWNzLmdldHdyaXRlcigpYGApIHRo
aXMgaXMgbGlrZWx5CisgICAgdG8gY2F1c2UgYW4gZXJyb3IuCisKKyAgICBJZiBgYGNoZWNrX2Np
cmN1bGFyYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY2hlY2sK
KyAgICBmb3IgY29udGFpbmVyIHR5cGVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgYSBjaXJjdWxhciBy
ZWZlcmVuY2Ugd2lsbAorICAgIHJlc3VsdCBpbiBhbiBgYE92ZXJmbG93RXJyb3JgYCAob3Igd29y
c2UpLgorCisgICAgSWYgYGBhbGxvd19uYW5gYCBpcyBgYEZhbHNlYGAsIHRoZW4gaXQgd2lsbCBi
ZSBhIGBgVmFsdWVFcnJvcmBgIHRvCisgICAgc2VyaWFsaXplIG91dCBvZiByYW5nZSBgYGZsb2F0
YGAgdmFsdWVzIChgYG5hbmBgLCBgYGluZmBgLCBgYC1pbmZgYCkKKyAgICBpbiBzdHJpY3QgY29t
cGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZQor
ICAgIEphdmFTY3JpcHQgZXF1aXZhbGVudHMgKGBgTmFOYGAsIGBgSW5maW5pdHlgYCwgYGAtSW5m
aW5pdHlgYCkuCisKKyAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIs
IHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0CisgICAgbWVtYmVycyB3aWxsIGJl
IHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudCBsZXZlbAor
ICAgIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3Qg
Y29tcGFjdCByZXByZXNlbnRhdGlvbi4KKworICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBg
KGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQorICAgIHRoZW4gaXQgd2ls
bCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0
b3JzLgorICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNl
bnRhdGlvbi4KKworICAgIGBgZW5jb2RpbmdgYCBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZv
ciBzdHIgaW5zdGFuY2VzLCBkZWZhdWx0IGlzIFVURi04LgorCisgICAgVG8gdXNlIGEgY3VzdG9t
IGBgSlNPTkVuY29kZXJgYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCisg
ICAgYGAuZGVmYXVsdCgpYGAgbWV0aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwg
c3BlY2lmeSBpdCB3aXRoCisgICAgdGhlIGBgY2xzYGAga3dhcmcuCisgICAgIiIiCisgICAgIyBj
YWNoZWQgZW5jb2RlcgorICAgIGlmIChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lp
IGlzIFRydWUgYW5kCisgICAgICAgIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25h
biBpcyBUcnVlIGFuZAorICAgICAgICBjbHMgaXMgTm9uZSBhbmQgaW5kZW50IGlzIE5vbmUgYW5k
IHNlcGFyYXRvcnMgaXMgTm9uZSBhbmQKKyAgICAgICAgZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQg
bm90IGt3KToKKyAgICAgICAgaXRlcmFibGUgPSBfZGVmYXVsdF9lbmNvZGVyLml0ZXJlbmNvZGUo
b2JqKQorICAgIGVsc2U6CisgICAgICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICAgICAgY2xz
ID0gSlNPTkVuY29kZXIKKyAgICAgICAgaXRlcmFibGUgPSBjbHMoc2tpcGtleXM9c2tpcGtleXMs
IGVuc3VyZV9hc2NpaT1lbnN1cmVfYXNjaWksCisgICAgICAgICAgICBjaGVja19jaXJjdWxhcj1j
aGVja19jaXJjdWxhciwgYWxsb3dfbmFuPWFsbG93X25hbiwgaW5kZW50PWluZGVudCwKKyAgICAg
ICAgICAgIHNlcGFyYXRvcnM9c2VwYXJhdG9ycywgZW5jb2Rpbmc9ZW5jb2RpbmcsICoqa3cpLml0
ZXJlbmNvZGUob2JqKQorICAgICMgY291bGQgYWNjZWxlcmF0ZSB3aXRoIHdyaXRlbGluZXMgaW4g
c29tZSB2ZXJzaW9ucyBvZiBQeXRob24sIGF0CisgICAgIyBhIGRlYnVnZ2FiaWxpdHkgY29zdAor
ICAgIGZvciBjaHVuayBpbiBpdGVyYWJsZToKKyAgICAgICAgZnAud3JpdGUoY2h1bmspCisKKwor
ZGVmIGR1bXBzKG9iaiwgc2tpcGtleXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLCBjaGVja19j
aXJjdWxhcj1UcnVlLAorICAgICAgICBhbGxvd19uYW49VHJ1ZSwgY2xzPU5vbmUsIGluZGVudD1O
b25lLCBzZXBhcmF0b3JzPU5vbmUsCisgICAgICAgIGVuY29kaW5nPSd1dGYtOCcsICoqa3cpOgor
ICAgICIiIgorICAgIFNlcmlhbGl6ZSBgYG9iamBgIHRvIGEgSlNPTiBmb3JtYXR0ZWQgYGBzdHJg
YC4KKworICAgIElmIGBgc2tpcGtleXNgYCBpcyBgYFRydWVgYCB0aGVuIGBgZGljdGBgIGtleXMg
dGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCisgICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGlu
dGBgLCBgYGxvbmdgYCwgYGBmbG9hdGBgLCBgYGJvb2xgYCwgYGBOb25lYGApIAorICAgIHdpbGwg
YmUgc2tpcHBlZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgSWYg
YGBlbnN1cmVfYXNjaWlgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxs
IGJlIGEKKyAgICBgYHVuaWNvZGVgYCBpbnN0YW5jZSBzdWJqZWN0IHRvIG5vcm1hbCBQeXRob24g
YGBzdHJgYCB0byBgYHVuaWNvZGVgYAorICAgIGNvZXJjaW9uIHJ1bGVzIGluc3RlYWQgb2YgYmVp
bmcgZXNjYXBlZCB0byBhbiBBU0NJSSBgYHN0cmBgLgorCisgICAgSWYgYGBjaGVja19jaXJjdWxh
cmBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAg
Zm9yIGNvbnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJl
bmNlIHdpbGwKKyAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4K
KworICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBg
YFZhbHVlRXJyb3JgYCB0bworICAgIHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9hdGBgIHZh
bHVlcyAoYGBuYW5gYCwgYGBpbmZgYCwgYGAtaW5mYGApIGluCisgICAgc3RyaWN0IGNvbXBsaWFu
Y2Ugb2YgdGhlIEpTT04gc3BlY2lmaWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUKKyAgICBK
YXZhU2NyaXB0IGVxdWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5
YGApLgorCisgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVu
IEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCisgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0
dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKKyAgICBsZXZlbCBv
ZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBh
Y3QKKyAgICByZXByZXNlbnRhdGlvbi4KKworICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBg
KGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQorICAgIHRoZW4gaXQgd2ls
bCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0
b3JzLgorICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNl
bnRhdGlvbi4KKworICAgIGBgZW5jb2RpbmdgYCBpcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZv
ciBzdHIgaW5zdGFuY2VzLCBkZWZhdWx0IGlzIFVURi04LgorCisgICAgVG8gdXNlIGEgY3VzdG9t
IGBgSlNPTkVuY29kZXJgYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCisg
ICAgYGAuZGVmYXVsdCgpYGAgbWV0aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwg
c3BlY2lmeSBpdCB3aXRoCisgICAgdGhlIGBgY2xzYGAga3dhcmcuCisgICAgIiIiCisgICAgIyBj
YWNoZWQgZW5jb2RlcgorICAgIGlmIChza2lwa2V5cyBpcyBGYWxzZSBhbmQgZW5zdXJlX2FzY2lp
IGlzIFRydWUgYW5kCisgICAgICAgIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUgYW5kIGFsbG93X25h
biBpcyBUcnVlIGFuZAorICAgICAgICBjbHMgaXMgTm9uZSBhbmQgaW5kZW50IGlzIE5vbmUgYW5k
IHNlcGFyYXRvcnMgaXMgTm9uZSBhbmQKKyAgICAgICAgZW5jb2RpbmcgPT0gJ3V0Zi04JyBhbmQg
bm90IGt3KToKKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2VuY29kZXIuZW5jb2RlKG9iaikKKyAg
ICBpZiBjbHMgaXMgTm9uZToKKyAgICAgICAgY2xzID0gSlNPTkVuY29kZXIKKyAgICByZXR1cm4g
Y2xzKAorICAgICAgICBza2lwa2V5cz1za2lwa2V5cywgZW5zdXJlX2FzY2lpPWVuc3VyZV9hc2Np
aSwKKyAgICAgICAgY2hlY2tfY2lyY3VsYXI9Y2hlY2tfY2lyY3VsYXIsIGFsbG93X25hbj1hbGxv
d19uYW4sIGluZGVudD1pbmRlbnQsCisgICAgICAgIHNlcGFyYXRvcnM9c2VwYXJhdG9ycywgZW5j
b2Rpbmc9ZW5jb2RpbmcsCisgICAgICAgICoqa3cpLmVuY29kZShvYmopCisKK19kZWZhdWx0X2Rl
Y29kZXIgPSBKU09ORGVjb2RlcihlbmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lKQorCitk
ZWYgbG9hZChmcCwgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsICoq
a3cpOgorICAgICIiIgorICAgIERlc2VyaWFsaXplIGBgZnBgYCAoYSBgYC5yZWFkKClgYC1zdXBw
b3J0aW5nIGZpbGUtbGlrZSBvYmplY3QgY29udGFpbmluZworICAgIGEgSlNPTiBkb2N1bWVudCkg
dG8gYSBQeXRob24gb2JqZWN0LgorCisgICAgSWYgdGhlIGNvbnRlbnRzIG9mIGBgZnBgYCBpcyBl
bmNvZGVkIHdpdGggYW4gQVNDSUkgYmFzZWQgZW5jb2Rpbmcgb3RoZXIKKyAgICB0aGFuIHV0Zi04
IChlLmcuIGxhdGluLTEpLCB0aGVuIGFuIGFwcHJvcHJpYXRlIGBgZW5jb2RpbmdgYCBuYW1lIG11
c3QKKyAgICBiZSBzcGVjaWZpZWQuIEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQg
KHN1Y2ggYXMgVUNTLTIpIGFyZQorICAgIG5vdCBhbGxvd2VkLCBhbmQgc2hvdWxkIGJlIHdyYXBw
ZWQgd2l0aAorICAgIGBgY29kZWNzLmdldHJlYWRlcihmcCkoZW5jb2RpbmcpYGAsIG9yIHNpbXBs
eSBkZWNvZGVkIHRvIGEgYGB1bmljb2RlYGAKKyAgICBvYmplY3QgYW5kIHBhc3NlZCB0byBgYGxv
YWRzKClgYAorCisgICAgYGBvYmplY3RfaG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRo
YXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRl
cmFsIGRlY29kZSAoYSBgYGRpY3RgYCkuIFRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICBgYG9iamVj
dF9ob29rYGAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLiBUaGlzIGZlYXR1
cmUKKyAgICBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpT
T04tUlBDIGNsYXNzIGhpbnRpbmcpLgorICAgIAorICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05E
ZWNvZGVyYGAgc3ViY2xhc3MsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAorICAgIGt3YXJn
LgorICAgICIiIgorICAgIHJldHVybiBsb2FkcyhmcC5yZWFkKCksCisgICAgICAgIGVuY29kaW5n
PWVuY29kaW5nLCBjbHM9Y2xzLCBvYmplY3RfaG9vaz1vYmplY3RfaG9vaywgKiprdykKKworZGVm
IGxvYWRzKHMsIGVuY29kaW5nPU5vbmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCAqKmt3
KToKKyAgICAiIiIKKyAgICBEZXNlcmlhbGl6ZSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29k
ZWBgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OCisgICAgZG9jdW1lbnQpIHRvIGEgUHl0aG9u
IG9iamVjdC4KKworICAgIElmIGBgc2BgIGlzIGEgYGBzdHJgYCBpbnN0YW5jZSBhbmQgaXMgZW5j
b2RlZCB3aXRoIGFuIEFTQ0lJIGJhc2VkIGVuY29kaW5nCisgICAgb3RoZXIgdGhhbiB1dGYtOCAo
ZS5nLiBsYXRpbi0xKSB0aGVuIGFuIGFwcHJvcHJpYXRlIGBgZW5jb2RpbmdgYCBuYW1lCisgICAg
bXVzdCBiZSBzcGVjaWZpZWQuIEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1
Y2ggYXMgVUNTLTIpCisgICAgYXJlIG5vdCBhbGxvd2VkIGFuZCBzaG91bGQgYmUgZGVjb2RlZCB0
byBgYHVuaWNvZGVgYCBmaXJzdC4KKworICAgIGBgb2JqZWN0X2hvb2tgYCBpcyBhbiBvcHRpb25h
bCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlCisgICAgcmVzdWx0IG9mIGFu
eSBvYmplY3QgbGl0ZXJhbCBkZWNvZGUgKGEgYGBkaWN0YGApLiBUaGUgcmV0dXJuIHZhbHVlIG9m
CisgICAgYGBvYmplY3RfaG9va2BgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3Rg
YC4gVGhpcyBmZWF0dXJlCisgICAgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNv
ZGVycyAoZS5nLiBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4KKworICAgIFRvIHVzZSBhIGN1c3Rv
bSBgYEpTT05EZWNvZGVyYGAgc3ViY2xhc3MsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAor
ICAgIGt3YXJnLgorICAgICIiIgorICAgIGlmIGNscyBpcyBOb25lIGFuZCBlbmNvZGluZyBpcyBO
b25lIGFuZCBvYmplY3RfaG9vayBpcyBOb25lIGFuZCBub3Qga3c6CisgICAgICAgIHJldHVybiBf
ZGVmYXVsdF9kZWNvZGVyLmRlY29kZShzKQorICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICBj
bHMgPSBKU09ORGVjb2RlcgorICAgIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOgorICAgICAg
ICBrd1snb2JqZWN0X2hvb2snXSA9IG9iamVjdF9ob29rCisgICAgcmV0dXJuIGNscyhlbmNvZGlu
Zz1lbmNvZGluZywgKiprdykuZGVjb2RlKHMpCisKK2RlZiByZWFkKHMpOgorICAgICIiIgorICAg
IGpzb24tcHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gVXNlIGxvYWRzKHMpIGluc3RlYWQuCisg
ICAgIiIiCisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mud2Fybigic2ltcGxlanNv
bi5sb2FkcyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHJlYWQocykiLAorICAgICAgICBE
ZXByZWNhdGlvbldhcm5pbmcpCisgICAgcmV0dXJuIGxvYWRzKHMpCisKK2RlZiB3cml0ZShvYmop
OgorICAgICIiIgorICAgIGpzb24tcHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gVXNlIGR1bXBz
KHMpIGluc3RlYWQuCisgICAgIiIiCisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mu
d2Fybigic2ltcGxlanNvbi5kdW1wcyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHdyaXRl
KHMpIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIHJldHVybiBkdW1wcyhvYmop
CisKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9fc3BlZWR1cHMuYyBiL1dl
YktpdFRvb2xzL3NpbXBsZWpzb24vX3NwZWVkdXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGYyOTBiYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3NpbXBs
ZWpzb24vX3NwZWVkdXBzLmMKQEAgLTAsMCArMSwyMTUgQEAKKyNpbmNsdWRlICJQeXRob24uaCIK
KyNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlfU1NJWkVfVF9N
SU4pCit0eXBlZGVmIGludCBQeV9zc2l6ZV90OworI2RlZmluZSBQWV9TU0laRV9UX01BWCBJTlRf
TUFYCisjZGVmaW5lIFBZX1NTSVpFX1RfTUlOIElOVF9NSU4KKyNlbmRpZgorCitzdGF0aWMgUHlf
c3NpemVfdAorYXNjaWlfZXNjYXBlX2NoYXIoUHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5
X3NzaXplX3QgY2hhcnMpOworc3RhdGljIFB5T2JqZWN0ICoKK2FzY2lpX2VzY2FwZV91bmljb2Rl
KFB5T2JqZWN0ICpweXN0cik7CitzdGF0aWMgUHlPYmplY3QgKgorYXNjaWlfZXNjYXBlX3N0cihQ
eU9iamVjdCAqcHlzdHIpOworc3RhdGljIFB5T2JqZWN0ICoKK3B5X2VuY29kZV9iYXNlc3RyaW5n
X2FzY2lpKFB5T2JqZWN0KiBzZWxmIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSwgUHlPYmpl
Y3QgKnB5c3RyKTsKK3ZvaWQgaW5pdF9zcGVlZHVwcyh2b2lkKTsKKworI2RlZmluZSBTX0NIQVIo
YykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICcvJyAmJiBjICE9
ICciJykKKworI2RlZmluZSBNSU5fRVhQQU5TSU9OIDYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUK
KyNkZWZpbmUgTUFYX0VYUEFOU0lPTiAoMiAqIE1JTl9FWFBBTlNJT04pCisjZWxzZQorI2RlZmlu
ZSBNQVhfRVhQQU5TSU9OIE1JTl9FWFBBTlNJT04KKyNlbmRpZgorCitzdGF0aWMgUHlfc3NpemVf
dAorYXNjaWlfZXNjYXBlX2NoYXIoUHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5X3NzaXpl
X3QgY2hhcnMpIHsKKyAgICBQeV9VTklDT0RFIHg7CisgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xc
JzsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnLyc6IG91dHB1dFtjaGFycysrXSA9
IChjaGFyKWM7IGJyZWFrOworICAgICAgICBjYXNlICdcXCc6IG91dHB1dFtjaGFycysrXSA9IChj
aGFyKWM7IGJyZWFrOworICAgICAgICBjYXNlICciJzogb3V0cHV0W2NoYXJzKytdID0gKGNoYXIp
YzsgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xiJzogb3V0cHV0W2NoYXJzKytdID0gJ2InOyBicmVh
azsKKyAgICAgICAgY2FzZSAnXGYnOiBvdXRwdXRbY2hhcnMrK10gPSAnZic7IGJyZWFrOworICAg
ICAgICBjYXNlICdcbic6IG91dHB1dFtjaGFycysrXSA9ICduJzsgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1xyJzogb3V0cHV0W2NoYXJzKytdID0gJ3InOyBicmVhazsKKyAgICAgICAgY2FzZSAnXHQn
OiBvdXRwdXRbY2hhcnMrK10gPSAndCc7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorI2lmZGVm
IFB5X1VOSUNPREVfV0lERQorICAgICAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgeworICAgICAg
ICAgICAgICAgIC8qIFVURi0xNiBzdXJyb2dhdGUgcGFpciAqLworICAgICAgICAgICAgICAgIFB5
X1VOSUNPREUgdiA9IGMgLSAweDEwMDAwOworICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAo
KHYgPj4gMTApICYgMHgzZmYpOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1
JzsKKyAgICAgICAgICAgICAgICB4ID0gKGMgJiAweGYwMDApID4+IDEyOworICAgICAgICAgICAg
ICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTAp
OworICAgICAgICAgICAgICAgIHggPSAoYyAmIDB4MGYwMCkgPj4gODsKKyAgICAgICAgICAgICAg
ICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsK
KyAgICAgICAgICAgICAgICB4ID0gKGMgJiAweDAwZjApID4+IDQ7CisgICAgICAgICAgICAgICAg
b3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Cisg
ICAgICAgICAgICAgICAgeCA9IChjICYgMHgwMDBmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRb
Y2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAg
ICAgICAgICBjID0gMHhkYzAwIHwgKHYgJiAweDNmZik7CisgICAgICAgICAgICAgICAgb3V0cHV0
W2NoYXJzKytdID0gJ1xcJzsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgb3V0
cHV0W2NoYXJzKytdID0gJ3UnOworICAgICAgICAgICAgeCA9IChjICYgMHhmMDAwKSA+PiAxMjsK
KyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyAr
ICh4IC0gMTApOworICAgICAgICAgICAgeCA9IChjICYgMHgwZjAwKSA+PiA4OworICAgICAgICAg
ICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7
CisgICAgICAgICAgICB4ID0gKGMgJiAweDAwZjApID4+IDQ7CisgICAgICAgICAgICBvdXRwdXRb
Y2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAg
ICAgIHggPSAoYyAmIDB4MDAwZik7CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8
IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICB9CisgICAgcmV0dXJuIGNoYXJz
OworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYXNjaWlfZXNjYXBlX3VuaWNvZGUoUHlPYmplY3Qg
KnB5c3RyKSB7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7
CisgICAgUHlfc3NpemVfdCBvdXRwdXRfc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGNoYXJzOworICAg
IFB5T2JqZWN0ICpydmFsOworICAgIGNoYXIgKm91dHB1dDsKKyAgICBQeV9VTklDT0RFICppbnB1
dF91bmljb2RlOworCisgICAgaW5wdXRfY2hhcnMgPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIp
OworICAgIGlucHV0X3VuaWNvZGUgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7CisgICAg
LyogT25lIGNoYXIgaW5wdXQgY2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0
IG9mIHRoZXNlICovCisgICAgb3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSAr
IGlucHV0X2NoYXJzOworICAgIHJ2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxM
LCBvdXRwdXRfc2l6ZSk7CisgICAgaWYgKHJ2YWwgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9CisgICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwpOworICAg
IGNoYXJzID0gMDsKKyAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7CisgICAgZm9yIChpID0gMDsg
aSA8IGlucHV0X2NoYXJzOyBpKyspIHsKKyAgICAgICAgUHlfVU5JQ09ERSBjID0gaW5wdXRfdW5p
Y29kZVtpXTsKKyAgICAgICAgaWYgKFNfQ0hBUihjKSkgeworICAgICAgICAgICAgb3V0cHV0W2No
YXJzKytdID0gKGNoYXIpYzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJzID0g
YXNjaWlfZXNjYXBlX2NoYXIoYywgb3V0cHV0LCBjaGFycyk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG91dHB1dF9zaXplIC0gY2hhcnMgPCAoMSArIE1BWF9FWFBBTlNJT04pKSB7CisgICAgICAg
ICAgICAvKiBUaGVyZSdzIG1vcmUgdGhhbiBmb3VyLCBzbyBsZXQncyByZXNpemUgYnkgYSBsb3Qg
Ki8KKyAgICAgICAgICAgIG91dHB1dF9zaXplICo9IDI7CisgICAgICAgICAgICAvKiBUaGlzIGlz
IGFuIHVwcGVyIGJvdW5kICovCisgICAgICAgICAgICBpZiAob3V0cHV0X3NpemUgPiAyICsgKGlu
cHV0X2NoYXJzICogTUFYX0VYUEFOU0lPTikpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRfc2l6
ZSA9IDIgKyAoaW5wdXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBvdXRwdXRfc2l6ZSkgPT0gLTEp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2
YWwsIGNoYXJzKSA9PSAtMSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0
dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCithc2NpaV9lc2NhcGVfc3RyKFB5T2Jq
ZWN0ICpweXN0cikgeworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGlucHV0X2No
YXJzOworICAgIFB5X3NzaXplX3Qgb3V0cHV0X3NpemU7CisgICAgUHlfc3NpemVfdCBjaGFyczsK
KyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICBjaGFyICpvdXRwdXQ7CisgICAgY2hhciAqaW5wdXRf
c3RyOworCisgICAgaW5wdXRfY2hhcnMgPSBQeVN0cmluZ19HRVRfU0laRShweXN0cik7CisgICAg
aW5wdXRfc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKKyAgICAvKiBPbmUgY2hhciBp
bnB1dCBjYW4gYmUgdXAgdG8gNiBjaGFycyBvdXRwdXQsIGVzdGltYXRlIDQgb2YgdGhlc2UgKi8K
KyAgICBvdXRwdXRfc2l6ZSA9IDIgKyAoTUlOX0VYUEFOU0lPTiAqIDQpICsgaW5wdXRfY2hhcnM7
CisgICAgcnZhbCA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dHB1dF9zaXpl
KTsKKyAgICBpZiAocnZhbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KyAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7CisgICAgY2hhcnMgPSAwOwor
ICAgIG91dHB1dFtjaGFycysrXSA9ICciJzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hh
cnM7IGkrKykgeworICAgICAgICBQeV9VTklDT0RFIGMgPSAoUHlfVU5JQ09ERSlpbnB1dF9zdHJb
aV07CisgICAgICAgIGlmIChTX0NIQVIoYykpIHsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysr
XSA9IChjaGFyKWM7CisgICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4N0YpIHsKKyAgICAgICAgICAg
IC8qIFdlIGhpdCBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIsIGJhaWwgdG8gdW5pY29kZSBtb2RlICov
CisgICAgICAgICAgICBQeU9iamVjdCAqdW5pOworICAgICAgICAgICAgUHlfREVDUkVGKHJ2YWwp
OworICAgICAgICAgICAgdW5pID0gUHlVbmljb2RlX0RlY29kZVVURjgoaW5wdXRfc3RyLCBpbnB1
dF9jaGFycywgInN0cmljdCIpOworICAgICAgICAgICAgaWYgKHVuaSA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydmFs
ID0gYXNjaWlfZXNjYXBlX3VuaWNvZGUodW5pKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1bmkp
OworICAgICAgICAgICAgcmV0dXJuIHJ2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBjaGFycyA9IGFzY2lpX2VzY2FwZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOworICAgICAgICB9
CisgICAgICAgIC8qIEFuIEFTQ0lJIGNoYXIgY2FuJ3QgcG9zc2libHkgZXhwYW5kIHRvIGEgc3Vy
cm9nYXRlISAqLworICAgICAgICBpZiAob3V0cHV0X3NpemUgLSBjaGFycyA8ICgxICsgTUlOX0VY
UEFOU0lPTikpIHsKKyAgICAgICAgICAgIC8qIFRoZXJlJ3MgbW9yZSB0aGFuIGZvdXIsIHNvIGxl
dCdzIHJlc2l6ZSBieSBhIGxvdCAqLworICAgICAgICAgICAgb3V0cHV0X3NpemUgKj0gMjsKKyAg
ICAgICAgICAgIGlmIChvdXRwdXRfc2l6ZSA+IDIgKyAoaW5wdXRfY2hhcnMgKiBNSU5fRVhQQU5T
SU9OKSkgeworICAgICAgICAgICAgICAgIG91dHB1dF9zaXplID0gMiArIChpbnB1dF9jaGFycyAq
IE1JTl9FWFBBTlNJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeVN0cmlu
Z19SZXNpemUoJnJ2YWwsIG91dHB1dF9zaXplKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cHV0ID0gUHlTdHJpbmdf
QVNfU1RSSU5HKHJ2YWwpOworICAgICAgICB9CisgICAgfQorICAgIG91dHB1dFtjaGFycysrXSA9
ICciJzsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgY2hhcnMpID09IC0xKSB7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcnZhbDsKK30KKworUHlEb2Nf
U1RSVkFSKHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLAorICAgICJlbmNvZGVfYmFzZXN0
cmluZ19hc2NpaShiYXNlc3RyaW5nKSAtPiBzdHJcbiIKKyAgICAiXG4iCisgICAgIi4uLiIKKyk7
CisKK3N0YXRpYyBQeU9iamVjdCAqCitweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShQeU9iamVj
dCogc2VsZiBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSksIFB5T2JqZWN0ICpweXN0cikgewor
ICAgIC8qIE1FVEhfTyAqLworICAgIGlmIChQeVN0cmluZ19DaGVjayhweXN0cikpIHsKKyAgICAg
ICAgcmV0dXJuIGFzY2lpX2VzY2FwZV9zdHIocHlzdHIpOworICAgIH0gZWxzZSBpZiAoUHlVbmlj
b2RlX0NoZWNrKHB5c3RyKSkgeworICAgICAgICByZXR1cm4gYXNjaWlfZXNjYXBlX3VuaWNvZGUo
cHlzdHIpOworICAgIH0KKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZmly
c3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOworICAgIHJldHVybiBOVUxMOworfQorCisj
ZGVmaW5lIERFRk4obiwgaykgXAorICAgIHsgIFwKKyAgICAgICAgI24sIFwKKyAgICAgICAgKFB5
Q0Z1bmN0aW9uKXB5XyAjI24sIFwKKyAgICAgICAgaywgXAorICAgICAgICBweWRvY18gIyNuIFwK
KyAgICB9CitzdGF0aWMgUHlNZXRob2REZWYgc3BlZWR1cHNfbWV0aG9kc1tdID0geworICAgIERF
Rk4oZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksIE1FVEhfTyksCisgICAge30KK307CisjdW5kZWYg
REVGTgorCit2b2lkCitpbml0X3NwZWVkdXBzKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07Cisg
ICAgbSA9IFB5X0luaXRNb2R1bGU0KCJfc3BlZWR1cHMiLCBzcGVlZHVwc19tZXRob2RzLCBOVUxM
LCBOVUxMLCBQWVRIT05fQVBJX1ZFUlNJT04pOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
c2ltcGxlanNvbi9kZWNvZGVyLnB5IGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9kZWNvZGVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjUzYjIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL2RlY29kZXIucHkKQEAgLTAsMCArMSwyNzMg
QEAKKyIiIgorSW1wbGVtZW50YXRpb24gb2YgSlNPTkRlY29kZXIKKyIiIgoraW1wb3J0IHJlCisK
K2Zyb20gc2ltcGxlanNvbi5zY2FubmVyIGltcG9ydCBTY2FubmVyLCBwYXR0ZXJuCisKK0ZMQUdT
ID0gcmUuVkVSQk9TRSB8IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTAorCitkZWYgX2Zsb2F0Y29u
c3RhbnRzKCk6CisgICAgaW1wb3J0IHN0cnVjdAorICAgIGltcG9ydCBzeXMKKyAgICBfQllURVMg
PSAnN0ZGODAwMDAwMDAwMDAwMDdGRjAwMDAwMDAwMDAwMDAnLmRlY29kZSgnaGV4JykKKyAgICBp
ZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgorICAgICAgICBfQllURVMgPSBfQllURVNbOjhdWzo6
LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQorICAgIG5hbiwgaW5mID0gc3RydWN0LnVucGFjaygnZGQn
LCBfQllURVMpCisgICAgcmV0dXJuIG5hbiwgaW5mLCAtaW5mCisKK05hTiwgUG9zSW5mLCBOZWdJ
bmYgPSBfZmxvYXRjb25zdGFudHMoKQorCitkZWYgbGluZWNvbChkb2MsIHBvcyk6CisgICAgbGlu
ZW5vID0gZG9jLmNvdW50KCdcbicsIDAsIHBvcykgKyAxCisgICAgaWYgbGluZW5vID09IDE6Cisg
ICAgICAgIGNvbG5vID0gcG9zCisgICAgZWxzZToKKyAgICAgICAgY29sbm8gPSBwb3MgLSBkb2Mu
cmluZGV4KCdcbicsIDAsIHBvcykKKyAgICByZXR1cm4gbGluZW5vLCBjb2xubworCitkZWYgZXJy
bXNnKG1zZywgZG9jLCBwb3MsIGVuZD1Ob25lKToKKyAgICBsaW5lbm8sIGNvbG5vID0gbGluZWNv
bChkb2MsIHBvcykKKyAgICBpZiBlbmQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuICclczogbGlu
ZSAlZCBjb2x1bW4gJWQgKGNoYXIgJWQpJyAlIChtc2csIGxpbmVubywgY29sbm8sIHBvcykKKyAg
ICBlbmRsaW5lbm8sIGVuZGNvbG5vID0gbGluZWNvbChkb2MsIGVuZCkKKyAgICByZXR1cm4gJyVz
OiBsaW5lICVkIGNvbHVtbiAlZCAtIGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkIC0gJWQpJyAl
ICgKKyAgICAgICAgbXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBwb3Ms
IGVuZCkKKworX0NPTlNUQU5UUyA9IHsKKyAgICAnLUluZmluaXR5JzogTmVnSW5mLAorICAgICdJ
bmZpbml0eSc6IFBvc0luZiwKKyAgICAnTmFOJzogTmFOLAorICAgICd0cnVlJzogVHJ1ZSwKKyAg
ICAnZmFsc2UnOiBGYWxzZSwKKyAgICAnbnVsbCc6IE5vbmUsCit9CisKK2RlZiBKU09OQ29uc3Rh
bnQobWF0Y2gsIGNvbnRleHQsIGM9X0NPTlNUQU5UUyk6CisgICAgcmV0dXJuIGNbbWF0Y2guZ3Jv
dXAoMCldLCBOb25lCitwYXR0ZXJuKCcoLT9JbmZpbml0eXxOYU58dHJ1ZXxmYWxzZXxudWxsKScp
KEpTT05Db25zdGFudCkKKworZGVmIEpTT05OdW1iZXIobWF0Y2gsIGNvbnRleHQpOgorICAgIG1h
dGNoID0gSlNPTk51bWJlci5yZWdleC5tYXRjaChtYXRjaC5zdHJpbmcsICptYXRjaC5zcGFuKCkp
CisgICAgaW50ZWdlciwgZnJhYywgZXhwID0gbWF0Y2guZ3JvdXBzKCkKKyAgICBpZiBmcmFjIG9y
IGV4cDoKKyAgICAgICAgcmVzID0gZmxvYXQoaW50ZWdlciArIChmcmFjIG9yICcnKSArIChleHAg
b3IgJycpKQorICAgIGVsc2U6CisgICAgICAgIHJlcyA9IGludChpbnRlZ2VyKQorICAgIHJldHVy
biByZXMsIE5vbmUKK3BhdHRlcm4ocicoLT8oPzowfFsxLTldXGQqKSkoXC5cZCspPyhbZUVdWy0r
XT9cZCspPycpKEpTT05OdW1iZXIpCisKK1NUUklOR0NIVU5LID0gcmUuY29tcGlsZShyJyguKj8p
KFsiXFxdKScsIEZMQUdTKQorQkFDS1NMQVNIID0geworICAgICciJzogdSciJywgJ1xcJzogdSdc
XCcsICcvJzogdScvJywKKyAgICAnYic6IHUnXGInLCAnZic6IHUnXGYnLCAnbic6IHUnXG4nLCAn
cic6IHUnXHInLCAndCc6IHUnXHQnLAorfQorCitERUZBVUxUX0VOQ09ESU5HID0gInV0Zi04Igor
CitkZWYgc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nPU5vbmUsIF9iPUJBQ0tTTEFTSCwgX209
U1RSSU5HQ0hVTksubWF0Y2gpOgorICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgIGVu
Y29kaW5nID0gREVGQVVMVF9FTkNPRElORworICAgIGNodW5rcyA9IFtdCisgICAgX2FwcGVuZCA9
IGNodW5rcy5hcHBlbmQKKyAgICBiZWdpbiA9IGVuZCAtIDEKKyAgICB3aGlsZSAxOgorICAgICAg
ICBjaHVuayA9IF9tKHMsIGVuZCkKKyAgICAgICAgaWYgY2h1bmsgaXMgTm9uZToKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgZXJybXNnKCJVbnRlcm1pbmF0
ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0IiwgcywgYmVnaW4pKQorICAgICAgICBlbmQgPSBjaHVuay5l
bmQoKQorICAgICAgICBjb250ZW50LCB0ZXJtaW5hdG9yID0gY2h1bmsuZ3JvdXBzKCkKKyAgICAg
ICAgaWYgY29udGVudDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbnRlbnQsIHVu
aWNvZGUpOgorICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB1bmljb2RlKGNvbnRlbnQsIGVuY29k
aW5nKQorICAgICAgICAgICAgX2FwcGVuZChjb250ZW50KQorICAgICAgICBpZiB0ZXJtaW5hdG9y
ID09ICciJzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVz
YyA9IHNbZW5kXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgZXJybXNnKCJVbnRlcm1pbmF0ZWQgc3RyaW5n
IHN0YXJ0aW5nIGF0IiwgcywgYmVnaW4pKQorICAgICAgICBpZiBlc2MgIT0gJ3UnOgorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG0gPSBfYltlc2NdCisgICAgICAgICAgICBleGNl
cHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAg
ICAgICAgICAgICAgZXJybXNnKCJJbnZhbGlkIFxcZXNjYXBlOiAlciIgJSAoZXNjLCksIHMsIGVu
ZCkpCisgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXNj
ID0gc1tlbmQgKyAxOmVuZCArIDVdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
bSA9IHVuaWNocihpbnQoZXNjLCAxNikpCisgICAgICAgICAgICAgICAgaWYgbGVuKGVzYykgIT0g
NCBvciBub3QgZXNjLmlzYWxudW0oKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcgorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcihlcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBzLCBlbmQpKQor
ICAgICAgICAgICAgZW5kICs9IDUKKyAgICAgICAgX2FwcGVuZChtKQorICAgIHJldHVybiB1Jycu
am9pbihjaHVua3MpLCBlbmQKKworZGVmIEpTT05TdHJpbmcobWF0Y2gsIGNvbnRleHQpOgorICAg
IGVuY29kaW5nID0gZ2V0YXR0cihjb250ZXh0LCAnZW5jb2RpbmcnLCBOb25lKQorICAgIHJldHVy
biBzY2Fuc3RyaW5nKG1hdGNoLnN0cmluZywgbWF0Y2guZW5kKCksIGVuY29kaW5nKQorcGF0dGVy
bihyJyInKShKU09OU3RyaW5nKQorCitXSElURVNQQUNFID0gcmUuY29tcGlsZShyJ1xzKicsIEZM
QUdTKQorCitkZWYgSlNPTk9iamVjdChtYXRjaCwgY29udGV4dCwgX3c9V0hJVEVTUEFDRS5tYXRj
aCk6CisgICAgcGFpcnMgPSB7fQorICAgIHMgPSBtYXRjaC5zdHJpbmcKKyAgICBlbmQgPSBfdyhz
LCBtYXRjaC5lbmQoKSkuZW5kKCkKKyAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAg
IyB0cml2aWFsIGVtcHR5IG9iamVjdAorICAgIGlmIG5leHRjaGFyID09ICd9JzoKKyAgICAgICAg
cmV0dXJuIHBhaXJzLCBlbmQgKyAxCisgICAgaWYgbmV4dGNoYXIgIT0gJyInOgorICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQp
KQorICAgIGVuZCArPSAxCisgICAgZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNvZGlu
ZycsIE5vbmUpCisgICAgaXRlcnNjYW4gPSBKU09OU2Nhbm5lci5pdGVyc2NhbgorICAgIHdoaWxl
IFRydWU6CisgICAgICAgIGtleSwgZW5kID0gc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nKQor
ICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIGlmIHNbZW5kOmVuZCArIDFd
ICE9ICc6JzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcg
OiBkZWxpbWl0ZXIiLCBzLCBlbmQpKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQgKyAxKS5lbmQo
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSwgZW5kID0gaXRlcnNjYW4ocywgaWR4
PWVuZCwgY29udGV4dD1jb250ZXh0KS5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRp
b246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVj
dCIsIHMsIGVuZCkpCisgICAgICAgIHBhaXJzW2tleV0gPSB2YWx1ZQorICAgICAgICBlbmQgPSBf
dyhzLCBlbmQpLmVuZCgpCisgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAg
ICAgZW5kICs9IDEKKyAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ30nOgorICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgaWYgbmV4dGNoYXIgIT0gJywnOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcihlcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHMsIGVuZCAtIDEpKQorICAgICAg
ICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsg
MV0KKyAgICAgICAgZW5kICs9IDEKKyAgICAgICAgaWYgbmV4dGNoYXIgIT0gJyInOgorICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwg
cywgZW5kIC0gMSkpCisgICAgb2JqZWN0X2hvb2sgPSBnZXRhdHRyKGNvbnRleHQsICdvYmplY3Rf
aG9vaycsIE5vbmUpCisgICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIHBh
aXJzID0gb2JqZWN0X2hvb2socGFpcnMpCisgICAgcmV0dXJuIHBhaXJzLCBlbmQKK3BhdHRlcm4o
cid7JykoSlNPTk9iamVjdCkKKyAgICAgICAgICAgIAorZGVmIEpTT05BcnJheShtYXRjaCwgY29u
dGV4dCwgX3c9V0hJVEVTUEFDRS5tYXRjaCk6CisgICAgdmFsdWVzID0gW10KKyAgICBzID0gbWF0
Y2guc3RyaW5nCisgICAgZW5kID0gX3cocywgbWF0Y2guZW5kKCkpLmVuZCgpCisgICAgIyBsb29r
LWFoZWFkIGZvciB0cml2aWFsIGVtcHR5IGFycmF5CisgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQg
KyAxXQorICAgIGlmIG5leHRjaGFyID09ICddJzoKKyAgICAgICAgcmV0dXJuIHZhbHVlcywgZW5k
ICsgMQorICAgIGl0ZXJzY2FuID0gSlNPTlNjYW5uZXIuaXRlcnNjYW4KKyAgICB3aGlsZSBUcnVl
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSwgZW5kID0gaXRlcnNjYW4ocywgaWR4
PWVuZCwgY29udGV4dD1jb250ZXh0KS5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRp
b246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVj
dCIsIHMsIGVuZCkpCisgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgICAgIGVuZCA9
IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAg
ICAgICBlbmQgKz0gMQorICAgICAgICBpZiBuZXh0Y2hhciA9PSAnXSc6CisgICAgICAgICAgICBi
cmVhaworICAgICAgICBpZiBuZXh0Y2hhciAhPSAnLCc6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcywgZW5kKSkKKyAgICAgICAg
ZW5kID0gX3cocywgZW5kKS5lbmQoKQorICAgIHJldHVybiB2YWx1ZXMsIGVuZAorcGF0dGVybihy
J1xbJykoSlNPTkFycmF5KQorIAorQU5ZVEhJTkcgPSBbCisgICAgSlNPTk9iamVjdCwKKyAgICBK
U09OQXJyYXksCisgICAgSlNPTlN0cmluZywKKyAgICBKU09OQ29uc3RhbnQsCisgICAgSlNPTk51
bWJlciwKK10KKworSlNPTlNjYW5uZXIgPSBTY2FubmVyKEFOWVRISU5HKQorCitjbGFzcyBKU09O
RGVjb2RlcihvYmplY3QpOgorICAgICIiIgorICAgIFNpbXBsZSBKU09OIDxodHRwOi8vanNvbi5v
cmc+IGRlY29kZXIKKworICAgIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb25zIGlu
IGRlY29kaW5nOgorICAgIAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t
LSsKKyAgICB8IEpTT04gICAgICAgICAgfCBQeXRob24gICAgICAgICAgICB8CisgICAgKz09PT09
PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09KworICAgIHwgb2JqZWN0ICAgICAgICB8IGRp
Y3QgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t
LS0rCisgICAgfCBhcnJheSAgICAgICAgIHwgbGlzdCAgICAgICAgICAgICAgfAorICAgICstLS0t
LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IHN0cmluZyAgICAgICAgfCB1
bmljb2RlICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgIHwgbnVtYmVyIChpbnQpICB8IGludCwgbG9uZyAgICAgICAgIHwKKyAgICArLS0t
LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBudW1iZXIgKHJlYWwpIHwg
ZmxvYXQgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICB8IHRydWUgICAgICAgICAgfCBUcnVlICAgICAgICAgICAgICB8CisgICAgKy0t
LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgZmFsc2UgICAgICAgICB8
IEZhbHNlICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t
LS0tLS0rCisgICAgfCBudWxsICAgICAgICAgIHwgTm9uZSAgICAgICAgICAgICAgfAorICAgICst
LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgIEl0IGFsc28gdW5kZXJz
dGFuZHMgYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBhbmQgYGAtSW5maW5pdHlgYCBhcworICAgIHRo
ZWlyIGNvcnJlc3BvbmRpbmcgYGBmbG9hdGBgIHZhbHVlcywgd2hpY2ggaXMgb3V0c2lkZSB0aGUg
SlNPTiBzcGVjLgorICAgICIiIgorCisgICAgX3NjYW5uZXIgPSBTY2FubmVyKEFOWVRISU5HKQor
ICAgIF9fYWxsX18gPSBbJ19faW5pdF9fJywgJ2RlY29kZScsICdyYXdfZGVjb2RlJ10KKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBlbmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lKToKKyAg
ICAgICAgIiIiCisgICAgICAgIGBgZW5jb2RpbmdgYCBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyB1
c2VkIHRvIGludGVycHJldCBhbnkgYGBzdHJgYAorICAgICAgICBvYmplY3RzIGRlY29kZWQgYnkg
dGhpcyBpbnN0YW5jZSAodXRmLTggYnkgZGVmYXVsdCkuICBJdCBoYXMgbm8KKyAgICAgICAgZWZm
ZWN0IHdoZW4gZGVjb2RpbmcgYGB1bmljb2RlYGAgb2JqZWN0cy4KKyAgICAgICAgCisgICAgICAg
IE5vdGUgdGhhdCBjdXJyZW50bHkgb25seSBlbmNvZGluZ3MgdGhhdCBhcmUgYSBzdXBlcnNldCBv
ZiBBU0NJSSB3b3JrLAorICAgICAgICBzdHJpbmdzIG9mIG90aGVyIGVuY29kaW5ncyBzaG91bGQg
YmUgcGFzc2VkIGluIGFzIGBgdW5pY29kZWBgLgorCisgICAgICAgIGBgb2JqZWN0X2hvb2tgYCwg
aWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQKKyAgICAgICAgb2Yg
ZXZlcnkgSlNPTiBvYmplY3QgZGVjb2RlZCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVz
ZWQgaW4KKyAgICAgICAgcGxhY2Ugb2YgdGhlIGdpdmVuIGBgZGljdGBgLiAgVGhpcyBjYW4gYmUg
dXNlZCB0byBwcm92aWRlIGN1c3RvbQorICAgICAgICBkZXNlcmlhbGl6YXRpb25zIChlLmcuIHRv
IHN1cHBvcnQgSlNPTi1SUEMgY2xhc3MgaGludGluZykuCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5vYmplY3RfaG9vayA9IG9iamVj
dF9ob29rCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIHMsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgor
ICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2Yg
YGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYAorICAgICAgICBpbnN0YW5jZSBjb250YWlu
aW5nIGEgSlNPTiBkb2N1bWVudCkKKyAgICAgICAgIiIiCisgICAgICAgIG9iaiwgZW5kID0gc2Vs
Zi5yYXdfZGVjb2RlKHMsIGlkeD1fdyhzLCAwKS5lbmQoKSkKKyAgICAgICAgZW5kID0gX3cocywg
ZW5kKS5lbmQoKQorICAgICAgICBpZiBlbmQgIT0gbGVuKHMpOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcihlcnJtc2coIkV4dHJhIGRhdGEiLCBzLCBlbmQsIGxlbihzKSkpCisgICAgICAg
IHJldHVybiBvYmoKKworICAgIGRlZiByYXdfZGVjb2RlKHNlbGYsIHMsICoqa3cpOgorICAgICAg
ICAiIiIKKyAgICAgICAgRGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9tIGBgc2BgIChhIGBgc3Ry
YGAgb3IgYGB1bmljb2RlYGAgYmVnaW5uaW5nCisgICAgICAgIHdpdGggYSBKU09OIGRvY3VtZW50
KSBhbmQgcmV0dXJuIGEgMi10dXBsZSBvZiB0aGUgUHl0aG9uCisgICAgICAgIHJlcHJlc2VudGF0
aW9uIGFuZCB0aGUgaW5kZXggaW4gYGBzYGAgd2hlcmUgdGhlIGRvY3VtZW50IGVuZGVkLgorCisg
ICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9tIGEg
c3RyaW5nIHRoYXQgbWF5CisgICAgICAgIGhhdmUgZXh0cmFuZW91cyBkYXRhIGF0IHRoZSBlbmQu
CisgICAgICAgICIiIgorICAgICAgICBrdy5zZXRkZWZhdWx0KCdjb250ZXh0Jywgc2VsZikKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqLCBlbmQgPSBzZWxmLl9zY2FubmVyLml0ZXJzY2Fu
KHMsICoqa3cpLm5leHQoKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIEpTT04gb2JqZWN0IGNvdWxkIGJlIGRlY29kZWQiKQor
ICAgICAgICByZXR1cm4gb2JqLCBlbmQKKworX19hbGxfXyA9IFsnSlNPTkRlY29kZXInXQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9lbmNvZGVyLnB5IGIvV2ViS2l0VG9vbHMv
c2ltcGxlanNvbi9lbmNvZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQyOTkxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9zaW1wbGVqc29uL2VuY29k
ZXIucHkKQEAgLTAsMCArMSwzNzEgQEAKKyIiIgorSW1wbGVtZW50YXRpb24gb2YgSlNPTkVuY29k
ZXIKKyIiIgoraW1wb3J0IHJlCit0cnk6CisgICAgZnJvbSBzaW1wbGVqc29uIGltcG9ydCBfc3Bl
ZWR1cHMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfc3BlZWR1cHMgPSBOb25lCisKK0VTQ0FQ
RSA9IHJlLmNvbXBpbGUocidbXHgwMC1ceDE5XFwiXGJcZlxuXHJcdF0nKQorRVNDQVBFX0FTQ0lJ
ID0gcmUuY29tcGlsZShyJyhbXFwiL118W15cIC1+XSknKQorRVNDQVBFX0RDVCA9IHsKKyAgICAj
IGVzY2FwZSBhbGwgZm9yd2FyZCBzbGFzaGVzIHRvIHByZXZlbnQgPC9zY3JpcHQ+IGF0dGFjawor
ICAgICcvJzogJ1xcLycsCisgICAgJ1xcJzogJ1xcXFwnLAorICAgICciJzogJ1xcIicsCisgICAg
J1xiJzogJ1xcYicsCisgICAgJ1xmJzogJ1xcZicsCisgICAgJ1xuJzogJ1xcbicsCisgICAgJ1xy
JzogJ1xccicsCisgICAgJ1x0JzogJ1xcdCcsCit9Citmb3IgaSBpbiByYW5nZSgweDIwKToKKyAg
ICBFU0NBUEVfRENULnNldGRlZmF1bHQoY2hyKGkpLCAnXFx1JTA0eCcgJSAoaSwpKQorCisjIGFz
c3VtZSB0aGlzIHByb2R1Y2VzIGFuIGluZmluaXR5IG9uIGFsbCBtYWNoaW5lcyAocHJvYmFibHkg
bm90IGd1YXJhbnRlZWQpCitJTkZJTklUWSA9IGZsb2F0KCcxZTY2NjY2JykKKworZGVmIGZsb2F0
c3RyKG8sIGFsbG93X25hbj1UcnVlKToKKyAgICAjIENoZWNrIGZvciBzcGVjaWFscy4gIE5vdGUg
dGhhdCB0aGlzIHR5cGUgb2YgdGVzdCBpcyBwcm9jZXNzb3ItIGFuZC9vcgorICAgICMgcGxhdGZv
cm0tc3BlY2lmaWMsIHNvIGRvIHRlc3RzIHdoaWNoIGRvbid0IGRlcGVuZCBvbiB0aGUgaW50ZXJu
YWxzLgorCisgICAgaWYgbyAhPSBvOgorICAgICAgICB0ZXh0ID0gJ05hTicKKyAgICBlbGlmIG8g
PT0gSU5GSU5JVFk6CisgICAgICAgIHRleHQgPSAnSW5maW5pdHknCisgICAgZWxpZiBvID09IC1J
TkZJTklUWToKKyAgICAgICAgdGV4dCA9ICctSW5maW5pdHknCisgICAgZWxzZToKKyAgICAgICAg
cmV0dXJuIHJlcHIobykKKworICAgIGlmIG5vdCBhbGxvd19uYW46CisgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFu
dDogJXIiCisgICAgICAgICAgICAlIChvLCkpCisKKyAgICByZXR1cm4gdGV4dAorCisKK2RlZiBl
bmNvZGVfYmFzZXN0cmluZyhzKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBKU09OIHJlcHJlc2Vu
dGF0aW9uIG9mIGEgUHl0aG9uIHN0cmluZworICAgICIiIgorICAgIGRlZiByZXBsYWNlKG1hdGNo
KToKKyAgICAgICAgcmV0dXJuIEVTQ0FQRV9EQ1RbbWF0Y2guZ3JvdXAoMCldCisgICAgcmV0dXJu
ICciJyArIEVTQ0FQRS5zdWIocmVwbGFjZSwgcykgKyAnIicKKworZGVmIGVuY29kZV9iYXNlc3Ry
aW5nX2FzY2lpKHMpOgorICAgIGRlZiByZXBsYWNlKG1hdGNoKToKKyAgICAgICAgcyA9IG1hdGNo
Lmdyb3VwKDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBFU0NBUEVfRENUW3Nd
CisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIG4gPSBvcmQocykKKyAgICAg
ICAgICAgIGlmIG4gPCAweDEwMDAwOgorICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JTA0eCcg
JSAobiwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgc3Vycm9nYXRlIHBh
aXIKKyAgICAgICAgICAgICAgICBuIC09IDB4MTAwMDAKKyAgICAgICAgICAgICAgICBzMSA9IDB4
ZDgwMCB8ICgobiA+PiAxMCkgJiAweDNmZikKKyAgICAgICAgICAgICAgICBzMiA9IDB4ZGMwMCB8
IChuICYgMHgzZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuICdcXHUlMDR4XFx1JTA0eCcgJSAo
czEsIHMyKQorICAgIHJldHVybiAnIicgKyBzdHIoRVNDQVBFX0FTQ0lJLnN1YihyZXBsYWNlLCBz
KSkgKyAnIicKKyAgICAgICAgCit0cnk6CisgICAgZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgPSBf
c3BlZWR1cHMuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkKKyAgICBfbmVlZF91dGY4ID0gVHJ1ZQor
ZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIF9uZWVkX3V0ZjggPSBGYWxzZQorCitjbGFzcyBK
U09ORW5jb2RlcihvYmplY3QpOgorICAgICIiIgorICAgIEV4dGVuc2libGUgSlNPTiA8aHR0cDov
L2pzb24ub3JnPiBlbmNvZGVyIGZvciBQeXRob24gZGF0YSBzdHJ1Y3R1cmVzLgorCisgICAgU3Vw
cG9ydHMgdGhlIGZvbGxvd2luZyBvYmplY3RzIGFuZCB0eXBlcyBieSBkZWZhdWx0OgorICAgIAor
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFB5dGhvbiAg
ICAgICAgICAgIHwgSlNPTiAgICAgICAgICB8CisgICAgKz09PT09PT09PT09PT09PT09PT0rPT09
PT09PT09PT09PT09KworICAgIHwgZGljdCAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwK
KyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBsaXN0LCB0
dXBsZSAgICAgICB8IGFycmF5ICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0t
LS0tLS0tLS0tLS0tLSsKKyAgICB8IHN0ciwgdW5pY29kZSAgICAgIHwgc3RyaW5nICAgICAgICB8
CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgIHwgaW50LCBs
b25nLCBmbG9hdCAgfCBudW1iZXIgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSst
LS0tLS0tLS0tLS0tLS0rCisgICAgfCBUcnVlICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAg
fAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IEZhbHNl
ICAgICAgICAgICAgIHwgZmFsc2UgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tKworICAgIHwgTm9uZSAgICAgICAgICAgICAgfCBudWxsICAgICAgICAg
IHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisKKyAgICBUbyBl
eHRlbmQgdGhpcyB0byByZWNvZ25pemUgb3RoZXIgb2JqZWN0cywgc3ViY2xhc3MgYW5kIGltcGxl
bWVudCBhCisgICAgYGAuZGVmYXVsdCgpYGAgbWV0aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhh
dCByZXR1cm5zIGEgc2VyaWFsaXphYmxlCisgICAgb2JqZWN0IGZvciBgYG9gYCBpZiBwb3NzaWJs
ZSwgb3RoZXJ3aXNlIGl0IHNob3VsZCBjYWxsIHRoZSBzdXBlcmNsYXNzCisgICAgaW1wbGVtZW50
YXRpb24gKHRvIHJhaXNlIGBgVHlwZUVycm9yYGApLgorICAgICIiIgorICAgIF9fYWxsX18gPSBb
J19faW5pdF9fJywgJ2RlZmF1bHQnLCAnZW5jb2RlJywgJ2l0ZXJlbmNvZGUnXQorICAgIGl0ZW1f
c2VwYXJhdG9yID0gJywgJworICAgIGtleV9zZXBhcmF0b3IgPSAnOiAnCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHNraXBrZXlzPUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwKKyAgICAgICAgICAg
IGNoZWNrX2NpcmN1bGFyPVRydWUsIGFsbG93X25hbj1UcnVlLCBzb3J0X2tleXM9RmFsc2UsCisg
ICAgICAgICAgICBpbmRlbnQ9Tm9uZSwgc2VwYXJhdG9ycz1Ob25lLCBlbmNvZGluZz0ndXRmLTgn
KToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnN0cnVjdG9yIGZvciBKU09ORW5jb2Rlciwgd2l0
aCBzZW5zaWJsZSBkZWZhdWx0cy4KKworICAgICAgICBJZiBza2lwa2V5cyBpcyBGYWxzZSwgdGhl
biBpdCBpcyBhIFR5cGVFcnJvciB0byBhdHRlbXB0CisgICAgICAgIGVuY29kaW5nIG9mIGtleXMg
dGhhdCBhcmUgbm90IHN0ciwgaW50LCBsb25nLCBmbG9hdCBvciBOb25lLiAgSWYKKyAgICAgICAg
c2tpcGtleXMgaXMgVHJ1ZSwgc3VjaCBpdGVtcyBhcmUgc2ltcGx5IHNraXBwZWQuCisKKyAgICAg
ICAgSWYgZW5zdXJlX2FzY2lpIGlzIFRydWUsIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBi
ZSBzdHIKKyAgICAgICAgb2JqZWN0cyB3aXRoIGFsbCBpbmNvbWluZyB1bmljb2RlIGNoYXJhY3Rl
cnMgZXNjYXBlZC4gIElmCisgICAgICAgIGVuc3VyZV9hc2NpaSBpcyBmYWxzZSwgdGhlIG91dHB1
dCB3aWxsIGJlIHVuaWNvZGUgb2JqZWN0LgorCisgICAgICAgIElmIGNoZWNrX2NpcmN1bGFyIGlz
IFRydWUsIHRoZW4gbGlzdHMsIGRpY3RzLCBhbmQgY3VzdG9tIGVuY29kZWQKKyAgICAgICAgb2Jq
ZWN0cyB3aWxsIGJlIGNoZWNrZWQgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgZHVyaW5nIGVuY29k
aW5nIHRvCisgICAgICAgIHByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uICh3aGljaCB3b3Vs
ZCBjYXVzZSBhbiBPdmVyZmxvd0Vycm9yKS4KKyAgICAgICAgT3RoZXJ3aXNlLCBubyBzdWNoIGNo
ZWNrIHRha2VzIHBsYWNlLgorCisgICAgICAgIElmIGFsbG93X25hbiBpcyBUcnVlLCB0aGVuIE5h
TiwgSW5maW5pdHksIGFuZCAtSW5maW5pdHkgd2lsbCBiZQorICAgICAgICBlbmNvZGVkIGFzIHN1
Y2guICBUaGlzIGJlaGF2aW9yIGlzIG5vdCBKU09OIHNwZWNpZmljYXRpb24gY29tcGxpYW50LAor
ICAgICAgICBidXQgaXMgY29uc2lzdGVudCB3aXRoIG1vc3QgSmF2YVNjcmlwdCBiYXNlZCBlbmNv
ZGVycyBhbmQgZGVjb2RlcnMuCisgICAgICAgIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhIFZhbHVl
RXJyb3IgdG8gZW5jb2RlIHN1Y2ggZmxvYXRzLgorCisgICAgICAgIElmIHNvcnRfa2V5cyBpcyBU
cnVlLCB0aGVuIHRoZSBvdXRwdXQgb2YgZGljdGlvbmFyaWVzIHdpbGwgYmUKKyAgICAgICAgc29y
dGVkIGJ5IGtleTsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlZ3Jlc3Npb24gdGVzdHMgdG8gZW5zdXJl
CisgICAgICAgIHRoYXQgSlNPTiBzZXJpYWxpemF0aW9ucyBjYW4gYmUgY29tcGFyZWQgb24gYSBk
YXktdG8tZGF5IGJhc2lzLgorCisgICAgICAgIElmIGluZGVudCBpcyBhIG5vbi1uZWdhdGl2ZSBp
bnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkKKyAgICAgICAgZWxlbWVudHMgYW5kIG9iamVjdCBtZW1i
ZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0CisgICAgICAgIGluZGVudCBsZXZl
bC4gIEFuIGluZGVudCBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuCisgICAg
ICAgIE5vbmUgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlvbi4KKworICAgICAgICBJ
ZiBzcGVjaWZpZWQsIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGEgKGl0ZW1fc2VwYXJhdG9yLCBrZXlf
c2VwYXJhdG9yKQorICAgICAgICB0dXBsZS4gVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiBU
byBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OCisgICAgICAgIHJlcHJlc2VudGF0aW9uIHlvdSBz
aG91bGQgc3BlY2lmeSAoJywnLCAnOicpIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorCisgICAg
ICAgIElmIGVuY29kaW5nIGlzIG5vdCBOb25lLCB0aGVuIGFsbCBpbnB1dCBzdHJpbmdzIHdpbGwg
YmUKKyAgICAgICAgdHJhbnNmb3JtZWQgaW50byB1bmljb2RlIHVzaW5nIHRoYXQgZW5jb2Rpbmcg
cHJpb3IgdG8gSlNPTi1lbmNvZGluZy4gCisgICAgICAgIFRoZSBkZWZhdWx0IGlzIFVURi04Lgor
ICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnNraXBrZXlzID0gc2tpcGtleXMKKyAgICAgICAg
c2VsZi5lbnN1cmVfYXNjaWkgPSBlbnN1cmVfYXNjaWkKKyAgICAgICAgc2VsZi5jaGVja19jaXJj
dWxhciA9IGNoZWNrX2NpcmN1bGFyCisgICAgICAgIHNlbGYuYWxsb3dfbmFuID0gYWxsb3dfbmFu
CisgICAgICAgIHNlbGYuc29ydF9rZXlzID0gc29ydF9rZXlzCisgICAgICAgIHNlbGYuaW5kZW50
ID0gaW5kZW50CisgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgPSAwCisgICAgICAg
IGlmIHNlcGFyYXRvcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJh
dG9yLCBzZWxmLmtleV9zZXBhcmF0b3IgPSBzZXBhcmF0b3JzCisgICAgICAgIHNlbGYuZW5jb2Rp
bmcgPSBlbmNvZGluZworCisgICAgZGVmIF9uZXdsaW5lX2luZGVudChzZWxmKToKKyAgICAgICAg
cmV0dXJuICdcbicgKyAoJyAnICogKHNlbGYuaW5kZW50ICogc2VsZi5jdXJyZW50X2luZGVudF9s
ZXZlbCkpCisKKyAgICBkZWYgX2l0ZXJlbmNvZGVfbGlzdChzZWxmLCBsc3QsIG1hcmtlcnM9Tm9u
ZSk6CisgICAgICAgIGlmIG5vdCBsc3Q6CisgICAgICAgICAgICB5aWVsZCAnW10nCisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IG1hcmtlcmlkID0gaWQobHN0KQorICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoK
KyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0
ZWN0ZWQiKQorICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBsc3QKKyAgICAgICAgeWll
bGQgJ1snCisgICAgICAgIGlmIHNlbGYuaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
c2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCisgICAgICAgICAgICBuZXdsaW5lX2luZGVu
dCA9IHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IHNlbGYu
aXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAgeWllbGQgbmV3bGlu
ZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9u
ZQorICAgICAgICAgICAgc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvcgorICAgICAgICBm
aXJzdCA9IFRydWUKKyAgICAgICAgZm9yIHZhbHVlIGluIGxzdDoKKyAgICAgICAgICAgIGlmIGZp
cnN0OgorICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgeWllbGQgc2VwYXJhdG9yCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4g
c2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vycyk6CisgICAgICAgICAgICAgICAgeWllbGQg
Y2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgICAgIHlpZWxkIHNlbGYu
X25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgeWllbGQgJ10nCisgICAgICAgIGlmIG1hcmtlcnMg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRl
ZiBfaXRlcmVuY29kZV9kaWN0KHNlbGYsIGRjdCwgbWFya2Vycz1Ob25lKToKKyAgICAgICAgaWYg
bm90IGRjdDoKKyAgICAgICAgICAgIHlpZWxkICd7fScKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWFya2VyaWQgPSBpZChk
Y3QpCisgICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAg
ICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGRjdAorICAgICAgICB5aWVsZCAneycKKyAgICAgICAg
a2V5X3NlcGFyYXRvciA9IHNlbGYua2V5X3NlcGFyYXRvcgorICAgICAgICBpZiBzZWxmLmluZGVu
dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0g
MQorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBzZWxmLl9uZXdsaW5lX2luZGVudCgpCisg
ICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5l
X2luZGVudAorICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQorICAgICAgICAgICAgaXRlbV9zZXBh
cmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAg
ICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKKyAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFz
ZXN0cmluZ19hc2NpaQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW5jb2RlciA9IGVuY29k
ZV9iYXNlc3RyaW5nCisgICAgICAgIGFsbG93X25hbiA9IHNlbGYuYWxsb3dfbmFuCisgICAgICAg
IGlmIHNlbGYuc29ydF9rZXlzOgorICAgICAgICAgICAga2V5cyA9IGRjdC5rZXlzKCkKKyAgICAg
ICAgICAgIGtleXMuc29ydCgpCisgICAgICAgICAgICBpdGVtcyA9IFsoaywgZGN0W2tdKSBmb3Ig
ayBpbiBrZXlzXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXRlbXMgPSBkY3QuaXRlcml0
ZW1zKCkKKyAgICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZworICAgICAgICBfZG9fZGVj
b2RlID0gKF9lbmNvZGluZyBpcyBub3QgTm9uZQorICAgICAgICAgICAgYW5kIG5vdCAoX25lZWRf
dXRmOCBhbmQgX2VuY29kaW5nID09ICd1dGYtOCcpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBp
biBpdGVtczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAg
ICAgICAgIGlmIF9kb19kZWNvZGU6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5kZWNv
ZGUoX2VuY29kaW5nKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmlu
Zyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdl
YWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCisgICAgICAgICAgICAj
IGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlr
ZSB0aGlzLgorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgorICAgICAg
ICAgICAgICAgIGtleSA9IGZsb2F0c3RyKGtleSwgYWxsb3dfbmFuKQorICAgICAgICAgICAgZWxp
ZiBpc2luc3RhbmNlKGtleSwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgICAgIGtleSA9IHN0
cihrZXkpCisgICAgICAgICAgICBlbGlmIGtleSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIGtl
eSA9ICd0cnVlJworICAgICAgICAgICAgZWxpZiBrZXkgaXMgRmFsc2U6CisgICAgICAgICAgICAg
ICAga2V5ID0gJ2ZhbHNlJworICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICBrZXkgPSAnbnVsbCcKKyAgICAgICAgICAgIGVsaWYgc2VsZi5za2lwa2V5czoKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByYWlzZSBUeXBlRXJyb3IoImtleSAlciBpcyBub3QgYSBzdHJpbmciICUgKGtleSwpKQorICAg
ICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBpdGVtX3NlcGFyYXRvcgorICAgICAg
ICAgICAgeWllbGQgZW5jb2RlcihrZXkpCisgICAgICAgICAgICB5aWVsZCBrZXlfc2VwYXJhdG9y
CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vy
cyk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRl
bnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09
IDEKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgeWll
bGQgJ30nCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwg
bWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZShzZWxmLCBvLCBtYXJrZXJz
PU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgorICAgICAgICAg
ICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6CisgICAgICAgICAgICAgICAgZW5jb2RlciA9IGVuY29k
ZV9iYXNlc3RyaW5nX2FzY2lpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVu
Y29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZworICAgICAgICAgICAgX2VuY29kaW5nID0gc2VsZi5l
bmNvZGluZworICAgICAgICAgICAgaWYgKF9lbmNvZGluZyBpcyBub3QgTm9uZSBhbmQgaXNpbnN0
YW5jZShvLCBzdHIpCisgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgKF9uZWVkX3V0ZjggYW5k
IF9lbmNvZGluZyA9PSAndXRmLTgnKSk6CisgICAgICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9l
bmNvZGluZykKKyAgICAgICAgICAgIHlpZWxkIGVuY29kZXIobykKKyAgICAgICAgZWxpZiBvIGlz
IE5vbmU6CisgICAgICAgICAgICB5aWVsZCAnbnVsbCcKKyAgICAgICAgZWxpZiBvIGlzIFRydWU6
CisgICAgICAgICAgICB5aWVsZCAndHJ1ZScKKyAgICAgICAgZWxpZiBvIGlzIEZhbHNlOgorICAg
ICAgICAgICAgeWllbGQgJ2ZhbHNlJworICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGludCwg
bG9uZykpOgorICAgICAgICAgICAgeWllbGQgc3RyKG8pCisgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShvLCBmbG9hdCk6CisgICAgICAgICAgICB5aWVsZCBmbG9hdHN0cihvLCBzZWxmLmFsbG93X25h
bikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAg
ICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGVfbGlzdChvLCBtYXJrZXJzKToKKyAgICAg
ICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6
CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZV9kaWN0KG8sIG1hcmtl
cnMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG1hcmtlcmlkID0g
aWQobykKKyAgICAgICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQi
KQorICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gbworICAgICAgICAgICAgZm9y
IGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGVfZGVmYXVsdChvLCBtYXJrZXJzKToKKyAgICAgICAg
ICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVu
Y29kZV9kZWZhdWx0KHNlbGYsIG8sIG1hcmtlcnM9Tm9uZSk6CisgICAgICAgIG5ld29iaiA9IHNl
bGYuZGVmYXVsdChvKQorICAgICAgICByZXR1cm4gc2VsZi5faXRlcmVuY29kZShuZXdvYmosIG1h
cmtlcnMpCisKKyAgICBkZWYgZGVmYXVsdChzZWxmLCBvKToKKyAgICAgICAgIiIiCisgICAgICAg
IEltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBhIHN1YmNsYXNzIHN1Y2ggdGhhdCBpdCByZXR1cm5z
CisgICAgICAgIGEgc2VyaWFsaXphYmxlIG9iamVjdCBmb3IgYGBvYGAsIG9yIGNhbGxzIHRoZSBi
YXNlIGltcGxlbWVudGF0aW9uCisgICAgICAgICh0byByYWlzZSBhIGBgVHlwZUVycm9yYGApLgor
CisgICAgICAgIEZvciBleGFtcGxlLCB0byBzdXBwb3J0IGFyYml0cmFyeSBpdGVyYXRvcnMsIHlv
dSBjb3VsZAorICAgICAgICBpbXBsZW1lbnQgZGVmYXVsdCBsaWtlIHRoaXM6OgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKToKKyAgICAgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgICAgIGl0ZXJhYmxlID0gaXRlcihvKQorICAgICAgICAgICAg
ICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdChpdGVyYWJsZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gSlNPTkVuY29kZXIuZGVmYXVsdChzZWxmLCBvKQorICAg
ICAgICAiIiIKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlciBpcyBub3QgSlNPTiBzZXJpYWxp
emFibGUiICUgKG8sKSkKKworICAgIGRlZiBlbmNvZGUoc2VsZiwgbyk6CisgICAgICAgICIiIgor
ICAgICAgICBSZXR1cm4gYSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBk
YXRhIHN0cnVjdHVyZS4KKworICAgICAgICA+Pj4gSlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28i
OiBbImJhciIsICJiYXoiXX0pCisgICAgICAgICd7ImZvbyI6WyJiYXIiLCAiYmF6Il19JworICAg
ICAgICAiIiIKKyAgICAgICAgIyBUaGlzIGlzIGZvciBleHRyZW1lbHkgc2ltcGxlIGNhc2VzIGFu
ZCBiZW5jaG1hcmtzLi4uCisgICAgICAgIGlmIGlzaW5zdGFuY2UobywgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIHN0cik6CisgICAgICAgICAgICAgICAgX2VuY29k
aW5nID0gc2VsZi5lbmNvZGluZworICAgICAgICAgICAgICAgIGlmIChfZW5jb2RpbmcgaXMgbm90
IE5vbmUgCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IChfZW5jb2RpbmcgPT0gJ3V0
Zi04JyBhbmQgX25lZWRfdXRmOCkpOgorICAgICAgICAgICAgICAgICAgICBvID0gby5kZWNvZGUo
X2VuY29kaW5nKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKG8p
CisgICAgICAgICMgVGhpcyBkb2Vzbid0IHBhc3MgdGhlIGl0ZXJhdG9yIGRpcmVjdGx5IHRvICcn
LmpvaW4oKSBiZWNhdXNlIGl0CisgICAgICAgICMgc3Vja3MgYXQgcmVwb3J0aW5nIGV4Y2VwdGlv
bnMuICBJdCdzIGdvaW5nIHRvIGRvIHRoaXMgaW50ZXJuYWxseQorICAgICAgICAjIGFueXdheSBi
ZWNhdXNlIGl0IHVzZXMgUHlTZXF1ZW5jZV9GYXN0IG9yIHNpbWlsYXIuCisgICAgICAgIGNodW5r
cyA9IGxpc3Qoc2VsZi5pdGVyZW5jb2RlKG8pKQorICAgICAgICByZXR1cm4gJycuam9pbihjaHVu
a3MpCisKKyAgICBkZWYgaXRlcmVuY29kZShzZWxmLCBvKToKKyAgICAgICAgIiIiCisgICAgICAg
IEVuY29kZSB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCB5aWVsZCBlYWNoIHN0cmluZworICAgICAgICBy
ZXByZXNlbnRhdGlvbiBhcyBhdmFpbGFibGUuCisgICAgICAgIAorICAgICAgICBGb3IgZXhhbXBs
ZTo6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBKU09ORW5jb2Rlcigp
Lml0ZXJlbmNvZGUoYmlnb2JqZWN0KToKKyAgICAgICAgICAgICAgICBteXNvY2tldC53cml0ZShj
aHVuaykKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuY2hlY2tfY2lyY3VsYXI6CisgICAg
ICAgICAgICBtYXJrZXJzID0ge30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcmtlcnMg
PSBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVyZW5jb2RlKG8sIG1hcmtlcnMpCisKK19f
YWxsX18gPSBbJ0pTT05FbmNvZGVyJ10KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3NpbXBsZWpz
b24vanNvbmZpbHRlci5weSBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vanNvbmZpbHRlci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWNhMjFkCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5CkBAIC0wLDAgKzEsNDAg
QEAKK2ltcG9ydCBzaW1wbGVqc29uCitpbXBvcnQgY2dpCisKK2NsYXNzIEpTT05GaWx0ZXIob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXBwLCBtaW1lX3R5cGU9J3RleHQveC1qc29u
Jyk6CisgICAgICAgIHNlbGYuYXBwID0gYXBwCisgICAgICAgIHNlbGYubWltZV90eXBlID0gbWlt
ZV90eXBlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZW52aXJvbiwgc3RhcnRfcmVzcG9uc2Up
OgorICAgICAgICAjIFJlYWQgSlNPTiBQT1NUIGlucHV0IHRvIGpzb25maWx0ZXIuanNvbiBpZiBt
YXRjaGluZyBtaW1lIHR5cGUKKyAgICAgICAgcmVzcG9uc2UgPSB7J3N0YXR1cyc6ICcyMDAgT0sn
LCAnaGVhZGVycyc6IFtdfQorICAgICAgICBkZWYganNvbl9zdGFydF9yZXNwb25zZShzdGF0dXMs
IGhlYWRlcnMpOgorICAgICAgICAgICAgcmVzcG9uc2VbJ3N0YXR1cyddID0gc3RhdHVzCisgICAg
ICAgICAgICByZXNwb25zZVsnaGVhZGVycyddLmV4dGVuZChoZWFkZXJzKQorICAgICAgICBlbnZp
cm9uWydqc29uZmlsdGVyLm1pbWVfdHlwZSddID0gc2VsZi5taW1lX3R5cGUKKyAgICAgICAgaWYg
ZW52aXJvbi5nZXQoJ1JFUVVFU1RfTUVUSE9EJywgJycpID09ICdQT1NUJzoKKyAgICAgICAgICAg
IGlmIGVudmlyb24uZ2V0KCdDT05URU5UX1RZUEUnLCAnJykgPT0gc2VsZi5taW1lX3R5cGU6Cisg
ICAgICAgICAgICAgICAgYXJncyA9IFtfIGZvciBfIGluIFtlbnZpcm9uLmdldCgnQ09OVEVOVF9M
RU5HVEgnKV0gaWYgX10KKyAgICAgICAgICAgICAgICBkYXRhID0gZW52aXJvblsnd3NnaS5pbnB1
dCddLnJlYWQoKm1hcChpbnQsIGFyZ3MpKQorICAgICAgICAgICAgICAgIGVudmlyb25bJ2pzb25m
aWx0ZXIuanNvbiddID0gc2ltcGxlanNvbi5sb2FkcyhkYXRhKQorICAgICAgICByZXMgPSBzaW1w
bGVqc29uLmR1bXBzKHNlbGYuYXBwKGVudmlyb24sIGpzb25fc3RhcnRfcmVzcG9uc2UpKQorICAg
ICAgICBqc29ucCA9IGNnaS5wYXJzZV9xcyhlbnZpcm9uLmdldCgnUVVFUllfU1RSSU5HJywgJycp
KS5nZXQoJ2pzb25wJykKKyAgICAgICAgaWYganNvbnA6CisgICAgICAgICAgICBjb250ZW50X3R5
cGUgPSAndGV4dC9qYXZhc2NyaXB0JworICAgICAgICAgICAgcmVzID0gJycuam9pbihqc29ucCAr
IFsnKCcsIHJlcywgJyknXSkKKyAgICAgICAgZWxpZiAnT3BlcmEnIGluIGVudmlyb24uZ2V0KCdI
VFRQX1VTRVJfQUdFTlQnLCAnJyk6CisgICAgICAgICAgICAjIE9wZXJhIGhhcyBidW5rIFhNTEh0
dHBSZXF1ZXN0IHN1cHBvcnQgZm9yIG1vc3QgbWltZSB0eXBlcworICAgICAgICAgICAgY29udGVu
dF90eXBlID0gJ3RleHQvcGxhaW4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250ZW50
X3R5cGUgPSBzZWxmLm1pbWVfdHlwZQorICAgICAgICBoZWFkZXJzID0gWworICAgICAgICAgICAg
KCdDb250ZW50LXR5cGUnLCBjb250ZW50X3R5cGUpLAorICAgICAgICAgICAgKCdDb250ZW50LWxl
bmd0aCcsIGxlbihyZXMpKSwKKyAgICAgICAgXQorICAgICAgICBoZWFkZXJzLmV4dGVuZChyZXNw
b25zZVsnaGVhZGVycyddKQorICAgICAgICBzdGFydF9yZXNwb25zZShyZXNwb25zZVsnc3RhdHVz
J10sIGhlYWRlcnMpCisgICAgICAgIHJldHVybiBbcmVzXQorCitkZWYgZmFjdG9yeShhcHAsIGds
b2JhbF9jb25mLCAqKmt3KToKKyAgICByZXR1cm4gSlNPTkZpbHRlcihhcHAsICoqa3cpCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9zaW1wbGVqc29uL3NjYW5uZXIucHkgYi9XZWJLaXRUb29scy9z
aW1wbGVqc29uL3NjYW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NjRmNDk5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3NpbXBsZWpzb24vc2Nhbm5l
ci5weQpAQCAtMCwwICsxLDYzIEBACisiIiIKK0l0ZXJhdG9yIGJhc2VkIHNyZSB0b2tlbiBzY2Fu
bmVyCisiIiIKK2ltcG9ydCBzcmVfcGFyc2UsIHNyZV9jb21waWxlLCBzcmVfY29uc3RhbnRzCitm
cm9tIHNyZV9jb25zdGFudHMgaW1wb3J0IEJSQU5DSCwgU1VCUEFUVEVSTgorZnJvbSByZSBpbXBv
cnQgVkVSQk9TRSwgTVVMVElMSU5FLCBET1RBTEwKK2ltcG9ydCByZQorCitfX2FsbF9fID0gWydT
Y2FubmVyJywgJ3BhdHRlcm4nXQorCitGTEFHUyA9IChWRVJCT1NFIHwgTVVMVElMSU5FIHwgRE9U
QUxMKQorY2xhc3MgU2Nhbm5lcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZXhp
Y29uLCBmbGFncz1GTEFHUyk6CisgICAgICAgIHNlbGYuYWN0aW9ucyA9IFtOb25lXQorICAgICAg
ICAjIGNvbWJpbmUgcGhyYXNlcyBpbnRvIGEgY29tcG91bmQgcGF0dGVybgorICAgICAgICBzID0g
c3JlX3BhcnNlLlBhdHRlcm4oKQorICAgICAgICBzLmZsYWdzID0gZmxhZ3MKKyAgICAgICAgcCA9
IFtdCisgICAgICAgIGZvciBpZHgsIHRva2VuIGluIGVudW1lcmF0ZShsZXhpY29uKToKKyAgICAg
ICAgICAgIHBocmFzZSA9IHRva2VuLnBhdHRlcm4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBzdWJwYXR0ZXJuID0gc3JlX3BhcnNlLlN1YlBhdHRlcm4ocywKKyAgICAgICAgICAg
ICAgICAgICAgWyhTVUJQQVRURVJOLCAoaWR4ICsgMSwgc3JlX3BhcnNlLnBhcnNlKHBocmFzZSwg
ZmxhZ3MpKSldKQorICAgICAgICAgICAgZXhjZXB0IHNyZV9jb25zdGFudHMuZXJyb3I6CisgICAg
ICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHAuYXBwZW5kKHN1YnBhdHRlcm4pCisgICAg
ICAgICAgICBzZWxmLmFjdGlvbnMuYXBwZW5kKHRva2VuKQorCisgICAgICAgIHAgPSBzcmVfcGFy
c2UuU3ViUGF0dGVybihzLCBbKEJSQU5DSCwgKE5vbmUsIHApKV0pCisgICAgICAgIHNlbGYuc2Nh
bm5lciA9IHNyZV9jb21waWxlLmNvbXBpbGUocCkKKworCisgICAgZGVmIGl0ZXJzY2FuKHNlbGYs
IHN0cmluZywgaWR4PTAsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBZaWVs
ZCBtYXRjaCwgZW5kX2lkeCBmb3IgZWFjaCBtYXRjaAorICAgICAgICAiIiIKKyAgICAgICAgbWF0
Y2ggPSBzZWxmLnNjYW5uZXIuc2Nhbm5lcihzdHJpbmcsIGlkeCkubWF0Y2gKKyAgICAgICAgYWN0
aW9ucyA9IHNlbGYuYWN0aW9ucworICAgICAgICBsYXN0ZW5kID0gaWR4CisgICAgICAgIGVuZCA9
IGxlbihzdHJpbmcpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBtID0gbWF0Y2go
KQorICAgICAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICBtYXRjaGJlZ2luLCBtYXRjaGVuZCA9IG0uc3BhbigpCisgICAgICAgICAgICBpZiBs
YXN0ZW5kID09IG1hdGNoZW5kOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBh
Y3Rpb24gPSBhY3Rpb25zW20ubGFzdGluZGV4XQorICAgICAgICAgICAgaWYgYWN0aW9uIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgIHJ2YWwsIG5leHRfcG9zID0gYWN0aW9uKG0sIGNvbnRl
eHQpCisgICAgICAgICAgICAgICAgaWYgbmV4dF9wb3MgaXMgbm90IE5vbmUgYW5kIG5leHRfcG9z
ICE9IG1hdGNoZW5kOgorICAgICAgICAgICAgICAgICAgICAjICJmYXN0IGZvcndhcmQiIHRoZSBz
Y2FubmVyCisgICAgICAgICAgICAgICAgICAgIG1hdGNoZW5kID0gbmV4dF9wb3MKKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLnNjYW5uZXIuc2Nhbm5lcihzdHJpbmcsIG1hdGNoZW5k
KS5tYXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIHJ2YWwsIG1hdGNoZW5kCisgICAgICAgICAg
ICBsYXN0ZW5kID0gbWF0Y2hlbmQKKyAgICAgICAgICAgIAorZGVmIHBhdHRlcm4ocGF0dGVybiwg
ZmxhZ3M9RkxBR1MpOgorICAgIGRlZiBkZWNvcmF0b3IoZm4pOgorICAgICAgICBmbi5wYXR0ZXJu
ID0gcGF0dGVybgorICAgICAgICBmbi5yZWdleCA9IHJlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3Mp
CisgICAgICAgIHJldHVybiBmbgorICAgIHJldHVybiBkZWNvcmF0b3IK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47745</attachid>
            <date>2010-01-29 16:53:45 -0800</date>
            <delta_ts>2010-01-29 17:04:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31498-20100129165344.patch</filename>
            <type>text/plain</type>
            <size>209801</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0MDg3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDEtMjkgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hlY2sgaW4gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIENocm9taXVtIFB5dGhv
biBwb3J0IG9mIHRoZSAKKyAgICAgICAgcnVuLXdlYmtpdC10ZXN0cyB0ZXN0IGRyaXZlci4gVGhl
IGZpbGVzIHVuZGVyIAorICAgICAgICBsYXlvdXRfdGVzdHMvbGF5b3V0X2xheW91dCBjb25zdGl0
dXRlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uOworICAgICAgICB0aGV5IGNhbiBiZSByb3Vn
aGx5IGRpdmlkZWQgaW50byBjb2RlIHRoYXQgcGFyc2VzIHRoZSAKKyAgICAgICAgInRlc3RfZXhw
ZWN0YXRpb25zLnR4dCIgZmlsZSB0aGF0IGRlc2NyaWJlcyBob3cgd2UgZXhwZWN0IHRlc3RzIHRv
CisgICAgICAgIHBhc3Mgb3IgZmFpbCwgcGxhdGZvcm0tc3BlY2lmaWMgaG9va3MgZm9yIHRoZSBk
aWZmZXJlbnQgQ2hyb21pdW0gCisgICAgICAgIHBvcnRzIChpbiBwbGF0Zm9ybV91dGlscyopLCBj
b2RlIGZvciBwYXJzaW5nIHRoZSBvdXRwdXQgb2YgdGhlCisgICAgICAgIHRlc3RzIGFuZCBnZW5l
cmF0aW5nIHJlc3VsdHMgZmlsZXMgYW5kIEhUTUwgYW5kIEpTT04gZm9yIHRoZQorICAgICAgICBk
YXNoYm9hcmRzLCBhdXhpbGlhcnkgc2NyaXB0cyBmb3Igc3RhcnRpbmcgYW5kIHN0b3BwaW5nIEhU
VFAgYW5kCisgICAgICAgIFdlYiBTb2NrZXQgc2VydmVycywgYW5kIHRoZW4gb25lIG9mIHRoZSBh
Y3R1YWwgZHJpdmVyIGZpbGVzIAorICAgICAgICAodGVzdF9zaGVsbF90aHJlYWQpLiBDb2RlIGZv
ciBhY3R1YWxseSBwYXJzaW5nIHRlc3Qgb3V0cHV0IGZvciAKKyAgICAgICAgZmFpbHVyZXMgYW5k
IHRoZSB0b3AtbGV2ZWwgZHJpdmVyIHNjcmlwdHMgd2lsbCBmb2xsb3cgc2hvcnRseS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE0OTgKKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzOiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvX19pbml0
X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW06IEFkZGVkLgorICAg
ICAgICAgIC0gc2NyaXB0cyB0byBzdGFydCBhbmQgc3RvcCBhcGFjaGUKKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jl
c3VsdHNfZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OiBBZGRl
ZC4KKyAgICAgICAgICAtIHNjcmlwdHMgdG8gZ2VuZXJhdGUgdGhlIEpTT04gbGF5b3V0IHRlc3Qg
ZGFzaGJvYXJkIGFuZCB0aGUKKyAgICAgICAgICAgIGZsYWtpbmVzcyBkYXNoYm9hcmQKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRw
ZC5jb25mOiBBZGRlZC4KKyAgICAgICAgICAtIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgTGln
SFRUUGQgKHVzZWQgb24gV2luZG93cykKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weTogQWRkZWQuCisgICAgICAg
ICAgLSB1dGlsaXR5IGNsYXNzIHRoYXQgaW1wbGVtZW50cyBwcm9ncmVzcyBiYXJzIG9uIHRoZSBj
b25zb2xlIHRvCisgICAgICAgICAgICBiZSBkaXNwbGF5ZWQgd2hpbGUgdGhlIHRlc3RzIGFyZSBy
dW5uaW5nCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvcGF0aF91dGlscy5weTogQWRkZWQuCisgICAgICAgICAgLSB2YXJpb3VzIHJvdXRpbmVz
IGZvciBtYW5pcHVsYXRpbmcgcGF0aHMgYW5kIFVSSXMKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlscy5weTogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cGxhdGZvcm1fdXRpbHNfbGludXgucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX21hYy5weTogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvcGxhdGZvcm1fdXRpbHNfd2luLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIHBsYXRmb3JtLXNw
ZWNpZmljIGFzcGVjdHMgb2YgdGhlIGRyaXZlcnMgKGJpbmFyeSBuYW1lcywgcGF0aHMsCisgICAg
ICAgICAgICBwcm9jZXNzIGNvbnRyb2wsIGV0Yy4pCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHk6IEFkZGVk
LgorICAgICAgICAgIC0gY29kZSBmb3IgcGFyc2luZyB0aGUgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4
dCcgZmlsZSB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgIHdoaWNoIHRlc3RzIGFyZSBleHBlY3Rl
ZCB0byBmYWlsIChhbmQgaG93KSBvbiB3aGljaCBwbGF0Zm9ybXMKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5OiBB
ZGRlZC4KKyAgICAgICAgICAtIGNvZGUgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCBraW5kcyBvZiBm
YWlsdXJlcyAoZ2VuZXJhdGluZyBvdXRwdXQKKyAgICAgICAgICAgIGluIHRoZSByZXN1bHRzLCBl
dGMuKQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZmlsZXMucHk6IEFkZGVkLgorICAgICAgICAgIC0gY29kZSB0byBnYXRoZXIgdGhl
IGxpc3RzIG9mIHRlc3RzCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHk6IEFkZGVkLgorICAgICAgICAgIC0g
Y29kZSB0byBhY3R1YWxseSBleGVjdXRlIHRlc3RzIHZpYSBUZXN0U2hlbGwgYW5kIHByb2Nlc3MK
KyAgICAgICAgICAgIHRoZSBvdXRwdXQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93ZWJzb2NrZXRfc2VydmVyLnB5OiBBZGRlZC4KKyAgICAg
ICAgICAtIHNjcmlwdHMgdG8gc3RhcnQgYW5kIHN0b3AgdGhlIHB5d2Vic29ja2V0IHNlcnZlcgor
CiAyMDEwLTAxLTI5ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvX19pbml0X18ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvX19pbml0X18ucHkKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvYXBhY2hlX2h0dHBfc2VydmVyLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRw
X3NlcnZlci5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjkgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIHN0YXJ0L3N0b3Ag
dGhlIGFwYWNoZSBodHRwIHNlcnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIKKworaW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBz
dWJwcm9jZXNzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBodHRwX3NlcnZlcl9iYXNlCitpbXBvcnQg
cGF0aF91dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxzCisKKworY2xhc3MgTGF5b3V0VGVzdEFw
YWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG91dHB1dF9kaXIpOgorICAgICAgICAiIiJBcmdzOgorICAgICAgICAgIG91
dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGly
ZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2Rp
cgorICAgICAgICBzZWxmLl9odHRwZF9wcm9jID0gTm9uZQorICAgICAgICBwYXRoX3V0aWxzLm1h
eWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCisKKyAgICAgICAgc2VsZi5tYXBwaW5ncyA9
IFt7J3BvcnQnOiA4MDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgw
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgxfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnc3NsY2VydCc6IFRydWV9XQorCisgICAgICAg
ICMgVGhlIHVwc3RyZWFtIC5jb25mIGZpbGUgYXNzdW1lZCB0aGUgZXhpc3RlbmNlIG9mIC90bXAv
V2ViS2l0IGZvcgorICAgICAgICAjIHBsYWNpbmcgYXBhY2hlIGZpbGVzIGxpa2UgdGhlIGxvY2sg
ZmlsZSB0aGVyZS4KKyAgICAgICAgc2VsZi5fcnVudGltZV9wYXRoID0gb3MucGF0aC5qb2luKCIv
dG1wIiwgIldlYktpdCIpCisgICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnko
c2VsZi5fcnVudGltZV9wYXRoKQorCisgICAgICAgICMgVGhlIFBJRCByZXR1cm5lZCB3aGVuIEFw
YWNoZSBpcyBzdGFydGVkIGdvZXMgYXdheSAoZHVlIHRvIGRyb3BwaW5nCisgICAgICAgICMgcHJp
dmlsZWdlcz8pLiBUaGUgcHJvcGVyIGNvbnRyb2xsaW5nIFBJRCBpcyB3cml0dGVuIHRvIGEgZmls
ZSBpbiB0aGUKKyAgICAgICAgIyBhcGFjaGUgcnVudGltZSBkaXJlY3RvcnkuCisgICAgICAgIHNl
bGYuX3BpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJ2h0dHBkLnBp
ZCcpCisKKyAgICAgICAgdGVzdF9kaXIgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGly
ZF9wYXJ0eScsICdXZWJLaXQnLAorICAgICAgICAgICAgJ0xheW91dFRlc3RzJykKKyAgICAgICAg
anNfdGVzdF9yZXNvdXJjZXNfZGlyID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2Rpciwg
ImZhc3QiLCAianMiLAorICAgICAgICAgICAgInJlc291cmNlcyIpCisgICAgICAgIG1pbWVfdHlw
ZXNfcGF0aCA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRwIiwgImNvbmYi
LAorICAgICAgICAgICAgIm1pbWUudHlwZXMiKQorICAgICAgICBjZXJ0X2ZpbGUgPSBzZWxmLl9j
eWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJjb25mIiwKKyAgICAgICAgICAgICJ3
ZWJraXQtaHR0cGQucGVtIikKKyAgICAgICAgYWNjZXNzX2xvZyA9IHNlbGYuX2N5Z3dpbl9zYWZl
X2pvaW4ob3V0cHV0X2RpciwgImFjY2Vzc19sb2cudHh0IikKKyAgICAgICAgZXJyb3JfbG9nID0g
c2VsZi5fY3lnd2luX3NhZmVfam9pbihvdXRwdXRfZGlyLCAiZXJyb3JfbG9nLnR4dCIpCisgICAg
ICAgIGRvY3VtZW50X3Jvb3QgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiaHR0
cCIsICJ0ZXN0cyIpCisKKyAgICAgICAgZXhlY3V0YWJsZSA9IHBsYXRmb3JtX3V0aWxzLmFwYWNo
ZV9leGVjdXRhYmxlX3BhdGgoKQorICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAg
ICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9nZXRfY3lnd2luX3BhdGgoZXhlY3V0YWJsZSkKKwor
ICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICctZicsIHNlbGYuX2dldF9h
cGFjaGVfY29uZmlnX2ZpbGVfcGF0aCh0ZXN0X2Rpciwgb3V0cHV0X2RpciksCisgICAgICAgICAg
ICAnLUMnLCAiXCdEb2N1bWVudFJvb3QgJXNcJyIgJSBkb2N1bWVudF9yb290LAorICAgICAgICAg
ICAgJy1jJywgIlwnQWxpYXMgL2pzLXRlc3QtcmVzb3VyY2VzICVzXCciICUganNfdGVzdF9yZXNv
dXJjZXNfZGlyLAorICAgICAgICAgICAgJy1DJywgIlwnTGlzdGVuICVzXCciICUgIjEyNy4wLjAu
MTo4MDAwIiwKKyAgICAgICAgICAgICctQycsICJcJ0xpc3RlbiAlc1wnIiAlICIxMjcuMC4wLjE6
ODA4MSIsCisgICAgICAgICAgICAnLWMnLCAiXCdUeXBlc0NvbmZpZyBcIiVzXCJcJyIgJSBtaW1l
X3R5cGVzX3BhdGgsCisgICAgICAgICAgICAnLWMnLCAiXCdDdXN0b21Mb2cgXCIlc1wiIGNvbW1v
blwnIiAlIGFjY2Vzc19sb2csCisgICAgICAgICAgICAnLWMnLCAiXCdFcnJvckxvZyBcIiVzXCJc
JyIgJSBlcnJvcl9sb2csCisgICAgICAgICAgICAnLUMnLCAiXCdVc2VyIFwiJXNcIlwnIiAlIG9z
LmVudmlyb24uZ2V0KCJVU0VSTkFNRSIsCisgICAgICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQo
IlVTRVIiLCAiIikpXQorCisgICAgICAgIGlmIHNlbGYuX2lzX2N5Z3dpbigpOgorICAgICAgICAg
ICAgY3lnYmluID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3ln
d2luJywgJ2JpbicpCisgICAgICAgICAgICAjIE5vdCBlbnRpcmVseSBzdXJlIHdoeSwgYnV0IGZy
b20gY3lnd2luIHdlIG5lZWQgdG8gcnVuIHRoZQorICAgICAgICAgICAgIyBodHRwZCBjb21tYW5k
IHRocm91Z2ggYmFzaC4KKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9IFsKKyAgICAgICAg
ICAgICAgICBvcy5wYXRoLmpvaW4oY3lnYmluLCAnYmFzaC5leGUnKSwKKyAgICAgICAgICAgICAg
ICAnLWMnLAorICAgICAgICAgICAgICAgICdQQVRIPSVzICVzJyAlIChzZWxmLl9nZXRfY3lnd2lu
X3BhdGgoY3lnYmluKSwgIiAiLmpvaW4oY21kKSksCisgICAgICAgICAgICAgIF0KKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICMgVE9ETyhvamFuKTogV2hlbiB3ZSBnZXQgY3lnd2luIHVzaW5n
IEFwYWNoZSAyLCB1c2Ugc2V0IHRoZQorICAgICAgICAgICAgIyBjZXJ0IGZpbGUgZm9yIGN5Z3dp
biBhcyB3ZWxsLgorICAgICAgICAgICAgY21kLmV4dGVuZChbJy1jJywgIlwnU1NMQ2VydGlmaWNh
dGVGaWxlICVzXCciICUgY2VydF9maWxlXSkKKyAgICAgICAgICAgICMgSm9pbiB0aGUgc3RyaW5n
IGhlcmUgc28gdGhhdCBDeWd3aW4vV2luZG93cyBhbmQgTWFjL0xpbnV4CisgICAgICAgICAgICAj
IGNhbiB1c2UgdGhlIHNhbWUgY29kZS4gT3RoZXJ3aXNlLCB3ZSBjb3VsZCByZW1vdmUgdGhlIHNp
bmdsZQorICAgICAgICAgICAgIyBxdW90ZXMgYWJvdmUgYW5kIGtlZXAgY21kIGFzIGEgc2VxdWVu
Y2UuCisgICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSAiICIuam9pbihjbWQpCisKKyAgICBk
ZWYgX2lzX2N5Z3dpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHN5cy5wbGF0Zm9ybSBpbiAoIndp
bjMyIiwgImN5Z3dpbiIpCisKKyAgICBkZWYgX2N5Z3dpbl9zYWZlX2pvaW4oc2VsZiwgKnBhcnRz
KToKKyAgICAgICAgIiIiUmV0dXJucyBhIHBsYXRmb3JtIGFwcHJvcHJpYXRlIHBhdGguIiIiCisg
ICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oKnBhcnRzKQorICAgICAgICBpZiBzZWxmLl9pc19j
eWd3aW4oKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3lnd2luX3BhdGgocGF0aCkK
KyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiBfZ2V0X2N5Z3dpbl9wYXRoKHNlbGYsIHBh
dGgpOgorICAgICAgICAiIiJDb252ZXJ0IGEgV2luZG93cyBwYXRoIHRvIGEgY3lnd2luIHBhdGgu
CisKKyAgICAgICAgVGhlIGN5Z3BhdGggdXRpbGl0eSBpbnNpc3RzIG9uIGNvbnZlcnRpbmcgcGF0
aHMgdGhhdCBpdCB0aGlua3MgYXJlCisgICAgICAgIEN5Z3dpbiByb290IHBhdGhzIHRvIHdoYXQg
aXQgdGhpbmtzIHRoZSBjb3JyZWN0IHJvb3RzIGFyZS4gIFNvIHBhdGhzCisgICAgICAgIHN1Y2gg
YXMgIkM6XGJcc2xhdmVcd2Via2l0LXJlbGVhc2VcYnVpbGRcdGhpcmRfcGFydHlcY3lnd2luXGJp
biIKKyAgICAgICAgYXJlIGNvbnZlcnRlZCB0byBwbGFpbiAiL3Vzci9iaW4iLiAgVG8gYXZvaWQg
dGhpcywgd2UKKyAgICAgICAgZG8gdGhlIGNvbnZlcnNpb24gbWFudWFsbHkuCisKKyAgICAgICAg
VGhlIHBhdGggaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aCwgb24gYW55IGRyaXZl
LgorICAgICAgICAiIiIKKyAgICAgICAgZHJpdmVfcmVnZXhwID0gcmUuY29tcGlsZShyJyhbYS16
XSk6Wy9cXF0nLCByZS5JR05PUkVDQVNFKQorCisgICAgICAgIGRlZiBsb3dlcl9kcml2ZShtYXRj
aG9iaik6CisgICAgICAgICAgICByZXR1cm4gJy9jeWdkcml2ZS8lcy8nICUgbWF0Y2hvYmouZ3Jv
dXAoMSkubG93ZXIoKQorICAgICAgICBwYXRoID0gZHJpdmVfcmVnZXhwLnN1Yihsb3dlcl9kcml2
ZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisKKyAgICBk
ZWYgX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aChzZWxmLCB0ZXN0X2Rpciwgb3V0cHV0X2Rp
cik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gdGhlIGFwYWNoZSBjb25maWcgZmls
ZSB0byB1c2UuCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9kaXI6IGFic29sdXRlIHBh
dGggdG8gdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeS4KKyAgICAgICAgICBvdXRwdXRfZGlyOiBh
YnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHRzIGRpcmVjdG9yeS4KKyAgICAg
ICAgIiIiCisgICAgICAgIGh0dHBkX2NvbmZpZyA9IHBsYXRmb3JtX3V0aWxzLmFwYWNoZV9jb25m
aWdfZmlsZV9wYXRoKCkKKyAgICAgICAgaHR0cGRfY29uZmlnX2NvcHkgPSBvcy5wYXRoLmpvaW4o
b3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQorICAgICAgICBodHRwZF9jb25mID0gb3BlbihodHRw
ZF9jb25maWcpLnJlYWQoKQorICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAg
ICAgICMgVGhpcyBpcyBhIGdyb3NzIGhhY2ssIGJ1dCBpdCBsZXRzIHVzIHVzZSB0aGUgdXBzdHJl
YW0gLmNvbmYgZmlsZQorICAgICAgICAgICAgIyBhbmQgb3VyIGNoZWNrZWQgaW4gY3lnd2luLiBU
aGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdGhlIHJvb3QKKyAgICAgICAgICAgICMgZGlyZWN0b3J5IHRv
IGxvb2sgaW4gZm9yIC5zbyBtb2R1bGVzLiBJdCB3aWxsIHVzZSB0aGlzIHBhdGgKKyAgICAgICAg
ICAgICMgcGx1cyB0aGUgcmVsYXRpdmUgcGF0aHMgdG8gdGhlIC5zbyBmaWxlcyBsaXN0ZWQgaW4g
dGhlIC5jb25mCisgICAgICAgICAgICAjIGZpbGUuIFdlIGhhdmUgYXBhY2hlL2N5Z3dpbiBjaGVj
a2VkIGludG8gb3VyIHRyZWUgc28KKyAgICAgICAgICAgICMgcGVvcGxlIGRvbid0IGhhdmUgdG8g
aW5zdGFsbCBpdCBpbnRvIHRoZWlyIGN5Z3dpbi4KKyAgICAgICAgICAgIGN5Z3VzciA9IHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICd1c3InKQorICAg
ICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYucmVwbGFjZSgnU2VydmVyUm9vdCAiL3Vz
ciInLAorICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290ICIlcyInICUgc2VsZi5fZ2V0X2N5Z3dp
bl9wYXRoKGN5Z3VzcikpCisKKyAgICAgICAgIyBUT0RPKG9qYW4pOiBJbnN0ZWFkIG9mIHdyaXRp
bmcgYW4gZXh0cmEgZmlsZSwgY2hlY2tpbiBhIGNvbmYgZmlsZQorICAgICAgICAjIHVwc3RyZWFt
LiBPciwgZXZlbiBiZXR0ZXIsIHVwc3RyZWFtL2RlbGV0ZSBhbGwgb3VyIGNocm9tZSBodHRwCisg
ICAgICAgICMgdGVzdHMgc28gd2UgZG9uJ3QgbmVlZCB0aGlzIHNwZWNpYWwtY2FzZWQgRG9jdW1l
bnRSb290IGFuZCB0aGVuCisgICAgICAgICMganVzdCB1c2UgdGhlIHVwc3RyZWFtCisgICAgICAg
ICMgY29uZiBmaWxlLgorICAgICAgICBjaHJvbWVfZG9jdW1lbnRfcm9vdCA9IHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywKKyAgICAgICAgICAgICdsYXlvdXRfdGVz
dHMnKQorICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAgIGNocm9tZV9k
b2N1bWVudF9yb290ID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGNocm9tZV9kb2N1bWVudF9yb290
KQorICAgICAgICBodHRwZF9jb25mID0gKGh0dHBkX2NvbmYgKworICAgICAgICAgICAgc2VsZi5f
Z2V0X3ZpcnR1YWxfaG9zdF9jb25maWcoY2hyb21lX2RvY3VtZW50X3Jvb3QsIDgwODEpKQorCisg
ICAgICAgIGYgPSBvcGVuKGh0dHBkX2NvbmZpZ19jb3B5LCAnd2InKQorICAgICAgICBmLndyaXRl
KGh0dHBkX2NvbmYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGlmIHNlbGYuX2lzX2N5
Z3dpbigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jeWd3aW5fcGF0aChodHRwZF9j
b25maWdfY29weSkKKyAgICAgICAgcmV0dXJuIGh0dHBkX2NvbmZpZ19jb3B5CisKKyAgICBkZWYg
X2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKHNlbGYsIGRvY3VtZW50X3Jvb3QsIHBvcnQsIHNzbD1G
YWxzZSk6CisgICAgICAgICIiIlJldHVybnMgYSA8VmlydHVhbEhvc3Q+IGRpcmVjdGl2ZSBibG9j
ayBmb3IgYW4gaHR0cGQuY29uZiBmaWxlLgorICAgICAgICBJdCB3aWxsIGxpc3RlbiB0byAxMjcu
MC4wLjEgb24gZWFjaCBvZiB0aGUgZ2l2ZW4gcG9ydC4KKyAgICAgICAgIiIiCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4oKCc8VmlydHVhbEhvc3QgMTI3LjAuMC4xOiVzPicgJSBwb3J0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnRSb290ICVzJyAlIGRvY3VtZW50X3Jvb3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbCBhbmQgJ1NTTEVuZ2luZSBPbicgb3IgJycs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICc8L1ZpcnR1YWxIb3N0PicsICcnKSkKKworICAg
IGRlZiBfc3RhcnRfaHR0cGRfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHRoZSBo
dHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2VyZSBlcnJvcnMuIiIiCisg
ICAgICAgICMgVXNlIHNoZWxsPVRydWUgYmVjYXVzZSB3ZSBqb2luIHRoZSBhcmd1bWVudHMgaW50
byBhIHN0cmluZyBmb3IKKyAgICAgICAgIyB0aGUgc2FrZSBvZiBXaW5kb3cvQ3lnd2luIGFuZCBp
dCBuZWVkcyBxdW90aW5nIHRoYXQgYnJlYWtzCisgICAgICAgICMgc2hlbGw9RmFsc2UuCisgICAg
ICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnBy
b2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgIGVyciA9IHNlbGYu
X2h0dHBkX3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICBpZiBsZW4oZXJyKToKKyAgICAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoZXJyKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICIiIlN0YXJ0cyB0
aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgorICAgICAgICAjIFN0b3AgYW55IGN1cnJlbnRseSBy
dW5uaW5nIHNlcnZlcnMuCisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygiU3RhcnRpbmcgYXBhY2hlIGh0dHAgc2VydmVyIikKKyAgICAgICAgc2VydmVyX3N0YXJ0
ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbihzZWxmLl9zdGFydF9odHRwZF9wcm9jZXNzKQorICAg
ICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIkFwYWNo
ZSBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIikKKyAgICAgICAgICAgIHNlcnZlcl9zdGFydGVkID0g
c2VsZi53YWl0X2Zvcl9hY3Rpb24oCisgICAgICAgICAgICAgICAgc2VsZi5pc19zZXJ2ZXJfcnVu
bmluZ19vbl9hbGxfcG9ydHMpCisKKyAgICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6CisgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQiKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgaHR0
cCBzZXJ2ZXInKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3BzIHRoZSBh
cGFjaGUgaHR0cCBzZXJ2ZXIuIiIiCisgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNodXR0aW5nIGRv
d24gYW55IHJ1bm5pbmcgaHR0cCBzZXJ2ZXJzIikKKyAgICAgICAgaHR0cGRfcGlkID0gTm9uZQor
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CisgICAgICAgICAgICBo
dHRwZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkKKyAgICAgICAg
cGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvYXBhY2hlX2h0dHBfc2VydmVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9yLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0
bWxfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHRtbF9nZW5lcmF0b3IucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjU0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHJlCisKK2Zyb20gZmFpbHVyZSBpbXBvcnQgRmFpbHVyZQor
CitDSFJPTUlVTV9CVUdfVVJMID0gImh0dHA6Ly9jcmJ1Zy5jb20vIgorCisKK2RlZiBleHRyYWN0
X2ZpcnN0X3ZhbHVlKHN0cmluZywgcmVnZXgpOgorICAgIG0gPSByZS5zZWFyY2gocmVnZXgsIHN0
cmluZykKKyAgICBpZiBtIGFuZCBtLmdyb3VwKDEpOgorICAgICAgICByZXR1cm4gbS5ncm91cCgx
KQorICAgIHJldHVybiBOb25lCisKKyMgVE9ETyhnd2lsc29uKTogUmVmYWN0b3IgSFRNTCBnZW5l
cmF0aW9uIGludG8gYSBIVE1MIHRlbXBsYXRpbmcgc3lzdGVtIGxpa2UKKyMgRGphbmdvIHRlbXBs
YXRlcy4KKworCitjbGFzcyBIVE1MR2VuZXJhdG9yKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgZmFpbHVyZXMsIG91dHB1dF9kaXIsIGJ1aWxkLCBwbGF0Zm9ybSwKKyAgICAgICAg
ICAgICAgICAgZXhjbHVkZV9rbm93bl9mYWlsdXJlcyk6CisgICAgICAgIHNlbGYuZmFpbHVyZXMg
PSBmYWlsdXJlcworICAgICAgICBzZWxmLm91dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAg
IHNlbGYuYnVpbGQgPSBidWlsZAorICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAg
ICAgICAgc2VsZi5leGNsdWRlX2tub3duX2ZhaWx1cmVzID0gZXhjbHVkZV9rbm93bl9mYWlsdXJl
cworICAgICAgICBzZWxmLmltYWdlX3NpemUgPSAiMjAwcHgiCisKKyAgICBkZWYgZ2VuZXJhdGVf
aHRtbChzZWxmKToKKyAgICAgICAgaHRtbCA9ICIiCisgICAgICAgIGh0bWwgKz0gIiIiCisgICAg
ICAgICAgICAgICAgPGh0bWw+CisgICAgICAgICAgICAgICAgICA8aGVhZD4KKyAgICAgICAgICAg
ICAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgICAgICAgICAgIGJvZHkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGgyIHsKKyAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgLm1haW5UYWJsZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiAjNjY2NjY2OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAubWFpblRhYmxlIHRkICwgLm1haW5UYWJsZSB0aCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgLnRpdGxlbGluayB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb250LXNpemU6IDE4cHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250
LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgLmRldGFpbCB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBw
eDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDNweDsKKyAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIDwvc3R5bGU+CisgICAgICAgICAgICAg
ICAgICA8L2hlYWQ+CisgICAgICAgICAgICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgICAgICAi
IiIKKyAgICAgICAgdGl0bGUgPSAiQWxsIGZhaWx1cmVzIgorICAgICAgICBpZiBzZWxmLmV4Y2x1
ZGVfa25vd25fZmFpbHVyZXM6CisgICAgICAgICAgICB0aXRsZSA9ICJSZWdyZXNzaW9ucyIKKwor
ICAgICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgIDxoMT4lcyBmb3IgYnVpbGQgJXMg
KCVzKTwvaDE+CisgICAgICAgICAgICAgICAgIiIiICUgKHRpdGxlLCBzZWxmLmJ1aWxkLCBzZWxm
LnBsYXRmb3JtKQorCisgICAgICAgIHRlc3RfbnVtYmVyID0gMAorCisgICAgICAgICMgVE9ETyhn
d2lsc29uKTogUmVmYWN0b3IgdGhpcyB0byBkbyBhIGpvaW4oKSBvbiBhbiBhcnJheSBvZiBIVE1M
LAorICAgICAgICAjIHJhdGhlciB0aGFuIGFwcGVuZGluZyBzdHJpbmdzIGluIGEgbG9vcC4KKyAg
ICAgICAgZm9yIGZhaWx1cmUgaW4gc2VsZi5mYWlsdXJlczoKKyAgICAgICAgICAgIHRlc3RfbnVt
YmVyICs9IDEKKyAgICAgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgPHRhYmxl
IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCBibGFjazsgd2lkdGg6IDEyMDBweDsKKyAgICAgICAg
ICAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7IiBjZWxsc3BhY2luZz0iMCIgY2Vs
bHBhZGRpbmc9IjQiPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAg
ICA8dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNDREVDREU7CisgICAgICAgICAgICAgICAg
ICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7Ij4KKyAgICAgICAgICAgICAgICAg
ICAgPHNwYW4gY2xhc3M9InRpdGxlbGluayI+JXMuJm5ic3A7Jm5ic3A7JXM8L3NwYW4+PC90ZD48
L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPjx0ZD4mbmJzcDsmbmJzcDtMYXN0IG1vZGlmaWVk
OiA8YSBocmVmPSIlcyI+JXM8L2E+CisgICAgICAgICAgICAgICAgIiIiICUgKHRlc3RfbnVtYmVy
LCBmYWlsdXJlLnRlc3RfcGF0aCwgZmFpbHVyZS5nZXRfdGVzdF9ob21lKCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGZhaWx1cmUudGVzdF9hZ2UpCisgICAgICAgICAgICBodG1sICs9ICI8ZGl2
IGNsYXNzPSdkZXRhaWwnPiIKKyAgICAgICAgICAgIGh0bWwgKz0gIjxwcmU+JXM8L3ByZT4iICUg
XAorICAgICAgICAgICAgICAgICAgICAoc2VsZi5fZ2VuZXJhdGVfbGlua2lmaWVkX3RleHRfZXhw
ZWN0YXRpb25zKGZhaWx1cmUpKQorCisgICAgICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRl
X2ZsYWtpbmVzc19odG1sKGZhaWx1cmUpCisKKyAgICAgICAgICAgIGlmIGZhaWx1cmUuY3Jhc2hl
ZDoKKyAgICAgICAgICAgICAgICBodG1sICs9ICI8ZGl2PlRlc3QgPGI+Q1JBU0hFRDwvYj48L2Rp
dj4iCisgICAgICAgICAgICBlbGlmIGZhaWx1cmUudGltZW91dDoKKyAgICAgICAgICAgICAgICBo
dG1sICs9ICI8ZGl2PlRlc3QgPGI+VElNRUQgT1VUPC9iPjwvZGl2PiIKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IDx0YWJsZSBjbGFzcz0ibWFpblRhYmxlIiBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTU+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8dGggd2lkdGg9JzI1MCc+Jm5ic3A7PC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8dGggd2lkdGg9JzIwMCc+RXhwZWN0ZWQ8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDx0aCB3aWR0aD0nMjAwJz5BY3R1YWw8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDx0aCB3aWR0aD0nMjAwJz5EaWZmZXJlbmNlPC90aD4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8dGggd2lkdGg9JzIwMCc+VXBzdHJlYW08L3RoPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAg
ICAgICBpZiBmYWlsdXJlLnRleHRfZGlmZl9taXNtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAg
aHRtbCArPSBzZWxmLl9nZW5lcmF0ZV90ZXh0X2ZhaWx1cmVfaHRtbChmYWlsdXJlKQorCisgICAg
ICAgICAgICAgICAgaWYgZmFpbHVyZS5pbWFnZV9taXNtYXRjaDoKKyAgICAgICAgICAgICAgICAg
ICAgaHRtbCArPSBzZWxmLl9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX2h0bWwoZmFpbHVyZSkKKwor
ICAgICAgICAgICAgICAgIGh0bWwgKz0gIjwvdGFibGU+IgorICAgICAgICAgICAgaHRtbCArPSAi
PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+PGJyPiIKKyAgICAgICAgaHRtbCArPSAiIiI8L2JvZHk+
PC9odG1sPiIiIgorCisgICAgICAgICMgVE9ETyhnd2lsc29uKTogQ2hhbmdlIHRoaXMgZmlsZW5h
bWUgdG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LgorICAgICAgICBodG1sX2ZpbGVuYW1l
ID0gIiVzL2luZGV4LSVzLmh0bWwiICUgKHNlbGYub3V0cHV0X2Rpciwgc2VsZi5idWlsZCkKKyAg
ICAgICAgaHRtbEZpbGUgPSBvcGVuKGh0bWxfZmlsZW5hbWUsICd3JykKKyAgICAgICAgaHRtbEZp
bGUud3JpdGUoaHRtbCkKKyAgICAgICAgaHRtbEZpbGUuY2xvc2UoKQorICAgICAgICByZXR1cm4g
aHRtbF9maWxlbmFtZQorCisgICAgZGVmIF9nZW5lcmF0ZV9saW5raWZpZWRfdGV4dF9leHBlY3Rh
dGlvbnMoc2VsZiwgZmFpbHVyZSk6CisgICAgICAgIGlmIG5vdCBmYWlsdXJlLnRlc3RfZXhwZWN0
YXRpb25zX2xpbmU6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgYnVnX251bWJlciA9
IGV4dHJhY3RfZmlyc3RfdmFsdWUoZmFpbHVyZS50ZXN0X2V4cGVjdGF0aW9uc19saW5lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQlVHKFxkKykiKQorICAgICAg
ICBpZiBub3QgYnVnX251bWJlciBvciBidWdfbnVtYmVyID09ICIiOgorICAgICAgICAgICAgcmV0
dXJuICIiCisgICAgICAgIHJldHVybiBmYWlsdXJlLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUucmVw
bGFjZSgiQlVHIiArIGJ1Z19udW1iZXIsCisgICAgICAgICAgICAiPGEgaHJlZj0nJXMlcyc+QlVH
JXM8L2E+IiAlIChDSFJPTUlVTV9CVUdfVVJMLCBidWdfbnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnX251bWJlcikpCisKKyAgICAjIFRPRE8oZ3dp
bHNvbik6IEZpeCB0aGlzIHNvIHRoYXQgaXQgc2hvd3MgdGhlIGxhc3QgdGVuIHJ1bnMKKyAgICAj
IG5vdCBqdXN0IGEgIm1ldGVyIiBvZiBmbGFraW5lc3MuCisKKyAgICBkZWYgX2dlbmVyYXRlX2Zs
YWtpbmVzc19odG1sKHNlbGYsIGZhaWx1cmUpOgorICAgICAgICBodG1sID0gIiIKKyAgICAgICAg
aWYgbm90IGZhaWx1cmUuZmxha2luZXNzOgorICAgICAgICAgICAgcmV0dXJuIGh0bWwKKyAgICAg
ICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICA8dGFibGU+CisgICAgICAgICAgICAgICAg
ICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5GbGFraW5lc3M6ICglcyk8L3RkPgorICAg
ICAgICAgICAgICAgICIiIiAlIChmYWlsdXJlLmZsYWtpbmVzcykKKworICAgICAgICBmbGFreV9y
ZWQgPSBpbnQocm91bmQoaW50KGZhaWx1cmUuZmxha2luZXNzKSAvIDUpKQorICAgICAgICBmbGFr
eV9ncmVlbiA9IDEwIC0gZmxha3lfcmVkCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGZsYWt5
X2dyZWVuKToKKyAgICAgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgICAgIDx0
ZCBzdHlsZT0iYmFja2dyb3VuZDogZ3JlZW4iPiZuYnNwOyZuYnNwOzwvdGQ+CisgICAgICAgICAg
ICAgICAgICAgICIiIgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBmbGFreV9yZWQpOgorICAg
ICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJiYWNr
Z3JvdW5kOiByZWQiPiZuYnNwOyZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICIiIgor
ICAgICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAg
ICAgICA8L3RhYmxlPjxicj4KKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGh0
bWwKKworICAgIGRlZiBfZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX2h0bWwoc2VsZiwgZmFpbHVyZSk6
CisgICAgICAgIGh0bWwgPSAiIgorICAgICAgICBpZiBub3QgZmFpbHVyZS5nZXRfdGV4dF9iYXNl
bGluZV9sb2NhdGlvbigpOgorICAgICAgICAgICAgcmV0dXJuICIiIjx0cj48dGQgY29sc3Bhbj0n
NSc+VGhpcyB0ZXN0IGxpa2VseSBkb2VzIG5vdCBoYXZlIGFueQorICAgICAgICAgICAgICAgICAg
ICAgIFRFWFQgYmFzZWxpbmUgZm9yIHRoaXMgcGxhdGZvcm0sIG9yIG9uZSBjb3VsZCBub3QKKyAg
ICAgICAgICAgICAgICAgICAgICBiZSBmb3VuZC48L3RkPjwvdHI+IiIiCisgICAgICAgIGh0bWwg
Kz0gIiIiCisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4K
KyAgICAgICAgICAgICAgICAgICAgICA8Yj48YSBocmVmPSIlcyI+UmVuZGVyIFRyZWUgRHVtcDwv
YT48L2I+PGJyPgorICAgICAgICAgICAgICAgICAgICAgIDxiPiVzPC9iPiBiYXNlbGluZTxicj4K
KyAgICAgICAgICAgICAgICAgICAgICBBZ2U6ICVzPGJyPgorICAgICAgICAgICAgICAgICAgICA8
L3RkPgorICAgICAgICAgICAgICAgICIiIiAlIChmYWlsdXJlLnRleHRfYmFzZWxpbmVfdXJsLAor
ICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF90ZXh0X2Jhc2VsaW5lX2xvY2F0aW9u
KCksCisgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUudGV4dF9iYXNlbGluZV9hZ2UpCisg
ICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX3RkKAorICAgICAgICAg
ICAgZmFpbHVyZS5nZXRfZXhwZWN0ZWRfdGV4dF9maWxlbmFtZSgpLCAiZXhwZWN0ZWQgdGV4dCIp
CisgICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX3RkKAorICAgICAg
ICAgICAgZmFpbHVyZS5nZXRfYWN0dWFsX3RleHRfZmlsZW5hbWUoKSwgImFjdHVhbCB0ZXh0IikK
KyAgICAgICAgaHRtbCArPSBzZWxmLl9nZW5lcmF0ZV90ZXh0X2ZhaWx1cmVfdGQoCisgICAgICAg
ICAgICBmYWlsdXJlLmdldF90ZXh0X2RpZmZfZmlsZW5hbWUoKSwgInRleHQgZGlmZiIpCisgICAg
ICAgIGh0bWwgKz0gIjx0ZD4mbmJzcDs8L3RkPiIKKyAgICAgICAgaHRtbCArPSAiPC90cj4iCisg
ICAgICAgIHJldHVybiBodG1sCisKKyAgICBkZWYgX2dlbmVyYXRlX3RleHRfZmFpbHVyZV90ZChz
ZWxmLCBmaWxlX3BhdGgsIGFuY2hvcl90ZXh0KToKKyAgICAgICAgcmV0dXJuICgiPHRkIGFsaWdu
PWNlbnRlcj4iCisgICAgICAgICAgICAgICAgIjxhIGhyZWY9Jy4vbGF5b3V0LXRlc3QtcmVzdWx0
cy0lcy8lcyc+JXM8L2E+PC90ZD4iKSAlICgKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkLCBm
aWxlX3BhdGgsIGFuY2hvcl90ZXh0KQorCisgICAgZGVmIF9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJl
X2h0bWwoc2VsZiwgZmFpbHVyZSk6CisgICAgICAgIGlmIG5vdCBmYWlsdXJlLmdldF9pbWFnZV9i
YXNlbGluZV9sb2NhdGlvbigpOgorICAgICAgICAgICAgcmV0dXJuICIiIjx0cj48dGQgY29sc3Bh
bj0nNSc+VGhpcyB0ZXN0IGxpa2VseSBkb2VzIG5vdCBoYXZlIGFueQorICAgICAgICAgICAgICAg
ICAgICAgIElNQUdFIGJhc2VsaW5lIGZvciB0aGlzIHBsYXRmb3JtLCBvciBvbmUgY291bGQgbm90
IGJlCisgICAgICAgICAgICAgICAgICAgICAgZm91bmQuPC90ZD48L3RyPiIiIgorICAgICAgICBo
dG1sID0gIiIiCisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkPjxiPjxhIGhyZWY9IiVz
Ij5QaXhlbCBEdW1wPC9hPjwvYj48YnI+CisgICAgICAgICAgICA8Yj4lczwvYj4gYmFzZWxpbmU8
YnI+QWdlOiAlczwvdGQ+CisgICAgICAgICAgIiIiICUgKGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVf
dXJsLAorICAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF9pbWFnZV9iYXNlbGluZV9sb2NhdGlv
bigpLAorICAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX2FnZSkKKyAgICAg
ICAgaHRtbCArPSBzZWxmLl9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX3RkKAorICAgICAgICAgICAg
ZmFpbHVyZS5nZXRfZXhwZWN0ZWRfaW1hZ2VfZmlsZW5hbWUoKSkKKyAgICAgICAgaHRtbCArPSBz
ZWxmLl9nZW5lcmF0ZV9pbWFnZV9mYWlsdXJlX3RkKAorICAgICAgICAgICAgZmFpbHVyZS5nZXRf
YWN0dWFsX2ltYWdlX2ZpbGVuYW1lKCkpCisgICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVf
aW1hZ2VfZmFpbHVyZV90ZCgKKyAgICAgICAgICAgIGZhaWx1cmUuZ2V0X2ltYWdlX2RpZmZfZmls
ZW5hbWUoKSkKKyAgICAgICAgaWYgKGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVfdXBzdHJlYW1fbG9j
YWwgYW5kCisgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3Vwc3RyZWFtX2xvY2Fs
ICE9ICIiKToKKyAgICAgICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJhdGVfaW1hZ2VfZmFpbHVy
ZV90ZCgKKyAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF9pbWFnZV91cHN0cmVhbV9maWxlbmFt
ZSgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaHRtbCArPSAiIiIKKyAgICAgICAgICAg
ICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICIiIgorICAgICAg
ICBodG1sICs9ICI8L3RyPiIKKyAgICAgICAgcmV0dXJuIGh0bWwKKworICAgIGRlZiBfZ2VuZXJh
dGVfaW1hZ2VfZmFpbHVyZV90ZChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiAoIjx0
ZD48YSBocmVmPScuL2xheW91dC10ZXN0LXJlc3VsdHMtJXMvJXMnPiIKKyAgICAgICAgICAgICAg
ICAiPGltZyBzdHlsZT0nd2lkdGg6ICVzJyBzcmM9Jy4vbGF5b3V0LXRlc3QtcmVzdWx0cy0lcy8l
cycgLz4iCisgICAgICAgICAgICAgICAgIjwvYT48L3RkPiIpICUgKHNlbGYuYnVpbGQsIGZpbGVu
YW1lLCBzZWxmLmltYWdlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuYnVpbGQsIGZpbGVuYW1lKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHRtbF9nZW5lcmF0b3Iu
cHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9z
ZXJ2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHkJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9o
dHRwX3NlcnZlci5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIGhlbHAgc3Rh
cnQvc3RvcCB0aGUgbGlnaHR0cGQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHNodXRp
bAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0
IHRpbWUKK2ltcG9ydCB1cmxsaWIKKworaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKK2ltcG9ydCBw
YXRoX3V0aWxzCisKK2NsYXNzIEh0dHBkTm90U3RhcnRlZChFeGNlcHRpb24pOiBwYXNzCisKK2Rl
ZiByZW1vdmVfbG9nX2ZpbGVzKGZvbGRlciwgc3RhcnRzX3dpdGgpOgorICAgIGZpbGVzID0gb3Mu
bGlzdGRpcihmb2xkZXIpCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIGZpbGUu
c3RhcnRzd2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRo
LmpvaW4oZm9sZGVyLCBmaWxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKKwor
CitjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKyAgICAj
IFdlYmtpdCB0ZXN0cworICAgIHRyeToKKyAgICAgICAgX3dlYmtpdF90ZXN0cyA9IHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cycsICdodHRw
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzJykKKyAgICAgICAgX2pzX3Rlc3RfcmVzb3VyY2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2Zhc3QnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2pzJywgJ3Jl
c291cmNlcycpCisgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICBf
d2Via2l0X3Rlc3RzID0gTm9uZQorICAgICAgICBfanNfdGVzdF9yZXNvdXJjZSA9IE5vbmUKKwor
ICAgICMgUGF0aCB3aGVyZSB3ZSBjYW4gYWNjZXNzIGFsbCBvZiB0aGUgdGVzdHMKKyAgICBfYWxs
X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5
b3V0X3Rlc3RzJykKKyAgICAjIFNlbGYgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIGZvciBTU0wgc2Vy
dmVyIChmb3IgY2xpZW50IGNlcnQgZ2V0CisgICAgIyA8YmFzZS1wYXRoPlxjaHJvbWVcdGVzdFxk
YXRhXHNzbFxjZXJ0c1xyb290X2NhX2NlcnQuY3J0KQorICAgIF9wZW1fZmlsZSA9IHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3Bh
dGgoX19maWxlX18pKSwgJ2h0dHBkMi5wZW0nKQorICAgICMgT25lIG1hcHBpbmcgd2hlcmUgd2Ug
Y2FuIGdldCB0byBldmVyeXRoaW5nCisgICAgVklSVFVBTENPTkZJRyA9IFt7J3BvcnQnOiA4MDgx
LCAnZG9jcm9vdCc6IF9hbGxfdGVzdHN9XQorCisgICAgaWYgX3dlYmtpdF90ZXN0czoKKyAgICAg
ICAgVklSVFVBTENPTkZJRy5leHRlbmQoCisgICAgICAgICAgIyBUaHJlZSBtYXBwaW5ncyAob25l
IHdpdGggU1NMIGVuYWJsZWQpIGZvciBMYXlvdXRUZXN0cyBodHRwIHRlc3RzCisgICAgICAgICAg
W3sncG9ydCc6IDgwMDAsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0c30sCisgICAgICAgICAgIHsn
cG9ydCc6IDgwODAsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0c30sCisgICAgICAgICAgIHsncG9y
dCc6IDg0NDMsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0cywgJ3NzbGNlcnQnOiBfcGVtX2ZpbGV9
XSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBiYWNrZ3JvdW5kPUZhbHNl
LCBwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwgcmVnaXN0ZXJfY3lnd2lu
PU5vbmUsIHJ1bl9iYWNrZ3JvdW5kPU5vbmUpOgorICAgICAgICAiIiJBcmdzOgorICAgICAgICAg
IG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQg
ZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0
X2RpcgorICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAorICAgICAgICBzZWxmLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLl9yZWdpc3Rlcl9j
eWd3aW4gPSByZWdpc3Rlcl9jeWd3aW4KKyAgICAgICAgc2VsZi5fcnVuX2JhY2tncm91bmQgPSBy
dW5fYmFja2dyb3VuZAorICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgc2VsZi5f
cG9ydCA9IGludChzZWxmLl9wb3J0KQorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9wcm9jZXNzICE9IE5vbmUKKworICAgIGRlZiBzdGFydChzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByYWlzZSAnTGlnaHR0
cGQgYWxyZWFkeSBydW5uaW5nJworCisgICAgICAgIGJhc2VfY29uZl9maWxlID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLAorICAgICAgICAgICAgJ1dlYktpdFRvb2xz
JywgJ1NjcmlwdHMnLCAnd2Via2l0cHknLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICds
YXlvdXRfcGFja2FnZScsICdsaWdodHRwZC5jb25mJykKKyAgICAgICAgb3V0X2NvbmZfZmlsZSA9
IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpCisgICAgICAg
IHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgiJWQlYiVZLSVIJU0lUyIpCisgICAgICAgIGFjY2Vz
c19maWxlX25hbWUgPSAiYWNjZXNzLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKKyAgICAgICAg
YWNjZXNzX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBhY2Nlc3NfZmlsZV9u
YW1lKQorICAgICAgICBsb2dfZmlsZV9uYW1lID0gImVycm9yLmxvZy0iICsgdGltZV9zdHIgKyAi
LnR4dCIKKyAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIs
IGxvZ19maWxlX25hbWUpCisKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25s
eSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KKyAgICAgICAgcmVtb3ZlX2xvZ19maWxlcyhz
ZWxmLl9vdXRwdXRfZGlyLCAiYWNjZXNzLmxvZy0iKQorICAgICAgICByZW1vdmVfbG9nX2ZpbGVz
KHNlbGYuX291dHB1dF9kaXIsICJlcnJvci5sb2ctIikKKworICAgICAgICAjIFdyaXRlIG91dCB0
aGUgY29uZmlnCisgICAgICAgIGYgPSBmaWxlKGJhc2VfY29uZl9maWxlLCAncmInKQorICAgICAg
ICBiYXNlX2NvbmYgPSBmLnJlYWQoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBmID0g
ZmlsZShvdXRfY29uZl9maWxlLCAnd2InKQorICAgICAgICBmLndyaXRlKGJhc2VfY29uZikKKwor
ICAgICAgICAjIFdyaXRlIG91dCBvdXIgY2dpIGhhbmRsZXJzLiAgUnVuIHBlcmwgdGhyb3VnaCBl
bnYgc28gdGhhdCBpdAorICAgICAgICAjIHByb2Nlc3NlcyB0aGUgIyEgbGluZSBhbmQgcnVucyBw
ZXJsIHdpdGggdGhlIHByb3BlciBjb21tYW5kCisgICAgICAgICMgbGluZSBhcmd1bWVudHMuIEVt
dWxhdGUgYXBhY2hlJ3MgbW9kX2FzaXMgd2l0aCBhIGNhdCBjZ2kgaGFuZGxlci4KKyAgICAgICAg
Zi53cml0ZSgoJ2NnaS5hc3NpZ24gPSAoICIuY2dpIiAgPT4gIi91c3IvYmluL2VudiIsXG4nCisg
ICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAiLnBsIiAgID0+ICIvdXNyL2Jpbi9lbnYi
LFxuJworICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5hc2lzIiA9PiAiL2Jpbi9j
YXQiLFxuJworICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5waHAiICA9PiAiJXMi
IClcblxuJykgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRp
bHMubGlnaHR0cGRfcGhwX3BhdGgoKSkKKworICAgICAgICAjIFNldHVwIGxvZyBmaWxlcworICAg
ICAgICBmLndyaXRlKCgnc2VydmVyLmVycm9ybG9nID0gIiVzIlxuJworICAgICAgICAgICAgICAg
ICAnYWNjZXNzbG9nLmZpbGVuYW1lID0gIiVzIlxuXG4nKSAlIChlcnJvcl9sb2csIGFjY2Vzc19s
b2cpKQorCisgICAgICAgICMgU2V0dXAgdXBsb2FkIGZvbGRlcnMuIFVwbG9hZCBmb2xkZXIgaXMg
dG8gaG9sZCB0ZW1wb3JhcnkgdXBsb2FkIGZpbGVzCisgICAgICAgICMgYW5kIGFsc28gUE9TVCBk
YXRhLiBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCBYSFIgbGF5b3V0IHRlc3RzIHRoYXQKKyAgICAg
ICAgIyBkb2VzIFBPU1QuCisgICAgICAgIGYud3JpdGUoKCdzZXJ2ZXIudXBsb2FkLWRpcnMgPSAo
ICIlcyIgKVxuXG4nKSAlIChzZWxmLl9vdXRwdXRfZGlyKSkKKworICAgICAgICAjIFNldHVwIGEg
bGluayB0byB3aGVyZSB0aGUganMgdGVzdCB0ZW1wbGF0ZXMgYXJlIHN0b3JlZAorICAgICAgICBm
LndyaXRlKCgnYWxpYXMudXJsID0gKCAiL2pzLXRlc3QtcmVzb3VyY2VzIiA9PiAiJXMiIClcblxu
JykgJQorICAgICAgICAgICAgICAgICAgICAoc2VsZi5fanNfdGVzdF9yZXNvdXJjZSkpCisKKyAg
ICAgICAgIyBkdW1wIG91dCBvZiB2aXJ0dWFsIGhvc3QgY29uZmlnIGF0IHRoZSBib3R0b20uCisg
ICAgICAgIGlmIHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAg
ICAgICAgICAgICMgSGF2ZSBib3RoIHBvcnQgYW5kIHJvb3QgZGlyLgorICAgICAgICAgICAgICAg
IG1hcHBpbmdzID0gW3sncG9ydCc6IHNlbGYuX3BvcnQsICdkb2Nyb290Jzogc2VsZi5fcm9vdH1d
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSGF2ZSBvbmx5IGEgcm9vdCBk
aXIgLSBzZXQgdGhlIHBvcnRzIGFzIGZvciBMYXlvdXRUZXN0cy4KKyAgICAgICAgICAgICAgICAj
IFRoaXMgaXMgdXNlZCBpbiB1aV90ZXN0cyB0byBydW4gaHR0cCB0ZXN0cyBhZ2FpbnN0IGEgYnJv
d3Nlci4KKworICAgICAgICAgICAgICAgICMgZGVmYXVsdCBzZXQgb2YgcG9ydHMgYXMgZm9yIExh
eW91dFRlc3RzIGJ1dCB3aXRoIGEKKyAgICAgICAgICAgICAgICAjIHNwZWNpZmllZCByb290Lgor
ICAgICAgICAgICAgICAgIG1hcHBpbmdzID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzogc2Vs
Zi5fcm9vdH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2Rv
Y3Jvb3QnOiBzZWxmLl9yb290fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQn
OiA4NDQzLCAnZG9jcm9vdCc6IHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdzc2xjZXJ0JzogTGlnaHR0cGQuX3BlbV9maWxlfV0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG1hcHBpbmdzID0gc2VsZi5WSVJUVUFMQ09ORklHCisgICAgICAgIGZvciBtYXBwaW5n
IGluIG1hcHBpbmdzOgorICAgICAgICAgICAgc3NsX3NldHVwID0gJycKKyAgICAgICAgICAgIGlm
ICdzc2xjZXJ0JyBpbiBtYXBwaW5nOgorICAgICAgICAgICAgICAgIHNzbF9zZXR1cCA9ICgnICBz
c2wuZW5naW5lID0gImVuYWJsZSJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAg
c3NsLnBlbWZpbGUgPSAiJXMiXG4nICUgbWFwcGluZ1snc3NsY2VydCddKQorCisgICAgICAgICAg
ICBmLndyaXRlKCgnJFNFUlZFUlsic29ja2V0Il0gPT0gIjEyNy4wLjAuMTolZCIge1xuJworICAg
ICAgICAgICAgICAgICAgICAgJyAgc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiJXMiXG4nICsKKyAg
ICAgICAgICAgICAgICAgICAgIHNzbF9zZXR1cCArCisgICAgICAgICAgICAgICAgICAgICAnfVxu
XG4nKSAlIChtYXBwaW5nWydwb3J0J10sIG1hcHBpbmdbJ2RvY3Jvb3QnXSkpCisgICAgICAgIGYu
Y2xvc2UoKQorCisgICAgICAgIGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX2V4ZWN1
dGFibGVfcGF0aCgpCisgICAgICAgIG1vZHVsZV9wYXRoID0gcGF0aF91dGlscy5saWdodHRwZF9t
b2R1bGVfcGF0aCgpCisgICAgICAgIHN0YXJ0X2NtZCA9IFtleGVjdXRhYmxlLAorICAgICAgICAg
ICAgICAgICAgICAgIyBOZXdseSB3cml0dGVuIGNvbmZpZyBmaWxlCisgICAgICAgICAgICAgICAg
ICAgICAnLWYnLCBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKHNlbGYuX291dHB1dF9kaXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWdo
dHRwZC5jb25mJyksCisgICAgICAgICAgICAgICAgICAgICAjIFdoZXJlIGl0IGNhbiBmaW5kIGl0
cyBtb2R1bGUgZHluYW1pYyBsaWJyYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgICctbScsIG1v
ZHVsZV9wYXRoXQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9ydW5fYmFja2dyb3VuZDoKKyAgICAg
ICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoIyBEb24ndCBiYWNrZ3JvdW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICctRCcpCisKKyAgICAgICAgIyBDb3B5IGxpYmxpZ2h0Y29tcC5keWxp
YiB0byAvdG1wL2xpZ2h0dHBkL2xpYiB0byB3b3JrIGFyb3VuZCB0aGUKKyAgICAgICAgIyBidWcg
dGhhdCBtb2RfYWxpYXMuc28gbG9hZHMgaXQgZnJvbSB0aGUgaGFyZCBjb2RlZCBwYXRoLgorICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICB0bXBfbW9kdWxl
X3BhdGggPSAnL3RtcC9saWdodHRwZC9saWInCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5l
eGlzdHModG1wX21vZHVsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0bXBf
bW9kdWxlX3BhdGgpCisgICAgICAgICAgICBsaWJfZmlsZSA9ICdsaWJsaWdodGNvbXAuZHlsaWIn
CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG1vZHVsZV9wYXRoLCBs
aWJfZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9t
b2R1bGVfcGF0aCwgbGliX2ZpbGUpKQorCisgICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0
b3J5IGZpcnN0IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKKyAgICAgICAgZW52ID0g
b3MuZW52aXJvbgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzIn
KToKKyAgICAgICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgKKyAgICAgICAgICAgICAg
ICBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmlu
JyksCisgICAgICAgICAgICAgICAgZW52WydQQVRIJ10pCisKKyAgICAgICAgaWYgc3lzLnBsYXRm
b3JtID09ICd3aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKKyAgICAgICAgICAgIHNl
dHVwX21vdW50ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3ln
d2luJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnc2V0dXBfbW91bnQuYmF0JykKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBf
bW91bnQpLndhaXQoKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2Vy
dmVyJykKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRfY21k
LCBlbnY9ZW52KQorCisgICAgICAgICMgV2FpdCBmb3Igc2VydmVyIHRvIHN0YXJ0LgorICAgICAg
ICBzZWxmLm1hcHBpbmdzID0gbWFwcGluZ3MKKyAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxm
LndhaXRfZm9yX2FjdGlvbigKKyAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdfb25f
YWxsX3BvcnRzKQorCisgICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5Cisg
ICAgICAgIGlmIG5vdCBzZXJ2ZXJfc3RhcnRlZCBvciBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUg
IT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGdvb2dsZS5odHRwZF91dGlscy5IdHRwZE5vdFN0
YXJ0ZWQoJ0ZhaWxlZCB0byBzdGFydCBodHRwZC4nKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWco
IlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCIpCisKKyAgICAjIFRPRE8oZGVhbm0pOiBGaW5k
IGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFubHkuICBPdXIgbG9nIGZpbGVzIGFyZQorICAg
ICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQsIGV0Yy4uLiB3aHkgZG9lc24ndCBvdXIgcHl0
aG9uIGhhdmUgb3Mua2lsbCA/CisKKyAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6Cisg
ICAgICAgIGlmIG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgaHR0cGRfcGlkID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9w
cm9jZXNzOgorICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKKyAgICAg
ICAgcGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQorCisgICAgICAg
IGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAg
ICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVf
XzoKKyAgICAjIFByb3ZpZGUgc29tZSBjb21tYW5kIGxpbmUgcGFyYW1zIGZvciBzdGFydGluZy9z
dG9wcGluZyB0aGUgaHR0cCBzZXJ2ZXIKKyAgICAjIG1hbnVhbGx5LiBBbHNvIHVzZWQgaW4gdWlf
dGVzdHMgdG8gcnVuIGh0dHAgbGF5b3V0IHRlc3RzIGluIGEgYnJvd3Nlci4KKyAgICBvcHRpb25f
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oJy1rJywgJy0tc2VydmVyJywKKyAgICAgICAgaGVscD0nU2VydmVyIGFjdGlvbiAoc3Rh
cnR8c3RvcCknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywK
KyAgICAgICAgaGVscD0nUG9ydCB0byBsaXN0ZW4gb24gKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCBw
b3J0cyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yb290JywKKyAg
ICAgICAgaGVscD0nQWJzb2x1dGUgcGF0aCB0byBEb2N1bWVudFJvb3QgKG92ZXJyaWRlcyBsYXlv
dXQgdGVzdCByb290cyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWdpc3Rl
cl9jeWd3aW4nLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZXN0PSJyZWdpc3Rlcl9j
eWd3aW4iLCBoZWxwPSdSZWdpc3RlciBDeWd3aW4gcGF0aHMgKG9uIFdpbiB0cnkgYm90cyknKQor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1ydW5fYmFja2dyb3VuZCcsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlc3Q9InJ1bl9iYWNrZ3JvdW5kIiwKKyAgICAgICAgaGVs
cD0nUnVuIG9uIGJhY2tncm91bmQgKGZvciBydW5uaW5nIGFzIFVJIHRlc3QpJykKKyAgICBvcHRp
b25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIG5vdCBvcHRp
b25zLnNlcnZlcjoKKyAgICAgICAgcHJpbnQgKCdVc2FnZTogJXMgLS1zZXJ2ZXIge3N0YXJ0fHN0
b3B9IFstLXJvb3Q9cm9vdF9kaXJdJworICAgICAgICAgICAgICAgJyBbLS1wb3J0PXBvcnRfbnVt
YmVyXScgJSBzeXMuYXJndlswXSkKKyAgICBlbHNlOgorICAgICAgICBpZiAob3B0aW9ucy5yb290
IGlzIE5vbmUpIGFuZCAob3B0aW9ucy5wb3J0IGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICMg
c3BlY2lmeWluZyByb290IGJ1dCBub3QgcG9ydCBtZWFucyB3ZSB3YW50IGh0dHBkIG9uIGRlZmF1
bHQKKyAgICAgICAgICAgICMgc2V0IG9mIHBvcnRzIHRoYXQgTGF5b3V0VGVzdCB1c2UsIGJ1dCBw
b2ludGluZyB0byBhIGRpZmZlcmVudAorICAgICAgICAgICAgIyBzb3VyY2Ugb2YgdGVzdHMuIFNw
ZWNpZnlpbmcgcG9ydCBidXQgbm8gcm9vdCBkb2VzIG5vdCBzZWVtCisgICAgICAgICAgICAjIG1l
YW5pbmdmdWwuCisgICAgICAgICAgICByYWlzZSAnU3BlY2lmeWluZyBwb3J0IHJlcXVpcmVzIGFs
c28gYSByb290LicKKyAgICAgICAgaHR0cGQgPSBMaWdodHRwZCh0ZW1wZmlsZS5nZXR0ZW1wZGly
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1vcHRpb25zLnBvcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgcm9vdD1vcHRpb25zLnJvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVnaXN0ZXJfY3lnd2luPW9wdGlvbnMucmVnaXN0ZXJfY3lnd2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHJ1bl9iYWNrZ3JvdW5kPW9wdGlvbnMucnVuX2JhY2tncm91bmQpCisg
ICAgICAgIGlmICdzdGFydCcgPT0gb3B0aW9ucy5zZXJ2ZXI6CisgICAgICAgICAgICBodHRwZC5z
dGFydCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5weQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2h0dHBfc2VydmVyX2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weQko
cmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisi
IiJCYXNlIGNsYXNzIHdpdGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSBhbmQg
TGlnaHR0cGQgc2VydmVycy4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0aW1lCitpbXBv
cnQgdXJsbGliCisKKworY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKKworICAgIGRlZiB3
YWl0X2Zvcl9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgIiIiUmVwZWF0IHRoZSBhY3Rp
b24gZm9yIDIwIHNlY29uZHMgb3IgdW50aWwgaXQgc3VjY2VlZHMuIFJldHVybnMKKyAgICAgICAg
d2hldGhlciBpdCBzdWNjZWVkZWQuIiIiCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUo
KQorICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCAyMDoKKyAgICAgICAg
ICAgIGlmIGFjdGlvbigpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAg
ICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfc2Vy
dmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRo
ZXIgdGhlIHNlcnZlciBpcyBydW5uaW5nIG9uIGFsbCB0aGUgZGVzaXJlZCBwb3J0cy4iIiIKKyAg
ICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5tYXBwaW5nczoKKyAgICAgICAgICAgIGlmICdzc2xj
ZXJ0JyBpbiBtYXBwaW5nOgorICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJ3MnCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJycKKworICAgICAg
ICAgICAgdXJsID0gJ2h0dHAlczovLzEyNy4wLjAuMTolZC8nICUgKGh0dHBfc3VmZml4LCBtYXBw
aW5nWydwb3J0J10pCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNwb25z
ZSA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJT
ZXJ2ZXIgcnVubmluZyBhdCAlcyIgJSB1cmwpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoK
KyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgTk9UIHJ1bm5pbmcgYXQgJXMi
ICUgdXJsKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBU
cnVlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlcl9iYXNlLnB5Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvaHR0cGQyLnBlbQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW0JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRVpEQ0NB
a3lnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQmdNUkF3RGdZRFZRUURFd2RVWlhOMAor
SUVOQk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdB
MVVFQnhNTgorVFc5MWJuUmhhVzRnVm1sbGR6RVNNQkFHQTFVRUNoTUpRMlZ5ZENCVVpYTjBNQjRY
RFRBNE1EY3lPREl5TXpJeQorT0ZvWERURXpNRGN5TnpJeU16SXlPRm93U2pFTE1Ba0dBMVVFQmhN
Q1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbQorYjNKdWFXRXhFakFRQmdOVkJBb1RDVU5sY25RZ1ZH
VnpkREVTTUJBR0ExVUVBeE1KTVRJM0xqQXVNQzR4TUlHZgorTUEwR0NTcUdTSWIzRFFFQkFRVUFB
NEdOQURDQmlRS0JnUURRajJ0UFdQVWdidUk0SDMvM2RudHRxVmJuZHdVMworM0JkUkNkNjdERk00
NEdScnNqRFNINGJZL0ViRnlYOUQ1MmQvaXk2WmFBbURlUGNDejVrL2ZnUDNETXVqeWtZRworcWdO
aVYyeXd4VGxNajdObE4yQzdTUnQ2OGZRTVpyNWlJN3J5cGR4dWFadDlsU01EM0VOQmZmWXR1TFR5
WmQ5YQorM0pQSmUxVGFJYWI1R3dJREFRQUJvNEhDTUlHL01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIw
T0JCWUVGQ1lMQnY1SworeDVzTE5WbHBMaDVGd1R3aGREbDdNSUdTQmdOVkhTTUVnWW93Z1llQUZG
M09mNW5qMUJsQk1VL0d6N0VsOVZxdgorNDVjeG9XU2tZakJnTVJBd0RnWURWUVFERXdkVVpYTjBJ
RU5CTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRQorQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFH
QTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpFU01CQUdBMVVFQ2hNSgorUTJWeWRDQlVaWE4wZ2dr
QTFGR1QxRC9lMlU0d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dJQkFFdGtWbUxPYlVnaworYjJjSUEy
UytRRHRpZnExVWdWZkJieXR2UjJsRm1uQURPUjU1bW8wZ0hRRzNISHFxNGcwMzRMbW9WWERIaFVr
OAorR2I2YUZpdjRRdWJtVmhMWGNVZWxUUlh3aU52R3prVzdwQzZKcnExMDVoZFBqelhNS1RjbWlM
YW9wbTVGcWZjNworaGo1Q24xU2pzcGM4cGRlUWpyYmVNZHZjYTdLbEZyR1A4WWt3Q1UyeE9PWDlQ
aU45RzA5NjZCV2ZqbnIvZlpacAorK09RVnVVRkhkaUFad3RoRU11RHBBQVhIcVlYSXNlcm1nZE9w
Z0phQTUzY2Y4TnFCVjJRR2h0Rmd0c0pDUm9pdQorN0RLcWh5UldCR3l6MTlWSUgyYjd5KzZxdlFW
eHVIazE5a0tSTTBuZnR3L3lOY0pubTdndHR0ZXNwTVVQc09NYQorYTJTRDFHMGhtMFRORDZ2eGFC
aGdSM2NWcXBsL3FJcEFkRmkwMFRtN2hUeVlFN0k0M3pQVzAzdCsvRHBDdDNVbQorRU1SWnNROTBj
bzVxK2JjeC92UTdZQXR3VWgzMHVNYjB3cGliZXlDd0RwOGNxTm1TaVJrRXVjL0ZqVFllczV0OAor
NWdSLy9XWDFsMCtxanJqdXNPOU5tb0xucTJZazZVY2lvWCt6K3E2Wi9kdWRHZnFoTGZlV0QyUTBM
V1lBMjQyQworZDdrbTVZM0tBdDFQSmRWc29mL2FpVmhWZGRkWS9PSUVLVFJRaFdFZERib3N5MmVo
MTZCQ0tYVDJGRnZoTkRnMQorQVlGdm42SThuajlJbGRNSmlJYzNEZGhhY0VBRXpSTWVSZ1BkekFh
MWdyaUtVR2tueHN5VHlSaWk4cnUwV1M2dworRENOcmxET1ZYZHpZR0Vab29CSTc2QkRWWTBXMGFr
alYKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZ
LS0tLS0KK01JSUNYUUlCQUFLQmdRRFFqMnRQV1BVZ2J1STRIMy8zZG50dHFWYm5kd1UzM0JkUkNk
NjdERk00NEdScnNqRFMKK0g0YlkvRWJGeVg5RDUyZC9peTZaYUFtRGVQY0N6NWsvZmdQM0RNdWp5
a1lHcWdOaVYyeXd4VGxNajdObE4yQzcKK1NSdDY4ZlFNWnI1aUk3cnlwZHh1YVp0OWxTTUQzRU5C
ZmZZdHVMVHlaZDlhM0pQSmUxVGFJYWI1R3dJREFRQUIKK0FvR0FOSFh1OHoyWUl6bGhFK2J3aEdt
OE1HQnBLTDNxaFJ1S2plcmlxTUEzNnRXZXpPdzhsWTR5bUVBVStVbHYKK0JzQ2RheHF5ZFFvVFlv
dTU3bTRUeVVIRWN4cTlwcTNIMHpCMHFMNzA5RGRIaS90NHpiVjlYSW9BekM1djAvaEcKKzkrQ2Ey
OVR3QzAyRkN3K3FMa05ydHdDcHdPY1FtYytiUHhxdkZ1MWlNaWFoVVJFQ1FRRDJJL0hpMjQxM0NN
WnoKK1RCamw4Zk1pVk85R2hBMkowc2M4UWkrWWNnSmFrYUxEOXhjYmFpTGtUelBaRGxBMzg5QzFi
NklhK3BvQXI0WUEKK1ZlMEZGYnhwQWtFQTJPb2JheXlIRS9RdFBFcW95Nk5MUjU3amlybVZCTm1T
V1dkNGxBeUw1VUlISVlWdHRKWmcKKzhDTHZiemFVL2lER3dSK3dLc002NjRyS1BIRW10bHlvNHdK
QkFNZVNxWU81Wk9DSkd1OU5XanJIak0zZmRBc0cKKzh6czJ6aGlMeWErZmNVMGlISWtzQlc1VEJt
dDcxSncvd01jOVI1SjFLMGtZdkZtbDk4NjUzTzVzaTFFQ1FCQ2sKK1JWNC9tRTFybWx6WnpZRnlF
Y0I0N0RRa2NNNWljdHZ4R0VzamUwZ25mS3lSdEF6NnpJMGY0UWJEUlVNSitMV3cKK1hLK3JNc1lI
YStTZk9iMGI5c2tDUVFDTGRlb25zSXBGRHYvVXYrZmxISVN5MFdBK0FGa0xYclJrQktoNkcvT0QK
K2RNSGFOZXZrSmdVbnBjZVZFbmtyZGVucDVDY0VvRlRJMTdwZCtuQmdEbS9CCistLS0tLUVORCBS
U0EgUFJJVkFURSBLRVktLS0tLQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3Iu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkJKHJldmlz
aW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKK2Zyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25z
Citmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCisKKworY2xhc3MgSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0
c0dlbmVyYXRvcik6CisgICAgIiIiQSBKU09OIHJlc3VsdHMgZ2VuZXJhdG9yIGZvciBsYXlvdXQg
dGVzdHMuIiIiCisKKyAgICBMQVlPVVRfVEVTVFNfUEFUSCA9ICJMYXlvdXRUZXN0cyIKKworICAg
ICMgQWRkaXRpb25hbCBKU09OIGZpZWxkcy4KKyAgICBXT05URklYID0gIndvbnRmaXhDb3VudHMi
CisgICAgREVGRVJSRUQgPSAiZGVmZXJyZWRDb3VudHMiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAgIHJlc3Vs
dHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgIHRlc3RfdGltaW5n
cywgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgYWxsX3Rlc3RzKToKKyAgICAgICAgIiIi
TW9kaWZpZXMgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiBHcmFicyBpdCBvZmYgdGhlIGFyY2hpdmUg
ZGlyZWN0b3J5CisgICAgICAgIGlmIGl0IGlzIG5vdCBmb3VuZCBsb2NhbGx5LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IFJlc3VsdHNTdW1tYXJ5IG9iamVjdCBz
dG9yaW5nIHRoZSBzdW1tYXJ5IG9mIHRoZSB0ZXN0CisgICAgICAgICAgICAgIHJlc3VsdHMuCisg
ICAgICAgICAgKHNlZSB0aGUgY29tbWVudCBvZiBKU09OUmVzdWx0c0dlbmVyYXRvci5fX2luaXRf
XyBmb3Igb3RoZXIgQXJncykKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fYnVpbGRlcl9u
YW1lID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWlsZF9uYW1l
CisgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgorICAgICAgICBzZWxm
Ll9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAorICAgICAgICBzZWxmLl9yZXN1
bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLAorICAg
ICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAgICBzZWxmLl9leHBlY3RhdGlv
bnMgPSBleHBlY3RhdGlvbnMKKworICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9za2lwcGVk
X3Rlc3RzIGFuZCBzZWxmLl9wYXNzZWRfdGVzdHMgYXMgd2UKKyAgICAgICAgIyBvdmVycmlkZSBf
SW5zZXJ0RmFpbHVyZVN1bW1hcmllcy4KKworICAgICAgICAjIFdlIHdhbnQgcmVsYXRpdmUgcGF0
aHMgdG8gTGF5b3V0VGVzdCByb290IGZvciBKU09OIG91dHB1dC4KKyAgICAgICAgcGF0aF90b19u
YW1lID0gc2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdAorICAgICAg
ICBzZWxmLl9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHNlbGYuX2Zh
aWx1cmVzID0gZGljdCgKKyAgICAgICAgICAgIChwYXRoX3RvX25hbWUodGVzdCksIHRlc3RfZmFp
bHVyZXMuZGV0ZXJtaW5lX3Jlc3VsdF90eXBlKGZhaWx1cmVzKSkKKyAgICAgICAgICAgIGZvciAo
dGVzdCwgZmFpbHVyZXMpIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzLml0ZXJpdGVtcygpKQor
ICAgICAgICBzZWxmLl9hbGxfdGVzdHMgPSBbcGF0aF90b19uYW1lKHRlc3QpIGZvciB0ZXN0IGlu
IGFsbF90ZXN0c10KKyAgICAgICAgc2VsZi5fdGVzdF90aW1pbmdzID0gZGljdCgKKyAgICAgICAg
ICAgIChwYXRoX3RvX25hbWUodGVzdF90dXBsZS5maWxlbmFtZSksIHRlc3RfdHVwbGUudGVzdF9y
dW5fdGltZSkKKyAgICAgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfdGltaW5ncykKKwor
ICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgpCisKKyAgICBkZWYgX2dldF9wYXRo
X3JlbGF0aXZlX3RvX2xheW91dF90ZXN0X3Jvb3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlJl
dHVybnMgdGhlIHBhdGggb2YgdGhlIHRlc3QgcmVsYXRpdmUgdG8gdGhlIGxheW91dCB0ZXN0IHJv
b3QuCisgICAgICAgIEZvciBleGFtcGxlLCBmb3I6CisgICAgICAgICAgc3JjL3RoaXJkX3BhcnR5
L1dlYktpdC9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvby5odG1sCisgICAgICAgIFdlIHdvdWxk
IHJldHVybgorICAgICAgICAgIGZhc3QvZm9ybXMvZm9vLmh0bWwKKyAgICAgICAgIiIiCisgICAg
ICAgIGluZGV4ID0gdGVzdC5maW5kKHNlbGYuTEFZT1VUX1RFU1RTX1BBVEgpCisgICAgICAgIGlm
IGluZGV4IGlzIG5vdCAtMToKKyAgICAgICAgICAgIGluZGV4ICs9IGxlbihzZWxmLkxBWU9VVF9U
RVNUU19QQVRIKQorCisgICAgICAgIGlmIGluZGV4IGlzIC0xOgorICAgICAgICAgICAgIyBBbHJl
YWR5IGEgcmVsYXRpdmUgcGF0aC4KKyAgICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IHRlc3QKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IHRlc3RbaW5kZXggKyAxOl0K
KworICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgcGF0aHMgYXJlIHVuaXgtc3R5bGUuCisgICAgICAg
IHJldHVybiByZWxhdGl2ZVBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisKKyAgICAjIG92ZXJyaWRl
CisgICAgZGVmIF9jb252ZXJ0X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNf
anNvbik6CisgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5W
RVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICBhcmNoaXZlX3ZlcnNpb24g
PSByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0KKworICAgICAgICBzdXBlcihKU09OTGF5
b3V0UmVzdWx0c0dlbmVyYXRvciwKKyAgICAgICAgICAgICAgc2VsZikuX2NvbnZlcnRfanNvbl90
b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQorCisgICAgICAgICMgdmVyc2lvbiAyLT4z
CisgICAgICAgIGlmIGFyY2hpdmVfdmVyc2lvbiA9PSAyOgorICAgICAgICAgICAgZm9yIHJlc3Vs
dHNfZm9yX2J1aWxkZXIgaW4gcmVzdWx0c19qc29uLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cyA9IHJlc3VsdHNfZm9y
X2J1aWxkZXJbc2VsZi5URVNUU10KKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfcmVzdWx0
czoKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgcGF0aHMgYXJlIHJlbGF0aXZlCisg
ICAgICAgICAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5
b3V0X3Rlc3Rfcm9vdCh0ZXN0KQorICAgICAgICAgICAgICAgIGlmIHRlc3RfcGF0aCAhPSB0ZXN0
OgorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHNbdGVzdF9wYXRoXSA9IHRlc3RfcmVz
dWx0c1t0ZXN0XQorICAgICAgICAgICAgICAgICAgICBkZWwgdGVzdF9yZXN1bHRzW3Rlc3RdCisK
KyAgICAjIG92ZXJyaWRlCisgICAgZGVmIF9pbnNlcnRfZmFpbHVyZV9zdW1tYXJpZXMoc2VsZiwg
cmVzdWx0c19mb3JfYnVpbGRlcik6CisgICAgICAgIHN1bW1hcnkgPSBzZWxmLl9yZXN1bHRfc3Vt
bWFyeQorCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19m
b3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbigoc2V0KHN1bW1hcnkuZmFpbHVyZXMua2V5cygp
KSB8CisgICAgICAgICAgICAgICAgc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4
cGVjdGF0aW9ucy5TS0lQXSkgJgorICAgICAgICAgICAgICAgIHN1bW1hcnkudGVzdHNfYnlfdGlt
ZWxpbmVbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSksCisgICAgICAgICAgICBzZWxmLkZJWEFCTEVf
Q09VTlQpCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19m
b3JfYnVpbGRlciwKKyAgICAgICAgICAgIHNlbGYuX2dldF9mYWlsdXJlX3N1bW1hcnlfZW50cnko
dGVzdF9leHBlY3RhdGlvbnMuTk9XKSwKKyAgICAgICAgICAgIHNlbGYuRklYQUJMRSkKKyAgICAg
ICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAor
ICAgICAgICAgICAgbGVuKHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF90aW1lbGlu
ZSgKKyAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5OT1cpKSwgc2VsZi5BTExfRklY
QUJMRV9DT1VOVCkKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fZ2V0X2ZhaWx1cmVfc3VtbWFyeV9l
bnRyeSh0ZXN0X2V4cGVjdGF0aW9ucy5ERUZFUiksCisgICAgICAgICAgICBzZWxmLkRFRkVSUkVE
KQorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1
aWxkZXIsCisgICAgICAgICAgICBzZWxmLl9nZXRfZmFpbHVyZV9zdW1tYXJ5X2VudHJ5KHRlc3Rf
ZXhwZWN0YXRpb25zLldPTlRGSVgpLAorICAgICAgICAgICAgc2VsZi5XT05URklYKQorCisgICAg
IyBvdmVycmlkZQorICAgIGRlZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0
ZXN0X25hbWUsIHRlc3RzKToKKyAgICAgICAgc3VwZXIoSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0
b3IsIHNlbGYpLl9ub3JtYWxpemVfcmVzdWx0c19qc29uKAorICAgICAgICAgICAgdGVzdCwgdGVz
dF9uYW1lLCB0ZXN0cykKKworICAgICAgICAjIFJlbW92ZSB0ZXN0cyB0aGF0IGRvbid0IGV4aXN0
IGFueW1vcmUuCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoX3V0aWxzLmxh
eW91dF90ZXN0c19kaXIoKSwgdGVzdF9uYW1lKQorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRo
Lm5vcm1wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxf
cGF0aCk6CisgICAgICAgICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQorCisgICAgZGVmIF9nZXRf
ZmFpbHVyZV9zdW1tYXJ5X2VudHJ5KHNlbGYsIHRpbWVsaW5lKToKKyAgICAgICAgIiIiQ3JlYXRl
cyBhIHN1bW1hcnkgb2JqZWN0IHRvIGluc2VydCBpbnRvIHRoZSBKU09OLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgc3VtbWFyeSAgIFJlc3VsdFN1bW1hcnkgb2JqZWN0IHdpdGggdGVzdCBy
ZXN1bHRzCisgICAgICAgICAgdGltZWxpbmUgIGN1cnJlbnQgdGVzdF9leHBlY3RhdGlvbnMgdGlt
ZWxpbmUgdG8gYnVpbGQgZW50cnkgZm9yCisgICAgICAgICAgICAgICAgICAgIChlLmcuLCB0ZXN0
X2V4cGVjdGF0aW9ucy5OT1csIGV0Yy4pCisgICAgICAgICIiIgorICAgICAgICBlbnRyeSA9IHt9
CisgICAgICAgIHN1bW1hcnkgPSBzZWxmLl9yZXN1bHRfc3VtbWFyeQorICAgICAgICB0aW1lbGlu
ZV90ZXN0cyA9IHN1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdCisgICAgICAgIGVu
dHJ5W3NlbGYuU0tJUF9SRVNVTFRdID0gbGVuKAorICAgICAgICAgICAgc3VtbWFyeS50ZXN0c19i
eV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSAmCisgICAgICAgICAgICB0aW1l
bGluZV90ZXN0cykKKyAgICAgICAgZW50cnlbc2VsZi5QQVNTX1JFU1VMVF0gPSBsZW4oCisgICAg
ICAgICAgICBzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlBB
U1NdICYKKyAgICAgICAgICAgIHRpbWVsaW5lX3Rlc3RzKQorICAgICAgICBmb3IgZmFpbHVyZV90
eXBlIGluIHN1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb24ua2V5cygpOgorICAgICAgICAgICAg
aWYgZmFpbHVyZV90eXBlIG5vdCBpbiBzZWxmLkZBSUxVUkVfVE9fQ0hBUjoKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgY291bnQgPSBsZW4oc3VtbWFyeS50ZXN0c19ieV9l
eHBlY3RhdGlvbltmYWlsdXJlX3R5cGVdICYKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVs
aW5lX3Rlc3RzKQorICAgICAgICAgICAgZW50cnlbc2VsZi5GQUlMVVJFX1RPX0NIQVJbZmFpbHVy
ZV90eXBlXV0gPSBjb3VudAorICAgICAgICByZXR1cm4gZW50cnkKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5Cl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQkocmV2aXNpb24gMCkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pz
b25fcmVzdWx0c19nZW5lcmF0b3IucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDE4IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitmcm9tIGxheW91dF9w
YWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X2V4cGVjdGF0aW9ucworCitzeXMucGF0aC5hcHBlbmQocGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnV2ViS2l0VG9vbHMnKSkgCitpbXBvcnQgc2ltcGxlanNvbgorCisKK2Ns
YXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CisKKyAgICBNQVhfTlVNQkVSX09GX0JV
SUxEX1JFU1VMVFNfVE9fTE9HID0gNzUwCisgICAgIyBNaW4gdGltZSAoc2Vjb25kcykgdGhhdCB3
aWxsIGJlIGFkZGVkIHRvIHRoZSBKU09OLgorICAgIE1JTl9USU1FID0gMQorICAgIEpTT05fUFJF
RklYID0gIkFERF9SRVNVTFRTKCIKKyAgICBKU09OX1NVRkZJWCA9ICIpOyIKKyAgICBQQVNTX1JF
U1VMVCA9ICJQIgorICAgIFNLSVBfUkVTVUxUID0gIlgiCisgICAgTk9fREFUQV9SRVNVTFQgPSAi
TiIKKyAgICBWRVJTSU9OID0gMworICAgIFZFUlNJT05fS0VZID0gInZlcnNpb24iCisgICAgUkVT
VUxUUyA9ICJyZXN1bHRzIgorICAgIFRJTUVTID0gInRpbWVzIgorICAgIEJVSUxEX05VTUJFUlMg
PSAiYnVpbGROdW1iZXJzIgorICAgIFdFQktJVF9TVk4gPSAid2Via2l0UmV2aXNpb24iCisgICAg
Q0hST01FX1NWTiA9ICJjaHJvbWVSZXZpc2lvbiIKKyAgICBUSU1FID0gInNlY29uZHNTaW5jZUVw
b2NoIgorICAgIFRFU1RTID0gInRlc3RzIgorCisgICAgRklYQUJMRV9DT1VOVCA9ICJmaXhhYmxl
Q291bnQiCisgICAgRklYQUJMRSA9ICJmaXhhYmxlQ291bnRzIgorICAgIEFMTF9GSVhBQkxFX0NP
VU5UID0gImFsbEZpeGFibGVDb3VudCIKKworICAgICMgTm90ZSB0aGF0IHdlIG9taXQgdGVzdF9l
eHBlY3RhdGlvbnMuRkFJTCBmcm9tIHRoaXMgbGlzdCBiZWNhdXNlCisgICAgIyBpdCBzaG91bGQg
bmV2ZXIgc2hvdyB1cCAoaXQncyBhIGxlZ2FjeSBpbnB1dCBleHBlY3RhdGlvbiwgbmV2ZXIKKyAg
ICAjIGFuIG91dHB1dCBleHBlY3RhdGlvbikuCisgICAgRkFJTFVSRV9UT19DSEFSID0ge3Rlc3Rf
ZXhwZWN0YXRpb25zLkNSQVNIOiAiQyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhw
ZWN0YXRpb25zLlRJTUVPVVQ6ICJUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBl
Y3RhdGlvbnMuSU1BR0U6ICJJIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3Rh
dGlvbnMuVEVYVDogIkYiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy5NSVNTSU5HOiAiTyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25z
LklNQUdFX1BMVVNfVEVYVDogIloifQorICAgIEZBSUxVUkVfQ0hBUlMgPSBGQUlMVVJFX1RPX0NI
QVIudmFsdWVzKCkKKworICAgIFJFU1VMVFNfRklMRU5BTUUgPSAicmVzdWx0cy5qc29uIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVt
YmVyLAorICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAor
ICAgICAgICB0ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRfdGVz
dHMsIGFsbF90ZXN0cyk6CisgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24gZmls
ZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQorICAgICAgICBpZiBpdCBpcyBu
b3QgZm91bmQgbG9jYWxseS4KKworICAgICAgICBBcmdzCisgICAgICAgICAgYnVpbGRlcl9uYW1l
OiB0aGUgYnVpbGRlciBuYW1lIChlLmcuIFdlYmtpdCkuCisgICAgICAgICAgYnVpbGRfbmFtZTog
dGhlIGJ1aWxkIG5hbWUgKGUuZy4gd2Via2l0LXJlbCkuCisgICAgICAgICAgYnVpbGRfbnVtYmVy
OiB0aGUgYnVpbGQgbnVtYmVyLgorICAgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGg6IEFi
c29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICAgICAgICAgICAg
ICByZXN1bHRzIGpzb24gZmlsZS4KKyAgICAgICAgICBidWlsZGVyX2Jhc2VfdXJsOiB0aGUgVVJM
IHdoZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgICB0ZXN0
X3RpbWluZ3M6IE1hcCBvZiB0ZXN0IG5hbWUgdG8gYSB0ZXN0X3J1bi10aW1lLgorICAgICAgICAg
IGZhaWx1cmVzOiBNYXAgb2YgdGVzdCBuYW1lIHRvIGEgZmFpbHVyZSB0eXBlIChvZiB0ZXN0X2V4
cGVjdGF0aW9ucykuCisgICAgICAgICAgcGFzc2VkX3Rlc3RzOiBBIHNldCBjb250YWluaW5nIGFs
bCB0aGUgcGFzc2VkIHRlc3RzLgorICAgICAgICAgIHNraXBwZWRfdGVzdHM6IEEgc2V0IGNvbnRh
aW5pbmcgYWxsIHRoZSBza2lwcGVkIHRlc3RzLgorICAgICAgICAgIGFsbF90ZXN0czogTGlzdCBv
ZiBhbGwgdGhlIHRlc3RzIHRoYXQgd2VyZSBydW4uICBUaGlzIHNob3VsZCBub3QKKyAgICAgICAg
ICAgICAgaW5jbHVkZSBza2lwcGVkIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5f
YnVpbGRlcl9uYW1lID0gYnVpbGRlcl9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBi
dWlsZF9uYW1lCisgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgorICAg
ICAgICBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsID0gYnVpbGRlcl9iYXNlX3VybAorICAgICAgICBz
ZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyZXN1bHRzX2ZpbGVfYmFzZV9w
YXRoLAorICAgICAgICAgICAgc2VsZi5SRVNVTFRTX0ZJTEVOQU1FKQorICAgICAgICBzZWxmLl90
ZXN0X3RpbWluZ3MgPSB0ZXN0X3RpbWluZ3MKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSBmYWls
dXJlcworICAgICAgICBzZWxmLl9wYXNzZWRfdGVzdHMgPSBwYXNzZWRfdGVzdHMKKyAgICAgICAg
c2VsZi5fc2tpcHBlZF90ZXN0cyA9IHNraXBwZWRfdGVzdHMKKyAgICAgICAgc2VsZi5fYWxsX3Rl
c3RzID0gYWxsX3Rlc3RzCisKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfanNvbl9vdXRwdXQoKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9qc29uX291dHB1dChzZWxmKToKKyAgICAgICAgIiIiR2VuZXJh
dGVzIHRoZSBKU09OIG91dHB1dCBmaWxlLiIiIgorICAgICAgICBqc29uID0gc2VsZi5fZ2V0X2pz
b24oKQorICAgICAgICBpZiBqc29uOgorICAgICAgICAgICAgcmVzdWx0c19maWxlID0gb3Blbihz
ZWxmLl9yZXN1bHRzX2ZpbGVfcGF0aCwgInciKQorICAgICAgICAgICAgcmVzdWx0c19maWxlLndy
aXRlKGpzb24pCisgICAgICAgICAgICByZXN1bHRzX2ZpbGUuY2xvc2UoKQorCisgICAgZGVmIF9n
ZXRfc3ZuX3JldmlzaW9uKHNlbGYsIGluX2RpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgIiIiUmV0
dXJucyB0aGUgc3ZuIHJldmlzaW9uIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgaW5fZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5IHdoZXJlIHN2biBp
cyB0byBiZSBydW4uCisgICAgICAgICIiIgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBv
cGVuKFsic3ZuIiwgImluZm8iLCAiLS14bWwiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjd2Q9aW5fZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNoZWxsPShzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBkb20gPSB4bWwuZG9tLm1pbmlkb20ucGFyc2VTdHJp
bmcob3V0cHV0KQorICAgICAgICAgICAgcmV0dXJuIGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
ZW50cnknKVswXS5nZXRBdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgJ3JldmlzaW9uJykKKyAg
ICAgICAgZXhjZXB0IHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3I6CisgICAgICAgICAgICBy
ZXR1cm4gIiIKKworICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKKyAg
ICAgICAgIiIiUmVhZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KKyAgICAg
ICAgUmV0dXJucyAoYXJjaGl2ZWRfcmVzdWx0cywgZXJyb3IpIHR1cGxlIHdoZXJlIGVycm9yIGlz
IE5vbmUgaWYgcmVzdWx0cworICAgICAgICB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkLgorICAgICAg
ICAiIiIKKyAgICAgICAgcmVzdWx0c19qc29uID0ge30KKyAgICAgICAgb2xkX3Jlc3VsdHMgPSBO
b25lCisgICAgICAgIGVycm9yID0gTm9uZQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNl
bGYuX3Jlc3VsdHNfZmlsZV9wYXRoKToKKyAgICAgICAgICAgIG9sZF9yZXN1bHRzX2ZpbGUgPSBv
cGVuKHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoLCAiciIpCisgICAgICAgICAgICBvbGRfcmVzdWx0
cyA9IG9sZF9yZXN1bHRzX2ZpbGUucmVhZCgpCisgICAgICAgIGVsaWYgc2VsZi5fYnVpbGRlcl9i
YXNlX3VybDoKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgSlNP
TiBmaWxlIG9uIHRoZSBidWlsZGJvdCBzZXJ2ZXIuCisgICAgICAgICAgICByZXN1bHRzX2ZpbGVf
dXJsID0gKHNlbGYuX2J1aWxkZXJfYmFzZV91cmwgKworICAgICAgICAgICAgICAgIHNlbGYuX2J1
aWxkX25hbWUgKyAiLyIgKyBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCisgICAgICAgICAgICBsb2dn
aW5nLmVycm9yKCJMb2NhbCByZXN1bHRzLmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJp
bmcgIgorICAgICAgICAgICAgICAgICJpdCBvZmYgdGhlIGFyY2hpdmUgYXQgIiArIHJlc3VsdHNf
ZmlsZV91cmwpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHRzX2Zp
bGUgPSB1cmxsaWIyLnVybG9wZW4ocmVzdWx0c19maWxlX3VybCkKKyAgICAgICAgICAgICAgICBp
bmZvID0gcmVzdWx0c19maWxlLmluZm8oKQorICAgICAgICAgICAgICAgIG9sZF9yZXN1bHRzID0g
cmVzdWx0c19maWxlLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9y
LCBodHRwX2Vycm9yOgorICAgICAgICAgICAgICAgICMgQSBub24tNHh4IHN0YXR1cyBjb2RlIG1l
YW5zIHRoZSBib3QgaXMgaG9zZWQgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgIyBh
bmQgd2UgY2FuJ3QgZ3JhYiB0aGUgcmVzdWx0cy5qc29uIGZpbGUgb2ZmIG9mIGl0LgorICAgICAg
ICAgICAgICAgIGlmIChodHRwX2Vycm9yLmNvZGUgPCA0MDAgYW5kIGh0dHBfZXJyb3IuY29kZSA+
PSA1MDApOgorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGh0dHBfZXJyb3IKKyAgICAgICAg
ICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yLCB1cmxfZXJyb3I6CisgICAgICAgICAgICAgICAg
ZXJyb3IgPSB1cmxfZXJyb3IKKworICAgICAgICBpZiBvbGRfcmVzdWx0czoKKyAgICAgICAgICAg
ICMgU3RyaXAgdGhlIHByZWZpeCBhbmQgc3VmZml4IHNvIHdlIGNhbiBnZXQgdGhlIGFjdHVhbCBK
U09OIG9iamVjdC4KKyAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gb2xkX3Jlc3VsdHNbbGVuKHNl
bGYuSlNPTl9QUkVGSVgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZW4ob2xkX3Jlc3VsdHMpIC0gbGVuKHNlbGYuSlNPTl9TVUZGSVgpXQorCisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0c19qc29uID0gc2ltcGxlanNvbi5sb2FkcyhvbGRf
cmVzdWx0cykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRl
YnVnKCJyZXN1bHRzLmpzb24gd2FzIG5vdCB2YWxpZCBKU09OLiBDbG9iYmVyaW5nLiIpCisgICAg
ICAgICAgICAgICAgIyBUaGUgSlNPTiBmaWxlIGlzIG5vdCB2YWxpZCBKU09OLiBKdXN0IGNsb2Ji
ZXIgdGhlIHJlc3VsdHMuCisgICAgICAgICAgICAgICAgcmVzdWx0c19qc29uID0ge30KKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ09sZCBKU09OIHJlc3VsdHMgZG8g
bm90IGV4aXN0LiBTdGFydGluZyBmcmVzaC4nKQorICAgICAgICAgICAgcmVzdWx0c19qc29uID0g
e30KKworICAgICAgICByZXR1cm4gcmVzdWx0c19qc29uLCBlcnJvcgorCisgICAgZGVmIF9nZXRf
anNvbihzZWxmKToKKyAgICAgICAgIiIiR2V0cyB0aGUgcmVzdWx0cyBmb3IgdGhlIHJlc3VsdHMu
anNvbiBmaWxlLiIiIgorICAgICAgICByZXN1bHRzX2pzb24sIGVycm9yID0gc2VsZi5fZ2V0X2Fy
Y2hpdmVkX2pzb25fcmVzdWx0cygpCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgIyBJ
ZiB0aGVyZSB3YXMgYW4gZXJyb3IgZG9uJ3Qgd3JpdGUgYSByZXN1bHRzLmpzb24KKyAgICAgICAg
ICAgICMgZmlsZSBhdCBhbGwgYXMgaXQgd291bGQgbG9zZSBhbGwgdGhlIGluZm9ybWF0aW9uIG9u
IHRoZSBib3QuCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJBcmNoaXZlIGRpcmVjdG9yeSBp
cyBpbmFjY2Vzc2libGUuIE5vdCBtb2RpZnlpbmcgIgorICAgICAgICAgICAgICAgICJvciBjbG9i
YmVyaW5nIHRoZSByZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCisgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgIGJ1aWxkZXJfbmFtZSA9IHNlbGYuX2J1aWxkZXJfbmFt
ZQorICAgICAgICBpZiByZXN1bHRzX2pzb24gYW5kIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0
c19qc29uOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiQnVpbGRlciBuYW1lICglcykgaXMg
bm90IGluIHRoZSByZXN1bHRzLmpzb24gZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICUgYnVpbGRlcl9uYW1lKQorCisgICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50
X3ZlcnNpb24ocmVzdWx0c19qc29uKQorCisgICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4g
cmVzdWx0c19qc29uOgorICAgICAgICAgICAgcmVzdWx0c19qc29uW2J1aWxkZXJfbmFtZV0gPSAo
CisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX3Jlc3VsdHNfZm9yX2J1aWxkZXJfanNvbigp
KQorCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSByZXN1bHRzX2pzb25bYnVpbGRlcl9u
YW1lXQorCisgICAgICAgIHNlbGYuX2luc2VydF9nZW5lcmljX21ldGFkYXRhKHJlc3VsdHNfZm9y
X2J1aWxkZXIpCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHJlc3Vs
dHNfZm9yX2J1aWxkZXIpCisKKyAgICAgICAgIyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3Rz
IHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUuCisgICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3Jf
YnVpbGRlcltzZWxmLlRFU1RTXQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0cyA9IHNldChzZWxm
Ll9mYWlsdXJlcy5pdGVya2V5cygpKQorICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUo
dGVzdHMuaXRlcmtleXMoKSkKKyAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6
CisgICAgICAgICAgICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVz
dHMpCisKKyAgICAgICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBh
Y3QgZW5jb2RpbmcuCisgICAgICAgIHJlc3VsdHNfc3RyID0gc2ltcGxlanNvbi5kdW1wcyhyZXN1
bHRzX2pzb24sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuSlNP
Tl9QUkVGSVggKyByZXN1bHRzX3N0ciArIHNlbGYuSlNPTl9TVUZGSVgKKworICAgIGRlZiBfaW5z
ZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgorICAgICAg
ICAiIiJJbnNlcnRzIGFnZ3JlZ2F0ZSBwYXNzL2ZhaWx1cmUgc3RhdGlzdGljcyBpbnRvIHRoZSBK
U09OLgorICAgICAgICBUaGlzIG1ldGhvZCByZWFkcyBzZWxmLl9za2lwcGVkX3Rlc3RzLCBzZWxm
Ll9wYXNzZWRfdGVzdHMgYW5kCisgICAgICAgIHNlbGYuX2ZhaWx1cmVzIGFuZCBpbnNlcnRzIEZJ
WEFCTEUsIEZJWEFCTEVfQ09VTlQgYW5kIEFMTF9GSVhBQkxFX0NPVU5UCisgICAgICAgIGVudHJp
ZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0
aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBmb3IgYQorICAgICAgICAgICAgICBz
aW5nbGUgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgSW5zZXJ0IHRoZSBudW1iZXIg
b2YgdGVzdHMgdGhhdCBmYWlsZWQuCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3
X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIGxlbihzZXQoc2VsZi5fZmFp
bHVyZXMua2V5cygpKSB8IHNlbGYuX3NraXBwZWRfdGVzdHMpLAorICAgICAgICAgICAgc2VsZi5G
SVhBQkxFX0NPVU5UKQorCisgICAgICAgICMgQ3JlYXRlIGEgcGFzcy9za2lwL2ZhaWx1cmUgc3Vt
bWFyeSBkaWN0aW9uYXJ5LgorICAgICAgICBlbnRyeSA9IHt9CisgICAgICAgIGVudHJ5W3NlbGYu
U0tJUF9SRVNVTFRdID0gbGVuKHNlbGYuX3NraXBwZWRfdGVzdHMpCisgICAgICAgIGVudHJ5W3Nl
bGYuUEFTU19SRVNVTFRdID0gbGVuKHNlbGYuX3Bhc3NlZF90ZXN0cykKKyAgICAgICAgZ2V0ID0g
ZW50cnkuZ2V0CisgICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc2VsZi5fZmFpbHVyZXMudmFs
dWVzKCk6CisgICAgICAgICAgICBmYWlsdXJlX2NoYXIgPSBzZWxmLkZBSUxVUkVfVE9fQ0hBUltm
YWlsdXJlX3R5cGVdCisgICAgICAgICAgICBlbnRyeVtmYWlsdXJlX2NoYXJdID0gZ2V0KGZhaWx1
cmVfY2hhciwgMCkgKyAxCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIHBhc3Mvc2tpcC9mYWlsdXJl
IHN1bW1hcnkgZGljdGlvbmFyeS4KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdf
bGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLCBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLkZJWEFCTEUpCisKKyAgICAgICAgIyBJbnNlcnQgdGhlIG51
bWJlciBvZiBhbGwgdGhlIHRlc3RzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIHBhc3MuCisgICAgICAg
IHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAg
ICAgICAgICAgIGxlbihzZWxmLl9za2lwcGVkX3Rlc3RzIHwgc2VsZi5fYWxsX3Rlc3RzKSwKKyAg
ICAgICAgICAgIHNlbGYuQUxMX0ZJWEFCTEVfQ09VTlQpCisKKyAgICBkZWYgX2luc2VydF9pdGVt
X2ludG9fcmF3X2xpc3Qoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlciwgaXRlbSwga2V5KToKKyAg
ICAgICAgIiIiSW5zZXJ0cyB0aGUgaXRlbSBpbnRvIHRoZSBsaXN0IHdpdGggdGhlIGdpdmVuIGtl
eSBpbiB0aGUgcmVzdWx0cyBmb3IKKyAgICAgICAgdGhpcyBidWlsZGVyLiBDcmVhdGVzIHRoZSBs
aXN0IGlmIG5vIHN1Y2ggbGlzdCBleGlzdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBy
ZXN1bHRzX2Zvcl9idWlsZGVyOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0
cyBmb3IgYQorICAgICAgICAgICAgICBzaW5nbGUgYnVpbGRlci4KKyAgICAgICAgICBpdGVtOiBO
dW1iZXIgb3Igc3RyaW5nIHRvIGluc2VydCBpbnRvIHRoZSBsaXN0LgorICAgICAgICAgIGtleTog
S2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXIgZm9yIHRoZSBsaXN0IHRvIGluc2VydCBpbnRvLgor
ICAgICAgICAiIiIKKyAgICAgICAgaWYga2V5IGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6CisgICAg
ICAgICAgICByYXdfbGlzdCA9IHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmF3X2xpc3QgPSBbXQorCisgICAgICAgIHJhd19saXN0Lmluc2VydCgw
LCBpdGVtKQorICAgICAgICByYXdfbGlzdCA9IHJhd19saXN0WzpzZWxmLk1BWF9OVU1CRVJfT0Zf
QlVJTERfUkVTVUxUU19UT19MT0ddCisgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXJba2V5XSA9
IHJhd19saXN0CisKKyAgICBkZWYgX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChzZWxm
LCBpdGVtLCBlbmNvZGVkX3Jlc3VsdHMpOgorICAgICAgICAiIiJJbnNlcnRzIHRoZSBpdGVtIGlu
dG8gdGhlIHJ1bi1sZW5ndGggZW5jb2RlZCByZXN1bHRzLgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgaXRlbTogU3RyaW5nIG9yIG51bWJlciB0byBpbnNlcnQuCisgICAgICAgICAgZW5jb2Rl
ZF9yZXN1bHRzOiBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4gYXJyYXkgb2YgYXJyYXlz
LCBlLmcuCisgICAgICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVuY29kZXMgQUFBUS4KKyAg
ICAgICAgIiIiCisgICAgICAgIGlmIGxlbihlbmNvZGVkX3Jlc3VsdHMpIGFuZCBpdGVtID09IGVu
Y29kZWRfcmVzdWx0c1swXVsxXToKKyAgICAgICAgICAgIG51bV9yZXN1bHRzID0gZW5jb2RlZF9y
ZXN1bHRzWzBdWzBdCisgICAgICAgICAgICBpZiBudW1fcmVzdWx0cyA8PSBzZWxmLk1BWF9OVU1C
RVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAgICAgZW5jb2RlZF9yZXN1
bHRzWzBdWzBdID0gbnVtX3Jlc3VsdHMgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAj
IFVzZSBhIGxpc3QgaW5zdGVhZCBvZiBhIGNsYXNzIGZvciB0aGUgcnVuLWxlbmd0aCBlbmNvZGlu
ZyBzaW5jZQorICAgICAgICAgICAgIyB3ZSB3YW50IHRoZSBzZXJpYWxpemVkIGZvcm0gdG8gYmUg
Y29uY2lzZS4KKyAgICAgICAgICAgIGVuY29kZWRfcmVzdWx0cy5pbnNlcnQoMCwgWzEsIGl0ZW1d
KQorCisgICAgZGVmIF9pbnNlcnRfZ2VuZXJpY19tZXRhZGF0YShzZWxmLCByZXN1bHRzX2Zvcl9i
dWlsZGVyKToKKyAgICAgICAgIiIiIEluc2VydHMgZ2VuZXJpYyBtZXRhZGF0YSAoc3VjaCBhcyB2
ZXJzaW9uIG51bWJlciwgY3VycmVudCB0aW1lIGV0YykKKyAgICAgICAgaW50byB0aGUgSlNPTi4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25h
cnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvcgorICAgICAgICAgICAgICBhIHNpbmds
ZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19y
YXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fYnVpbGRfbnVt
YmVyLCBzZWxmLkJVSUxEX05VTUJFUlMpCisKKyAgICAgICAgcGF0aF90b193ZWJraXQgPSBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dlYkNvcmUnKQorICAg
ICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIs
CisgICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fd2Via2l0KSwKKyAg
ICAgICAgICAgIHNlbGYuV0VCS0lUX1NWTikKKworICAgICAgICBwYXRoX3RvX2Nocm9tZV9iYXNl
ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgpCisgICAgICAgIHNlbGYuX2luc2VydF9pdGVt
X2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIHNlbGYuX2dl
dF9zdm5fcmV2aXNpb24ocGF0aF90b19jaHJvbWVfYmFzZSksCisgICAgICAgICAgICBzZWxmLkNI
Uk9NRV9TVk4pCisKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1
bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKKyAgICAgICAg
ICAgIHNlbGYuVElNRSkKKworICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNl
bGYsIHRlc3RfbmFtZSwgdGVzdHMpOgorICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdp
dGggaXRzIHJlc3VsdHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICB0ZXN0czogRGljdGlvbmFyeSBjb250YWluaW5nIHRlc3QgcmVzdWx0
IGVudHJpZXMuCisgICAgICAgICIiIgorCisgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2Vu
ZXJhdG9yLlBBU1NfUkVTVUxUCisgICAgICAgIHRpbWUgPSAwCisKKyAgICAgICAgaWYgdGVzdF9u
YW1lIG5vdCBpbiBzZWxmLl9hbGxfdGVzdHM6CisgICAgICAgICAgICByZXN1bHQgPSBKU09OUmVz
dWx0c0dlbmVyYXRvci5OT19EQVRBX1JFU1VMVAorCisgICAgICAgIGlmIHRlc3RfbmFtZSBpbiBz
ZWxmLl9mYWlsdXJlczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuRkFJTFVSRV9UT19DSEFS
W3NlbGYuX2ZhaWx1cmVzW3Rlc3RfbmFtZV1dCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNl
bGYuX3Rlc3RfdGltaW5nczoKKyAgICAgICAgICAgICMgRmxvb3IgZm9yIG5vdyB0byBnZXQgdGlt
ZSBpbiBzZWNvbmRzLgorICAgICAgICAgICAgdGltZSA9IGludChzZWxmLl90ZXN0X3RpbWluZ3Nb
dGVzdF9uYW1lXSkKKworICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgorICAgICAg
ICAgICAgdGVzdHNbdGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19q
c29uKCkKKworICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5S
RVNVTFRTXSkKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHRp
bWUsIHRoaXNUZXN0W3NlbGYuVElNRVNdKQorICAgICAgICBzZWxmLl9ub3JtYWxpemVfcmVzdWx0
c19qc29uKHRoaXNUZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQorCisgICAgZGVmIF9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6CisgICAgICAgICIiIklm
IHRoZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0
IHRvIHRoZQorICAgICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJz
aW9uIG51bWJlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGlu
IHJlc3VsdHNfanNvbiBhbmQKKyAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05f
S0VZXSA9PSBzZWxmLlZFUlNJT04pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVz
dWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCisKKyAgICBkZWYgX2Ny
ZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKHNlbGYpOgorICAgICAgICByZXN1bHRzX2FuZF90
aW1lcyA9IHt9CisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQor
ICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCisgICAgICAgIHJldHVy
biByZXN1bHRzX2FuZF90aW1lcworCisgICAgZGVmIF9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRl
cl9qc29uKHNlbGYpOgorICAgICAgICByZXN1bHRzX2Zvcl9idWlsZGVyID0ge30KKyAgICAgICAg
cmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXSA9IHt9CisgICAgICAgIHJldHVybiByZXN1
bHRzX2Zvcl9idWlsZGVyCisKKyAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJf
b2ZfYnVpbGRzKHNlbGYsIGVuY29kZWRfbGlzdCk6CisgICAgICAgICIiIlJlbW92ZXMgaXRlbXMg
ZnJvbSB0aGUgcnVuLWxlbmd0aCBlbmNvZGVkIGxpc3QgYWZ0ZXIgdGhlIGZpbmFsCisgICAgICAg
IGl0ZW0gdGhhdCBleGNlZWRzIHRoZSBtYXggbnVtYmVyIG9mIGJ1aWxkcyB0byB0cmFjay4KKwor
ICAgICAgICBBcmdzOgorICAgICAgICAgIGVuY29kZWRfcmVzdWx0czogcnVuLWxlbmd0aCBlbmNv
ZGVkIHJlc3VsdHMuIEFuIGFycmF5IG9mIGFycmF5cywgZS5nLgorICAgICAgICAgICAgICBbWzMs
J0EnXSxbMSwnUSddXSBlbmNvZGVzIEFBQVEuCisgICAgICAgICIiIgorICAgICAgICBudW1fYnVp
bGRzID0gMAorICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBlbmNvZGVk
X2xpc3Q6CisgICAgICAgICAgICBudW1fYnVpbGRzID0gbnVtX2J1aWxkcyArIHJlc3VsdFswXQor
ICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKKyAgICAgICAgICAgIGlmIG51bV9idWlsZHMg
PiBzZWxmLk1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19MT0c6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZWRfbGlzdFs6aW5kZXhdCisgICAgICAgIHJldHVybiBlbmNvZGVkX2xp
c3QKKworICAgIGRlZiBfbm9ybWFsaXplX3Jlc3VsdHNfanNvbihzZWxmLCB0ZXN0LCB0ZXN0X25h
bWUsIHRlc3RzKToKKyAgICAgICAgIiIiIFBydW5lIHRlc3RzIHdoZXJlIGFsbCBydW5zIHBhc3Mg
b3IgdGVzdHMgdGhhdCBubyBsb25nZXIgZXhpc3QgYW5kCisgICAgICAgIHRydW5jYXRlIGFsbCBy
ZXN1bHRzIHRvIG1heE51bWJlck9mQnVpbGRzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
dGVzdDogUmVzdWx0c0FuZFRpbWVzIG9iamVjdCBmb3IgdGhpcyB0ZXN0LgorICAgICAgICAgIHRl
c3RfbmFtZTogTmFtZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgICB0ZXN0czogVGhlIEpTT04gb2Jq
ZWN0IHdpdGggYWxsIHRoZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgYnVpbGRlci4KKyAgICAgICAg
IiIiCisgICAgICAgIHRlc3Rbc2VsZi5SRVNVTFRTXSA9IHNlbGYuX3JlbW92ZV9pdGVtc19vdmVy
X21heF9udW1iZXJfb2ZfYnVpbGRzKAorICAgICAgICAgICAgdGVzdFtzZWxmLlJFU1VMVFNdKQor
ICAgICAgICB0ZXN0W3NlbGYuVElNRVNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251
bWJlcl9vZl9idWlsZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYuVElNRVNdKQorCisgICAgICAg
IGlzX2FsbF9wYXNzID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlwZSh0ZXN0W3NlbGYuUkVT
VUxUU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLlBBU1NfUkVTVUxUKQorICAgICAgICBpc19hbGxfbm9fZGF0YSA9IHNlbGYuX2lzX3Jl
c3VsdHNfYWxsX29mX3R5cGUodGVzdFtzZWxmLlJFU1VMVFNdLAorICAgICAgICAgICAgc2VsZi5O
T19EQVRBX1JFU1VMVCkKKyAgICAgICAgbWF4X3RpbWUgPSBtYXgoW3RpbWVbMV0gZm9yIHRpbWUg
aW4gdGVzdFtzZWxmLlRJTUVTXV0pCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIHBhc3Nlcy9uby1k
YXRhIGZyb20gdGhlIHJlc3VsdHMgdG8gcmVkdWNlIG5vaXNlIGFuZAorICAgICAgICAjIGZpbGVz
aXplLiBJZiBhIHRlc3QgcGFzc2VzIGV2ZXJ5IHJ1biwgYnV0IHRha2VzID4gTUlOX1RJTUUgdG8g
cnVuLAorICAgICAgICAjIGRvbid0IHRocm93IGF3YXkgdGhlIGRhdGEuCisgICAgICAgIGlmIGlz
X2FsbF9ub19kYXRhIG9yIChpc19hbGxfcGFzcyBhbmQgbWF4X3RpbWUgPD0gc2VsZi5NSU5fVElN
RSk6CisgICAgICAgICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQorCisgICAgZGVmIF9pc19yZXN1
bHRzX2FsbF9vZl90eXBlKHNlbGYsIHJlc3VsdHMsIHR5cGUpOgorICAgICAgICAiIiJSZXR1cm5z
IHdoZXRoZXIgYWxsIHRoZSByZXN1bHRzIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZQorICAgICAgICAo
ZS5nLiBhbGwgcGFzc2VzKS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihyZXN1bHRzKSA9PSAxIGFu
ZCByZXN1bHRzWzBdWzFdID09IHR5cGUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0
c19nZW5lcmF0b3IucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbGlnaHR0cGQuY29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mCShyZXZpc2lv
biAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvbGlnaHR0cGQuY29uZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorc2Vy
dmVyLnRhZyAgICAgICAgICAgICAgICAgID0gIkxpZ2h0VFBELzEuNC4xOSAoV2luMzIpIgorc2Vy
dmVyLm1vZHVsZXMgICAgICAgICAgICAgID0gKCAibW9kX2FjY2Vzc2xvZyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWxpYXMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibW9kX2NnaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJt
b2RfcmV3cml0ZSIgKQorCisjIGRlZmF1bHQgZG9jdW1lbnQgcm9vdCByZXF1aXJlZAorc2VydmVy
LmRvY3VtZW50LXJvb3QgPSAiLiIKKworIyBmaWxlcyB0byBjaGVjayBmb3IgaWYgLi4uLyBpcyBy
ZXF1ZXN0ZWQKK2luZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICggImluZGV4LnBocCIsICJp
bmRleC5wbCIsICJpbmRleC5jZ2kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aW5kZXguaHRtbCIsICJpbmRleC5odG0iLCAiZGVmYXVsdC5odG0iICkKKyMgbWltZXR5cGUgbWFw
cGluZworbWltZXR5cGUuYXNzaWduICAgICAgICAgICAgID0gKAorICAiLmdpZiIgICAgICAgICAg
PT4gICAgICAiaW1hZ2UvZ2lmIiwKKyAgIi5qcGciICAgICAgICAgID0+ICAgICAgImltYWdlL2pw
ZWciLAorICAiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIucG5nIiAg
ICAgICAgICA9PiAgICAgICJpbWFnZS9wbmciLAorICAiLnN2ZyIgICAgICAgICAgPT4gICAgICAi
aW1hZ2Uvc3ZnK3htbCIsCisgICIuY3NzIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2NzcyIsCisg
ICIuaHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmh0bSIgICAgICAgICAg
PT4gICAgICAidGV4dC9odG1sIiwKKyAgIi54aHRtbCIgICAgICAgID0+ICAgICAgImFwcGxpY2F0
aW9uL3hodG1sK3htbCIsCisgICIuanMiICAgICAgICAgICA9PiAgICAgICJ0ZXh0L2phdmFzY3Jp
cHQiLAorICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY29uZiIg
ICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50ZXh0IiAgICAgICAgID0+ICAgICAg
InRleHQvcGxhaW4iLAorICAiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisg
ICIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIueG1sIiAgICAgICAgICA9
PiAgICAgICJ0ZXh0L3htbCIsCisgICIubWFuaWZlc3QiICAgICA9PiAgICAgICJ0ZXh0L2NhY2hl
LW1hbmlmZXN0IiwKKyApCisKKyMgVXNlIHRoZSAiQ29udGVudC1UeXBlIiBleHRlbmRlZCBhdHRy
aWJ1dGUgdG8gb2J0YWluIG1pbWUgdHlwZSBpZiBwb3NzaWJsZQorbWltZXR5cGUudXNlLXhhdHRy
ICAgICAgICAgID0gImVuYWJsZSIKKworIyMKKyMgd2hpY2ggZXh0ZW5zaW9ucyBzaG91bGQgbm90
IGJlIGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKKyMKKyMgLnBocCwgLnBsLCAuZmNn
aSBhcmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9yIG1vZF9jZ2kKK3N0YXRp
Yy1maWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBsIiwgIi5jZ2kiICkKKwor
c2VydmVyLmJpbmQgPSAibG9jYWxob3N0Igorc2VydmVyLnBvcnQgPSA4MDAxCisKKyMjIHZpcnR1
YWwgZGlyZWN0b3J5IGxpc3RpbmdzCitkaXItbGlzdGluZy5hY3RpdmF0ZSAgICAgICAgPSAiZW5h
YmxlIgorI2Rpci1saXN0aW5nLmVuY29kaW5nICAgICAgID0gImlzby04ODU5LTIiCisjZGlyLWxp
c3RpbmcuZXh0ZXJuYWwtY3NzICAgPSAic3R5bGUvb2xkc3R5bGUuY3NzIgorCisjIyBlbmFibGUg
ZGVidWdnaW5nCisjZGVidWcubG9nLXJlcXVlc3QtaGVhZGVyICAgPSAiZW5hYmxlIgorI2RlYnVn
LmxvZy1yZXNwb25zZS1oZWFkZXIgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVxdWVzdC1oYW5k
bGluZyA9ICJlbmFibGUiCisjZGVidWcubG9nLWZpbGUtbm90LWZvdW5kICAgPSAiZW5hYmxlIgor
CisjIyMjIFNTTCBlbmdpbmUKKyNzc2wuZW5naW5lICAgICAgICAgICAgICAgICA9ICJlbmFibGUi
Cisjc3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBlbSIKKworIyBSZXdyaXRl
IHJ1bGUgZm9yIHV0Zi04IHBhdGggdGVzdCAoTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkvdXRm
OC1wYXRoLmh0bWwpCisjIFNlZSB0aGUgYXBhY2hlIHJld3JpdGUgcnVsZSBhdCBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3VyaS9pbnRlcmNlcHQvLmh0YWNjZXNzCisjIFJld3JpdGUgcnVsZSBmb3Ig
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9jeXJpbGxpYy11cmkuaHRtbC4KKyMgU2Vl
IHRoZSBhcGFjaGUgcmV3cml0ZSBydWxlIGF0CisjIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBw
Y2FjaGUvcmVzb3VyY2VzL2ludGVyY2VwdC8uaHRhY2Nlc3MKK3VybC5yZXdyaXRlLW9uY2UgPSAo
CisgICJeL3VyaS9pbnRlcmNlcHQvKC4qKSIgPT4gIi91cmkvcmVzb3VyY2VzL3ByaW50LXVyaS5w
aHAiLAorICAiXi9hcHBjYWNoZS9yZXNvdXJjZXMvaW50ZXJjZXB0LyguKikiID0+ICIvYXBwY2Fj
aGUvcmVzb3VyY2VzL3ByaW50LXVyaS5waHAiCispCisKKyMgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9yZXNwb25zZS1lbmNvZGluZy5odG1sIHVzZXMgYW4gaHRhY2Nlc3MK
KyMgdG8gb3ZlcnJpZGUgY2hhcnNldCBmb3IgcmVwbHkyLnR4dCwgcmVwbHkyLnhtbCwgYW5kIHJl
cGx5NC50eHQuCiskSFRUUFsidXJsIl0gPX4gIl4veG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Jl
cGx5Mi4odHh0fHhtbCkiIHsKKyAgbWltZXR5cGUuYXNzaWduID0gKAorICAgICIudHh0IiA9PiAi
dGV4dC9wbGFpbjsgY2hhcnNldD13aW5kb3dzLTEyNTEiLAorICAgICIueG1sIiA9PiAidGV4dC94
bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIgorICApCit9CiskSFRUUFsidXJsIl0gPX4gIl4veG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlcGx5NC50eHQiIHsKKyAgbWltZXR5cGUuYXNzaWduID0g
KCAiLnR4dCIgPT4gInRleHQvcGxhaW47IGNoYXJzZXQ9a29pOC1yIiApCit9CisKKyMgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUuaHRtbCB1c2VzIGFu
IGh0YWNjZXNzCisjIHRvIG92ZXJyaWRlIG1pbWUgdHlwZSBmb3Igd3JvbmctY29udGVudC10eXBl
Lm1hbmlmZXN0LgorJEhUVFBbInVybCJdID1+ICJeL2FwcGNhY2hlL3Jlc291cmNlcy93cm9uZy1j
b250ZW50LXR5cGUubWFuaWZlc3QiIHsKKyAgbWltZXR5cGUuYXNzaWduID0gKCAiLm1hbmlmZXN0
IiA9PiAidGV4dC9wbGFpbiIgKQorfQorCisjIEF1dG9nZW5lcmF0ZWQgdGVzdC1zcGVjaWZpYyBj
b25maWcgZm9sbG93cy4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
dGVyZWRfc3RyZWFtLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiIKK1BhY2thZ2UgdGhhdCBpbXBsZW1lbnRzIGEgc3RyZWFtIHdyYXBw
ZXIgdGhhdCBoYXMgJ21ldGVycycgYXMgd2VsbCBhcworcmVndWxhciBvdXRwdXQuIEEgJ21ldGVy
JyBpcyBhIHNpbmdsZSBsaW5lIG9mIHRleHQgdGhhdCBjYW4gYmUgZXJhc2VkCithbmQgcmV3cml0
dGVuIHJlcGVhdGVkbHksIHdpdGhvdXQgcHJvZHVjaW5nIG11bHRpcGxlIGxpbmVzIG9mIG91dHB1
dC4gSXQKK2NhbiBiZSB1c2VkIHRvIHByb2R1Y2UgZWZmZWN0cyBsaWtlIHByb2dyZXNzIGJhcnMu
CisiIiIKKworCitjbGFzcyBNZXRlcmVkU3RyZWFtOgorICAgICIiIlRoaXMgY2xhc3MgaXMgYSB3
cmFwcGVyIGFyb3VuZCBhIHN0cmVhbSB0aGF0IGFsbG93cyB5b3UgdG8gaW1wbGVtZW50CisgICAg
bWV0ZXJzLgorCisgICAgSXQgY2FuIGJlIHVzZWQgbGlrZSBhIHN0cmVhbSwgYnV0IGNhbGxpbmcg
dXBkYXRlKCkgd2lsbCBwcmludAorICAgIHRoZSBzdHJpbmcgZm9sbG93ZWQgYnkgb25seSBhIGNh
cnJpYWdlIHJldHVybiAoaW5zdGVhZCBvZiBhIGNhcnJpYWdlCisgICAgcmV0dXJuIGFuZCBhIGxp
bmUgZmVlZCkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHByb2dyZXNzIGJhcnMgYW5k
CisgICAgb3RoZXIgc29ydHMgb2YgbWV0ZXJzLiBOb3RlIHRoYXQgYW55dGhpbmcgd3JpdHRlbiBi
eSB1cGRhdGUoKSB3aWxsIGJlCisgICAgZXJhc2VkIGJ5IGEgc3Vic2VxdWVudCB1cGRhdGUoKSwg
d3JpdGUoKSwgb3IgZmx1c2goKS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJib3Nl
LCBzdHJlYW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB2ZXJib3Nl
OiB3aGV0aGVyIHVwZGF0ZSBpcyBhIG5vLW9wCisgICAgICAgICAgc3RyZWFtOiBvdXRwdXQgc3Ry
ZWFtIHRvIHdyaXRlIHRvCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9kaXJ0eSA9IEZhbHNl
CisgICAgICAgIHNlbGYuX3ZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgIHNlbGYuX3N0cmVhbSA9
IHN0cmVhbQorICAgICAgICBzZWxmLl9sYXN0X3VwZGF0ZSA9ICIiCisKKyAgICBkZWYgd3JpdGUo
c2VsZiwgdHh0KToKKyAgICAgICAgIiIiV3JpdGUgdGV4dCBkaXJlY3RseSB0byB0aGUgc3RyZWFt
LCBvdmVyd3JpdGluZyBhbmQgcmVzZXR0aW5nIHRoZQorICAgICAgICBtZXRlci4iIiIKKyAgICAg
ICAgaWYgc2VsZi5fZGlydHk6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZSgiIikKKyAgICAgICAg
ICAgIHNlbGYuX2RpcnR5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHR4dCkK
KworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgIiIiRmx1c2ggYW55IGJ1ZmZlcmVkIG91
dHB1dC4iIiIKKyAgICAgICAgc2VsZi5fc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiB1cGRhdGUo
c2VsZiwgc3RyKToKKyAgICAgICAgIiIiV3JpdGUgYW4gdXBkYXRlIHRvIHRoZSBzdHJlYW0gdGhh
dCB3aWxsIGdldCBvdmVyd3JpdHRlbiBieSB0aGUgbmV4dAorICAgICAgICB1cGRhdGUoKSBvciBi
eSBhIHdyaXRlKCkuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIGZvciBwcm9ncmVzcyB1cGRhdGVz
IHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgaW4KKyAgICAgICAgdGhlIGxvZy4gTm90
ZSB0aGF0IHZlcmJvc2UgZGlzYWJsZXMgdGhpcyByb3V0aW5lOyB3ZSBoYXZlIHRoaXMgaW4KKyAg
ICAgICAgY2FzZSB3ZSBhcmUgbG9nZ2luZyBsb3RzIG9mIG91dHB1dCBhbmQgdGhlIHVwZGF0ZSgp
cyB3aWxsIGdldCBsb3N0CisgICAgICAgIG9yIHdvbid0IHdvcmsgcHJvcGVybHkgKHR5cGljYWxs
eSBiZWNhdXNlIHZlcmJvc2Ugc3RyZWFtcyBhcmUKKyAgICAgICAgcmVkaXJlY3RlZCB0byBmaWxl
cy4KKworICAgICAgICBUT0RPKGRwcmFua2UpOiBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgd2F5
IHRvIGRldGVjdCBpZiB3ZSdyZSB3cml0aW5nCisgICAgICAgIHRvIGEgc3RyZWFtIHRoYXQgaGFu
ZGxlcyBDUnMgY29ycmVjdGx5IChlLmcuLCB0ZXJtaW5hbHMpLiBUaGF0IG1pZ2h0CisgICAgICAg
IGJlIGEgY2xlYW5lciB3YXkgb2YgaGFuZGxpbmcgdGhpcy4KKyAgICAgICAgIiIiCisgICAgICAg
IGlmIHNlbGYuX3ZlcmJvc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFByaW50
IHRoZSBuZWNlc3NhcnkgbnVtYmVyIG9mIGJhY2tzcGFjZXMgdG8gZXJhc2UgdGhlIHByZXZpb3Vz
CisgICAgICAgICMgbWVzc2FnZS4KKyAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCJcYiIgKiBs
ZW4oc2VsZi5fbGFzdF91cGRhdGUpKQorICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc3RyKQor
ICAgICAgICBudW1fcmVtYWluaW5nID0gbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSAtIGxlbihzdHIp
CisgICAgICAgIGlmIG51bV9yZW1haW5pbmcgPiAwOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFt
LndyaXRlKCIgIiAqIG51bV9yZW1haW5pbmcgKyAiXGIiICogbnVtX3JlbWFpbmluZykKKyAgICAg
ICAgc2VsZi5fbGFzdF91cGRhdGUgPSBzdHIKKyAgICAgICAgc2VsZi5fZGlydHkgPSBUcnVlCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wYXRoX3V0aWxzLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3BhdGhfdXRpbHMucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wYXRoX3V0aWxzLnB5CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
QykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIlRoaXMgcGFja2FnZSBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIG1h
bmlwdWxhdGluZyBwYXRocyBhbmQKK2ZpbGVuYW1lcyBmb3IgdGVzdCByZXN1bHRzIGFuZCBiYXNl
bGluZXMuIEl0IGFsc28gY29udGFpbnMgd3JhcHBlcnMKK29mIGEgZmV3IHJvdXRpbmVzIGluIHBs
YXRmb3JtX3V0aWxzLnB5IHNvIHRoYXQgcGxhdGZvcm1fdXRpbHMucHkgY2FuCitiZSBjb25zaWRl
cmVkIGEgJ3Byb3RlY3RlZCcgcGFja2FnZSAtIGkuZS4sIHRoaXMgZmlsZSBzaG91bGQgYmUKK3Ro
ZSBvbmx5IGZpbGUgdGhhdCBldmVyIGluY2x1ZGVzIHBsYXRmb3JtX3V0aWxzLiBUaGlzIGxlYWRz
IHRvCit1cyBpbmNsdWRpbmcgYSBmZXcgdGhpbmdzIHRoYXQgZG9uJ3QgcmVhbGx5IGhhdmUgYW55
dGhpbmcgdG8gZG8KKyB3aXRoIHBhdGhzLCB1bmZvcnR1bmF0ZWx5LiIiIgorCitpbXBvcnQgZXJy
bm8KK2ltcG9ydCBvcworaW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBsYXRmb3Jt
X3V0aWxzCitpbXBvcnQgcGxhdGZvcm1fdXRpbHNfd2luCitpbXBvcnQgcGxhdGZvcm1fdXRpbHNf
bWFjCitpbXBvcnQgcGxhdGZvcm1fdXRpbHNfbGludXgKKworIyBDYWNoZSBzb21lIHZhbHVlcyBz
byB3ZSBkb24ndCBoYXZlIHRvIHJlY2FsY3VsYXRlIHRoZW0uIF9iYXNlZGlyIGlzCisjIHVzZWQg
YnkgUGF0aEZyb21CYXNlKCkgYW5kIGNhY2hlcyB0aGUgZnVsbCAobmF0aXZlKSBwYXRoIHRvIHRo
ZSB0b3AKKyMgb2YgdGhlIHNvdXJjZSB0cmVlICgvc3JjKS4gX2Jhc2VsaW5lX3NlYXJjaF9wYXRo
IGlzIHVzZWQgYnkKKyMgRXhwZWN0ZWRCYXNlbGluZXMoKSBhbmQgY2FjaGVzIHRoZSBsaXN0IG9m
IG5hdGl2ZSBwYXRocyB0byBzZWFyY2gKKyMgZm9yIGJhc2VsaW5lIHJlc3VsdHMuCitfYmFzZWRp
ciA9IE5vbmUKK19iYXNlbGluZV9zZWFyY2hfcGF0aCA9IE5vbmUKKworCitjbGFzcyBQYXRoTm90
Rm91bmQoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworZGVmIGxheW91dF90ZXN0c19kaXIoKToK
KyAgICAiIiJSZXR1cm5zIHRoZSBmdWxseS1xdWFsaWZpZWQgcGF0aCB0byB0aGUgZGlyZWN0b3J5
IGNvbnRhaW5pbmcgdGhlIGlucHV0CisgICAgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQg
dGVzdC4iIiIKKyAgICByZXR1cm4gcGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktp
dCcsICdMYXlvdXRUZXN0cycpCisKKworZGVmIGNocm9taXVtX2Jhc2VsaW5lX3BhdGgocGxhdGZv
cm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkg
Y29udGFpbmluZyBleHBlY3RlZAorICAgIGJhc2VsaW5lIHJlc3VsdHMgZnJvbSBjaHJvbWl1bSBw
b3J0cy4gSWYgfHBsYXRmb3JtfCBpcyBOb25lLCB0aGUKKyAgICBjdXJyZW50bHkgZXhlY3V0aW5n
IHBsYXRmb3JtIGlzIHVzZWQuCisKKyAgICBOb3RlOiBhbHRob3VnaCBkaXJlY3RseSByZWZlcmVu
Y2luZyBpbmRpdmlkdWFsIHBsYXRmb3JtX3V0aWxzXyogZmlsZXMgaXMKKyAgICB1c3VhbGx5IGRp
c2NvdXJhZ2VkLCB3ZSBhbGxvdyBpdCBoZXJlIHNvIHRoYXQgdGhlIHJlYmFzZWxpbmluZyB0b29s
IGNhbgorICAgIHB1bGwgYmFzZWxpbmVzIGZvciBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0aGUgaG9z
dCBwbGF0Zm9ybS4iIiIKKworICAgICMgTm9ybWFsaXplIHRoZSBwbGF0Zm9ybSBzdHJpbmcuCisg
ICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQorICAgIGlmIHBsYXRmb3JtLnN0
YXJ0c3dpdGgoJ2Nocm9taXVtLW1hYycpOgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNf
bWFjLmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCisgICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRo
KCdjaHJvbWl1bS13aW4nKToKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX3dpbi5iYXNl
bGluZV9wYXRoKHBsYXRmb3JtKQorICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21p
dW0tbGludXgnKToKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX2xpbnV4LmJhc2VsaW5l
X3BhdGgocGxhdGZvcm0pCisKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuYmFzZWxpbmVfcGF0
aCgpCisKKworZGVmIHdlYmtpdF9iYXNlbGluZV9wYXRoKHBsYXRmb3JtKToKKyAgICAiIiJSZXR1
cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGV4cGVjdGVkCisg
ICAgYmFzZWxpbmUgcmVzdWx0cyBmcm9tIFdlYktpdCBwb3J0cy4iIiIKKyAgICByZXR1cm4gcGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtKQorCisKK2RlZiBiYXNl
bGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaXN0
IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMgZm9yIGEKKyAg
ICBnaXZlbiBwbGF0Zm9ybSwgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0
aXZlIHRvIHRoZSB0b3Agb2YKKyAgICB0aGUgc291cmNlIHRyZWUuIElmIHBhcmFtZXRlciBwbGF0
Zm9ybSBpcyBOb25lLCByZXR1cm5zIHRoZSBsaXN0IGZvciB0aGUKKyAgICBjdXJyZW50IHBsYXRm
b3JtIHRoYXQgdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uLgorCisgICAgTm90ZTogYWx0aG91Z2gg
ZGlyZWN0bHkgcmVmZXJlbmNpbmcgaW5kaXZpZHVhbCBwbGF0Zm9ybV91dGlsc18qIGZpbGVzIGlz
CisgICAgdXN1YWxseSBkaXNjb3VyYWdlZCwgd2UgYWxsb3cgaXQgaGVyZSBzbyB0aGF0IHRoZSBy
ZWJhc2VsaW5pbmcgdG9vbCBjYW4KKyAgICBwdWxsIGJhc2VsaW5lcyBmb3IgcGxhdGZvcm1zIG90
aGVyIHRoYW4gdGhlIGhvc3QgcGxhdGZvcm0uIiIiCisKKyAgICAjIE5vcm1hbGl6ZSB0aGUgcGxh
dGZvcm0gbmFtZS4KKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUocGxhdGZvcm0pCisgICAg
aWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6CisgICAgICAgIHJldHVybiBw
bGF0Zm9ybV91dGlsc19tYWMuYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCisgICAgZWxp
ZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS13aW4nKToKKyAgICAgICAgcmV0dXJuIHBs
YXRmb3JtX3V0aWxzX3dpbi5iYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKKyAgICBlbGlm
IHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWxpbnV4Jyk6CisgICAgICAgIHJldHVybiBw
bGF0Zm9ybV91dGlsc19saW51eC5iYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKKyAgICBy
ZXR1cm4gcGxhdGZvcm1fdXRpbHMuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQorCisKK2RlZiBleHBl
Y3RlZF9iYXNlbGluZXMoZmlsZW5hbWUsIHN1ZmZpeCwgcGxhdGZvcm09Tm9uZSwgYWxsX2Jhc2Vs
aW5lcz1GYWxzZSk6CisgICAgIiIiR2l2ZW4gYSB0ZXN0IG5hbWUsIGZpbmRzIHdoZXJlIHRoZSBi
YXNlbGluZSByZXN1bHRzIGFyZSBsb2NhdGVkLgorCisgICAgQXJnczoKKyAgICAgICBmaWxlbmFt
ZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCisgICAgICAgc3VmZml4OiBmaWxlIHN1
ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5nLiAnLnR4dCcK
KyAgICAgICAgICAgb3IgJy5wbmcnLiAgVGhpcyBzaG91bGQgbm90IGJlIE5vbmUsIGJ1dCBtYXkg
YmUgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgIHBsYXRmb3JtOiBsYXlvdXQgdGVzdCBwbGF0Zm9y
bTogJ3dpbicsICdsaW51eCcgb3IgJ21hYycuIERlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAg
IHRoZSBjdXJyZW50IHBsYXRmb3JtLgorICAgICAgIGFsbF9iYXNlbGluZXM6IElmIFRydWUsIHJl
dHVybiBhbiBvcmRlcmVkIGxpc3Qgb2YgYWxsIGJhc2VsaW5lIHBhdGhzCisgICAgICAgICAgICAg
ICAgICAgICAgZm9yIHRoZSBnaXZlbiBwbGF0Zm9ybS4gSWYgRmFsc2UsIHJldHVybiBvbmx5IHRo
ZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgIG9uZS4KKyAgICBSZXR1cm5zCisgICAgICAg
YSBsaXN0IG9mICggcGxhdGZvcm1fZGlyLCByZXN1bHRzX2ZpbGVuYW1lICksIHdoZXJlCisgICAg
ICAgICBwbGF0Zm9ybV9kaXIgLSBhYnMgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSByZXN1bHRzIHRy
ZWUgKG9yIHRlc3QgdHJlZSkKKyAgICAgICAgIHJlc3VsdHNfZmlsZW5hbWUgLSByZWxhdGl2ZSBw
YXRoIGZyb20gdG9wIG9mIHRyZWUgdG8gdGhlIHJlc3VsdHMgZmlsZQorICAgICAgICAgICAob3Mu
cGF0aC5qb2luIG9mIHRoZSB0d28gZ2l2ZXMgeW91IHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUs
CisgICAgICAgICAgICB1bmxlc3MgTm9uZSB3YXMgcmV0dXJuZWQuKQorICAgICAgUmV0dXJuIHZh
bHVlcyB3aWxsIGJlIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHBs
YXRmb3JtCisgICAgICAoZS5nLiwgIlxcIiBmb3IgcGF0aCBzZXBhcmF0b3JzIG9uIFdpbmRvd3Mp
LiBJZiB0aGUgcmVzdWx0cyBmaWxlIGlzIG5vdAorICAgICAgZm91bmQsIHRoZW4gTm9uZSB3aWxs
IGJlIHJldHVybmVkIGZvciB0aGUgZGlyZWN0b3J5LCBidXQgdGhlIGV4cGVjdGVkCisgICAgICBy
ZWxhdGl2ZSBwYXRobmFtZSB3aWxsIHN0aWxsIGJlIHJldHVybmVkLgorICAgICIiIgorICAgIGds
b2JhbCBfYmFzZWxpbmVfc2VhcmNoX3BhdGgKKyAgICBnbG9iYWwgX3NlYXJjaF9wYXRoX3BsYXRm
b3JtCisgICAgdGVzdG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KHJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUoZmlsZW5hbWUpKVswXQorCisgICAgYmFzZWxpbmVfZmlsZW5hbWUgPSB0ZXN0bmFtZSArICct
ZXhwZWN0ZWQnICsgc3VmZml4CisKKyAgICBpZiAoX2Jhc2VsaW5lX3NlYXJjaF9wYXRoIGlzIE5v
bmUpIG9yIChfc2VhcmNoX3BhdGhfcGxhdGZvcm0gIT0gcGxhdGZvcm0pOgorICAgICAgICBfYmFz
ZWxpbmVfc2VhcmNoX3BhdGggPSBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKKyAgICAg
ICAgX3NlYXJjaF9wYXRoX3BsYXRmb3JtID0gcGxhdGZvcm0KKworICAgIGJhc2VsaW5lcyA9IFtd
CisgICAgZm9yIHBsYXRmb3JtX2RpciBpbiBfYmFzZWxpbmVfc2VhcmNoX3BhdGg6CisgICAgICAg
IGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2Zp
bGVuYW1lKSk6CisgICAgICAgICAgICBiYXNlbGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJh
c2VsaW5lX2ZpbGVuYW1lKSkKKworICAgICAgICBpZiBub3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFz
ZWxpbmVzOgorICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lcworCisgICAgIyBJZiBpdCB3YXNu
J3QgZm91bmQgaW4gYSBwbGF0Zm9ybSBkaXJlY3RvcnksIHJldHVybiB0aGUgZXhwZWN0ZWQgcmVz
dWx0CisgICAgIyBpbiB0aGUgdGVzdCBkaXJlY3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFj
dHVhbGx5IGV4aXN0cy4KKyAgICBwbGF0Zm9ybV9kaXIgPSBsYXlvdXRfdGVzdHNfZGlyKCkKKyAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9m
aWxlbmFtZSkpOgorICAgICAgICBiYXNlbGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2Vs
aW5lX2ZpbGVuYW1lKSkKKworICAgIGlmIGJhc2VsaW5lczoKKyAgICAgICAgcmV0dXJuIGJhc2Vs
aW5lcworCisgICAgcmV0dXJuIFsoTm9uZSwgYmFzZWxpbmVfZmlsZW5hbWUpXQorCisKK2RlZiBl
eHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgc3VmZml4KToKKyAgICAiIiJHaXZlbiBhIHRlc3Qg
bmFtZSwgcmV0dXJucyBhbiBhYnNvbHV0ZSBwYXRoIHRvIGl0cyBleHBlY3RlZCByZXN1bHRzLgor
CisgICAgSWYgbm8gZXhwZWN0ZWQgcmVzdWx0cyBhcmUgZm91bmQgaW4gYW55IG9mIHRoZSBzZWFy
Y2hlZCBkaXJlY3RvcmllcywgdGhlCisgICAgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSB0ZXN0IGl0
c2VsZiBpcyBsb2NhdGVkIHdpbGwgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm4KKyAgICB2YWx1ZSBp
cyBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhdGZvcm0gKGUuZy4sICJcXCIg
Zm9yCisgICAgcGF0aCBzZXBhcmF0b3JzIG9uIHdpbmRvd3MpLgorCisgICAgQXJnczoKKyAgICAg
ICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCisgICAgICAgc3VmZml4
OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5n
LiAnLnR4dCcKKyAgICAgICAgICAgb3IgJy5wbmcnLiAgVGhpcyBzaG91bGQgbm90IGJlIE5vbmUs
IGJ1dCBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgIHBsYXRmb3JtOiB0aGUgbW9zdC1z
cGVjaWZpYyBkaXJlY3RvcnkgbmFtZSB0byB1c2UgdG8gYnVpbGQgdGhlCisgICAgICAgICAgIHNl
YXJjaCBsaXN0IG9mIGRpcmVjdG9yaWVzLCBlLmcuLCAnY2hyb21pdW0td2luJywgb3IKKyAgICAg
ICAgICAgJ2Nocm9taXVtLW1hYy1sZW9wYXJkJyAod2UgZm9sbG93IHRoZSBXZWJLaXQgZm9ybWF0
KQorICAgICIiIgorICAgIHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUgPSBleHBlY3Rl
ZF9iYXNlbGluZXMoZmlsZW5hbWUsIHN1ZmZpeClbMF0KKyAgICBpZiBwbGF0Zm9ybV9kaXI6Cisg
ICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFt
ZSkKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGxheW91dF90ZXN0c19kaXIoKSwgYmFzZWxpbmVf
ZmlsZW5hbWUpCisKKworZGVmIHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpOgorICAg
ICIiIlByb3ZpZGUgdGhlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0IHJlbGF0aXZlIHRvIHRoZSBsYXlv
dXQgdGVzdHMKKyAgICBkaXJlY3RvcnkgYXMgYSB1bml4IHN0eWxlIHBhdGggKGEvYi9jKS4iIiIK
KyAgICByZXR1cm4gX3dpbl9wYXRoX3RvX3VuaXgoZmlsZW5hbWVbbGVuKGxheW91dF90ZXN0c19k
aXIoKSkgKyAxOl0pCisKKworZGVmIF93aW5fcGF0aF90b191bml4KHBhdGgpOgorICAgICIiIkNv
bnZlcnQgYSB3aW5kb3dzIHBhdGggdG8gdXNlIHVuaXgtc3R5bGUgcGF0aCBzZXBhcmF0b3JzIChh
L2IvYykuIiIiCisgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisKKyMKKyMgUm91
dGluZXMgdGhhdCBhcmUgYXJndWFibHkgcGxhdGZvcm0tc3BlY2lmaWMgYnV0IGhhdmUgYmVlbiBt
YWRlCisjIGdlbmVyaWMgZm9yIG5vdyAodGhleSB1c2VkIHRvIGJlIGluIHBsYXRmb3JtX3V0aWxz
XyopCisjCisKKworZGVmIGZpbGVuYW1lX3RvX3VyaShmdWxsX3BhdGgpOgorICAgICIiIkNvbnZl
cnQgYSB0ZXN0IGZpbGUgdG8gYSBVUkkuIiIiCisgICAgTEFZT1VUVEVTVF9IVFRQX0RJUiA9ICJo
dHRwL3Rlc3RzLyIKKyAgICBMQVlPVVRURVNUX1dFQlNPQ0tFVF9ESVIgPSAid2Vic29ja2V0L3Rl
c3RzLyIKKworICAgIHJlbGF0aXZlX3BhdGggPSBfd2luX3BhdGhfdG9fdW5peChyZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKGZ1bGxfcGF0aCkpCisgICAgcG9ydCA9IE5vbmUKKyAgICB1c2Vfc3NsID0g
RmFsc2UKKworICAgIGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aChMQVlPVVRURVNUX0hUVFBf
RElSKToKKyAgICAgICAgIyBodHRwL3Rlc3RzLyBydW4gb2ZmIHBvcnQgODAwMCBhbmQgc3NsLyBv
ZmYgODQ0MworICAgICAgICByZWxhdGl2ZV9wYXRoID0gcmVsYXRpdmVfcGF0aFtsZW4oTEFZT1VU
VEVTVF9IVFRQX0RJUik6XQorICAgICAgICBwb3J0ID0gODAwMAorICAgIGVsaWYgcmVsYXRpdmVf
cGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1RfV0VCU09DS0VUX0RJUik6CisgICAgICAgICMgd2Vi
c29ja2V0L3Rlc3RzLyBydW4gb2ZmIHBvcnQgODg4MCBhbmQgOTMyMworICAgICAgICAjIE5vdGU6
IHRoZSByb290IGlzIC8sIG5vdCB3ZWJzb2NrZXQvdGVzdHMvCisgICAgICAgIHBvcnQgPSA4ODgw
CisKKyAgICAjIE1ha2UgaHR0cC90ZXN0cy9sb2NhbCBydW4gYXMgbG9jYWwgZmlsZXMuIFRoaXMg
aXMgdG8gbWltaWMgdGhlCisgICAgIyBsb2dpYyBpbiBydW4td2Via2l0LXRlc3RzLgorICAgICMg
VE9ETyhqaWFubGkpOiBDb25zaWRlciBleHRlbmRpbmcgdGhpcyB0byAibWVkaWEvIi4KKyAgICBp
ZiBwb3J0IGFuZCBub3QgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKCJsb2NhbC8iKToKKyAgICAg
ICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKCJzc2wvIik6CisgICAgICAgICAgICBwb3J0
ICs9IDQ0MworICAgICAgICAgICAgcHJvdG9jb2wgPSAiaHR0cHMiCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBwcm90b2NvbCA9ICJodHRwIgorICAgICAgICByZXR1cm4gIiVzOi8vMTI3LjAu
MC4xOiV1LyVzIiAlIChwcm90b2NvbCwgcG9ydCwgcmVsYXRpdmVfcGF0aCkKKworICAgIGlmIHN5
cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAgICAgICByZXR1cm4gImZpbGU6
Ly8vIiArIGdldF9hYnNvbHV0ZV9wYXRoKGZ1bGxfcGF0aCkKKyAgICByZXR1cm4gImZpbGU6Ly8i
ICsgZ2V0X2Fic29sdXRlX3BhdGgoZnVsbF9wYXRoKQorCisKK2RlZiBnZXRfYWJzb2x1dGVfcGF0
aChwYXRoKToKKyAgICAiIiJSZXR1cm5zIGFuIGFic29sdXRlIFVOSVggcGF0aC4iIiIKKyAgICBy
ZXR1cm4gX3dpbl9wYXRoX3RvX3VuaXgob3MucGF0aC5hYnNwYXRoKHBhdGgpKQorCisKK2RlZiBt
YXliZV9tYWtlX2RpcmVjdG9yeSgqcGF0aCk6CisgICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVk
IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuIiIiCisgICAgdHJ5OgorICAg
ICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oKnBhdGgpKQorICAgIGV4Y2VwdCBPU0Vycm9y
LCBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJh
aXNlCisKKworZGVmIHBhdGhfZnJvbV9iYXNlKCpjb21wcyk6CisgICAgIiIiUmV0dXJucyBhbiBh
YnNvbHV0ZSBmaWxlbmFtZSBmcm9tIGEgc2V0IG9mIGNvbXBvbmVudHMgc3BlY2lmaWVkCisgICAg
cmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIElmIHRoZSBwYXRoIGRvZXMg
bm90IGV4aXN0LAorICAgIHRoZSBleGNlcHRpb24gUGF0aE5vdEZvdW5kIGlzIHJhaXNlZC4iIiIK
KyAgICBnbG9iYWwgX2Jhc2VkaXIKKyAgICBpZiBfYmFzZWRpciA9PSBOb25lOgorICAgICAgICAj
IFdlIGNvbXB1dGUgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgYnkgZmluZGluZyB0aGUgYWJz
b2x1dGUKKyAgICAgICAgIyBwYXRoIG9mIHRoaXMgc291cmNlIGZpbGUsIGFuZCB0aGVuIGNsaW1i
aW5nIHVwIHRocmVlIGRpcmVjdG9yaWVzCisgICAgICAgICMgYXMgZ2l2ZW4gaW4gc3VicGF0aC4g
SWYgd2UgbW92ZSB0aGlzIGZpbGUsIHN1YnBhdGggbmVlZHMgdG8gYmUKKyAgICAgICAgIyB1cGRh
dGVkLgorICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQorICAgICAgICBz
dWJwYXRoID0gb3MucGF0aC5qb2luKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnKQorICAgICAgICBf
YmFzZWRpciA9IHBhdGhbOnBhdGguaW5kZXgoc3VicGF0aCldCisgICAgcGF0aCA9IG9zLnBhdGgu
am9pbihfYmFzZWRpciwgKmNvbXBzKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToK
KyAgICAgICAgcmFpc2UgUGF0aE5vdEZvdW5kKCdjb3VsZCBub3QgZmluZCAlcycgJSAocGF0aCkp
CisgICAgcmV0dXJuIHBhdGgKKworCitkZWYgcmVtb3ZlX2RpcmVjdG9yeSgqcGF0aCk6CisgICAg
IiIiUmVjdXJzaXZlbHkgcmVtb3ZlcyBhIGRpcmVjdG9yeSwgZXZlbiBpZiBpdCdzIG1hcmtlZCBy
ZWFkLW9ubHkuCisKKyAgICBSZW1vdmUgdGhlIGRpcmVjdG9yeSBsb2NhdGVkIGF0ICpwYXRoLCBp
ZiBpdCBleGlzdHMuCisKKyAgICBzaHV0aWwucm10cmVlKCkgZG9lc24ndCB3b3JrIG9uIFdpbmRv
d3MgaWYgYW55IG9mIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcworICAgIGFyZSByZWFkLW9ubHks
IHdoaWNoIHN2biByZXBvc2l0b3JpZXMgYW5kIHNvbWUgLnN2biBmaWxlcyBhcmUuICBXZSBuZWVk
IHRvCisgICAgYmUgYWJsZSB0byBmb3JjZSB0aGUgZmlsZXMgdG8gYmUgd3JpdGFibGUgKGkuZS4s
IGRlbGV0YWJsZSkgYXMgd2UgdHJhdmVyc2UKKyAgICB0aGUgdHJlZS4KKworICAgIEV2ZW4gd2l0
aCBhbGwgdGhpcywgV2luZG93cyBzdGlsbCBzb21ldGltZXMgZmFpbHMgdG8gZGVsZXRlIGEgZmls
ZSwgY2l0aW5nCisgICAgYSBwZXJtaXNzaW9uIGVycm9yIChtYXliZSBzb21ldGhpbmcgdG8gZG8g
d2l0aCBhbnRpdmlydXMgc2NhbnMgb3IgZGlzaworICAgIGluZGV4aW5nKS4gIFRoZSBiZXN0IHN1
Z2dlc3Rpb24gYW55IG9mIHRoZSB1c2VyIGZvcnVtcyBoYWQgd2FzIHRvIHdhaXQgYQorICAgIGJp
dCBhbmQgdHJ5IGFnYWluLCBzbyB3ZSBkbyB0aGF0IHRvby4gIEl0J3MgaGFuZC13YXZpbmcsIGJ1
dCBzb21ldGltZXMgaXQKKyAgICB3b3Jrcy4gOi8KKyAgICAiIiIKKyAgICBmaWxlX3BhdGggPSBv
cy5wYXRoLmpvaW4oKnBhdGgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6
CisgICAgICAgIHJldHVybgorCisgICAgd2luMzIgPSBGYWxzZQorICAgIGlmIHN5cy5wbGF0Zm9y
bSA9PSAnd2luMzInOgorICAgICAgICB3aW4zMiA9IFRydWUKKyAgICAgICAgIyBTb21lIHBlb3Bs
ZSBkb24ndCBoYXZlIHRoZSBBUElzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlJ2xsIGRvCisg
ICAgICAgICMgd2l0aG91dC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2luMzJhcGkgPSBf
X2ltcG9ydF9fKCd3aW4zMmFwaScpCisgICAgICAgICAgICB3aW4zMmNvbiA9IF9faW1wb3J0X18o
J3dpbjMyY29uJykKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgd2lu
MzIgPSBGYWxzZQorCisgICAgICAgIGRlZiByZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgp
OgorICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgc3RhdC5TX0lXUklURSkKKyAgICAgICAgICAg
IGlmIHdpbjMyOgorICAgICAgICAgICAgICAgIHdpbjMyYXBpLlNldEZpbGVBdHRyaWJ1dGVzKHBh
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luMzJjb24u
RklMRV9BVFRSSUJVVEVfTk9STUFMKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IHJldHVybiBybWZ1bmMocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9y
LCBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFDQ0VTOgorICAgICAg
ICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHByaW50ICdGYWlsZWQgdG8gZGVs
ZXRlICVzOiB0cnlpbmcgYWdhaW4nICUgcmVwcihwYXRoKQorICAgICAgICAgICAgICAgIHRpbWUu
c2xlZXAoMC4xKQorICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKyAgICBlbHNl
OgorCisgICAgICAgIGRlZiByZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgorICAgICAg
ICAgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9z
LnJlbW92ZShwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
cm1mdW5jKHBhdGgpCisKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhmaWxl
X3BhdGgsIHRvcGRvd249RmFsc2UpOgorICAgICAgICAjIEZvciBQT1NJWDogIG1ha2luZyB0aGUg
ZGlyZWN0b3J5IHdyaXRhYmxlIGd1YXJhbnRlZXMgcmVtb3ZhYmlsaXR5LgorICAgICAgICAjIFdp
bmRvd3Mgd2lsbCBpZ25vcmUgdGhlIG5vbi1yZWFkLW9ubHkgYml0cyBpbiB0aGUgY2htb2QgdmFs
dWUuCisgICAgICAgIG9zLmNobW9kKHJvb3QsIDA3NzApCisgICAgICAgIGZvciBuYW1lIGluIGZp
bGVzOgorICAgICAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3MucmVtb3ZlLCBvcy5wYXRoLmpv
aW4ocm9vdCwgbmFtZSkpCisgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICBy
ZW1vdmVfd2l0aF9yZXRyeShvcy5ybWRpciwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorCisg
ICAgcmVtb3ZlX3dpdGhfcmV0cnkob3Mucm1kaXIsIGZpbGVfcGF0aCkKKworIworIyBXcmFwcGVy
cyBhcm91bmQgcGxhdGZvcm1fdXRpbHMKKyMKKworCitkZWYgcGxhdGZvcm1fbmFtZShwbGF0Zm9y
bT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBjaHJvbWl1bSBwbGF0Zm9y
bSBuYW1lIGZvciB8cGxhdGZvcm18LiBJZgorICAgICAgIHxwbGF0Zm9ybXwgaXMgTm9uZSwgcmV0
dXJucyB0aGUgbmFtZSBvZiB0aGUgY2hyb21pdW0gcGxhdGZvcm0gb24gdGhlCisgICAgICAgY3Vy
cmVudGx5IHJ1bm5pbmcgc3lzdGVtLiBJZiB8cGxhdGZvcm18IGlzIG9mIHRoZSBmb3JtICdjaHJv
bWl1bS0qJywKKyAgICAgICBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQsIG90aGVyd2lzZSAnY2hy
b21pdW0tJyBpcyBwcmVwZW5kZWQuIiIiCisgICAgaWYgcGxhdGZvcm0gPT0gTm9uZToKKyAgICAg
ICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLnBsYXRmb3JtX25hbWUoKQorICAgIGlmIG5vdCBwbGF0
Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS0nKToKKyAgICAgICAgcGxhdGZvcm0gPSAiY2hyb21p
dW0tIiArIHBsYXRmb3JtCisgICAgcmV0dXJuIHBsYXRmb3JtCisKKworZGVmIHBsYXRmb3JtX3Zl
cnNpb24oKToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMucGxhdGZvcm1fdmVyc2lvbigpCisK
KworZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgorICAgIHJldHVybiBwbGF0Zm9ybV91
dGlscy5saWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKQorCisKK2RlZiBsaWdodHRwZF9tb2R1bGVf
cGF0aCgpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5saWdodHRwZF9tb2R1bGVfcGF0aCgp
CisKKworZGVmIGxpZ2h0dHBkX3BocF9wYXRoKCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxz
LmxpZ2h0dHBkX3BocF9wYXRoKCkKKworCitkZWYgd2RpZmZfcGF0aCgpOgorICAgIHJldHVybiBw
bGF0Zm9ybV91dGlscy53ZGlmZl9wYXRoKCkKKworCitkZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdl
dCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpCisK
KworZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGls
cy5pbWFnZV9kaWZmX3BhdGgodGFyZ2V0KQorCisKK2RlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0
aCh0YXJnZXQpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5sYXlvdXRfdGVzdF9oZWxwZXJf
cGF0aCh0YXJnZXQpCisKKworZGVmIGZ1enp5X21hdGNoX3BhdGgoKToKKyAgICByZXR1cm4gcGxh
dGZvcm1fdXRpbHMuZnV6enlfbWF0Y2hfcGF0aCgpCisKKworZGVmIHNodXRfZG93bl9odHRwX3Nl
cnZlcihzZXJ2ZXJfcGlkKToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuc2h1dF9kb3duX2h0
dHBfc2VydmVyKHNlcnZlcl9waWQpCisKKworZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxzKCk6Cisg
ICAgcGxhdGZvcm1fdXRpbHMua2lsbF9hbGxfdGVzdF9zaGVsbHMoKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvcGF0aF91dGlscy5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
TEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9wbGF0Zm9ybV91dGlscy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGls
cy5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzLnB5CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEw
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworIiIiUGxhdGZvcm0tc3BlY2lmaWMgdXRpbGl0aWVzIGFuZCBwc2V1ZG8tY29uc3RhbnRzCisK
K0FueSBmdW5jdGlvbnMgd2hvc2UgaW1wbGVtZW50YXRpb25zIG9yIHZhbHVlcyBkaWZmZXIgZnJv
bSBvbmUgcGxhdGZvcm0gdG8KK2Fub3RoZXIgc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlaXIgcmVz
cGVjdGl2ZSBwbGF0Zm9ybV91dGlsc188cGxhdGZvcm0+LnB5Cittb2R1bGVzLiBUaGUgYXBwcm9w
cmlhdGUgb25lIG9mIHRob3NlIHdpbGwgYmUgaW1wb3J0ZWQgaW50byB0aGlzIG1vZHVsZSB0bwor
cHJvdmlkZSBjYWxsZXJzIHdpdGggYSBjb21tb24sIHBsYXRmb3JtLWluZGVwZW5kZW50IGludGVy
ZmFjZS4KKworVGhpcyBmaWxlIHNob3VsZCBvbmx5IGV2ZXIgYmUgaW1wb3J0ZWQgYnkgbGF5b3V0
X3BhY2thZ2UucGF0aF91dGlscy4KKyIiIgorCitpbXBvcnQgc3lzCisKKyMgV2UgbWF5IG5vdCBz
dXBwb3J0IHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB0aGF0IGEgdXNlciBoYXMgaW5zdGFsbGVkIChD
eWd3aW4KKyMgZXNwZWNpYWxseSBoYXMgaGFkIHByb2JsZW1zKSwgYnV0IHdlJ2xsIGFsbG93IHRo
ZSBwbGF0Zm9ybSB1dGlscyB0byBiZQorIyBpbmNsdWRlZCBpbiBhbnkgY2FzZSBzbyB3ZSBkb24n
dCBnZXQgYW4gaW1wb3J0IGVycm9yLgoraWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dp
bjMyJyk6CisgICAgZnJvbSBwbGF0Zm9ybV91dGlsc193aW4gaW1wb3J0ICoKK2VsaWYgc3lzLnBs
YXRmb3JtID09ICdkYXJ3aW4nOgorICAgIGZyb20gcGxhdGZvcm1fdXRpbHNfbWFjIGltcG9ydCAq
CitlbGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2xpbnV4JywgJ2xpbnV4MicsICdmcmVlYnNkNycsICdv
cGVuYnNkNCcpOgorICAgIGZyb20gcGxhdGZvcm1fdXRpbHNfbGludXggaW1wb3J0ICoKClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzLnB5Cl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX2xpbnV4LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3BsYXRmb3JtX3V0aWxzX2xpbnV4LnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1f
dXRpbHNfbGludXgucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ4IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1l
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGhpcyBpcyB0aGUgTGludXgg
aW1wbGVtZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCisgICBw
YWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdl
LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBv
cnQgc3lzCitpbXBvcnQgbG9nZ2luZworCitpbXBvcnQgcGF0aF91dGlscworaW1wb3J0IHBsYXRm
b3JtX3V0aWxzX3dpbgorCisKK2RlZiBwbGF0Zm9ybV9uYW1lKCk6CisgICAgIiIiUmV0dXJucyB0
aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCisg
ICAgcmV0dXJuICdjaHJvbWl1bS1saW51eCcgKyBwbGF0Zm9ybV92ZXJzaW9uKCkKKworCitkZWYg
cGxhdGZvcm1fdmVyc2lvbigpOgorICAgICIiIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIGZv
ciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IKKyAgICAnLXNub3dsZW9wYXJkJy4gSWYg
dGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgICBtaW5vciB2ZXJz
aW9ucywgaXQgcmV0dXJucyAnJy4iIiIKKyAgICByZXR1cm4gJycKKworCitkZWYgZ2V0X251bV9j
b3JlcygpOgorICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGlu
ZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCisgICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0
aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgorICAgIG51bV9jb3JlcyA9IG9zLnN5
c2NvbmYoIlNDX05QUk9DRVNTT1JTX09OTE4iKQorICAgIGlmIGlzaW5zdGFuY2UobnVtX2NvcmVz
LCBpbnQpIGFuZCBudW1fY29yZXMgPiAwOgorICAgICAgICByZXR1cm4gbnVtX2NvcmVzCisgICAg
cmV0dXJuIDEKKworCitkZWYgYmFzZWxpbmVfcGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJS
ZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGZv
ciB0aGUKKyAgICBiYXNlbGluZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0gdmVyc2lvbi4g
SWYgfHBsYXRmb3JtfCBpcyBOb25lLAorICAgIHRoZW4gdGhlIHZlcnNpb24gY3VycmVudGx5IGlu
IHVzZSBpcyB1c2VkLiIiIgorICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6CisgICAgICAgIHBsYXRm
b3JtID0gcGxhdGZvcm1fbmFtZSgpCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0sICdMYXlvdXRUZXN0cycpCisK
KworZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVy
bnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0
cywgaW4KKyAgICBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhl
IHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIiIiCisgICAgcmV0dXJuIFtiYXNlbGluZV9wYXRoKHBs
YXRmb3JtKSwKKyAgICAgICAgICAgIHBsYXRmb3JtX3V0aWxzX3dpbi5iYXNlbGluZV9wYXRoKCdj
aHJvbWl1bS13aW4nKSwKKyAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3Bh
dGgoJ3dpbicpLAorICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgn
bWFjJyldCisKKworZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCisgICAgcGF0aCA9IG9zLnBh
dGguam9pbigiL3VzciIsICJzYmluIiwgImFwYWNoZTIiKQorICAgIGlmIG9zLnBhdGguZXhpc3Rz
KHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aAorICAgIHByaW50ICJVbmFibGUgdG8gZmluZSBB
cGFjaGUgZXhlY3V0YWJsZSAlcyIgJSBwYXRoCisgICAgX21pc3NpbmdfYXBhY2hlKCkKKworCitk
ZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRv
IEFwYWNoZSBjb25maWcgZmlsZSIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAorICAgICAgICAiaHR0
cCIsICJjb25mIiwgImFwYWNoZTItZGViaWFuLWh0dHBkLmNvbmYiKQorCisKK2RlZiBsaWdodHRw
ZF9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGgg
dG8gc3RhcnQgTGlnSFRUUGQiIiIKKyAgICBiaW5wYXRoID0gIi91c3Ivc2Jpbi9saWdodHRwZCIK
KyAgICBpZiBvcy5wYXRoLmV4aXN0cyhiaW5wYXRoKToKKyAgICAgICAgcmV0dXJuIGJpbnBhdGgK
KyAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRUUGQgZXhlY3V0YWJsZSAlcyIgJSBiaW5w
YXRoCisgICAgX21pc3NpbmdfbGlnaHR0cGQoKQorCisKK2RlZiBsaWdodHRwZF9tb2R1bGVfcGF0
aCgpOgorICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBk
IiIiCisgICAgbW9kcGF0aCA9ICIvdXNyL2xpYi9saWdodHRwZCIKKyAgICBpZiBvcy5wYXRoLmV4
aXN0cyhtb2RwYXRoKToKKyAgICAgICAgcmV0dXJuIG1vZHBhdGgKKyAgICBwcmludCAiVW5hYmxl
IHRvIGZpbmQgTGlnSFRUUGQgbW9kdWxlcyAlcyIgJSBtb2RwYXRoCisgICAgX21pc3NpbmdfbGln
aHR0cGQoKQorCisKK2RlZiBsaWdodHRwZF9waHBfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhl
IFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAgYmlucGF0aCA9ICIvdXNy
L2Jpbi9waHAtY2dpIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGJpbnBhdGgpOgorICAgICAgICBy
ZXR1cm4gYmlucGF0aAorICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBQSFAgQ0dJIGV4ZWN1dGFi
bGUgJXMiICUgYmlucGF0aAorICAgIF9taXNzaW5nX2xpZ2h0dHBkKCkKKworCitkZWYgd2RpZmZf
cGF0aCgpOgorICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFz
c3VtZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQKKyAgICBpbiB0aGUgdXNlcidzICRQQVRILiIi
IgorICAgIHJldHVybiAnd2RpZmYnCisKKworZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgor
ICAgICIiIlBhdGggdG8gdGhlIGltYWdlX2RpZmYgYmluYXJ5LgorCisgICAgQXJnczoKKyAgICAg
IHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpIiIiCisgICAgcmV0
dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICdpbWFnZV9kaWZmJykKKworCitk
ZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKKyAgICAiIiJQYXRoIHRvIHRoZSBs
YXlvdXRfdGVzdCBoZWxwZXIgYmluYXJ5LCBpZiBuZWVkZWQsIGVtcHR5IG90aGVyd2lzZSIiIgor
ICAgIHJldHVybiAnJworCisKK2RlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToKKyAgICAiIiJS
ZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciBvdXIgVGVzdFNoZWxs
LgorCisgICAgQXJnczoKKyAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9y
IHJlbGVhc2UpICIiIgorICAgIGlmIHRhcmdldCBpbiAoJ0RlYnVnJywgJ1JlbGVhc2UnKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgZGVidWdfcGF0aCA9IF9wYXRoX2Zyb21fYnVpbGRfcmVz
dWx0cygnRGVidWcnLCAndGVzdF9zaGVsbCcpCisgICAgICAgICAgICByZWxlYXNlX3BhdGggPSBf
cGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoJ1JlbGVhc2UnLCAndGVzdF9zaGVsbCcpCisKKyAgICAg
ICAgICAgIGRlYnVnX210aW1lID0gb3Muc3RhdChkZWJ1Z19wYXRoKS5zdF9tdGltZQorICAgICAg
ICAgICAgcmVsZWFzZV9tdGltZSA9IG9zLnN0YXQocmVsZWFzZV9wYXRoKS5zdF9tdGltZQorCisg
ICAgICAgICAgICBpZiBkZWJ1Z19tdGltZSA+IHJlbGVhc2VfbXRpbWUgYW5kIHRhcmdldCA9PSAn
UmVsZWFzZScgb3IgXAorICAgICAgICAgICAgICAgcmVsZWFzZV9tdGltZSA+IGRlYnVnX210aW1l
IGFuZCB0YXJnZXQgPT0gJ0RlYnVnJzoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1x4
MWJbMzFtV2FybmluZzogeW91IGFyZSBub3QgcnVubmluZyB0aGUgbW9zdCAnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdyZWNlbnQgdGVzdF9zaGVsbCBiaW5hcnkuIFlvdSBuZWVkIHRv
IHBhc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1kZWJ1ZyBvciBub3QgdG8g
c2VsZWN0IGJldHdlZW4gRGVidWcgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1JlbGVhc2UuXHgxYlswbScpCisgICAgICAgICMgVGhpcyB3aWxsIGZhaWwgaWYgd2UgZG9uJ3Qg
aGF2ZSBib3RoIGEgZGVidWcgYW5kIHJlbGVhc2UgYmluYXJ5LgorICAgICAgICAjIFRoYXQncyBm
aW5lIGJlY2F1c2UsIGluIHRoaXMgY2FzZSwgd2UgbXVzdCBhbHJlYWR5IGJlIHJ1bm5pbmcgdGhl
CisgICAgICAgICMgbW9zdCB1cC10by1kYXRlIG9uZS4KKyAgICAgICAgZXhjZXB0IHBhdGhfdXRp
bHMuUGF0aE5vdEZvdW5kOgorICAgICAgICAgICAgcGFzcworCisgICAgcmV0dXJuIF9wYXRoX2Zy
b21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICd0ZXN0X3NoZWxsJykKKworCitkZWYgZnV6enlfbWF0
Y2hfcGF0aCgpOgorICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgZnV6enkgbWF0Y2hlciBi
aW5hcnkuIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3Bh
cnR5JywgJ2Z1enp5bWF0Y2gnLCAnZnV6enltYXRjaCcpCisKKworZGVmIHNodXRfZG93bl9odHRw
X3NlcnZlcihzZXJ2ZXJfcGlkKToKKyAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBz
ZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KKworICAgIEFyZ3M6Cisg
ICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisg
ICAgIiIiCisgICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkg
c3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAgICAg
ICAgIyBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoIHdlYiBz
ZXJ2ZXIgcHJvY2Vzc2VzCisgICAgICAgICMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHks
IGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgICAgICBraWxsX2FsbF9wcm9jZXNzKCdsaWdo
dHRwZCcpCisgICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2FwYWNoZTInKQorICAgIGVsc2U6Cisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RF
Uk0pCisgICAgICAgICAgICAjVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1
c3QgdG8gYmUgc3VyZT8KKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjIFNv
bWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBodHRwZC5waWQgZmls
ZSksCisgICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJRCwganVz
dCB0cnkgdG8gJ2tpbGxhbGwnIHdlYgorICAgICAgICAgICAgIyBzZXJ2ZXJzLgorICAgICAgICAg
ICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCisKKworZGVmIGtpbGxfcHJvY2VzcyhwaWQp
OgorICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgIEFyZ3M6CisgICAg
ICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCisgICAgIiIiCisgICAg
b3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorCisKK2RlZiBraWxsX2FsbF9wcm9jZXNzKHBy
b2Nlc3NfbmFtZSk6CisgICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCkKKyAgICBzdWJwcm9jZXNz
LmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdVU0VSJyksCisgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAgIG51bGwuY2xv
c2UoKQorCisKK2RlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgorICAgICIiIktpbGxzIGFsbCBp
bnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIiIgor
ICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ3Rlc3Rfc2hlbGwnKQorCisjCisjIFByaXZhdGUgaGVscGVy
IGZ1bmN0aW9ucworIworCisKK2RlZiBfbWlzc2luZ19saWdodHRwZCgpOgorICAgIHByaW50ICdQ
bGVhc2UgaW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpZ2h0dHBkIHBocDUt
Y2dpIicKKyAgICBwcmludCAnRm9yIGNvbXBsZXRlIExpbnV4IGJ1aWxkIHJlcXVpcmVtZW50cywg
cGxlYXNlIHNlZTonCisgICAgcHJpbnQgJ2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1
bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlvbnMnCisgICAgc3lzLmV4aXQoMSkKKworCitkZWYg
X21pc3NpbmdfYXBhY2hlKCk6CisgICAgcHJpbnQgKCdQbGVhc2UgaW5zdGFsbCB1c2luZzogInN1
ZG8gYXB0LWdldCBpbnN0YWxsIGFwYWNoZTIgJworICAgICAgICAnbGliYXBhY2hlMi1tb2QtcGhw
NSInKQorICAgIHByaW50ICdGb3IgY29tcGxldGUgTGludXggYnVpbGQgcmVxdWlyZW1lbnRzLCBw
bGVhc2Ugc2VlOicKKyAgICBwcmludCAnaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVt
L3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycKKyAgICBzeXMuZXhpdCgxKQorCisKK2RlZiBf
cGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoKnBhdGhpZXMpOgorICAgICMgRklYTUUoZGtlZ2VsKTog
dXNlIGxhdGVzdCBvciB3YXJuIGlmIG1vcmUgdGhhbiBvbmUgZm91bmQ/CisgICAgZm9yIGRpciBp
biBbInNjb25zYnVpbGQiLCAib3V0IiwgInhjb2RlYnVpbGQiXToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoZGlyLCAqcGF0aGllcykK
KyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgIHJhaXNlIHBhdGhfdXRpbHMu
UGF0aE5vdEZvdW5kKCJVbmFibGUgdG8gZmluZCAlcyBpbiBidWlsZCB0cmVlIiAlCisgICAgICAg
IChvcy5wYXRoLmpvaW4oKnBhdGhpZXMpKSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3Jt
X3V0aWxzX2xpbnV4LnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
SW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3BsYXRmb3JtX3V0aWxzX21hYy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGls
c19tYWMucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHkJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjAxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiVGhpcyBpcyB0aGUgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsYXlv
dXRfcGFja2FnZS5wbGF0Zm9ybV91dGlscworICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3VsZCBv
bmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQg
cGxhdGZvcm0KK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2ltcG9ydCBwYXRo
X3V0aWxzCisKKworZGVmIHBsYXRmb3JtX25hbWUoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1l
IG9mIHRoZSBwbGF0Zm9ybSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKKyAgICAjIEF0
IHRoZSBtb21lbnQgYWxsIGNocm9taXVtIG1hYyByZXN1bHRzIGFyZSB2ZXJzaW9uLWluZGVwZW5k
ZW50LiBBdCBzb21lCisgICAgIyBwb2ludCB3ZSBtYXkgbmVlZCB0byByZXR1cm4gJ2Nocm9taXVt
LW1hYycgKyBQbGF0Zm9ybVZlcnNpb24oKQorICAgIHJldHVybiAnY2hyb21pdW0tbWFjJworCisK
K2RlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6CisgICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJp
bmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgorICAgICctc25vd2xlb3BhcmQn
LiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICAgIG1pbm9y
IHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgorICAgIG9zX3ZlcnNpb25fc3RyaW5nID0gcGxh
dGZvcm0ubWFjX3ZlcigpWzBdICAjIGUuZy4gIjEwLjUuNiIKKyAgICBpZiBub3Qgb3NfdmVyc2lv
bl9zdHJpbmc6CisgICAgICAgIHJldHVybiAnLWxlb3BhcmQnCisKKyAgICByZWxlYXNlX3ZlcnNp
b24gPSBpbnQob3NfdmVyc2lvbl9zdHJpbmcuc3BsaXQoJy4nKVsxXSkKKworICAgICMgd2UgZG9u
J3Qgc3VwcG9ydCAndGlnZXInIG9yIGVhcmxpZXIgcmVsZWFzZXMKKyAgICBpZiByZWxlYXNlX3Zl
cnNpb24gPT0gNToKKyAgICAgICAgcmV0dXJuICctbGVvcGFyZCcKKyAgICBlbGlmIHJlbGVhc2Vf
dmVyc2lvbiA9PSA2OgorICAgICAgICByZXR1cm4gJy1zbm93bGVvcGFyZCcKKworICAgIHJldHVy
biAnJworCisKK2RlZiBnZXRfbnVtX2NvcmVzKCk6CisgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVy
IG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRlZCBtYWNoaW5lcywKKyAg
ICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHByb2Nlc3NvcnMuIiIi
CisgICAgcmV0dXJuIGludChvcy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1IilbMV0ucmVhZCgp
KQorCisKK2RlZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMg
dGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQor
ICAgIGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxh
dGZvcm18IGlzIE5vbmUsCisgICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlz
IHVzZWQuIiIiCisgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgcGxhdGZvcm0gPSBw
bGF0Zm9ybV9uYW1lKCkKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Vi
a2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKworIyBUT0RP
OiBXZSBzaG91bGQgYWRkIGxlb3BhcmQgYW5kIHNub3dsZW9wYXJkIHRvIHRoZSBsaXN0IG9mIHBh
dGhzIHRvIGNoZWNrCisjIG9uY2Ugd2Ugc3RhcnQgcnVubmluZyB0aGUgdGVzdHMgZnJvbSBzbm93
bGVvcGFyZC4KKworCitkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6Cisg
ICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2Vs
aW5lcy9yZXN1bHRzLCBpbgorICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxh
dGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKKyAgICByZXR1cm4gW2Jhc2Vs
aW5lX3BhdGgocGxhdGZvcm0pLAorICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxp
bmVfcGF0aCgnbWFjJyArIHBsYXRmb3JtX3ZlcnNpb24oKSksCisgICAgICAgICAgICBwYXRoX3V0
aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KKworCitkZWYgd2RpZmZfcGF0aCgpOgor
ICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFzc3VtZSBpcyBh
bHJlYWR5IGluc3RhbGxlZCBhbmQKKyAgICBpbiB0aGUgdXNlcidzICRQQVRILiIiIgorICAgIHJl
dHVybiAnd2RpZmYnCisKKworZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgorICAgICIiIlBh
dGggdG8gdGhlIGltYWdlX2RpZmYgZXhlY3V0YWJsZQorCisgICAgQXJnczoKKyAgICAgIHRhcmdl
dDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKKyAgICByZXR1cm4gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgneGNvZGVidWlsZCcsIHRhcmdldCwgJ2ltYWdlX2RpZmYn
KQorCisKK2RlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQpOgorICAgICIiIlBhdGgg
dG8gdGhlIGxheW91dF90ZXN0X2hlbHBlciBleGVjdXRhYmxlLCBpZiBuZWVkZWQsIGVtcHR5IG90
aGVyd2lzZQorCisgICAgQXJnczoKKyAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1Zycs
J1JlbGVhc2UnLGV0Yy4iIiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
eGNvZGVidWlsZCcsIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnbGF5b3V0X3Rlc3RfaGVscGVyJykKKworCitkZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6
CisgICAgIiIiUGF0aCB0byB0aGUgdGVzdF9zaGVsbCBleGVjdXRhYmxlLgorCisgICAgQXJnczoK
KyAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKKyAg
ICAjIFRPRE8ocGlua2VydG9uKTogbWFrZSB8dGFyZ2V0fCBoYXBweSB3aXRoIGNhc2Utc2Vuc2l0
aXZlIGZpbGUgc3lzdGVtcy4KKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
eGNvZGVidWlsZCcsIHRhcmdldCwgJ1Rlc3RTaGVsbC5hcHAnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdDb250ZW50cycsICdNYWNPUycsICdUZXN0U2hlbGwnKQorCisK
K2RlZiBhcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0
YWJsZSBwYXRoIHRvIHN0YXJ0IEFwYWNoZSIiIgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oIi91
c3IiLCAic2JpbiIsICJodHRwZCIpCisKKworZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6
CisgICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKKyAgICBy
ZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0Iiwg
IkxheW91dFRlc3RzIiwKKyAgICAgICAgImh0dHAiLCAiY29uZiIsICJhcGFjaGUyLWh0dHBkLmNv
bmYiKQorCisKK2RlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKKyAgICByZXR1cm4gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmluJywgJ2xpZ2h0dHBkJykK
KworCitkZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaWJy
YXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBh
dGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnbGliJykKKwor
CitkZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBQSFAgZXhlY3V0
YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnYmluJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhwLWNnaScpCisKKworZGVmIHNodXRfZG93
bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToKKyAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBk
IHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KKworICAgICAg
QXJnczoKKyAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcg
c2VydmVyLgorICAgICIiIgorICAgICMgc2VydmVyX3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0dHBf
c2VydmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxseS4KKyAgICBpZiBzZXJ2ZXJfcGlkIGlzIE5v
bmU6CisgICAgICAgICMgVE9ETyhtbW9zcykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291
bGQgY29uZmxpY3Qgd2l0aCBsaWdodHRwZAorICAgICAgICAjIHByb2Nlc3NlcyBub3Qgc3RhcnRl
ZCBieSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCisgICAgICAgIGtp
bGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKKyAgICAgICAga2lsbF9hbGxfcHJvY2VzcygnaHR0
cGQnKQorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmtpbGwoc2VydmVy
X3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJlIHRo
cm93IGluIGEgU0lHS0lMTCBqdXN0IHRvIGJlIHN1cmU/CisgICAgICAgIGV4Y2VwdCBPU0Vycm9y
OgorICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEg
c3RhbGUgaHR0cGQucGlkIGZpbGUpLAorICAgICAgICAgICAgIyBzbyBpZiBraWxsIGZhaWxzIG9u
IHRoZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvICdraWxsYWxsJyB3ZWIKKyAgICAgICAgICAgICMg
c2VydmVycy4KKyAgICAgICAgICAgIHNodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQorCisKK2Rl
ZiBraWxsX3Byb2Nlc3MocGlkKToKKyAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3Mu
CisKKyAgICBBcmdzOgorICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2ls
bGVkLgorICAgICIiIgorICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKworCitkZWYg
a2lsbF9hbGxfcHJvY2Vzcyhwcm9jZXNzX25hbWUpOgorICAgICMgT24gTWFjIE9TIFggMTAuNiwg
a2lsbGFsbCBoYXMgYSBuZXcgY29uc3RyYWludDogLVNJR05BTE5BTUUgb3IKKyAgICAjIC1TSUdO
QUxOVU1CRVIgbXVzdCBjb21lIGZpcnN0LiAgRXhhbXBsZSBwcm9ibGVtOgorICAgICMgICAkIGtp
bGxhbGwgLXUgJFVTRVIgLVRFUk0gbGlnaHR0cGQKKyAgICAjICAga2lsbGFsbDogaWxsZWdhbCBv
cHRpb24gLS0gVAorICAgICMgVXNlIG9mIHRoZSBlYXJsaWVyIC1URVJNIHBsYWNlbWVudCBpcyBq
dXN0IGZpbmUgb24gMTAuNS4KKyAgICBudWxsID0gb3Blbihvcy5kZXZudWxsKQorICAgIHN1YnBy
b2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwK
KyAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAgIG51
bGwuY2xvc2UoKQorCisKK2RlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgorICAgICIiIktpbGxz
IGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5n
LiIiIgorICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ1Rlc3RTaGVsbCcpCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfd2luLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Bs
YXRmb3JtX3V0aWxzX3dpbi5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX3dpbi5w
eQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIGlzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgbGF5b3V0X3BhY2thZ2UucGxhdGZvcm1fdXRpbHMKKyAgIHBhY2thZ2UuIFRoaXMg
ZmlsZSBzaG91bGQgb25seSBiZSBpbXBvcnRlZCBieSB0aGF0IHBhY2thZ2UuIiIiCisKK2ltcG9y
dCBvcworaW1wb3J0IHBhdGhfdXRpbHMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisK
KworZGVmIHBsYXRmb3JtX25hbWUoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBw
bGF0Zm9ybSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKKyAgICAjIFdlJ3JlIG5vdCBy
ZWFkeSBmb3IgdmVyc2lvbi1zcGVjaWZpYyByZXN1bHRzIHlldC4gV2hlbiB3ZSB1bmNvbW1lbnQK
KyAgICAjIHRoaXMsIHdlIGFsc28gbmVlZCB0byBhZGQgaXQgdG8gdGhlIEJhc2VsaW5lU2VhcmNo
UGF0aCgpCisgICAgcmV0dXJuICdjaHJvbWl1bS13aW4nICsgcGxhdGZvcm1fdmVyc2lvbigpCisK
KworZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKKyAgICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0
cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBlLmcuICctdmlzdGEnIG9yCisgICAgJy1zbm93bGVvcGFy
ZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgICAgbWlu
b3IgdmVyc2lvbnMsIGl0IHJldHVybnMgJycuIiIiCisgICAgd2ludmVyID0gc3lzLmdldHdpbmRv
d3N2ZXJzaW9uKCkKKyAgICBpZiB3aW52ZXJbMF0gPT0gNiBhbmQgKHdpbnZlclsxXSA9PSAxKToK
KyAgICAgICAgcmV0dXJuICctNycKKyAgICBpZiB3aW52ZXJbMF0gPT0gNiBhbmQgKHdpbnZlclsx
XSA9PSAwKToKKyAgICAgICAgcmV0dXJuICctdmlzdGEnCisgICAgaWYgd2ludmVyWzBdID09IDUg
YW5kICh3aW52ZXJbMV0gPT0gMSBvciB3aW52ZXJbMV0gPT0gMik6CisgICAgICAgIHJldHVybiAn
LXhwJworICAgIHJldHVybiAnJworCisKK2RlZiBnZXRfbnVtX2NvcmVzKCk6CisgICAgIiIiUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRl
ZCBtYWNoaW5lcywKKyAgICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFs
IHByb2Nlc3NvcnMuIiIiCisgICAgcmV0dXJuIGludChvcy5lbnZpcm9uLmdldCgnTlVNQkVSX09G
X1BST0NFU1NPUlMnLCAxKSkKKworCitkZWYgYmFzZWxpbmVfcGF0aChwbGF0Zm9ybT1Ob25lKToK
KyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJj
ZSB0cmVlIGZvciB0aGUKKyAgICBiYXNlbGluZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0g
dmVyc2lvbi4gSWYgfHBsYXRmb3JtfCBpcyBOb25lLAorICAgIHRoZW4gdGhlIHZlcnNpb24gY3Vy
cmVudGx5IGluIHVzZSBpcyB1c2VkLiIiIgorICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6CisgICAg
ICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZSgpCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0sICdMYXlvdXRU
ZXN0cycpCisKKworZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAg
ICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGlu
ZXMvcmVzdWx0cywgaW4KKyAgICBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVsYXRp
dmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIiIiCisgICAgZGlycyA9IFtdCisgICAg
aWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKCkK
KworICAgIGlmIHBsYXRmb3JtID09ICdjaHJvbWl1bS13aW4teHAnOgorICAgICAgICBkaXJzLmFw
cGVuZChiYXNlbGluZV9wYXRoKHBsYXRmb3JtKSkKKyAgICBpZiBwbGF0Zm9ybSBpbiAoJ2Nocm9t
aXVtLXdpbi14cCcsICdjaHJvbWl1bS13aW4tdmlzdGEnKToKKyAgICAgICAgZGlycy5hcHBlbmQo
YmFzZWxpbmVfcGF0aCgnY2hyb21pdW0td2luLXZpc3RhJykpCisgICAgZGlycy5hcHBlbmQoYmFz
ZWxpbmVfcGF0aCgnY2hyb21pdW0td2luJykpCisgICAgZGlycy5hcHBlbmQocGF0aF91dGlscy53
ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2luJykpCisgICAgZGlycy5hcHBlbmQocGF0aF91dGlscy53
ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJykpCisgICAgcmV0dXJuIGRpcnMKKworCitkZWYgd2Rp
ZmZfcGF0aCgpOgorICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdob3NlIGJp
bmFyeSBpcyBjaGVja2VkIGluIG9uIFdpbiIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnd2RpZmYuZXhlJykKKworCitkZWYgaW1hZ2VfZGlmZl9w
YXRoKHRhcmdldCk6CisgICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkg
cGF0aCBmb3IgdGhlIGltYWdlIGNvbXBhcmUgdXRpbC4KKyAgICAgICAgIFdlIHVzZSB0aGlzIGlm
IHdlIGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgorICAgICAg
ICAgaW4gcGF0aF91dGlscy4KKworICAgIEFyZ3M6CisgICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdl
dCBtb2RlIChkZWJ1ZyBvciByZWxlYXNlKQorICAgICIiIgorICAgIHJldHVybiBfZmluZF9iaW5h
cnkodGFyZ2V0LCAnaW1hZ2VfZGlmZi5leGUnKQorCisKK2RlZiBsYXlvdXRfdGVzdF9oZWxwZXJf
cGF0aCh0YXJnZXQpOgorICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYmluYXJ5
IHBhdGggZm9yIHRoZSBsYXlvdXQgdGVzdCBoZWxwZXIuCisgICAgV2UgdXNlIHRoaXMgaWYgd2Ug
Y2FuJ3QgZmluZCB0aGUgYmluYXJ5IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uCisgICAgaW4gcGF0
aF91dGlscy4KKworICAgIEFyZ3M6CisgICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdldCBtb2RlIChk
ZWJ1ZyBvciByZWxlYXNlKQorICAgICIiIgorICAgIHJldHVybiBfZmluZF9iaW5hcnkodGFyZ2V0
LCAnbGF5b3V0X3Rlc3RfaGVscGVyLmV4ZScpCisKKworZGVmIHRlc3Rfc2hlbGxfcGF0aCh0YXJn
ZXQpOgorICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYmluYXJ5IHBhdGggZm9y
IG91ciBUZXN0U2hlbGwuCisgICAgICAgV2UgdXNlIHRoaXMgaWYgd2UgY2FuJ3QgZmluZCB0aGUg
YmluYXJ5IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uCisgICAgICAgaW4gcGF0aF91dGlscy4KKwor
ICAgIEFyZ3M6CisgICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdldCBtb2RlIChkZWJ1ZyBvciByZWxl
YXNlKQorICAgICIiIgorICAgIHJldHVybiBfZmluZF9iaW5hcnkodGFyZ2V0LCAndGVzdF9zaGVs
bC5leGUnKQorCisKK2RlZiBhcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJu
cyB0aGUgZXhlY3V0YWJsZSBwYXRoIHRvIHN0YXJ0IEFwYWNoZSIiIgorICAgIHBhdGggPSBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAidXNyIiwgInNi
aW4iKQorICAgICMgRG9uJ3QgcmV0dXJuIGh0dHBkLmV4ZSBzaW5jZSB3ZSB3YW50IHRvIHVzZSB0
aGlzIGZyb20gY3lnd2luLgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGF0aCwgImh0dHBkIikK
KworCitkZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBw
YXRoIHRvIEFwYWNoZSBjb25maWcgZmlsZSIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAorICAgICAg
ICAiaHR0cCIsICJjb25mIiwgImN5Z3dpbi1odHRwZC5jb25mIikKKworCitkZWYgbGlnaHR0cGRf
ZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0YWJsZSBwYXRoIHRv
IHN0YXJ0IExpZ0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ0xpZ2h0VFBELmV4ZScpCisKKworZGVmIGxpZ2h0dHBkX21vZHVsZV9w
YXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlicmFyeSBtb2R1bGUgcGF0aCBmb3IgTGlnSFRU
UGQiIiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHkn
LCAnbGlnaHR0cGQnLCAnd2luJywgJ2xpYicpCisKKworZGVmIGxpZ2h0dHBkX3BocF9wYXRoKCk6
CisgICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1dGFibGUgcGF0aCBmb3IgTGlnSFRUUGQiIiIK
KyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGln
aHR0cGQnLCAnd2luJywgJ3BocDUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdwaHAtY2dpLmV4ZScpCisKKworZGVmIHNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJf
cGlkKToKKyAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1
bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KKworICAgIEFyZ3M6CisgICAgICBzZXJ2ZXJfcGlk
OiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICAgVW51c2Vk
IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1ldGhvZC4KKyAgICAiIiIKKyAgICBzdWJw
cm9jZXNzLlBvcGVuKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICdMaWdodFRQRC5leGUn
KSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAg
ICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS53YWl0KCkKKyAgICBzdWJwcm9j
ZXNzLlBvcGVuKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICdodHRwZC5leGUnKSwKKyAg
ICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAg
ICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS53YWl0KCkKKworCitkZWYga2lsbF9wcm9j
ZXNzKHBpZCk6CisgICAgIiIiRm9yY2VmdWxseSBraWxsIHRoZSBwcm9jZXNzLgorCisgICAgQXJn
czoKKyAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKyAgICAi
IiIKKyAgICBzdWJwcm9jZXNzLmNhbGwoKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL3BpZCcsIHN0
cihwaWQpKSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAg
ICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworCitkZWYga2lsbF9h
bGxfdGVzdF9zaGVsbHMoc2VsZik6CisgICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUg
dGVzdF9zaGVsbCBiaW5hcnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAgc3VicHJvY2Vzcy5Q
b3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAndGVzdF9zaGVsbC5leGUnKSwKKyAg
ICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAg
ICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS53YWl0KCkKKworIworIyBQcml2YXRlIGhl
bHBlciBmdW5jdGlvbnMuCisjCisKKworZGVmIF9maW5kX2JpbmFyeSh0YXJnZXQsIGJpbmFyeSk6
CisgICAgIiIiT24gV2luZG93cywgd2UgbG9vayBmb3IgYmluYXJpZXMgdGhhdCB3ZSBjb21waWxl
IGluIHBvdGVudGlhbGx5CisgICAgdHdvIHBsYWNlczogc3JjL3dlYmtpdC8kdGFyZ2V0IChwcmVm
ZXJhYmx5LCB3aGljaCB3ZSBnZXQgaWYgd2UKKyAgICBidWlsdCB1c2luZyB3ZWJraXRfZ2x1ZS5n
eXApLCBvciBzcmMvY2hyb21lLyR0YXJnZXQgKGlmIGNvbXBpbGVkIHNvbWUKKyAgICBvdGhlciB3
YXkpLiIiIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3dlYmtpdCcsIHRhcmdldCwgYmluYXJ5KQorICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhO
b3RGb3VuZDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ2Nocm9tZScsIHRhcmdldCwgYmluYXJ5KQorICAgICAgICBleGNlcHQgcGF0
aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAgICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZSgnYnVpbGQnLCB0YXJnZXQsIGJpbmFyeSkKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3BsYXRmb3JtX3V0aWxzX3dpbi5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAg
ICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4
cGVjdGF0aW9ucy5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyIiIkEgaGVscGVyIGNsYXNzIGZvciByZWFkaW5nIGluIGFuZCBkZWFs
aW5nIHdpdGggdGVzdHMgZXhwZWN0YXRpb25zCitmb3IgbGF5b3V0IHRlc3RzLgorIiIiCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHRp
bWUKK2ltcG9ydCBwYXRoX3V0aWxzCisKK3N5cy5wYXRoLmFwcGVuZChwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdXZWJLaXRUb29scycpKSAKK2ltcG9ydCBzaW1wbGVqc29u
CisKKyMgVGVzdCBleHBlY3RhdGlvbiBhbmQgbW9kaWZpZXIgY29uc3RhbnRzLgorKFBBU1MsIEZB
SUwsIFRFWFQsIElNQUdFLCBJTUFHRV9QTFVTX1RFWFQsIFRJTUVPVVQsIENSQVNILCBTS0lQLCBX
T05URklYLAorIERFRkVSLCBTTE9XLCBSRUJBU0VMSU5FLCBNSVNTSU5HLCBGTEFLWSwgTk9XLCBO
T05FKSA9IHJhbmdlKDE2KQorCisjIFRlc3QgZXhwZWN0YXRpb24gZmlsZSB1cGRhdGUgYWN0aW9u
IGNvbnN0YW50cworKE5PX0NIQU5HRSwgUkVNT1ZFX1RFU1QsIFJFTU9WRV9QTEFURk9STSwgQURE
X1BMQVRGT1JNU19FWENFUFRfVEhJUykgPSByYW5nZSg0KQorCisKK2NsYXNzIFRlc3RFeHBlY3Rh
dGlvbnM6CisgICAgVEVTVF9MSVNUID0gInRlc3RfZXhwZWN0YXRpb25zLnR4dCIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCB0ZXN0cywgZGlyZWN0b3J5LCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9k
ZSwgaXNfbGludF9tb2RlLAorICAgICAgICB0ZXN0c19hcmVfcHJlc2VudD1UcnVlKToKKyAgICAg
ICAgIiIiUmVhZHMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIGZpbGVzIGZyb20gdGhlIGdpdmVuIGRp
cmVjdG9yeS4iIiIKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksIHNlbGYu
VEVTVF9MSVNUKQorICAgICAgICBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcyA9IFRlc3RFeHBlY3Rh
dGlvbnNGaWxlKHBhdGgsIHRlc3RzLCBwbGF0Zm9ybSwKKyAgICAgICAgICAgIGlzX2RlYnVnX21v
ZGUsIGlzX2xpbnRfbW9kZSwgdGVzdHNfYXJlX3ByZXNlbnQ9dGVzdHNfYXJlX3ByZXNlbnQpCisK
KyAgICAjIFRPRE8ob2phbik6IEFsbG93IGZvciByZW1vdmluZyBza2lwcGVkIHRlc3RzIHdoZW4g
Z2V0dGluZyB0aGUgbGlzdCBvZgorICAgICMgdGVzdHMgdG8gcnVuLCBidXQgbm90IHdoZW4gZ2V0
dGluZyBtZXRyaWNzLgorICAgICMgVE9ETyhvamFuKTogUmVwbGFjZSB0aGUgR2V0KiBjYWxscyBo
ZXJlIHdpdGggdGhlIG1vcmUgc2FuZSBBUEkgZXhwb3NlZAorICAgICMgYnkgVGVzdEV4cGVjdGF0
aW9uc0ZpbGUgYmVsb3cuIE1heWJlIG1lcmdlIHRoZSB0d28gY2xhc3NlcyBlbnRpcmVseT8KKwor
ICAgIGRlZiBnZXRfZXhwZWN0YXRpb25zX2pzb25fZm9yX2FsbF9wbGF0Zm9ybXMoc2VsZik6Cisg
ICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRf
ZXhwZWN0YXRpb25zX2pzb25fZm9yX2FsbF9wbGF0Zm9ybXMoKSkKKworICAgIGRlZiBnZXRfcmVi
YXNlbGluaW5nX2ZhaWx1cmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2V4cGVjdGVk
X2ZhaWx1cmVzLmdldF90ZXN0X3NldChSRUJBU0VMSU5FLCBGQUlMKSB8CisgICAgICAgICAgICAg
ICAgc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X3Rlc3Rfc2V0KFJFQkFTRUxJTkUsIElNQUdF
KSB8CisgICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X3Rlc3Rfc2V0
KFJFQkFTRUxJTkUsIFRFWFQpIHwKKyAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RlZF9mYWls
dXJlcy5nZXRfdGVzdF9zZXQoUkVCQVNFTElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfUExVU19URVhUKSkKKworICAgIGRlZiBn
ZXRfb3B0aW9ucyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2Zh
aWx1cmVzLmdldF9vcHRpb25zKHRlc3QpCisKKyAgICBkZWYgZ2V0X2V4cGVjdGF0aW9ucyhzZWxm
LCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF9leHBl
Y3RhdGlvbnModGVzdCkKKworICAgIGRlZiBnZXRfZXhwZWN0YXRpb25zX3N0cmluZyhzZWxmLCB0
ZXN0KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZXhwZWN0YXRvbnMgZm9yIHRoZSBnaXZlbiB0
ZXN0IGFzIGFuIHVwcGVyY2FzZSBzdHJpbmcuCisgICAgICAgIElmIHRoZXJlIGFyZSBubyBleHBl
Y3RhdGlvbnMgZm9yIHRoZSB0ZXN0LCB0aGVuICJQQVNTIiBpcyByZXR1cm5lZC4iIiIKKyAgICAg
ICAgZXhwZWN0YXRpb25zID0gc2VsZi5nZXRfZXhwZWN0YXRpb25zKHRlc3QpCisgICAgICAgIHJl
dHZhbCA9IFtdCisKKyAgICAgICAgZm9yIGV4cGVjdGF0aW9uIGluIGV4cGVjdGF0aW9uczoKKyAg
ICAgICAgICAgIGZvciBpdGVtIGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5p
dGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGl0ZW1bMV0gPT0gZXhwZWN0YXRpb246CisgICAg
ICAgICAgICAgICAgICAgIHJldHZhbC5hcHBlbmQoaXRlbVswXSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWsKKworICAgICAgICByZXR1cm4gIiAiLmpvaW4ocmV0dmFsKS51cHBlcigpCisKKyAg
ICBkZWYgZ2V0X3RpbWVsaW5lX2Zvcl90ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4g
c2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X3RpbWVsaW5lX2Zvcl90ZXN0KHRlc3QpCisKKyAg
ICBkZWYgZ2V0X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUoc2VsZiwgcmVzdWx0X3R5cGUpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X3Rlc3RzX3dpdGhfcmVzdWx0
X3R5cGUocmVzdWx0X3R5cGUpCisKKyAgICBkZWYgZ2V0X3Rlc3RzX3dpdGhfdGltZWxpbmUoc2Vs
ZiwgdGltZWxpbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0
X3Rlc3RzX3dpdGhfdGltZWxpbmUodGltZWxpbmUpCisKKyAgICBkZWYgbWF0Y2hlc19hbl9leHBl
Y3RlZF9yZXN1bHQoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0
aGVyIHdlIGdvdCBvbmUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMgZm9yIHRoaXMgdGVzdC4iIiIK
KyAgICAgICAgcmV0dXJuIChyZXN1bHQgaW4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X2V4
cGVjdGF0aW9ucyh0ZXN0KSBvcgorICAgICAgICAgICAgICAgIChyZXN1bHQgaW4gKElNQUdFLCBU
RVhULCBJTUFHRV9QTFVTX1RFWFQpIGFuZAorICAgICAgICAgICAgICAgIEZBSUwgaW4gc2VsZi5f
ZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X2V4cGVjdGF0aW9ucyh0ZXN0KSkgb3IKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPT0gTUlTU0lORyBhbmQgc2VsZi5pc19yZWJhc2VsaW5pbmcodGVzdCkgb3IK
KyAgICAgICAgICAgICAgICByZXN1bHQgPT0gU0tJUCBhbmQgc2VsZi5fZXhwZWN0ZWRfZmFpbHVy
ZXMuaGFzX21vZGlmaWVyKHRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTS0lQKSkKKworICAgIGRlZiBp
c19yZWJhc2VsaW5pbmcoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3Rl
ZF9mYWlsdXJlcy5oYXNfbW9kaWZpZXIodGVzdCwgUkVCQVNFTElORSkKKworICAgIGRlZiBoYXNf
bW9kaWZpZXIoc2VsZiwgdGVzdCwgbW9kaWZpZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhw
ZWN0ZWRfZmFpbHVyZXMuaGFzX21vZGlmaWVyKHRlc3QsIG1vZGlmaWVyKQorCisgICAgZGVmIHJl
bW92ZV9wbGF0Zm9ybV9mcm9tX2ZpbGUoc2VsZiwgdGVzdHMsIHBsYXRmb3JtLCBiYWNrdXA9RmFs
c2UpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMucmVtb3ZlX3BsYXRm
b3JtX2Zyb21fZmlsZSh0ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cCkK
KworCitkZWYgc3RyaXBfY29tbWVudHMobGluZSk6CisgICAgIiIiU3RyaXBzIGNvbW1lbnRzIGZy
b20gYSBsaW5lIGFuZCByZXR1cm4gTm9uZSBpZiB0aGUgbGluZSBpcyBlbXB0eQorICAgIG9yIGVs
c2UgdGhlIGNvbnRlbnRzIG9mIGxpbmUgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMg
cmVtb3ZlZAorICAgIGFuZCBhbGwgb3RoZXIgd2hpdGVzcGFjZSBjb2xsYXBzZWQiIiIKKworICAg
IGNvbW1lbnRJbmRleCA9IGxpbmUuZmluZCgnLy8nKQorICAgIGlmIGNvbW1lbnRJbmRleCBpcyAt
MToKKyAgICAgICAgY29tbWVudEluZGV4ID0gbGVuKGxpbmUpCisKKyAgICBsaW5lID0gcmUuc3Vi
KHInXHMrJywgJyAnLCBsaW5lWzpjb21tZW50SW5kZXhdLnN0cmlwKCkpCisgICAgaWYgbGluZSA9
PSAnJzoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbGlu
ZQorCisKK2NsYXNzIE1vZGlmaWVyc0FuZEV4cGVjdGF0aW9uczoKKyAgICAiIiJBIGhvbGRlciBm
b3IgbW9kaWZpZXJzIGFuZCBleHBlY3RhdGlvbnMgb24gYSB0ZXN0IHRoYXQgc2VyaWFsaXplcyB0
bworICAgIEpTT04uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kaWZpZXJzLCBleHBl
Y3RhdGlvbnMpOgorICAgICAgICBzZWxmLm1vZGlmaWVycyA9IG1vZGlmaWVycworICAgICAgICBz
ZWxmLmV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucworCisKK2NsYXNzIEV4cGVjdGF0aW9uc0pz
b25FbmNvZGVyKHNpbXBsZWpzb24uSlNPTkVuY29kZXIpOgorICAgICIiIkpTT04gZW5jb2RlciB0
aGF0IGNhbiBoYW5kbGUgTW9kaWZpZXJzQW5kRXhwZWN0YXRpb25zIG9iamVjdHMuCisgICAgIiIi
CisKKyAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9i
aiwgTW9kaWZpZXJzQW5kRXhwZWN0YXRpb25zKToKKyAgICAgICAgICAgIHJldHVybiB7Im1vZGlm
aWVycyI6IG9iai5tb2RpZmllcnMsCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RhdGlvbnMi
OiBvYmouZXhwZWN0YXRpb25zfQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEpT
T05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgb2JqKQorCisKK2NsYXNzIFRlc3RFeHBlY3RhdGlvbnNG
aWxlOgorICAgICIiIlRlc3QgZXhwZWN0YXRpb24gZmlsZXMgY29uc2lzdCBvZiBsaW5lcyB3aXRo
IHNwZWNpZmljYXRpb25zIG9mIHdoYXQKKyAgICB0byBleHBlY3QgZnJvbSBsYXlvdXQgdGVzdCBj
YXNlcy4gVGhlIHRlc3QgY2FzZXMgY2FuIGJlIGRpcmVjdG9yaWVzCisgICAgaW4gd2hpY2ggY2Fz
ZSB0aGUgZXhwZWN0YXRpb25zIGFwcGx5IHRvIGFsbCB0ZXN0IGNhc2VzIGluIHRoYXQKKyAgICBk
aXJlY3RvcnkgYW5kIGFueSBzdWJkaXJlY3RvcnkuIFRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgaXMg
YWxvbmcgdGhlCisgICAgbGluZXMgb2Y6CisKKyAgICAgIExheW91dFRlc3RzL2Zhc3QvanMvZml4
bWUuanMgPSBGQUlMCisgICAgICBMYXlvdXRUZXN0cy9mYXN0L2pzL2ZsYWt5LmpzID0gRkFJTCBQ
QVNTCisgICAgICBMYXlvdXRUZXN0cy9mYXN0L2pzL2NyYXNoLmpzID0gQ1JBU0ggVElNRU9VVCBG
QUlMIFBBU1MKKyAgICAgIC4uLgorCisgICAgVG8gYWRkIG90aGVyIG9wdGlvbnM6CisgICAgICBT
S0lQIDogTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisgICAg
ICBERUJVRyA6IExheW91dFRlc3RzL2Zhc3QvanMvbm8tZ29vZC5qcyA9IFRJTUVPVVQgUEFTUwor
ICAgICAgREVCVUcgU0tJUCA6IExheW91dFRlc3RzL2Zhc3QvanMvbm8tZ29vZC5qcyA9IFRJTUVP
VVQgUEFTUworICAgICAgTElOVVggREVCVUcgU0tJUCA6IExheW91dFRlc3RzL2Zhc3QvanMvbm8t
Z29vZC5qcyA9IFRJTUVPVVQgUEFTUworICAgICAgREVGRVIgTElOVVggV0lOIDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisKKyAgICBTS0lQOiBEb2Vzbid0
IHJ1biB0aGUgdGVzdC4KKyAgICBTTE9XOiBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSB0byBy
dW4sIGJ1dCBkb2VzIG5vdCB0aW1lb3V0IGluZGVmaW5pdGVseS4KKyAgICBXT05URklYOiBGb3Ig
dGVzdHMgdGhhdCB3ZSBuZXZlciBpbnRlbmQgdG8gcGFzcyBvbiBhIGdpdmVuIHBsYXRmb3JtLgor
ICAgIERFRkVSOiBUZXN0IGRvZXMgbm90IGNvdW50IGluIG91ciBzdGF0aXN0aWNzIGZvciB0aGUg
Y3VycmVudCByZWxlYXNlLgorICAgIERFQlVHOiBFeHBlY3RhdGlvbnMgYXBwbHkgb25seSB0byB0
aGUgZGVidWcgYnVpbGQuCisgICAgUkVMRUFTRTogRXhwZWN0YXRpb25zIGFwcGx5IG9ubHkgdG8g
cmVsZWFzZSBidWlsZC4KKyAgICBMSU5VWC9XSU4vV0lOLVhQL1dJTi1WSVNUQS9XSU4tNy9NQUM6
IEV4cGVjdGF0aW9ucyBhcHBseSBvbmx5IHRvIHRoZXNlCisgICAgICAgIHBsYXRmb3Jtcy4KKwor
ICAgIE5vdGVzOgorICAgICAgLUEgdGVzdCBjYW5ub3QgYmUgYm90aCBTTE9XIGFuZCBUSU1FT1VU
CisgICAgICAtQSB0ZXN0IGNhbm5vdCBiZSBib3RoIERFRkVSIGFuZCBXT05URklYCisgICAgICAt
QSB0ZXN0IHNob3VsZCBvbmx5IGJlIG9uZSBvZiBJTUFHRSwgVEVYVCwgSU1BR0UrVEVYVCwgb3Ig
RkFJTC4gRkFJTCBpcworICAgICAgIGEgbWlncmF0b3J5IHN0YXRlIHRoYXQgY3VycmVudGx5IG1l
YW5zIGVpdGhlciBJTUFHRSwgVEVYVCwgb3IKKyAgICAgICBJTUFHRStURVhULiBPbmNlIHdlIGhh
dmUgZmluaXNoZWQgbWlncmF0aW5nIHRoZSBleHBlY3RhdGlvbnMsIHdlIHdpbGwKKyAgICAgICBj
aGFuZ2UgRkFJTCB0byBoYXZlIHRoZSBtZWFuaW5nIG9mIElNQUdFK1RFWFQgYW5kIHJlbW92ZSB0
aGUgSU1BR0UrVEVYVAorICAgICAgIGlkZW50aWZpZXIuCisgICAgICAtQSB0ZXN0IGNhbiBiZSBp
bmNsdWRlZCB0d2ljZSwgYnV0IG5vdCB2aWEgdGhlIHNhbWUgcGF0aC4KKyAgICAgIC1JZiBhIHRl
c3QgaXMgaW5jbHVkZWQgdHdpY2UsIHRoZW4gdGhlIG1vcmUgcHJlY2lzZSBwYXRoIHdpbnMuCisg
ICAgICAtQ1JBU0ggdGVzdHMgY2Fubm90IGJlIERFRkVSIG9yIFdPTlRGSVgKKyAgICAiIiIKKwor
ICAgIEVYUEVDVEFUSU9OUyA9IHsncGFzcyc6IFBBU1MsCisgICAgICAgICAgICAgICAgICAgICdm
YWlsJzogRkFJTCwKKyAgICAgICAgICAgICAgICAgICAgJ3RleHQnOiBURVhULAorICAgICAgICAg
ICAgICAgICAgICAnaW1hZ2UnOiBJTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgJ2ltYWdlK3Rl
eHQnOiBJTUFHRV9QTFVTX1RFWFQsCisgICAgICAgICAgICAgICAgICAgICd0aW1lb3V0JzogVElN
RU9VVCwKKyAgICAgICAgICAgICAgICAgICAgJ2NyYXNoJzogQ1JBU0gsCisgICAgICAgICAgICAg
ICAgICAgICdtaXNzaW5nJzogTUlTU0lOR30KKworICAgIEVYUEVDVEFUSU9OX0RFU0NSSVBUSU9O
UyA9IHtTS0lQOiAoJ3NraXBwZWQnLCAnc2tpcHBlZCcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQQVNTOiAoJ3Bhc3MnLCAncGFzc2VzJyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZBSUw6ICgnZmFpbHVyZScsICdmYWlsdXJlcycpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURVhUOiAoJ3RleHQgZGlmZiBtaXNtYXRjaCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dCBkaWZmIG1pc21hdGNoJyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFOiAoJ2ltYWdlIG1pc21hdGNoJywg
J2ltYWdlIG1pc21hdGNoJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdF
X1BMVVNfVEVYVDogKCdpbWFnZSBhbmQgdGV4dCBtaXNtYXRjaCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbWFnZSBhbmQgdGV4dCBtaXNtYXRj
aCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkFTSDogKCd0ZXN0IHNoZWxs
IGNyYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBz
aGVsbCBjcmFzaGVzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTUVPVVQ6
ICgndGVzdCB0aW1lZCBvdXQnLCAndGVzdHMgdGltZWQgb3V0JyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1JU1NJTkc6ICgnbm8gZXhwZWN0ZWQgcmVzdWx0IGZvdW5kJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubyBleHBlY3RlZCByZXN1
bHRzIGZvdW5kJyl9CisKKyAgICBFWFBFQ1RBVElPTl9PUkRFUiA9IChQQVNTLCBDUkFTSCwgVElN
RU9VVCwgTUlTU0lORywgSU1BR0VfUExVU19URVhULAorICAgICAgIFRFWFQsIElNQUdFLCBGQUlM
LCBTS0lQKQorCisgICAgQkFTRV9QTEFURk9STVMgPSAoJ2xpbnV4JywgJ21hYycsICd3aW4nKQor
ICAgIFBMQVRGT1JNUyA9IEJBU0VfUExBVEZPUk1TICsgKCd3aW4teHAnLCAnd2luLXZpc3RhJywg
J3dpbi03JykKKworICAgIEJVSUxEX1RZUEVTID0gKCdkZWJ1ZycsICdyZWxlYXNlJykKKworICAg
IE1PRElGSUVSUyA9IHsnc2tpcCc6IFNLSVAsCisgICAgICAgICAgICAgICAgICd3b250Zml4Jzog
V09OVEZJWCwKKyAgICAgICAgICAgICAgICAgJ2RlZmVyJzogREVGRVIsCisgICAgICAgICAgICAg
ICAgICdzbG93JzogU0xPVywKKyAgICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmUnOiBSRUJBU0VM
SU5FLAorICAgICAgICAgICAgICAgICAnbm9uZSc6IE5PTkV9CisKKyAgICBUSU1FTElORVMgPSB7
J3dvbnRmaXgnOiBXT05URklYLAorICAgICAgICAgICAgICAgICAnbm93JzogTk9XLAorICAgICAg
ICAgICAgICAgICAnZGVmZXInOiBERUZFUn0KKworICAgIFJFU1VMVF9UWVBFUyA9IHsnc2tpcCc6
IFNLSVAsCisgICAgICAgICAgICAgICAgICAgICdwYXNzJzogUEFTUywKKyAgICAgICAgICAgICAg
ICAgICAgJ2ZhaWwnOiBGQUlMLAorICAgICAgICAgICAgICAgICAgICAnZmxha3knOiBGTEFLWX0K
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBmdWxsX3Rlc3RfbGlzdCwgcGxhdGZvcm0s
IGlzX2RlYnVnX21vZGUsCisgICAgICAgIGlzX2xpbnRfbW9kZSwgZXhwZWN0YXRpb25zX2FzX3N0
cj1Ob25lLCBzdXBwcmVzc19lcnJvcnM9RmFsc2UsCisgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50
PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aDogVGhlIHBhdGggdG8gdGhlIGV4cGVj
dGF0aW9uIGZpbGUuIEFuIGVycm9yIGlzIHRocm93biBpZiBhIHRlc3QgaXMKKyAgICAgICAgICAg
IGxpc3RlZCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgZnVsbF90ZXN0X2xpc3Q6IFRoZSBsaXN0
IG9mIGFsbCB0ZXN0cyB0byBiZSBydW4gcGVuZGluZyBwcm9jZXNzaW5nIG9mCisgICAgICAgICAg
ICB0aGUgZXhwZWN0aW9ucyBmb3IgdGhvc2UgdGVzdHMuCisgICAgICAgIHBsYXRmb3JtOiBXaGlj
aCBwbGF0Zm9ybSBmcm9tIHNlbGYuUExBVEZPUk1TIHRvIGZpbHRlciB0ZXN0cyBmb3IuCisgICAg
ICAgIGlzX2RlYnVnX21vZGU6IFdoZXRoZXIgd2UgdGVzdGluZyBhIHRlc3Rfc2hlbGwgYnVpbHQg
ZGVidWcgbW9kZS4KKyAgICAgICAgaXNfbGludF9tb2RlOiBXaGV0aGVyIHRoaXMgaXMganVzdCBs
aW50aW5nIHRlc3RfZXhwZWNhdGF0aW9ucy50eHQuCisgICAgICAgIGV4cGVjdGF0aW9uc19hc19z
dHI6IENvbnRlbnRzIG9mIHRoZSBleHBlY3RhdGlvbnMgZmlsZS4gVXNlZCBpbnN0ZWFkIG9mCisg
ICAgICAgICAgICB0aGUgcGF0aC4gVGhpcyBtYWtlcyB1bml0dGVzdGluZyBzYW5lLgorICAgICAg
ICBzdXBwcmVzc19lcnJvcnM6IFdoZXRoZXIgdG8gc3VwcHJlc3MgbGludCBlcnJvcnMuCisgICAg
ICAgIHRlc3RzX2FyZV9wcmVzZW50OiBXaGV0aGVyIHRoZSB0ZXN0IGZpbGVzIGFyZSBwcmVzZW50
IGluIHRoZSBsb2NhbAorICAgICAgICAgICAgZmlsZXN5c3RlbS4gVGhlIExUVEYgRGFzaGJvYXJk
IHVzZXMgRmFsc2UgaGVyZSB0byBhdm9pZCBoYXZpbmcgdG8KKyAgICAgICAgICAgIGtlZXAgYSBs
b2NhbCBjb3B5IG9mIHRoZSB0cmVlLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9wYXRo
ID0gcGF0aAorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNfYXNfc3RyID0gZXhwZWN0YXRpb25z
X2FzX3N0cgorICAgICAgICBzZWxmLl9pc19saW50X21vZGUgPSBpc19saW50X21vZGUKKyAgICAg
ICAgc2VsZi5fdGVzdHNfYXJlX3ByZXNlbnQgPSB0ZXN0c19hcmVfcHJlc2VudAorICAgICAgICBz
ZWxmLl9mdWxsX3Rlc3RfbGlzdCA9IGZ1bGxfdGVzdF9saXN0CisgICAgICAgIHNlbGYuX3N1cHBy
ZXNzX2Vycm9ycyA9IHN1cHByZXNzX2Vycm9ycworICAgICAgICBzZWxmLl9lcnJvcnMgPSBbXQor
ICAgICAgICBzZWxmLl9ub25fZmF0YWxfZXJyb3JzID0gW10KKyAgICAgICAgc2VsZi5fcGxhdGZv
cm0gPSBzZWxmLnRvX3Rlc3RfcGxhdGZvcm1fbmFtZShwbGF0Zm9ybSkKKyAgICAgICAgaWYgc2Vs
Zi5fcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93
biBwbGF0Zm9ybSAnJXMnIiAlIChwbGF0Zm9ybSkpCisgICAgICAgIHNlbGYuX2lzX2RlYnVnX21v
ZGUgPSBpc19kZWJ1Z19tb2RlCisKKyAgICAgICAgIyBNYXBzIHJlbGF0aXZlIHRlc3QgcGF0aHMg
YXMgbGlzdGVkIGluIHRoZSBleHBlY3RhdGlvbnMgZmlsZSB0byBhCisgICAgICAgICMgbGlzdCBv
ZiBtYXBzIGNvbnRhaW5pbmcgbW9kaWZpZXJzIGFuZCBleHBlY3RhdGlvbnMgZm9yIGVhY2ggdGlt
ZQorICAgICAgICAjIHRoZSB0ZXN0IGlzIGxpc3RlZCBpbiB0aGUgZXhwZWN0YXRpb25zIGZpbGUu
CisgICAgICAgIHNlbGYuX2FsbF9leHBlY3RhdGlvbnMgPSB7fQorCisgICAgICAgICMgTWFwcyBh
IHRlc3QgdG8gaXRzIGxpc3Qgb2YgZXhwZWN0YXRpb25zLgorICAgICAgICBzZWxmLl90ZXN0X3Rv
X2V4cGVjdGF0aW9ucyA9IHt9CisKKyAgICAgICAgIyBNYXBzIGEgdGVzdCB0byBpdHMgbGlzdCBv
ZiBvcHRpb25zIChzdHJpbmcgdmFsdWVzKQorICAgICAgICBzZWxmLl90ZXN0X3RvX29wdGlvbnMg
PSB7fQorCisgICAgICAgICMgTWFwcyBhIHRlc3QgdG8gaXRzIGxpc3Qgb2YgbW9kaWZpZXJzOiB0
aGUgY29uc3RhbnRzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAjIHRoZSBvcHRpb25zIG1pbnVz
IGFueSBidWcgb3IgcGxhdGZvcm0gc3RyaW5ncworICAgICAgICBzZWxmLl90ZXN0X3RvX21vZGlm
aWVycyA9IHt9CisKKyAgICAgICAgIyBNYXBzIGEgdGVzdCB0byB0aGUgYmFzZSBwYXRoIHRoYXQg
aXQgd2FzIGxpc3RlZCB3aXRoIGluIHRoZSBsaXN0LgorICAgICAgICBzZWxmLl90ZXN0X2xpc3Rf
cGF0aHMgPSB7fQorCisgICAgICAgIHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzID0gc2VsZi5fZGlj
dF9vZl9zZXRzKHNlbGYuTU9ESUZJRVJTKQorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbl90b190
ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0cyhzZWxmLkVYUEVDVEFUSU9OUykKKyAgICAgICAgc2Vs
Zi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoc2VsZi5USU1FTElORVMp
CisgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzID0gc2VsZi5fZGljdF9vZl9zZXRz
KHNlbGYuUkVTVUxUX1RZUEVTKQorCisgICAgICAgIHNlbGYuX3JlYWQoc2VsZi5fZ2V0X2l0ZXJh
YmxlX2V4cGVjdGF0aW9ucygpKQorCisgICAgZGVmIF9kaWN0X29mX3NldHMoc2VsZiwgc3RyaW5n
c190b19jb25zdGFudHMpOgorICAgICAgICAiIiJUYWtlcyBhIGRpY3Qgb2Ygc3RyaW5ncy0+Y29u
c3RhbnRzIGFuZCByZXR1cm5zIGEgZGljdCBtYXBwaW5nCisgICAgICAgIGVhY2ggY29uc3RhbnQg
dG8gYW4gZW1wdHkgc2V0LiIiIgorICAgICAgICBkID0ge30KKyAgICAgICAgZm9yIGMgaW4gc3Ry
aW5nc190b19jb25zdGFudHMudmFsdWVzKCk6CisgICAgICAgICAgICBkW2NdID0gc2V0KCkKKyAg
ICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBfZ2V0X2l0ZXJhYmxlX2V4cGVjdGF0aW9ucyhzZWxm
KToKKyAgICAgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgaXRlcmF0ZWQgb3Zl
ci4gQWxsb3dzIGZvciBub3QgY2FyaW5nCisgICAgICAgIGFib3V0IHdoZXRoZXIgd2UncmUgaXRl
cmF0aW5nIG92ZXIgYSBmaWxlIG9yIGEgbmV3LWxpbmUgc2VwYXJhdGVkCisgICAgICAgIHN0cmlu
Zy4iIiIKKyAgICAgICAgaWYgc2VsZi5fZXhwZWN0YXRpb25zX2FzX3N0cjoKKyAgICAgICAgICAg
IGl0ZXJhYmxlID0gW3ggKyAiXG4iIGZvciB4IGluCisgICAgICAgICAgICAgICAgc2VsZi5fZXhw
ZWN0YXRpb25zX2FzX3N0ci5zcGxpdCgiXG4iKV0KKyAgICAgICAgICAgICMgU3RyaXAgZmluYWwg
ZW50cnkgaWYgaXQncyBlbXB0eSB0byBhdm9pZCBhZGRlZCBpbiBhbiBleHRyYQorICAgICAgICAg
ICAgIyBuZXdsaW5lLgorICAgICAgICAgICAgaWYgaXRlcmFibGVbbGVuKGl0ZXJhYmxlKSAtIDFd
ID09ICJcbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlWzpsZW4oaXRlcmFibGUp
IC0gMV0KKyAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcmV0dXJuIG9wZW4oc2VsZi5fcGF0aCkKKworICAgIGRlZiB0b190ZXN0X3BsYXRmb3Jt
X25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHRlc3QgZXhwZWN0YXRp
b24gcGxhdGZvcm0gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEKKyAgICAgICAgZ2l2ZW4gcGxhdGZv
cm0gbmFtZSwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubyBtYXRjaC4iIiIKKyAgICAgICAgY2hyb21p
dW1fcHJlZml4ID0gJ2Nocm9taXVtLScKKyAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQorICAg
ICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoY2hyb21pdW1fcHJlZml4KToKKyAgICAgICAgICAgIG5h
bWUgPSBuYW1lW2xlbihjaHJvbWl1bV9wcmVmaXgpOl0KKyAgICAgICAgaWYgbmFtZSBpbiBzZWxm
LlBMQVRGT1JNUzoKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIHJldHVybiBOb25l
CisKKyAgICBkZWYgZ2V0X3Rlc3Rfc2V0KHNlbGYsIG1vZGlmaWVyLCBleHBlY3RhdGlvbj1Ob25l
LCBpbmNsdWRlX3NraXBzPVRydWUpOgorICAgICAgICBpZiBleHBlY3RhdGlvbiBpcyBOb25lOgor
ICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9tb2RpZmllcl90b190ZXN0c1ttb2RpZmllcl0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RzID0gKHNlbGYuX2V4cGVjdGF0aW9uX3RvX3Rl
c3RzW2V4cGVjdGF0aW9uXSAmCisgICAgICAgICAgICAgICAgc2VsZi5fbW9kaWZpZXJfdG9fdGVz
dHNbbW9kaWZpZXJdKQorCisgICAgICAgIGlmIG5vdCBpbmNsdWRlX3NraXBzOgorICAgICAgICAg
ICAgdGVzdHMgPSB0ZXN0cyAtIHNlbGYuZ2V0X3Rlc3Rfc2V0KFNLSVAsIGV4cGVjdGF0aW9uKQor
CisgICAgICAgIHJldHVybiB0ZXN0cworCisgICAgZGVmIGdldF90ZXN0c193aXRoX3Jlc3VsdF90
eXBlKHNlbGYsIHJlc3VsdF90eXBlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdF90eXBl
X3RvX3Rlc3RzW3Jlc3VsdF90eXBlXQorCisgICAgZGVmIGdldF90ZXN0c193aXRoX3RpbWVsaW5l
KHNlbGYsIHRpbWVsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWVsaW5lX3RvX3Rlc3Rz
W3RpbWVsaW5lXQorCisgICAgZGVmIGdldF9vcHRpb25zKHNlbGYsIHRlc3QpOgorICAgICAgICAi
IiJUaGlzIHJldHVybnMgdGhlIGVudGlyZSBzZXQgb2Ygb3B0aW9ucyBmb3IgdGhlIGdpdmVuIHRl
c3QKKyAgICAgICAgKHRoZSBtb2RpZmllcnMgcGx1cyB0aGUgQlVHWFhYWCBpZGVudGlmaWVyKS4g
VGhpcyBpcyB1c2VkIGJ5IHRoZQorICAgICAgICBMVFRGIGRhc2hib2FyZC4iIiIKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3Rlc3RfdG9fb3B0aW9uc1t0ZXN0XQorCisgICAgZGVmIGhhc19tb2RpZmll
cihzZWxmLCB0ZXN0LCBtb2RpZmllcik6CisgICAgICAgIHJldHVybiB0ZXN0IGluIHNlbGYuX21v
ZGlmaWVyX3RvX3Rlc3RzW21vZGlmaWVyXQorCisgICAgZGVmIGdldF9leHBlY3RhdGlvbnMoc2Vs
ZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9uc1t0ZXN0
XQorCisgICAgZGVmIGdldF9leHBlY3RhdGlvbnNfanNvbl9mb3JfYWxsX3BsYXRmb3JtcyhzZWxm
KToKKyAgICAgICAgIyBTcGVjaWZ5IHNlcGFyYXRvcnMgaW4gb3JkZXIgdG8gZ2V0IGNvbXBhY3Qg
ZW5jb2RpbmcuCisgICAgICAgIHJldHVybiBFeHBlY3RhdGlvbnNKc29uRW5jb2RlcihzZXBhcmF0
b3JzPSgnLCcsICc6JykpLmVuY29kZSgKKyAgICAgICAgICAgIHNlbGYuX2FsbF9leHBlY3RhdGlv
bnMpCisKKyAgICBkZWYgY29udGFpbnMoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiB0ZXN0
IGluIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25zCisKKyAgICBkZWYgcmVtb3ZlX3BsYXRmb3Jt
X2Zyb21fZmlsZShzZWxmLCB0ZXN0cywgcGxhdGZvcm0sIGJhY2t1cD1GYWxzZSk6CisgICAgICAg
ICIiIlJlbW92ZSB0aGUgcGxhdGZvcm0gb3B0aW9uIGZyb20gdGVzdCBleHBlY3RhdGlvbnMgZmls
ZS4KKworICAgICAgICBJZiBhIHRlc3QgaXMgaW4gdGhlIHRlc3QgbGlzdCBhbmQgaGFzIGFuIG9w
dGlvbiB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICAgICAgIHBsYXRmb3JtLCByZW1vdmUgdGhl
IG1hdGNoaW5nIHBsYXRmb3JtIGFuZCBzYXZlIHRoZSB1cGRhdGVkIHRlc3QgYmFjaworICAgICAg
ICB0byB0aGUgZmlsZS4gSWYgbm8gb3RoZXIgcGxhdGZvcm1zIHJlbWFpbmluZyBhZnRlciByZW1v
dmFsLCBkZWxldGUgdGhlCisgICAgICAgIHRlc3QgZnJvbSB0aGUgZmlsZS4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHRlc3RzOiBsaXN0IG9mIHRlc3RzIHRoYXQgbmVlZCB0byB1cGRhdGUu
LgorICAgICAgICAgIHBsYXRmb3JtOiB3aGljaCBwbGF0Zm9ybSBvcHRpb24gdG8gcmVtb3ZlLgor
ICAgICAgICAgIGJhY2t1cDogaWYgdHJ1ZSwgdGhlIG9yaWdpbmFsIHRlc3QgZXhwZWN0YXRpb25z
IGZpbGUgaXMgc2F2ZWQgYXMKKyAgICAgICAgICAgICAgICAgIFtzZWxmLlRFU1RfTElTVF0ub3Jp
Zy5ZWVlZTU1EREhITU1TUworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgbm8KKyAgICAg
ICAgIiIiCisKKyAgICAgICAgbmV3X2ZpbGUgPSBzZWxmLl9wYXRoICsgJy5uZXcnCisgICAgICAg
IGxvZ2dpbmcuZGVidWcoJ09yaWdpbmFsIGZpbGU6ICIlcyInLCBzZWxmLl9wYXRoKQorICAgICAg
ICBsb2dnaW5nLmRlYnVnKCdOZXcgZmlsZTogIiVzIicsIG5ld19maWxlKQorICAgICAgICBmX29y
aWcgPSBzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKCkKKyAgICAgICAgZl9uZXcgPSBv
cGVuKG5ld19maWxlLCAndycpCisKKyAgICAgICAgdGVzdHNfcmVtb3ZlZCA9IDAKKyAgICAgICAg
dGVzdHNfdXBkYXRlZCA9IDAKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICBmb3IgbGluZSBp
biBmX29yaWc6CisgICAgICAgICAgICBsaW5lbm8gKz0gMQorICAgICAgICAgICAgYWN0aW9uID0g
c2VsZi5fZ2V0X3BsYXRmb3JtX3VwZGF0ZV9hY3Rpb24obGluZSwgbGluZW5vLCB0ZXN0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRm
b3JtKQorICAgICAgICAgICAgaWYgYWN0aW9uID09IE5PX0NIQU5HRToKKyAgICAgICAgICAgICAg
ICAjIFNhdmUgdGhlIG9yaWdpbmFsIGxpbmUgYmFjayB0byB0aGUgZmlsZQorICAgICAgICAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoJ05vIGNoYW5nZSB0byB0ZXN0OiAlcycsIGxpbmUpCisgICAgICAg
ICAgICAgICAgZl9uZXcud3JpdGUobGluZSkKKyAgICAgICAgICAgIGVsaWYgYWN0aW9uID09IFJF
TU9WRV9URVNUOgorICAgICAgICAgICAgICAgIHRlc3RzX3JlbW92ZWQgKz0gMQorICAgICAgICAg
ICAgICAgIGxvZ2dpbmcuaW5mbygnVGVzdCByZW1vdmVkOiAlcycsIGxpbmUpCisgICAgICAgICAg
ICBlbGlmIGFjdGlvbiA9PSBSRU1PVkVfUExBVEZPUk06CisgICAgICAgICAgICAgICAgcGFydHMg
PSBsaW5lLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBuZXdfb3B0aW9ucyA9IHBhcnRzWzBd
LnJlcGxhY2UocGxhdGZvcm0udXBwZXIoKSArICcgJywgJycsIDEpCisgICAgICAgICAgICAgICAg
bmV3X2xpbmUgPSAoJyVzOiVzJyAlIChuZXdfb3B0aW9ucywgcGFydHNbMV0pKQorICAgICAgICAg
ICAgICAgIGZfbmV3LndyaXRlKG5ld19saW5lKQorICAgICAgICAgICAgICAgIHRlc3RzX3VwZGF0
ZWQgKz0gMQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVGVzdCB1cGRhdGVkOiAnKQor
ICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBvbGQ6ICVzJywgbGluZSkKKyAgICAgICAg
ICAgICAgICBsb2dnaW5nLmluZm8oJyAgbmV3OiAlcycsIG5ld19saW5lKQorICAgICAgICAgICAg
ZWxpZiBhY3Rpb24gPT0gQUREX1BMQVRGT1JNU19FWENFUFRfVEhJUzoKKyAgICAgICAgICAgICAg
ICBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIG5ld19vcHRpb25zID0g
cGFydHNbMF0KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLlBMQVRGT1JNUzoKKyAgICAg
ICAgICAgICAgICAgICAgcCA9IHAudXBwZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlz
IGlzIGEgdGVtcCBzb2x1dGlvbiBmb3IgcmViYXNlbGluaW5nIHRvb2wuCisgICAgICAgICAgICAg
ICAgICAgICMgRG8gbm90IGFkZCB0YWdzIFdJTi03IGFuZCBXSU4tVklTVEEgdG8gdGVzdCBleHBl
Y3RhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgb3JpZ2luYWwgbGluZSBkb2Vz
IG5vdCBzcGVjaWZ5IHRoZSBwbGF0Zm9ybSBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICMg
VE9ETyh2aWN0b3J3KTogUmVtb3ZlIFdJTi1WSVNUQSBhbmQgV0lOLTcgb25jZSB3ZSBoYXZlCisg
ICAgICAgICAgICAgICAgICAgICMgcmVsaWFibGUgV2luIDcgYW5kIFdpbiBWaXN0YSBidWlsZGJv
dHMgc2V0dXAuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwIGluIChwbGF0Zm9ybS51cHBl
cigpLCAnV0lOLVZJU1RBJywgJ1dJTi03Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdf
b3B0aW9ucyArPSBwICsgJyAnCisgICAgICAgICAgICAgICAgbmV3X2xpbmUgPSAoJyVzOiVzJyAl
IChuZXdfb3B0aW9ucywgcGFydHNbMV0pKQorICAgICAgICAgICAgICAgIGZfbmV3LndyaXRlKG5l
d19saW5lKQorICAgICAgICAgICAgICAgIHRlc3RzX3VwZGF0ZWQgKz0gMQorICAgICAgICAgICAg
ICAgIGxvZ2dpbmcuaW5mbygnVGVzdCB1cGRhdGVkOiAnKQorICAgICAgICAgICAgICAgIGxvZ2dp
bmcuaW5mbygnICBvbGQ6ICVzJywgbGluZSkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8o
JyAgbmV3OiAlcycsIG5ld19saW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBsb2dnaW5nLmVycm9yKCdVbmtub3duIHVwZGF0ZSBhY3Rpb246ICVkOyBsaW5lOiAlcycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGxpbmUpCisKKyAgICAgICAgbG9n
Z2luZy5pbmZvKCdUb3RhbCB0ZXN0cyByZW1vdmVkOiAlZCcsIHRlc3RzX3JlbW92ZWQpCisgICAg
ICAgIGxvZ2dpbmcuaW5mbygnVG90YWwgdGVzdHMgdXBkYXRlZDogJWQnLCB0ZXN0c191cGRhdGVk
KQorCisgICAgICAgIGZfb3JpZy5jbG9zZSgpCisgICAgICAgIGZfbmV3LmNsb3NlKCkKKworICAg
ICAgICBpZiBiYWNrdXA6CisgICAgICAgICAgICBkYXRlX3N1ZmZpeCA9IHRpbWUuc3RyZnRpbWUo
JyVZJW0lZCVIJU0lUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGltZS5sb2NhbHRpbWUodGltZS50aW1lKCkpKQorICAgICAgICAgICAgYmFja3VwX2ZpbGUgPSAo
JyVzLm9yaWcuJXMnICUgKHNlbGYuX3BhdGgsIGRhdGVfc3VmZml4KSkKKyAgICAgICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKGJhY2t1cF9maWxlKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUo
YmFja3VwX2ZpbGUpCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1NhdmluZyBvcmlnaW5hbCBm
aWxlIHRvICIlcyInLCBiYWNrdXBfZmlsZSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShzZWxmLl9w
YXRoLCBiYWNrdXBfZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLnJlbW92ZShz
ZWxmLl9wYXRoKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1NhdmluZyBuZXcgZmlsZSB0byAi
JXMiJywgc2VsZi5fcGF0aCkKKyAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLCBzZWxmLl9wYXRo
KQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHBhcnNlX2V4cGVjdGF0aW9uc19saW5l
KHNlbGYsIGxpbmUsIGxpbmVubyk6CisgICAgICAgICIiIlBhcnNlcyBhIGxpbmUgZnJvbSB0ZXN0
X2V4cGVjdGF0aW9ucy50eHQgYW5kIHJldHVybnMgYSB0dXBsZQorICAgICAgICB3aXRoIHRoZSB0
ZXN0IHBhdGgsIG9wdGlvbnMgYXMgYSBsaXN0LCBleHBlY3RhdGlvbnMgYXMgYSBsaXN0LiIiIgor
ICAgICAgICBsaW5lID0gc3RyaXBfY29tbWVudHMobGluZSkKKyAgICAgICAgaWYgbm90IGxpbmU6
CisgICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgb3B0aW9u
cyA9IFtdCisgICAgICAgIGlmIGxpbmUuZmluZCgiOiIpIGlzIC0xOgorICAgICAgICAgICAgdGVz
dF9hbmRfZXhwZWN0YXRpb24gPSBsaW5lLnNwbGl0KCI9IikKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBvcHRpb25zID0gc2Vs
Zi5fZ2V0X29wdGlvbnNfbGlzdChwYXJ0c1swXSkKKyAgICAgICAgICAgIHRlc3RfYW5kX2V4cGVj
dGF0aW9uID0gcGFydHNbMV0uc3BsaXQoJz0nKQorCisgICAgICAgIHRlc3QgPSB0ZXN0X2FuZF9l
eHBlY3RhdGlvblswXS5zdHJpcCgpCisgICAgICAgIGlmIChsZW4odGVzdF9hbmRfZXhwZWN0YXRp
b24pIGlzIG5vdCAyKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sICJNaXNz
aW5nIGV4cGVjdGF0aW9ucy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hbmRf
ZXhwZWN0YXRpb24pCisgICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBOb25lCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9nZXRfb3B0aW9uc19saXN0KHRl
c3RfYW5kX2V4cGVjdGF0aW9uWzFdKQorCisgICAgICAgIHJldHVybiAodGVzdCwgb3B0aW9ucywg
ZXhwZWN0YXRpb25zKQorCisgICAgZGVmIF9nZXRfcGxhdGZvcm1fdXBkYXRlX2FjdGlvbihzZWxm
LCBsaW5lLCBsaW5lbm8sIHRlc3RzLCBwbGF0Zm9ybSk6CisgICAgICAgICIiIkNoZWNrIHRoZSBw
bGF0Zm9ybSBvcHRpb24gYW5kIHJldHVybiB0aGUgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgbGluZTogY3VycmVudCBsaW5lIGluIHRlc3QgZXhw
ZWN0YXRpb25zIGZpbGUuCisgICAgICAgICAgbGluZW5vOiBjdXJyZW50IGxpbmUgbnVtYmVyIG9m
IGxpbmUKKyAgICAgICAgICB0ZXN0czogbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgdG8gdXBkYXRl
Li4KKyAgICAgICAgICBwbGF0Zm9ybTogd2hpY2ggcGxhdGZvcm0gb3B0aW9uIHRvIHJlbW92ZS4K
KworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIE5PX0NIQU5HRTogbm8gY2hhbmdlIHRvIHRo
ZSBsaW5lIChjb21tZW50cywgdGVzdCBub3QgaW4gdGhlIGxpc3QgZXRjKQorICAgICAgICAgIFJF
TU9WRV9URVNUOiByZW1vdmUgdGhlIHRlc3QgZnJvbSBmaWxlLgorICAgICAgICAgIFJFTU9WRV9Q
TEFURk9STTogcmVtb3ZlIHRoaXMgcGxhdGZvcm0gb3B0aW9uIGZyb20gdGhlIHRlc3QuCisgICAg
ICAgICAgQUREX1BMQVRGT1JNU19FWENFUFRfVEhJUzogYWRkIGFsbCB0aGUgcGxhdGZvcm1zIGV4
Y2VwdCB0aGlzIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRlc3QsIG9wdGlvbnMsIGV4cGVj
dGF0aW9ucyA9IHNlbGYucGFyc2VfZXhwZWN0YXRpb25zX2xpbmUobGluZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lbm8pCisgICAgICAgIGlmIG5vdCB0ZXN0IG9yIHRlc3Qgbm90IGluIHRlc3RzOgorICAgICAg
ICAgICAgcmV0dXJuIE5PX0NIQU5HRQorCisgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBGYWxz
ZQorICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6CisgICAgICAgICAgICBpZiBvcHRpb24g
aW4gc2VsZi5QTEFURk9STVM6CisgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRy
dWUKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9uID09IHBsYXRmb3JtOgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUkVNT1ZFX1BMQVRGT1JNCisKKyAgICAgICAgIyBJZiB0aGVyZSBp
cyBubyBwbGF0Zm9ybSBzcGVjaWZpZWQsIHRoZW4gaXQgbWVhbnMgYXBwbHkgdG8gYWxsCisgICAg
ICAgICMgcGxhdGZvcm1zLiBSZXR1cm4gdGhlIGFjdGlvbiB0byBhZGQgYWxsIHRoZSBwbGF0Zm9y
bXMgZXhjZXB0IHRoaXMKKyAgICAgICAgIyBvbmUuCisgICAgICAgIGlmIG5vdCBoYXNfYW55X3Bs
YXRmb3JtOgorICAgICAgICAgICAgcmV0dXJuIEFERF9QTEFURk9STVNfRVhDRVBUX1RISVMKKwor
ICAgICAgICByZXR1cm4gUkVNT1ZFX1RFU1QKKworICAgIGRlZiBfaGFzX3ZhbGlkX21vZGlmaWVy
c19mb3JfY3VycmVudF9wbGF0Zm9ybShzZWxmLCBvcHRpb25zLCBsaW5lbm8sCisgICAgICAgIHRl
c3RfYW5kX2V4cGVjdGF0aW9ucywgbW9kaWZpZXJzKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVl
IGlmIHRoZSBjdXJyZW50IHBsYXRmb3JtIGlzIGluIHRoZSBvcHRpb25zIGxpc3Qgb3IgaWYKKyAg
ICAgICAgbm8gcGxhdGZvcm1zIGFyZSBsaXN0ZWQgYW5kIGlmIHRoZXJlIGFyZSBubyBmYXRhbCBl
cnJvcnMgaW4gdGhlCisgICAgICAgIG9wdGlvbnMgbGlzdC4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIG9wdGlvbnM6IExpc3Qgb2YgbG93ZXJjYXNlIG9wdGlvbnMuCisgICAgICAgICAgbGlu
ZW5vOiBUaGUgbGluZSBpbiB0aGUgZmlsZSB3aGVyZSB0aGUgdGVzdCBpcyBsaXN0ZWQuCisgICAg
ICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb25zOiBUaGUgcGF0aCBhbmQgZXhwZWN0YXRpb25zIGZv
ciB0aGUgdGVzdC4KKyAgICAgICAgICBtb2RpZmllcnM6IFRoZSBzZXQgdG8gcG9wdWxhdGUgd2l0
aCBtb2RpZmllcnMuCisgICAgICAgICIiIgorICAgICAgICBoYXNfYW55X3BsYXRmb3JtID0gRmFs
c2UKKyAgICAgICAgaGFzX2J1Z19pZCA9IEZhbHNlCisgICAgICAgIGZvciBvcHRpb24gaW4gb3B0
aW9uczoKKyAgICAgICAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLk1PRElGSUVSUzoKKyAgICAgICAg
ICAgICAgICBtb2RpZmllcnMuYWRkKG9wdGlvbikKKyAgICAgICAgICAgIGVsaWYgb3B0aW9uIGlu
IHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBUcnVl
CisgICAgICAgICAgICBlbGlmIG9wdGlvbi5zdGFydHN3aXRoKCdidWcnKToKKyAgICAgICAgICAg
ICAgICBoYXNfYnVnX2lkID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBvcHRpb24gbm90IGluIHNl
bGYuQlVJTERfVFlQRVM6CisgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywg
J0ludmFsaWQgbW9kaWZpZXIgZm9yIHRlc3Q6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbiwgdGVzdF9hbmRfZXhwZWN0YXRpb25zKQorCisgICAgICAgIGlmIGhh
c19hbnlfcGxhdGZvcm0gYW5kIG5vdCBzZWxmLl9tYXRjaF9wbGF0Zm9ybShvcHRpb25zKToKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5vdCBoYXNfYnVnX2lkIGFuZCAn
d29udGZpeCcgbm90IGluIG9wdGlvbnM6CisgICAgICAgICAgICAjIFRPRE8ob2phbik6IFR1cm4g
dGhpcyBpbnRvIGFuIEFkZEVycm9yIGNhbGwgb25jZSBhbGwgdGhlCisgICAgICAgICAgICAjIHRl
c3RzIGhhdmUgQlVHIGlkZW50aWZpZXJzLgorICAgICAgICAgICAgc2VsZi5fbG9nX25vbl9mYXRh
bF9lcnJvcihsaW5lbm8sICdUZXN0IGxhY2tzIEJVRyBtb2RpZmllci4nLAorICAgICAgICAgICAg
ICAgIHRlc3RfYW5kX2V4cGVjdGF0aW9ucykKKworICAgICAgICBpZiAncmVsZWFzZScgaW4gb3B0
aW9ucyBvciAnZGVidWcnIGluIG9wdGlvbnM6CisgICAgICAgICAgICBpZiBzZWxmLl9pc19kZWJ1
Z19tb2RlIGFuZCAnZGVidWcnIG5vdCBpbiBvcHRpb25zOgorICAgICAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX2RlYnVnX21vZGUgYW5kICdyZWxl
YXNlJyBub3QgaW4gb3B0aW9uczoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICBpZiAnd29udGZpeCcgaW4gb3B0aW9ucyBhbmQgJ2RlZmVyJyBpbiBvcHRpb25zOgorICAg
ICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywgJ1Rlc3QgY2Fubm90IGJlIGJvdGggREVG
RVIgYW5kIFdPTlRGSVguJywKKyAgICAgICAgICAgICAgICB0ZXN0X2FuZF9leHBlY3RhdGlvbnMp
CisKKyAgICAgICAgaWYgc2VsZi5faXNfbGludF9tb2RlIGFuZCAncmViYXNlbGluZScgaW4gb3B0
aW9uczoKKyAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sCisgICAgICAgICAgICAg
ICAgJ1JFQkFTRUxJTkUgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgcnVubmluZyByZWJhc2VsaW5l
LnB5LiAnCisgICAgICAgICAgICAgICAgJ0Nhbm5vdCBiZSBjaGVja2VkIGluLicsIHRlc3RfYW5k
X2V4cGVjdGF0aW9ucykKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9tYXRjaF9w
bGF0Zm9ybShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgIiIiTWF0Y2ggdGhlIGxpc3Qgb2Ygb3B0
aW9ucyBhZ2FpbnN0IG91ciBzcGVjaWZpZWQgcGxhdGZvcm0uIElmIGFueQorICAgICAgICBvZiB0
aGUgb3B0aW9ucyBwcmVmaXgtbWF0Y2ggc2VsZi5fcGxhdGZvcm0sIHJldHVybiBUcnVlLiBUaGlz
IGhhbmRsZXMKKyAgICAgICAgdGhlIGNhc2Ugd2hlcmUgYSB0ZXN0IGlzIG1hcmtlZCBXSU4gYW5k
IHRoZSBwbGF0Zm9ybSBpcyBXSU4tVklTVEEuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBv
cHRpb25zOiBsaXN0IG9mIG9wdGlvbnMKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBvcHQgaW4g
b3B0aW9uczoKKyAgICAgICAgICAgIGlmIHNlbGYuX3BsYXRmb3JtLnN0YXJ0c3dpdGgob3B0KToK
KyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IGRlZiBfYWRkX3RvX2FsbF9leHBlY3RhdGlvbnMoc2VsZiwgdGVzdCwgb3B0aW9ucywgZXhwZWN0
YXRpb25zKToKKyAgICAgICAgIyBNYWtlIGFsbCBwYXRocyB1bml4LXN0eWxlIHNvIHRoZSBkYXNo
Ym9hcmQgZG9lc24ndCBuZWVkIHRvLgorICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdcXCcs
ICcvJykKKyAgICAgICAgaWYgbm90IHRlc3QgaW4gc2VsZi5fYWxsX2V4cGVjdGF0aW9uczoKKyAg
ICAgICAgICAgIHNlbGYuX2FsbF9leHBlY3RhdGlvbnNbdGVzdF0gPSBbXQorICAgICAgICBzZWxm
Ll9hbGxfZXhwZWN0YXRpb25zW3Rlc3RdLmFwcGVuZCgKKyAgICAgICAgICAgIE1vZGlmaWVyc0Fu
ZEV4cGVjdGF0aW9ucyhvcHRpb25zLCBleHBlY3RhdGlvbnMpKQorCisgICAgZGVmIF9yZWFkKHNl
bGYsIGV4cGVjdGF0aW9ucyk6CisgICAgICAgICIiIkZvciBlYWNoIHRlc3QgaW4gYW4gZXhwZWN0
YXRpb25zIGl0ZXJhYmxlLCBnZW5lcmF0ZSB0aGUKKyAgICAgICAgZXhwZWN0YXRpb25zIGZvciBp
dC4iIiIKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICBmb3IgbGluZSBpbiBleHBlY3RhdGlv
bnM6CisgICAgICAgICAgICBsaW5lbm8gKz0gMQorCisgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0
aCwgb3B0aW9ucywgZXhwZWN0YXRpb25zID0gXAorICAgICAgICAgICAgICAgIHNlbGYucGFyc2Vf
ZXhwZWN0YXRpb25zX2xpbmUobGluZSwgbGluZW5vKQorICAgICAgICAgICAgaWYgbm90IGV4cGVj
dGF0aW9uczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzZWxmLl9h
ZGRfdG9fYWxsX2V4cGVjdGF0aW9ucyh0ZXN0X2xpc3RfcGF0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKG9wdGlvbnMpLnVwcGVyKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIuam9pbihleHBlY3RhdGlv
bnMpLnVwcGVyKCkpCisKKyAgICAgICAgICAgIG1vZGlmaWVycyA9IHNldCgpCisgICAgICAgICAg
ICBpZiBvcHRpb25zIGFuZCBub3Qgc2VsZi5faGFzX3ZhbGlkX21vZGlmaWVyc19mb3JfY3VycmVu
dF9wbGF0Zm9ybSgKKyAgICAgICAgICAgICAgICBvcHRpb25zLCBsaW5lbm8sIHRlc3RfbGlzdF9w
YXRoLCBtb2RpZmllcnMpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAg
IGV4cGVjdGF0aW9ucyA9IHNlbGYuX3BhcnNlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbnMsIGxp
bmVubywKKyAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKworICAgICAgICAgICAgaWYg
J3Nsb3cnIGluIG9wdGlvbnMgYW5kIFRJTUVPVVQgaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICdBIHRl
c3QgY2FuIG5vdCBiZSBib3RoIHNsb3cgYW5kIHRpbWVvdXQuIElmIGl0IHRpbWVzIG91dCAnCisg
ICAgICAgICAgICAgICAgICAgICdpbmRlZmluaXRlbHksIHRoZW4gaXQgc2hvdWxkIGJlIGp1c3Qg
dGltZW91dC4nLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKworICAgICAg
ICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2Rp
cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRo
KQorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChmdWxsX3BhdGgpCisg
ICAgICAgICAgICAjIFdlYktpdCdzIHdheSBvZiBza2lwcGluZyB0ZXN0cyBpcyB0byBhZGQgYSAt
ZGlzYWJsZWQgc3VmZml4LgorICAgICAgICAgICAgIyBTbyB3ZSBzaG91bGQgY29uc2lkZXIgdGhl
IHBhdGggZXhpc3RpbmcgaWYgdGhlIHBhdGggb3IgdGhlCisgICAgICAgICAgICAjIC1kaXNhYmxl
ZCB2ZXJzaW9uIGV4aXN0cy4KKyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0c19hcmVfcHJlc2Vu
dCBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICAgICBhbmQg
bm90IG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCArICctZGlzYWJsZWQnKSk6CisgICAgICAgICAg
ICAgICAgIyBMb2cgYSBub24gZmF0YWwgZXJyb3IgaGVyZSBzaW5jZSB5b3UgaGl0IHRoaXMgY2Fz
ZSBhbnkKKyAgICAgICAgICAgICAgICAjIHRpbWUgeW91IHVwZGF0ZSB0ZXN0X2V4cGVjdGF0aW9u
cy50eHQgd2l0aG91dCBzeW5jaW5nCisgICAgICAgICAgICAgICAgIyB0aGUgTGF5b3V0VGVzdHMg
ZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX25vbl9mYXRhbF9lcnJvcihsaW5l
bm8sICdQYXRoIGRvZXMgbm90IGV4aXN0LicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5fZnVsbF90ZXN0X2xpc3Q6CisgICAgICAgICAgICAgICAg
dGVzdHMgPSBbdGVzdF9saXN0X3BhdGhdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHRlc3RzID0gc2VsZi5fZXhwYW5kX3Rlc3RzKHRlc3RfbGlzdF9wYXRoKQorCisgICAgICAg
ICAgICBzZWxmLl9hZGRfdGVzdHModGVzdHMsIGV4cGVjdGF0aW9ucywgdGVzdF9saXN0X3BhdGgs
IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycywgb3B0aW9ucykK
KworICAgICAgICBpZiBub3Qgc2VsZi5fc3VwcHJlc3NfZXJyb3JzIGFuZCAoCisgICAgICAgICAg
ICBsZW4oc2VsZi5fZXJyb3JzKSBvciBsZW4oc2VsZi5fbm9uX2ZhdGFsX2Vycm9ycykpOgorICAg
ICAgICAgICAgaWYgc2VsZi5faXNfZGVidWdfbW9kZToKKyAgICAgICAgICAgICAgICBidWlsZF90
eXBlID0gJ0RFQlVHJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBidWlsZF90
eXBlID0gJ1JFTEVBU0UnCisgICAgICAgICAgICBwcmludCAiXG5GQUlMVVJFUyBGT1IgUExBVEZP
Uk06ICVzLCBCVUlMRF9UWVBFOiAlcyIgXAorICAgICAgICAgICAgICAgICUgKHNlbGYuX3BsYXRm
b3JtLnVwcGVyKCksIGJ1aWxkX3R5cGUpCisKKyAgICAgICAgICAgIGZvciBlcnJvciBpbiBzZWxm
Ll9ub25fZmF0YWxfZXJyb3JzOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZXJyb3Ip
CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZXJyb3JzKToKKyAgICAgICAgICAgICAgICByYWlz
ZSBTeW50YXhFcnJvcignXG4nLmpvaW4obWFwKHN0ciwgc2VsZi5fZXJyb3JzKSkpCisKKyAgICAg
ICAgIyBOb3cgYWRkIGluIHRoZSB0ZXN0cyB0aGF0IHdlcmVuJ3QgcHJlc2VudCBpbiB0aGUgZXhw
ZWN0YXRpb25zIGZpbGUKKyAgICAgICAgZXhwZWN0YXRpb25zID0gc2V0KFtQQVNTXSkKKyAgICAg
ICAgb3B0aW9ucyA9IFtdCisgICAgICAgIG1vZGlmaWVycyA9IFtdCisgICAgICAgIGlmIHNlbGYu
X2Z1bGxfdGVzdF9saXN0OgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fZnVsbF90ZXN0
X2xpc3Q6CisgICAgICAgICAgICAgICAgaWYgbm90IHRlc3QgaW4gc2VsZi5fdGVzdF9saXN0X3Bh
dGhzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRfdGVzdCh0ZXN0LCBtb2RpZmllcnMs
IGV4cGVjdGF0aW9ucywgb3B0aW9ucykKKworICAgIGRlZiBfZ2V0X29wdGlvbnNfbGlzdChzZWxm
LCBsaXN0U3RyaW5nKToKKyAgICAgICAgcmV0dXJuIFtwYXJ0LnN0cmlwKCkubG93ZXIoKSBmb3Ig
cGFydCBpbiBsaXN0U3RyaW5nLnN0cmlwKCkuc3BsaXQoJyAnKV0KKworICAgIGRlZiBfcGFyc2Vf
ZXhwZWN0YXRpb25zKHNlbGYsIGV4cGVjdGF0aW9ucywgbGluZW5vLCB0ZXN0X2xpc3RfcGF0aCk6
CisgICAgICAgIHJlc3VsdCA9IHNldCgpCisgICAgICAgIGZvciBwYXJ0IGluIGV4cGVjdGF0aW9u
czoKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0IGluIHNlbGYuRVhQRUNUQVRJT05TOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sICdVbnN1cHBvcnRlZCBleHBlY3RhdGlv
bjogJXMnICUgcGFydCwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0X3BhdGgpCisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uID0gc2VsZi5FWFBF
Q1RBVElPTlNbcGFydF0KKyAgICAgICAgICAgIHJlc3VsdC5hZGQoZXhwZWN0YXRpb24pCisgICAg
ICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfZXhwYW5kX3Rlc3RzKHNlbGYsIHRlc3RfbGlz
dF9wYXRoKToKKyAgICAgICAgIiIiQ29udmVydCB0aGUgdGVzdCBzcGVjaWZpY2F0aW9uIHRvIGFu
IGFic29sdXRlLCBub3JtYWxpemVkCisgICAgICAgIHBhdGggYW5kIG1ha2Ugc3VyZSBkaXJlY3Rv
cmllcyBlbmQgd2l0aCB0aGUgT1MgcGF0aCBzZXBhcmF0b3IuIiIiCisgICAgICAgIHBhdGggPSBv
cy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3RfbGlzdF9wYXRo
KQorICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorICAgICAgICBwYXRoID0g
c2VsZi5fZml4X2RpcihwYXRoKQorCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciB0
ZXN0IGluIHNlbGYuX2Z1bGxfdGVzdF9saXN0OgorICAgICAgICAgICAgaWYgdGVzdC5zdGFydHN3
aXRoKHBhdGgpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVzdCkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9maXhfZGlyKHNlbGYsIHBhdGgpOgorICAgICAgICAi
IiJDaGVjayB0byBzZWUgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5LCBhbmQgaWYg
c28sIGFwcGVuZAorICAgICAgICB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciBpZiBuZWNlc3Nhcnku
IiIiCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX2FyZV9wcmVzZW50OgorICAgICAgICAgICAgaWYg
b3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2lu
KHBhdGgsICcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiB3ZSBjYW4ndCBjaGVj
ayB0aGUgZmlsZXN5c3RlbSB0byBzZWUgaWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwKKyAgICAgICAg
ICAgICMgd2UgYXNzdW1lIHRoYXQgZmlsZXMgdy9vIGFuIGV4dGVuc2lvbiBhcmUgZGlyZWN0b3Jp
ZXMuCisgICAgICAgICAgICAjIFRPRE8oZHByYW5rZSk6IFdoYXQgaGFwcGVucyB3LyBMYXlvdXRU
ZXN0cy9jc3MyLjEgPworICAgICAgICAgICAgaWYgb3MucGF0aC5zcGxpdGV4dChwYXRoKVsxXSA9
PSAnJzoKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICcnKQorICAg
ICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9hZGRfdGVzdHMoc2VsZiwgdGVzdHMsIGV4cGVj
dGF0aW9ucywgdGVzdF9saXN0X3BhdGgsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICBtb2Rp
ZmllcnMsIG9wdGlvbnMpOgorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAg
IGlmIHNlbGYuX2FscmVhZHlfc2Vlbl90ZXN0KHRlc3QsIHRlc3RfbGlzdF9wYXRoLCBsaW5lbm8p
OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNlbGYuX2NsZWFyX2V4
cGVjdGF0aW9uc19mb3JfdGVzdCh0ZXN0LCB0ZXN0X2xpc3RfcGF0aCkKKyAgICAgICAgICAgIHNl
bGYuX2FkZF90ZXN0KHRlc3QsIG1vZGlmaWVycywgZXhwZWN0YXRpb25zLCBvcHRpb25zKQorCisg
ICAgZGVmIF9hZGRfdGVzdChzZWxmLCB0ZXN0LCBtb2RpZmllcnMsIGV4cGVjdGF0aW9ucywgb3B0
aW9ucyk6CisgICAgICAgICIiIlNldHMgdGhlIGV4cGVjdGVkIHN0YXRlIGZvciBhIGdpdmVuIHRl
c3QuCisKKyAgICAgICAgVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhlIHRlc3QgaGFzIG5vdCBiZWVu
IGFkZGVkIGJlZm9yZS4gSWYgaXQgaGFzLAorICAgICAgICB1c2UgX0NsZWFyRXhwZWN0YXRpb25z
Rm9yVGVzdCgpIHRvIHJlc2V0IHRoZSBzdGF0ZSBwcmlvciB0bworICAgICAgICBjYWxsaW5nIHRo
aXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiB0ZXN0IHRvIGFkZAorICAgICAg
ICAgIG1vZGlmaWVyczogc2VxdWVuY2Ugb2YgbW9kaWZpZXIga2V5d29yZHMgKCd3b250Zml4Jywg
J3Nsb3cnLCBldGMuKQorICAgICAgICAgIGV4cGVjdGF0aW9uczogc2VxdWVuY2Ugb2YgZXhwZWN0
YXRpb25zIChQQVNTLCBJTUFHRSwgZXRjLikKKyAgICAgICAgICBvcHRpb25zOiBzZXF1ZW5jZSBv
ZiBrZXl3b3JkcyBhbmQgYnVnIGlkZW50aWZpZXJzLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3Rv
X2V4cGVjdGF0aW9uc1t0ZXN0XSA9IGV4cGVjdGF0aW9ucworICAgICAgICBmb3IgZXhwZWN0YXRp
b24gaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25fdG9fdGVz
dHNbZXhwZWN0YXRpb25dLmFkZCh0ZXN0KQorCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fb3B0aW9u
c1t0ZXN0XSA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fdGVzdF90b19tb2RpZmllcnNbdGVzdF0g
PSBzZXQoKQorICAgICAgICBmb3IgbW9kaWZpZXIgaW4gbW9kaWZpZXJzOgorICAgICAgICAgICAg
bW9kX3ZhbHVlID0gc2VsZi5NT0RJRklFUlNbbW9kaWZpZXJdCisgICAgICAgICAgICBzZWxmLl9t
b2RpZmllcl90b190ZXN0c1ttb2RfdmFsdWVdLmFkZCh0ZXN0KQorICAgICAgICAgICAgc2VsZi5f
dGVzdF90b19tb2RpZmllcnNbdGVzdF0uYWRkKG1vZF92YWx1ZSkKKworICAgICAgICBpZiAnd29u
dGZpeCcgaW4gbW9kaWZpZXJzOgorICAgICAgICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHNb
V09OVEZJWF0uYWRkKHRlc3QpCisgICAgICAgIGVsaWYgJ2RlZmVyJyBpbiBtb2RpZmllcnM6Cisg
ICAgICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0c1tERUZFUl0uYWRkKHRlc3QpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0c1tOT1ddLmFkZCh0
ZXN0KQorCisgICAgICAgIGlmICdza2lwJyBpbiBtb2RpZmllcnM6CisgICAgICAgICAgICBzZWxm
Ll9yZXN1bHRfdHlwZV90b190ZXN0c1tTS0lQXS5hZGQodGVzdCkKKyAgICAgICAgZWxpZiBleHBl
Y3RhdGlvbnMgPT0gc2V0KFtQQVNTXSk6CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90
b190ZXN0c1tQQVNTXS5hZGQodGVzdCkKKyAgICAgICAgZWxpZiBsZW4oZXhwZWN0YXRpb25zKSA+
IDE6CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0c1tGTEFLWV0uYWRkKHRl
c3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0
c1tGQUlMXS5hZGQodGVzdCkKKworICAgIGRlZiBfY2xlYXJfZXhwZWN0YXRpb25zX2Zvcl90ZXN0
KHNlbGYsIHRlc3QsIHRlc3RfbGlzdF9wYXRoKToKKyAgICAgICAgIiIiUmVtb3ZlIHByZXhpc3Rp
bmcgZXhwZWN0YXRpb25zIGZvciB0aGlzIHRlc3QuCisgICAgICAgIFRoaXMgaGFwcGVucyBpZiB3
ZSBhcmUgc2VlaW5nIGEgbW9yZSBwcmVjaXNlIHBhdGgKKyAgICAgICAgdGhhbiBhIHByZXZpb3Vz
IGxpc3RpbmcuCisgICAgICAgICIiIgorICAgICAgICBpZiB0ZXN0IGluIHNlbGYuX3Rlc3RfbGlz
dF9wYXRoczoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25zLnBvcCh0ZXN0
LCAnJykKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9mcm9tX3NldHModGVzdCwgc2VsZi5fZXhw
ZWN0YXRpb25fdG9fdGVzdHMpCisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfZnJvbV9zZXRzKHRl
c3QsIHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzKQorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2Zy
b21fc2V0cyh0ZXN0LCBzZWxmLl90aW1lbGluZV90b190ZXN0cykKKyAgICAgICAgICAgIHNlbGYu
X3JlbW92ZV9mcm9tX3NldHModGVzdCwgc2VsZi5fcmVzdWx0X3R5cGVfdG9fdGVzdHMpCisKKyAg
ICAgICAgc2VsZi5fdGVzdF9saXN0X3BhdGhzW3Rlc3RdID0gb3MucGF0aC5ub3JtcGF0aCh0ZXN0
X2xpc3RfcGF0aCkKKworICAgIGRlZiBfcmVtb3ZlX2Zyb21fc2V0cyhzZWxmLCB0ZXN0LCBkaWN0
KToKKyAgICAgICAgIiIiUmVtb3ZlcyB0aGUgZ2l2ZW4gdGVzdCBmcm9tIHRoZSBzZXRzIGluIHRo
ZSBkaWN0aW9uYXJ5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdDogdGVzdCB0byBs
b29rIGZvcgorICAgICAgICAgIGRpY3Q6IGRpY3Qgb2Ygc2V0cyBvZiBmaWxlcyIiIgorICAgICAg
ICBmb3Igc2V0X29mX3Rlc3RzIGluIGRpY3QuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgaWYg
dGVzdCBpbiBzZXRfb2ZfdGVzdHM6CisgICAgICAgICAgICAgICAgc2V0X29mX3Rlc3RzLnJlbW92
ZSh0ZXN0KQorCisgICAgZGVmIF9hbHJlYWR5X3NlZW5fdGVzdChzZWxmLCB0ZXN0LCB0ZXN0X2xp
c3RfcGF0aCwgbGluZW5vKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmIHdlJ3ZlIGFscmVh
ZHkgc2VlbiBhIG1vcmUgcHJlY2lzZSBwYXRoIGZvciB0aGlzIHRlc3QKKyAgICAgICAgdGhhbiB0
aGUgdGVzdF9saXN0X3BhdGguCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgdGVzdCBpbiBz
ZWxmLl90ZXN0X2xpc3RfcGF0aHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAg
ICBwcmV2X2Jhc2VfcGF0aCA9IHNlbGYuX3Rlc3RfbGlzdF9wYXRoc1t0ZXN0XQorICAgICAgICBp
ZiAocHJldl9iYXNlX3BhdGggPT0gb3MucGF0aC5ub3JtcGF0aCh0ZXN0X2xpc3RfcGF0aCkpOgor
ICAgICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywgJ0R1cGxpY2F0ZSBleHBlY3RhdGlv
bnMuJywgdGVzdCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBDaGVjayBp
ZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gYSBtb3JlIHByZWNpc2UgcGF0aC4KKyAgICAgICAgcmV0dXJu
IHByZXZfYmFzZV9wYXRoLnN0YXJ0c3dpdGgob3MucGF0aC5ub3JtcGF0aCh0ZXN0X2xpc3RfcGF0
aCkpCisKKyAgICBkZWYgX2FkZF9lcnJvcihzZWxmLCBsaW5lbm8sIG1zZywgcGF0aCk6CisgICAg
ICAgICIiIlJlcG9ydHMgYW4gZXJyb3IgdGhhdCB3aWxsIHByZXZlbnQgcnVubmluZyB0aGUgdGVz
dHMuIERvZXMgbm90CisgICAgICAgIGltbWVkaWF0ZWx5IHJhaXNlIGFuIGV4Y2VwdGlvbiBiZWNh
dXNlIHdlJ2QgbGlrZSB0byBhZ2dyZWdhdGUgYWxsIHRoZQorICAgICAgICBlcnJvcnMgc28gdGhl
eSBjYW4gYWxsIGJlIHByaW50ZWQgb3V0LiIiIgorICAgICAgICBzZWxmLl9lcnJvcnMuYXBwZW5k
KCdcbkxpbmU6JXMgJXMgJXMnICUgKGxpbmVubywgbXNnLCBwYXRoKSkKKworICAgIGRlZiBfbG9n
X25vbl9mYXRhbF9lcnJvcihzZWxmLCBsaW5lbm8sIG1zZywgcGF0aCk6CisgICAgICAgICIiIlJl
cG9ydHMgYW4gZXJyb3IgdGhhdCB3aWxsIG5vdCBwcmV2ZW50IHJ1bm5pbmcgdGhlIHRlc3RzLiBU
aGVzZSBhcmUKKyAgICAgICAgc3RpbGwgZXJyb3JzLCBidXQgbm90IGJhZCBlbm91Z2ggdG8gd2Fy
cmFudCBicmVha2luZyB0ZXN0IHJ1bm5pbmcuIiIiCisgICAgICAgIHNlbGYuX25vbl9mYXRhbF9l
cnJvcnMuYXBwZW5kKCdMaW5lOiVzICVzICVzJyAlIChsaW5lbm8sIG1zZywgcGF0aCkpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZmFpbHVyZXMucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIkNsYXNzZXMgZm9yIGZhaWx1cmVzIHRoYXQgb2NjdXIgZHVy
aW5nIHRlc3RzLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworCisK
K2RlZiBkZXRlcm1pbmVfcmVzdWx0X3R5cGUoZmFpbHVyZV9saXN0KToKKyAgICAiIiJUYWtlcyBh
IHNldCBvZiB0ZXN0X2ZhaWx1cmVzIGFuZCByZXR1cm5zIHdoaWNoIHJlc3VsdCB0eXBlIGJlc3Qg
Zml0cworICAgIHRoZSBsaXN0IG9mIGZhaWx1cmVzLiAiQmVzdCBmaXRzIiBtZWFucyB3ZSB1c2Ug
dGhlIHdvcnN0IHR5cGUgb2YgZmFpbHVyZS4KKworICAgIFJldHVybnM6CisgICAgICBvbmUgb2Yg
dGhlIHRlc3RfZXhwZWN0YXRpb25zIHJlc3VsdCB0eXBlcyAtIFBBU1MsIFRFWFQsIENSQVNILCBl
dGMuIiIiCisKKyAgICBpZiBub3QgZmFpbHVyZV9saXN0IG9yIGxlbihmYWlsdXJlX2xpc3QpID09
IDA6CisgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTCisKKyAgICBmYWlsdXJl
X3R5cGVzID0gW3R5cGUoZikgZm9yIGYgaW4gZmFpbHVyZV9saXN0XQorICAgIGlmIEZhaWx1cmVD
cmFzaCBpbiBmYWlsdXJlX3R5cGVzOgorICAgICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMu
Q1JBU0gKKyAgICBlbGlmIEZhaWx1cmVUaW1lb3V0IGluIGZhaWx1cmVfdHlwZXM6CisgICAgICAg
IHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUCisgICAgZWxpZiAoRmFpbHVyZU1pc3Np
bmdSZXN1bHQgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAgICAgIEZhaWx1cmVNaXNzaW5nSW1h
Z2UgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAgICAgIEZhaWx1cmVNaXNzaW5nSW1hZ2VIYXNo
IGluIGZhaWx1cmVfdHlwZXMpOgorICAgICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMuTUlT
U0lORworICAgIGVsc2U6CisgICAgICAgIGlzX3RleHRfZmFpbHVyZSA9IEZhaWx1cmVUZXh0TWlz
bWF0Y2ggaW4gZmFpbHVyZV90eXBlcworICAgICAgICBpc19pbWFnZV9mYWlsdXJlID0gKEZhaWx1
cmVJbWFnZUhhc2hJbmNvcnJlY3QgaW4gZmFpbHVyZV90eXBlcyBvcgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaCBpbiBmYWlsdXJlX3R5cGVzKQor
ICAgICAgICBpZiBpc190ZXh0X2ZhaWx1cmUgYW5kIGlzX2ltYWdlX2ZhaWx1cmU6CisgICAgICAg
ICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMuSU1BR0VfUExVU19URVhUCisgICAgICAgIGVs
aWYgaXNfdGV4dF9mYWlsdXJlOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RfZXhwZWN0YXRpb25z
LlRFWFQKKyAgICAgICAgZWxpZiBpc19pbWFnZV9mYWlsdXJlOgorICAgICAgICAgICAgcmV0dXJu
IHRlc3RfZXhwZWN0YXRpb25zLklNQUdFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCJ1bmNsYXNzaWZpYWJsZSBzZXQgb2YgZmFpbHVyZXM6ICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyBzdHIoZmFpbHVyZV90eXBlcykpCisKKworY2xhc3MgVGVz
dEZhaWx1cmUob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHRoYXQgZGVmaW5l
cyB0aGUgZmFpbHVyZSBpbnRlcmZhY2UuIiIiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IG1lc3NhZ2UoKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBm
YWlsdXJlIGluIG1vcmUgZGV0YWlsLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZAor
CisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIi
IlJldHVybnMgYW4gSFRNTCBzdHJpbmcgdG8gYmUgaW5jbHVkZWQgb24gdGhlIHJlc3VsdHMuaHRt
bCBwYWdlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIHNob3Vs
ZF9raWxsX3Rlc3Rfc2hlbGwoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB3ZSBz
aG91bGQga2lsbCB0aGUgdGVzdCBzaGVsbCBiZWZvcmUgdGhlIG5leHQKKyAgICAgICAgdGVzdC4i
IiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcmVsYXRpdmVfb3V0cHV0X2ZpbGVu
YW1lKHNlbGYsIGZpbGVuYW1lLCBtb2RpZmllcik6CisgICAgICAgICIiIlJldHVybnMgYSByZWxh
dGl2ZSBmaWxlbmFtZSBpbnNpZGUgdGhlIG91dHB1dCBkaXIgdGhhdCBjb250YWlucworICAgICAg
ICBtb2RpZmllci4KKworICAgICAgICBGb3IgZXhhbXBsZSwgaWYgZmlsZW5hbWUgaXMgZmFzdFxk
b21cZm9vLmh0bWwgYW5kIG1vZGlmaWVyIGlzCisgICAgICAgICItZXhwZWN0ZWQudHh0IiwgdGhl
IHJldHVybiB2YWx1ZSBpcyBmYXN0XGRvbVxmb28tZXhwZWN0ZWQudHh0CisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBmaWxlbmFtZTogcmVsYXRpdmUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCisg
ICAgICAgICAgbW9kaWZpZXI6IGEgc3RyaW5nIHRvIHJlcGxhY2UgdGhlIGV4dGVuc2lvbiBvZiBm
aWxlbmFtZSB3aXRoCisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAgIFRoZSByZWxhdGl2ZSB3
aW5kb3dzIHBhdGggdG8gdGhlIG91dHB1dCBmaWxlbmFtZQorICAgICAgICAiIiIKKyAgICAgICAg
cmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgbW9kaWZpZXIKKworCitjbGFz
cyBGYWlsdXJlV2l0aFR5cGUoVGVzdEZhaWx1cmUpOgorICAgICIiIkJhc2UgY2xhc3MgdGhhdCBw
cm9kdWNlcyBzdGFuZGFyZCBIVE1MIG91dHB1dCBiYXNlZCBvbiB0aGUgdGVzdCB0eXBlLgorCisg
ICAgU3ViY2xhc3NlcyBtYXkgY29tbW9ubHkgY2hvb3NlIHRvIG92ZXJyaWRlIHRoZSBSZXN1bHRI
dG1sT3V0cHV0LCBidXQgc3RpbGwKKyAgICB1c2UgdGhlIHN0YW5kYXJkIE91dHB1dExpbmtzLgor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfdHlwZSk6CisgICAgICAgIFRl
c3RGYWlsdXJlLl9faW5pdF9fKHNlbGYpCisgICAgICAgICMgVE9ETyhvamFuKTogVGhpcyBjbGFz
cyBubyBsb25nZXIgbmVlZHMgdG8ga25vdyB0aGUgdGVzdF90eXBlLgorICAgICAgICBzZWxmLl90
ZXN0X3R5cGUgPSB0ZXN0X3R5cGUKKworICAgICMgRmlsZW5hbWUgc3VmZml4ZXMgdXNlZCBieSBS
ZXN1bHRIdG1sT3V0cHV0LgorICAgIE9VVF9GSUxFTkFNRVMgPSBbXQorCisgICAgZGVmIG91dHB1
dF9saW5rcyhzZWxmLCBmaWxlbmFtZSwgb3V0X25hbWVzKToKKyAgICAgICAgIiIiUmV0dXJucyBh
IHN0cmluZyBob2xkaW5nIGFsbCBhcHBsaWNhYmxlIG91dHB1dCBmaWxlIGxpbmtzLgorCisgICAg
ICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWU6IHRoZSB0ZXN0IGZpbGVuYW1lLCB1c2VkIHRv
IGNvbnN0cnVjdCB0aGUgcmVzdWx0IGZpbGUgbmFtZXMKKyAgICAgICAgICBvdXRfbmFtZXM6IGxp
c3Qgb2YgZmlsZW5hbWUgc3VmZml4ZXMgZm9yIHRoZSBmaWxlcy4gSWYgdGhyZWUgb3IgbW9yZQor
ICAgICAgICAgICAgICBzdWZmaXhlcyBhcmUgaW4gdGhlIGxpc3QsIHRoZXkgc2hvdWxkIGJlIFth
Y3R1YWwsIGV4cGVjdGVkLCBkaWZmLAorICAgICAgICAgICAgICB3ZGlmZl0uIFR3byBzdWZmaXhl
cyBzaG91bGQgYmUgW2FjdHVhbCwgZXhwZWN0ZWRdLCBhbmQgYQorICAgICAgICAgICAgICBzaW5n
bGUgaXRlbSBpcyB0aGUgW2FjdHVhbF0gZmlsZW5hbWUgc3VmZml4LgorICAgICAgICAgICAgICBJ
ZiBvdXRfbmFtZXMgaXMgZW1wdHksIHJldHVybnMgdGhlIGVtcHR5IHN0cmluZy4KKyAgICAgICAg
IiIiCisgICAgICAgIGxpbmtzID0gWycnXQorICAgICAgICB1cmlzID0gW3NlbGYucmVsYXRpdmVf
b3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLCBmbikgZm9yCisgICAgICAgICAgICAgICAgZm4gaW4g
b3V0X25hbWVzXQorICAgICAgICBpZiBsZW4odXJpcykgPiAxOgorICAgICAgICAgICAgbGlua3Mu
YXBwZW5kKCI8YSBocmVmPSclcyc+ZXhwZWN0ZWQ8L2E+IiAlIHVyaXNbMV0pCisgICAgICAgIGlm
IGxlbih1cmlzKSA+IDA6CisgICAgICAgICAgICBsaW5rcy5hcHBlbmQoIjxhIGhyZWY9JyVzJz5h
Y3R1YWw8L2E+IiAlIHVyaXNbMF0pCisgICAgICAgIGlmIGxlbih1cmlzKSA+IDI6CisgICAgICAg
ICAgICBsaW5rcy5hcHBlbmQoIjxhIGhyZWY9JyVzJz5kaWZmPC9hPiIgJSB1cmlzWzJdKQorICAg
ICAgICBpZiBsZW4odXJpcykgPiAzOgorICAgICAgICAgICAgbGlua3MuYXBwZW5kKCI8YSBocmVm
PSclcyc+d2RpZmY8L2E+IiAlIHVyaXNbM10pCisgICAgICAgIHJldHVybiAnICcuam9pbihsaW5r
cykKKworICAgIGRlZiByZXN1bHRfaHRtbF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAg
ICByZXR1cm4gc2VsZi5tZXNzYWdlKCkgKyBzZWxmLm91dHB1dF9saW5rcyhmaWxlbmFtZSwgc2Vs
Zi5PVVRfRklMRU5BTUVTKQorCisKK2NsYXNzIEZhaWx1cmVUaW1lb3V0KFRlc3RGYWlsdXJlKToK
KyAgICAiIiJUZXN0IHRpbWVkIG91dC4gIFdlIGFsc28gd2FudCB0byByZXN0YXJ0IHRoZSB0ZXN0
IHNoZWxsIGlmIHRoaXMKKyAgICBoYXBwZW5zLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBtZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiVGVzdCB0aW1lZCBvdXQiCisKKyAgICBk
ZWYgcmVzdWx0X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuICI8
c3Ryb25nPiVzPC9zdHJvbmc+IiAlIHNlbGYubWVzc2FnZSgpCisKKyAgICBkZWYgc2hvdWxkX2tp
bGxfdGVzdF9zaGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBGYWls
dXJlQ3Jhc2goVGVzdEZhaWx1cmUpOgorICAgICIiIlRlc3Qgc2hlbGwgY3Jhc2hlZC4iIiIKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgorICAgICAgICByZXR1cm4gIlRl
c3Qgc2hlbGwgY3Jhc2hlZCIKKworICAgIGRlZiByZXN1bHRfaHRtbF9vdXRwdXQoc2VsZiwgZmls
ZW5hbWUpOgorICAgICAgICAjIFRPRE8odGMpOiBjcmVhdGUgYSBsaW5rIHRvIHRoZSBtaW5pZHVt
cCBmaWxlCisgICAgICAgIHN0YWNrID0gc2VsZi5yZWxhdGl2ZV9vdXRwdXRfZmlsZW5hbWUoZmls
ZW5hbWUsICItc3RhY2sudHh0IikKKyAgICAgICAgcmV0dXJuICI8c3Ryb25nPiVzPC9zdHJvbmc+
IDxhIGhyZWY9JXM+c3RhY2s8L2E+IiAlIChzZWxmLm1lc3NhZ2UoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjaykKKwor
ICAgIGRlZiBzaG91bGRfa2lsbF90ZXN0X3NoZWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1
ZQorCisKK2NsYXNzIEZhaWx1cmVNaXNzaW5nUmVzdWx0KEZhaWx1cmVXaXRoVHlwZSk6CisgICAg
IiIiRXhwZWN0ZWQgcmVzdWx0IHdhcyBtaXNzaW5nLiIiIgorICAgIE9VVF9GSUxFTkFNRVMgPSBb
Ii1hY3R1YWwudHh0Il0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgor
ICAgICAgICByZXR1cm4gIk5vIGV4cGVjdGVkIHJlc3VsdHMgZm91bmQiCisKKyAgICBkZWYgcmVz
dWx0X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuICgiPHN0cm9u
Zz4lczwvc3Ryb25nPiIgJSBzZWxmLm1lc3NhZ2UoKSArCisgICAgICAgICAgICAgICAgc2VsZi5v
dXRwdXRfbGlua3MoZmlsZW5hbWUsIHNlbGYuT1VUX0ZJTEVOQU1FUykpCisKKworY2xhc3MgRmFp
bHVyZVRleHRNaXNtYXRjaChGYWlsdXJlV2l0aFR5cGUpOgorICAgICIiIlRleHQgZGlmZiBvdXRw
dXQgZmFpbGVkLiIiIgorICAgICMgRmlsZW5hbWUgc3VmZml4ZXMgdXNlZCBieSBSZXN1bHRIdG1s
T3V0cHV0LgorICAgIE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwudHh0IiwgIi1leHBlY3RlZC50
eHQiLCAiLWRpZmYudHh0Il0KKyAgICBPVVRfRklMRU5BTUVTX1dESUZGID0gWyItYWN0dWFsLnR4
dCIsICItZXhwZWN0ZWQudHh0IiwgIi1kaWZmLnR4dCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiLXdkaWZmLmh0bWwiXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfdHlwZSwg
aGFzX3dkaWZmKToKKyAgICAgICAgRmFpbHVyZVdpdGhUeXBlLl9faW5pdF9fKHNlbGYsIHRlc3Rf
dHlwZSkKKyAgICAgICAgaWYgaGFzX3dkaWZmOgorICAgICAgICAgICAgc2VsZi5PVVRfRklMRU5B
TUVTID0gc2VsZi5PVVRfRklMRU5BTUVTX1dESUZGCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJUZXh0IGRpZmYgbWlzbWF0Y2giCisKKwor
Y2xhc3MgRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2goRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJB
Y3R1YWwgcmVzdWx0IGhhc2ggd2FzIG1pc3NpbmcuIiIiCisgICAgIyBDaHJvbWUgZG9lc24ndCBr
bm93IHRvIGRpc3BsYXkgYSAuY2hlY2tzdW0gZmlsZSBhcyB0ZXh0LCBzbyBkb24ndCBib3RoZXIK
KyAgICAjIHB1dHRpbmcgaW4gYSBsaW5rIHRvIHRoZSBhY3R1YWwgcmVzdWx0LgorICAgIE9VVF9G
SUxFTkFNRVMgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6Cisg
ICAgICAgIHJldHVybiAiTm8gZXhwZWN0ZWQgaW1hZ2UgaGFzaCBmb3VuZCIKKworICAgIGRlZiBy
ZXN1bHRfaHRtbF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gIjxzdHJv
bmc+JXM8L3N0cm9uZz4iICUgc2VsZi5tZXNzYWdlKCkKKworCitjbGFzcyBGYWlsdXJlTWlzc2lu
Z0ltYWdlKEZhaWx1cmVXaXRoVHlwZSk6CisgICAgIiIiQWN0dWFsIHJlc3VsdCBpbWFnZSB3YXMg
bWlzc2luZy4iIiIKKyAgICBPVVRfRklMRU5BTUVTID0gWyItYWN0dWFsLnBuZyJdCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJObyBleHBl
Y3RlZCBpbWFnZSBmb3VuZCIKKworICAgIGRlZiByZXN1bHRfaHRtbF9vdXRwdXQoc2VsZiwgZmls
ZW5hbWUpOgorICAgICAgICByZXR1cm4gKCI8c3Ryb25nPiVzPC9zdHJvbmc+IiAlIHNlbGYubWVz
c2FnZSgpICsKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9saW5rcyhmaWxlbmFtZSwgc2Vs
Zi5PVVRfRklMRU5BTUVTKSkKKworCitjbGFzcyBGYWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2goRmFp
bHVyZVdpdGhUeXBlKToKKyAgICAiIiJJbWFnZSBoYXNoZXMgZGlkbid0IG1hdGNoLiIiIgorICAg
IE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwucG5nIiwgIi1leHBlY3RlZC5wbmciLCAiLWRpZmYu
cG5nIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgorICAgICAgICAj
IFdlIGNhbGwgdGhpcyBhIHNpbXBsZSBpbWFnZSBtaXNtYXRjaCB0byBhdm9pZCBjb25mdXNpb24s
IHNpbmNlCisgICAgICAgICMgd2UgbGluayB0byB0aGUgUE5HcyByYXRoZXIgdGhhbiB0aGUgY2hl
Y2tzdW1zLgorICAgICAgICByZXR1cm4gIkltYWdlIG1pc21hdGNoIgorCisKK2NsYXNzIEZhaWx1
cmVGdXp6eUZhaWx1cmUoRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJJbWFnZSBoYXNoZXMgZGlk
bid0IG1hdGNoLiIiIgorICAgIE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwucG5nIiwgIi1leHBl
Y3RlZC5wbmciXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6CisgICAg
ICAgIHJldHVybiAiRnV6enkgaW1hZ2UgbWF0Y2ggYWxzbyBmYWlsZWQiCisKKworY2xhc3MgRmFp
bHVyZUltYWdlSGFzaEluY29ycmVjdChGYWlsdXJlV2l0aFR5cGUpOgorICAgICIiIkFjdHVhbCBy
ZXN1bHQgaGFzaCBpcyBpbmNvcnJlY3QuIiIiCisgICAgIyBDaHJvbWUgZG9lc24ndCBrbm93IHRv
IGRpc3BsYXkgYSAuY2hlY2tzdW0gZmlsZSBhcyB0ZXh0LCBzbyBkb24ndCBib3RoZXIKKyAgICAj
IHB1dHRpbmcgaW4gYSBsaW5rIHRvIHRoZSBhY3R1YWwgcmVzdWx0LgorICAgIE9VVF9GSUxFTkFN
RVMgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6CisgICAgICAg
IHJldHVybiAiSW1hZ2VzIG1hdGNoLCBleHBlY3RlZCBpbWFnZSBoYXNoIGluY29ycmVjdC4gIgor
CisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJl
dHVybiAiPHN0cm9uZz4lczwvc3Ryb25nPiIgJSBzZWxmLm1lc3NhZ2UoKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvdGVzdF9mYWlsdXJlcy5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMu
cHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
VGhpcyBtb2R1bGUgaXMgdXNlZCB0byBmaW5kIGFsbCBvZiB0aGUgbGF5b3V0IHRlc3QgZmlsZXMg
dXNlZCBieSBDaHJvbWl1bQorKGFjcm9zcyBhbGwgcGxhdGZvcm1zKS4gSXQgZXhwb3NlcyBvbmUg
cHVibGljIGZ1bmN0aW9uIC0gR2F0aGVyVGVzdEZpbGVzKCkgLQord2hpY2ggdGFrZXMgYW4gb3B0
aW9uYWwgbGlzdCBvZiBwYXRocy4gSWYgYSBsaXN0IGlzIHBhc3NlZCBpbiwgdGhlIHJldHVybmVk
CitsaXN0IG9mIHRlc3QgZmlsZXMgaXMgY29uc3RyYWluZWQgdG8gdGhvc2UgZm91bmQgdW5kZXIg
dGhlIHBhdGhzIHBhc3NlZCBpbiwKK2kuZS4gY2FsbGluZyBHYXRoZXJUZXN0RmlsZXMoWyJMYXlv
dXRUZXN0cy9mYXN0Il0pIHdpbGwgb25seSByZXR1cm4gZmlsZXMKK3VuZGVyIHRoYXQgZGlyZWN0
b3J5LiIiIgorCitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgcGF0aF91dGlscworCisj
IFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCB3ZSBpbmNsdWRlIGFueSBmaWxlIHdpdGggdGhl
c2UgZXh0ZW5zaW9ucy4KK19zdXBwb3J0ZWRfZmlsZV9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwn
LCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5wbCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJy5waHAnLCAnLnN2ZyddKQorIyBXaGVuIGNvbGxlY3RpbmcgdGVzdCBj
YXNlcywgc2tpcCB0aGVzZSBkaXJlY3RvcmllcworX3NraXBwZWRfZGlyZWN0b3JpZXMgPSBzZXQo
Wycuc3ZuJywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3NjcmlwdC10ZXN0cyddKQorCisKK2RlZiBn
YXRoZXJfdGVzdF9maWxlcyhwYXRocyk6CisgICAgIiIiR2VuZXJhdGUgYSBzZXQgb2YgdGVzdCBm
aWxlcyBhbmQgcmV0dXJuIHRoZW0uCisKKyAgICBBcmdzOgorICAgICAgcGF0aHM6IGEgbGlzdCBv
ZiBjb21tYW5kIGxpbmUgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIHdlYmtpdC90ZXN0cworICAgICAg
ICAgIGRpcmVjdG9yeS4gZ2xvYiBwYXR0ZXJucyBhcmUgb2suCisgICAgIiIiCisgICAgcGF0aHNf
dG9fd2FsayA9IHNldCgpCisgICAgIyBpZiBwYXRocyBpcyBlbXB0eSwgcHJvdmlkZSBhIHByZS1k
ZWZpbmVkIGxpc3QuCisgICAgaWYgcGF0aHM6CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgor
ICAgICAgICAgICAgIyBJZiB0aGVyZSdzIGFuICogaW4gdGhlIG5hbWUsIGFzc3VtZSBpdCdzIGEg
Z2xvYiBwYXR0ZXJuLgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRoX3V0aWxz
LmxheW91dF90ZXN0c19kaXIoKSwgcGF0aCkKKyAgICAgICAgICAgIGlmIHBhdGguZmluZCgnKicp
ID4gLTE6CisgICAgICAgICAgICAgICAgZmlsZW5hbWVzID0gZ2xvYi5nbG9iKHBhdGgpCisgICAg
ICAgICAgICAgICAgcGF0aHNfdG9fd2Fsay51cGRhdGUoZmlsZW5hbWVzKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBwYXRoc190b193YWxrLmFkZChwYXRoKQorICAgIGVsc2U6
CisgICAgICAgIHBhdGhzX3RvX3dhbGsuYWRkKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2Rpcigp
KQorCisgICAgIyBOb3cgd2FsayBhbGwgdGhlIHBhdGhzIHBhc3NlZCBpbiBvbiB0aGUgY29tbWFu
ZCBsaW5lIGFuZCBnZXQgZmlsZW5hbWVzCisgICAgdGVzdF9maWxlcyA9IHNldCgpCisgICAgZm9y
IHBhdGggaW4gcGF0aHNfdG9fd2FsazoKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCkg
YW5kIF9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihwYXRoKToKKyAgICAgICAgICAgIHRlc3RfZmls
ZXMuYWRkKG9zLnBhdGgubm9ybXBhdGgocGF0aCkpCisgICAgICAgICAgICBjb250aW51ZQorCisg
ICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICAg
ICAgIyBkb24ndCB3YWxrIHNraXBwZWQgZGlyZWN0b3JpZXMgYW5kIHN1YiBkaXJlY3Rvcmllcwor
ICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShyb290KSBpbiBfc2tpcHBlZF9kaXJlY3Rv
cmllczoKKyAgICAgICAgICAgICAgICBkZWwgZGlyc1s6XQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAg
ICBpZiBfaGFzX3N1cHBvcnRlZF9leHRlbnNpb24oZmlsZW5hbWUpOgorICAgICAgICAgICAgICAg
ICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihyb290LCBmaWxlbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLm5vcm1wYXRoKGZpbGVuYW1lKQorICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2ZpbGVzLmFkZChmaWxlbmFtZSkKKworICAgIHJldHVybiB0ZXN0X2Zp
bGVzCisKKworZGVmIF9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihmaWxlbmFtZSk6CisgICAgIiIi
UmV0dXJuIHRydWUgaWYgZmlsZW5hbWUgaXMgb25lIG9mIHRoZSBmaWxlIGV4dGVuc2lvbnMgd2Ug
d2FudCB0byBydW4gYQorICAgIHRlc3Qgb24uIiIiCisgICAgZXh0ZW5zaW9uID0gb3MucGF0aC5z
cGxpdGV4dChmaWxlbmFtZSlbMV0KKyAgICByZXR1cm4gZXh0ZW5zaW9uIGluIF9zdXBwb3J0ZWRf
ZmlsZV9leHRlbnNpb25zCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5Cl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhy
ZWFkLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5CShyZXZpc2lvbiAwKQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9zaGVsbF90aHJlYWQucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTExIEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQSBUaHJlYWQg
b2JqZWN0IGZvciBydW5uaW5nIHRoZSB0ZXN0IHNoZWxsIGFuZCBwcm9jZXNzaW5nIFVSTHMgZnJv
bSBhCitzaGFyZWQgcXVldWUuCisKK0VhY2ggdGhyZWFkIHJ1bnMgYSBzZXBhcmF0ZSBpbnN0YW5j
ZSBvZiB0aGUgdGVzdF9zaGVsbCBiaW5hcnkgYW5kIHZhbGlkYXRlcwordGhlIG91dHB1dC4gIFdo
ZW4gdGhlcmUgYXJlIG5vIG1vcmUgVVJMcyB0byBwcm9jZXNzIGluIHRoZSBzaGFyZWQgcXVldWUs
IHRoZQordGhyZWFkIGV4aXRzLgorIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNz
CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGlt
ZQorCitpbXBvcnQgcGF0aF91dGlscworaW1wb3J0IHRlc3RfZmFpbHVyZXMKKworCitkZWYgcHJv
Y2Vzc19vdXRwdXQocHJvYywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdl
dCwgb3V0cHV0X2Rpcik6CisgICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9tIGEgdGVzdF9z
aGVsbCBwcm9jZXNzLCBzdWJqZWN0cyBpdCB0byBhIG51bWJlcgorICAgIG9mIHRlc3RzLCBhbmQg
cmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KKworICAg
IEFyZ3M6CisgICAgICBwcm9jOiBhbiBhY3RpdmUgdGVzdF9zaGVsbCBwcm9jZXNzCisgICAgICB0
ZXN0X2luZm86IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRp
bWVvdXQKKyAgICAgIHRlc3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0byBzdWJqZWN0IHRo
ZSBvdXRwdXQgdG8KKyAgICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBl
YWNoIHRlc3QKKyAgICAgIHRhcmdldDogRGVidWcgb3IgUmVsZWFzZQorICAgICAgb3V0cHV0X2Rp
cjogZGlyZWN0b3J5IHRvIHB1dCBjcmFzaCBzdGFjayB0cmFjZXMgaW50bworCisgICAgUmV0dXJu
czogYSBsaXN0IG9mIGZhaWx1cmUgb2JqZWN0cyBhbmQgdGltZXMgZm9yIHRoZSB0ZXN0IGJlaW5n
IHByb2Nlc3NlZAorICAgICIiIgorICAgIG91dGxpbmVzID0gW10KKyAgICBleHRyYV9saW5lcyA9
IFtdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIGNyYXNoID0gRmFsc2UKKworICAgICMgU29tZSB0
ZXN0IGFyZ3MsIHN1Y2ggYXMgdGhlIGltYWdlIGhhc2gsIG1heSBiZSBhZGRlZCBvciBjaGFuZ2Vk
IG9uIGEKKyAgICAjIHRlc3QtYnktdGVzdCBiYXNpcy4KKyAgICBsb2NhbF90ZXN0X2FyZ3MgPSBj
b3B5LmNvcHkodGVzdF9hcmdzKQorCisgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisKKyAg
ICBsaW5lID0gcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorCisgICAgIyBPbmx5IHN0YXJ0IHNhdmlu
ZyBvdXRwdXQgbGluZXMgb25jZSB3ZSd2ZSBsb2FkZWQgdGhlIFVSTCBmb3IgdGhlIHRlc3QuCisg
ICAgdXJsID0gTm9uZQorICAgIHRlc3Rfc3RyaW5nID0gdGVzdF9pbmZvLnVyaS5zdHJpcCgpCisK
KyAgICB3aGlsZSBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKKyAgICAgICAgIyBNYWtlIHN1cmUg
d2UgaGF2ZW4ndCBjcmFzaGVkLgorICAgICAgICBpZiBsaW5lID09ICcnIGFuZCBwcm9jLnBvbGwo
KSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVz
LkZhaWx1cmVDcmFzaCgpKQorCisgICAgICAgICAgICAjIFRoaXMgaXMgaGV4IGNvZGUgMHhjMDAw
MDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJydXB0CisgICAgICAgICAgICAjIHRlcm1pbmF0aW9u
LiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQgYW5kCisgICAg
ICAgICAgICAjIHdlIGhhcHBlbiB0byBiZSB3YWl0aW5nIG9uIHRoZSB0ZXN0X3NoZWxsLgorICAg
ICAgICAgICAgIyBzZG95b246IE5vdCBzdXJlIGZvciB3aGljaCBPUyBhbmQgaW4gd2hhdCBjaXJj
dW1zdGFuY2VzIHRoZQorICAgICAgICAgICAgIyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdv
cmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKKyAgICAgICAgICAgICMgY3RybCtjIGlz
IGZvciB0aGUgc3VicHJvY2VzcyByZXR1cm5jb2RlIHRvIGJlIG5lZ2F0aXZlIFNJR0lOVC4KKyAg
ICAgICAgICAgICMgQW5kIHRoYXQgYWdyZWVzIHdpdGggdGhlIHN1YnByb2Nlc3MgZG9jdW1lbnRh
dGlvbi4KKyAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBwcm9jLnJldHVybmNvZGUgb3IK
KyAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gcHJvYy5yZXR1cm5jb2RlKToKKyAg
ICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICAgICAgY3Jhc2gg
PSBUcnVlCisgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgRG9uJ3QgaW5jbHVkZSAjVVJM
IGxpbmVzIGluIG91ciBvdXRwdXQKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjVVJMOiIp
OgorICAgICAgICAgICAgdXJsID0gbGluZS5yc3RyaXAoKVs1Ol0KKyAgICAgICAgICAgIGlmIHVy
bCAhPSB0ZXN0X3N0cmluZzoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmZhdGFsKCJUZXN0IGdv
dCBvdXQgb2Ygc3luYzpcbnwlc3xcbnwlc3wiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh1cmwsIHRlc3Rfc3RyaW5nKSkKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcigidGVzdCBvdXQgb2Ygc3luYyIpCisgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCIj
TUQ1OiIpOgorICAgICAgICAgICAgbG9jYWxfdGVzdF9hcmdzLmhhc2ggPSBsaW5lLnJzdHJpcCgp
WzU6XQorICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI1RFU1RfVElNRURfT1VUIik6Cisg
ICAgICAgICAgICAjIFRlc3QgdGltZWQgb3V0LCBidXQgd2Ugc3RpbGwgbmVlZCB0byByZWFkIHVu
dGlsICNFT0YuCisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWls
dXJlVGltZW91dCgpKQorICAgICAgICBlbGlmIHVybDoKKyAgICAgICAgICAgIG91dGxpbmVzLmFw
cGVuZChsaW5lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0cmFfbGluZXMuYXBwZW5k
KGxpbmUpCisKKyAgICAgICAgbGluZSA9IHByb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKworICAgIGVu
ZF90ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgaWYgbGVuKGV4dHJhX2xpbmVzKToKKyAg
ICAgICAgZXh0cmEgPSAiIi5qb2luKGV4dHJhX2xpbmVzKQorICAgICAgICBpZiBjcmFzaDoKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHRlc3Rf
c3RyaW5nLCBleHRyYSkpCisgICAgICAgICAgICAjIFN0cmlwIG9mZiAiZmlsZTovLyIgc2luY2Ug
UmVsYXRpdmVUZXN0RmlsZW5hbWUgZXhwZWN0cworICAgICAgICAgICAgIyBmaWxlc3lzdGVtIHBh
dGhzLgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwKKyAg
ICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9zdHJp
bmdbNzpdKSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFt
ZSlbMF0gKyAiLXN0YWNrLnR4dCIKKyAgICAgICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9k
aXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCisgICAgICAgICAgICBvcGVuKGZp
bGVuYW1lLCAid2IiKS53cml0ZShleHRyYSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxv
Z2dpbmcuZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0IGV4dHJhIGxpbmVzIGFmdGVyIGR1bXA6
XG4lcyIgJQorICAgICAgICAgICAgICAgIGV4dHJhKQorCisgICAgIyBDaGVjayB0aGUgb3V0cHV0
IGFuZCBzYXZlIHRoZSByZXN1bHRzLgorICAgIHRpbWVfZm9yX2RpZmZzID0ge30KKyAgICBmb3Ig
dGVzdF90eXBlIGluIHRlc3RfdHlwZXM6CisgICAgICAgIHN0YXJ0X2RpZmZfdGltZSA9IHRpbWUu
dGltZSgpCisgICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5jb21wYXJlX291dHB1dCh0
ZXN0X2luZm8uZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9jLCAnJy5qb2luKG91dGxpbmVzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3Rlc3RfYXJncywgdGFyZ2V0KQorICAg
ICAgICAjIERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBj
cmFzaCwgc28gd2UgZG9uJ3QKKyAgICAgICAgIyBkb3VibGUtcmVwb3J0IHRob3NlIHRlc3RzLiBX
ZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cyBzaW5jZQorICAgICAgICAjIHdlIHN0aWxs
IHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCisgICAgICAgIGlmIG5vdCBj
cmFzaDoKKyAgICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChuZXdfZmFpbHVyZXMpCisgICAgICAg
IHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1lX19dID0gKAorICAgICAg
ICAgICAgdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUpCisKKyAgICB0b3RhbF90aW1lX2Zv
cl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIGVuZF90ZXN0X3RpbWUKKyAgICB0ZXN0X3J1bl90
aW1lID0gZW5kX3Rlc3RfdGltZSAtIHN0YXJ0X3RpbWUKKyAgICByZXR1cm4gVGVzdFN0YXRzKHRl
c3RfaW5mby5maWxlbmFtZSwgZmFpbHVyZXMsIHRlc3RfcnVuX3RpbWUsCisgICAgICAgIHRvdGFs
X3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCisKKworZGVmIHN0YXJ0X3Rlc3Rf
c2hlbGwoY29tbWFuZCwgYXJncyk6CisgICAgIiIiUmV0dXJucyB0aGUgcHJvY2VzcyBmb3IgYSBu
ZXcgdGVzdF9zaGVsbCBzdGFydGVkIGluIGxheW91dC10ZXN0cyBtb2RlLgorICAgICIiIgorICAg
IGNtZCA9IFtdCisgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVu
dGltZSBpbnN0cnVtZW50YXRpb24sCisgICAgIyB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFsZ3JpbmQv
dmFsZ3JpbmRfdGVzdHMucHkuCisgICAgd3JhcHBlciA9IG9zLmVudmlyb24uZ2V0KCJCUk9XU0VS
X1dSQVBQRVIiLCBOb25lKQorICAgIGlmIHdyYXBwZXIgIT0gTm9uZToKKyAgICAgICAgY21kICs9
IFt3cmFwcGVyXQorICAgIGNtZCArPSBjb21tYW5kICsgWyctLWxheW91dC10ZXN0cyddICsgYXJn
cworICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisKKworY2xhc3MgVGVzdFN0YXRzOgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmYWlsdXJlcywgdGVzdF9ydW5fdGltZSwKKyAgICAg
ICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcyk6Cisg
ICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmZhaWx1cmVzID0g
ZmFpbHVyZXMKKyAgICAgICAgc2VsZi50ZXN0X3J1bl90aW1lID0gdGVzdF9ydW5fdGltZQorICAg
ICAgICBzZWxmLnRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRvdGFsX3RpbWVfZm9yX2FsbF9k
aWZmcworICAgICAgICBzZWxmLnRpbWVfZm9yX2RpZmZzID0gdGltZV9mb3JfZGlmZnMKKworCitj
bGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIlRocmVhZCB3
cmFwcGVyIGZvciBydW5uaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4iIiIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0ZXN0X3NoZWxsX2NvbW1hbmQsIHNoZWxsX2FyZ3MsIHRlc3RfaW5mbywgdGVz
dF90eXBlcywKKyAgICAgICAgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIpOgorICAgICAg
ICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0X2luZm86IE9iamVjdCBjb250YWlu
aW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKyAgICAgICAgICBvdXRwdXRf
ZGlyOiBEaXJlY3RvcnkgdG8gcHV0IGNyYXNoIHN0YWNrcyBpbnRvLgorICAgICAgICAgIFNlZSBU
ZXN0U2hlbGxUaHJlYWQgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIHJlbWFpbmluZyBhcmd1bWVu
dHMuCisgICAgICAgICIiIgorCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2Vs
ZikKKyAgICAgICAgc2VsZi5fY29tbWFuZCA9IHRlc3Rfc2hlbGxfY29tbWFuZAorICAgICAgICBz
ZWxmLl9zaGVsbF9hcmdzID0gc2hlbGxfYXJncworICAgICAgICBzZWxmLl90ZXN0X2luZm8gPSB0
ZXN0X2luZm8KKyAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRlc3RfdHlwZXMKKyAgICAgICAg
c2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCisgICAgICAgIHNlbGYuX3RhcmdldCA9IHRhcmdl
dAorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgorCisgICAgZGVmIHJ1bihz
ZWxmKToKKyAgICAgICAgcHJvYyA9IHN0YXJ0X3Rlc3Rfc2hlbGwoc2VsZi5fY29tbWFuZCwgc2Vs
Zi5fc2hlbGxfYXJncyArCisgICAgICAgICAgICBbIi0tdGltZS1vdXQtbXM9IiArIHNlbGYuX3Rl
c3RfaW5mby50aW1lb3V0LCBzZWxmLl90ZXN0X2luZm8udXJpXSkKKyAgICAgICAgc2VsZi5fdGVz
dF9zdGF0cyA9IHByb2Nlc3Nfb3V0cHV0KHByb2MsIHNlbGYuX3Rlc3RfaW5mbywKKyAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywgc2VsZi5fdGFyZ2V0LCBzZWxm
Ll9vdXRwdXRfZGlyKQorCisgICAgZGVmIGdldF90ZXN0X3N0YXRzKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fdGVzdF9zdGF0cworCisKK2NsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRp
bmcuVGhyZWFkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZV9saXN0X3F1ZXVl
LCByZXN1bHRfcXVldWUsIHRlc3Rfc2hlbGxfY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgdGVz
dF90eXBlcywgdGVzdF9hcmdzLCBzaGVsbF9hcmdzLCBvcHRpb25zKToKKyAgICAgICAgIiIiSW5p
dGlhbGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRlIGZvciB0aGlzIHRlc3Qgc2hlbGwgdGhyZWFkLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWVfbGlzdF9xdWV1ZTogQSB0aHJlYWQg
c2FmZSBRdWV1ZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGxpc3RzCisgICAgICAgICAgICAgIG9mIHR1
cGxlcyBvZiAoZmlsZW5hbWUsIHVyaSkgcGFpcnMuCisgICAgICAgICAgcmVzdWx0X3F1ZXVlOiBB
IHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgd2lsbCBjb250YWluIHR1cGxlcyBvZgorICAg
ICAgICAgICAgICAodGVzdCwgZmFpbHVyZSBsaXN0cykgZm9yIHRoZSB0ZXN0IHJlc3VsdHMuCisg
ICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5kOiBBIGxpc3Qgc3BlY2lmeWluZyB0aGUgY29tbWFu
ZCthcmdzIGZvcgorICAgICAgICAgICAgICB0ZXN0X3NoZWxsCisgICAgICAgICAgdGVzdF90eXBl
czogQSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMgdG8gcnVuIHRoZSB0ZXN0IG91dHB1dAorICAg
ICAgICAgICAgICBhZ2FpbnN0LgorICAgICAgICAgIHRlc3RfYXJnczogQSBUZXN0QXJndW1lbnRz
IG9iamVjdCB0byBwYXNzIHRvIGVhY2ggVGVzdFR5cGUuCisgICAgICAgICAgc2hlbGxfYXJnczog
QW55IGV4dHJhIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGVzdF9zaGVsbC5leGUuCisgICAg
ICAgICAgb3B0aW9uczogQSBwcm9wZXJ0eSBkaWN0aW9uYXJ5IGFzIHByb2R1Y2VkIGJ5IG9wdHBh
cnNlLiBUaGUKKyAgICAgICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbnMgc2hvdWxkIG1hdGNo
IHRob3NlIGV4cGVjdGVkIGJ5CisgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVzdHM7IHRoZXkg
YXJlIHR5cGljYWxseSBwYXNzZWQgdmlhIHRoZQorICAgICAgICAgICAgICBydW5fd2Via2l0X3Rl
c3RzLlRlc3RSdW5uZXIgY2xhc3MuIiIiCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0
X18oc2VsZikKKyAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xp
c3RfcXVldWUKKyAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCisgICAg
ICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQorICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX2Nv
bW1hbmQgPSB0ZXN0X3NoZWxsX2NvbW1hbmQKKyAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRl
c3RfdHlwZXMKKyAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCisgICAgICAgIHNl
bGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fc2hlbGxfYXJncyA9IHNo
ZWxsX2FyZ3MKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5f
Y2FuY2VsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fZGlyZWN0b3J5X3RpbWluZ19zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3Rl
c3Rfc3RhdHMgPSBbXQorICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCisgICAgICAgIHNlbGYu
X3N0YXJ0X3RpbWUgPSAwCisgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IDAKKworICAgICAgICAj
IEN1cnJlbnQgZGlyZWN0b3J5IG9mIHRlc3RzIHdlJ3JlIHJ1bm5pbmcuCisgICAgICAgIHNlbGYu
X2N1cnJlbnRfZGlyID0gTm9uZQorICAgICAgICAjIE51bWJlciBvZiB0ZXN0cyBpbiBzZWxmLl9j
dXJyZW50X2Rpci4KKyAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZGlyID0gTm9u
ZQorICAgICAgICAjIFRpbWUgYXQgd2hpY2ggd2Ugc3RhcnRlZCBydW5uaW5nIHRlc3RzIGZyb20g
c2VsZi5fY3VycmVudF9kaXIuCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZGlyX3N0YXJ0X3RpbWUg
PSBOb25lCisKKyAgICBkZWYgZ2V0X2RpcmVjdG9yeV90aW1pbmdfc3RhdHMoc2VsZik6CisgICAg
ICAgICIiIlJldHVybnMgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGVzdCBkaXJlY3RvcnkgdG8gYSB0
dXBsZSBvZgorICAgICAgICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZGlyZWN0b3J5LCB0aW1l
IHRvIHJ1biB0aGUgdGVzdHMpIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9kaXJlY3RvcnlfdGlt
aW5nX3N0YXRzCisKKyAgICBkZWYgZ2V0X2luZGl2aWR1YWxfdGVzdF9zdGF0cyhzZWxmKToKKyAg
ICAgICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgKHRlc3RfZmlsZW5hbWUsIHRpbWVfdG9fcnVuX3Rl
c3QsCisgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpIHR1
cGxlcy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3Rfc3RhdHMKKworICAgIGRlZiBjYW5j
ZWwoc2VsZik6CisgICAgICAgICIiIlNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBx
dWl0LiIiIgorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKKworICAgIGRlZiBnZXRfZXhj
ZXB0aW9uX2luZm8oc2VsZik6CisgICAgICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4g
dW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4gaXQgaGVyZQorICAgICAgICAoKHR5cGUsIHZhbHVl
LCB0cmFjZWJhY2spIHR1cGxlKS4KKyAgICAgICAgUmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1p
bmF0ZWQgbm9ybWFsbHkuIE1lYW50IHRvIGJlIGNhbGxlZCBhZnRlcgorICAgICAgICBqb2luaW5n
IHRoaXMgdGhyZWFkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KKwor
ICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG1heChzZWxmLl9z
dG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1lLCAwLjApCisKKyAgICBkZWYgZ2V0X251bV90ZXN0
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX251bV90ZXN0cworCisgICAgZGVmIHJ1bihz
ZWxmKToKKyAgICAgICAgIiIiRGVsZWdhdGUgbWFpbiB3b3JrIHRvIGEgaGVscGVyIG1ldGhvZCBh
bmQgd2F0Y2ggZm9yIHVuY2F1Z2h0CisgICAgICAgIGV4Y2VwdGlvbnMuIiIiCisgICAgICAgIHNl
bGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAw
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyVzIHN0YXJ0aW5nJyAl
IChzZWxmLmdldE5hbWUoKSkpCisgICAgICAgICAgICBzZWxmLl9ydW4odGVzdF9ydW5uZXI9Tm9u
ZSwgcmVzdWx0X3N1bW1hcnk9Tm9uZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyVzIGRv
bmUgKCVkIHRlc3RzKScgJSAoc2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuZ2V0X251bV90ZXN0cygpKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg
IyBTYXZlIHRoZSBleGNlcHRpb24gZm9yIG91ciBjYWxsZXIgdG8gc2VlLgorICAgICAgICAgICAg
c2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgc2VsZi5f
c3RvcF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICMgUmUtcmFpc2UgaXQgYW5kIGRp
ZS4KKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJyVzIGR5aW5nOiAlcycgJSAoc2VsZi5nZXRO
YW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvKSkK
KyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgp
CisKKyAgICBkZWYgcnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRf
c3VtbWFyeSk6CisgICAgICAgICIiIlRoaXMgaG9vayBhbGxvd3MgdXMgdG8gcnVuIHRoZSB0ZXN0
cyBmcm9tIHRoZSBtYWluIHRocmVhZCBpZgorICAgICAgICAtLW51bS10ZXN0LXNoZWxscz09MSwg
aW5zdGVhZCBvZiBoYXZpbmcgdG8gYWx3YXlzIHJ1biB0d28gb3IgbW9yZQorICAgICAgICB0aHJl
YWRzLiBUaGlzIGFsbG93cyB1cyB0byBkZWJ1ZyB0aGUgdGVzdCBoYXJuZXNzIHdpdGhvdXQgaGF2
aW5nIHRvCisgICAgICAgIGRvIG11bHRpLXRocmVhZGVkIGRlYnVnZ2luZy4iIiIKKyAgICAgICAg
c2VsZi5fcnVuKHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSkKKworICAgIGRlZiBfcnVuKHNl
bGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIk1haW4gd29yayBl
bnRyeSBwb2ludCBvZiB0aGUgdGhyZWFkLiBCYXNpY2FsbHkgd2UgcHVsbCB1cmxzIGZyb20gdGhl
CisgICAgICAgIGZpbGVuYW1lIHF1ZXVlIGFuZCBydW4gdGhlIHRlc3RzIHVudGlsIHdlIHJ1biBv
dXQgb2YgdXJscy4KKworICAgICAgICBJZiB0ZXN0X3J1bm5lciBpcyBub3QgTm9uZSwgdGhlbiB3
ZSBjYWxsIHRlc3RfcnVubmVyLlVwZGF0ZVN1bW1hcnkoKQorICAgICAgICB3aXRoIHRoZSByZXN1
bHRzIG9mIGVhY2ggdGVzdC4iIiIKKyAgICAgICAgYmF0Y2hfc2l6ZSA9IDAKKyAgICAgICAgYmF0
Y2hfY291bnQgPSAwCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZToKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYXRjaF9zaXplID0gaW50KHNlbGYuX29wdGlv
bnMuYmF0Y2hfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dn
aW5nLmluZm8oIklnbm9yaW5nIGludmFsaWQgYmF0Y2ggc2l6ZSAnJXMnIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZSkKKworICAgICAgICAj
IEFwcGVuZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0
IGZpbGUuCisgICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6
X1ByZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0LgorICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4udHh0IikKKyAgICAg
ICAgdGVzdHNfcnVuX2ZpbGUgPSBvcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiKQorCisgICAg
ICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxlZDoKKyAgICAgICAg
ICAgICAgICBsb2dnaW5nLmluZm8oJ1Rlc3RpbmcgY2FuY2VsZWQnKQorICAgICAgICAgICAgICAg
IHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAg
ICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6CisgICAgICAgICAgICAgICAg
aWYgc2VsZi5fY3VycmVudF9kaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuX2RpcmVjdG9yeV90aW1pbmdfc3RhdHNbc2VsZi5fY3VycmVudF9kaXJdID0gXAorICAgICAg
ICAgICAgICAgICAgICAgICAgKHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2RpciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHNlbGYuX2N1cnJlbnRfZGlyX3N0YXJ0
X3RpbWUpCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2N1cnJlbnRfZGlyLCBzZWxmLl9maWxlbmFtZV9saXN0ID0gXAorICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRfbm93YWl0KCkKKyAgICAgICAgICAg
ICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxf
dGVzdF9zaGVsbCgpCisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBzZWxmLl9udW1f
dGVzdHNfaW5fY3VycmVudF9kaXIgPSBsZW4oc2VsZi5fZmlsZW5hbWVfbGlzdCkKKyAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X2Rpcl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKKworICAg
ICAgICAgICAgdGVzdF9pbmZvID0gc2VsZi5fZmlsZW5hbWVfbGlzdC5wb3AoKQorCisgICAgICAg
ICAgICAjIFdlIGhhdmUgYSB1cmwsIHJ1biB0ZXN0cy4KKyAgICAgICAgICAgIGJhdGNoX2NvdW50
ICs9IDEKKyAgICAgICAgICAgIHNlbGYuX251bV90ZXN0cyArPSAxCisgICAgICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMgPSBzZWxm
Ll9ydW5fdGVzdF9zaW5nbHkodGVzdF9pbmZvKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5mbykKKworICAgICAgICAg
ICAgZmlsZW5hbWUgPSB0ZXN0X2luZm8uZmlsZW5hbWUKKyAgICAgICAgICAgIHRlc3RzX3J1bl9m
aWxlLndyaXRlKGZpbGVuYW1lICsgIlxuIikKKyAgICAgICAgICAgIGlmIGZhaWx1cmVzOgorICAg
ICAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgdGVzdCBzaGVsbCBpZiB3ZSBuZWVkIHRvby4K
KyAgICAgICAgICAgICAgICBpZiBsZW4oWzEgZm9yIGYgaW4gZmFpbHVyZXMgaWYgZi5zaG91bGRf
a2lsbF90ZXN0X3NoZWxsKCldKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF90ZXN0
X3NoZWxsKCkKKyAgICAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2lu
Y2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KKyAgICAgICAgICAgICAgICAgICAgYmF0Y2hfY291
bnQgPSAwCisgICAgICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KKyAg
ICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBm
b3IgZiBpbiBmYWlsdXJlc10pCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiJXMgJXMg
ZmFpbGVkOlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5nZXRO
YW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1
ZS5wdXQoKGZpbGVuYW1lLCBmYWlsdXJlcykpCisKKyAgICAgICAgICAgIGlmIGJhdGNoX3NpemUg
PiAwIGFuZCBiYXRjaF9jb3VudCA+IGJhdGNoX3NpemU6CisgICAgICAgICAgICAgICAgIyBCb3Vu
Y2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAgICAgICBzZWxmLl9raWxs
X3Rlc3Rfc2hlbGwoKQorICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAorCisgICAgICAg
ICAgICBpZiB0ZXN0X3J1bm5lcjoKKyAgICAgICAgICAgICAgICB0ZXN0X3J1bm5lci51cGRhdGVf
c3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKworICAgIGRlZiBfcnVuX3Rlc3Rfc2luZ2x5KHNlbGYs
IHRlc3RfaW5mbyk6CisgICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQs
IGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBjYW4gb25s
eSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCisg
ICAgICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3QgdGltZW91
dHMgd2hlbiBydW5uaW5nIHRlc3QKKyAgICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxl
bmFtZSwgdXJpIGFuZCB0aW1lb3V0CisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAgIEEgbGlz
dCBvZiBUZXN0RmFpbHVyZSBvYmplY3RzIGRlc2NyaWJpbmcgdGhlIGVycm9yLgorICAgICAgICAi
IiIKKyAgICAgICAgd29ya2VyID0gU2luZ2xlVGVzdFRocmVhZChzZWxmLl90ZXN0X3NoZWxsX2Nv
bW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxfYXJn
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50YXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAg
ICAgICB3b3JrZXIuc3RhcnQoKQorCisgICAgICAgICMgV2hlbiB3ZSdyZSBydW5uaW5nIG9uZSB0
ZXN0IHBlciB0ZXN0X3NoZWxsIHByb2Nlc3MsIHdlIGNhbiBlbmZvcmNlCisgICAgICAgICMgYSBo
YXJkIHRpbWVvdXQuIHRoZSB0ZXN0X3NoZWxsIHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91
dAorICAgICAgICAjIFdlIHdhbnQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhhdC4KKyAgICAgICAgd29y
a2VyLmpvaW4oaW50KHRlc3RfaW5mby50aW1lb3V0KSAqIDMuMCAvIDEwMDAuMCkKKyAgICAgICAg
aWYgd29ya2VyLmlzQWxpdmUoKToKKyAgICAgICAgICAgICMgSWYgam9pbigpIHJldHVybmVkIHdp
dGggdGhlIHRocmVhZCBzdGlsbCBydW5uaW5nLCB0aGUKKyAgICAgICAgICAgICMgdGVzdF9zaGVs
bC5leGUgaXMgY29tcGxldGVseSBodW5nIGFuZCB0aGVyZSdzIG5vdGhpbmcKKyAgICAgICAgICAg
ICMgbW9yZSB3ZSBjYW4gZG8gd2l0aCBpdC4gIFdlIGhhdmUgdG8ga2lsbCBhbGwgdGhlCisgICAg
ICAgICAgICAjIHRlc3Rfc2hlbGxzIHRvIGZyZWUgaXQgdXAuIElmIHdlJ3JlIHJ1bm5pbmcgbW9y
ZSB0aGFuCisgICAgICAgICAgICAjIG9uZSB0ZXN0X3NoZWxsIHRocmVhZCwgd2UnbGwgZW5kIHVw
IGtpbGxpbmcgdGhlIG90aGVyCisgICAgICAgICAgICAjIHRlc3Rfc2hlbGxzIHRvbywgaW50cm9k
dWNpbmcgc3B1cmlvdXMgY3Jhc2hlcy4gV2UgYWNjZXB0IHRoYXQKKyAgICAgICAgICAgICMgdHJh
ZGVvZmYgaW4gb3JkZXIgdG8gYXZvaWQgbG9zaW5nIHRoZSByZXN0IG9mIHRoaXMgdGhyZWFkJ3MK
KyAgICAgICAgICAgICMgcmVzdWx0cy4KKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ1Rlc3Qg
dGhyZWFkIGh1bmc6IGtpbGxpbmcgYWxsIHRlc3Rfc2hlbGxzJykKKyAgICAgICAgICAgIHBhdGhf
dXRpbHMua2lsbF9hbGxfdGVzdF9zaGVsbHMoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHN0YXRzID0gd29ya2VyLmdldF90ZXN0X3N0YXRzKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
c3RhdHMuYXBwZW5kKHN0YXRzKQorICAgICAgICAgICAgZmFpbHVyZXMgPSBzdGF0cy5mYWlsdXJl
cworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBmYWlsdXJl
cyA9IFtdCisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdDYW5ub3QgZ2V0IHJlc3VsdHMgb2Yg
dGVzdDogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1l
KQorCisgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0
ZXN0X2luZm8pOgorICAgICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBmaWxlIHVzaW5nIGEgc2hh
cmVkIHRlc3Rfc2hlbGwgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3Rf
aW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91
dAorCisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBBIGxpc3Qgb2YgVGVzdEZhaWx1cmUgb2Jq
ZWN0cyBkZXNjcmliaW5nIHRoZSBlcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Vu
c3VyZV90ZXN0X3NoZWxsX2lzX3J1bm5pbmcoKQorICAgICAgICAjIEFyZ3MgdG8gdGVzdF9zaGVs
bCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCisgICAgICAgICMgInVyaSB0aW1lb3V0IHBp
eGVsX2hhc2giCisgICAgICAgICMgVGhlIHRpbWVvdXQgYW5kIHBpeGVsX2hhc2ggYXJlIG9wdGlv
bmFsLiAgVGhlIHRpbWVvdXQgaXMgdXNlZCBpZiB0aGlzCisgICAgICAgICMgdGVzdCBoYXMgYSBj
dXN0b20gdGltZW91dC4gVGhlIHBpeGVsX2hhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbgor
ICAgICAgICAjIGltYWdlIGR1bXAgaWYgdGhlIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxk
IGJlIHNldCB0byBhIGJsYW5rCisgICAgICAgICMgdmFsdWUgaWYgd2UgYXJlIGdlbmVyYXRpbmcg
YSBuZXcgYmFzZWxpbmUuCisgICAgICAgICMgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhIHBy
ZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRvCisgICAgICAgICMgdGhlIGJhc2VsaW5lLikK
KyAgICAgICAgaW1hZ2VfaGFzaCA9IHRlc3RfaW5mby5pbWFnZV9oYXNoCisgICAgICAgIGlmIGlt
YWdlX2hhc2ggYW5kIHNlbGYuX3Rlc3RfYXJncy5uZXdfYmFzZWxpbmU6CisgICAgICAgICAgICBp
bWFnZV9oYXNoID0gIiIKKyAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGluLndyaXRl
KCgiJXMgJXMgJXNcbiIgJQorICAgICAgICAgICAgKHRlc3RfaW5mby51cmksIHRlc3RfaW5mby50
aW1lb3V0LCBpbWFnZV9oYXNoKSkpCisKKyAgICAgICAgIyBJZiB0aGUgdGVzdCBzaGVsbCBpcyBk
ZWFkLCB0aGUgYWJvdmUgbWF5IGNhdXNlIGFuIElPRXJyb3IgYXMgd2UKKyAgICAgICAgIyB0cnkg
dG8gd3JpdGUgb250byB0aGUgYnJva2VuIHBpcGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRlc3Qg
Zm9yCisgICAgICAgICMgdGhpcyB0ZXN0IHNoZWxsIHByb2Nlc3MsIHRoYW4gdGhlIHRlc3Qgc2hl
bGwgZGlkIG5vdAorICAgICAgICAjIHN1Y2Nlc3NmdWxseSBzdGFydC4gSWYgdGhpcyBpcyBub3Qg
dGhlIGZpcnN0IHRlc3QsIHRoZW4gdGhlCisgICAgICAgICMgcHJldmlvdXMgdGVzdHMgaGF2ZSBj
YXVzZWQgc29tZSBraW5kIG9mIGRlbGF5ZWQgY3Jhc2guIFdlIGRvbid0CisgICAgICAgICMgdHJ5
IHRvIHJlY292ZXIgaGVyZS4KKyAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGluLmZs
dXNoKCkKKworICAgICAgICBzdGF0cyA9IHByb2Nlc3Nfb3V0cHV0KHNlbGYuX3Rlc3Rfc2hlbGxf
cHJvYywgdGVzdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rl
c3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgICAgIHNlbGYuX3Rlc3Rfc3Rh
dHMuYXBwZW5kKHN0YXRzKQorICAgICAgICByZXR1cm4gc3RhdHMuZmFpbHVyZXMKKworICAgIGRl
ZiBfZW5zdXJlX3Rlc3Rfc2hlbGxfaXNfcnVubmluZyhzZWxmKToKKyAgICAgICAgIiIiU3RhcnQg
dGhlIHNoYXJlZCB0ZXN0IHNoZWxsLCBpZiBpdCdzIG5vdCBydW5uaW5nLiAgTm90IGZvciB1c2Ug
d2hlbgorICAgICAgICBydW5uaW5nIHRlc3RzIHNpbmdseSwgc2luY2UgdGhvc2UgZWFjaCBzdGFy
dCBhIHNlcGFyYXRlIHRlc3Qgc2hlbGwgaW4KKyAgICAgICAgdGhlaXIgb3duIHRocmVhZC4KKyAg
ICAgICAgIiIiCisgICAgICAgIGlmIChub3Qgc2VsZi5fdGVzdF9zaGVsbF9wcm9jIG9yCisgICAg
ICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lKToKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IHN0YXJ0X3Rlc3Rfc2hlbGwoc2VsZi5fdGVz
dF9zaGVsbF9jb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9zaGVsbF9hcmdzKQorCisgICAgZGVmIF9raWxsX3Rlc3Rfc2hl
bGwoc2VsZik6CisgICAgICAgICIiIktpbGwgdGhlIHRlc3Qgc2hlbGwgcHJvY2VzcyBpZiBpdCdz
IHJ1bm5pbmcuIiIiCisgICAgICAgIGlmIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYzoKKyAgICAgICAg
ICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICBzZWxm
Ll90ZXN0X3NoZWxsX3Byb2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Rl
c3Rfc2hlbGxfcHJvYy5zdGRlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9w
cm9jLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAgICBpZiAoc3lzLnBsYXRmb3JtIG5vdCBpbiAo
J3dpbjMyJywgJ2N5Z3dpbicpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLl90ZXN0X3No
ZWxsX3Byb2MucG9sbCgpKToKKyAgICAgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0
L3N0ZGVyciBoYW5ncyBzb21ldGltZXMgb24gT1MgWC4KKyAgICAgICAgICAgICAgICBudWxsID0g
b3Blbihvcy5kZXZudWxsLCAidyIpCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihb
ImtpbGwiLCAiLTkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYu
X3Rlc3Rfc2hlbGxfcHJvYy5waWQpXSwgc3RkZXJyPW51bGwpCisgICAgICAgICAgICAgICAgbnVs
bC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2MgPSBOb25lCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93ZWJzb2NrZXRfc2VydmVyLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93ZWJzb2NrZXRfc2Vy
dmVyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9w
IHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKKworaW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxp
YgorCitpbXBvcnQgcGF0aF91dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxzCitpbXBvcnQgaHR0
cF9zZXJ2ZXIKKworX1dTX0xPR19QUkVGSVggPSAncHl3ZWJzb2NrZXQud3MubG9nLScKK19XU1Nf
TE9HX1BSRUZJWCA9ICdweXdlYnNvY2tldC53c3MubG9nLScKKworX0RFRkFVTFRfV1NfUE9SVCA9
IDg4ODAKK19ERUZBVUxUX1dTU19QT1JUID0gOTMyMworCisKK2RlZiB1cmxfaXNfYWxpdmUodXJs
KToKKyAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB3ZSBnZXQgYW4gaHR0cCByZXNwb25zZSBmcm9tIHx1
cmx8LgorICBXZSBwb2xsIHRoZSB1cmwgNSB0aW1lcyB3aXRoIGEgMSBzZWNvbmQgZGVsYXkuICBJ
ZiB3ZSBkb24ndAorICBnZXQgYSByZXBseSBpbiB0aGF0IHRpbWUsIHdlIGdpdmUgdXAgYW5kIGFz
c3VtZSB0aGUgaHR0cGQKKyAgZGlkbid0IHN0YXJ0IHByb3Blcmx5LgorCisgIEFyZ3M6CisgICAg
dXJsOiBUaGUgVVJMIHRvIGNoZWNrLgorICBSZXR1cm46CisgICAgVHJ1ZSBpZiB0aGUgdXJsIGlz
IGFsaXZlLgorICAiIiIKKyAgd2FpdF90aW1lID0gNQorICB3aGlsZSB3YWl0X3RpbWUgPiAwOgor
ICAgIHRyeToKKyAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgIyBT
ZXJ2ZXIgaXMgdXAgYW5kIHJlc3BvbmRpbmcuCisgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2Vw
dCBJT0Vycm9yOgorICAgICAgcGFzcworICAgIHdhaXRfdGltZSAtPSAxCisgICAgIyBXYWl0IGEg
c2Vjb25kIGFuZCB0cnkgYWdhaW4uCisgICAgdGltZS5zbGVlcCgxKQorCisgIHJldHVybiBGYWxz
ZQorCisKK2RlZiByZW1vdmVfbG9nX2ZpbGVzKGZvbGRlciwgc3RhcnRzX3dpdGgpOgorICAgIGZp
bGVzID0gb3MubGlzdGRpcihmb2xkZXIpCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAg
IGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAgICBmdWxsX3BhdGgg
PSBvcy5wYXRoLmpvaW4oZm9sZGVyLCBmaWxlKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxf
cGF0aCkKKworCitjbGFzcyBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoRXhjZXB0aW9uKToKKyAgICBw
YXNzCisKKworY2xhc3MgUHlXZWJTb2NrZXROb3RGb3VuZChFeGNlcHRpb24pOgorICAgIHBhc3MK
KworCitjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgb3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9XU19QT1JULAorICAgICAg
ICAgICAgICAgICByb290PU5vbmUsCisgICAgICAgICAgICAgICAgIHVzZV90bHM9RmFsc2UsCisg
ICAgICAgICAgICAgICAgIHByaXZhdGVfa2V5PWh0dHBfc2VydmVyLkxpZ2h0dHBkLl9wZW1fZmls
ZSwKKyAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGU9aHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX3Bl
bV9maWxlLAorICAgICAgICAgICAgICAgICByZWdpc3Rlcl9jeWd3aW49Tm9uZSwKKyAgICAgICAg
ICAgICAgICAgcGlkZmlsZT1Ob25lKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICBvdXRw
dXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVj
dG9yeQorICAgICAgICAiIiIKKyAgICAgICAgaHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX19pbml0X18o
c2VsZiwgb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9ydD1wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290PXJv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dp
bj1yZWdpc3Rlcl9jeWd3aW4pCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGly
CisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0
CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3VzZV90bHMgPSB1c2Vf
dGxzCisgICAgICAgIHNlbGYuX3ByaXZhdGVfa2V5ID0gcHJpdmF0ZV9rZXkKKyAgICAgICAgc2Vs
Zi5fY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZQorICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAg
ICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxmLl9wb3J0KQorICAgICAgICBpZiBzZWxmLl91
c2VfdGxzOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQoU2Vj
dXJlKScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lID0gJ1B5
V2ViU29ja2V0JworICAgICAgICBzZWxmLl9waWRmaWxlID0gcGlkZmlsZQorICAgICAgICBzZWxm
Ll93c291dCA9IE5vbmUKKworICAgICAgICAjIFdlYmtpdCB0ZXN0cworICAgICAgICBpZiBzZWxm
Ll9yb290OgorICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRo
KHNlbGYuX3Jvb3QpCisgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gb3MucGF0
aC5hYnNwYXRoKAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLl9yb290LCAnd2Vi
c29ja2V0JywgJ3Rlc3RzJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoCisgICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5
b3V0VGVzdHMnLCAnd2Vic29ja2V0JywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzJykKKyAg
ICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKAorICAgICAgICAgICAgICAgICAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91
dFRlc3RzJykKKyAgICAgICAgICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoKKyAg
ICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gTm9uZQorCisgICAgZGVmIHN0
YXJ0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd2ViX3NvY2tldF90ZXN0czoKKyAgICAg
ICAgICAgIGxvZ2dpbmcuaW5mbygnTm8gbmVlZCB0byBzdGFydCAlcyBzZXJ2ZXIuJyAlIHNlbGYu
X3NlcnZlcl9uYW1lKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuaXNfcnVu
bmluZygpOgorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RTdGFydGVkKCclcyBpcyBh
bHJlYWR5IHJ1bm5pbmcuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0aW1l
KCclZCViJVktJUglTSVTJykKKyAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKKyAgICAgICAgICAg
IGxvZ19wcmVmaXggPSBfV1NTX0xPR19QUkVGSVgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGxvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAorICAgICAgICBsb2dfZmlsZV9uYW1lID0gbG9n
X3ByZWZpeCArIHRpbWVfc3RyCisKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ug
b25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KKyAgICAgICAgcmVtb3ZlX2xvZ19maWxl
cyhzZWxmLl9vdXRwdXRfZGlyLCBsb2dfcHJlZml4KQorCisgICAgICAgIGVycm9yX2xvZyA9IG9z
LnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lICsgIi1lcnIudHh0IikK
KworICAgICAgICBvdXRwdXRfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxv
Z19maWxlX25hbWUgKyAiLW91dC50eHQiKQorICAgICAgICBzZWxmLl93c291dCA9IG9wZW4ob3V0
cHV0X2xvZywgInciKQorCisgICAgICAgIHB5dGhvbl9pbnRlcnAgPSBzeXMuZXhlY3V0YWJsZQor
ICAgICAgICBweXdlYnNvY2tldF9iYXNlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKKyAg
ICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnV2ViS2l0VG9vbHMnLCAncHl3ZWJz
b2NrZXQnKQorICAgICAgICBweXdlYnNvY2tldF9zY3JpcHQgPSBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKAorICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29s
cycsICdweXdlYnNvY2tldCcsCisgICAgICAgICAgICAnbW9kX3B5d2Vic29ja2V0JywgJ3N0YW5k
YWxvbmUucHknKQorICAgICAgICBzdGFydF9jbWQgPSBbCisgICAgICAgICAgICBweXRob25faW50
ZXJwLCBweXdlYnNvY2tldF9zY3JpcHQsCisgICAgICAgICAgICAnLXAnLCBzdHIoc2VsZi5fcG9y
dCksCisgICAgICAgICAgICAnLWQnLCBzZWxmLl9sYXlvdXRfdGVzdHMsCisgICAgICAgICAgICAn
LXMnLCBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAorICAgICAgICAgICAgJy1sJywgZXJyb3JfbG9n
LAorICAgICAgICBdCisKKyAgICAgICAgaGFuZGxlcl9tYXBfZmlsZSA9IG9zLnBhdGguam9pbihz
ZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdoYW5kbGVyX21hcC50eHQnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhoYW5k
bGVyX21hcF9maWxlKToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nIGhhbmRsZXJf
bWFwX2ZpbGU6ICVzJyAlIGhhbmRsZXJfbWFwX2ZpbGUpCisgICAgICAgICAgICBzdGFydF9jbWQu
YXBwZW5kKCctbScpCisgICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKGhhbmRsZXJfbWFwX2Zp
bGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ05vIGhhbmRs
ZXJfbWFwX2ZpbGUgZm91bmQnKQorCisgICAgICAgIGlmIHNlbGYuX3VzZV90bHM6CisgICAgICAg
ICAgICBzdGFydF9jbWQuZXh0ZW5kKFsnLXQnLCAnLWsnLCBzZWxmLl9wcml2YXRlX2tleSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsIHNlbGYuX2NlcnRpZmljYXRlXSkKKwor
ICAgICAgICAjIFB1dCB0aGUgY3lnd2luIGRpcmVjdG9yeSBmaXJzdCBpbiB0aGUgcGF0aCB0byBm
aW5kIGN5Z3dpbjEuZGxsCisgICAgICAgIGVudiA9IG9zLmVudmlyb24KKyAgICAgICAgaWYgc3lz
LnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgICAgICBlbnZbJ1BBVEgn
XSA9ICclczslcycgJSAoCisgICAgICAgICAgICAgICAgcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicpLAorICAgICAgICAgICAgICAgIGVudlsn
UEFUSCddKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBzZWxmLl9y
ZWdpc3Rlcl9jeWd3aW46CisgICAgICAgICAgICBzZXR1cF9tb3VudCA9IHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsCisgICAgICAgICAgICAgICAgJ3Nl
dHVwX21vdW50LmJhdCcpCisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKHNldHVwX21vdW50
KS53YWl0KCkKKworICAgICAgICBlbnZbJ1BZVEhPTlBBVEgnXSA9IChweXdlYnNvY2tldF9iYXNl
ICsgb3MucGF0aC5wYXRoc2VwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52Lmdl
dCgnUFlUSE9OUEFUSCcsICcnKSkKKworICAgICAgICBsb2dnaW5nLmRlYnVnKCdTdGFydGluZyAl
cyBzZXJ2ZXIgb24gJWQuJyAlICgKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxm
Ll9wb3J0KSkKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnY21kbGluZTogJXMnICUgJyAnLmpvaW4o
c3RhcnRfY21kKSkKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3Rh
cnRfY21kLCBzdGRvdXQ9c2VsZi5fd3NvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKworICAgICAgICAjIFdhaXQgYSBiaXQg
YmVmb3JlIGNoZWNraW5nIHRoZSBsaXZlbmVzcyBvZiB0aGUgc2VydmVyLgorICAgICAgICB0aW1l
LnNsZWVwKDAuNSkKKworICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgorICAgICAgICAgICAgdXJs
ID0gJ2h0dHBzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJsID0gJ2h0dHAnCisgICAg
ICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAlIHNlbGYuX3BvcnQKKyAgICAgICAg
aWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgorICAgICAgICAgICAgZnAgPSBvcGVuKG91dHB1dF9s
b2cpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZnA6Cisg
ICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IobGluZSkKKyAgICAgICAgICAgIGZpbmFs
bHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UgUHlXZWJT
b2NrZXROb3RTdGFydGVkKAorICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gc3RhcnQgJXMgc2Vy
dmVyIG9uIHBvcnQgJXMuJyAlCisgICAgICAgICAgICAgICAgICAgIChzZWxmLl9zZXJ2ZXJfbmFt
ZSwgc2VsZi5fcG9ydCkpCisKKyAgICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVh
ZHkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlICE9IE5vbmU6CisgICAgICAg
ICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoCisgICAgICAgICAgICAgICAgJ0ZhaWxl
ZCB0byBzdGFydCAlcyBzZXJ2ZXIuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQorICAgICAgICBpZiBz
ZWxmLl9waWRmaWxlOgorICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGlkZmlsZSwgJ3cnKQor
ICAgICAgICAgICAgZi53cml0ZSgiJWQiICUgc2VsZi5fcHJvY2Vzcy5waWQpCisgICAgICAgICAg
ICBmLmNsb3NlKCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAg
aWYgbm90IGZvcmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByZXR1
cm4KKworICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgcGlkID0gc2VsZi5f
cHJvY2Vzcy5waWQKKyAgICAgICAgZWxpZiBzZWxmLl9waWRmaWxlOgorICAgICAgICAgICAgZiA9
IG9wZW4oc2VsZi5fcGlkZmlsZSkKKyAgICAgICAgICAgIHBpZCA9IGludChmLnJlYWQoKS5zdHJp
cCgpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgaWYgbm90IHBpZDoKKyAgICAg
ICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90Rm91bmQoCisgICAgICAgICAgICAgICAgJ0ZhaWxl
ZCB0byBmaW5kICVzIHNlcnZlciBwaWQuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQorCisgICAgICAg
IGxvZ2dpbmcuZGVidWcoJ1NodXR0aW5nIGRvd24gJXMgc2VydmVyICVkLicgJSAoc2VsZi5fc2Vy
dmVyX25hbWUsIHBpZCkpCisgICAgICAgIHBsYXRmb3JtX3V0aWxzLmtpbGxfcHJvY2VzcyhwaWQp
CisKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mu
d2FpdCgpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorCisgICAgICAgIGlmIHNl
bGYuX3dzb3V0OgorICAgICAgICAgICAgc2VsZi5fd3NvdXQuY2xvc2UoKQorICAgICAgICAgICAg
c2VsZi5fd3NvdXQgPSBOb25lCisKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICAj
IFByb3ZpZGUgc29tZSBjb21tYW5kIGxpbmUgcGFyYW1zIGZvciBzdGFydGluZyB0aGUgUHlXZWJT
b2NrZXQgc2VydmVyCisgICAgIyBtYW51YWxseS4KKyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKCkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tc2VydmVy
JywgdHlwZT0nY2hvaWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1b
J3N0YXJ0JywgJ3N0b3AnXSwgZGVmYXVsdD0nc3RhcnQnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdTZXJ2ZXIgYWN0aW9uIChzdGFydHxzdG9wKScpCisgICAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBvcnQnLCBkZXN0PSdwb3J0JywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBoZWxwPSdQb3J0IHRvIGxpc3RlbiBvbicp
CisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJvb3QnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdBYnNvbHV0ZSBwYXRoIHRvIERvY3VtZW50Um9vdCAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhvdmVycmlkZXMgbGF5b3V0IHRl
c3Qgcm9vdHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGxzJywg
ZGVzdD0ndXNlX3RscycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhl
bHA9J3VzZSBUTFMgKHdzczovLyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWsn
LCAnLS1wcml2YXRlX2tleScsIGRlc3Q9J3ByaXZhdGVfa2V5JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExTIHByaXZhdGUga2V5IGZpbGUuJykKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY2VydGlmaWNhdGUnLCBkZXN0PSdj
ZXJ0aWZpY2F0ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsIGhl
bHA9J1RMUyBjZXJ0aWZpY2F0ZSBmaWxlLicpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctLXJlZ2lzdGVyX2N5Z3dpbicsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3Q9InJlZ2lzdGVyX2N5Z3dpbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9J1JlZ2lzdGVyIEN5Z3dpbiBwYXRocyAob24gV2luIHRyeSBib3Rz
KScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXBpZGZpbGUnLCBoZWxwPSdwYXRo
IHRvIHBpZCBmaWxlLicpCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2Vf
YXJncygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5wb3J0OgorICAgICAgICBpZiBvcHRpb25zLnVz
ZV90bHM6CisgICAgICAgICAgICBvcHRpb25zLnBvcnQgPSBfREVGQVVMVF9XU1NfUE9SVAorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucy5wb3J0ID0gX0RFRkFVTFRfV1NfUE9SVAor
CisgICAga3dkcyA9IHsncG9ydCc6IG9wdGlvbnMucG9ydCwgJ3VzZV90bHMnOiBvcHRpb25zLnVz
ZV90bHN9CisgICAgaWYgb3B0aW9ucy5yb290OgorICAgICAgICBrd2RzWydyb290J10gPSBvcHRp
b25zLnJvb3QKKyAgICBpZiBvcHRpb25zLnByaXZhdGVfa2V5OgorICAgICAgICBrd2RzWydwcml2
YXRlX2tleSddID0gb3B0aW9ucy5wcml2YXRlX2tleQorICAgIGlmIG9wdGlvbnMuY2VydGlmaWNh
dGU6CisgICAgICAgIGt3ZHNbJ2NlcnRpZmljYXRlJ10gPSBvcHRpb25zLmNlcnRpZmljYXRlCisg
ICAga3dkc1sncmVnaXN0ZXJfY3lnd2luJ10gPSBvcHRpb25zLnJlZ2lzdGVyX2N5Z3dpbgorICAg
IGlmIG9wdGlvbnMucGlkZmlsZToKKyAgICAgICAga3dkc1sncGlkZmlsZSddID0gb3B0aW9ucy5w
aWRmaWxlCisKKyAgICBweXdlYnNvY2tldCA9IFB5V2ViU29ja2V0KHRlbXBmaWxlLmdldHRlbXBk
aXIoKSwgKiprd2RzKQorCisgICAgaWYgJ3N0YXJ0JyA9PSBvcHRpb25zLnNlcnZlcjoKKyAgICAg
ICAgcHl3ZWJzb2NrZXQuc3RhcnQoKQorICAgIGVsc2U6CisgICAgICAgIHB5d2Vic29ja2V0LnN0
b3AoZm9yY2U9VHJ1ZSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47746</attachid>
            <date>2010-01-29 17:05:05 -0800</date>
            <delta_ts>2010-01-29 17:13:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31498-20100129170504.patch</filename>
            <type>text/plain</type>
            <size>199183</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0MDg3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMDEtMjkgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTaWVkZWwuCisK
KyAgICAgICAgQ2hlY2sgaW4gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIENocm9taXVtIFB5dGhvbiBw
b3J0IG9mIHRoZSAKKyAgICAgICAgcnVuLXdlYmtpdC10ZXN0cyB0ZXN0IGRyaXZlci4gVGhlIGZp
bGVzIHVuZGVyIAorICAgICAgICBsYXlvdXRfdGVzdHMvbGF5b3V0X2xheW91dCBjb25zdGl0dXRl
IG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uOworICAgICAgICB0aGV5IGNhbiBiZSByb3VnaGx5
IGRpdmlkZWQgaW50byBjb2RlIHRoYXQgcGFyc2VzIHRoZSAKKyAgICAgICAgInRlc3RfZXhwZWN0
YXRpb25zLnR4dCIgZmlsZSB0aGF0IGRlc2NyaWJlcyBob3cgd2UgZXhwZWN0IHRlc3RzIHRvCisg
ICAgICAgIHBhc3Mgb3IgZmFpbCwgcGxhdGZvcm0tc3BlY2lmaWMgaG9va3MgZm9yIHRoZSBkaWZm
ZXJlbnQgQ2hyb21pdW0gCisgICAgICAgIHBvcnRzIChpbiBwbGF0Zm9ybV91dGlscyopLCBjb2Rl
IGZvciBwYXJzaW5nIHRoZSBvdXRwdXQgb2YgdGhlCisgICAgICAgIHRlc3RzIGFuZCBnZW5lcmF0
aW5nIHJlc3VsdHMgZmlsZXMgYW5kIEhUTUwgYW5kIEpTT04gZm9yIHRoZQorICAgICAgICBkYXNo
Ym9hcmRzLCBhdXhpbGlhcnkgc2NyaXB0cyBmb3Igc3RhcnRpbmcgYW5kIHN0b3BwaW5nIEhUVFAg
YW5kCisgICAgICAgIFdlYiBTb2NrZXQgc2VydmVycywgYW5kIHRoZW4gb25lIG9mIHRoZSBhY3R1
YWwgZHJpdmVyIGZpbGVzIAorICAgICAgICAodGVzdF9zaGVsbF90aHJlYWQpLiBDb2RlIGZvciBh
Y3R1YWxseSBwYXJzaW5nIHRlc3Qgb3V0cHV0IGZvciAKKyAgICAgICAgZmFpbHVyZXMgYW5kIHRo
ZSB0b3AtbGV2ZWwgZHJpdmVyIHNjcmlwdHMgd2lsbCBmb2xsb3cgc2hvcnRseS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE0OTgKKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzOiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvX19pbml0X18u
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2h0dHBfc2VydmVyX2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW06IEFkZGVkLgorICAgICAg
ICAgIC0gc2NyaXB0cyB0byBzdGFydCBhbmQgc3RvcCBhcGFjaGUuIE5vdGUgdGhhdCB0aGUgYXBh
Y2hlIGZpbGUKKyAgICAgICAgICAgIGdlbmVyYXRlcyBhIGNvbmYgZmlsZSBkeW5hbWljYWxseSwg
YW5kIHdlIHNob3VsZCBzd2l0Y2ggdG8gCisgICAgICAgICAgICB1c2luZyB0aGUgc2FtZSBzdGF0
aWMgY29uZiBmaWxlIHRoYXQgdGhlIHJlZ3VsYXIgcnVuLXdlYmtpdC10ZXN0cworICAgICAgICAg
ICAgdXNlcywgYW5kIHdlIGNhbiBhbHNvIHVzZSB0aGUgc2FtZSBodHRwZDIucGVtIGZpbGUuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVy
YXRvci5weTogQWRkZWQuCisgICAgICAgICAgLSBzY3JpcHRzIHRvIGdlbmVyYXRlIHRoZSBKU09O
IGxheW91dCB0ZXN0IGRhc2hib2FyZCBhbmQgdGhlCisgICAgICAgICAgICBmbGFraW5lc3MgZGFz
aGJvYXJkCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbGlnaHR0cGQuY29uZjogQWRkZWQuCisgICAgICAgICAgLSBkZWZhdWx0IGNvbmZpZ3Vy
YXRpb24gZm9yIExpZ0hUVFBkICh1c2VkIG9uIFdpbmRvd3MpCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHk6IEFk
ZGVkLgorICAgICAgICAgIC0gdXRpbGl0eSBjbGFzcyB0aGF0IGltcGxlbWVudHMgcHJvZ3Jlc3Mg
YmFycyBvbiB0aGUgY29uc29sZSB0bworICAgICAgICAgICAgYmUgZGlzcGxheWVkIHdoaWxlIHRo
ZSB0ZXN0cyBhcmUgcnVubmluZworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHk6IEFkZGVkLgorICAgICAgICAgIC0gdmFy
aW91cyByb3V0aW5lcyBmb3IgbWFuaXB1bGF0aW5nIHBhdGhzIGFuZCBVUklzCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRp
bHMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX2xpbnV4LnB5OiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGls
c19tYWMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX3dpbi5weTogQWRkZWQuCisgICAgICAgICAg
LSBwbGF0Zm9ybS1zcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSBkcml2ZXJzIChiaW5hcnkgbmFtZXMs
IHBhdGhzLAorICAgICAgICAgICAgcHJvY2VzcyBjb250cm9sLCBldGMuKQorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRp
b25zLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIGNvZGUgZm9yIHBhcnNpbmcgdGhlICd0ZXN0X2V4
cGVjdGF0aW9ucy50eHQnIGZpbGUgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICB3aGljaCB0ZXN0
cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCAoYW5kIGhvdykgb24gd2hpY2ggcGxhdGZvcm1zCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9m
YWlsdXJlcy5weTogQWRkZWQuCisgICAgICAgICAgLSBjb2RlIGZvciBoYW5kbGluZyBkaWZmZXJl
bnQga2luZHMgb2YgZmFpbHVyZXMgKGdlbmVyYXRpbmcgb3V0cHV0CisgICAgICAgICAgICBpbiB0
aGUgcmVzdWx0cywgZXRjLikKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIGNvZGUg
dG8gZ2F0aGVyIHRoZSBsaXN0cyBvZiB0ZXN0cworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5OiBBZGRlZC4K
KyAgICAgICAgICAtIGNvZGUgdG8gYWN0dWFsbHkgZXhlY3V0ZSB0ZXN0cyB2aWEgVGVzdFNoZWxs
IGFuZCBwcm9jZXNzCisgICAgICAgICAgICB0aGUgb3V0cHV0CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd2Vic29ja2V0X3NlcnZlci5weTog
QWRkZWQuCisgICAgICAgICAgLSBzY3JpcHRzIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSBweXdlYnNv
Y2tldCBzZXJ2ZXIKKwogMjAxMC0wMS0yOSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL19faW5pdF9f
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL19faW5pdF9fLnB5Cl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZl
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkJKHJldmlzaW9uIDApCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI5IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQSBjbGFzcyB0
byBzdGFydC9zdG9wIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMu
IiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0
IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCitpbXBvcnQgaHR0cF9zZXJ2ZXJf
YmFzZQoraW1wb3J0IHBhdGhfdXRpbHMKK2ltcG9ydCBwbGF0Zm9ybV91dGlscworCisKK2NsYXNz
IExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyKToKKyAgICAgICAgIiIiQXJnczoK
KyAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRl
c3QgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fb3V0cHV0X2Rp
ciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5faHR0cGRfcHJvYyA9IE5vbmUKKyAgICAgICAg
cGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQorCisgICAgICAgIHNl
bGYubWFwcGluZ3MgPSBbeydwb3J0JzogODAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
eydwb3J0JzogODA4MH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ3NzbGNlcnQnOiBUcnVl
fV0KKworICAgICAgICAjIFRoZSB1cHN0cmVhbSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0
ZW5jZSBvZiAvdG1wL1dlYktpdCBmb3IKKyAgICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBs
aWtlIHRoZSBsb2NrIGZpbGUgdGhlcmUuCisgICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9z
LnBhdGguam9pbigiL3RtcCIsICJXZWJLaXQiKQorICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21h
a2VfZGlyZWN0b3J5KHNlbGYuX3J1bnRpbWVfcGF0aCkKKworICAgICAgICAjIFRoZSBQSUQgcmV0
dXJuZWQgd2hlbiBBcGFjaGUgaXMgc3RhcnRlZCBnb2VzIGF3YXkgKGR1ZSB0byBkcm9wcGluZwor
ICAgICAgICAjIHByaXZpbGVnZXM/KS4gVGhlIHByb3BlciBjb250cm9sbGluZyBQSUQgaXMgd3Jp
dHRlbiB0byBhIGZpbGUgaW4gdGhlCisgICAgICAgICMgYXBhY2hlIHJ1bnRpbWUgZGlyZWN0b3J5
LgorICAgICAgICBzZWxmLl9waWRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl9ydW50aW1lX3Bh
dGgsICdodHRwZC5waWQnKQorCisgICAgICAgIHRlc3RfZGlyID0gcGF0aF91dGlscy5wYXRoX2Zy
b21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKKyAgICAgICAgICAgICdMYXlvdXRUZXN0
cycpCisgICAgICAgIGpzX3Rlc3RfcmVzb3VyY2VzX2RpciA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pv
aW4odGVzdF9kaXIsICJmYXN0IiwgImpzIiwKKyAgICAgICAgICAgICJyZXNvdXJjZXMiKQorICAg
ICAgICBtaW1lX3R5cGVzX3BhdGggPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAi
aHR0cCIsICJjb25mIiwKKyAgICAgICAgICAgICJtaW1lLnR5cGVzIikKKyAgICAgICAgY2VydF9m
aWxlID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImh0dHAiLCAiY29uZiIsCisg
ICAgICAgICAgICAid2Via2l0LWh0dHBkLnBlbSIpCisgICAgICAgIGFjY2Vzc19sb2cgPSBzZWxm
Ll9jeWd3aW5fc2FmZV9qb2luKG91dHB1dF9kaXIsICJhY2Nlc3NfbG9nLnR4dCIpCisgICAgICAg
IGVycm9yX2xvZyA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4ob3V0cHV0X2RpciwgImVycm9yX2xv
Zy50eHQiKQorICAgICAgICBkb2N1bWVudF9yb290ID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0
ZXN0X2RpciwgImh0dHAiLCAidGVzdHMiKQorCisgICAgICAgIGV4ZWN1dGFibGUgPSBwbGF0Zm9y
bV91dGlscy5hcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCkKKyAgICAgICAgaWYgc2VsZi5faXNfY3ln
d2luKCk6CisgICAgICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGV4
ZWN1dGFibGUpCisKKyAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAnLWYn
LCBzZWxmLl9nZXRfYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgodGVzdF9kaXIsIG91dHB1dF9kaXIp
LAorICAgICAgICAgICAgJy1DJywgIlwnRG9jdW1lbnRSb290ICVzXCciICUgZG9jdW1lbnRfcm9v
dCwKKyAgICAgICAgICAgICctYycsICJcJ0FsaWFzIC9qcy10ZXN0LXJlc291cmNlcyAlc1wnIiAl
IGpzX3Rlc3RfcmVzb3VyY2VzX2RpciwKKyAgICAgICAgICAgICctQycsICJcJ0xpc3RlbiAlc1wn
IiAlICIxMjcuMC4wLjE6ODAwMCIsCisgICAgICAgICAgICAnLUMnLCAiXCdMaXN0ZW4gJXNcJyIg
JSAiMTI3LjAuMC4xOjgwODEiLAorICAgICAgICAgICAgJy1jJywgIlwnVHlwZXNDb25maWcgXCIl
c1wiXCciICUgbWltZV90eXBlc19wYXRoLAorICAgICAgICAgICAgJy1jJywgIlwnQ3VzdG9tTG9n
IFwiJXNcIiBjb21tb25cJyIgJSBhY2Nlc3NfbG9nLAorICAgICAgICAgICAgJy1jJywgIlwnRXJy
b3JMb2cgXCIlc1wiXCciICUgZXJyb3JfbG9nLAorICAgICAgICAgICAgJy1DJywgIlwnVXNlciBc
IiVzXCJcJyIgJSBvcy5lbnZpcm9uLmdldCgiVVNFUk5BTUUiLAorICAgICAgICAgICAgICAgIG9z
LmVudmlyb24uZ2V0KCJVU0VSIiwgIiIpKV0KKworICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4o
KToKKyAgICAgICAgICAgIGN5Z2JpbiA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJk
X3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKQorICAgICAgICAgICAgIyBOb3QgZW50aXJlbHkgc3Vy
ZSB3aHksIGJ1dCBmcm9tIGN5Z3dpbiB3ZSBuZWVkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICMg
aHR0cGQgY29tbWFuZCB0aHJvdWdoIGJhc2guCisgICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQg
PSBbCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGN5Z2JpbiwgJ2Jhc2guZXhlJyksCisg
ICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAgICAnUEFUSD0lcyAlcycgJSAoc2Vs
Zi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z2JpbiksICIgIi5qb2luKGNtZCkpLAorICAgICAgICAgICAg
ICBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRPRE8ob2phbik6IFdoZW4gd2UgZ2V0
IGN5Z3dpbiB1c2luZyBBcGFjaGUgMiwgdXNlIHNldCB0aGUKKyAgICAgICAgICAgICMgY2VydCBm
aWxlIGZvciBjeWd3aW4gYXMgd2VsbC4KKyAgICAgICAgICAgIGNtZC5leHRlbmQoWyctYycsICJc
J1NTTENlcnRpZmljYXRlRmlsZSAlc1wnIiAlIGNlcnRfZmlsZV0pCisgICAgICAgICAgICAjIEpv
aW4gdGhlIHN0cmluZyBoZXJlIHNvIHRoYXQgQ3lnd2luL1dpbmRvd3MgYW5kIE1hYy9MaW51eAor
ICAgICAgICAgICAgIyBjYW4gdXNlIHRoZSBzYW1lIGNvZGUuIE90aGVyd2lzZSwgd2UgY291bGQg
cmVtb3ZlIHRoZSBzaW5nbGUKKyAgICAgICAgICAgICMgcXVvdGVzIGFib3ZlIGFuZCBrZWVwIGNt
ZCBhcyBhIHNlcXVlbmNlLgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gIiAiLmpvaW4o
Y21kKQorCisgICAgZGVmIF9pc19jeWd3aW4oc2VsZik6CisgICAgICAgIHJldHVybiBzeXMucGxh
dGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKQorCisgICAgZGVmIF9jeWd3aW5fc2FmZV9qb2lu
KHNlbGYsICpwYXJ0cyk6CisgICAgICAgICIiIlJldHVybnMgYSBwbGF0Zm9ybSBhcHByb3ByaWF0
ZSBwYXRoLiIiIgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCpwYXJ0cykKKyAgICAgICAg
aWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2N5Z3dp
bl9wYXRoKHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgX2dldF9jeWd3aW5f
cGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiQ29udmVydCBhIFdpbmRvd3MgcGF0aCB0byBh
IGN5Z3dpbiBwYXRoLgorCisgICAgICAgIFRoZSBjeWdwYXRoIHV0aWxpdHkgaW5zaXN0cyBvbiBj
b252ZXJ0aW5nIHBhdGhzIHRoYXQgaXQgdGhpbmtzIGFyZQorICAgICAgICBDeWd3aW4gcm9vdCBw
YXRocyB0byB3aGF0IGl0IHRoaW5rcyB0aGUgY29ycmVjdCByb290cyBhcmUuICBTbyBwYXRocwor
ICAgICAgICBzdWNoIGFzICJDOlxiXHNsYXZlXHdlYmtpdC1yZWxlYXNlXGJ1aWxkXHRoaXJkX3Bh
cnR5XGN5Z3dpblxiaW4iCisgICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gcGxhaW4gIi91c3IvYmlu
Ii4gIFRvIGF2b2lkIHRoaXMsIHdlCisgICAgICAgIGRvIHRoZSBjb252ZXJzaW9uIG1hbnVhbGx5
LgorCisgICAgICAgIFRoZSBwYXRoIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFic29sdXRlIHBhdGgs
IG9uIGFueSBkcml2ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGRyaXZlX3JlZ2V4cCA9IHJlLmNv
bXBpbGUocicoW2Etel0pOlsvXFxdJywgcmUuSUdOT1JFQ0FTRSkKKworICAgICAgICBkZWYgbG93
ZXJfZHJpdmUobWF0Y2hvYmopOgorICAgICAgICAgICAgcmV0dXJuICcvY3lnZHJpdmUvJXMvJyAl
IG1hdGNob2JqLmdyb3VwKDEpLmxvd2VyKCkKKyAgICAgICAgcGF0aCA9IGRyaXZlX3JlZ2V4cC5z
dWIobG93ZXJfZHJpdmUsIHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywg
Jy8nKQorCisgICAgZGVmIF9nZXRfYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoc2VsZiwgdGVzdF9k
aXIsIG91dHB1dF9kaXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBhcGFj
aGUgY29uZmlnIGZpbGUgdG8gdXNlLgorICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfZGly
OiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCisgICAgICAgICAg
b3V0cHV0X2RpcjogYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0cyBkaXJl
Y3RvcnkuCisgICAgICAgICIiIgorICAgICAgICBodHRwZF9jb25maWcgPSBwbGF0Zm9ybV91dGls
cy5hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCgpCisgICAgICAgIGh0dHBkX2NvbmZpZ19jb3B5ID0g
b3MucGF0aC5qb2luKG91dHB1dF9kaXIsICJodHRwZC5jb25mIikKKyAgICAgICAgaHR0cGRfY29u
ZiA9IG9wZW4oaHR0cGRfY29uZmlnKS5yZWFkKCkKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2lu
KCk6CisgICAgICAgICAgICAjIFRoaXMgaXMgYSBncm9zcyBoYWNrLCBidXQgaXQgbGV0cyB1cyB1
c2UgdGhlIHVwc3RyZWFtIC5jb25mIGZpbGUKKyAgICAgICAgICAgICMgYW5kIG91ciBjaGVja2Vk
IGluIGN5Z3dpbi4gVGhpcyB0ZWxscyB0aGUgc2VydmVyIHRoZSByb290CisgICAgICAgICAgICAj
IGRpcmVjdG9yeSB0byBsb29rIGluIGZvciAuc28gbW9kdWxlcy4gSXQgd2lsbCB1c2UgdGhpcyBw
YXRoCisgICAgICAgICAgICAjIHBsdXMgdGhlIHJlbGF0aXZlIHBhdGhzIHRvIHRoZSAuc28gZmls
ZXMgbGlzdGVkIGluIHRoZSAuY29uZgorICAgICAgICAgICAgIyBmaWxlLiBXZSBoYXZlIGFwYWNo
ZS9jeWd3aW4gY2hlY2tlZCBpbnRvIG91ciB0cmVlIHNvCisgICAgICAgICAgICAjIHBlb3BsZSBk
b24ndCBoYXZlIHRvIGluc3RhbGwgaXQgaW50byB0aGVpciBjeWd3aW4uCisgICAgICAgICAgICBj
eWd1c3IgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4n
LCAndXNyJykKKyAgICAgICAgICAgIGh0dHBkX2NvbmYgPSBodHRwZF9jb25mLnJlcGxhY2UoJ1Nl
cnZlclJvb3QgIi91c3IiJywKKyAgICAgICAgICAgICAgICAnU2VydmVyUm9vdCAiJXMiJyAlIHNl
bGYuX2dldF9jeWd3aW5fcGF0aChjeWd1c3IpKQorCisgICAgICAgICMgVE9ETyhvamFuKTogSW5z
dGVhZCBvZiB3cml0aW5nIGFuIGV4dHJhIGZpbGUsIGNoZWNraW4gYSBjb25mIGZpbGUKKyAgICAg
ICAgIyB1cHN0cmVhbS4gT3IsIGV2ZW4gYmV0dGVyLCB1cHN0cmVhbS9kZWxldGUgYWxsIG91ciBj
aHJvbWUgaHR0cAorICAgICAgICAjIHRlc3RzIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBzcGVjaWFs
LWNhc2VkIERvY3VtZW50Um9vdCBhbmQgdGhlbgorICAgICAgICAjIGp1c3QgdXNlIHRoZSB1cHN0
cmVhbQorICAgICAgICAjIGNvbmYgZmlsZS4KKyAgICAgICAgY2hyb21lX2RvY3VtZW50X3Jvb3Qg
PSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsCisgICAgICAgICAg
ICAnbGF5b3V0X3Rlc3RzJykKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAg
ICAgICBjaHJvbWVfZG9jdW1lbnRfcm9vdCA9IHNlbGYuX2dldF9jeWd3aW5fcGF0aChjaHJvbWVf
ZG9jdW1lbnRfcm9vdCkKKyAgICAgICAgaHR0cGRfY29uZiA9IChodHRwZF9jb25mICsKKyAgICAg
ICAgICAgIHNlbGYuX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKGNocm9tZV9kb2N1bWVudF9yb290
LCA4MDgxKSkKKworICAgICAgICBmID0gb3BlbihodHRwZF9jb25maWdfY29weSwgJ3diJykKKyAg
ICAgICAgZi53cml0ZShodHRwZF9jb25mKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBp
ZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3lnd2lu
X3BhdGgoaHR0cGRfY29uZmlnX2NvcHkpCisgICAgICAgIHJldHVybiBodHRwZF9jb25maWdfY29w
eQorCisgICAgZGVmIF9nZXRfdmlydHVhbF9ob3N0X2NvbmZpZyhzZWxmLCBkb2N1bWVudF9yb290
LCBwb3J0LCBzc2w9RmFsc2UpOgorICAgICAgICAiIiJSZXR1cm5zIGEgPFZpcnR1YWxIb3N0PiBk
aXJlY3RpdmUgYmxvY2sgZm9yIGFuIGh0dHBkLmNvbmYgZmlsZS4KKyAgICAgICAgSXQgd2lsbCBs
aXN0ZW4gdG8gMTI3LjAuMC4xIG9uIGVhY2ggb2YgdGhlIGdpdmVuIHBvcnQuCisgICAgICAgICIi
IgorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKCgnPFZpcnR1YWxIb3N0IDEyNy4wLjAuMTolcz4n
ICUgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50Um9vdCAlcycgJSBk
b2N1bWVudF9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wgYW5kICdTU0xFbmdp
bmUgT24nIG9yICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9WaXJ0dWFsSG9zdD4n
LCAnJykpCisKKyAgICBkZWYgX3N0YXJ0X2h0dHBkX3Byb2Nlc3Moc2VsZik6CisgICAgICAgICIi
IlN0YXJ0cyB0aGUgaHR0cGQgcHJvY2VzcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZXJlIHdlcmUg
ZXJyb3JzLiIiIgorICAgICAgICAjIFVzZSBzaGVsbD1UcnVlIGJlY2F1c2Ugd2Ugam9pbiB0aGUg
YXJndW1lbnRzIGludG8gYSBzdHJpbmcgZm9yCisgICAgICAgICMgdGhlIHNha2Ugb2YgV2luZG93
L0N5Z3dpbiBhbmQgaXQgbmVlZHMgcXVvdGluZyB0aGF0IGJyZWFrcworICAgICAgICAjIHNoZWxs
PUZhbHNlLgorICAgICAgICBzZWxmLl9odHRwZF9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxm
Ll9zdGFydF9jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzaGVsbD1UcnVlKQorICAgICAg
ICBlcnIgPSBzZWxmLl9odHRwZF9wcm9jLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgaWYgbGVuKGVy
cik6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGVycikKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAg
ICAiIiJTdGFydHMgdGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIKKyAgICAgICAgIyBTdG9wIGFu
eSBjdXJyZW50bHkgcnVubmluZyBzZXJ2ZXJzLgorICAgICAgICBzZWxmLnN0b3AoKQorCisgICAg
ICAgIGxvZ2dpbmcuZGVidWcoIlN0YXJ0aW5nIGFwYWNoZSBodHRwIHNlcnZlciIpCisgICAgICAg
IHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRf
cHJvY2VzcykKKyAgICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6CisgICAgICAgICAgICBsb2dnaW5n
LmRlYnVnKCJBcGFjaGUgc3RhcnRlZC4gVGVzdGluZyBwb3J0cyIpCisgICAgICAgICAgICBzZXJ2
ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9uKAorICAgICAgICAgICAgICAgIHNlbGYu
aXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKQorCisgICAgICAgIGlmIHNlcnZlcl9zdGFy
dGVkOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFy
dGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVk
IHRvIHN0YXJ0IGh0dHAgc2VydmVyJykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAi
IiJTdG9wcyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgorICAgICAgICBsb2dnaW5nLmRlYnVn
KCJTaHV0dGluZyBkb3duIGFueSBydW5uaW5nIGh0dHAgc2VydmVycyIpCisgICAgICAgIGh0dHBk
X3BpZCA9IE5vbmUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgor
ICAgICAgICAgICAgaHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5l
KCkpCisgICAgICAgIHBhdGhfdXRpbHMuc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3BpZCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5weQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9odHRwX3NlcnZlci5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBsaWdo
dHRwZCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKKworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJv
Y2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVy
bGxpYgorCitpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQoraW1wb3J0IHBhdGhfdXRpbHMKKworY2xh
c3MgSHR0cGROb3RTdGFydGVkKEV4Y2VwdGlvbik6IHBhc3MKKworZGVmIHJlbW92ZV9sb2dfZmls
ZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6CisgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikK
KyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0
c193aXRoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZp
bGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQorCisKK2NsYXNzIExpZ2h0dHBk
KGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgorICAgICMgV2Via2l0IHRlc3RzCisg
ICAgdHJ5OgorICAgICAgICBfd2Via2l0X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2h0dHAnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMnKQorICAgICAgICBf
anNfdGVzdF9yZXNvdXJjZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5
JywgJ1dlYktpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnTGF5b3V0VGVzdHMnLCAnZmFzdCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanMnLCAncmVzb3VyY2VzJykKKyAgICBl
eGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAgICAgIF93ZWJraXRfdGVzdHMgPSBO
b25lCisgICAgICAgIF9qc190ZXN0X3Jlc291cmNlID0gTm9uZQorCisgICAgIyBQYXRoIHdoZXJl
IHdlIGNhbiBhY2Nlc3MgYWxsIG9mIHRoZSB0ZXN0cworICAgIF9hbGxfdGVzdHMgPSBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnKQorICAg
ICMgU2VsZiBnZW5lcmF0ZWQgY2VydGlmaWNhdGUgZm9yIFNTTCBzZXJ2ZXIgKGZvciBjbGllbnQg
Y2VydCBnZXQKKyAgICAjIDxiYXNlLXBhdGg+XGNocm9tZVx0ZXN0XGRhdGFcc3NsXGNlcnRzXHJv
b3RfY2FfY2VydC5jcnQpCisgICAgX3BlbV9maWxlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgKKyAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAn
aHR0cGQyLnBlbScpCisgICAgIyBPbmUgbWFwcGluZyB3aGVyZSB3ZSBjYW4gZ2V0IHRvIGV2ZXJ5
dGhpbmcKKyAgICBWSVJUVUFMQ09ORklHID0gW3sncG9ydCc6IDgwODEsICdkb2Nyb290JzogX2Fs
bF90ZXN0c31dCisKKyAgICBpZiBfd2Via2l0X3Rlc3RzOgorICAgICAgICBWSVJUVUFMQ09ORklH
LmV4dGVuZCgKKyAgICAgICAgICAjIFRocmVlIG1hcHBpbmdzIChvbmUgd2l0aCBTU0wgZW5hYmxl
ZCkgZm9yIExheW91dFRlc3RzIGh0dHAgdGVzdHMKKyAgICAgICAgICBbeydwb3J0JzogODAwMCwg
J2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKKyAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2Rv
Y3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKKyAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ2RvY3Jv
b3QnOiBfd2Via2l0X3Rlc3RzLCAnc3NsY2VydCc6IF9wZW1fZmlsZX1dKQorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG91dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwKKyAg
ICAgICAgICAgICAgICAgcm9vdD1Ob25lLCByZWdpc3Rlcl9jeWd3aW49Tm9uZSwgcnVuX2JhY2tn
cm91bmQ9Tm9uZSk6CisgICAgICAgICIiIkFyZ3M6CisgICAgICAgICAgb3V0cHV0X2RpcjogdGhl
IGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAgICAg
ICAgIiIiCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNl
bGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbiA9IHJlZ2lzdGVy
X2N5Z3dpbgorICAgICAgICBzZWxmLl9ydW5fYmFja2dyb3VuZCA9IHJ1bl9iYWNrZ3JvdW5kCisg
ICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYu
X3BvcnQpCisKKyAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3Byb2Nlc3MgIT0gTm9uZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxm
LmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJhaXNlICdMaWdodHRwZCBhbHJlYWR5IHJ1bm5p
bmcnCisKKyAgICAgICAgYmFzZV9jb25mX2ZpbGUgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNl
KCd0aGlyZF9wYXJ0eScsCisgICAgICAgICAgICAnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsICd3
ZWJraXRweScsICdsYXlvdXRfdGVzdHMnLAorICAgICAgICAgICAgJ2xheW91dF9wYWNrYWdlJywg
J2xpZ2h0dHBkLmNvbmYnKQorICAgICAgICBvdXRfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHNl
bGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJykKKyAgICAgICAgdGltZV9zdHIgPSB0aW1l
LnN0cmZ0aW1lKCIlZCViJVktJUglTSVTIikKKyAgICAgICAgYWNjZXNzX2ZpbGVfbmFtZSA9ICJh
Y2Nlc3MubG9nLSIgKyB0aW1lX3N0ciArICIudHh0IgorICAgICAgICBhY2Nlc3NfbG9nID0gb3Mu
cGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGFjY2Vzc19maWxlX25hbWUpCisgICAgICAgIGxv
Z19maWxlX25hbWUgPSAiZXJyb3IubG9nLSIgKyB0aW1lX3N0ciArICIudHh0IgorICAgICAgICBl
cnJvcl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSkK
KworICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0
aGUgbGFzdCBvbmVzLgorICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIs
ICJhY2Nlc3MubG9nLSIpCisgICAgICAgIHJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2Rp
ciwgImVycm9yLmxvZy0iKQorCisgICAgICAgICMgV3JpdGUgb3V0IHRoZSBjb25maWcKKyAgICAg
ICAgZiA9IGZpbGUoYmFzZV9jb25mX2ZpbGUsICdyYicpCisgICAgICAgIGJhc2VfY29uZiA9IGYu
cmVhZCgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBmaWxlKG91dF9jb25mX2Zp
bGUsICd3YicpCisgICAgICAgIGYud3JpdGUoYmFzZV9jb25mKQorCisgICAgICAgICMgV3JpdGUg
b3V0IG91ciBjZ2kgaGFuZGxlcnMuICBSdW4gcGVybCB0aHJvdWdoIGVudiBzbyB0aGF0IGl0Cisg
ICAgICAgICMgcHJvY2Vzc2VzIHRoZSAjISBsaW5lIGFuZCBydW5zIHBlcmwgd2l0aCB0aGUgcHJv
cGVyIGNvbW1hbmQKKyAgICAgICAgIyBsaW5lIGFyZ3VtZW50cy4gRW11bGF0ZSBhcGFjaGUncyBt
b2RfYXNpcyB3aXRoIGEgY2F0IGNnaSBoYW5kbGVyLgorICAgICAgICBmLndyaXRlKCgnY2dpLmFz
c2lnbiA9ICggIi5jZ2kiICA9PiAiL3Vzci9iaW4vZW52IixcbicKKyAgICAgICAgICAgICAgICAg
JyAgICAgICAgICAgICAgICIucGwiICAgPT4gIi91c3IvYmluL2VudiIsXG4nCisgICAgICAgICAg
ICAgICAgICcgICAgICAgICAgICAgICAiLmFzaXMiID0+ICIvYmluL2NhdCIsXG4nCisgICAgICAg
ICAgICAgICAgICcgICAgICAgICAgICAgICAiLnBocCIgID0+ICIlcyIgKVxuXG4nKSAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5saWdodHRwZF9waHBf
cGF0aCgpKQorCisgICAgICAgICMgU2V0dXAgbG9nIGZpbGVzCisgICAgICAgIGYud3JpdGUoKCdz
ZXJ2ZXIuZXJyb3Jsb2cgPSAiJXMiXG4nCisgICAgICAgICAgICAgICAgICdhY2Nlc3Nsb2cuZmls
ZW5hbWUgPSAiJXMiXG5cbicpICUgKGVycm9yX2xvZywgYWNjZXNzX2xvZykpCisKKyAgICAgICAg
IyBTZXR1cCB1cGxvYWQgZm9sZGVycy4gVXBsb2FkIGZvbGRlciBpcyB0byBob2xkIHRlbXBvcmFy
eSB1cGxvYWQgZmlsZXMKKyAgICAgICAgIyBhbmQgYWxzbyBQT1NUIGRhdGEuIFRoaXMgaXMgdXNl
ZCB0byBzdXBwb3J0IFhIUiBsYXlvdXQgdGVzdHMgdGhhdAorICAgICAgICAjIGRvZXMgUE9TVC4K
KyAgICAgICAgZi53cml0ZSgoJ3NlcnZlci51cGxvYWQtZGlycyA9ICggIiVzIiApXG5cbicpICUg
KHNlbGYuX291dHB1dF9kaXIpKQorCisgICAgICAgICMgU2V0dXAgYSBsaW5rIHRvIHdoZXJlIHRo
ZSBqcyB0ZXN0IHRlbXBsYXRlcyBhcmUgc3RvcmVkCisgICAgICAgIGYud3JpdGUoKCdhbGlhcy51
cmwgPSAoICIvanMtdGVzdC1yZXNvdXJjZXMiID0+ICIlcyIgKVxuXG4nKSAlCisgICAgICAgICAg
ICAgICAgICAgIChzZWxmLl9qc190ZXN0X3Jlc291cmNlKSkKKworICAgICAgICAjIGR1bXAgb3V0
IG9mIHZpcnR1YWwgaG9zdCBjb25maWcgYXQgdGhlIGJvdHRvbS4KKyAgICAgICAgaWYgc2VsZi5f
cm9vdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAgICAgICAgICAgIyBIYXZl
IGJvdGggcG9ydCBhbmQgcm9vdCBkaXIuCisgICAgICAgICAgICAgICAgbWFwcGluZ3MgPSBbeydw
b3J0Jzogc2VsZi5fcG9ydCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fV0KKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgIyBIYXZlIG9ubHkgYSByb290IGRpciAtIHNldCB0aGUgcG9y
dHMgYXMgZm9yIExheW91dFRlc3RzLgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyB1c2VkIGlu
IHVpX3Rlc3RzIHRvIHJ1biBodHRwIHRlc3RzIGFnYWluc3QgYSBicm93c2VyLgorCisgICAgICAg
ICAgICAgICAgIyBkZWZhdWx0IHNldCBvZiBwb3J0cyBhcyBmb3IgTGF5b3V0VGVzdHMgYnV0IHdp
dGggYQorICAgICAgICAgICAgICAgICMgc3BlY2lmaWVkIHJvb3QuCisgICAgICAgICAgICAgICAg
bWFwcGluZ3MgPSBbeydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9vdCc6IHNlbGYuX3Jv
b3R9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290
Jzogc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBM
aWdodHRwZC5fcGVtX2ZpbGV9XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ3Mg
PSBzZWxmLlZJUlRVQUxDT05GSUcKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gbWFwcGluZ3M6Cisg
ICAgICAgICAgICBzc2xfc2V0dXAgPSAnJworICAgICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1h
cHBpbmc6CisgICAgICAgICAgICAgICAgc3NsX3NldHVwID0gKCcgIHNzbC5lbmdpbmUgPSAiZW5h
YmxlIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBzc2wucGVtZmlsZSA9ICIl
cyJcbicgJSBtYXBwaW5nWydzc2xjZXJ0J10pCisKKyAgICAgICAgICAgIGYud3JpdGUoKCckU0VS
VkVSWyJzb2NrZXQiXSA9PSAiMTI3LjAuMC4xOiVkIiB7XG4nCisgICAgICAgICAgICAgICAgICAg
ICAnICBzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIlcyJcbicgKworICAgICAgICAgICAgICAgICAg
ICAgc3NsX3NldHVwICsKKyAgICAgICAgICAgICAgICAgICAgICd9XG5cbicpICUgKG1hcHBpbmdb
J3BvcnQnXSwgbWFwcGluZ1snZG9jcm9vdCddKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAg
ICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMubGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCkKKyAg
ICAgICAgbW9kdWxlX3BhdGggPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX21vZHVsZV9wYXRoKCkKKyAg
ICAgICAgc3RhcnRfY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAjIE5l
d2x5IHdyaXR0ZW4gY29uZmlnIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICctZicsIHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2Uoc2VsZi5fb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLmNvbmYnKSwKKyAg
ICAgICAgICAgICAgICAgICAgICMgV2hlcmUgaXQgY2FuIGZpbmQgaXRzIG1vZHVsZSBkeW5hbWlj
IGxpYnJhcmllcworICAgICAgICAgICAgICAgICAgICAgJy1tJywgbW9kdWxlX3BhdGhdCisKKyAg
ICAgICAgaWYgbm90IHNlbGYuX3J1bl9iYWNrZ3JvdW5kOgorICAgICAgICAgICAgc3RhcnRfY21k
LmFwcGVuZCgjIERvbid0IGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jy1EJykKKworICAgICAgICAjIENvcHkgbGlibGlnaHRjb21wLmR5bGliIHRvIC90bXAvbGlnaHR0
cGQvbGliIHRvIHdvcmsgYXJvdW5kIHRoZQorICAgICAgICAjIGJ1ZyB0aGF0IG1vZF9hbGlhcy5z
byBsb2FkcyBpdCBmcm9tIHRoZSBoYXJkIGNvZGVkIHBhdGguCisgICAgICAgIGlmIHN5cy5wbGF0
Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHRtcF9tb2R1bGVfcGF0aCA9ICcvdG1wL2xp
Z2h0dHBkL2xpYicKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0bXBfbW9kdWxl
X3BhdGgpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRtcF9tb2R1bGVfcGF0aCkKKyAg
ICAgICAgICAgIGxpYl9maWxlID0gJ2xpYmxpZ2h0Y29tcC5keWxpYicKKyAgICAgICAgICAgIHNo
dXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4obW9kdWxlX3BhdGgsIGxpYl9maWxlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4odG1wX21vZHVsZV9wYXRoLCBsaWJf
ZmlsZSkpCisKKyAgICAgICAgIyBQdXQgdGhlIGN5Z3dpbiBkaXJlY3RvcnkgZmlyc3QgaW4gdGhl
IHBhdGggdG8gZmluZCBjeWd3aW4xLmRsbAorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCisgICAg
ICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAgICAgICAgICAg
ZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAorICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAgICAg
ICAgICBlbnZbJ1BBVEgnXSkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBh
bmQgc2VsZi5fcmVnaXN0ZXJfY3lnd2luOgorICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXR1cF9tb3VudC5i
YXQnKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihzZXR1cF9tb3VudCkud2FpdCgpCisK
KyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU3RhcnRpbmcgaHR0cCBzZXJ2ZXInKQorICAgICAgICBz
ZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIGVudj1lbnYpCisKKyAg
ICAgICAgIyBXYWl0IGZvciBzZXJ2ZXIgdG8gc3RhcnQuCisgICAgICAgIHNlbGYubWFwcGluZ3Mg
PSBtYXBwaW5ncworICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9u
KAorICAgICAgICAgICAgc2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCisKKyAg
ICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKKyAgICAgICAgaWYgbm90IHNl
cnZlcl9zdGFydGVkIG9yIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSAhPSBOb25lOgorICAgICAg
ICAgICAgcmFpc2UgZ29vZ2xlLmh0dHBkX3V0aWxzLkh0dHBkTm90U3RhcnRlZCgnRmFpbGVkIHRv
IHN0YXJ0IGh0dHBkLicpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3Nm
dWxseSBzdGFydGVkIikKKworICAgICMgVE9ETyhkZWFubSk6IEZpbmQgYSBuaWNlciB3YXkgdG8g
c2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cgZmlsZXMgYXJlCisgICAgIyBwcm9iYWJseSBub3Qg
YmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBweXRob24gaGF2ZSBvcy5raWxs
ID8KKworICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGZv
cmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBodHRwZF9waWQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAg
ICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAgICAgICBwYXRoX3V0aWxzLnNo
dXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9waWQpCisKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vz
czoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICBzZWxmLl9w
cm9jZXNzID0gTm9uZQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgICMgUHJvdmlk
ZSBzb21lIGNvbW1hbmQgbGluZSBwYXJhbXMgZm9yIHN0YXJ0aW5nL3N0b3BwaW5nIHRoZSBodHRw
IHNlcnZlcgorICAgICMgbWFudWFsbHkuIEFsc28gdXNlZCBpbiB1aV90ZXN0cyB0byBydW4gaHR0
cCBsYXlvdXQgdGVzdHMgaW4gYSBicm93c2VyLgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWsnLCAnLS1z
ZXJ2ZXInLAorICAgICAgICBoZWxwPSdTZXJ2ZXIgYWN0aW9uIChzdGFydHxzdG9wKScpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBvcnQnLAorICAgICAgICBoZWxwPSdQ
b3J0IHRvIGxpc3RlbiBvbiAob3ZlcnJpZGVzIGxheW91dCB0ZXN0IHBvcnRzKScpCisgICAgb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJvb3QnLAorICAgICAgICBoZWxwPSdBYnNv
bHV0ZSBwYXRoIHRvIERvY3VtZW50Um9vdCAob3ZlcnJpZGVzIGxheW91dCB0ZXN0IHJvb3RzKScp
CisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXJlZ2lzdGVyX2N5Z3dpbicsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlc3Q9InJlZ2lzdGVyX2N5Z3dpbiIsIGhlbHA9J1Jl
Z2lzdGVyIEN5Z3dpbiBwYXRocyAob24gV2luIHRyeSBib3RzKScpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCctLXJ1bl9iYWNrZ3JvdW5kJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAg
ICAgICAgZGVzdD0icnVuX2JhY2tncm91bmQiLAorICAgICAgICBoZWxwPSdSdW4gb24gYmFja2dy
b3VuZCAoZm9yIHJ1bm5pbmcgYXMgVUkgdGVzdCknKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRp
b25fcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgbm90IG9wdGlvbnMuc2VydmVyOgorICAg
ICAgICBwcmludCAoJ1VzYWdlOiAlcyAtLXNlcnZlciB7c3RhcnR8c3RvcH0gWy0tcm9vdD1yb290
X2Rpcl0nCisgICAgICAgICAgICAgICAnIFstLXBvcnQ9cG9ydF9udW1iZXJdJyAlIHN5cy5hcmd2
WzBdKQorICAgIGVsc2U6CisgICAgICAgIGlmIChvcHRpb25zLnJvb3QgaXMgTm9uZSkgYW5kIChv
cHRpb25zLnBvcnQgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgIyBzcGVjaWZ5aW5nIHJvb3Qg
YnV0IG5vdCBwb3J0IG1lYW5zIHdlIHdhbnQgaHR0cGQgb24gZGVmYXVsdAorICAgICAgICAgICAg
IyBzZXQgb2YgcG9ydHMgdGhhdCBMYXlvdXRUZXN0IHVzZSwgYnV0IHBvaW50aW5nIHRvIGEgZGlm
ZmVyZW50CisgICAgICAgICAgICAjIHNvdXJjZSBvZiB0ZXN0cy4gU3BlY2lmeWluZyBwb3J0IGJ1
dCBubyByb290IGRvZXMgbm90IHNlZW0KKyAgICAgICAgICAgICMgbWVhbmluZ2Z1bC4KKyAgICAg
ICAgICAgIHJhaXNlICdTcGVjaWZ5aW5nIHBvcnQgcmVxdWlyZXMgYWxzbyBhIHJvb3QuJworICAg
ICAgICBodHRwZCA9IExpZ2h0dHBkKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3J0PW9wdGlvbnMucG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICByb290PW9wdGlvbnMucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9j
eWd3aW49b3B0aW9ucy5yZWdpc3Rlcl9jeWd3aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
cnVuX2JhY2tncm91bmQ9b3B0aW9ucy5ydW5fYmFja2dyb3VuZCkKKyAgICAgICAgaWYgJ3N0YXJ0
JyA9PSBvcHRpb25zLnNlcnZlcjoKKyAgICAgICAgICAgIGh0dHBkLnN0YXJ0KCkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGh0dHBkLnN0b3AoZm9yY2U9VHJ1ZSkKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2h0dHBfc2VydmVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFz
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlcl9iYXNlLnB5CShyZXZpc2lvbiAwKQorKysg
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
aHR0cF9zZXJ2ZXJfYmFzZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0g
bmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkJhc2UgY2xhc3Mgd2l0
aCBjb21tb24gcm91dGluZXMgYmV0d2VlbiB0aGUgQXBhY2hlIGFuZCBMaWdodHRwZCBzZXJ2ZXJz
LiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKKworCitj
bGFzcyBIdHRwU2VydmVyQmFzZShvYmplY3QpOgorCisgICAgZGVmIHdhaXRfZm9yX2FjdGlvbihz
ZWxmLCBhY3Rpb24pOgorICAgICAgICAiIiJSZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25k
cyBvciB1bnRpbCBpdCBzdWNjZWVkcy4gUmV0dXJucworICAgICAgICB3aGV0aGVyIGl0IHN1Y2Nl
ZWRlZC4iIiIKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHdoaWxl
IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IDIwOgorICAgICAgICAgICAgaWYgYWN0aW9uKCk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkK
KworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zZXJ2ZXJfcnVubmluZ19vbl9h
bGxfcG9ydHMoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgc2VydmVyIGlz
IHJ1bm5pbmcgb24gYWxsIHRoZSBkZXNpcmVkIHBvcnRzLiIiIgorICAgICAgICBmb3IgbWFwcGlu
ZyBpbiBzZWxmLm1hcHBpbmdzOgorICAgICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6
CisgICAgICAgICAgICAgICAgaHR0cF9zdWZmaXggPSAncycKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgaHR0cF9zdWZmaXggPSAnJworCisgICAgICAgICAgICB1cmwgPSAnaHR0
cCVzOi8vMTI3LjAuMC4xOiVkLycgJSAoaHR0cF9zdWZmaXgsIG1hcHBpbmdbJ3BvcnQnXSkKKwor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9w
ZW4odXJsKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBydW5uaW5nIGF0
ICVzIiAlIHVybCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAg
IGxvZ2dpbmcuZGVidWcoIlNlcnZlciBOT1QgcnVubmluZyBhdCAlcyIgJSB1cmwpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKClByb3BlcnR5IGNo
YW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBlbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwZDIucGVt
CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBlbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBA
QAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFWkRDQ0FreWdBd0lCQWdJQkFUQU5C
Z2txaGtpRzl3MEJBUVVGQURCZ01SQXdEZ1lEVlFRREV3ZFVaWE4wCitJRU5CTVFzd0NRWURWUVFH
RXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OCitUVzkxYm5S
aGFXNGdWbWxsZHpFU01CQUdBMVVFQ2hNSlEyVnlkQ0JVWlhOME1CNFhEVEE0TURjeU9ESXlNekl5
CitPRm9YRFRFek1EY3lOekl5TXpJeU9Gb3dTakVMTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFn
VENrTmhiR2xtCitiM0p1YVdFeEVqQVFCZ05WQkFvVENVTmxjblFnVkdWemRERVNNQkFHQTFVRUF4
TUpNVEkzTGpBdU1DNHhNSUdmCitNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRRFFq
MnRQV1BVZ2J1STRIMy8zZG50dHFWYm5kd1UzCiszQmRSQ2Q2N0RGTTQ0R1Jyc2pEU0g0YlkvRWJG
eVg5RDUyZC9peTZaYUFtRGVQY0N6NWsvZmdQM0RNdWp5a1lHCitxZ05pVjJ5d3hUbE1qN05sTjJD
N1NSdDY4ZlFNWnI1aUk3cnlwZHh1YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhCiszSlBKZTFUYUlh
YjVHd0lEQVFBQm80SENNSUcvTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZDWUxCdjVLCit4
NXNMTlZscExoNUZ3VHdoZERsN01JR1NCZ05WSFNNRWdZb3dnWWVBRkYzT2Y1bmoxQmxCTVUvR3o3
RWw5VnF2Cis0NWN4b1dTa1lqQmdNUkF3RGdZRFZRUURFd2RVWlhOMElFTkJNUXN3Q1FZRFZRUUdF
d0pWVXpFVE1CRUdBMVVFCitDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlRXOTFiblJo
YVc0Z1ZtbGxkekVTTUJBR0ExVUVDaE1KCitRMlZ5ZENCVVpYTjBnZ2tBMUZHVDFEL2UyVTR3RFFZ
SktvWklodmNOQVFFRkJRQURnZ0lCQUV0a1ZtTE9iVWdrCitiMmNJQTJTK1FEdGlmcTFVZ1ZmQmJ5
dHZSMmxGbW5BRE9SNTVtbzBnSFFHM0hIcXE0ZzAzNExtb1ZYREhoVWs4CitHYjZhRml2NFF1Ym1W
aExYY1VlbFRSWHdpTnZHemtXN3BDNkpycTEwNWhkUGp6WE1LVGNtaUxhb3BtNUZxZmM3CitoajVD
bjFTanNwYzhwZGVRanJiZU1kdmNhN0tsRnJHUDhZa3dDVTJ4T09YOVBpTjlHMDk2NkJXZmpuci9m
WlpwCisrT1FWdVVGSGRpQVp3dGhFTXVEcEFBWEhxWVhJc2VybWdkT3BnSmFBNTNjZjhOcUJWMlFH
aHRGZ3RzSkNSb2l1Cis3REtxaHlSV0JHeXoxOVZJSDJiN3krNnF2UVZ4dUhrMTlrS1JNMG5mdHcv
eU5jSm5tN2d0dHRlc3BNVVBzT01hCithMlNEMUcwaG0wVE5ENnZ4YUJoZ1IzY1ZxcGwvcUlwQWRG
aTAwVG03aFR5WUU3STQzelBXMDN0Ky9EcEN0M1VtCitFTVJac1E5MGNvNXErYmN4L3ZRN1lBdHdV
aDMwdU1iMHdwaWJleUN3RHA4Y3FObVNpUmtFdWMvRmpUWWVzNXQ4Cis1Z1IvL1dYMWwwK3Fqcmp1
c085Tm1vTG5xMllrNlVjaW9YK3orcTZaL2R1ZEdmcWhMZmVXRDJRMExXWUEyNDJDCitkN2ttNVkz
S0F0MVBKZFZzb2YvYWlWaFZkZGRZL09JRUtUUlFoV0VkRGJvc3kyZWgxNkJDS1hUMkZGdmhORGcx
CitBWUZ2bjZJOG5qOUlsZE1KaUljM0RkaGFjRUFFelJNZVJnUGR6QWExZ3JpS1VHa254c3lUeVJp
aThydTBXUzZ3CitEQ05ybERPVlhkellHRVpvb0JJNzZCRFZZMFcwYWtqVgorLS0tLS1FTkQgQ0VS
VElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hRSUJB
QUtCZ1FEUWoydFBXUFVnYnVJNEgzLzNkbnR0cVZibmR3VTMzQmRSQ2Q2N0RGTTQ0R1Jyc2pEUwor
SDRiWS9FYkZ5WDlENTJkL2l5NlphQW1EZVBjQ3o1ay9mZ1AzRE11anlrWUdxZ05pVjJ5d3hUbE1q
N05sTjJDNworU1J0NjhmUU1acjVpSTdyeXBkeHVhWnQ5bFNNRDNFTkJmZll0dUxUeVpkOWEzSlBK
ZTFUYUlhYjVHd0lEQVFBQgorQW9HQU5IWHU4ejJZSXpsaEUrYndoR204TUdCcEtMM3FoUnVLamVy
aXFNQTM2dFdlek93OGxZNHltRUFVK1VsdgorQnNDZGF4cXlkUW9UWW91NTdtNFR5VUhFY3hxOXBx
M0gwekIwcUw3MDlEZEhpL3Q0emJWOVhJb0F6QzV2MC9oRworOStDYTI5VHdDMDJGQ3crcUxrTnJ0
d0Nwd09jUW1jK2JQeHF2RnUxaU1pYWhVUkVDUVFEMkkvSGkyNDEzQ01aegorVEJqbDhmTWlWTzlH
aEEySjBzYzhRaStZY2dKYWthTEQ5eGNiYWlMa1R6UFpEbEEzODlDMWI2SWErcG9BcjRZQQorVmUw
RkZieHBBa0VBMk9vYmF5eUhFL1F0UEVxb3k2TkxSNTdqaXJtVkJObVNXV2Q0bEF5TDVVSUhJWVZ0
dEpaZworOENMdmJ6YVUvaURHd1Ird0tzTTY2NHJLUEhFbXRseW80d0pCQU1lU3FZTzVaT0NKR3U5
TldqckhqTTNmZEFzRworOHpzMnpoaUx5YStmY1UwaUhJa3NCVzVUQm10NzFKdy93TWM5UjVKMUsw
a1l2Rm1sOTg2NTNPNXNpMUVDUUJDaworUlY0L21FMXJtbHpaellGeUVjQjQ3RFFrY001aWN0dnhH
RXNqZTBnbmZLeVJ0QXo2ekkwZjRRYkRSVU1KK0xXdworWEsrck1zWUhhK1NmT2IwYjlza0NRUUNM
ZGVvbnNJcEZEdi9VditmbEhJU3kwV0ErQUZrTFhyUmtCS2g2Ry9PRAorZE1IYU5ldmtKZ1VucGNl
VkVua3JkZW5wNUNjRW9GVEkxN3BkK25CZ0RtL0IKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0t
LS0tCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQkocmV2aXNpb24gMCkKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
bGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NCBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
Q2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgb3MKKworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1
bHRzX2dlbmVyYXRvcgorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJv
bSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKKworCitjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dl
bmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yKToKKyAg
ICAiIiJBIEpTT04gcmVzdWx0cyBnZW5lcmF0b3IgZm9yIGxheW91dCB0ZXN0cy4iIiIKKworICAg
IExBWU9VVF9URVNUU19QQVRIID0gIkxheW91dFRlc3RzIgorCisgICAgIyBBZGRpdGlvbmFsIEpT
T04gZmllbGRzLgorICAgIFdPTlRGSVggPSAid29udGZpeENvdW50cyIKKyAgICBERUZFUlJFRCA9
ICJkZWZlcnJlZENvdW50cyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyX25hbWUs
IGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKKyAgICAgICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0
aCwgYnVpbGRlcl9iYXNlX3VybCwKKyAgICAgICAgdGVzdF90aW1pbmdzLCBleHBlY3RhdGlvbnMs
IHJlc3VsdF9zdW1tYXJ5LCBhbGxfdGVzdHMpOgorICAgICAgICAiIiJNb2RpZmllcyB0aGUgcmVz
dWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2ZSBkaXJlY3RvcnkKKyAgICAg
ICAgaWYgaXQgaXMgbm90IGZvdW5kIGxvY2FsbHkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICByZXN1bHRfc3VtbWFyeTogUmVzdWx0c1N1bW1hcnkgb2JqZWN0IHN0b3JpbmcgdGhlIHN1bW1h
cnkgb2YgdGhlIHRlc3QKKyAgICAgICAgICAgICAgcmVzdWx0cy4KKyAgICAgICAgICAoc2VlIHRo
ZSBjb21tZW50IG9mIEpTT05SZXN1bHRzR2VuZXJhdG9yLl9faW5pdF9fIGZvciBvdGhlciBBcmdz
KQorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9idWlsZGVyX25hbWUgPSBidWlsZGVyX25h
bWUKKyAgICAgICAgc2VsZi5fYnVpbGRfbmFtZSA9IGJ1aWxkX25hbWUKKyAgICAgICAgc2VsZi5f
YnVpbGRfbnVtYmVyID0gYnVpbGRfbnVtYmVyCisgICAgICAgIHNlbGYuX2J1aWxkZXJfYmFzZV91
cmwgPSBidWlsZGVyX2Jhc2VfdXJsCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZmlsZV9wYXRoID0g
b3MucGF0aC5qb2luKHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsCisgICAgICAgICAgICBzZWxmLlJF
U1VMVFNfRklMRU5BTUUpCisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9u
cworCisgICAgICAgICMgV2UgZG9uJ3QgdXNlIHNlbGYuX3NraXBwZWRfdGVzdHMgYW5kIHNlbGYu
X3Bhc3NlZF90ZXN0cyBhcyB3ZQorICAgICAgICAjIG92ZXJyaWRlIF9JbnNlcnRGYWlsdXJlU3Vt
bWFyaWVzLgorCisgICAgICAgICMgV2Ugd2FudCByZWxhdGl2ZSBwYXRocyB0byBMYXlvdXRUZXN0
IHJvb3QgZm9yIEpTT04gb3V0cHV0LgorICAgICAgICBwYXRoX3RvX25hbWUgPSBzZWxmLl9nZXRf
cGF0aF9yZWxhdGl2ZV90b19sYXlvdXRfdGVzdF9yb290CisgICAgICAgIHNlbGYuX3Jlc3VsdF9z
dW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSBkaWN0KAor
ICAgICAgICAgICAgKHBhdGhfdG9fbmFtZSh0ZXN0KSwgdGVzdF9mYWlsdXJlcy5kZXRlcm1pbmVf
cmVzdWx0X3R5cGUoZmFpbHVyZXMpKQorICAgICAgICAgICAgZm9yICh0ZXN0LCBmYWlsdXJlcykg
aW4gcmVzdWx0X3N1bW1hcnkuZmFpbHVyZXMuaXRlcml0ZW1zKCkpCisgICAgICAgIHNlbGYuX2Fs
bF90ZXN0cyA9IFtwYXRoX3RvX25hbWUodGVzdCkgZm9yIHRlc3QgaW4gYWxsX3Rlc3RzXQorICAg
ICAgICBzZWxmLl90ZXN0X3RpbWluZ3MgPSBkaWN0KAorICAgICAgICAgICAgKHBhdGhfdG9fbmFt
ZSh0ZXN0X3R1cGxlLmZpbGVuYW1lKSwgdGVzdF90dXBsZS50ZXN0X3J1bl90aW1lKQorICAgICAg
ICAgICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF90aW1pbmdzKQorCisgICAgICAgIHNlbGYuX2dl
bmVyYXRlX2pzb25fb3V0cHV0KCkKKworICAgIGRlZiBfZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5
b3V0X3Rlc3Rfcm9vdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGF0aCBv
ZiB0aGUgdGVzdCByZWxhdGl2ZSB0byB0aGUgbGF5b3V0IHRlc3Qgcm9vdC4KKyAgICAgICAgRm9y
IGV4YW1wbGUsIGZvcjoKKyAgICAgICAgICBzcmMvdGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvZm9vLmh0bWwKKyAgICAgICAgV2Ugd291bGQgcmV0dXJuCisgICAgICAg
ICAgZmFzdC9mb3Jtcy9mb28uaHRtbAorICAgICAgICAiIiIKKyAgICAgICAgaW5kZXggPSB0ZXN0
LmZpbmQoc2VsZi5MQVlPVVRfVEVTVFNfUEFUSCkKKyAgICAgICAgaWYgaW5kZXggaXMgbm90IC0x
OgorICAgICAgICAgICAgaW5kZXggKz0gbGVuKHNlbGYuTEFZT1VUX1RFU1RTX1BBVEgpCisKKyAg
ICAgICAgaWYgaW5kZXggaXMgLTE6CisgICAgICAgICAgICAjIEFscmVhZHkgYSByZWxhdGl2ZSBw
YXRoLgorICAgICAgICAgICAgcmVsYXRpdmVQYXRoID0gdGVzdAorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmVsYXRpdmVQYXRoID0gdGVzdFtpbmRleCArIDE6XQorCisgICAgICAgICMgTWFr
ZSBzdXJlIGFsbCBwYXRocyBhcmUgdW5peC1zdHlsZS4KKyAgICAgICAgcmV0dXJuIHJlbGF0aXZl
UGF0aC5yZXBsYWNlKCdcXCcsICcvJykKKworICAgICMgb3ZlcnJpZGUKKyAgICBkZWYgX2NvbnZl
cnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24oc2VsZiwgcmVzdWx0c19qc29uKToKKyAgICAgICAg
YXJjaGl2ZV92ZXJzaW9uID0gTm9uZQorICAgICAgICBpZiBzZWxmLlZFUlNJT05fS0VZIGluIHJl
c3VsdHNfanNvbjoKKyAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IHJlc3VsdHNfanNvbltz
ZWxmLlZFUlNJT05fS0VZXQorCisgICAgICAgIHN1cGVyKEpTT05MYXlvdXRSZXN1bHRzR2VuZXJh
dG9yLAorICAgICAgICAgICAgICBzZWxmKS5fY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lv
bihyZXN1bHRzX2pzb24pCisKKyAgICAgICAgIyB2ZXJzaW9uIDItPjMKKyAgICAgICAgaWYgYXJj
aGl2ZV92ZXJzaW9uID09IDI6CisgICAgICAgICAgICBmb3IgcmVzdWx0c19mb3JfYnVpbGRlciBp
biByZXN1bHRzX2pzb24uaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRF
U1RTXQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWUKKworICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9yZXN1bHRzOgorICAgICAgICAgICAg
ICAgICMgTWFrZSBzdXJlIGFsbCBwYXRocyBhcmUgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICB0
ZXN0X3BhdGggPSBzZWxmLl9nZXRfcGF0aF9yZWxhdGl2ZV90b19sYXlvdXRfdGVzdF9yb290KHRl
c3QpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9wYXRoICE9IHRlc3Q6CisgICAgICAgICAgICAg
ICAgICAgIHRlc3RfcmVzdWx0c1t0ZXN0X3BhdGhdID0gdGVzdF9yZXN1bHRzW3Rlc3RdCisgICAg
ICAgICAgICAgICAgICAgIGRlbCB0ZXN0X3Jlc3VsdHNbdGVzdF0KKworICAgICMgb3ZlcnJpZGUK
KyAgICBkZWYgX2luc2VydF9mYWlsdXJlX3N1bW1hcmllcyhzZWxmLCByZXN1bHRzX2Zvcl9idWls
ZGVyKToKKyAgICAgICAgc3VtbWFyeSA9IHNlbGYuX3Jlc3VsdF9zdW1tYXJ5CisKKyAgICAgICAg
c2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAg
ICAgICAgICAgbGVuKChzZXQoc3VtbWFyeS5mYWlsdXJlcy5rZXlzKCkpIHwKKyAgICAgICAgICAg
ICAgICBzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlNLSVBd
KSAmCisgICAgICAgICAgICAgICAgc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0ZXN0X2V4cGVj
dGF0aW9ucy5OT1ddKSwKKyAgICAgICAgICAgIHNlbGYuRklYQUJMRV9DT1VOVCkKKyAgICAgICAg
c2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAg
ICAgICAgICAgc2VsZi5fZ2V0X2ZhaWx1cmVfc3VtbWFyeV9lbnRyeSh0ZXN0X2V4cGVjdGF0aW9u
cy5OT1cpLAorICAgICAgICAgICAgc2VsZi5GSVhBQkxFKQorICAgICAgICBzZWxmLl9pbnNlcnRf
aXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAgICBsZW4o
c2VsZi5fZXhwZWN0YXRpb25zLmdldF90ZXN0c193aXRoX3RpbWVsaW5lKAorICAgICAgICAgICAg
ICAgIHRlc3RfZXhwZWN0YXRpb25zLk5PVykpLCBzZWxmLkFMTF9GSVhBQkxFX0NPVU5UKQorICAg
ICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIs
CisgICAgICAgICAgICBzZWxmLl9nZXRfZmFpbHVyZV9zdW1tYXJ5X2VudHJ5KHRlc3RfZXhwZWN0
YXRpb25zLkRFRkVSKSwKKyAgICAgICAgICAgIHNlbGYuREVGRVJSRUQpCisgICAgICAgIHNlbGYu
X2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAg
ICAgIHNlbGYuX2dldF9mYWlsdXJlX3N1bW1hcnlfZW50cnkodGVzdF9leHBlY3RhdGlvbnMuV09O
VEZJWCksCisgICAgICAgICAgICBzZWxmLldPTlRGSVgpCisKKyAgICAjIG92ZXJyaWRlCisgICAg
ZGVmIF9ub3JtYWxpemVfcmVzdWx0c19qc29uKHNlbGYsIHRlc3QsIHRlc3RfbmFtZSwgdGVzdHMp
OgorICAgICAgICBzdXBlcihKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvciwgc2VsZikuX25vcm1h
bGl6ZV9yZXN1bHRzX2pzb24oCisgICAgICAgICAgICB0ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQor
CisgICAgICAgICMgUmVtb3ZlIHRlc3RzIHRoYXQgZG9uJ3QgZXhpc3QgYW55bW9yZS4KKyAgICAg
ICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2Rpcigp
LCB0ZXN0X25hbWUpCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoZnVsbF9w
YXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZnVsbF9wYXRoKToKKyAgICAgICAg
ICAgIGRlbCB0ZXN0c1t0ZXN0X25hbWVdCisKKyAgICBkZWYgX2dldF9mYWlsdXJlX3N1bW1hcnlf
ZW50cnkoc2VsZiwgdGltZWxpbmUpOgorICAgICAgICAiIiJDcmVhdGVzIGEgc3VtbWFyeSBvYmpl
Y3QgdG8gaW5zZXJ0IGludG8gdGhlIEpTT04uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBz
dW1tYXJ5ICAgUmVzdWx0U3VtbWFyeSBvYmplY3Qgd2l0aCB0ZXN0IHJlc3VsdHMKKyAgICAgICAg
ICB0aW1lbGluZSAgY3VycmVudCB0ZXN0X2V4cGVjdGF0aW9ucyB0aW1lbGluZSB0byBidWlsZCBl
bnRyeSBmb3IKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4sIHRlc3RfZXhwZWN0YXRpb25zLk5P
VywgZXRjLikKKyAgICAgICAgIiIiCisgICAgICAgIGVudHJ5ID0ge30KKyAgICAgICAgc3VtbWFy
eSA9IHNlbGYuX3Jlc3VsdF9zdW1tYXJ5CisgICAgICAgIHRpbWVsaW5lX3Rlc3RzID0gc3VtbWFy
eS50ZXN0c19ieV90aW1lbGluZVt0aW1lbGluZV0KKyAgICAgICAgZW50cnlbc2VsZi5TS0lQX1JF
U1VMVF0gPSBsZW4oCisgICAgICAgICAgICBzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rl
c3RfZXhwZWN0YXRpb25zLlNLSVBdICYKKyAgICAgICAgICAgIHRpbWVsaW5lX3Rlc3RzKQorICAg
ICAgICBlbnRyeVtzZWxmLlBBU1NfUkVTVUxUXSA9IGxlbigKKyAgICAgICAgICAgIHN1bW1hcnku
dGVzdHNfYnlfZXhwZWN0YXRpb25bdGVzdF9leHBlY3RhdGlvbnMuUEFTU10gJgorICAgICAgICAg
ICAgdGltZWxpbmVfdGVzdHMpCisgICAgICAgIGZvciBmYWlsdXJlX3R5cGUgaW4gc3VtbWFyeS50
ZXN0c19ieV9leHBlY3RhdGlvbi5rZXlzKCk6CisgICAgICAgICAgICBpZiBmYWlsdXJlX3R5cGUg
bm90IGluIHNlbGYuRkFJTFVSRV9UT19DSEFSOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg
ICAgICAgICAgICBjb3VudCA9IGxlbihzdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW2ZhaWx1
cmVfdHlwZV0gJgorICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVfdGVzdHMpCisgICAg
ICAgICAgICBlbnRyeVtzZWxmLkZBSUxVUkVfVE9fQ0hBUltmYWlsdXJlX3R5cGVdXSA9IGNvdW50
CisgICAgICAgIHJldHVybiBlbnRyeQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRf
cmVzdWx0c19nZW5lcmF0b3IucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVy
YXRvci5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MTggQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitp
bXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIy
CitpbXBvcnQgeG1sLmRvbS5taW5pZG9tCisKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBh
dGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCisK
K3N5cy5wYXRoLmFwcGVuZChwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScs
ICdXZWJLaXQnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdX
ZWJLaXRUb29scycpKSAKK2ltcG9ydCBzaW1wbGVqc29uCisKKworY2xhc3MgSlNPTlJlc3VsdHNH
ZW5lcmF0b3Iob2JqZWN0KToKKworICAgIE1BWF9OVU1CRVJfT0ZfQlVJTERfUkVTVUxUU19UT19M
T0cgPSA3NTAKKyAgICAjIE1pbiB0aW1lIChzZWNvbmRzKSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8g
dGhlIEpTT04uCisgICAgTUlOX1RJTUUgPSAxCisgICAgSlNPTl9QUkVGSVggPSAiQUREX1JFU1VM
VFMoIgorICAgIEpTT05fU1VGRklYID0gIik7IgorICAgIFBBU1NfUkVTVUxUID0gIlAiCisgICAg
U0tJUF9SRVNVTFQgPSAiWCIKKyAgICBOT19EQVRBX1JFU1VMVCA9ICJOIgorICAgIFZFUlNJT04g
PSAzCisgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lvbiIKKyAgICBSRVNVTFRTID0gInJlc3VsdHMi
CisgICAgVElNRVMgPSAidGltZXMiCisgICAgQlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMi
CisgICAgV0VCS0lUX1NWTiA9ICJ3ZWJraXRSZXZpc2lvbiIKKyAgICBDSFJPTUVfU1ZOID0gImNo
cm9tZVJldmlzaW9uIgorICAgIFRJTUUgPSAic2Vjb25kc1NpbmNlRXBvY2giCisgICAgVEVTVFMg
PSAidGVzdHMiCisKKyAgICBGSVhBQkxFX0NPVU5UID0gImZpeGFibGVDb3VudCIKKyAgICBGSVhB
QkxFID0gImZpeGFibGVDb3VudHMiCisgICAgQUxMX0ZJWEFCTEVfQ09VTlQgPSAiYWxsRml4YWJs
ZUNvdW50IgorCisgICAgIyBOb3RlIHRoYXQgd2Ugb21pdCB0ZXN0X2V4cGVjdGF0aW9ucy5GQUlM
IGZyb20gdGhpcyBsaXN0IGJlY2F1c2UKKyAgICAjIGl0IHNob3VsZCBuZXZlciBzaG93IHVwIChp
dCdzIGEgbGVnYWN5IGlucHV0IGV4cGVjdGF0aW9uLCBuZXZlcgorICAgICMgYW4gb3V0cHV0IGV4
cGVjdGF0aW9uKS4KKyAgICBGQUlMVVJFX1RPX0NIQVIgPSB7dGVzdF9leHBlY3RhdGlvbnMuQ1JB
U0g6ICJDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9V
VDogIlQiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5JTUFHRTog
IkkiLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5URVhUOiAiRiIs
CisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLk1JU1NJTkc6ICJPIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuSU1BR0VfUExVU19URVhU
OiAiWiJ9CisgICAgRkFJTFVSRV9DSEFSUyA9IEZBSUxVUkVfVE9fQ0hBUi52YWx1ZXMoKQorCisg
ICAgUkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1bHRzLmpzb24iCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgICAgIHJl
c3VsdHNfZmlsZV9iYXNlX3BhdGgsIGJ1aWxkZXJfYmFzZV91cmwsCisgICAgICAgIHRlc3RfdGlt
aW5ncywgZmFpbHVyZXMsIHBhc3NlZF90ZXN0cywgc2tpcHBlZF90ZXN0cywgYWxsX3Rlc3RzKToK
KyAgICAgICAgIiIiTW9kaWZpZXMgdGhlIHJlc3VsdHMuanNvbiBmaWxlLiBHcmFicyBpdCBvZmYg
dGhlIGFyY2hpdmUgZGlyZWN0b3J5CisgICAgICAgIGlmIGl0IGlzIG5vdCBmb3VuZCBsb2NhbGx5
LgorCisgICAgICAgIEFyZ3MKKyAgICAgICAgICBidWlsZGVyX25hbWU6IHRoZSBidWlsZGVyIG5h
bWUgKGUuZy4gV2Via2l0KS4KKyAgICAgICAgICBidWlsZF9uYW1lOiB0aGUgYnVpbGQgbmFtZSAo
ZS5nLiB3ZWJraXQtcmVsKS4KKyAgICAgICAgICBidWlsZF9udW1iZXI6IHRoZSBidWlsZCBudW1i
ZXIuCisgICAgICAgICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aDogQWJzb2x1dGUgcGF0aCB0byB0
aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisgICAgICAgICAgICAgIHJlc3VsdHMganNvbiBm
aWxlLgorICAgICAgICAgIGJ1aWxkZXJfYmFzZV91cmw6IHRoZSBVUkwgd2hlcmUgd2UgaGF2ZSB0
aGUgYXJjaGl2ZWQgdGVzdCByZXN1bHRzLgorICAgICAgICAgIHRlc3RfdGltaW5nczogTWFwIG9m
IHRlc3QgbmFtZSB0byBhIHRlc3RfcnVuLXRpbWUuCisgICAgICAgICAgZmFpbHVyZXM6IE1hcCBv
ZiB0ZXN0IG5hbWUgdG8gYSBmYWlsdXJlIHR5cGUgKG9mIHRlc3RfZXhwZWN0YXRpb25zKS4KKyAg
ICAgICAgICBwYXNzZWRfdGVzdHM6IEEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSBwYXNzZWQgdGVz
dHMuCisgICAgICAgICAgc2tpcHBlZF90ZXN0czogQSBzZXQgY29udGFpbmluZyBhbGwgdGhlIHNr
aXBwZWQgdGVzdHMuCisgICAgICAgICAgYWxsX3Rlc3RzOiBMaXN0IG9mIGFsbCB0aGUgdGVzdHMg
dGhhdCB3ZXJlIHJ1bi4gIFRoaXMgc2hvdWxkIG5vdAorICAgICAgICAgICAgICBpbmNsdWRlIHNr
aXBwZWQgdGVzdHMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9idWlsZGVyX25hbWUgPSBi
dWlsZGVyX25hbWUKKyAgICAgICAgc2VsZi5fYnVpbGRfbmFtZSA9IGJ1aWxkX25hbWUKKyAgICAg
ICAgc2VsZi5fYnVpbGRfbnVtYmVyID0gYnVpbGRfbnVtYmVyCisgICAgICAgIHNlbGYuX2J1aWxk
ZXJfYmFzZV91cmwgPSBidWlsZGVyX2Jhc2VfdXJsCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZmls
ZV9wYXRoID0gb3MucGF0aC5qb2luKHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgsCisgICAgICAgICAg
ICBzZWxmLlJFU1VMVFNfRklMRU5BTUUpCisgICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IHRl
c3RfdGltaW5ncworICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGZhaWx1cmVzCisgICAgICAgIHNl
bGYuX3Bhc3NlZF90ZXN0cyA9IHBhc3NlZF90ZXN0cworICAgICAgICBzZWxmLl9za2lwcGVkX3Rl
c3RzID0gc2tpcHBlZF90ZXN0cworICAgICAgICBzZWxmLl9hbGxfdGVzdHMgPSBhbGxfdGVzdHMK
KworICAgICAgICBzZWxmLl9nZW5lcmF0ZV9qc29uX291dHB1dCgpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2pzb25fb3V0cHV0KHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIEpTT04gb3V0
cHV0IGZpbGUuIiIiCisgICAgICAgIGpzb24gPSBzZWxmLl9nZXRfanNvbigpCisgICAgICAgIGlm
IGpzb246CisgICAgICAgICAgICByZXN1bHRzX2ZpbGUgPSBvcGVuKHNlbGYuX3Jlc3VsdHNfZmls
ZV9wYXRoLCAidyIpCisgICAgICAgICAgICByZXN1bHRzX2ZpbGUud3JpdGUoanNvbikKKyAgICAg
ICAgICAgIHJlc3VsdHNfZmlsZS5jbG9zZSgpCisKKyAgICBkZWYgX2dldF9zdm5fcmV2aXNpb24o
c2VsZiwgaW5fZGlyZWN0b3J5PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdm4gcmV2
aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJlIHJ1bi4KKyAg
ICAgICAgIiIiCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5m
byIsICItLXhtbCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1pbl9k
aXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5cy5w
bGF0Zm9ybSA9PSAnd2luMzInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0cmluZyhvdXRwdXQpCisgICAg
ICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0
dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAncmV2aXNpb24nKQorICAgICAgICBleGNlcHQgeG1s
LnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAg
ZGVmIF9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1bHRzKHNlbGYpOgorICAgICAgICAiIiJSZWFkcyBv
bGQgcmVzdWx0cyBKU09OIGZpbGUgaWYgaXQgZXhpc3RzLgorICAgICAgICBSZXR1cm5zIChhcmNo
aXZlZF9yZXN1bHRzLCBlcnJvcikgdHVwbGUgd2hlcmUgZXJyb3IgaXMgTm9uZSBpZiByZXN1bHRz
CisgICAgICAgIHdlcmUgc3VjY2Vzc2Z1bGx5IHJlYWQuCisgICAgICAgICIiIgorICAgICAgICBy
ZXN1bHRzX2pzb24gPSB7fQorICAgICAgICBvbGRfcmVzdWx0cyA9IE5vbmUKKyAgICAgICAgZXJy
b3IgPSBOb25lCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcmVzdWx0c19maWxl
X3BhdGgpOgorICAgICAgICAgICAgb2xkX3Jlc3VsdHNfZmlsZSA9IG9wZW4oc2VsZi5fcmVzdWx0
c19maWxlX3BhdGgsICJyIikKKyAgICAgICAgICAgIG9sZF9yZXN1bHRzID0gb2xkX3Jlc3VsdHNf
ZmlsZS5yZWFkKCkKKyAgICAgICAgZWxpZiBzZWxmLl9idWlsZGVyX2Jhc2VfdXJsOgorICAgICAg
ICAgICAgIyBDaGVjayBpZiB3ZSBoYXZlIHRoZSBhcmNoaXZlZCBKU09OIGZpbGUgb24gdGhlIGJ1
aWxkYm90IHNlcnZlci4KKyAgICAgICAgICAgIHJlc3VsdHNfZmlsZV91cmwgPSAoc2VsZi5fYnVp
bGRlcl9iYXNlX3VybCArCisgICAgICAgICAgICAgICAgc2VsZi5fYnVpbGRfbmFtZSArICIvIiAr
IHNlbGYuUkVTVUxUU19GSUxFTkFNRSkKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkxvY2Fs
IHJlc3VsdHMuanNvbiBmaWxlIGRvZXMgbm90IGV4aXN0LiBHcmFiYmluZyAiCisgICAgICAgICAg
ICAgICAgIml0IG9mZiB0aGUgYXJjaGl2ZSBhdCAiICsgcmVzdWx0c19maWxlX3VybCkKKworICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdHNfZmlsZSA9IHVybGxpYjIudXJs
b3BlbihyZXN1bHRzX2ZpbGVfdXJsKQorICAgICAgICAgICAgICAgIGluZm8gPSByZXN1bHRzX2Zp
bGUuaW5mbygpCisgICAgICAgICAgICAgICAgb2xkX3Jlc3VsdHMgPSByZXN1bHRzX2ZpbGUucmVh
ZCgpCisgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGh0dHBfZXJyb3I6Cisg
ICAgICAgICAgICAgICAgIyBBIG5vbi00eHggc3RhdHVzIGNvZGUgbWVhbnMgdGhlIGJvdCBpcyBo
b3NlZCBmb3Igc29tZSByZWFzb24KKyAgICAgICAgICAgICAgICAjIGFuZCB3ZSBjYW4ndCBncmFi
IHRoZSByZXN1bHRzLmpzb24gZmlsZSBvZmYgb2YgaXQuCisgICAgICAgICAgICAgICAgaWYgKGh0
dHBfZXJyb3IuY29kZSA8IDQwMCBhbmQgaHR0cF9lcnJvci5jb2RlID49IDUwMCk6CisgICAgICAg
ICAgICAgICAgICAgIGVycm9yID0gaHR0cF9lcnJvcgorICAgICAgICAgICAgZXhjZXB0IHVybGxp
YjIuVVJMRXJyb3IsIHVybF9lcnJvcjoKKyAgICAgICAgICAgICAgICBlcnJvciA9IHVybF9lcnJv
cgorCisgICAgICAgIGlmIG9sZF9yZXN1bHRzOgorICAgICAgICAgICAgIyBTdHJpcCB0aGUgcHJl
Zml4IGFuZCBzdWZmaXggc28gd2UgY2FuIGdldCB0aGUgYWN0dWFsIEpTT04gb2JqZWN0LgorICAg
ICAgICAgICAgb2xkX3Jlc3VsdHMgPSBvbGRfcmVzdWx0c1tsZW4oc2VsZi5KU09OX1BSRUZJWCk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihvbGRfcmVzdWx0cykg
LSBsZW4oc2VsZi5KU09OX1NVRkZJWCldCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICByZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWRzKG9sZF9yZXN1bHRzKQorICAgICAg
ICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInJlc3VsdHMuanNv
biB3YXMgbm90IHZhbGlkIEpTT04uIENsb2JiZXJpbmcuIikKKyAgICAgICAgICAgICAgICAjIFRo
ZSBKU09OIGZpbGUgaXMgbm90IHZhbGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUgcmVzdWx0cy4K
KyAgICAgICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygnT2xkIEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3QuIFN0YXJ0
aW5nIGZyZXNoLicpCisgICAgICAgICAgICByZXN1bHRzX2pzb24gPSB7fQorCisgICAgICAgIHJl
dHVybiByZXN1bHRzX2pzb24sIGVycm9yCisKKyAgICBkZWYgX2dldF9qc29uKHNlbGYpOgorICAg
ICAgICAiIiJHZXRzIHRoZSByZXN1bHRzIGZvciB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIiIiCisg
ICAgICAgIHJlc3VsdHNfanNvbiwgZXJyb3IgPSBzZWxmLl9nZXRfYXJjaGl2ZWRfanNvbl9yZXN1
bHRzKCkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAjIElmIHRoZXJlIHdhcyBhbiBl
cnJvciBkb24ndCB3cml0ZSBhIHJlc3VsdHMuanNvbgorICAgICAgICAgICAgIyBmaWxlIGF0IGFs
bCBhcyBpdCB3b3VsZCBsb3NlIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGJvdC4KKyAgICAg
ICAgICAgIGxvZ2dpbmcuZXJyb3IoIkFyY2hpdmUgZGlyZWN0b3J5IGlzIGluYWNjZXNzaWJsZS4g
Tm90IG1vZGlmeWluZyAiCisgICAgICAgICAgICAgICAgIm9yIGNsb2JiZXJpbmcgdGhlIHJlc3Vs
dHMuanNvbiBmaWxlOiAiICsgc3RyKGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgYnVpbGRlcl9uYW1lID0gc2VsZi5fYnVpbGRlcl9uYW1lCisgICAgICAgIGlmIHJl
c3VsdHNfanNvbiBhbmQgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRzX2pzb246CisgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJCdWlsZGVyIG5hbWUgKCVzKSBpcyBub3QgaW4gdGhlIHJlc3Vs
dHMuanNvbiBmaWxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJSBidWlsZGVyX25hbWUp
CisKKyAgICAgICAgc2VsZi5fY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihyZXN1bHRz
X2pzb24pCisKKyAgICAgICAgaWYgYnVpbGRlcl9uYW1lIG5vdCBpbiByZXN1bHRzX2pzb246Cisg
ICAgICAgICAgICByZXN1bHRzX2pzb25bYnVpbGRlcl9uYW1lXSA9ICgKKyAgICAgICAgICAgICAg
ICBzZWxmLl9jcmVhdGVfcmVzdWx0c19mb3JfYnVpbGRlcl9qc29uKCkpCisKKyAgICAgICAgcmVz
dWx0c19mb3JfYnVpbGRlciA9IHJlc3VsdHNfanNvbltidWlsZGVyX25hbWVdCisKKyAgICAgICAg
c2VsZi5faW5zZXJ0X2dlbmVyaWNfbWV0YWRhdGEocmVzdWx0c19mb3JfYnVpbGRlcikKKworICAg
ICAgICBzZWxmLl9pbnNlcnRfZmFpbHVyZV9zdW1tYXJpZXMocmVzdWx0c19mb3JfYnVpbGRlcikK
KworICAgICAgICAjIFVwZGF0ZSB0aGUgYWxsIGZhaWxpbmcgdGVzdHMgd2l0aCByZXN1bHQgdHlw
ZSBhbmQgdGltZS4KKyAgICAgICAgdGVzdHMgPSByZXN1bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVT
VFNdCisgICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzID0gc2V0KHNlbGYuX2ZhaWx1cmVzLml0ZXJr
ZXlzKCkpCisgICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzLnVwZGF0ZSh0ZXN0cy5pdGVya2V5cygp
KQorICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKKyAgICAgICAgICAgIHNl
bGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKKworICAgICAgICAj
IFNwZWNpZnkgc2VwYXJhdG9ycyBpbiBvcmRlciB0byBnZXQgY29tcGFjdCBlbmNvZGluZy4KKyAg
ICAgICAgcmVzdWx0c19zdHIgPSBzaW1wbGVqc29uLmR1bXBzKHJlc3VsdHNfanNvbiwgc2VwYXJh
dG9ycz0oJywnLCAnOicpKQorICAgICAgICByZXR1cm4gc2VsZi5KU09OX1BSRUZJWCArIHJlc3Vs
dHNfc3RyICsgc2VsZi5KU09OX1NVRkZJWAorCisgICAgZGVmIF9pbnNlcnRfZmFpbHVyZV9zdW1t
YXJpZXMoc2VsZiwgcmVzdWx0c19mb3JfYnVpbGRlcik6CisgICAgICAgICIiIkluc2VydHMgYWdn
cmVnYXRlIHBhc3MvZmFpbHVyZSBzdGF0aXN0aWNzIGludG8gdGhlIEpTT04uCisgICAgICAgIFRo
aXMgbWV0aG9kIHJlYWRzIHNlbGYuX3NraXBwZWRfdGVzdHMsIHNlbGYuX3Bhc3NlZF90ZXN0cyBh
bmQKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgYW5kIGluc2VydHMgRklYQUJMRSwgRklYQUJMRV9D
T1VOVCBhbmQgQUxMX0ZJWEFCTEVfQ09VTlQKKyAgICAgICAgZW50cmllcy4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXI6IERpY3Rpb25hcnkgY29udGFpbmlu
ZyB0aGUgdGVzdCByZXN1bHRzIGZvciBhCisgICAgICAgICAgICAgIHNpbmdsZSBidWlsZGVyLgor
ICAgICAgICAiIiIKKyAgICAgICAgIyBJbnNlcnQgdGhlIG51bWJlciBvZiB0ZXN0cyB0aGF0IGZh
aWxlZC4KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zv
cl9idWlsZGVyLAorICAgICAgICAgICAgbGVuKHNldChzZWxmLl9mYWlsdXJlcy5rZXlzKCkpIHwg
c2VsZi5fc2tpcHBlZF90ZXN0cyksCisgICAgICAgICAgICBzZWxmLkZJWEFCTEVfQ09VTlQpCisK
KyAgICAgICAgIyBDcmVhdGUgYSBwYXNzL3NraXAvZmFpbHVyZSBzdW1tYXJ5IGRpY3Rpb25hcnku
CisgICAgICAgIGVudHJ5ID0ge30KKyAgICAgICAgZW50cnlbc2VsZi5TS0lQX1JFU1VMVF0gPSBs
ZW4oc2VsZi5fc2tpcHBlZF90ZXN0cykKKyAgICAgICAgZW50cnlbc2VsZi5QQVNTX1JFU1VMVF0g
PSBsZW4oc2VsZi5fcGFzc2VkX3Rlc3RzKQorICAgICAgICBnZXQgPSBlbnRyeS5nZXQKKyAgICAg
ICAgZm9yIGZhaWx1cmVfdHlwZSBpbiBzZWxmLl9mYWlsdXJlcy52YWx1ZXMoKToKKyAgICAgICAg
ICAgIGZhaWx1cmVfY2hhciA9IHNlbGYuRkFJTFVSRV9UT19DSEFSW2ZhaWx1cmVfdHlwZV0KKyAg
ICAgICAgICAgIGVudHJ5W2ZhaWx1cmVfY2hhcl0gPSBnZXQoZmFpbHVyZV9jaGFyLCAwKSArIDEK
KworICAgICAgICAjIEluc2VydCB0aGUgcGFzcy9za2lwL2ZhaWx1cmUgc3VtbWFyeSBkaWN0aW9u
YXJ5LgorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9y
X2J1aWxkZXIsIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuRklYQUJMRSkKKworICAgICAgICAjIEluc2VydCB0aGUgbnVtYmVyIG9mIGFsbCB0aGUg
dGVzdHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gcGFzcy4KKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0
ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgbGVuKHNl
bGYuX3NraXBwZWRfdGVzdHMgfCBzZWxmLl9hbGxfdGVzdHMpLAorICAgICAgICAgICAgc2VsZi5B
TExfRklYQUJMRV9DT1VOVCkKKworICAgIGRlZiBfaW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChz
ZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyLCBpdGVtLCBrZXkpOgorICAgICAgICAiIiJJbnNlcnRz
IHRoZSBpdGVtIGludG8gdGhlIGxpc3Qgd2l0aCB0aGUgZ2l2ZW4ga2V5IGluIHRoZSByZXN1bHRz
IGZvcgorICAgICAgICB0aGlzIGJ1aWxkZXIuIENyZWF0ZXMgdGhlIGxpc3QgaWYgbm8gc3VjaCBs
aXN0IGV4aXN0cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdHNfZm9yX2J1aWxk
ZXI6IERpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGZvciBhCisgICAgICAg
ICAgICAgIHNpbmdsZSBidWlsZGVyLgorICAgICAgICAgIGl0ZW06IE51bWJlciBvciBzdHJpbmcg
dG8gaW5zZXJ0IGludG8gdGhlIGxpc3QuCisgICAgICAgICAga2V5OiBLZXkgaW4gcmVzdWx0c19m
b3JfYnVpbGRlciBmb3IgdGhlIGxpc3QgdG8gaW5zZXJ0IGludG8uCisgICAgICAgICIiIgorICAg
ICAgICBpZiBrZXkgaW4gcmVzdWx0c19mb3JfYnVpbGRlcjoKKyAgICAgICAgICAgIHJhd19saXN0
ID0gcmVzdWx0c19mb3JfYnVpbGRlcltrZXldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
YXdfbGlzdCA9IFtdCisKKyAgICAgICAgcmF3X2xpc3QuaW5zZXJ0KDAsIGl0ZW0pCisgICAgICAg
IHJhd19saXN0ID0gcmF3X2xpc3RbOnNlbGYuTUFYX05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RP
X0xPR10KKyAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlcltrZXldID0gcmF3X2xpc3QKKworICAg
IGRlZiBfaW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHNlbGYsIGl0ZW0sIGVuY29kZWRf
cmVzdWx0cyk6CisgICAgICAgICIiIkluc2VydHMgdGhlIGl0ZW0gaW50byB0aGUgcnVuLWxlbmd0
aCBlbmNvZGVkIHJlc3VsdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBpdGVtOiBTdHJp
bmcgb3IgbnVtYmVyIHRvIGluc2VydC4KKyAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHM6IHJ1bi1s
ZW5ndGggZW5jb2RlZCByZXN1bHRzLiBBbiBhcnJheSBvZiBhcnJheXMsIGUuZy4KKyAgICAgICAg
ICAgICAgW1szLCdBJ10sWzEsJ1EnXV0gZW5jb2RlcyBBQUFRLgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgbGVuKGVuY29kZWRfcmVzdWx0cykgYW5kIGl0ZW0gPT0gZW5jb2RlZF9yZXN1bHRzWzBd
WzFdOgorICAgICAgICAgICAgbnVtX3Jlc3VsdHMgPSBlbmNvZGVkX3Jlc3VsdHNbMF1bMF0KKyAg
ICAgICAgICAgIGlmIG51bV9yZXN1bHRzIDw9IHNlbGYuTUFYX05VTUJFUl9PRl9CVUlMRF9SRVNV
TFRTX1RPX0xPRzoKKyAgICAgICAgICAgICAgICBlbmNvZGVkX3Jlc3VsdHNbMF1bMF0gPSBudW1f
cmVzdWx0cyArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVXNlIGEgbGlzdCBpbnN0
ZWFkIG9mIGEgY2xhc3MgZm9yIHRoZSBydW4tbGVuZ3RoIGVuY29kaW5nIHNpbmNlCisgICAgICAg
ICAgICAjIHdlIHdhbnQgdGhlIHNlcmlhbGl6ZWQgZm9ybSB0byBiZSBjb25jaXNlLgorICAgICAg
ICAgICAgZW5jb2RlZF9yZXN1bHRzLmluc2VydCgwLCBbMSwgaXRlbV0pCisKKyAgICBkZWYgX2lu
c2VydF9nZW5lcmljX21ldGFkYXRhKHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgorICAgICAg
ICAiIiIgSW5zZXJ0cyBnZW5lcmljIG1ldGFkYXRhIChzdWNoIGFzIHZlcnNpb24gbnVtYmVyLCBj
dXJyZW50IHRpbWUgZXRjKQorICAgICAgICBpbnRvIHRoZSBKU09OLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgcmVzdWx0c19mb3JfYnVpbGRlcjogRGljdGlvbmFyeSBjb250YWluaW5nIHRo
ZSB0ZXN0IHJlc3VsdHMgZm9yCisgICAgICAgICAgICAgIGEgc2luZ2xlIGJ1aWxkZXIuCisgICAg
ICAgICIiIgorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNf
Zm9yX2J1aWxkZXIsCisgICAgICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIsIHNlbGYuQlVJTERf
TlVNQkVSUykKKworICAgICAgICBwYXRoX3RvX3dlYmtpdCA9IHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnV2ViQ29yZScpCisgICAgICAgIHNlbGYuX2luc2Vy
dF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgIHNl
bGYuX2dldF9zdm5fcmV2aXNpb24ocGF0aF90b193ZWJraXQpLAorICAgICAgICAgICAgc2VsZi5X
RUJLSVRfU1ZOKQorCisgICAgICAgIHBhdGhfdG9fY2hyb21lX2Jhc2UgPSBwYXRoX3V0aWxzLnBh
dGhfZnJvbV9iYXNlKCkKKyAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChy
ZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihw
YXRoX3RvX2Nocm9tZV9iYXNlKSwKKyAgICAgICAgICAgIHNlbGYuQ0hST01FX1NWTikKKworICAg
ICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIs
CisgICAgICAgICAgICBpbnQodGltZS50aW1lKCkpLAorICAgICAgICAgICAgc2VsZi5USU1FKQor
CisgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0cyk6CisgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0
byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
IHRlc3RzOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGVzdCByZXN1bHQgZW50cmllcy4KKyAgICAg
ICAgIiIiCisKKyAgICAgICAgcmVzdWx0ID0gSlNPTlJlc3VsdHNHZW5lcmF0b3IuUEFTU19SRVNV
TFQKKyAgICAgICAgdGltZSA9IDAKKworICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHNlbGYu
X2FsbF90ZXN0czoKKyAgICAgICAgICAgIHJlc3VsdCA9IEpTT05SZXN1bHRzR2VuZXJhdG9yLk5P
X0RBVEFfUkVTVUxUCisKKyAgICAgICAgaWYgdGVzdF9uYW1lIGluIHNlbGYuX2ZhaWx1cmVzOgor
ICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5GQUlMVVJFX1RPX0NIQVJbc2VsZi5fZmFpbHVyZXNb
dGVzdF9uYW1lXV0KKworICAgICAgICBpZiB0ZXN0X25hbWUgaW4gc2VsZi5fdGVzdF90aW1pbmdz
OgorICAgICAgICAgICAgIyBGbG9vciBmb3Igbm93IHRvIGdldCB0aW1lIGluIHNlY29uZHMuCisg
ICAgICAgICAgICB0aW1lID0gaW50KHNlbGYuX3Rlc3RfdGltaW5nc1t0ZXN0X25hbWVdKQorCisg
ICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVzdHM6CisgICAgICAgICAgICB0ZXN0c1t0ZXN0
X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oKQorCisgICAgICAg
IHRoaXNUZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9y
dW5fbGVuZ3RoX2VuY29kZWQocmVzdWx0LCB0aGlzVGVzdFtzZWxmLlJFU1VMVFNdKQorICAgICAg
ICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQodGltZSwgdGhpc1Rlc3Rbc2Vs
Zi5USU1FU10pCisgICAgICAgIHNlbGYuX25vcm1hbGl6ZV9yZXN1bHRzX2pzb24odGhpc1Rlc3Qs
IHRlc3RfbmFtZSwgdGVzdHMpCisKKyAgICBkZWYgX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3Zl
cnNpb24oc2VsZiwgcmVzdWx0c19qc29uKToKKyAgICAgICAgIiIiSWYgdGhlIEpTT04gZG9lcyBu
b3QgbWF0Y2ggdGhlIGN1cnJlbnQgdmVyc2lvbiwgY29udmVydHMgaXQgdG8gdGhlCisgICAgICAg
IGN1cnJlbnQgdmVyc2lvbiBhbmQgYWRkcyBpbiB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLgorICAg
ICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uIGFu
ZAorICAgICAgICAgICAgcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID09IHNlbGYuVkVS
U0lPTik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5W
RVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KKworICAgIGRlZiBfY3JlYXRlX3Jlc3VsdHNfYW5k
X3RpbWVzX2pzb24oc2VsZik6CisgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzID0ge30KKyAgICAg
ICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5SRVNVTFRTXSA9IFtdCisgICAgICAgIHJlc3VsdHNf
YW5kX3RpbWVzW3NlbGYuVElNRVNdID0gW10KKyAgICAgICAgcmV0dXJuIHJlc3VsdHNfYW5kX3Rp
bWVzCisKKyAgICBkZWYgX2NyZWF0ZV9yZXN1bHRzX2Zvcl9idWlsZGVyX2pzb24oc2VsZik6Cisg
ICAgICAgIHJlc3VsdHNfZm9yX2J1aWxkZXIgPSB7fQorICAgICAgICByZXN1bHRzX2Zvcl9idWls
ZGVyW3NlbGYuVEVTVFNdID0ge30KKyAgICAgICAgcmV0dXJuIHJlc3VsdHNfZm9yX2J1aWxkZXIK
KworICAgIGRlZiBfcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9idWlsZHMoc2VsZiwg
ZW5jb2RlZF9saXN0KToKKyAgICAgICAgIiIiUmVtb3ZlcyBpdGVtcyBmcm9tIHRoZSBydW4tbGVu
Z3RoIGVuY29kZWQgbGlzdCBhZnRlciB0aGUgZmluYWwKKyAgICAgICAgaXRlbSB0aGF0IGV4Y2Vl
ZHMgdGhlIG1heCBudW1iZXIgb2YgYnVpbGRzIHRvIHRyYWNrLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgZW5jb2RlZF9yZXN1bHRzOiBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cy4gQW4g
YXJyYXkgb2YgYXJyYXlzLCBlLmcuCisgICAgICAgICAgICAgIFtbMywnQSddLFsxLCdRJ11dIGVu
Y29kZXMgQUFBUS4KKyAgICAgICAgIiIiCisgICAgICAgIG51bV9idWlsZHMgPSAwCisgICAgICAg
IGluZGV4ID0gMAorICAgICAgICBmb3IgcmVzdWx0IGluIGVuY29kZWRfbGlzdDoKKyAgICAgICAg
ICAgIG51bV9idWlsZHMgPSBudW1fYnVpbGRzICsgcmVzdWx0WzBdCisgICAgICAgICAgICBpbmRl
eCA9IGluZGV4ICsgMQorICAgICAgICAgICAgaWYgbnVtX2J1aWxkcyA+IHNlbGYuTUFYX05VTUJF
Ul9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPRzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
ZF9saXN0WzppbmRleF0KKyAgICAgICAgcmV0dXJuIGVuY29kZWRfbGlzdAorCisgICAgZGVmIF9u
b3JtYWxpemVfcmVzdWx0c19qc29uKHNlbGYsIHRlc3QsIHRlc3RfbmFtZSwgdGVzdHMpOgorICAg
ICAgICAiIiIgUHJ1bmUgdGVzdHMgd2hlcmUgYWxsIHJ1bnMgcGFzcyBvciB0ZXN0cyB0aGF0IG5v
IGxvbmdlciBleGlzdCBhbmQKKyAgICAgICAgdHJ1bmNhdGUgYWxsIHJlc3VsdHMgdG8gbWF4TnVt
YmVyT2ZCdWlsZHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiBSZXN1bHRzQW5k
VGltZXMgb2JqZWN0IGZvciB0aGlzIHRlc3QuCisgICAgICAgICAgdGVzdF9uYW1lOiBOYW1lIG9m
IHRoZSB0ZXN0LgorICAgICAgICAgIHRlc3RzOiBUaGUgSlNPTiBvYmplY3Qgd2l0aCBhbGwgdGhl
IHRlc3QgcmVzdWx0cyBmb3IgdGhpcyBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgdGVz
dFtzZWxmLlJFU1VMVFNdID0gc2VsZi5fcmVtb3ZlX2l0ZW1zX292ZXJfbWF4X251bWJlcl9vZl9i
dWlsZHMoCisgICAgICAgICAgICB0ZXN0W3NlbGYuUkVTVUxUU10pCisgICAgICAgIHRlc3Rbc2Vs
Zi5USU1FU10gPSBzZWxmLl9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcygK
KyAgICAgICAgICAgIHRlc3Rbc2VsZi5USU1FU10pCisKKyAgICAgICAgaXNfYWxsX3Bhc3MgPSBz
ZWxmLl9pc19yZXN1bHRzX2FsbF9vZl90eXBlKHRlc3Rbc2VsZi5SRVNVTFRTXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEFTU19SRVNV
TFQpCisgICAgICAgIGlzX2FsbF9ub19kYXRhID0gc2VsZi5faXNfcmVzdWx0c19hbGxfb2ZfdHlw
ZSh0ZXN0W3NlbGYuUkVTVUxUU10sCisgICAgICAgICAgICBzZWxmLk5PX0RBVEFfUkVTVUxUKQor
ICAgICAgICBtYXhfdGltZSA9IG1heChbdGltZVsxXSBmb3IgdGltZSBpbiB0ZXN0W3NlbGYuVElN
RVNdXSkKKworICAgICAgICAjIFJlbW92ZSBhbGwgcGFzc2VzL25vLWRhdGEgZnJvbSB0aGUgcmVz
dWx0cyB0byByZWR1Y2Ugbm9pc2UgYW5kCisgICAgICAgICMgZmlsZXNpemUuIElmIGEgdGVzdCBw
YXNzZXMgZXZlcnkgcnVuLCBidXQgdGFrZXMgPiBNSU5fVElNRSB0byBydW4sCisgICAgICAgICMg
ZG9uJ3QgdGhyb3cgYXdheSB0aGUgZGF0YS4KKyAgICAgICAgaWYgaXNfYWxsX25vX2RhdGEgb3Ig
KGlzX2FsbF9wYXNzIGFuZCBtYXhfdGltZSA8PSBzZWxmLk1JTl9USU1FKToKKyAgICAgICAgICAg
IGRlbCB0ZXN0c1t0ZXN0X25hbWVdCisKKyAgICBkZWYgX2lzX3Jlc3VsdHNfYWxsX29mX3R5cGUo
c2VsZiwgcmVzdWx0cywgdHlwZSk6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciBhbGwgdGhl
IHJlc3VsdHMgYXJlIG9mIHRoZSBnaXZlbiB0eXBlCisgICAgICAgIChlLmcuIGFsbCBwYXNzZXMp
LiIiIgorICAgICAgICByZXR1cm4gbGVuKHJlc3VsdHMpID09IDEgYW5kIHJlc3VsdHNbMF1bMV0g
PT0gdHlwZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5j
b25mCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2xpZ2h0dHBkLmNvbmYJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRw
ZC5jb25mCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg5IEBACitzZXJ2ZXIudGFnICAgICAgICAg
ICAgICAgICAgPSAiTGlnaHRUUEQvMS40LjE5IChXaW4zMikiCitzZXJ2ZXIubW9kdWxlcyAgICAg
ICAgICAgICAgPSAoICJtb2RfYWNjZXNzbG9nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm1vZF9hbGlhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rf
Y2dpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9yZXdyaXRlIiApCisK
KyMgZGVmYXVsdCBkb2N1bWVudCByb290IHJlcXVpcmVkCitzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9
ICIuIgorCisjIGZpbGVzIHRvIGNoZWNrIGZvciBpZiAuLi4vIGlzIHJlcXVlc3RlZAoraW5kZXgt
ZmlsZS5uYW1lcyAgICAgICAgICAgID0gKCAiaW5kZXgucGhwIiwgImluZGV4LnBsIiwgImluZGV4
LmNnaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleC5odG1sIiwgImlu
ZGV4Lmh0bSIsICJkZWZhdWx0Lmh0bSIgKQorIyBtaW1ldHlwZSBtYXBwaW5nCittaW1ldHlwZS5h
c3NpZ24gICAgICAgICAgICAgPSAoCisgICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9n
aWYiLAorICAiLmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIuanBlZyIg
ICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5wbmciICAgICAgICAgID0+ICAgICAg
ImltYWdlL3BuZyIsCisgICIuc3ZnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9zdmcreG1sIiwK
KyAgIi5jc3MiICAgICAgICAgID0+ICAgICAgInRleHQvY3NzIiwKKyAgIi5odG1sIiAgICAgICAg
ID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0
bWwiLAorICAiLnhodG1sIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veGh0bWwreG1sIiwK
KyAgIi5qcyIgICAgICAgICAgID0+ICAgICAgInRleHQvamF2YXNjcmlwdCIsCisgICIubG9nIiAg
ICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jb25mIiAgICAgICAgID0+ICAgICAg
InRleHQvcGxhaW4iLAorICAiLnRleHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisg
ICIudHh0IiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5kdGQiICAgICAgICAg
ID0+ICAgICAgInRleHQveG1sIiwKKyAgIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1s
IiwKKyAgIi5tYW5pZmVzdCIgICAgID0+ICAgICAgInRleHQvY2FjaGUtbWFuaWZlc3QiLAorICkK
KworIyBVc2UgdGhlICJDb250ZW50LVR5cGUiIGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBvYnRhaW4g
bWltZSB0eXBlIGlmIHBvc3NpYmxlCittaW1ldHlwZS51c2UteGF0dHIgICAgICAgICAgPSAiZW5h
YmxlIgorCisjIworIyB3aGljaCBleHRlbnNpb25zIHNob3VsZCBub3QgYmUgaGFuZGxlIHZpYSBz
dGF0aWMtZmlsZSB0cmFuc2ZlcgorIworIyAucGhwLCAucGwsIC5mY2dpIGFyZSBtb3N0IG9mdGVu
IGhhbmRsZWQgYnkgbW9kX2Zhc3RjZ2kgb3IgbW9kX2NnaQorc3RhdGljLWZpbGUuZXhjbHVkZS1l
eHRlbnNpb25zID0gKCAiLnBocCIsICIucGwiLCAiLmNnaSIgKQorCitzZXJ2ZXIuYmluZCA9ICJs
b2NhbGhvc3QiCitzZXJ2ZXIucG9ydCA9IDgwMDEKKworIyMgdmlydHVhbCBkaXJlY3RvcnkgbGlz
dGluZ3MKK2Rpci1saXN0aW5nLmFjdGl2YXRlICAgICAgICA9ICJlbmFibGUiCisjZGlyLWxpc3Rp
bmcuZW5jb2RpbmcgICAgICAgPSAiaXNvLTg4NTktMiIKKyNkaXItbGlzdGluZy5leHRlcm5hbC1j
c3MgICA9ICJzdHlsZS9vbGRzdHlsZS5jc3MiCisKKyMjIGVuYWJsZSBkZWJ1Z2dpbmcKKyNkZWJ1
Zy5sb2ctcmVxdWVzdC1oZWFkZXIgICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlc3BvbnNlLWhl
YWRlciAgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIK
KyNkZWJ1Zy5sb2ctZmlsZS1ub3QtZm91bmQgICA9ICJlbmFibGUiCisKKyMjIyMgU1NMIGVuZ2lu
ZQorI3NzbC5lbmdpbmUgICAgICAgICAgICAgICAgID0gImVuYWJsZSIKKyNzc2wucGVtZmlsZSAg
ICAgICAgICAgICAgICA9ICJzZXJ2ZXIucGVtIgorCisjIFJld3JpdGUgcnVsZSBmb3IgdXRmLTgg
cGF0aCB0ZXN0IChMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS91dGY4LXBhdGguaHRtbCkKKyMg
U2VlIHRoZSBhcGFjaGUgcmV3cml0ZSBydWxlIGF0IExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJp
L2ludGVyY2VwdC8uaHRhY2Nlc3MKKyMgUmV3cml0ZSBydWxlIGZvciBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FwcGNhY2hlL2N5cmlsbGljLXVyaS5odG1sLgorIyBTZWUgdGhlIGFwYWNoZSByZXdy
aXRlIHJ1bGUgYXQKKyMgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMv
aW50ZXJjZXB0Ly5odGFjY2VzcwordXJsLnJld3JpdGUtb25jZSA9ICgKKyAgIl4vdXJpL2ludGVy
Y2VwdC8oLiopIiA9PiAiL3VyaS9yZXNvdXJjZXMvcHJpbnQtdXJpLnBocCIsCisgICJeL2FwcGNh
Y2hlL3Jlc291cmNlcy9pbnRlcmNlcHQvKC4qKSIgPT4gIi9hcHBjYWNoZS9yZXNvdXJjZXMvcHJp
bnQtdXJpLnBocCIKKykKKworIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3Jlc3BvbnNlLWVuY29kaW5nLmh0bWwgdXNlcyBhbiBodGFjY2VzcworIyB0byBvdmVycmlkZSBj
aGFyc2V0IGZvciByZXBseTIudHh0LCByZXBseTIueG1sLCBhbmQgcmVwbHk0LnR4dC4KKyRIVFRQ
WyJ1cmwiXSA9fiAiXi94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVwbHkyLih0eHR8eG1sKSIg
eworICBtaW1ldHlwZS5hc3NpZ24gPSAoCisgICAgIi50eHQiID0+ICJ0ZXh0L3BsYWluOyBjaGFy
c2V0PXdpbmRvd3MtMTI1MSIsCisgICAgIi54bWwiID0+ICJ0ZXh0L3htbDsgY2hhcnNldD13aW5k
b3dzLTEyNTEiCisgICkKK30KKyRIVFRQWyJ1cmwiXSA9fiAiXi94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvcmVwbHk0LnR4dCIgeworICBtaW1ldHlwZS5hc3NpZ24gPSAoICIudHh0IiA9PiAidGV4
dC9wbGFpbjsgY2hhcnNldD1rb2k4LXIiICkKK30KKworIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2FwcGNhY2hlL3dyb25nLWNvbnRlbnQtdHlwZS5odG1sIHVzZXMgYW4gaHRhY2Nlc3MKKyMgdG8g
b3ZlcnJpZGUgbWltZSB0eXBlIGZvciB3cm9uZy1jb250ZW50LXR5cGUubWFuaWZlc3QuCiskSFRU
UFsidXJsIl0gPX4gIl4vYXBwY2FjaGUvcmVzb3VyY2VzL3dyb25nLWNvbnRlbnQtdHlwZS5tYW5p
ZmVzdCIgeworICBtaW1ldHlwZS5hc3NpZ24gPSAoICIubWFuaWZlc3QiID0+ICJ0ZXh0L3BsYWlu
IiApCit9CisKKyMgQXV0b2dlbmVyYXRlZCB0ZXN0LXNwZWNpZmljIGNvbmZpZyBmb2xsb3dzLgpJ
bmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IgorUGFja2FnZSB0aGF0IGltcGxlbWVudHMgYSBzdHJlYW0gd3JhcHBlciB0aGF0IGhhcyAnbWV0
ZXJzJyBhcyB3ZWxsIGFzCityZWd1bGFyIG91dHB1dC4gQSAnbWV0ZXInIGlzIGEgc2luZ2xlIGxp
bmUgb2YgdGV4dCB0aGF0IGNhbiBiZSBlcmFzZWQKK2FuZCByZXdyaXR0ZW4gcmVwZWF0ZWRseSwg
d2l0aG91dCBwcm9kdWNpbmcgbXVsdGlwbGUgbGluZXMgb2Ygb3V0cHV0LiBJdAorY2FuIGJlIHVz
ZWQgdG8gcHJvZHVjZSBlZmZlY3RzIGxpa2UgcHJvZ3Jlc3MgYmFycy4KKyIiIgorCisKK2NsYXNz
IE1ldGVyZWRTdHJlYW06CisgICAgIiIiVGhpcyBjbGFzcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGEg
c3RyZWFtIHRoYXQgYWxsb3dzIHlvdSB0byBpbXBsZW1lbnQKKyAgICBtZXRlcnMuCisKKyAgICBJ
dCBjYW4gYmUgdXNlZCBsaWtlIGEgc3RyZWFtLCBidXQgY2FsbGluZyB1cGRhdGUoKSB3aWxsIHBy
aW50CisgICAgdGhlIHN0cmluZyBmb2xsb3dlZCBieSBvbmx5IGEgY2FycmlhZ2UgcmV0dXJuIChp
bnN0ZWFkIG9mIGEgY2FycmlhZ2UKKyAgICByZXR1cm4gYW5kIGEgbGluZSBmZWVkKS4gVGhpcyBj
YW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgcHJvZ3Jlc3MgYmFycyBhbmQKKyAgICBvdGhlciBzb3J0
cyBvZiBtZXRlcnMuIE5vdGUgdGhhdCBhbnl0aGluZyB3cml0dGVuIGJ5IHVwZGF0ZSgpIHdpbGwg
YmUKKyAgICBlcmFzZWQgYnkgYSBzdWJzZXF1ZW50IHVwZGF0ZSgpLCB3cml0ZSgpLCBvciBmbHVz
aCgpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcmJvc2UsIHN0cmVhbSk6CisgICAg
ICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgIHZlcmJvc2U6IHdoZXRoZXIgdXBkYXRl
IGlzIGEgbm8tb3AKKyAgICAgICAgICBzdHJlYW06IG91dHB1dCBzdHJlYW0gdG8gd3JpdGUgdG8K
KyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2RpcnR5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
dmVyYm9zZSA9IHZlcmJvc2UKKyAgICAgICAgc2VsZi5fc3RyZWFtID0gc3RyZWFtCisgICAgICAg
IHNlbGYuX2xhc3RfdXBkYXRlID0gIiIKKworICAgIGRlZiB3cml0ZShzZWxmLCB0eHQpOgorICAg
ICAgICAiIiJXcml0ZSB0ZXh0IGRpcmVjdGx5IHRvIHRoZSBzdHJlYW0sIG92ZXJ3cml0aW5nIGFu
ZCByZXNldHRpbmcgdGhlCisgICAgICAgIG1ldGVyLiIiIgorICAgICAgICBpZiBzZWxmLl9kaXJ0
eToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlKCIiKQorICAgICAgICAgICAgc2VsZi5fZGlydHkg
PSBGYWxzZQorICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUodHh0KQorCisgICAgZGVmIGZsdXNo
KHNlbGYpOgorICAgICAgICAiIiJGbHVzaCBhbnkgYnVmZmVyZWQgb3V0cHV0LiIiIgorICAgICAg
ICBzZWxmLl9zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBzdHIpOgorICAg
ICAgICAiIiJXcml0ZSBhbiB1cGRhdGUgdG8gdGhlIHN0cmVhbSB0aGF0IHdpbGwgZ2V0IG92ZXJ3
cml0dGVuIGJ5IHRoZSBuZXh0CisgICAgICAgIHVwZGF0ZSgpIG9yIGJ5IGEgd3JpdGUoKS4KKwor
ICAgICAgICBUaGlzIGlzIHVzZWQgZm9yIHByb2dyZXNzIHVwZGF0ZXMgdGhhdCBkb24ndCBuZWVk
IHRvIGJlIHByZXNlcnZlZCBpbgorICAgICAgICB0aGUgbG9nLiBOb3RlIHRoYXQgdmVyYm9zZSBk
aXNhYmxlcyB0aGlzIHJvdXRpbmU7IHdlIGhhdmUgdGhpcyBpbgorICAgICAgICBjYXNlIHdlIGFy
ZSBsb2dnaW5nIGxvdHMgb2Ygb3V0cHV0IGFuZCB0aGUgdXBkYXRlKClzIHdpbGwgZ2V0IGxvc3QK
KyAgICAgICAgb3Igd29uJ3Qgd29yayBwcm9wZXJseSAodHlwaWNhbGx5IGJlY2F1c2UgdmVyYm9z
ZSBzdHJlYW1zIGFyZQorICAgICAgICByZWRpcmVjdGVkIHRvIGZpbGVzLgorCisgICAgICAgIFRP
RE8oZHByYW5rZSk6IGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gZGV0ZWN0IGlmIHdl
J3JlIHdyaXRpbmcKKyAgICAgICAgdG8gYSBzdHJlYW0gdGhhdCBoYW5kbGVzIENScyBjb3JyZWN0
bHkgKGUuZy4sIHRlcm1pbmFscykuIFRoYXQgbWlnaHQKKyAgICAgICAgYmUgYSBjbGVhbmVyIHdh
eSBvZiBoYW5kbGluZyB0aGlzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdmVyYm9z
ZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUHJpbnQgdGhlIG5lY2Vzc2FyeSBu
dW1iZXIgb2YgYmFja3NwYWNlcyB0byBlcmFzZSB0aGUgcHJldmlvdXMKKyAgICAgICAgIyBtZXNz
YWdlLgorICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoIlxiIiAqIGxlbihzZWxmLl9sYXN0X3Vw
ZGF0ZSkpCisgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShzdHIpCisgICAgICAgIG51bV9yZW1h
aW5pbmcgPSBsZW4oc2VsZi5fbGFzdF91cGRhdGUpIC0gbGVuKHN0cikKKyAgICAgICAgaWYgbnVt
X3JlbWFpbmluZyA+IDA6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoIiAiICogbnVt
X3JlbWFpbmluZyArICJcYiIgKiBudW1fcmVtYWluaW5nKQorICAgICAgICBzZWxmLl9sYXN0X3Vw
ZGF0ZSA9IHN0cgorICAgICAgICBzZWxmLl9kaXJ0eSA9IFRydWUKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21ldGVyZWRfc3RyZWFtLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGF0aF91dGlscy5weQko
cmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzk1
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGhp
cyBwYWNrYWdlIGNvbnRhaW5zIHV0aWxpdHkgbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIHBhdGhz
IGFuZAorZmlsZW5hbWVzIGZvciB0ZXN0IHJlc3VsdHMgYW5kIGJhc2VsaW5lcy4gSXQgYWxzbyBj
b250YWlucyB3cmFwcGVycworb2YgYSBmZXcgcm91dGluZXMgaW4gcGxhdGZvcm1fdXRpbHMucHkg
c28gdGhhdCBwbGF0Zm9ybV91dGlscy5weSBjYW4KK2JlIGNvbnNpZGVyZWQgYSAncHJvdGVjdGVk
JyBwYWNrYWdlIC0gaS5lLiwgdGhpcyBmaWxlIHNob3VsZCBiZQordGhlIG9ubHkgZmlsZSB0aGF0
IGV2ZXIgaW5jbHVkZXMgcGxhdGZvcm1fdXRpbHMuIFRoaXMgbGVhZHMgdG8KK3VzIGluY2x1ZGlu
ZyBhIGZldyB0aGluZ3MgdGhhdCBkb24ndCByZWFsbHkgaGF2ZSBhbnl0aGluZyB0byBkbworIHdp
dGggcGF0aHMsIHVuZm9ydHVuYXRlbHkuIiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitp
bXBvcnQgc3RhdAoraW1wb3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm1fdXRpbHMKK2ltcG9ydCBw
bGF0Zm9ybV91dGlsc193aW4KK2ltcG9ydCBwbGF0Zm9ybV91dGlsc19tYWMKK2ltcG9ydCBwbGF0
Zm9ybV91dGlsc19saW51eAorCisjIENhY2hlIHNvbWUgdmFsdWVzIHNvIHdlIGRvbid0IGhhdmUg
dG8gcmVjYWxjdWxhdGUgdGhlbS4gX2Jhc2VkaXIgaXMKKyMgdXNlZCBieSBQYXRoRnJvbUJhc2Uo
KSBhbmQgY2FjaGVzIHRoZSBmdWxsIChuYXRpdmUpIHBhdGggdG8gdGhlIHRvcAorIyBvZiB0aGUg
c291cmNlIHRyZWUgKC9zcmMpLiBfYmFzZWxpbmVfc2VhcmNoX3BhdGggaXMgdXNlZCBieQorIyBF
eHBlY3RlZEJhc2VsaW5lcygpIGFuZCBjYWNoZXMgdGhlIGxpc3Qgb2YgbmF0aXZlIHBhdGhzIHRv
IHNlYXJjaAorIyBmb3IgYmFzZWxpbmUgcmVzdWx0cy4KK19iYXNlZGlyID0gTm9uZQorX2Jhc2Vs
aW5lX3NlYXJjaF9wYXRoID0gTm9uZQorCisKK2NsYXNzIFBhdGhOb3RGb3VuZChFeGNlcHRpb24p
OgorICAgIHBhc3MKKworCitkZWYgbGF5b3V0X3Rlc3RzX2RpcigpOgorICAgICIiIlJldHVybnMg
dGhlIGZ1bGx5LXF1YWxpZmllZCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUg
aW5wdXQKKyAgICBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGxheW91dCB0ZXN0LiIiIgorICAgIHJl
dHVybiBwYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3Rz
JykKKworCitkZWYgY2hyb21pdW1fYmFzZWxpbmVfcGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAi
IiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGV4cGVj
dGVkCisgICAgYmFzZWxpbmUgcmVzdWx0cyBmcm9tIGNocm9taXVtIHBvcnRzLiBJZiB8cGxhdGZv
cm18IGlzIE5vbmUsIHRoZQorICAgIGN1cnJlbnRseSBleGVjdXRpbmcgcGxhdGZvcm0gaXMgdXNl
ZC4KKworICAgIE5vdGU6IGFsdGhvdWdoIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGluZGl2aWR1YWwg
cGxhdGZvcm1fdXRpbHNfKiBmaWxlcyBpcworICAgIHVzdWFsbHkgZGlzY291cmFnZWQsIHdlIGFs
bG93IGl0IGhlcmUgc28gdGhhdCB0aGUgcmViYXNlbGluaW5nIHRvb2wgY2FuCisgICAgcHVsbCBi
YXNlbGluZXMgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBob3N0IHBsYXRmb3JtLiIiIgor
CisgICAgIyBOb3JtYWxpemUgdGhlIHBsYXRmb3JtIHN0cmluZy4KKyAgICBwbGF0Zm9ybSA9IHBs
YXRmb3JtX25hbWUocGxhdGZvcm0pCisgICAgaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21p
dW0tbWFjJyk6CisgICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc19tYWMuYmFzZWxpbmVfcGF0
aChwbGF0Zm9ybSkKKyAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdpbicp
OgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfd2luLmJhc2VsaW5lX3BhdGgocGxhdGZv
cm0pCisgICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS1saW51eCcpOgorICAg
ICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbGludXguYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkK
KworICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5iYXNlbGluZV9wYXRoKCkKKworCitkZWYgd2Vi
a2l0X2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pOgorICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0
aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZXhwZWN0ZWQKKyAgICBiYXNlbGluZSByZXN1
bHRzIGZyb20gV2ViS2l0IHBvcnRzLiIiIgorICAgIHJldHVybiBwYXRoX2Zyb21fYmFzZSgndGhp
cmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3RzJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0pCisKKworZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRo
KHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMg
dG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0cyBmb3IgYQorICAgIGdpdmVuIHBsYXRmb3Jt
LCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBv
ZgorICAgIHRoZSBzb3VyY2UgdHJlZS4gSWYgcGFyYW1ldGVyIHBsYXRmb3JtIGlzIE5vbmUsIHJl
dHVybnMgdGhlIGxpc3QgZm9yIHRoZQorICAgIGN1cnJlbnQgcGxhdGZvcm0gdGhhdCB0aGUgc2Ny
aXB0IGlzIHJ1bm5pbmcgb24uCisKKyAgICBOb3RlOiBhbHRob3VnaCBkaXJlY3RseSByZWZlcmVu
Y2luZyBpbmRpdmlkdWFsIHBsYXRmb3JtX3V0aWxzXyogZmlsZXMgaXMKKyAgICB1c3VhbGx5IGRp
c2NvdXJhZ2VkLCB3ZSBhbGxvdyBpdCBoZXJlIHNvIHRoYXQgdGhlIHJlYmFzZWxpbmluZyB0b29s
IGNhbgorICAgIHB1bGwgYmFzZWxpbmVzIGZvciBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0aGUgaG9z
dCBwbGF0Zm9ybS4iIiIKKworICAgICMgTm9ybWFsaXplIHRoZSBwbGF0Zm9ybSBuYW1lLgorICAg
IHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZShwbGF0Zm9ybSkKKyAgICBpZiBwbGF0Zm9ybS5zdGFy
dHN3aXRoKCdjaHJvbWl1bS1tYWMnKToKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX21h
Yy5iYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKKyAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0
c3dpdGgoJ2Nocm9taXVtLXdpbicpOgorICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfd2lu
LmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQorICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRz
d2l0aCgnY2hyb21pdW0tbGludXgnKToKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX2xp
bnV4LmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQorICAgIHJldHVybiBwbGF0Zm9ybV91
dGlscy5iYXNlbGluZV9zZWFyY2hfcGF0aCgpCisKKworZGVmIGV4cGVjdGVkX2Jhc2VsaW5lcyhm
aWxlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybT1Ob25lLCBhbGxfYmFzZWxpbmVzPUZhbHNlKToKKyAg
ICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgZmluZHMgd2hlcmUgdGhlIGJhc2VsaW5lIHJlc3VsdHMg
YXJlIGxvY2F0ZWQuCisKKyAgICBBcmdzOgorICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxl
bmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBl
Y3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90OyBlLmcuICcudHh0JworICAgICAgICAgICBvciAn
LnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJp
bmcuCisgICAgICAgcGxhdGZvcm06IGxheW91dCB0ZXN0IHBsYXRmb3JtOiAnd2luJywgJ2xpbnV4
JyBvciAnbWFjJy4gRGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGxh
dGZvcm0uCisgICAgICAgYWxsX2Jhc2VsaW5lczogSWYgVHJ1ZSwgcmV0dXJuIGFuIG9yZGVyZWQg
bGlzdCBvZiBhbGwgYmFzZWxpbmUgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhl
IGdpdmVuIHBsYXRmb3JtLiBJZiBGYWxzZSwgcmV0dXJuIG9ubHkgdGhlIGZpcnN0CisgICAgICAg
ICAgICAgICAgICAgICAgb25lLgorICAgIFJldHVybnMKKyAgICAgICBhIGxpc3Qgb2YgKCBwbGF0
Zm9ybV9kaXIsIHJlc3VsdHNfZmlsZW5hbWUgKSwgd2hlcmUKKyAgICAgICAgIHBsYXRmb3JtX2Rp
ciAtIGFicyBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIHJlc3VsdHMgdHJlZSAob3IgdGVzdCB0cmVl
KQorICAgICAgICAgcmVzdWx0c19maWxlbmFtZSAtIHJlbGF0aXZlIHBhdGggZnJvbSB0b3Agb2Yg
dHJlZSB0byB0aGUgcmVzdWx0cyBmaWxlCisgICAgICAgICAgIChvcy5wYXRoLmpvaW4gb2YgdGhl
IHR3byBnaXZlcyB5b3UgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSwKKyAgICAgICAgICAgIHVu
bGVzcyBOb25lIHdhcyByZXR1cm5lZC4pCisgICAgICBSZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW4g
dGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0KKyAgICAgIChl
LmcuLCAiXFwiIGZvciBwYXRoIHNlcGFyYXRvcnMgb24gV2luZG93cykuIElmIHRoZSByZXN1bHRz
IGZpbGUgaXMgbm90CisgICAgICBmb3VuZCwgdGhlbiBOb25lIHdpbGwgYmUgcmV0dXJuZWQgZm9y
IHRoZSBkaXJlY3RvcnksIGJ1dCB0aGUgZXhwZWN0ZWQKKyAgICAgIHJlbGF0aXZlIHBhdGhuYW1l
IHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCisgICAgIiIiCisgICAgZ2xvYmFsIF9iYXNlbGluZV9z
ZWFyY2hfcGF0aAorICAgIGdsb2JhbCBfc2VhcmNoX3BhdGhfcGxhdGZvcm0KKyAgICB0ZXN0bmFt
ZSA9IG9zLnBhdGguc3BsaXRleHQocmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpWzBd
CisKKyAgICBiYXNlbGluZV9maWxlbmFtZSA9IHRlc3RuYW1lICsgJy1leHBlY3RlZCcgKyBzdWZm
aXgKKworICAgIGlmIChfYmFzZWxpbmVfc2VhcmNoX3BhdGggaXMgTm9uZSkgb3IgKF9zZWFyY2hf
cGF0aF9wbGF0Zm9ybSAhPSBwbGF0Zm9ybSk6CisgICAgICAgIF9iYXNlbGluZV9zZWFyY2hfcGF0
aCA9IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQorICAgICAgICBfc2VhcmNoX3BhdGhf
cGxhdGZvcm0gPSBwbGF0Zm9ybQorCisgICAgYmFzZWxpbmVzID0gW10KKyAgICBmb3IgcGxhdGZv
cm1fZGlyIGluIF9iYXNlbGluZV9zZWFyY2hfcGF0aDoKKyAgICAgICAgaWYgb3MucGF0aC5leGlz
dHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKKyAgICAg
ICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUp
KQorCisgICAgICAgIGlmIG5vdCBhbGxfYmFzZWxpbmVzIGFuZCBiYXNlbGluZXM6CisgICAgICAg
ICAgICByZXR1cm4gYmFzZWxpbmVzCisKKyAgICAjIElmIGl0IHdhc24ndCBmb3VuZCBpbiBhIHBs
YXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRoZSBleHBlY3RlZCByZXN1bHQKKyAgICAjIGluIHRo
ZSB0ZXN0IGRpcmVjdG9yeSwgZXZlbiBpZiBubyBzdWNoIGZpbGUgYWN0dWFsbHkgZXhpc3RzLgor
ICAgIHBsYXRmb3JtX2RpciA9IGxheW91dF90ZXN0c19kaXIoKQorICAgIGlmIG9zLnBhdGguZXhp
c3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6CisgICAg
ICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQor
CisgICAgaWYgYmFzZWxpbmVzOgorICAgICAgICByZXR1cm4gYmFzZWxpbmVzCisKKyAgICByZXR1
cm4gWyhOb25lLCBiYXNlbGluZV9maWxlbmFtZSldCisKKworZGVmIGV4cGVjdGVkX2ZpbGVuYW1l
KGZpbGVuYW1lLCBzdWZmaXgpOgorICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCByZXR1cm5zIGFu
IGFic29sdXRlIHBhdGggdG8gaXRzIGV4cGVjdGVkIHJlc3VsdHMuCisKKyAgICBJZiBubyBleHBl
Y3RlZCByZXN1bHRzIGFyZSBmb3VuZCBpbiBhbnkgb2YgdGhlIHNlYXJjaGVkIGRpcmVjdG9yaWVz
LCB0aGUKKyAgICBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHRlc3QgaXRzZWxmIGlzIGxvY2F0ZWQg
d2lsbCBiZSByZXR1cm5lZC4gVGhlIHJldHVybgorICAgIHZhbHVlIGlzIGluIHRoZSBmb3JtYXQg
YXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybSAoZS5nLiwgIlxcIiBmb3IKKyAgICBwYXRoIHNl
cGFyYXRvcnMgb24gd2luZG93cykuCisKKyAgICBBcmdzOgorICAgICAgIGZpbGVuYW1lOiBhYnNv
bHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9m
IHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90OyBlLmcuICcudHh0JworICAgICAg
ICAgICBvciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBl
bXB0eSBzdHJpbmcuCisgICAgICAgcGxhdGZvcm06IHRoZSBtb3N0LXNwZWNpZmljIGRpcmVjdG9y
eSBuYW1lIHRvIHVzZSB0byBidWlsZCB0aGUKKyAgICAgICAgICAgc2VhcmNoIGxpc3Qgb2YgZGly
ZWN0b3JpZXMsIGUuZy4sICdjaHJvbWl1bS13aW4nLCBvcgorICAgICAgICAgICAnY2hyb21pdW0t
bWFjLWxlb3BhcmQnICh3ZSBmb2xsb3cgdGhlIFdlYktpdCBmb3JtYXQpCisgICAgIiIiCisgICAg
cGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSA9IGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxl
bmFtZSwgc3VmZml4KVswXQorICAgIGlmIHBsYXRmb3JtX2RpcjoKKyAgICAgICAgcmV0dXJuIG9z
LnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgIHJldHVybiBv
cy5wYXRoLmpvaW4obGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNlbGluZV9maWxlbmFtZSkKKworCitk
ZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSk6CisgICAgIiIiUHJvdmlkZSB0aGUg
ZmlsZW5hbWUgb2YgdGhlIHRlc3QgcmVsYXRpdmUgdG8gdGhlIGxheW91dCB0ZXN0cworICAgIGRp
cmVjdG9yeSBhcyBhIHVuaXggc3R5bGUgcGF0aCAoYS9iL2MpLiIiIgorICAgIHJldHVybiBfd2lu
X3BhdGhfdG9fdW5peChmaWxlbmFtZVtsZW4obGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XSkKKwor
CitkZWYgX3dpbl9wYXRoX3RvX3VuaXgocGF0aCk6CisgICAgIiIiQ29udmVydCBhIHdpbmRvd3Mg
cGF0aCB0byB1c2UgdW5peC1zdHlsZSBwYXRoIHNlcGFyYXRvcnMgKGEvYi9jKS4iIiIKKyAgICBy
ZXR1cm4gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKKworIworIyBSb3V0aW5lcyB0aGF0IGFyZSBh
cmd1YWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBidXQgaGF2ZSBiZWVuIG1hZGUKKyMgZ2VuZXJpYyBm
b3Igbm93ICh0aGV5IHVzZWQgdG8gYmUgaW4gcGxhdGZvcm1fdXRpbHNfKikKKyMKKworCitkZWYg
ZmlsZW5hbWVfdG9fdXJpKGZ1bGxfcGF0aCk6CisgICAgIiIiQ29udmVydCBhIHRlc3QgZmlsZSB0
byBhIFVSSS4iIiIKKyAgICBMQVlPVVRURVNUX0hUVFBfRElSID0gImh0dHAvdGVzdHMvIgorICAg
IExBWU9VVFRFU1RfV0VCU09DS0VUX0RJUiA9ICJ3ZWJzb2NrZXQvdGVzdHMvIgorCisgICAgcmVs
YXRpdmVfcGF0aCA9IF93aW5fcGF0aF90b191bml4KHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZnVs
bF9wYXRoKSkKKyAgICBwb3J0ID0gTm9uZQorICAgIHVzZV9zc2wgPSBGYWxzZQorCisgICAgaWYg
cmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1RfSFRUUF9ESVIpOgorICAgICAgICAj
IGh0dHAvdGVzdHMvIHJ1biBvZmYgcG9ydCA4MDAwIGFuZCBzc2wvIG9mZiA4NDQzCisgICAgICAg
IHJlbGF0aXZlX3BhdGggPSByZWxhdGl2ZV9wYXRoW2xlbihMQVlPVVRURVNUX0hUVFBfRElSKTpd
CisgICAgICAgIHBvcnQgPSA4MDAwCisgICAgZWxpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgo
TEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSKToKKyAgICAgICAgIyB3ZWJzb2NrZXQvdGVzdHMvIHJ1
biBvZmYgcG9ydCA4ODgwIGFuZCA5MzIzCisgICAgICAgICMgTm90ZTogdGhlIHJvb3QgaXMgLywg
bm90IHdlYnNvY2tldC90ZXN0cy8KKyAgICAgICAgcG9ydCA9IDg4ODAKKworICAgICMgTWFrZSBo
dHRwL3Rlc3RzL2xvY2FsIHJ1biBhcyBsb2NhbCBmaWxlcy4gVGhpcyBpcyB0byBtaW1pYyB0aGUK
KyAgICAjIGxvZ2ljIGluIHJ1bi13ZWJraXQtdGVzdHMuCisgICAgIyBUT0RPKGppYW5saSk6IENv
bnNpZGVyIGV4dGVuZGluZyB0aGlzIHRvICJtZWRpYS8iLgorICAgIGlmIHBvcnQgYW5kIG5vdCBy
ZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoImxvY2FsLyIpOgorICAgICAgICBpZiByZWxhdGl2ZV9w
YXRoLnN0YXJ0c3dpdGgoInNzbC8iKToKKyAgICAgICAgICAgIHBvcnQgKz0gNDQzCisgICAgICAg
ICAgICBwcm90b2NvbCA9ICJodHRwcyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb3Rv
Y29sID0gImh0dHAiCisgICAgICAgIHJldHVybiAiJXM6Ly8xMjcuMC4wLjE6JXUvJXMiICUgKHBy
b3RvY29sLCBwb3J0LCByZWxhdGl2ZV9wYXRoKQorCisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgn
Y3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgIHJldHVybiAiZmlsZTovLy8iICsgZ2V0X2Fic29s
dXRlX3BhdGgoZnVsbF9wYXRoKQorICAgIHJldHVybiAiZmlsZTovLyIgKyBnZXRfYWJzb2x1dGVf
cGF0aChmdWxsX3BhdGgpCisKKworZGVmIGdldF9hYnNvbHV0ZV9wYXRoKHBhdGgpOgorICAgICIi
IlJldHVybnMgYW4gYWJzb2x1dGUgVU5JWCBwYXRoLiIiIgorICAgIHJldHVybiBfd2luX3BhdGhf
dG9fdW5peChvcy5wYXRoLmFic3BhdGgocGF0aCkpCisKKworZGVmIG1heWJlX21ha2VfZGlyZWN0
b3J5KCpwYXRoKToKKyAgICAiIiJDcmVhdGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIGl0
IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJz
KG9zLnBhdGguam9pbigqcGF0aCkpCisgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgIGlm
IGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgcGF0
aF9mcm9tX2Jhc2UoKmNvbXBzKToKKyAgICAiIiJSZXR1cm5zIGFuIGFic29sdXRlIGZpbGVuYW1l
IGZyb20gYSBzZXQgb2YgY29tcG9uZW50cyBzcGVjaWZpZWQKKyAgICByZWxhdGl2ZSB0byB0aGUg
dG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4gSWYgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QsCisgICAg
dGhlIGV4Y2VwdGlvbiBQYXRoTm90Rm91bmQgaXMgcmFpc2VkLiIiIgorICAgIGdsb2JhbCBfYmFz
ZWRpcgorICAgIGlmIF9iYXNlZGlyID09IE5vbmU6CisgICAgICAgICMgV2UgY29tcHV0ZSB0aGUg
dG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBieSBmaW5kaW5nIHRoZSBhYnNvbHV0ZQorICAgICAgICAj
IHBhdGggb2YgdGhpcyBzb3VyY2UgZmlsZSwgYW5kIHRoZW4gY2xpbWJpbmcgdXAgdGhyZWUgZGly
ZWN0b3JpZXMKKyAgICAgICAgIyBhcyBnaXZlbiBpbiBzdWJwYXRoLiBJZiB3ZSBtb3ZlIHRoaXMg
ZmlsZSwgc3VicGF0aCBuZWVkcyB0byBiZQorICAgICAgICAjIHVwZGF0ZWQuCisgICAgICAgIHBh
dGggPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisgICAgICAgIHN1YnBhdGggPSBvcy5wYXRo
LmpvaW4oJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcpCisgICAgICAgIF9iYXNlZGlyID0gcGF0aFs6
cGF0aC5pbmRleChzdWJwYXRoKV0KKyAgICBwYXRoID0gb3MucGF0aC5qb2luKF9iYXNlZGlyLCAq
Y29tcHMpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICByYWlzZSBQ
YXRoTm90Rm91bmQoJ2NvdWxkIG5vdCBmaW5kICVzJyAlIChwYXRoKSkKKyAgICByZXR1cm4gcGF0
aAorCisKK2RlZiByZW1vdmVfZGlyZWN0b3J5KCpwYXRoKToKKyAgICAiIiJSZWN1cnNpdmVseSBy
ZW1vdmVzIGEgZGlyZWN0b3J5LCBldmVuIGlmIGl0J3MgbWFya2VkIHJlYWQtb25seS4KKworICAg
IFJlbW92ZSB0aGUgZGlyZWN0b3J5IGxvY2F0ZWQgYXQgKnBhdGgsIGlmIGl0IGV4aXN0cy4KKwor
ICAgIHNodXRpbC5ybXRyZWUoKSBkb2Vzbid0IHdvcmsgb24gV2luZG93cyBpZiBhbnkgb2YgdGhl
IGZpbGVzIG9yIGRpcmVjdG9yaWVzCisgICAgYXJlIHJlYWQtb25seSwgd2hpY2ggc3ZuIHJlcG9z
aXRvcmllcyBhbmQgc29tZSAuc3ZuIGZpbGVzIGFyZS4gIFdlIG5lZWQgdG8KKyAgICBiZSBhYmxl
IHRvIGZvcmNlIHRoZSBmaWxlcyB0byBiZSB3cml0YWJsZSAoaS5lLiwgZGVsZXRhYmxlKSBhcyB3
ZSB0cmF2ZXJzZQorICAgIHRoZSB0cmVlLgorCisgICAgRXZlbiB3aXRoIGFsbCB0aGlzLCBXaW5k
b3dzIHN0aWxsIHNvbWV0aW1lcyBmYWlscyB0byBkZWxldGUgYSBmaWxlLCBjaXRpbmcKKyAgICBh
IHBlcm1pc3Npb24gZXJyb3IgKG1heWJlIHNvbWV0aGluZyB0byBkbyB3aXRoIGFudGl2aXJ1cyBz
Y2FucyBvciBkaXNrCisgICAgaW5kZXhpbmcpLiAgVGhlIGJlc3Qgc3VnZ2VzdGlvbiBhbnkgb2Yg
dGhlIHVzZXIgZm9ydW1zIGhhZCB3YXMgdG8gd2FpdCBhCisgICAgYml0IGFuZCB0cnkgYWdhaW4s
IHNvIHdlIGRvIHRoYXQgdG9vLiAgSXQncyBoYW5kLXdhdmluZywgYnV0IHNvbWV0aW1lcyBpdAor
ICAgIHdvcmtzLiA6LworICAgICIiIgorICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbigqcGF0
aCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAgcmV0dXJu
CisKKyAgICB3aW4zMiA9IEZhbHNlCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Cisg
ICAgICAgIHdpbjMyID0gVHJ1ZQorICAgICAgICAjIFNvbWUgcGVvcGxlIGRvbid0IGhhdmUgdGhl
IEFQSXMgaW5zdGFsbGVkLiBJbiB0aGF0IGNhc2Ugd2UnbGwgZG8KKyAgICAgICAgIyB3aXRob3V0
LgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aW4zMmFwaSA9IF9faW1wb3J0X18oJ3dpbjMy
YXBpJykKKyAgICAgICAgICAgIHdpbjMyY29uID0gX19pbXBvcnRfXygnd2luMzJjb24nKQorICAg
ICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICB3aW4zMiA9IEZhbHNlCisKKyAg
ICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywgcGF0aCk6CisgICAgICAgICAgICBv
cy5jaG1vZChwYXRoLCBzdGF0LlNfSVdSSVRFKQorICAgICAgICAgICAgaWYgd2luMzI6CisgICAg
ICAgICAgICAgICAgd2luMzJhcGkuU2V0RmlsZUF0dHJpYnV0ZXMocGF0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW4zMmNvbi5GSUxFX0FUVFJJQlVURV9O
T1JNQUwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhw
YXRoKQorICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIGU6CisgICAgICAgICAg
ICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlCisgICAgICAgICAgICAgICAgcHJpbnQgJ0ZhaWxlZCB0byBkZWxldGUgJXM6IHRyeWluZyBh
Z2FpbicgJSByZXByKHBhdGgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQorICAgIGVsc2U6CisKKyAgICAgICAgZGVm
IHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywgcGF0aCk6CisgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzbGluayhwYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3MucmVtb3ZlKHBhdGgpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKwor
ICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGZpbGVfcGF0aCwgdG9wZG93bj1G
YWxzZSk6CisgICAgICAgICMgRm9yIFBPU0lYOiAgbWFraW5nIHRoZSBkaXJlY3Rvcnkgd3JpdGFi
bGUgZ3VhcmFudGVlcyByZW1vdmFiaWxpdHkuCisgICAgICAgICMgV2luZG93cyB3aWxsIGlnbm9y
ZSB0aGUgbm9uLXJlYWQtb25seSBiaXRzIGluIHRoZSBjaG1vZCB2YWx1ZS4KKyAgICAgICAgb3Mu
Y2htb2Qocm9vdCwgMDc3MCkKKyAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAg
ICByZW1vdmVfd2l0aF9yZXRyeShvcy5yZW1vdmUsIG9zLnBhdGguam9pbihyb290LCBuYW1lKSkK
KyAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgIHJlbW92ZV93aXRoX3JldHJ5
KG9zLnJtZGlyLCBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisKKyAgICByZW1vdmVfd2l0aF9y
ZXRyeShvcy5ybWRpciwgZmlsZV9wYXRoKQorCisjCisjIFdyYXBwZXJzIGFyb3VuZCBwbGF0Zm9y
bV91dGlscworIworCisKK2RlZiBwbGF0Zm9ybV9uYW1lKHBsYXRmb3JtPU5vbmUpOgorICAgICIi
IlJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNocm9taXVtIHBsYXRmb3JtIG5hbWUgZm9yIHxwbGF0
Zm9ybXwuIElmCisgICAgICAgfHBsYXRmb3JtfCBpcyBOb25lLCByZXR1cm5zIHRoZSBuYW1lIG9m
IHRoZSBjaHJvbWl1bSBwbGF0Zm9ybSBvbiB0aGUKKyAgICAgICBjdXJyZW50bHkgcnVubmluZyBz
eXN0ZW0uIElmIHxwbGF0Zm9ybXwgaXMgb2YgdGhlIGZvcm0gJ2Nocm9taXVtLSonLAorICAgICAg
IGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZCwgb3RoZXJ3aXNlICdjaHJvbWl1bS0nIGlzIHByZXBl
bmRlZC4iIiIKKyAgICBpZiBwbGF0Zm9ybSA9PSBOb25lOgorICAgICAgICByZXR1cm4gcGxhdGZv
cm1fdXRpbHMucGxhdGZvcm1fbmFtZSgpCisgICAgaWYgbm90IHBsYXRmb3JtLnN0YXJ0c3dpdGgo
J2Nocm9taXVtLScpOgorICAgICAgICBwbGF0Zm9ybSA9ICJjaHJvbWl1bS0iICsgcGxhdGZvcm0K
KyAgICByZXR1cm4gcGxhdGZvcm0KKworCitkZWYgcGxhdGZvcm1fdmVyc2lvbigpOgorICAgIHJl
dHVybiBwbGF0Zm9ybV91dGlscy5wbGF0Zm9ybV92ZXJzaW9uKCkKKworCitkZWYgbGlnaHR0cGRf
ZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmxpZ2h0dHBkX2V4
ZWN1dGFibGVfcGF0aCgpCisKKworZGVmIGxpZ2h0dHBkX21vZHVsZV9wYXRoKCk6CisgICAgcmV0
dXJuIHBsYXRmb3JtX3V0aWxzLmxpZ2h0dHBkX21vZHVsZV9wYXRoKCkKKworCitkZWYgbGlnaHR0
cGRfcGhwX3BhdGgoKToKKyAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMubGlnaHR0cGRfcGhwX3Bh
dGgoKQorCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLndk
aWZmX3BhdGgoKQorCisKK2RlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToKKyAgICByZXR1cm4g
cGxhdGZvcm1fdXRpbHMudGVzdF9zaGVsbF9wYXRoKHRhcmdldCkKKworCitkZWYgaW1hZ2VfZGlm
Zl9wYXRoKHRhcmdldCk6CisgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmltYWdlX2RpZmZfcGF0
aCh0YXJnZXQpCisKKworZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6CisgICAg
cmV0dXJuIHBsYXRmb3JtX3V0aWxzLmxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCkKKwor
CitkZWYgZnV6enlfbWF0Y2hfcGF0aCgpOgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5mdXp6
eV9tYXRjaF9wYXRoKCkKKworCitkZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQp
OgorICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVy
X3BpZCkKKworCitkZWYga2lsbF9hbGxfdGVzdF9zaGVsbHMoKToKKyAgICBwbGF0Zm9ybV91dGls
cy5raWxsX2FsbF90ZXN0X3NoZWxscygpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wYXRoX3V0aWxz
LnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRm
b3JtX3V0aWxzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzLnB5CShyZXZpc2lvbiAw
KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvcGxhdGZvcm1fdXRpbHMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9t
aXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJQbGF0Zm9ybS1z
cGVjaWZpYyB1dGlsaXRpZXMgYW5kIHBzZXVkby1jb25zdGFudHMKKworQW55IGZ1bmN0aW9ucyB3
aG9zZSBpbXBsZW1lbnRhdGlvbnMgb3IgdmFsdWVzIGRpZmZlciBmcm9tIG9uZSBwbGF0Zm9ybSB0
bworYW5vdGhlciBzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGVpciByZXNwZWN0aXZlIHBsYXRmb3Jt
X3V0aWxzXzxwbGF0Zm9ybT4ucHkKK21vZHVsZXMuIFRoZSBhcHByb3ByaWF0ZSBvbmUgb2YgdGhv
c2Ugd2lsbCBiZSBpbXBvcnRlZCBpbnRvIHRoaXMgbW9kdWxlIHRvCitwcm92aWRlIGNhbGxlcnMg
d2l0aCBhIGNvbW1vbiwgcGxhdGZvcm0taW5kZXBlbmRlbnQgaW50ZXJmYWNlLgorCitUaGlzIGZp
bGUgc2hvdWxkIG9ubHkgZXZlciBiZSBpbXBvcnRlZCBieSBsYXlvdXRfcGFja2FnZS5wYXRoX3V0
aWxzLgorIiIiCisKK2ltcG9ydCBzeXMKKworIyBXZSBtYXkgbm90IHN1cHBvcnQgdGhlIHZlcnNp
b24gb2YgUHl0aG9uIHRoYXQgYSB1c2VyIGhhcyBpbnN0YWxsZWQgKEN5Z3dpbgorIyBlc3BlY2lh
bGx5IGhhcyBoYWQgcHJvYmxlbXMpLCBidXQgd2UnbGwgYWxsb3cgdGhlIHBsYXRmb3JtIHV0aWxz
IHRvIGJlCisjIGluY2x1ZGVkIGluIGFueSBjYXNlIHNvIHdlIGRvbid0IGdldCBhbiBpbXBvcnQg
ZXJyb3IuCitpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICBmcm9t
IHBsYXRmb3JtX3V0aWxzX3dpbiBpbXBvcnQgKgorZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndp
bic6CisgICAgZnJvbSBwbGF0Zm9ybV91dGlsc19tYWMgaW1wb3J0ICoKK2VsaWYgc3lzLnBsYXRm
b3JtIGluICgnbGludXgnLCAnbGludXgyJywgJ2ZyZWVic2Q3JywgJ29wZW5ic2Q0Jyk6CisgICAg
ZnJvbSBwbGF0Zm9ybV91dGlsc19saW51eCBpbXBvcnQgKgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cGxhdGZvcm1fdXRpbHMucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExG
CgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1f
dXRpbHNfbGludXgucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19saW51eC5weQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIGlzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgbGF5b3V0X3BhY2thZ2UucGxhdGZvcm1fdXRpbHMKKyAgIHBhY2thZ2UuIFRoaXMgZmls
ZSBzaG91bGQgb25seSBiZSBpbXBvcnRlZCBieSB0aGF0IHBhY2thZ2UuIiIiCisKK2ltcG9ydCBv
cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBs
b2dnaW5nCisKK2ltcG9ydCBwYXRoX3V0aWxzCitpbXBvcnQgcGxhdGZvcm1fdXRpbHNfd2luCisK
KworZGVmIHBsYXRmb3JtX25hbWUoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBw
bGF0Zm9ybSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKKyAgICByZXR1cm4gJ2Nocm9t
aXVtLWxpbnV4JyArIHBsYXRmb3JtX3ZlcnNpb24oKQorCisKK2RlZiBwbGF0Zm9ybV92ZXJzaW9u
KCk6CisgICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwg
ZS5nLiAnLXZpc3RhJyBvcgorICAgICctc25vd2xlb3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9l
cyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICAgIG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5z
ICcnLiIiIgorICAgIHJldHVybiAnJworCisKK2RlZiBnZXRfbnVtX2NvcmVzKCk6CisgICAgIiIi
UmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJl
YWRlZCBtYWNoaW5lcywKKyAgICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0
dWFsIHByb2Nlc3NvcnMuIiIiCisgICAgbnVtX2NvcmVzID0gb3Muc3lzY29uZigiU0NfTlBST0NF
U1NPUlNfT05MTiIpCisgICAgaWYgaXNpbnN0YW5jZShudW1fY29yZXMsIGludCkgYW5kIG51bV9j
b3JlcyA+IDA6CisgICAgICAgIHJldHVybiBudW1fY29yZXMKKyAgICByZXR1cm4gMQorCisKK2Rl
ZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIHBhdGgg
cmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQorICAgIGJhc2Vs
aW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZvcm18IGlz
IE5vbmUsCisgICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVzZWQuIiIi
CisgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9u
YW1lKCkKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2Rh
dGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKworCitkZWYgYmFzZWxpbmVf
c2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBk
aXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgorICAgIG9yZGVy
IG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3Vy
Y2UgdHJlZS4iIiIKKyAgICByZXR1cm4gW2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pLAorICAgICAg
ICAgICAgcGxhdGZvcm1fdXRpbHNfd2luLmJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpLAor
ICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2luJyksCisgICAg
ICAgICAgICBwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KKworCitkZWYg
YXBhY2hlX2V4ZWN1dGFibGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUg
cGF0aCB0byBzdGFydCBBcGFjaGUiIiIKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKCIvdXNyIiwg
InNiaW4iLCAiYXBhY2hlMiIpCisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAg
IHJldHVybiBwYXRoCisgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5lIEFwYWNoZSBleGVjdXRhYmxl
ICVzIiAlIHBhdGgKKyAgICBfbWlzc2luZ19hcGFjaGUoKQorCisKK2RlZiBhcGFjaGVfY29uZmln
X2ZpbGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBm
aWxlIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJkX3BhcnR5
IiwgIldlYktpdCIsICJMYXlvdXRUZXN0cyIsCisgICAgICAgICJodHRwIiwgImNvbmYiLCAiYXBh
Y2hlMi1kZWJpYW4taHR0cGQuY29uZiIpCisKKworZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0
aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQ
ZCIiIgorICAgIGJpbnBhdGggPSAiL3Vzci9zYmluL2xpZ2h0dHBkIgorICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKGJpbnBhdGgpOgorICAgICAgICByZXR1cm4gYmlucGF0aAorICAgIHByaW50ICJVbmFi
bGUgdG8gZmluZCBMaWdIVFRQZCBleGVjdXRhYmxlICVzIiAlIGJpbnBhdGgKKyAgICBfbWlzc2lu
Z19saWdodHRwZCgpCisKKworZGVmIGxpZ2h0dHBkX21vZHVsZV9wYXRoKCk6CisgICAgIiIiUmV0
dXJucyB0aGUgbGlicmFyeSBtb2R1bGUgcGF0aCBmb3IgTGlnSFRUUGQiIiIKKyAgICBtb2RwYXRo
ID0gIi91c3IvbGliL2xpZ2h0dHBkIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vZHBhdGgpOgor
ICAgICAgICByZXR1cm4gbW9kcGF0aAorICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBMaWdIVFRQ
ZCBtb2R1bGVzICVzIiAlIG1vZHBhdGgKKyAgICBfbWlzc2luZ19saWdodHRwZCgpCisKKworZGVm
IGxpZ2h0dHBkX3BocF9wYXRoKCk6CisgICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1dGFibGUg
cGF0aCBmb3IgTGlnSFRUUGQiIiIKKyAgICBiaW5wYXRoID0gIi91c3IvYmluL3BocC1jZ2kiCisg
ICAgaWYgb3MucGF0aC5leGlzdHMoYmlucGF0aCk6CisgICAgICAgIHJldHVybiBiaW5wYXRoCisg
ICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIFBIUCBDR0kgZXhlY3V0YWJsZSAlcyIgJSBiaW5wYXRo
CisgICAgX21pc3NpbmdfbGlnaHR0cGQoKQorCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgIiIi
UGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNzdW1lIGlzIGFscmVhZHkg
aW5zdGFsbGVkIGFuZAorICAgIGluIHRoZSB1c2VyJ3MgJFBBVEguIiIiCisgICAgcmV0dXJuICd3
ZGlmZicKKworCitkZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6CisgICAgIiIiUGF0aCB0byB0
aGUgaW1hZ2VfZGlmZiBiaW5hcnkuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBCdWlsZCB0
YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkiIiIKKyAgICByZXR1cm4gX3BhdGhfZnJvbV9i
dWlsZF9yZXN1bHRzKHRhcmdldCwgJ2ltYWdlX2RpZmYnKQorCisKK2RlZiBsYXlvdXRfdGVzdF9o
ZWxwZXJfcGF0aCh0YXJnZXQpOgorICAgICIiIlBhdGggdG8gdGhlIGxheW91dF90ZXN0IGhlbHBl
ciBiaW5hcnksIGlmIG5lZWRlZCwgZW1wdHkgb3RoZXJ3aXNlIiIiCisgICAgcmV0dXJuICcnCisK
KworZGVmIHRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpOgorICAgICIiIlJldHVybiB0aGUgcGxhdGZv
cm0tc3BlY2lmaWMgYmluYXJ5IHBhdGggZm9yIG91ciBUZXN0U2hlbGwuCisKKyAgICBBcmdzOgor
ICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkgIiIiCisg
ICAgaWYgdGFyZ2V0IGluICgnRGVidWcnLCAnUmVsZWFzZScpOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBkZWJ1Z19wYXRoID0gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCdEZWJ1ZycsICd0
ZXN0X3NoZWxsJykKKyAgICAgICAgICAgIHJlbGVhc2VfcGF0aCA9IF9wYXRoX2Zyb21fYnVpbGRf
cmVzdWx0cygnUmVsZWFzZScsICd0ZXN0X3NoZWxsJykKKworICAgICAgICAgICAgZGVidWdfbXRp
bWUgPSBvcy5zdGF0KGRlYnVnX3BhdGgpLnN0X210aW1lCisgICAgICAgICAgICByZWxlYXNlX210
aW1lID0gb3Muc3RhdChyZWxlYXNlX3BhdGgpLnN0X210aW1lCisKKyAgICAgICAgICAgIGlmIGRl
YnVnX210aW1lID4gcmVsZWFzZV9tdGltZSBhbmQgdGFyZ2V0ID09ICdSZWxlYXNlJyBvciBcCisg
ICAgICAgICAgICAgICByZWxlYXNlX210aW1lID4gZGVidWdfbXRpbWUgYW5kIHRhcmdldCA9PSAn
RGVidWcnOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnXHgxYlszMW1XYXJuaW5nOiB5
b3UgYXJlIG5vdCBydW5uaW5nIHRoZSBtb3N0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3JlY2VudCB0ZXN0X3NoZWxsIGJpbmFyeS4gWW91IG5lZWQgdG8gcGFzcyAnCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICctLWRlYnVnIG9yIG5vdCB0byBzZWxlY3QgYmV0d2VlbiBE
ZWJ1ZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVsZWFzZS5ceDFiWzBt
JykKKyAgICAgICAgIyBUaGlzIHdpbGwgZmFpbCBpZiB3ZSBkb24ndCBoYXZlIGJvdGggYSBkZWJ1
ZyBhbmQgcmVsZWFzZSBiaW5hcnkuCisgICAgICAgICMgVGhhdCdzIGZpbmUgYmVjYXVzZSwgaW4g
dGhpcyBjYXNlLCB3ZSBtdXN0IGFscmVhZHkgYmUgcnVubmluZyB0aGUKKyAgICAgICAgIyBtb3N0
IHVwLXRvLWRhdGUgb25lLgorICAgICAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6
CisgICAgICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRz
KHRhcmdldCwgJ3Rlc3Rfc2hlbGwnKQorCisKK2RlZiBmdXp6eV9tYXRjaF9wYXRoKCk6CisgICAg
IiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBmdXp6eSBtYXRjaGVyIGJpbmFyeS4iIiIKKyAgICBy
ZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnZnV6enltYXRj
aCcsICdmdXp6eW1hdGNoJykKKworCitkZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9w
aWQpOgorICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVu
dGlsIGl0J3MgZnVsbHkgc2h1dCBkb3duLgorCisgICAgQXJnczoKKyAgICAgIHNlcnZlcl9waWQ6
IFRoZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAiIiIKKyAgICAjIHNl
cnZlcl9waWQgaXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFu
dWFsbHkuCisgICAgaWYgc2VydmVyX3BpZCBpcyBOb25lOgorICAgICAgICAjIFRoaXMgaXNuJ3Qg
aWRlYWwsIHNpbmNlIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGggd2ViIHNlcnZlciBwcm9jZXNzZXMK
KyAgICAgICAgIyBub3Qgc3RhcnRlZCBieSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdo
IGZvciBub3cuCisgICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKKyAgICAgICAg
a2lsbF9hbGxfcHJvY2VzcygnYXBhY2hlMicpCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAg
ICNUT0RPKG1tb3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPwor
ICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICMgU29tZXRpbWVzIHdlIGdldCBh
IGJhZCBQSUQgKGUuZy4gZnJvbSBhIHN0YWxlIGh0dHBkLnBpZCBmaWxlKSwKKyAgICAgICAgICAg
ICMgc28gaWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0byAna2lsbGFs
bCcgd2ViCisgICAgICAgICAgICAjIHNlcnZlcnMuCisgICAgICAgICAgICBzaHV0X2Rvd25faHR0
cF9zZXJ2ZXIoTm9uZSkKKworCitkZWYga2lsbF9wcm9jZXNzKHBpZCk6CisgICAgIiIiRm9yY2Vm
dWxseSBraWxsIHRoZSBwcm9jZXNzLgorCisgICAgQXJnczoKKyAgICAgIHBpZDogVGhlIGlkIG9m
IHRoZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKyAgICAiIiIKKyAgICBvcy5raWxsKHBpZCwgc2ln
bmFsLlNJR0tJTEwpCisKKworZGVmIGtpbGxfYWxsX3Byb2Nlc3MocHJvY2Vzc19uYW1lKToKKyAg
ICBudWxsID0gb3Blbihvcy5kZXZudWxsKQorICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwn
LCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc19uYW1lXSwgc3RkZXJyPW51bGwpCisgICAgbnVsbC5jbG9zZSgpCisKKworZGVmIGtp
bGxfYWxsX3Rlc3Rfc2hlbGxzKCk6CisgICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUg
dGVzdF9zaGVsbCBiaW5hcnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAga2lsbF9hbGxfcHJv
Y2VzcygndGVzdF9zaGVsbCcpCisKKyMKKyMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zCisjCisK
KworZGVmIF9taXNzaW5nX2xpZ2h0dHBkKCk6CisgICAgcHJpbnQgJ1BsZWFzZSBpbnN0YWxsIHVz
aW5nOiAic3VkbyBhcHQtZ2V0IGluc3RhbGwgbGlnaHR0cGQgcGhwNS1jZ2kiJworICAgIHByaW50
ICdGb3IgY29tcGxldGUgTGludXggYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKKyAg
ICBwcmludCAnaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWls
ZEluc3RydWN0aW9ucycKKyAgICBzeXMuZXhpdCgxKQorCisKK2RlZiBfbWlzc2luZ19hcGFjaGUo
KToKKyAgICBwcmludCAoJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0IGluc3Rh
bGwgYXBhY2hlMiAnCisgICAgICAgICdsaWJhcGFjaGUyLW1vZC1waHA1IicpCisgICAgcHJpbnQg
J0ZvciBjb21wbGV0ZSBMaW51eCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JworICAg
IHByaW50ICdodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MaW51eEJ1aWxk
SW5zdHJ1Y3Rpb25zJworICAgIHN5cy5leGl0KDEpCisKKworZGVmIF9wYXRoX2Zyb21fYnVpbGRf
cmVzdWx0cygqcGF0aGllcyk6CisgICAgIyBGSVhNRShka2VnZWwpOiB1c2UgbGF0ZXN0IG9yIHdh
cm4gaWYgbW9yZSB0aGFuIG9uZSBmb3VuZD8KKyAgICBmb3IgZGlyIGluIFsic2NvbnNidWlsZCIs
ICJvdXQiLCAieGNvZGVidWlsZCJdOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZShkaXIsICpwYXRoaWVzKQorICAgICAgICBleGNlcHQ6
CisgICAgICAgICAgICBwYXNzCisgICAgcmFpc2UgcGF0aF91dGlscy5QYXRoTm90Rm91bmQoIlVu
YWJsZSB0byBmaW5kICVzIGluIGJ1aWxkIHRyZWUiICUKKyAgICAgICAgKG9zLnBhdGguam9pbigq
cGF0aGllcykpKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1f
dXRpbHNfbWFjLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX21hYy5weQkocmV2aXNp
b24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX21hYy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJU
aGlzIGlzIHRoZSBNYWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRm
b3JtX3V0aWxzCisgICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQg
YnkgdGhhdCBwYWNrYWdlLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0
IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0IHBhdGhfdXRpbHMKKworCitkZWYg
cGxhdGZvcm1fbmFtZSgpOgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3Jt
IHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9uLiIiIgorICAgICMgQXQgdGhlIG1vbWVudCBhbGwg
Y2hyb21pdW0gbWFjIHJlc3VsdHMgYXJlIHZlcnNpb24taW5kZXBlbmRlbnQuIEF0IHNvbWUKKyAg
ICAjIHBvaW50IHdlIG1heSBuZWVkIHRvIHJldHVybiAnY2hyb21pdW0tbWFjJyArIFBsYXRmb3Jt
VmVyc2lvbigpCisgICAgcmV0dXJuICdjaHJvbWl1bS1tYWMnCisKKworZGVmIHBsYXRmb3JtX3Zl
cnNpb24oKToKKyAgICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIHBsYXRm
b3JtLCBlLmcuICctdmlzdGEnIG9yCisgICAgJy1zbm93bGVvcGFyZCcuIElmIHRoZSBwbGF0Zm9y
bSBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgICAgbWlub3IgdmVyc2lvbnMsIGl0IHJl
dHVybnMgJycuIiIiCisgICAgb3NfdmVyc2lvbl9zdHJpbmcgPSBwbGF0Zm9ybS5tYWNfdmVyKClb
MF0gICMgZS5nLiAiMTAuNS42IgorICAgIGlmIG5vdCBvc192ZXJzaW9uX3N0cmluZzoKKyAgICAg
ICAgcmV0dXJuICctbGVvcGFyZCcKKworICAgIHJlbGVhc2VfdmVyc2lvbiA9IGludChvc192ZXJz
aW9uX3N0cmluZy5zcGxpdCgnLicpWzFdKQorCisgICAgIyB3ZSBkb24ndCBzdXBwb3J0ICd0aWdl
cicgb3IgZWFybGllciByZWxlYXNlcworICAgIGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA1OgorICAg
ICAgICByZXR1cm4gJy1sZW9wYXJkJworICAgIGVsaWYgcmVsZWFzZV92ZXJzaW9uID09IDY6Cisg
ICAgICAgIHJldHVybiAnLXNub3dsZW9wYXJkJworCisgICAgcmV0dXJuICcnCisKKworZGVmIGdl
dF9udW1fY29yZXMoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhl
IG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVkIG1hY2hpbmVzLAorICAgIHRoaXMgd2lsbCBiZSBk
b3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwgcHJvY2Vzc29ycy4iIiIKKyAgICByZXR1cm4gaW50
KG9zLnBvcGVuMigic3lzY3RsIC1uIGh3Lm5jcHUiKVsxXS5yZWFkKCkpCisKKworZGVmIGJhc2Vs
aW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2
ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgdGhlCisgICAgYmFzZWxpbmVzIGZv
ciB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwK
KyAgICB0aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKKyAgICBp
ZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQor
ICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICds
YXlvdXRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0
Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorCisjIFRPRE86IFdlIHNob3VsZCBhZGQg
bGVvcGFyZCBhbmQgc25vd2xlb3BhcmQgdG8gdGhlIGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2sKKyMg
b25jZSB3ZSBzdGFydCBydW5uaW5nIHRoZSB0ZXN0cyBmcm9tIHNub3dsZW9wYXJkLgorCisKK2Rl
ZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRo
ZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGlu
CisgICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Ag
b2YgdGhlIHNvdXJjZSB0cmVlLiIiIgorICAgIHJldHVybiBbYmFzZWxpbmVfcGF0aChwbGF0Zm9y
bSksCisgICAgICAgICAgICBwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnICsg
cGxhdGZvcm1fdmVyc2lvbigpKSwKKyAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2Vs
aW5lX3BhdGgoJ21hYycpXQorCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgIiIiUGF0aCB0byB0
aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNzdW1lIGlzIGFscmVhZHkgaW5zdGFsbGVk
IGFuZAorICAgIGluIHRoZSB1c2VyJ3MgJFBBVEguIiIiCisgICAgcmV0dXJuICd3ZGlmZicKKwor
CitkZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6CisgICAgIiIiUGF0aCB0byB0aGUgaW1hZ2Vf
ZGlmZiBleGVjdXRhYmxlCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0g
J0RlYnVnJywnUmVsZWFzZScsZXRjLiIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAnaW1hZ2VfZGlmZicpCisKKworZGVmIGxheW91
dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6CisgICAgIiIiUGF0aCB0byB0aGUgbGF5b3V0X3Rl
c3RfaGVscGVyIGV4ZWN1dGFibGUsIGlmIG5lZWRlZCwgZW1wdHkgb3RoZXJ3aXNlCisKKyAgICBB
cmdzOgorICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIi
IgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFy
Z2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRfdGVzdF9o
ZWxwZXInKQorCisKK2RlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToKKyAgICAiIiJQYXRoIHRv
IHRoZSB0ZXN0X3NoZWxsIGV4ZWN1dGFibGUuCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBi
dWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIiIgorICAgICMgVE9ETyhwaW5rZXJ0
b24pOiBtYWtlIHx0YXJnZXR8IGhhcHB5IHdpdGggY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW1z
LgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFy
Z2V0LCAnVGVzdFNoZWxsLmFwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ0NvbnRlbnRzJywgJ01hY09TJywgJ1Rlc3RTaGVsbCcpCisKKworZGVmIGFwYWNoZV9leGVj
dXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3Rh
cnQgQXBhY2hlIiIiCisgICAgcmV0dXJuIG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImh0
dHBkIikKKworCitkZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBwYXRoIHRvIEFwYWNoZSBjb25maWcgZmlsZSIiIgorICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAor
ICAgICAgICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItaHR0cGQuY29uZiIpCisKKworZGVmIGxp
Z2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUg
cGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdiaW4nLCAnbGlnaHR0cGQnKQorCisKK2RlZiBsaWdodHRw
ZF9tb2R1bGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGgg
Zm9yIExpZ0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3Ro
aXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsICdsaWInKQorCisKK2RlZiBsaWdodHRwZF9w
aHBfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExp
Z0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3Bh
cnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsICdiaW4nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdwaHAtY2dpJykKKworCitkZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNl
cnZlcl9waWQpOgorICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxv
Y2tzIHVudGlsIGl0J3MgZnVsbHkgc2h1dCBkb3duLgorCisgICAgICBBcmdzOgorICAgICAgICBz
ZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgIiIi
CisgICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIg
aXMgcnVuIG1hbnVhbGx5LgorICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAgICAgICAgIyBU
T0RPKG1tb3NzKSBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRo
IGxpZ2h0dHBkCisgICAgICAgICMgcHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVy
LnB5LCBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICAgICAga2lsbF9hbGxfcHJvY2Vzcygn
bGlnaHR0cGQnKQorICAgICAgICBraWxsX2FsbF9wcm9jZXNzKCdodHRwZCcpCisgICAgZWxzZToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lH
VEVSTSkKKyAgICAgICAgICAgICMgVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxM
IGp1c3QgdG8gYmUgc3VyZT8KKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAj
IFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBodHRwZC5waWQg
ZmlsZSksCisgICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJRCwg
anVzdCB0cnkgdG8gJ2tpbGxhbGwnIHdlYgorICAgICAgICAgICAgIyBzZXJ2ZXJzLgorICAgICAg
ICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCisKKworZGVmIGtpbGxfcHJvY2Vzcyhw
aWQpOgorICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgIEFyZ3M6Cisg
ICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCisgICAgIiIiCisg
ICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorCisKK2RlZiBraWxsX2FsbF9wcm9jZXNz
KHByb2Nlc3NfbmFtZSk6CisgICAgIyBPbiBNYWMgT1MgWCAxMC42LCBraWxsYWxsIGhhcyBhIG5l
dyBjb25zdHJhaW50OiAtU0lHTkFMTkFNRSBvcgorICAgICMgLVNJR05BTE5VTUJFUiBtdXN0IGNv
bWUgZmlyc3QuICBFeGFtcGxlIHByb2JsZW06CisgICAgIyAgICQga2lsbGFsbCAtdSAkVVNFUiAt
VEVSTSBsaWdodHRwZAorICAgICMgICBraWxsYWxsOiBpbGxlZ2FsIG9wdGlvbiAtLSBUCisgICAg
IyBVc2Ugb2YgdGhlIGVhcmxpZXIgLVRFUk0gcGxhY2VtZW50IGlzIGp1c3QgZmluZSBvbiAxMC41
LgorICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAgc3VicHJvY2Vzcy5jYWxsKFsna2ls
bGFsbCcsICctVEVSTScsICctdScsIG9zLmdldGVudignVVNFUicpLAorICAgICAgICAgICAgICAg
ICAgICAgcHJvY2Vzc19uYW1lXSwgc3RkZXJyPW51bGwpCisgICAgbnVsbC5jbG9zZSgpCisKKwor
ZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxzKCk6CisgICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBv
ZiB0aGUgdGVzdF9zaGVsbCBiaW5hcnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAga2lsbF9h
bGxfcHJvY2VzcygnVGVzdFNoZWxsJykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0
aWxzX21hYy5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wbGF0Zm9ybV91dGlsc193aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfd2lu
LnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfd2luLnB5CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIxMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyIiIlRoaXMgaXMgdGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBsYXlvdXRf
cGFja2FnZS5wbGF0Zm9ybV91dGlscworICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3VsZCBvbmx5
IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgcGF0
aF91dGlscworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworCitkZWYgcGxhdGZvcm1f
bmFtZSgpOgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1
cnJlbnRseSBydW5uaW5nIG9uLiIiIgorICAgICMgV2UncmUgbm90IHJlYWR5IGZvciB2ZXJzaW9u
LXNwZWNpZmljIHJlc3VsdHMgeWV0LiBXaGVuIHdlIHVuY29tbWVudAorICAgICMgdGhpcywgd2Ug
YWxzbyBuZWVkIHRvIGFkZCBpdCB0byB0aGUgQmFzZWxpbmVTZWFyY2hQYXRoKCkKKyAgICByZXR1
cm4gJ2Nocm9taXVtLXdpbicgKyBwbGF0Zm9ybV92ZXJzaW9uKCkKKworCitkZWYgcGxhdGZvcm1f
dmVyc2lvbigpOgorICAgICIiIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIGZvciB0aGUgcGxh
dGZvcm0sIGUuZy4gJy12aXN0YScgb3IKKyAgICAnLXNub3dsZW9wYXJkJy4gSWYgdGhlIHBsYXRm
b3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgICBtaW5vciB2ZXJzaW9ucywgaXQg
cmV0dXJucyAnJy4iIiIKKyAgICB3aW52ZXIgPSBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKQorICAg
IGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09IDEpOgorICAgICAgICByZXR1cm4g
Jy03JworICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09IDApOgorICAgICAg
ICByZXR1cm4gJy12aXN0YScKKyAgICBpZiB3aW52ZXJbMF0gPT0gNSBhbmQgKHdpbnZlclsxXSA9
PSAxIG9yIHdpbnZlclsxXSA9PSAyKToKKyAgICAgICAgcmV0dXJuICcteHAnCisgICAgcmV0dXJu
ICcnCisKKworZGVmIGdldF9udW1fY29yZXMoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIg
b2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVkIG1hY2hpbmVzLAorICAg
IHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwgcHJvY2Vzc29ycy4iIiIK
KyAgICByZXR1cm4gaW50KG9zLmVudmlyb24uZ2V0KCdOVU1CRVJfT0ZfUFJPQ0VTU09SUycsIDEp
KQorCisKK2RlZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMg
dGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQor
ICAgIGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxh
dGZvcm18IGlzIE5vbmUsCisgICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlz
IHVzZWQuIiIiCisgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgcGxhdGZvcm0gPSBw
bGF0Zm9ybV9uYW1lKCkKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Vi
a2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKworCitkZWYg
YmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUg
bGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgor
ICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9m
IHRoZSBzb3VyY2UgdHJlZS4iIiIKKyAgICBkaXJzID0gW10KKyAgICBpZiBwbGF0Zm9ybSBpcyBO
b25lOgorICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQorCisgICAgaWYgcGxhdGZv
cm0gPT0gJ2Nocm9taXVtLXdpbi14cCc6CisgICAgICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3Bh
dGgocGxhdGZvcm0pKQorICAgIGlmIHBsYXRmb3JtIGluICgnY2hyb21pdW0td2luLXhwJywgJ2No
cm9taXVtLXdpbi12aXN0YScpOgorICAgICAgICBkaXJzLmFwcGVuZChiYXNlbGluZV9wYXRoKCdj
aHJvbWl1bS13aW4tdmlzdGEnKSkKKyAgICBkaXJzLmFwcGVuZChiYXNlbGluZV9wYXRoKCdjaHJv
bWl1bS13aW4nKSkKKyAgICBkaXJzLmFwcGVuZChwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9w
YXRoKCd3aW4nKSkKKyAgICBkaXJzLmFwcGVuZChwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9w
YXRoKCdtYWMnKSkKKyAgICByZXR1cm4gZGlycworCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAg
IiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hvc2UgYmluYXJ5IGlzIGNoZWNrZWQg
aW4gb24gV2luIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJk
X3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd3ZGlmZi5leGUnKQorCisKK2RlZiBpbWFnZV9kaWZmX3BhdGgodGFyZ2V0KToKKyAg
ICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciB0aGUgaW1h
Z2UgY29tcGFyZSB1dGlsLgorICAgICAgICAgV2UgdXNlIHRoaXMgaWYgd2UgY2FuJ3QgZmluZCB0
aGUgYmluYXJ5IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uCisgICAgICAgICBpbiBwYXRoX3V0aWxz
LgorCisgICAgQXJnczoKKyAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9y
IHJlbGVhc2UpCisgICAgIiIiCisgICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICdpbWFn
ZV9kaWZmLmV4ZScpCisKKworZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6Cisg
ICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3IgdGhlIGxh
eW91dCB0ZXN0IGhlbHBlci4KKyAgICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBi
aW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KKyAgICBpbiBwYXRoX3V0aWxzLgorCisgICAg
QXJnczoKKyAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2Up
CisgICAgIiIiCisgICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICdsYXlvdXRfdGVzdF9o
ZWxwZXIuZXhlJykKKworCitkZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6CisgICAgIiIiUmV0
dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3Igb3VyIFRlc3RTaGVsbC4K
KyAgICAgICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRl
ZmF1bHQgbG9jYXRpb24KKyAgICAgICBpbiBwYXRoX3V0aWxzLgorCisgICAgQXJnczoKKyAgICAg
IHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpCisgICAgIiIiCisg
ICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICd0ZXN0X3NoZWxsLmV4ZScpCisKKworZGVm
IGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxl
IHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCisgICAgcGF0aCA9IHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICJ1c3IiLCAic2JpbiIpCisgICAgIyBEb24n
dCByZXR1cm4gaHR0cGQuZXhlIHNpbmNlIHdlIHdhbnQgdG8gdXNlIHRoaXMgZnJvbSBjeWd3aW4u
CisgICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCAiaHR0cGQiKQorCisKK2RlZiBhcGFjaGVf
Y29uZmlnX2ZpbGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNv
bmZpZyBmaWxlIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJk
X3BhcnR5IiwgIldlYktpdCIsICJMYXlvdXRUZXN0cyIsCisgICAgICAgICJodHRwIiwgImNvbmYi
LCAiY3lnd2luLWh0dHBkLmNvbmYiKQorCisKK2RlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgo
KToKKyAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQi
IiIKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAn
bGlnaHR0cGQnLCAnd2luJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
TGlnaHRUUEQuZXhlJykKKworCitkZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKKyAgICAiIiJS
ZXR1cm5zIHRoZSBsaWJyYXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVy
biBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3
aW4nLCAnbGliJykKKworCitkZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBQSFAgZXhlY3V0YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLCAn
cGhwNScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BocC1jZ2kuZXhl
JykKKworCitkZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgorICAgICIiIlNo
dXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkg
c2h1dCBkb3duLgorCisgICAgQXJnczoKKyAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElE
IG9mIHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAgICAgICBVbnVzZWQgaW4gdGhpcyBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgbWV0aG9kLgorICAgICIiIgorICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0
YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ0xpZ2h0VFBELmV4ZScpLAorICAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgIHN0
ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQorICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNr
a2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ2h0dHBkLmV4ZScpLAorICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1z
dWJwcm9jZXNzLlBJUEUpLndhaXQoKQorCisKK2RlZiBraWxsX3Byb2Nlc3MocGlkKToKKyAgICAi
IiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCisKKyAgICBBcmdzOgorICAgICAgcGlkOiBU
aGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgorICAgICIiIgorICAgIHN1YnByb2Nl
c3MuY2FsbCgoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvcGlkJywgc3RyKHBpZCkpLAorICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAg
ICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorCisKK2RlZiBraWxsX2FsbF90ZXN0X3NoZWxscyhz
ZWxmKToKKyAgICAiIiJLaWxscyBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFy
eSBjdXJyZW50bHkgcnVubmluZy4iIiIKKyAgICBzdWJwcm9jZXNzLlBvcGVuKCgndGFza2tpbGwu
ZXhlJywgJy9mJywgJy9pbScsICd0ZXN0X3NoZWxsLmV4ZScpLAorICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1z
dWJwcm9jZXNzLlBJUEUpLndhaXQoKQorCisjCisjIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucy4K
KyMKKworCitkZWYgX2ZpbmRfYmluYXJ5KHRhcmdldCwgYmluYXJ5KToKKyAgICAiIiJPbiBXaW5k
b3dzLCB3ZSBsb29rIGZvciBiaW5hcmllcyB0aGF0IHdlIGNvbXBpbGUgaW4gcG90ZW50aWFsbHkK
KyAgICB0d28gcGxhY2VzOiBzcmMvd2Via2l0LyR0YXJnZXQgKHByZWZlcmFibHksIHdoaWNoIHdl
IGdldCBpZiB3ZQorICAgIGJ1aWx0IHVzaW5nIHdlYmtpdF9nbHVlLmd5cCksIG9yIHNyYy9jaHJv
bWUvJHRhcmdldCAoaWYgY29tcGlsZWQgc29tZQorICAgIG90aGVyIHdheSkuIiIiCisgICAgdHJ5
OgorICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgdGFy
Z2V0LCBiaW5hcnkpCisgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnY2hy
b21lJywgdGFyZ2V0LCBiaW5hcnkpCisgICAgICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RG
b3VuZDoKKyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCdidWls
ZCcsIHRhcmdldCwgYmluYXJ5KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNf
d2luLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rl
c3RfZXhwZWN0YXRpb25zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODE4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiQSBoZWxwZXIgY2xhc3MgZm9yIHJlYWRpbmcgaW4gYW5kIGRlYWxpbmcgd2l0aCB0ZXN0cyBl
eHBlY3RhdGlvbnMKK2ZvciBsYXlvdXQgdGVzdHMuCisiIiIKKworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHBhdGhf
dXRpbHMKKworc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJk
X3BhcnR5JywgJ1dlYktpdCcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ1dlYktpdFRvb2xzJykpIAoraW1wb3J0IHNpbXBsZWpzb24KKworIyBUZXN0IGV4cGVj
dGF0aW9uIGFuZCBtb2RpZmllciBjb25zdGFudHMuCisoUEFTUywgRkFJTCwgVEVYVCwgSU1BR0Us
IElNQUdFX1BMVVNfVEVYVCwgVElNRU9VVCwgQ1JBU0gsIFNLSVAsIFdPTlRGSVgsCisgREVGRVIs
IFNMT1csIFJFQkFTRUxJTkUsIE1JU1NJTkcsIEZMQUtZLCBOT1csIE5PTkUpID0gcmFuZ2UoMTYp
CisKKyMgVGVzdCBleHBlY3RhdGlvbiBmaWxlIHVwZGF0ZSBhY3Rpb24gY29uc3RhbnRzCisoTk9f
Q0hBTkdFLCBSRU1PVkVfVEVTVCwgUkVNT1ZFX1BMQVRGT1JNLCBBRERfUExBVEZPUk1TX0VYQ0VQ
VF9USElTKSA9IHJhbmdlKDQpCisKKworY2xhc3MgVGVzdEV4cGVjdGF0aW9uczoKKyAgICBURVNU
X0xJU1QgPSAidGVzdF9leHBlY3RhdGlvbnMudHh0IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHRlc3RzLCBkaXJlY3RvcnksIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLCBpc19saW50X21vZGUs
CisgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgorICAgICAgICAiIiJSZWFkcyB0aGUg
dGVzdCBleHBlY3RhdGlvbnMgZmlsZXMgZnJvbSB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgorICAg
ICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgc2VsZi5URVNUX0xJU1QpCisgICAg
ICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUocGF0aCwg
dGVzdHMsIHBsYXRmb3JtLAorICAgICAgICAgICAgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2Rl
LCB0ZXN0c19hcmVfcHJlc2VudD10ZXN0c19hcmVfcHJlc2VudCkKKworICAgICMgVE9ETyhvamFu
KTogQWxsb3cgZm9yIHJlbW92aW5nIHNraXBwZWQgdGVzdHMgd2hlbiBnZXR0aW5nIHRoZSBsaXN0
IG9mCisgICAgIyB0ZXN0cyB0byBydW4sIGJ1dCBub3Qgd2hlbiBnZXR0aW5nIG1ldHJpY3MuCisg
ICAgIyBUT0RPKG9qYW4pOiBSZXBsYWNlIHRoZSBHZXQqIGNhbGxzIGhlcmUgd2l0aCB0aGUgbW9y
ZSBzYW5lIEFQSSBleHBvc2VkCisgICAgIyBieSBUZXN0RXhwZWN0YXRpb25zRmlsZSBiZWxvdy4g
TWF5YmUgbWVyZ2UgdGhlIHR3byBjbGFzc2VzIGVudGlyZWx5PworCisgICAgZGVmIGdldF9leHBl
Y3RhdGlvbnNfanNvbl9mb3JfYWxsX3BsYXRmb3JtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgK
KyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF9leHBlY3RhdGlvbnNfanNv
bl9mb3JfYWxsX3BsYXRmb3JtcygpKQorCisgICAgZGVmIGdldF9yZWJhc2VsaW5pbmdfZmFpbHVy
ZXMoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X3Rl
c3Rfc2V0KFJFQkFTRUxJTkUsIEZBSUwpIHwKKyAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3Rl
ZF9mYWlsdXJlcy5nZXRfdGVzdF9zZXQoUkVCQVNFTElORSwgSU1BR0UpIHwKKyAgICAgICAgICAg
ICAgICBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdF9zZXQoUkVCQVNFTElORSwgVEVY
VCkgfAorICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmdldF90ZXN0X3Nl
dChSRUJBU0VMSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJTUFHRV9QTFVTX1RFWFQpKQorCisgICAgZGVmIGdldF9vcHRpb25zKHNlbGYs
IHRlc3QpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X29wdGlv
bnModGVzdCkKKworICAgIGRlZiBnZXRfZXhwZWN0YXRpb25zKHNlbGYsIHRlc3QpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMuZ2V0X2V4cGVjdGF0aW9ucyh0ZXN0KQor
CisgICAgZGVmIGdldF9leHBlY3RhdGlvbnNfc3RyaW5nKHNlbGYsIHRlc3QpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSBleHBlY3RhdG9ucyBmb3IgdGhlIGdpdmVuIHRlc3QgYXMgYW4gdXBwZXJj
YXNlIHN0cmluZy4KKyAgICAgICAgSWYgdGhlcmUgYXJlIG5vIGV4cGVjdGF0aW9ucyBmb3IgdGhl
IHRlc3QsIHRoZW4gIlBBU1MiIGlzIHJldHVybmVkLiIiIgorICAgICAgICBleHBlY3RhdGlvbnMg
PSBzZWxmLmdldF9leHBlY3RhdGlvbnModGVzdCkKKyAgICAgICAgcmV0dmFsID0gW10KKworICAg
ICAgICBmb3IgZXhwZWN0YXRpb24gaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgZm9yIGl0
ZW0gaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05TLml0ZW1zKCk6CisgICAgICAg
ICAgICAgICAgaWYgaXRlbVsxXSA9PSBleHBlY3RhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dmFsLmFwcGVuZChpdGVtWzBdKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAg
ICAgIHJldHVybiAiICIuam9pbihyZXR2YWwpLnVwcGVyKCkKKworICAgIGRlZiBnZXRfdGltZWxp
bmVfZm9yX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9m
YWlsdXJlcy5nZXRfdGltZWxpbmVfZm9yX3Rlc3QodGVzdCkKKworICAgIGRlZiBnZXRfdGVzdHNf
d2l0aF9yZXN1bHRfdHlwZShzZWxmLCByZXN1bHRfdHlwZSk6CisgICAgICAgIHJldHVybiBzZWxm
Ll9leHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRfdHlwZShyZXN1bHRfdHlw
ZSkKKworICAgIGRlZiBnZXRfdGVzdHNfd2l0aF90aW1lbGluZShzZWxmLCB0aW1lbGluZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfdGVzdHNfd2l0aF90aW1l
bGluZSh0aW1lbGluZSkKKworICAgIGRlZiBtYXRjaGVzX2FuX2V4cGVjdGVkX3Jlc3VsdChzZWxm
LCB0ZXN0LCByZXN1bHQpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgd2UgZ290IG9uZSBv
ZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgdGhpcyB0ZXN0LiIiIgorICAgICAgICByZXR1cm4g
KHJlc3VsdCBpbiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5nZXRfZXhwZWN0YXRpb25zKHRlc3Qp
IG9yCisgICAgICAgICAgICAgICAgKHJlc3VsdCBpbiAoSU1BR0UsIFRFWFQsIElNQUdFX1BMVVNf
VEVYVCkgYW5kCisgICAgICAgICAgICAgICAgRkFJTCBpbiBzZWxmLl9leHBlY3RlZF9mYWlsdXJl
cy5nZXRfZXhwZWN0YXRpb25zKHRlc3QpKSBvcgorICAgICAgICAgICAgICAgIHJlc3VsdCA9PSBN
SVNTSU5HIGFuZCBzZWxmLmlzX3JlYmFzZWxpbmluZyh0ZXN0KSBvcgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9PSBTS0lQIGFuZCBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5oYXNfbW9kaWZpZXIo
dGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNLSVApKQorCisgICAgZGVmIGlzX3JlYmFzZWxpbmluZyhz
ZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzLmhhc19t
b2RpZmllcih0ZXN0LCBSRUJBU0VMSU5FKQorCisgICAgZGVmIGhhc19tb2RpZmllcihzZWxmLCB0
ZXN0LCBtb2RpZmllcik6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5o
YXNfbW9kaWZpZXIodGVzdCwgbW9kaWZpZXIpCisKKyAgICBkZWYgcmVtb3ZlX3BsYXRmb3JtX2Zy
b21fZmlsZShzZWxmLCB0ZXN0cywgcGxhdGZvcm0sIGJhY2t1cD1GYWxzZSk6CisgICAgICAgIHJl
dHVybiBzZWxmLl9leHBlY3RlZF9mYWlsdXJlcy5yZW1vdmVfcGxhdGZvcm1fZnJvbV9maWxlKHRl
c3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwKQorCisKK2RlZiBzdHJpcF9j
b21tZW50cyhsaW5lKToKKyAgICAiIiJTdHJpcHMgY29tbWVudHMgZnJvbSBhIGxpbmUgYW5kIHJl
dHVybiBOb25lIGlmIHRoZSBsaW5lIGlzIGVtcHR5CisgICAgb3IgZWxzZSB0aGUgY29udGVudHMg
b2YgbGluZSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyByZW1vdmVkCisgICAgYW5k
IGFsbCBvdGhlciB3aGl0ZXNwYWNlIGNvbGxhcHNlZCIiIgorCisgICAgY29tbWVudEluZGV4ID0g
bGluZS5maW5kKCcvLycpCisgICAgaWYgY29tbWVudEluZGV4IGlzIC0xOgorICAgICAgICBjb21t
ZW50SW5kZXggPSBsZW4obGluZSkKKworICAgIGxpbmUgPSByZS5zdWIocidccysnLCAnICcsIGxp
bmVbOmNvbW1lbnRJbmRleF0uc3RyaXAoKSkKKyAgICBpZiBsaW5lID09ICcnOgorICAgICAgICBy
ZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgTW9k
aWZpZXJzQW5kRXhwZWN0YXRpb25zOgorICAgICIiIkEgaG9sZGVyIGZvciBtb2RpZmllcnMgYW5k
IGV4cGVjdGF0aW9ucyBvbiBhIHRlc3QgdGhhdCBzZXJpYWxpemVzIHRvCisgICAgSlNPTi4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RpZmllcnMsIGV4cGVjdGF0aW9ucyk6CisgICAg
ICAgIHNlbGYubW9kaWZpZXJzID0gbW9kaWZpZXJzCisgICAgICAgIHNlbGYuZXhwZWN0YXRpb25z
ID0gZXhwZWN0YXRpb25zCisKKworY2xhc3MgRXhwZWN0YXRpb25zSnNvbkVuY29kZXIoc2ltcGxl
anNvbi5KU09ORW5jb2Rlcik6CisgICAgIiIiSlNPTiBlbmNvZGVyIHRoYXQgY2FuIGhhbmRsZSBN
b2RpZmllcnNBbmRFeHBlY3RhdGlvbnMgb2JqZWN0cy4KKyAgICAiIiIKKworICAgIGRlZiBkZWZh
dWx0KHNlbGYsIG9iaik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBNb2RpZmllcnNBbmRF
eHBlY3RhdGlvbnMpOgorICAgICAgICAgICAgcmV0dXJuIHsibW9kaWZpZXJzIjogb2JqLm1vZGlm
aWVycywKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGF0aW9ucyI6IG9iai5leHBlY3RhdGlv
bnN9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gSlNPTkVuY29kZXIuZGVmYXVs
dChzZWxmLCBvYmopCisKKworY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CisgICAgIiIiVGVz
dCBleHBlY3RhdGlvbiBmaWxlcyBjb25zaXN0IG9mIGxpbmVzIHdpdGggc3BlY2lmaWNhdGlvbnMg
b2Ygd2hhdAorICAgIHRvIGV4cGVjdCBmcm9tIGxheW91dCB0ZXN0IGNhc2VzLiBUaGUgdGVzdCBj
YXNlcyBjYW4gYmUgZGlyZWN0b3JpZXMKKyAgICBpbiB3aGljaCBjYXNlIHRoZSBleHBlY3RhdGlv
bnMgYXBwbHkgdG8gYWxsIHRlc3QgY2FzZXMgaW4gdGhhdAorICAgIGRpcmVjdG9yeSBhbmQgYW55
IHN1YmRpcmVjdG9yeS4gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyBhbG9uZyB0aGUKKyAgICBs
aW5lcyBvZjoKKworICAgICAgTGF5b3V0VGVzdHMvZmFzdC9qcy9maXhtZS5qcyA9IEZBSUwKKyAg
ICAgIExheW91dFRlc3RzL2Zhc3QvanMvZmxha3kuanMgPSBGQUlMIFBBU1MKKyAgICAgIExheW91
dFRlc3RzL2Zhc3QvanMvY3Jhc2guanMgPSBDUkFTSCBUSU1FT1VUIEZBSUwgUEFTUworICAgICAg
Li4uCisKKyAgICBUbyBhZGQgb3RoZXIgb3B0aW9uczoKKyAgICAgIFNLSVAgOiBMYXlvdXRUZXN0
cy9mYXN0L2pzL25vLWdvb2QuanMgPSBUSU1FT1VUIFBBU1MKKyAgICAgIERFQlVHIDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisgICAgICBERUJVRyBTS0lQ
IDogTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9VVCBQQVNTCisgICAgICBM
SU5VWCBERUJVRyBTS0lQIDogTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1nb29kLmpzID0gVElNRU9V
VCBQQVNTCisgICAgICBERUZFUiBMSU5VWCBXSU4gOiBMYXlvdXRUZXN0cy9mYXN0L2pzL25vLWdv
b2QuanMgPSBUSU1FT1VUIFBBU1MKKworICAgIFNLSVA6IERvZXNuJ3QgcnVuIHRoZSB0ZXN0Lgor
ICAgIFNMT1c6IFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIHRvIHJ1biwgYnV0IGRvZXMgbm90
IHRpbWVvdXQgaW5kZWZpbml0ZWx5LgorICAgIFdPTlRGSVg6IEZvciB0ZXN0cyB0aGF0IHdlIG5l
dmVyIGludGVuZCB0byBwYXNzIG9uIGEgZ2l2ZW4gcGxhdGZvcm0uCisgICAgREVGRVI6IFRlc3Qg
ZG9lcyBub3QgY291bnQgaW4gb3VyIHN0YXRpc3RpY3MgZm9yIHRoZSBjdXJyZW50IHJlbGVhc2Uu
CisgICAgREVCVUc6IEV4cGVjdGF0aW9ucyBhcHBseSBvbmx5IHRvIHRoZSBkZWJ1ZyBidWlsZC4K
KyAgICBSRUxFQVNFOiBFeHBlY3RhdGlvbnMgYXBwbHkgb25seSB0byByZWxlYXNlIGJ1aWxkLgor
ICAgIExJTlVYL1dJTi9XSU4tWFAvV0lOLVZJU1RBL1dJTi03L01BQzogRXhwZWN0YXRpb25zIGFw
cGx5IG9ubHkgdG8gdGhlc2UKKyAgICAgICAgcGxhdGZvcm1zLgorCisgICAgTm90ZXM6CisgICAg
ICAtQSB0ZXN0IGNhbm5vdCBiZSBib3RoIFNMT1cgYW5kIFRJTUVPVVQKKyAgICAgIC1BIHRlc3Qg
Y2Fubm90IGJlIGJvdGggREVGRVIgYW5kIFdPTlRGSVgKKyAgICAgIC1BIHRlc3Qgc2hvdWxkIG9u
bHkgYmUgb25lIG9mIElNQUdFLCBURVhULCBJTUFHRStURVhULCBvciBGQUlMLiBGQUlMIGlzCisg
ICAgICAgYSBtaWdyYXRvcnkgc3RhdGUgdGhhdCBjdXJyZW50bHkgbWVhbnMgZWl0aGVyIElNQUdF
LCBURVhULCBvcgorICAgICAgIElNQUdFK1RFWFQuIE9uY2Ugd2UgaGF2ZSBmaW5pc2hlZCBtaWdy
YXRpbmcgdGhlIGV4cGVjdGF0aW9ucywgd2Ugd2lsbAorICAgICAgIGNoYW5nZSBGQUlMIHRvIGhh
dmUgdGhlIG1lYW5pbmcgb2YgSU1BR0UrVEVYVCBhbmQgcmVtb3ZlIHRoZSBJTUFHRStURVhUCisg
ICAgICAgaWRlbnRpZmllci4KKyAgICAgIC1BIHRlc3QgY2FuIGJlIGluY2x1ZGVkIHR3aWNlLCBi
dXQgbm90IHZpYSB0aGUgc2FtZSBwYXRoLgorICAgICAgLUlmIGEgdGVzdCBpcyBpbmNsdWRlZCB0
d2ljZSwgdGhlbiB0aGUgbW9yZSBwcmVjaXNlIHBhdGggd2lucy4KKyAgICAgIC1DUkFTSCB0ZXN0
cyBjYW5ub3QgYmUgREVGRVIgb3IgV09OVEZJWAorICAgICIiIgorCisgICAgRVhQRUNUQVRJT05T
ID0geydwYXNzJzogUEFTUywKKyAgICAgICAgICAgICAgICAgICAgJ2ZhaWwnOiBGQUlMLAorICAg
ICAgICAgICAgICAgICAgICAndGV4dCc6IFRFWFQsCisgICAgICAgICAgICAgICAgICAgICdpbWFn
ZSc6IElNQUdFLAorICAgICAgICAgICAgICAgICAgICAnaW1hZ2UrdGV4dCc6IElNQUdFX1BMVVNf
VEVYVCwKKyAgICAgICAgICAgICAgICAgICAgJ3RpbWVvdXQnOiBUSU1FT1VULAorICAgICAgICAg
ICAgICAgICAgICAnY3Jhc2gnOiBDUkFTSCwKKyAgICAgICAgICAgICAgICAgICAgJ21pc3Npbmcn
OiBNSVNTSU5HfQorCisgICAgRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TID0ge1NLSVA6ICgnc2tp
cHBlZCcsICdza2lwcGVkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1M6
ICgncGFzcycsICdwYXNzZXMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFJ
TDogKCdmYWlsdXJlJywgJ2ZhaWx1cmVzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRFWFQ6ICgndGV4dCBkaWZmIG1pc21hdGNoJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXh0IGRpZmYgbWlzbWF0Y2gnKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSU1BR0U6ICgnaW1hZ2UgbWlzbWF0Y2gnLCAnaW1hZ2UgbWlzbWF0Y2gn
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfUExVU19URVhUOiAoJ2lt
YWdlIGFuZCB0ZXh0IG1pc21hdGNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2ltYWdlIGFuZCB0ZXh0IG1pc21hdGNoJyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENSQVNIOiAoJ3Rlc3Qgc2hlbGwgY3Jhc2gnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHNoZWxsIGNyYXNoZXMnKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNRU9VVDogKCd0ZXN0IHRpbWVkIG91
dCcsICd0ZXN0cyB0aW1lZCBvdXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TUlTU0lORzogKCdubyBleHBlY3RlZCByZXN1bHQgZm91bmQnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ25vIGV4cGVjdGVkIHJlc3VsdHMgZm91bmQnKX0KKwor
ICAgIEVYUEVDVEFUSU9OX09SREVSID0gKFBBU1MsIENSQVNILCBUSU1FT1VULCBNSVNTSU5HLCBJ
TUFHRV9QTFVTX1RFWFQsCisgICAgICAgVEVYVCwgSU1BR0UsIEZBSUwsIFNLSVApCisKKyAgICBC
QVNFX1BMQVRGT1JNUyA9ICgnbGludXgnLCAnbWFjJywgJ3dpbicpCisgICAgUExBVEZPUk1TID0g
QkFTRV9QTEFURk9STVMgKyAoJ3dpbi14cCcsICd3aW4tdmlzdGEnLCAnd2luLTcnKQorCisgICAg
QlVJTERfVFlQRVMgPSAoJ2RlYnVnJywgJ3JlbGVhc2UnKQorCisgICAgTU9ESUZJRVJTID0geydz
a2lwJzogU0tJUCwKKyAgICAgICAgICAgICAgICAgJ3dvbnRmaXgnOiBXT05URklYLAorICAgICAg
ICAgICAgICAgICAnZGVmZXInOiBERUZFUiwKKyAgICAgICAgICAgICAgICAgJ3Nsb3cnOiBTTE9X
LAorICAgICAgICAgICAgICAgICAncmViYXNlbGluZSc6IFJFQkFTRUxJTkUsCisgICAgICAgICAg
ICAgICAgICdub25lJzogTk9ORX0KKworICAgIFRJTUVMSU5FUyA9IHsnd29udGZpeCc6IFdPTlRG
SVgsCisgICAgICAgICAgICAgICAgICdub3cnOiBOT1csCisgICAgICAgICAgICAgICAgICdkZWZl
cic6IERFRkVSfQorCisgICAgUkVTVUxUX1RZUEVTID0geydza2lwJzogU0tJUCwKKyAgICAgICAg
ICAgICAgICAgICAgJ3Bhc3MnOiBQQVNTLAorICAgICAgICAgICAgICAgICAgICAnZmFpbCc6IEZB
SUwsCisgICAgICAgICAgICAgICAgICAgICdmbGFreSc6IEZMQUtZfQorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBhdGgsIGZ1bGxfdGVzdF9saXN0LCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSwK
KyAgICAgICAgaXNfbGludF9tb2RlLCBleHBlY3RhdGlvbnNfYXNfc3RyPU5vbmUsIHN1cHByZXNz
X2Vycm9ycz1GYWxzZSwKKyAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9VHJ1ZSk6CisgICAgICAg
ICIiIgorICAgICAgICBwYXRoOiBUaGUgcGF0aCB0byB0aGUgZXhwZWN0YXRpb24gZmlsZS4gQW4g
ZXJyb3IgaXMgdGhyb3duIGlmIGEgdGVzdCBpcworICAgICAgICAgICAgbGlzdGVkIG1vcmUgdGhh
biBvbmNlLgorICAgICAgICBmdWxsX3Rlc3RfbGlzdDogVGhlIGxpc3Qgb2YgYWxsIHRlc3RzIHRv
IGJlIHJ1biBwZW5kaW5nIHByb2Nlc3Npbmcgb2YKKyAgICAgICAgICAgIHRoZSBleHBlY3Rpb25z
IGZvciB0aG9zZSB0ZXN0cy4KKyAgICAgICAgcGxhdGZvcm06IFdoaWNoIHBsYXRmb3JtIGZyb20g
c2VsZi5QTEFURk9STVMgdG8gZmlsdGVyIHRlc3RzIGZvci4KKyAgICAgICAgaXNfZGVidWdfbW9k
ZTogV2hldGhlciB3ZSB0ZXN0aW5nIGEgdGVzdF9zaGVsbCBidWlsdCBkZWJ1ZyBtb2RlLgorICAg
ICAgICBpc19saW50X21vZGU6IFdoZXRoZXIgdGhpcyBpcyBqdXN0IGxpbnRpbmcgdGVzdF9leHBl
Y2F0YXRpb25zLnR4dC4KKyAgICAgICAgZXhwZWN0YXRpb25zX2FzX3N0cjogQ29udGVudHMgb2Yg
dGhlIGV4cGVjdGF0aW9ucyBmaWxlLiBVc2VkIGluc3RlYWQgb2YKKyAgICAgICAgICAgIHRoZSBw
YXRoLiBUaGlzIG1ha2VzIHVuaXR0ZXN0aW5nIHNhbmUuCisgICAgICAgIHN1cHByZXNzX2Vycm9y
czogV2hldGhlciB0byBzdXBwcmVzcyBsaW50IGVycm9ycy4KKyAgICAgICAgdGVzdHNfYXJlX3By
ZXNlbnQ6IFdoZXRoZXIgdGhlIHRlc3QgZmlsZXMgYXJlIHByZXNlbnQgaW4gdGhlIGxvY2FsCisg
ICAgICAgICAgICBmaWxlc3lzdGVtLiBUaGUgTFRURiBEYXNoYm9hcmQgdXNlcyBGYWxzZSBoZXJl
IHRvIGF2b2lkIGhhdmluZyB0bworICAgICAgICAgICAga2VlcCBhIGxvY2FsIGNvcHkgb2YgdGhl
IHRyZWUuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCisgICAgICAg
IHNlbGYuX2V4cGVjdGF0aW9uc19hc19zdHIgPSBleHBlY3RhdGlvbnNfYXNfc3RyCisgICAgICAg
IHNlbGYuX2lzX2xpbnRfbW9kZSA9IGlzX2xpbnRfbW9kZQorICAgICAgICBzZWxmLl90ZXN0c19h
cmVfcHJlc2VudCA9IHRlc3RzX2FyZV9wcmVzZW50CisgICAgICAgIHNlbGYuX2Z1bGxfdGVzdF9s
aXN0ID0gZnVsbF90ZXN0X2xpc3QKKyAgICAgICAgc2VsZi5fc3VwcHJlc3NfZXJyb3JzID0gc3Vw
cHJlc3NfZXJyb3JzCisgICAgICAgIHNlbGYuX2Vycm9ycyA9IFtdCisgICAgICAgIHNlbGYuX25v
bl9mYXRhbF9lcnJvcnMgPSBbXQorICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHNlbGYudG9fdGVz
dF9wbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQorICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSBpcyBO
b25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHBsYXRmb3JtICclcyci
ICUgKHBsYXRmb3JtKSkKKyAgICAgICAgc2VsZi5faXNfZGVidWdfbW9kZSA9IGlzX2RlYnVnX21v
ZGUKKworICAgICAgICAjIE1hcHMgcmVsYXRpdmUgdGVzdCBwYXRocyBhcyBsaXN0ZWQgaW4gdGhl
IGV4cGVjdGF0aW9ucyBmaWxlIHRvIGEKKyAgICAgICAgIyBsaXN0IG9mIG1hcHMgY29udGFpbmlu
ZyBtb2RpZmllcnMgYW5kIGV4cGVjdGF0aW9ucyBmb3IgZWFjaCB0aW1lCisgICAgICAgICMgdGhl
IHRlc3QgaXMgbGlzdGVkIGluIHRoZSBleHBlY3RhdGlvbnMgZmlsZS4KKyAgICAgICAgc2VsZi5f
YWxsX2V4cGVjdGF0aW9ucyA9IHt9CisKKyAgICAgICAgIyBNYXBzIGEgdGVzdCB0byBpdHMgbGlz
dCBvZiBleHBlY3RhdGlvbnMuCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25zID0g
e30KKworICAgICAgICAjIE1hcHMgYSB0ZXN0IHRvIGl0cyBsaXN0IG9mIG9wdGlvbnMgKHN0cmlu
ZyB2YWx1ZXMpCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fb3B0aW9ucyA9IHt9CisKKyAgICAgICAg
IyBNYXBzIGEgdGVzdCB0byBpdHMgbGlzdCBvZiBtb2RpZmllcnM6IHRoZSBjb25zdGFudHMgYXNz
b2NpYXRlZCB3aXRoCisgICAgICAgICMgdGhlIG9wdGlvbnMgbWludXMgYW55IGJ1ZyBvciBwbGF0
Zm9ybSBzdHJpbmdzCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fbW9kaWZpZXJzID0ge30KKworICAg
ICAgICAjIE1hcHMgYSB0ZXN0IHRvIHRoZSBiYXNlIHBhdGggdGhhdCBpdCB3YXMgbGlzdGVkIHdp
dGggaW4gdGhlIGxpc3QuCisgICAgICAgIHNlbGYuX3Rlc3RfbGlzdF9wYXRocyA9IHt9CisKKyAg
ICAgICAgc2VsZi5fbW9kaWZpZXJfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoc2VsZi5N
T0RJRklFUlMpCisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uX3RvX3Rlc3RzID0gc2VsZi5fZGlj
dF9vZl9zZXRzKHNlbGYuRVhQRUNUQVRJT05TKQorICAgICAgICBzZWxmLl90aW1lbGluZV90b190
ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0cyhzZWxmLlRJTUVMSU5FUykKKyAgICAgICAgc2VsZi5f
cmVzdWx0X3R5cGVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoc2VsZi5SRVNVTFRfVFlQ
RVMpCisKKyAgICAgICAgc2VsZi5fcmVhZChzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25z
KCkpCisKKyAgICBkZWYgX2RpY3Rfb2Zfc2V0cyhzZWxmLCBzdHJpbmdzX3RvX2NvbnN0YW50cyk6
CisgICAgICAgICIiIlRha2VzIGEgZGljdCBvZiBzdHJpbmdzLT5jb25zdGFudHMgYW5kIHJldHVy
bnMgYSBkaWN0IG1hcHBpbmcKKyAgICAgICAgZWFjaCBjb25zdGFudCB0byBhbiBlbXB0eSBzZXQu
IiIiCisgICAgICAgIGQgPSB7fQorICAgICAgICBmb3IgYyBpbiBzdHJpbmdzX3RvX2NvbnN0YW50
cy52YWx1ZXMoKToKKyAgICAgICAgICAgIGRbY10gPSBzZXQoKQorICAgICAgICByZXR1cm4gZAor
CisgICAgZGVmIF9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICAiIiJS
ZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSBpdGVyYXRlZCBvdmVyLiBBbGxvd3MgZm9yIG5v
dCBjYXJpbmcKKyAgICAgICAgYWJvdXQgd2hldGhlciB3ZSdyZSBpdGVyYXRpbmcgb3ZlciBhIGZp
bGUgb3IgYSBuZXctbGluZSBzZXBhcmF0ZWQKKyAgICAgICAgc3RyaW5nLiIiIgorICAgICAgICBp
ZiBzZWxmLl9leHBlY3RhdGlvbnNfYXNfc3RyOgorICAgICAgICAgICAgaXRlcmFibGUgPSBbeCAr
ICJcbiIgZm9yIHggaW4KKyAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNfYXNfc3Ry
LnNwbGl0KCJcbiIpXQorICAgICAgICAgICAgIyBTdHJpcCBmaW5hbCBlbnRyeSBpZiBpdCdzIGVt
cHR5IHRvIGF2b2lkIGFkZGVkIGluIGFuIGV4dHJhCisgICAgICAgICAgICAjIG5ld2xpbmUuCisg
ICAgICAgICAgICBpZiBpdGVyYWJsZVtsZW4oaXRlcmFibGUpIC0gMV0gPT0gIlxuIjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaXRlcmFibGVbOmxlbihpdGVyYWJsZSkgLSAxXQorICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhYmxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3Bl
bihzZWxmLl9wYXRoKQorCisgICAgZGVmIHRvX3Rlc3RfcGxhdGZvcm1fbmFtZShzZWxmLCBuYW1l
KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdGVzdCBleHBlY3RhdGlvbiBwbGF0Zm9ybSB0aGF0
IHdpbGwgYmUgdXNlZCBmb3IgYQorICAgICAgICBnaXZlbiBwbGF0Zm9ybSBuYW1lLCBvciBOb25l
IGlmIHRoZXJlIGlzIG5vIG1hdGNoLiIiIgorICAgICAgICBjaHJvbWl1bV9wcmVmaXggPSAnY2hy
b21pdW0tJworICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCisgICAgICAgIGlmIG5hbWUuc3Rh
cnRzd2l0aChjaHJvbWl1bV9wcmVmaXgpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVbbGVuKGNo
cm9taXVtX3ByZWZpeCk6XQorICAgICAgICBpZiBuYW1lIGluIHNlbGYuUExBVEZPUk1TOgorICAg
ICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRf
dGVzdF9zZXQoc2VsZiwgbW9kaWZpZXIsIGV4cGVjdGF0aW9uPU5vbmUsIGluY2x1ZGVfc2tpcHM9
VHJ1ZSk6CisgICAgICAgIGlmIGV4cGVjdGF0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICB0ZXN0
cyA9IHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzW21vZGlmaWVyXQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgdGVzdHMgPSAoc2VsZi5fZXhwZWN0YXRpb25fdG9fdGVzdHNbZXhwZWN0YXRpb25d
ICYKKyAgICAgICAgICAgICAgICBzZWxmLl9tb2RpZmllcl90b190ZXN0c1ttb2RpZmllcl0pCisK
KyAgICAgICAgaWYgbm90IGluY2x1ZGVfc2tpcHM6CisgICAgICAgICAgICB0ZXN0cyA9IHRlc3Rz
IC0gc2VsZi5nZXRfdGVzdF9zZXQoU0tJUCwgZXhwZWN0YXRpb24pCisKKyAgICAgICAgcmV0dXJu
IHRlc3RzCisKKyAgICBkZWYgZ2V0X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUoc2VsZiwgcmVzdWx0
X3R5cGUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0X3R5cGVfdG9fdGVzdHNbcmVzdWx0
X3R5cGVdCisKKyAgICBkZWYgZ2V0X3Rlc3RzX3dpdGhfdGltZWxpbmUoc2VsZiwgdGltZWxpbmUp
OgorICAgICAgICByZXR1cm4gc2VsZi5fdGltZWxpbmVfdG9fdGVzdHNbdGltZWxpbmVdCisKKyAg
ICBkZWYgZ2V0X29wdGlvbnMoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIlRoaXMgcmV0dXJucyB0
aGUgZW50aXJlIHNldCBvZiBvcHRpb25zIGZvciB0aGUgZ2l2ZW4gdGVzdAorICAgICAgICAodGhl
IG1vZGlmaWVycyBwbHVzIHRoZSBCVUdYWFhYIGlkZW50aWZpZXIpLiBUaGlzIGlzIHVzZWQgYnkg
dGhlCisgICAgICAgIExUVEYgZGFzaGJvYXJkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdGVz
dF90b19vcHRpb25zW3Rlc3RdCisKKyAgICBkZWYgaGFzX21vZGlmaWVyKHNlbGYsIHRlc3QsIG1v
ZGlmaWVyKToKKyAgICAgICAgcmV0dXJuIHRlc3QgaW4gc2VsZi5fbW9kaWZpZXJfdG9fdGVzdHNb
bW9kaWZpZXJdCisKKyAgICBkZWYgZ2V0X2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0KToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25zW3Rlc3RdCisKKyAgICBkZWYgZ2V0
X2V4cGVjdGF0aW9uc19qc29uX2Zvcl9hbGxfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICAjIFNw
ZWNpZnkgc2VwYXJhdG9ycyBpbiBvcmRlciB0byBnZXQgY29tcGFjdCBlbmNvZGluZy4KKyAgICAg
ICAgcmV0dXJuIEV4cGVjdGF0aW9uc0pzb25FbmNvZGVyKHNlcGFyYXRvcnM9KCcsJywgJzonKSku
ZW5jb2RlKAorICAgICAgICAgICAgc2VsZi5fYWxsX2V4cGVjdGF0aW9ucykKKworICAgIGRlZiBj
b250YWlucyhzZWxmLCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHRlc3QgaW4gc2VsZi5fdGVzdF90
b19leHBlY3RhdGlvbnMKKworICAgIGRlZiByZW1vdmVfcGxhdGZvcm1fZnJvbV9maWxlKHNlbGYs
IHRlc3RzLCBwbGF0Zm9ybSwgYmFja3VwPUZhbHNlKToKKyAgICAgICAgIiIiUmVtb3ZlIHRoZSBw
bGF0Zm9ybSBvcHRpb24gZnJvbSB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlLgorCisgICAgICAgIElm
IGEgdGVzdCBpcyBpbiB0aGUgdGVzdCBsaXN0IGFuZCBoYXMgYW4gb3B0aW9uIHRoYXQgbWF0Y2hl
cyB0aGUgZ2l2ZW4KKyAgICAgICAgcGxhdGZvcm0sIHJlbW92ZSB0aGUgbWF0Y2hpbmcgcGxhdGZv
cm0gYW5kIHNhdmUgdGhlIHVwZGF0ZWQgdGVzdCBiYWNrCisgICAgICAgIHRvIHRoZSBmaWxlLiBJ
ZiBubyBvdGhlciBwbGF0Zm9ybXMgcmVtYWluaW5nIGFmdGVyIHJlbW92YWwsIGRlbGV0ZSB0aGUK
KyAgICAgICAgdGVzdCBmcm9tIHRoZSBmaWxlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
dGVzdHM6IGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVkIHRvIHVwZGF0ZS4uCisgICAgICAgICAgcGxh
dGZvcm06IHdoaWNoIHBsYXRmb3JtIG9wdGlvbiB0byByZW1vdmUuCisgICAgICAgICAgYmFja3Vw
OiBpZiB0cnVlLCB0aGUgb3JpZ2luYWwgdGVzdCBleHBlY3RhdGlvbnMgZmlsZSBpcyBzYXZlZCBh
cworICAgICAgICAgICAgICAgICAgW3NlbGYuVEVTVF9MSVNUXS5vcmlnLllZWVlNTURESEhNTVNT
CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBubworICAgICAgICAiIiIKKworICAgICAg
ICBuZXdfZmlsZSA9IHNlbGYuX3BhdGggKyAnLm5ldycKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zygn
T3JpZ2luYWwgZmlsZTogIiVzIicsIHNlbGYuX3BhdGgpCisgICAgICAgIGxvZ2dpbmcuZGVidWco
J05ldyBmaWxlOiAiJXMiJywgbmV3X2ZpbGUpCisgICAgICAgIGZfb3JpZyA9IHNlbGYuX2dldF9p
dGVyYWJsZV9leHBlY3RhdGlvbnMoKQorICAgICAgICBmX25ldyA9IG9wZW4obmV3X2ZpbGUsICd3
JykKKworICAgICAgICB0ZXN0c19yZW1vdmVkID0gMAorICAgICAgICB0ZXN0c191cGRhdGVkID0g
MAorICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgIGZvciBsaW5lIGluIGZfb3JpZzoKKyAgICAg
ICAgICAgIGxpbmVubyArPSAxCisgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9nZXRfcGxhdGZv
cm1fdXBkYXRlX2FjdGlvbihsaW5lLCBsaW5lbm8sIHRlc3RzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisgICAgICAgICAg
ICBpZiBhY3Rpb24gPT0gTk9fQ0hBTkdFOgorICAgICAgICAgICAgICAgICMgU2F2ZSB0aGUgb3Jp
Z2luYWwgbGluZSBiYWNrIHRvIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygnTm8gY2hhbmdlIHRvIHRlc3Q6ICVzJywgbGluZSkKKyAgICAgICAgICAgICAgICBmX25ldy53
cml0ZShsaW5lKQorICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gUkVNT1ZFX1RFU1Q6CisgICAg
ICAgICAgICAgICAgdGVzdHNfcmVtb3ZlZCArPSAxCisgICAgICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCdUZXN0IHJlbW92ZWQ6ICVzJywgbGluZSkKKyAgICAgICAgICAgIGVsaWYgYWN0aW9uID09
IFJFTU9WRV9QTEFURk9STToKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoJzon
KQorICAgICAgICAgICAgICAgIG5ld19vcHRpb25zID0gcGFydHNbMF0ucmVwbGFjZShwbGF0Zm9y
bS51cHBlcigpICsgJyAnLCAnJywgMSkKKyAgICAgICAgICAgICAgICBuZXdfbGluZSA9ICgnJXM6
JXMnICUgKG5ld19vcHRpb25zLCBwYXJ0c1sxXSkpCisgICAgICAgICAgICAgICAgZl9uZXcud3Jp
dGUobmV3X2xpbmUpCisgICAgICAgICAgICAgICAgdGVzdHNfdXBkYXRlZCArPSAxCisgICAgICAg
ICAgICAgICAgbG9nZ2luZy5pbmZvKCdUZXN0IHVwZGF0ZWQ6ICcpCisgICAgICAgICAgICAgICAg
bG9nZ2luZy5pbmZvKCcgIG9sZDogJXMnLCBsaW5lKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcu
aW5mbygnICBuZXc6ICVzJywgbmV3X2xpbmUpCisgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSBB
RERfUExBVEZPUk1TX0VYQ0VQVF9USElTOgorICAgICAgICAgICAgICAgIHBhcnRzID0gbGluZS5z
cGxpdCgnOicpCisgICAgICAgICAgICAgICAgbmV3X29wdGlvbnMgPSBwYXJ0c1swXQorICAgICAg
ICAgICAgICAgIGZvciBwIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgICAgICAgICBw
ID0gcC51cHBlcigpOworICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSB0ZW1wIHNvbHV0
aW9uIGZvciByZWJhc2VsaW5pbmcgdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgIyBEbyBub3Qg
YWRkIHRhZ3MgV0lOLTcgYW5kIFdJTi1WSVNUQSB0byB0ZXN0IGV4cGVjdGF0aW9ucworICAgICAg
ICAgICAgICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBsaW5lIGRvZXMgbm90IHNwZWNpZnkgdGhl
IHBsYXRmb3JtIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgIyBUT0RPKHZpY3RvcncpOiBS
ZW1vdmUgV0lOLVZJU1RBIGFuZCBXSU4tNyBvbmNlIHdlIGhhdmUKKyAgICAgICAgICAgICAgICAg
ICAgIyByZWxpYWJsZSBXaW4gNyBhbmQgV2luIFZpc3RhIGJ1aWxkYm90cyBzZXR1cC4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgbm90IHAgaW4gKHBsYXRmb3JtLnVwcGVyKCksICdXSU4tVklTVEEn
LCAnV0lOLTcnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19vcHRpb25zICs9IHAgKyAn
ICcKKyAgICAgICAgICAgICAgICBuZXdfbGluZSA9ICgnJXM6JXMnICUgKG5ld19vcHRpb25zLCBw
YXJ0c1sxXSkpCisgICAgICAgICAgICAgICAgZl9uZXcud3JpdGUobmV3X2xpbmUpCisgICAgICAg
ICAgICAgICAgdGVzdHNfdXBkYXRlZCArPSAxCisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZv
KCdUZXN0IHVwZGF0ZWQ6ICcpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIG9sZDog
JXMnLCBsaW5lKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBuZXc6ICVzJywgbmV3
X2xpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Io
J1Vua25vd24gdXBkYXRlIGFjdGlvbjogJWQ7IGxpbmU6ICVzJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdGlvbiwgbGluZSkKKworICAgICAgICBsb2dnaW5nLmluZm8oJ1RvdGFs
IHRlc3RzIHJlbW92ZWQ6ICVkJywgdGVzdHNfcmVtb3ZlZCkKKyAgICAgICAgbG9nZ2luZy5pbmZv
KCdUb3RhbCB0ZXN0cyB1cGRhdGVkOiAlZCcsIHRlc3RzX3VwZGF0ZWQpCisKKyAgICAgICAgZl9v
cmlnLmNsb3NlKCkKKyAgICAgICAgZl9uZXcuY2xvc2UoKQorCisgICAgICAgIGlmIGJhY2t1cDoK
KyAgICAgICAgICAgIGRhdGVfc3VmZml4ID0gdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmxvY2FsdGltZSh0
aW1lLnRpbWUoKSkpCisgICAgICAgICAgICBiYWNrdXBfZmlsZSA9ICgnJXMub3JpZy4lcycgJSAo
c2VsZi5fcGF0aCwgZGF0ZV9zdWZmaXgpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMo
YmFja3VwX2ZpbGUpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShiYWNrdXBfZmlsZSkKKyAg
ICAgICAgICAgIGxvZ2dpbmcuaW5mbygnU2F2aW5nIG9yaWdpbmFsIGZpbGUgdG8gIiVzIicsIGJh
Y2t1cF9maWxlKQorICAgICAgICAgICAgb3MucmVuYW1lKHNlbGYuX3BhdGgsIGJhY2t1cF9maWxl
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCisKKyAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygnU2F2aW5nIG5ldyBmaWxlIHRvICIlcyInLCBzZWxmLl9wYXRo
KQorICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUsIHNlbGYuX3BhdGgpCisgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zX2xpbmUoc2VsZiwgbGluZSwgbGlu
ZW5vKToKKyAgICAgICAgIiIiUGFyc2VzIGEgbGluZSBmcm9tIHRlc3RfZXhwZWN0YXRpb25zLnR4
dCBhbmQgcmV0dXJucyBhIHR1cGxlCisgICAgICAgIHdpdGggdGhlIHRlc3QgcGF0aCwgb3B0aW9u
cyBhcyBhIGxpc3QsIGV4cGVjdGF0aW9ucyBhcyBhIGxpc3QuIiIiCisgICAgICAgIGxpbmUgPSBz
dHJpcF9jb21tZW50cyhsaW5lKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJl
dHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKKworICAgICAgICBvcHRpb25zID0gW10KKyAgICAgICAg
aWYgbGluZS5maW5kKCI6IikgaXMgLTE6CisgICAgICAgICAgICB0ZXN0X2FuZF9leHBlY3RhdGlv
biA9IGxpbmUuc3BsaXQoIj0iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFydHMgPSBs
aW5lLnNwbGl0KCI6IikKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9nZXRfb3B0aW9uc19s
aXN0KHBhcnRzWzBdKQorICAgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb24gPSBwYXJ0c1sx
XS5zcGxpdCgnPScpCisKKyAgICAgICAgdGVzdCA9IHRlc3RfYW5kX2V4cGVjdGF0aW9uWzBdLnN0
cmlwKCkKKyAgICAgICAgaWYgKGxlbih0ZXN0X2FuZF9leHBlY3RhdGlvbikgaXMgbm90IDIpOgor
ICAgICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywgIk1pc3NpbmcgZXhwZWN0YXRpb25z
LiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FuZF9leHBlY3RhdGlvbikKKyAg
ICAgICAgICAgIGV4cGVjdGF0aW9ucyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGV4cGVjdGF0aW9ucyA9IHNlbGYuX2dldF9vcHRpb25zX2xpc3QodGVzdF9hbmRfZXhwZWN0YXRp
b25bMV0pCisKKyAgICAgICAgcmV0dXJuICh0ZXN0LCBvcHRpb25zLCBleHBlY3RhdGlvbnMpCisK
KyAgICBkZWYgX2dldF9wbGF0Zm9ybV91cGRhdGVfYWN0aW9uKHNlbGYsIGxpbmUsIGxpbmVubywg
dGVzdHMsIHBsYXRmb3JtKToKKyAgICAgICAgIiIiQ2hlY2sgdGhlIHBsYXRmb3JtIG9wdGlvbiBh
bmQgcmV0dXJuIHRoZSBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4uCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICBsaW5lOiBjdXJyZW50IGxpbmUgaW4gdGVzdCBleHBlY3RhdGlvbnMgZmlsZS4K
KyAgICAgICAgICBsaW5lbm86IGN1cnJlbnQgbGluZSBudW1iZXIgb2YgbGluZQorICAgICAgICAg
IHRlc3RzOiBsaXN0IG9mIHRlc3RzIHRoYXQgbmVlZCB0byB1cGRhdGUuLgorICAgICAgICAgIHBs
YXRmb3JtOiB3aGljaCBwbGF0Zm9ybSBvcHRpb24gdG8gcmVtb3ZlLgorCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgTk9fQ0hBTkdFOiBubyBjaGFuZ2UgdG8gdGhlIGxpbmUgKGNvbW1lbnRz
LCB0ZXN0IG5vdCBpbiB0aGUgbGlzdCBldGMpCisgICAgICAgICAgUkVNT1ZFX1RFU1Q6IHJlbW92
ZSB0aGUgdGVzdCBmcm9tIGZpbGUuCisgICAgICAgICAgUkVNT1ZFX1BMQVRGT1JNOiByZW1vdmUg
dGhpcyBwbGF0Zm9ybSBvcHRpb24gZnJvbSB0aGUgdGVzdC4KKyAgICAgICAgICBBRERfUExBVEZP
Uk1TX0VYQ0VQVF9USElTOiBhZGQgYWxsIHRoZSBwbGF0Zm9ybXMgZXhjZXB0IHRoaXMgb25lLgor
ICAgICAgICAiIiIKKyAgICAgICAgdGVzdCwgb3B0aW9ucywgZXhwZWN0YXRpb25zID0gc2VsZi5w
YXJzZV9leHBlY3RhdGlvbnNfbGluZShsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubykKKyAgICAgICAg
aWYgbm90IHRlc3Qgb3IgdGVzdCBub3QgaW4gdGVzdHM6CisgICAgICAgICAgICByZXR1cm4gTk9f
Q0hBTkdFCisKKyAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IEZhbHNlCisgICAgICAgIGZvciBv
cHRpb24gaW4gb3B0aW9uczoKKyAgICAgICAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLlBMQVRGT1JN
UzoKKyAgICAgICAgICAgICAgICBoYXNfYW55X3BsYXRmb3JtID0gVHJ1ZQorICAgICAgICAgICAg
ICAgIGlmIG5vdCBvcHRpb24gPT0gcGxhdGZvcm06CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSRU1PVkVfUExBVEZPUk0KKworICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHBsYXRmb3JtIHNw
ZWNpZmllZCwgdGhlbiBpdCBtZWFucyBhcHBseSB0byBhbGwKKyAgICAgICAgIyBwbGF0Zm9ybXMu
IFJldHVybiB0aGUgYWN0aW9uIHRvIGFkZCBhbGwgdGhlIHBsYXRmb3JtcyBleGNlcHQgdGhpcwor
ICAgICAgICAjIG9uZS4KKyAgICAgICAgaWYgbm90IGhhc19hbnlfcGxhdGZvcm06CisgICAgICAg
ICAgICByZXR1cm4gQUREX1BMQVRGT1JNU19FWENFUFRfVEhJUworCisgICAgICAgIHJldHVybiBS
RU1PVkVfVEVTVAorCisgICAgZGVmIF9oYXNfdmFsaWRfbW9kaWZpZXJzX2Zvcl9jdXJyZW50X3Bs
YXRmb3JtKHNlbGYsIG9wdGlvbnMsIGxpbmVubywKKyAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRp
b25zLCBtb2RpZmllcnMpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQg
cGxhdGZvcm0gaXMgaW4gdGhlIG9wdGlvbnMgbGlzdCBvciBpZgorICAgICAgICBubyBwbGF0Zm9y
bXMgYXJlIGxpc3RlZCBhbmQgaWYgdGhlcmUgYXJlIG5vIGZhdGFsIGVycm9ycyBpbiB0aGUKKyAg
ICAgICAgb3B0aW9ucyBsaXN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgb3B0aW9uczog
TGlzdCBvZiBsb3dlcmNhc2Ugb3B0aW9ucy4KKyAgICAgICAgICBsaW5lbm86IFRoZSBsaW5lIGlu
IHRoZSBmaWxlIHdoZXJlIHRoZSB0ZXN0IGlzIGxpc3RlZC4KKyAgICAgICAgICB0ZXN0X2FuZF9l
eHBlY3RhdGlvbnM6IFRoZSBwYXRoIGFuZCBleHBlY3RhdGlvbnMgZm9yIHRoZSB0ZXN0LgorICAg
ICAgICAgIG1vZGlmaWVyczogVGhlIHNldCB0byBwb3B1bGF0ZSB3aXRoIG1vZGlmaWVycy4KKyAg
ICAgICAgIiIiCisgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBGYWxzZQorICAgICAgICBoYXNf
YnVnX2lkID0gRmFsc2UKKyAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICAg
ICAgaWYgb3B0aW9uIGluIHNlbGYuTU9ESUZJRVJTOgorICAgICAgICAgICAgICAgIG1vZGlmaWVy
cy5hZGQob3B0aW9uKQorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5QTEFURk9STVM6
CisgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKKyAgICAgICAgICAgIGVs
aWYgb3B0aW9uLnN0YXJ0c3dpdGgoJ2J1ZycpOgorICAgICAgICAgICAgICAgIGhhc19idWdfaWQg
PSBUcnVlCisgICAgICAgICAgICBlbGlmIG9wdGlvbiBub3QgaW4gc2VsZi5CVUlMRF9UWVBFUzoK
KyAgICAgICAgICAgICAgICBzZWxmLl9hZGRfZXJyb3IobGluZW5vLCAnSW52YWxpZCBtb2RpZmll
ciBmb3IgdGVzdDogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
LCB0ZXN0X2FuZF9leHBlY3RhdGlvbnMpCisKKyAgICAgICAgaWYgaGFzX2FueV9wbGF0Zm9ybSBh
bmQgbm90IHNlbGYuX21hdGNoX3BsYXRmb3JtKG9wdGlvbnMpOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAgICAgaWYgbm90IGhhc19idWdfaWQgYW5kICd3b250Zml4JyBub3QgaW4g
b3B0aW9uczoKKyAgICAgICAgICAgICMgVE9ETyhvamFuKTogVHVybiB0aGlzIGludG8gYW4gQWRk
RXJyb3IgY2FsbCBvbmNlIGFsbCB0aGUKKyAgICAgICAgICAgICMgdGVzdHMgaGF2ZSBCVUcgaWRl
bnRpZmllcnMuCisgICAgICAgICAgICBzZWxmLl9sb2dfbm9uX2ZhdGFsX2Vycm9yKGxpbmVubywg
J1Rlc3QgbGFja3MgQlVHIG1vZGlmaWVyLicsCisgICAgICAgICAgICAgICAgdGVzdF9hbmRfZXhw
ZWN0YXRpb25zKQorCisgICAgICAgIGlmICdyZWxlYXNlJyBpbiBvcHRpb25zIG9yICdkZWJ1Zycg
aW4gb3B0aW9uczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2lzX2RlYnVnX21vZGUgYW5kICdkZWJ1
Zycgbm90IGluIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg
ICAgICBpZiBub3Qgc2VsZi5faXNfZGVidWdfbW9kZSBhbmQgJ3JlbGVhc2UnIG5vdCBpbiBvcHRp
b25zOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmICd3b250Zml4
JyBpbiBvcHRpb25zIGFuZCAnZGVmZXInIGluIG9wdGlvbnM6CisgICAgICAgICAgICBzZWxmLl9h
ZGRfZXJyb3IobGluZW5vLCAnVGVzdCBjYW5ub3QgYmUgYm90aCBERUZFUiBhbmQgV09OVEZJWC4n
LAorICAgICAgICAgICAgICAgIHRlc3RfYW5kX2V4cGVjdGF0aW9ucykKKworICAgICAgICBpZiBz
ZWxmLl9pc19saW50X21vZGUgYW5kICdyZWJhc2VsaW5lJyBpbiBvcHRpb25zOgorICAgICAgICAg
ICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywKKyAgICAgICAgICAgICAgICAnUkVCQVNFTElORSBz
aG91bGQgb25seSBiZSB1c2VkIGZvciBydW5uaW5nIHJlYmFzZWxpbmUucHkuICcKKyAgICAgICAg
ICAgICAgICAnQ2Fubm90IGJlIGNoZWNrZWQgaW4uJywgdGVzdF9hbmRfZXhwZWN0YXRpb25zKQor
CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX21hdGNoX3BsYXRmb3JtKHNlbGYsIG9w
dGlvbnMpOgorICAgICAgICAiIiJNYXRjaCB0aGUgbGlzdCBvZiBvcHRpb25zIGFnYWluc3Qgb3Vy
IHNwZWNpZmllZCBwbGF0Zm9ybS4gSWYgYW55CisgICAgICAgIG9mIHRoZSBvcHRpb25zIHByZWZp
eC1tYXRjaCBzZWxmLl9wbGF0Zm9ybSwgcmV0dXJuIFRydWUuIFRoaXMgaGFuZGxlcworICAgICAg
ICB0aGUgY2FzZSB3aGVyZSBhIHRlc3QgaXMgbWFya2VkIFdJTiBhbmQgdGhlIHBsYXRmb3JtIGlz
IFdJTi1WSVNUQS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIG9wdGlvbnM6IGxpc3Qgb2Yg
b3B0aW9ucworICAgICAgICAiIiIKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRpb25zOgorICAgICAg
ICAgICAgaWYgc2VsZi5fcGxhdGZvcm0uc3RhcnRzd2l0aChvcHQpOgorICAgICAgICAgICAgICAg
IHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9hZGRfdG9fYWxs
X2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0LCBvcHRpb25zLCBleHBlY3RhdGlvbnMpOgorICAgICAg
ICAjIE1ha2UgYWxsIHBhdGhzIHVuaXgtc3R5bGUgc28gdGhlIGRhc2hib2FyZCBkb2Vzbid0IG5l
ZWQgdG8uCisgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAgICBp
ZiBub3QgdGVzdCBpbiBzZWxmLl9hbGxfZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgc2VsZi5f
YWxsX2V4cGVjdGF0aW9uc1t0ZXN0XSA9IFtdCisgICAgICAgIHNlbGYuX2FsbF9leHBlY3RhdGlv
bnNbdGVzdF0uYXBwZW5kKAorICAgICAgICAgICAgTW9kaWZpZXJzQW5kRXhwZWN0YXRpb25zKG9w
dGlvbnMsIGV4cGVjdGF0aW9ucykpCisKKyAgICBkZWYgX3JlYWQoc2VsZiwgZXhwZWN0YXRpb25z
KToKKyAgICAgICAgIiIiRm9yIGVhY2ggdGVzdCBpbiBhbiBleHBlY3RhdGlvbnMgaXRlcmFibGUs
IGdlbmVyYXRlIHRoZQorICAgICAgICBleHBlY3RhdGlvbnMgZm9yIGl0LiIiIgorICAgICAgICBs
aW5lbm8gPSAwCisgICAgICAgIGZvciBsaW5lIGluIGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAg
IGxpbmVubyArPSAxCisKKyAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoLCBvcHRpb25zLCBleHBl
Y3RhdGlvbnMgPSBcCisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9leHBlY3RhdGlvbnNfbGlu
ZShsaW5lLCBsaW5lbm8pCisgICAgICAgICAgICBpZiBub3QgZXhwZWN0YXRpb25zOgorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNlbGYuX2FkZF90b19hbGxfZXhwZWN0
YXRpb25zKHRlc3RfbGlzdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAiLmpvaW4ob3B0aW9ucykudXBwZXIoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKGV4cGVjdGF0aW9ucykudXBwZXIoKSkKKwor
ICAgICAgICAgICAgbW9kaWZpZXJzID0gc2V0KCkKKyAgICAgICAgICAgIGlmIG9wdGlvbnMgYW5k
IG5vdCBzZWxmLl9oYXNfdmFsaWRfbW9kaWZpZXJzX2Zvcl9jdXJyZW50X3BsYXRmb3JtKAorICAg
ICAgICAgICAgICAgIG9wdGlvbnMsIGxpbmVubywgdGVzdF9saXN0X3BhdGgsIG1vZGlmaWVycyk6
CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZXhwZWN0YXRpb25zID0g
c2VsZi5fcGFyc2VfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgbGluZW5vLAorICAgICAgICAg
ICAgICAgIHRlc3RfbGlzdF9wYXRoKQorCisgICAgICAgICAgICBpZiAnc2xvdycgaW4gb3B0aW9u
cyBhbmQgVElNRU9VVCBpbiBleHBlY3RhdGlvbnM6CisgICAgICAgICAgICAgICAgc2VsZi5fYWRk
X2Vycm9yKGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgJ0EgdGVzdCBjYW4gbm90IGJlIGJv
dGggc2xvdyBhbmQgdGltZW91dC4gSWYgaXQgdGltZXMgb3V0ICcKKyAgICAgICAgICAgICAgICAg
ICAgJ2luZGVmaW5pdGVseSwgdGhlbiBpdCBzaG91bGQgYmUganVzdCB0aW1lb3V0LicsCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoKQorCisgICAgICAgICAgICBmdWxsX3BhdGgg
PSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0X3BhdGgpCisgICAgICAgICAgICBm
dWxsX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICMgV2Vi
S2l0J3Mgd2F5IG9mIHNraXBwaW5nIHRlc3RzIGlzIHRvIGFkZCBhIC1kaXNhYmxlZCBzdWZmaXgu
CisgICAgICAgICAgICAjIFNvIHdlIHNob3VsZCBjb25zaWRlciB0aGUgcGF0aCBleGlzdGluZyBp
ZiB0aGUgcGF0aCBvciB0aGUKKyAgICAgICAgICAgICMgLWRpc2FibGVkIHZlcnNpb24gZXhpc3Rz
LgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RzX2FyZV9wcmVzZW50IGFuZCBub3Qgb3MucGF0
aC5leGlzdHMoZnVsbF9wYXRoKQorICAgICAgICAgICAgICAgIGFuZCBub3Qgb3MucGF0aC5leGlz
dHMoZnVsbF9wYXRoICsgJy1kaXNhYmxlZCcpKToKKyAgICAgICAgICAgICAgICAjIExvZyBhIG5v
biBmYXRhbCBlcnJvciBoZXJlIHNpbmNlIHlvdSBoaXQgdGhpcyBjYXNlIGFueQorICAgICAgICAg
ICAgICAgICMgdGltZSB5b3UgdXBkYXRlIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB3aXRob3V0IHN5
bmNpbmcKKyAgICAgICAgICAgICAgICAjIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkKKyAgICAg
ICAgICAgICAgICBzZWxmLl9sb2dfbm9uX2ZhdGFsX2Vycm9yKGxpbmVubywgJ1BhdGggZG9lcyBu
b3QgZXhpc3QuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rf
bGlzdF9wYXRoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLl9mdWxsX3Rlc3RfbGlzdDoKKyAgICAgICAgICAgICAgICB0ZXN0cyA9IFt0ZXN0X2xp
c3RfcGF0aF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGVzdHMgPSBzZWxm
Ll9leHBhbmRfdGVzdHModGVzdF9saXN0X3BhdGgpCisKKyAgICAgICAgICAgIHNlbGYuX2FkZF90
ZXN0cyh0ZXN0cywgZXhwZWN0YXRpb25zLCB0ZXN0X2xpc3RfcGF0aCwgbGluZW5vLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLCBvcHRpb25zKQorCisgICAgICAgIGlmIG5v
dCBzZWxmLl9zdXBwcmVzc19lcnJvcnMgYW5kICgKKyAgICAgICAgICAgIGxlbihzZWxmLl9lcnJv
cnMpIG9yIGxlbihzZWxmLl9ub25fZmF0YWxfZXJyb3JzKSk6CisgICAgICAgICAgICBpZiBzZWxm
Ll9pc19kZWJ1Z19tb2RlOgorICAgICAgICAgICAgICAgIGJ1aWxkX3R5cGUgPSAnREVCVUcnCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJ1aWxkX3R5cGUgPSAnUkVMRUFTRScK
KyAgICAgICAgICAgIHByaW50ICJcbkZBSUxVUkVTIEZPUiBQTEFURk9STTogJXMsIEJVSUxEX1RZ
UEU6ICVzIiBcCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fcGxhdGZvcm0udXBwZXIoKSwgYnVp
bGRfdHlwZSkKKworICAgICAgICAgICAgZm9yIGVycm9yIGluIHNlbGYuX25vbl9mYXRhbF9lcnJv
cnM6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihlcnJvcikKKyAgICAgICAgICAgIGlm
IGxlbihzZWxmLl9lcnJvcnMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCdc
bicuam9pbihtYXAoc3RyLCBzZWxmLl9lcnJvcnMpKSkKKworICAgICAgICAjIE5vdyBhZGQgaW4g
dGhlIHRlc3RzIHRoYXQgd2VyZW4ndCBwcmVzZW50IGluIHRoZSBleHBlY3RhdGlvbnMgZmlsZQor
ICAgICAgICBleHBlY3RhdGlvbnMgPSBzZXQoW1BBU1NdKQorICAgICAgICBvcHRpb25zID0gW10K
KyAgICAgICAgbW9kaWZpZXJzID0gW10KKyAgICAgICAgaWYgc2VsZi5fZnVsbF90ZXN0X2xpc3Q6
CisgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9mdWxsX3Rlc3RfbGlzdDoKKyAgICAgICAg
ICAgICAgICBpZiBub3QgdGVzdCBpbiBzZWxmLl90ZXN0X2xpc3RfcGF0aHM6CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2FkZF90ZXN0KHRlc3QsIG1vZGlmaWVycywgZXhwZWN0YXRpb25zLCBv
cHRpb25zKQorCisgICAgZGVmIF9nZXRfb3B0aW9uc19saXN0KHNlbGYsIGxpc3RTdHJpbmcpOgor
ICAgICAgICByZXR1cm4gW3BhcnQuc3RyaXAoKS5sb3dlcigpIGZvciBwYXJ0IGluIGxpc3RTdHJp
bmcuc3RyaXAoKS5zcGxpdCgnICcpXQorCisgICAgZGVmIF9wYXJzZV9leHBlY3RhdGlvbnMoc2Vs
ZiwgZXhwZWN0YXRpb25zLCBsaW5lbm8sIHRlc3RfbGlzdF9wYXRoKToKKyAgICAgICAgcmVzdWx0
ID0gc2V0KCkKKyAgICAgICAgZm9yIHBhcnQgaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAg
aWYgbm90IHBhcnQgaW4gc2VsZi5FWFBFQ1RBVElPTlM6CisgICAgICAgICAgICAgICAgc2VsZi5f
YWRkX2Vycm9yKGxpbmVubywgJ1Vuc3VwcG9ydGVkIGV4cGVjdGF0aW9uOiAlcycgJSBwYXJ0LAor
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZQorICAgICAgICAgICAgZXhwZWN0YXRpb24gPSBzZWxmLkVYUEVDVEFUSU9OU1twYXJ0XQor
ICAgICAgICAgICAgcmVzdWx0LmFkZChleHBlY3RhdGlvbikKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dAorCisgICAgZGVmIF9leHBhbmRfdGVzdHMoc2VsZiwgdGVzdF9saXN0X3BhdGgpOgorICAgICAg
ICAiIiJDb252ZXJ0IHRoZSB0ZXN0IHNwZWNpZmljYXRpb24gdG8gYW4gYWJzb2x1dGUsIG5vcm1h
bGl6ZWQKKyAgICAgICAgcGF0aCBhbmQgbWFrZSBzdXJlIGRpcmVjdG9yaWVzIGVuZCB3aXRoIHRo
ZSBPUyBwYXRoIHNlcGFyYXRvci4iIiIKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRo
X3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9saXN0X3BhdGgpCisgICAgICAgIHBhdGgg
PSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIHBhdGggPSBzZWxmLl9maXhfZGlyKHBh
dGgpCisKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fZnVs
bF90ZXN0X2xpc3Q6CisgICAgICAgICAgICBpZiB0ZXN0LnN0YXJ0c3dpdGgocGF0aCk6CisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZXN0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisK
KyAgICBkZWYgX2ZpeF9kaXIoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkNoZWNrIHRvIHNlZSBp
ZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBkaXJlY3RvcnksIGFuZCBpZiBzbywgYXBwZW5kCisgICAg
ICAgIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeS4iIiIKKyAgICAgICAgaWYg
c2VsZi5fdGVzdHNfYXJlX3ByZXNlbnQ6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBh
dGgpOgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJycpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIHdlIGNhbid0IGNoZWNrIHRoZSBmaWxlc3lzdGVt
IHRvIHNlZSBpZiB0aGlzIGlzIGEgZGlyZWN0b3J5LAorICAgICAgICAgICAgIyB3ZSBhc3N1bWUg
dGhhdCBmaWxlcyB3L28gYW4gZXh0ZW5zaW9uIGFyZSBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAg
ICMgVE9ETyhkcHJhbmtlKTogV2hhdCBoYXBwZW5zIHcvIExheW91dFRlc3RzL2NzczIuMSA/Cisg
ICAgICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KHBhdGgpWzFdID09ICcnOgorICAgICAgICAg
ICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJycpCisgICAgICAgIHJldHVybiBwYXRo
CisKKyAgICBkZWYgX2FkZF90ZXN0cyhzZWxmLCB0ZXN0cywgZXhwZWN0YXRpb25zLCB0ZXN0X2xp
c3RfcGF0aCwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycywgb3B0aW9ucyk6
CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgaWYgc2VsZi5fYWxyZWFk
eV9zZWVuX3Rlc3QodGVzdCwgdGVzdF9saXN0X3BhdGgsIGxpbmVubyk6CisgICAgICAgICAgICAg
ICAgY29udGludWUKKworICAgICAgICAgICAgc2VsZi5fY2xlYXJfZXhwZWN0YXRpb25zX2Zvcl90
ZXN0KHRlc3QsIHRlc3RfbGlzdF9wYXRoKQorICAgICAgICAgICAgc2VsZi5fYWRkX3Rlc3QodGVz
dCwgbW9kaWZpZXJzLCBleHBlY3RhdGlvbnMsIG9wdGlvbnMpCisKKyAgICBkZWYgX2FkZF90ZXN0
KHNlbGYsIHRlc3QsIG1vZGlmaWVycywgZXhwZWN0YXRpb25zLCBvcHRpb25zKToKKyAgICAgICAg
IiIiU2V0cyB0aGUgZXhwZWN0ZWQgc3RhdGUgZm9yIGEgZ2l2ZW4gdGVzdC4KKworICAgICAgICBU
aGlzIHJvdXRpbmUgYXNzdW1lcyB0aGUgdGVzdCBoYXMgbm90IGJlZW4gYWRkZWQgYmVmb3JlLiBJ
ZiBpdCBoYXMsCisgICAgICAgIHVzZSBfQ2xlYXJFeHBlY3RhdGlvbnNGb3JUZXN0KCkgdG8gcmVz
ZXQgdGhlIHN0YXRlIHByaW9yIHRvCisgICAgICAgIGNhbGxpbmcgdGhpcy4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHRlc3Q6IHRlc3QgdG8gYWRkCisgICAgICAgICAgbW9kaWZpZXJzOiBz
ZXF1ZW5jZSBvZiBtb2RpZmllciBrZXl3b3JkcyAoJ3dvbnRmaXgnLCAnc2xvdycsIGV0Yy4pCisg
ICAgICAgICAgZXhwZWN0YXRpb25zOiBzZXF1ZW5jZSBvZiBleHBlY3RhdGlvbnMgKFBBU1MsIElN
QUdFLCBldGMuKQorICAgICAgICAgIG9wdGlvbnM6IHNlcXVlbmNlIG9mIGtleXdvcmRzIGFuZCBi
dWcgaWRlbnRpZmllcnMuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25zW3Rl
c3RdID0gZXhwZWN0YXRpb25zCisgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBleHBlY3RhdGlv
bnM6CisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbl90b190ZXN0c1tleHBlY3RhdGlvbl0u
YWRkKHRlc3QpCisKKyAgICAgICAgc2VsZi5fdGVzdF90b19vcHRpb25zW3Rlc3RdID0gb3B0aW9u
cworICAgICAgICBzZWxmLl90ZXN0X3RvX21vZGlmaWVyc1t0ZXN0XSA9IHNldCgpCisgICAgICAg
IGZvciBtb2RpZmllciBpbiBtb2RpZmllcnM6CisgICAgICAgICAgICBtb2RfdmFsdWUgPSBzZWxm
Lk1PRElGSUVSU1ttb2RpZmllcl0KKyAgICAgICAgICAgIHNlbGYuX21vZGlmaWVyX3RvX3Rlc3Rz
W21vZF92YWx1ZV0uYWRkKHRlc3QpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3RvX21vZGlmaWVy
c1t0ZXN0XS5hZGQobW9kX3ZhbHVlKQorCisgICAgICAgIGlmICd3b250Zml4JyBpbiBtb2RpZmll
cnM6CisgICAgICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0c1tXT05URklYXS5hZGQodGVz
dCkKKyAgICAgICAgZWxpZiAnZGVmZXInIGluIG1vZGlmaWVyczoKKyAgICAgICAgICAgIHNlbGYu
X3RpbWVsaW5lX3RvX3Rlc3RzW0RFRkVSXS5hZGQodGVzdCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX3RpbWVsaW5lX3RvX3Rlc3RzW05PV10uYWRkKHRlc3QpCisKKyAgICAgICAg
aWYgJ3NraXAnIGluIG1vZGlmaWVyczoKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3Rv
X3Rlc3RzW1NLSVBdLmFkZCh0ZXN0KQorICAgICAgICBlbGlmIGV4cGVjdGF0aW9ucyA9PSBzZXQo
W1BBU1NdKToKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzW1BBU1NdLmFk
ZCh0ZXN0KQorICAgICAgICBlbGlmIGxlbihleHBlY3RhdGlvbnMpID4gMToKKyAgICAgICAgICAg
IHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzW0ZMQUtZXS5hZGQodGVzdCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzW0ZBSUxdLmFkZCh0ZXN0
KQorCisgICAgZGVmIF9jbGVhcl9leHBlY3RhdGlvbnNfZm9yX3Rlc3Qoc2VsZiwgdGVzdCwgdGVz
dF9saXN0X3BhdGgpOgorICAgICAgICAiIiJSZW1vdmUgcHJleGlzdGluZyBleHBlY3RhdGlvbnMg
Zm9yIHRoaXMgdGVzdC4KKyAgICAgICAgVGhpcyBoYXBwZW5zIGlmIHdlIGFyZSBzZWVpbmcgYSBt
b3JlIHByZWNpc2UgcGF0aAorICAgICAgICB0aGFuIGEgcHJldmlvdXMgbGlzdGluZy4KKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIHRlc3QgaW4gc2VsZi5fdGVzdF9saXN0X3BhdGhzOgorICAgICAg
ICAgICAgc2VsZi5fdGVzdF90b19leHBlY3RhdGlvbnMucG9wKHRlc3QsICcnKQorICAgICAgICAg
ICAgc2VsZi5fcmVtb3ZlX2Zyb21fc2V0cyh0ZXN0LCBzZWxmLl9leHBlY3RhdGlvbl90b190ZXN0
cykKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9mcm9tX3NldHModGVzdCwgc2VsZi5fbW9kaWZp
ZXJfdG9fdGVzdHMpCisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfZnJvbV9zZXRzKHRlc3QsIHNl
bGYuX3RpbWVsaW5lX3RvX3Rlc3RzKQorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2Zyb21fc2V0
cyh0ZXN0LCBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0cykKKworICAgICAgICBzZWxmLl90ZXN0
X2xpc3RfcGF0aHNbdGVzdF0gPSBvcy5wYXRoLm5vcm1wYXRoKHRlc3RfbGlzdF9wYXRoKQorCisg
ICAgZGVmIF9yZW1vdmVfZnJvbV9zZXRzKHNlbGYsIHRlc3QsIGRpY3QpOgorICAgICAgICAiIiJS
ZW1vdmVzIHRoZSBnaXZlbiB0ZXN0IGZyb20gdGhlIHNldHMgaW4gdGhlIGRpY3Rpb25hcnkuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0OiB0ZXN0IHRvIGxvb2sgZm9yCisgICAgICAg
ICAgZGljdDogZGljdCBvZiBzZXRzIG9mIGZpbGVzIiIiCisgICAgICAgIGZvciBzZXRfb2ZfdGVz
dHMgaW4gZGljdC5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICBpZiB0ZXN0IGluIHNldF9vZl90
ZXN0czoKKyAgICAgICAgICAgICAgICBzZXRfb2ZfdGVzdHMucmVtb3ZlKHRlc3QpCisKKyAgICBk
ZWYgX2FscmVhZHlfc2Vlbl90ZXN0KHNlbGYsIHRlc3QsIHRlc3RfbGlzdF9wYXRoLCBsaW5lbm8p
OgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWYgd2UndmUgYWxyZWFkeSBzZWVuIGEgbW9yZSBw
cmVjaXNlIHBhdGggZm9yIHRoaXMgdGVzdAorICAgICAgICB0aGFuIHRoZSB0ZXN0X2xpc3RfcGF0
aC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCB0ZXN0IGluIHNlbGYuX3Rlc3RfbGlzdF9w
YXRoczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHByZXZfYmFzZV9wYXRo
ID0gc2VsZi5fdGVzdF9saXN0X3BhdGhzW3Rlc3RdCisgICAgICAgIGlmIChwcmV2X2Jhc2VfcGF0
aCA9PSBvcy5wYXRoLm5vcm1wYXRoKHRlc3RfbGlzdF9wYXRoKSk6CisgICAgICAgICAgICBzZWxm
Ll9hZGRfZXJyb3IobGluZW5vLCAnRHVwbGljYXRlIGV4cGVjdGF0aW9ucy4nLCB0ZXN0KQorICAg
ICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkg
c2VlbiBhIG1vcmUgcHJlY2lzZSBwYXRoLgorICAgICAgICByZXR1cm4gcHJldl9iYXNlX3BhdGgu
c3RhcnRzd2l0aChvcy5wYXRoLm5vcm1wYXRoKHRlc3RfbGlzdF9wYXRoKSkKKworICAgIGRlZiBf
YWRkX2Vycm9yKHNlbGYsIGxpbmVubywgbXNnLCBwYXRoKToKKyAgICAgICAgIiIiUmVwb3J0cyBh
biBlcnJvciB0aGF0IHdpbGwgcHJldmVudCBydW5uaW5nIHRoZSB0ZXN0cy4gRG9lcyBub3QKKyAg
ICAgICAgaW1tZWRpYXRlbHkgcmFpc2UgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugd2UnZCBsaWtlIHRv
IGFnZ3JlZ2F0ZSBhbGwgdGhlCisgICAgICAgIGVycm9ycyBzbyB0aGV5IGNhbiBhbGwgYmUgcHJp
bnRlZCBvdXQuIiIiCisgICAgICAgIHNlbGYuX2Vycm9ycy5hcHBlbmQoJ1xuTGluZTolcyAlcyAl
cycgJSAobGluZW5vLCBtc2csIHBhdGgpKQorCisgICAgZGVmIF9sb2dfbm9uX2ZhdGFsX2Vycm9y
KHNlbGYsIGxpbmVubywgbXNnLCBwYXRoKToKKyAgICAgICAgIiIiUmVwb3J0cyBhbiBlcnJvciB0
aGF0IHdpbGwgbm90IHByZXZlbnQgcnVubmluZyB0aGUgdGVzdHMuIFRoZXNlIGFyZQorICAgICAg
ICBzdGlsbCBlcnJvcnMsIGJ1dCBub3QgYmFkIGVub3VnaCB0byB3YXJyYW50IGJyZWFraW5nIHRl
c3QgcnVubmluZy4iIiIKKyAgICAgICAgc2VsZi5fbm9uX2ZhdGFsX2Vycm9ycy5hcHBlbmQoJ0xp
bmU6JXMgJXMgJXMnICUgKGxpbmVubywgbXNnLCBwYXRoKSkKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZXhwZWN0YXRpb25zLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3Rlc3RfZmFpbHVyZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9mYWlsdXJl
cy5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmFpbHVyZXMucHkJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjY3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEw
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworIiIiQ2xhc3NlcyBmb3IgZmFpbHVyZXMgdGhhdCBvY2N1ciBkdXJpbmcgdGVzdHMuIiIiCisK
K2ltcG9ydCBvcworaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCisKKworZGVmIGRldGVybWluZV9y
ZXN1bHRfdHlwZShmYWlsdXJlX2xpc3QpOgorICAgICIiIlRha2VzIGEgc2V0IG9mIHRlc3RfZmFp
bHVyZXMgYW5kIHJldHVybnMgd2hpY2ggcmVzdWx0IHR5cGUgYmVzdCBmaXRzCisgICAgdGhlIGxp
c3Qgb2YgZmFpbHVyZXMuICJCZXN0IGZpdHMiIG1lYW5zIHdlIHVzZSB0aGUgd29yc3QgdHlwZSBv
ZiBmYWlsdXJlLgorCisgICAgUmV0dXJuczoKKyAgICAgIG9uZSBvZiB0aGUgdGVzdF9leHBlY3Rh
dGlvbnMgcmVzdWx0IHR5cGVzIC0gUEFTUywgVEVYVCwgQ1JBU0gsIGV0Yy4iIiIKKworICAgIGlm
IG5vdCBmYWlsdXJlX2xpc3Qgb3IgbGVuKGZhaWx1cmVfbGlzdCkgPT0gMDoKKyAgICAgICAgcmV0
dXJuIHRlc3RfZXhwZWN0YXRpb25zLlBBU1MKKworICAgIGZhaWx1cmVfdHlwZXMgPSBbdHlwZShm
KSBmb3IgZiBpbiBmYWlsdXJlX2xpc3RdCisgICAgaWYgRmFpbHVyZUNyYXNoIGluIGZhaWx1cmVf
dHlwZXM6CisgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSAorICAgIGVsaWYg
RmFpbHVyZVRpbWVvdXQgaW4gZmFpbHVyZV90eXBlczoKKyAgICAgICAgcmV0dXJuIHRlc3RfZXhw
ZWN0YXRpb25zLlRJTUVPVVQKKyAgICBlbGlmIChGYWlsdXJlTWlzc2luZ1Jlc3VsdCBpbiBmYWls
dXJlX3R5cGVzIG9yCisgICAgICAgICAgRmFpbHVyZU1pc3NpbmdJbWFnZSBpbiBmYWlsdXJlX3R5
cGVzIG9yCisgICAgICAgICAgRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2ggaW4gZmFpbHVyZV90eXBl
cyk6CisgICAgICAgIHJldHVybiB0ZXN0X2V4cGVjdGF0aW9ucy5NSVNTSU5HCisgICAgZWxzZToK
KyAgICAgICAgaXNfdGV4dF9mYWlsdXJlID0gRmFpbHVyZVRleHRNaXNtYXRjaCBpbiBmYWlsdXJl
X3R5cGVzCisgICAgICAgIGlzX2ltYWdlX2ZhaWx1cmUgPSAoRmFpbHVyZUltYWdlSGFzaEluY29y
cmVjdCBpbiBmYWlsdXJlX3R5cGVzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFp
bHVyZUltYWdlSGFzaE1pc21hdGNoIGluIGZhaWx1cmVfdHlwZXMpCisgICAgICAgIGlmIGlzX3Rl
eHRfZmFpbHVyZSBhbmQgaXNfaW1hZ2VfZmFpbHVyZToKKyAgICAgICAgICAgIHJldHVybiB0ZXN0
X2V4cGVjdGF0aW9ucy5JTUFHRV9QTFVTX1RFWFQKKyAgICAgICAgZWxpZiBpc190ZXh0X2ZhaWx1
cmU6CisgICAgICAgICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlvbnMuVEVYVAorICAgICAgICBl
bGlmIGlzX2ltYWdlX2ZhaWx1cmU6CisgICAgICAgICAgICByZXR1cm4gdGVzdF9leHBlY3RhdGlv
bnMuSU1BR0UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVu
Y2xhc3NpZmlhYmxlIHNldCBvZiBmYWlsdXJlczogIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArIHN0cihmYWlsdXJlX3R5cGVzKSkKKworCitjbGFzcyBUZXN0RmFpbHVyZShvYmplY3Qp
OgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdGhhdCBkZWZpbmVzIHRoZSBmYWlsdXJlIGlu
dGVyZmFjZS4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgorICAg
ICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGZhaWx1cmUgaW4gbW9yZSBk
ZXRhaWwuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgcmVzdWx0
X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyBhbiBIVE1M
IHN0cmluZyB0byBiZSBpbmNsdWRlZCBvbiB0aGUgcmVzdWx0cy5odG1sIHBhZ2UuIiIiCisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgc2hvdWxkX2tpbGxfdGVzdF9zaGVs
bChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHdlIHNob3VsZCBraWxsIHRoZSB0
ZXN0IHNoZWxsIGJlZm9yZSB0aGUgbmV4dAorICAgICAgICB0ZXN0LiIiIgorICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgIGRlZiByZWxhdGl2ZV9vdXRwdXRfZmlsZW5hbWUoc2VsZiwgZmlsZW5h
bWUsIG1vZGlmaWVyKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHJlbGF0aXZlIGZpbGVuYW1lIGlu
c2lkZSB0aGUgb3V0cHV0IGRpciB0aGF0IGNvbnRhaW5zCisgICAgICAgIG1vZGlmaWVyLgorCisg
ICAgICAgIEZvciBleGFtcGxlLCBpZiBmaWxlbmFtZSBpcyBmYXN0XGRvbVxmb28uaHRtbCBhbmQg
bW9kaWZpZXIgaXMKKyAgICAgICAgIi1leHBlY3RlZC50eHQiLCB0aGUgcmV0dXJuIHZhbHVlIGlz
IGZhc3RcZG9tXGZvby1leHBlY3RlZC50eHQKKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZp
bGVuYW1lOiByZWxhdGl2ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICAgICBtb2RpZmll
cjogYSBzdHJpbmcgdG8gcmVwbGFjZSB0aGUgZXh0ZW5zaW9uIG9mIGZpbGVuYW1lIHdpdGgKKwor
ICAgICAgICBSZXR1cm46CisgICAgICAgICAgVGhlIHJlbGF0aXZlIHdpbmRvd3MgcGF0aCB0byB0
aGUgb3V0cHV0IGZpbGVuYW1lCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5z
cGxpdGV4dChmaWxlbmFtZSlbMF0gKyBtb2RpZmllcgorCisKK2NsYXNzIEZhaWx1cmVXaXRoVHlw
ZShUZXN0RmFpbHVyZSk6CisgICAgIiIiQmFzZSBjbGFzcyB0aGF0IHByb2R1Y2VzIHN0YW5kYXJk
IEhUTUwgb3V0cHV0IGJhc2VkIG9uIHRoZSB0ZXN0IHR5cGUuCisKKyAgICBTdWJjbGFzc2VzIG1h
eSBjb21tb25seSBjaG9vc2UgdG8gb3ZlcnJpZGUgdGhlIFJlc3VsdEh0bWxPdXRwdXQsIGJ1dCBz
dGlsbAorICAgIHVzZSB0aGUgc3RhbmRhcmQgT3V0cHV0TGlua3MuCisgICAgIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdGVzdF90eXBlKToKKyAgICAgICAgVGVzdEZhaWx1cmUuX19pbml0
X18oc2VsZikKKyAgICAgICAgIyBUT0RPKG9qYW4pOiBUaGlzIGNsYXNzIG5vIGxvbmdlciBuZWVk
cyB0byBrbm93IHRoZSB0ZXN0X3R5cGUuCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZSA9IHRlc3Rf
dHlwZQorCisgICAgIyBGaWxlbmFtZSBzdWZmaXhlcyB1c2VkIGJ5IFJlc3VsdEh0bWxPdXRwdXQu
CisgICAgT1VUX0ZJTEVOQU1FUyA9IFtdCisKKyAgICBkZWYgb3V0cHV0X2xpbmtzKHNlbGYsIGZp
bGVuYW1lLCBvdXRfbmFtZXMpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGhvbGRpbmcg
YWxsIGFwcGxpY2FibGUgb3V0cHV0IGZpbGUgbGlua3MuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICBmaWxlbmFtZTogdGhlIHRlc3QgZmlsZW5hbWUsIHVzZWQgdG8gY29uc3RydWN0IHRoZSBy
ZXN1bHQgZmlsZSBuYW1lcworICAgICAgICAgIG91dF9uYW1lczogbGlzdCBvZiBmaWxlbmFtZSBz
dWZmaXhlcyBmb3IgdGhlIGZpbGVzLiBJZiB0aHJlZSBvciBtb3JlCisgICAgICAgICAgICAgIHN1
ZmZpeGVzIGFyZSBpbiB0aGUgbGlzdCwgdGhleSBzaG91bGQgYmUgW2FjdHVhbCwgZXhwZWN0ZWQs
IGRpZmYsCisgICAgICAgICAgICAgIHdkaWZmXS4gVHdvIHN1ZmZpeGVzIHNob3VsZCBiZSBbYWN0
dWFsLCBleHBlY3RlZF0sIGFuZCBhCisgICAgICAgICAgICAgIHNpbmdsZSBpdGVtIGlzIHRoZSBb
YWN0dWFsXSBmaWxlbmFtZSBzdWZmaXguCisgICAgICAgICAgICAgIElmIG91dF9uYW1lcyBpcyBl
bXB0eSwgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgbGlu
a3MgPSBbJyddCisgICAgICAgIHVyaXMgPSBbc2VsZi5yZWxhdGl2ZV9vdXRwdXRfZmlsZW5hbWUo
ZmlsZW5hbWUsIGZuKSBmb3IKKyAgICAgICAgICAgICAgICBmbiBpbiBvdXRfbmFtZXNdCisgICAg
ICAgIGlmIGxlbih1cmlzKSA+IDE6CisgICAgICAgICAgICBsaW5rcy5hcHBlbmQoIjxhIGhyZWY9
JyVzJz5leHBlY3RlZDwvYT4iICUgdXJpc1sxXSkKKyAgICAgICAgaWYgbGVuKHVyaXMpID4gMDoK
KyAgICAgICAgICAgIGxpbmtzLmFwcGVuZCgiPGEgaHJlZj0nJXMnPmFjdHVhbDwvYT4iICUgdXJp
c1swXSkKKyAgICAgICAgaWYgbGVuKHVyaXMpID4gMjoKKyAgICAgICAgICAgIGxpbmtzLmFwcGVu
ZCgiPGEgaHJlZj0nJXMnPmRpZmY8L2E+IiAlIHVyaXNbMl0pCisgICAgICAgIGlmIGxlbih1cmlz
KSA+IDM6CisgICAgICAgICAgICBsaW5rcy5hcHBlbmQoIjxhIGhyZWY9JyVzJz53ZGlmZjwvYT4i
ICUgdXJpc1szXSkKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKGxpbmtzKQorCisgICAgZGVmIHJl
c3VsdF9odG1sX291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1l
c3NhZ2UoKSArIHNlbGYub3V0cHV0X2xpbmtzKGZpbGVuYW1lLCBzZWxmLk9VVF9GSUxFTkFNRVMp
CisKKworY2xhc3MgRmFpbHVyZVRpbWVvdXQoVGVzdEZhaWx1cmUpOgorICAgICIiIlRlc3QgdGlt
ZWQgb3V0LiAgV2UgYWxzbyB3YW50IHRvIHJlc3RhcnQgdGhlIHRlc3Qgc2hlbGwgaWYgdGhpcwor
ICAgIGhhcHBlbnMuIiIiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToK
KyAgICAgICAgcmV0dXJuICJUZXN0IHRpbWVkIG91dCIKKworICAgIGRlZiByZXN1bHRfaHRtbF9v
dXRwdXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gIjxzdHJvbmc+JXM8L3N0cm9u
Zz4iICUgc2VsZi5tZXNzYWdlKCkKKworICAgIGRlZiBzaG91bGRfa2lsbF90ZXN0X3NoZWxsKHNl
bGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIEZhaWx1cmVDcmFzaChUZXN0RmFp
bHVyZSk6CisgICAgIiIiVGVzdCBzaGVsbCBjcmFzaGVkLiIiIgorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBtZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAiVGVzdCBzaGVsbCBjcmFzaGVk
IgorCisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAg
ICMgVE9ETyh0Yyk6IGNyZWF0ZSBhIGxpbmsgdG8gdGhlIG1pbmlkdW1wIGZpbGUKKyAgICAgICAg
c3RhY2sgPSBzZWxmLnJlbGF0aXZlX291dHB1dF9maWxlbmFtZShmaWxlbmFtZSwgIi1zdGFjay50
eHQiKQorICAgICAgICByZXR1cm4gIjxzdHJvbmc+JXM8L3N0cm9uZz4gPGEgaHJlZj0lcz5zdGFj
azwvYT4iICUgKHNlbGYubWVzc2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrKQorCisgICAgZGVmIHNob3VsZF9r
aWxsX3Rlc3Rfc2hlbGwoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgRmFp
bHVyZU1pc3NpbmdSZXN1bHQoRmFpbHVyZVdpdGhUeXBlKToKKyAgICAiIiJFeHBlY3RlZCByZXN1
bHQgd2FzIG1pc3NpbmcuIiIiCisgICAgT1VUX0ZJTEVOQU1FUyA9IFsiLWFjdHVhbC50eHQiXQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6CisgICAgICAgIHJldHVybiAi
Tm8gZXhwZWN0ZWQgcmVzdWx0cyBmb3VuZCIKKworICAgIGRlZiByZXN1bHRfaHRtbF9vdXRwdXQo
c2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gKCI8c3Ryb25nPiVzPC9zdHJvbmc+IiAl
IHNlbGYubWVzc2FnZSgpICsKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF9saW5rcyhmaWxl
bmFtZSwgc2VsZi5PVVRfRklMRU5BTUVTKSkKKworCitjbGFzcyBGYWlsdXJlVGV4dE1pc21hdGNo
KEZhaWx1cmVXaXRoVHlwZSk6CisgICAgIiIiVGV4dCBkaWZmIG91dHB1dCBmYWlsZWQuIiIiCisg
ICAgIyBGaWxlbmFtZSBzdWZmaXhlcyB1c2VkIGJ5IFJlc3VsdEh0bWxPdXRwdXQuCisgICAgT1VU
X0ZJTEVOQU1FUyA9IFsiLWFjdHVhbC50eHQiLCAiLWV4cGVjdGVkLnR4dCIsICItZGlmZi50eHQi
XQorICAgIE9VVF9GSUxFTkFNRVNfV0RJRkYgPSBbIi1hY3R1YWwudHh0IiwgIi1leHBlY3RlZC50
eHQiLCAiLWRpZmYudHh0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItd2RpZmYuaHRt
bCJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF90eXBlLCBoYXNfd2RpZmYpOgorICAg
ICAgICBGYWlsdXJlV2l0aFR5cGUuX19pbml0X18oc2VsZiwgdGVzdF90eXBlKQorICAgICAgICBp
ZiBoYXNfd2RpZmY6CisgICAgICAgICAgICBzZWxmLk9VVF9GSUxFTkFNRVMgPSBzZWxmLk9VVF9G
SUxFTkFNRVNfV0RJRkYKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWVzc2FnZSgpOgor
ICAgICAgICByZXR1cm4gIlRleHQgZGlmZiBtaXNtYXRjaCIKKworCitjbGFzcyBGYWlsdXJlTWlz
c2luZ0ltYWdlSGFzaChGYWlsdXJlV2l0aFR5cGUpOgorICAgICIiIkFjdHVhbCByZXN1bHQgaGFz
aCB3YXMgbWlzc2luZy4iIiIKKyAgICAjIENocm9tZSBkb2Vzbid0IGtub3cgdG8gZGlzcGxheSBh
IC5jaGVja3N1bSBmaWxlIGFzIHRleHQsIHNvIGRvbid0IGJvdGhlcgorICAgICMgcHV0dGluZyBp
biBhIGxpbmsgdG8gdGhlIGFjdHVhbCByZXN1bHQuCisgICAgT1VUX0ZJTEVOQU1FUyA9IFtdCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJO
byBleHBlY3RlZCBpbWFnZSBoYXNoIGZvdW5kIgorCisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1
dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiAiPHN0cm9uZz4lczwvc3Ryb25nPiIg
JSBzZWxmLm1lc3NhZ2UoKQorCisKK2NsYXNzIEZhaWx1cmVNaXNzaW5nSW1hZ2UoRmFpbHVyZVdp
dGhUeXBlKToKKyAgICAiIiJBY3R1YWwgcmVzdWx0IGltYWdlIHdhcyBtaXNzaW5nLiIiIgorICAg
IE9VVF9GSUxFTkFNRVMgPSBbIi1hY3R1YWwucG5nIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgbWVzc2FnZSgpOgorICAgICAgICByZXR1cm4gIk5vIGV4cGVjdGVkIGltYWdlIGZvdW5k
IgorCisgICAgZGVmIHJlc3VsdF9odG1sX291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAg
IHJldHVybiAoIjxzdHJvbmc+JXM8L3N0cm9uZz4iICUgc2VsZi5tZXNzYWdlKCkgKworICAgICAg
ICAgICAgICAgIHNlbGYub3V0cHV0X2xpbmtzKGZpbGVuYW1lLCBzZWxmLk9VVF9GSUxFTkFNRVMp
KQorCisKK2NsYXNzIEZhaWx1cmVJbWFnZUhhc2hNaXNtYXRjaChGYWlsdXJlV2l0aFR5cGUpOgor
ICAgICIiIkltYWdlIGhhc2hlcyBkaWRuJ3QgbWF0Y2guIiIiCisgICAgT1VUX0ZJTEVOQU1FUyA9
IFsiLWFjdHVhbC5wbmciLCAiLWV4cGVjdGVkLnBuZyIsICItZGlmZi5wbmciXQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBtZXNzYWdlKCk6CisgICAgICAgICMgV2UgY2FsbCB0aGlzIGEg
c2ltcGxlIGltYWdlIG1pc21hdGNoIHRvIGF2b2lkIGNvbmZ1c2lvbiwgc2luY2UKKyAgICAgICAg
IyB3ZSBsaW5rIHRvIHRoZSBQTkdzIHJhdGhlciB0aGFuIHRoZSBjaGVja3N1bXMuCisgICAgICAg
IHJldHVybiAiSW1hZ2UgbWlzbWF0Y2giCisKKworY2xhc3MgRmFpbHVyZUZ1enp5RmFpbHVyZShG
YWlsdXJlV2l0aFR5cGUpOgorICAgICIiIkltYWdlIGhhc2hlcyBkaWRuJ3QgbWF0Y2guIiIiCisg
ICAgT1VUX0ZJTEVOQU1FUyA9IFsiLWFjdHVhbC5wbmciLCAiLWV4cGVjdGVkLnBuZyJdCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJGdXp6
eSBpbWFnZSBtYXRjaCBhbHNvIGZhaWxlZCIKKworCitjbGFzcyBGYWlsdXJlSW1hZ2VIYXNoSW5j
b3JyZWN0KEZhaWx1cmVXaXRoVHlwZSk6CisgICAgIiIiQWN0dWFsIHJlc3VsdCBoYXNoIGlzIGlu
Y29ycmVjdC4iIiIKKyAgICAjIENocm9tZSBkb2Vzbid0IGtub3cgdG8gZGlzcGxheSBhIC5jaGVj
a3N1bSBmaWxlIGFzIHRleHQsIHNvIGRvbid0IGJvdGhlcgorICAgICMgcHV0dGluZyBpbiBhIGxp
bmsgdG8gdGhlIGFjdHVhbCByZXN1bHQuCisgICAgT1VUX0ZJTEVOQU1FUyA9IFtdCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2UoKToKKyAgICAgICAgcmV0dXJuICJJbWFnZXMg
bWF0Y2gsIGV4cGVjdGVkIGltYWdlIGhhc2ggaW5jb3JyZWN0LiAiCisKKyAgICBkZWYgcmVzdWx0
X2h0bWxfb3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuICI8c3Ryb25nPiVz
PC9zdHJvbmc+IiAlIHNlbGYubWVzc2FnZSgpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2Zh
aWx1cmVzLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZmlsZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9maWxlcy5weQkocmV2aXNpb24gMCkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZmlsZXMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5h
bWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIG1vZHVsZSBpcyB1
c2VkIHRvIGZpbmQgYWxsIG9mIHRoZSBsYXlvdXQgdGVzdCBmaWxlcyB1c2VkIGJ5IENocm9taXVt
CisoYWNyb3NzIGFsbCBwbGF0Zm9ybXMpLiBJdCBleHBvc2VzIG9uZSBwdWJsaWMgZnVuY3Rpb24g
LSBHYXRoZXJUZXN0RmlsZXMoKSAtCit3aGljaCB0YWtlcyBhbiBvcHRpb25hbCBsaXN0IG9mIHBh
dGhzLiBJZiBhIGxpc3QgaXMgcGFzc2VkIGluLCB0aGUgcmV0dXJuZWQKK2xpc3Qgb2YgdGVzdCBm
aWxlcyBpcyBjb25zdHJhaW5lZCB0byB0aG9zZSBmb3VuZCB1bmRlciB0aGUgcGF0aHMgcGFzc2Vk
IGluLAoraS5lLiBjYWxsaW5nIEdhdGhlclRlc3RGaWxlcyhbIkxheW91dFRlc3RzL2Zhc3QiXSkg
d2lsbCBvbmx5IHJldHVybiBmaWxlcwordW5kZXIgdGhhdCBkaXJlY3RvcnkuIiIiCisKK2ltcG9y
dCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRoX3V0aWxzCisKKyMgV2hlbiBjb2xsZWN0aW5n
IHRlc3QgY2FzZXMsIHdlIGluY2x1ZGUgYW55IGZpbGUgd2l0aCB0aGVzZSBleHRlbnNpb25zLgor
X3N1cHBvcnRlZF9maWxlX2V4dGVuc2lvbnMgPSBzZXQoWycuaHRtbCcsICcuc2h0bWwnLCAnLnht
bCcsICcueGh0bWwnLCAnLnBsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
LnBocCcsICcuc3ZnJ10pCisjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCBza2lwIHRoZXNl
IGRpcmVjdG9yaWVzCitfc2tpcHBlZF9kaXJlY3RvcmllcyA9IHNldChbJy5zdm4nLCAnX3N2bics
ICdyZXNvdXJjZXMnLCAnc2NyaXB0LXRlc3RzJ10pCisKKworZGVmIGdhdGhlcl90ZXN0X2ZpbGVz
KHBhdGhzKToKKyAgICAiIiJHZW5lcmF0ZSBhIHNldCBvZiB0ZXN0IGZpbGVzIGFuZCByZXR1cm4g
dGhlbS4KKworICAgIEFyZ3M6CisgICAgICBwYXRoczogYSBsaXN0IG9mIGNvbW1hbmQgbGluZSBw
YXRocyByZWxhdGl2ZSB0byB0aGUgd2Via2l0L3Rlc3RzCisgICAgICAgICAgZGlyZWN0b3J5LiBn
bG9iIHBhdHRlcm5zIGFyZSBvay4KKyAgICAiIiIKKyAgICBwYXRoc190b193YWxrID0gc2V0KCkK
KyAgICAjIGlmIHBhdGhzIGlzIGVtcHR5LCBwcm92aWRlIGEgcHJlLWRlZmluZWQgbGlzdC4KKyAg
ICBpZiBwYXRoczoKKyAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgICAgICAjIElm
IHRoZXJlJ3MgYW4gKiBpbiB0aGUgbmFtZSwgYXNzdW1lIGl0J3MgYSBnbG9iIHBhdHRlcm4uCisg
ICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2Rp
cigpLCBwYXRoKQorICAgICAgICAgICAgaWYgcGF0aC5maW5kKCcqJykgPiAtMToKKyAgICAgICAg
ICAgICAgICBmaWxlbmFtZXMgPSBnbG9iLmdsb2IocGF0aCkKKyAgICAgICAgICAgICAgICBwYXRo
c190b193YWxrLnVwZGF0ZShmaWxlbmFtZXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHBhdGhzX3RvX3dhbGsuYWRkKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgcGF0aHNf
dG9fd2Fsay5hZGQocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCkpCisKKyAgICAjIE5vdyB3
YWxrIGFsbCB0aGUgcGF0aHMgcGFzc2VkIGluIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIGdldCBm
aWxlbmFtZXMKKyAgICB0ZXN0X2ZpbGVzID0gc2V0KCkKKyAgICBmb3IgcGF0aCBpbiBwYXRoc190
b193YWxrOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKSBhbmQgX2hhc19zdXBwb3J0
ZWRfZXh0ZW5zaW9uKHBhdGgpOgorICAgICAgICAgICAgdGVzdF9maWxlcy5hZGQob3MucGF0aC5u
b3JtcGF0aChwYXRoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZm9yIHJvb3Qs
IGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICAjIGRvbid0IHdhbGsg
c2tpcHBlZCBkaXJlY3RvcmllcyBhbmQgc3ViIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBpZiBv
cy5wYXRoLmJhc2VuYW1lKHJvb3QpIGluIF9za2lwcGVkX2RpcmVjdG9yaWVzOgorICAgICAgICAg
ICAgICAgIGRlbCBkaXJzWzpdCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIF9oYXNfc3VwcG9y
dGVkX2V4dGVuc2lvbihmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0g
b3MucGF0aC5qb2luKHJvb3QsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBmaWxlbmFt
ZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIHRlc3Rf
ZmlsZXMuYWRkKGZpbGVuYW1lKQorCisgICAgcmV0dXJuIHRlc3RfZmlsZXMKKworCitkZWYgX2hh
c19zdXBwb3J0ZWRfZXh0ZW5zaW9uKGZpbGVuYW1lKToKKyAgICAiIiJSZXR1cm4gdHJ1ZSBpZiBm
aWxlbmFtZSBpcyBvbmUgb2YgdGhlIGZpbGUgZXh0ZW5zaW9ucyB3ZSB3YW50IHRvIHJ1biBhCisg
ICAgdGVzdCBvbi4iIiIKKyAgICBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1l
KVsxXQorICAgIHJldHVybiBleHRlbnNpb24gaW4gX3N1cHBvcnRlZF9maWxlX2V4dGVuc2lvbnMK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3Ro
cmVhZC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIFRocmVhZCBvYmplY3QgZm9yIHJ1bm5p
bmcgdGhlIHRlc3Qgc2hlbGwgYW5kIHByb2Nlc3NpbmcgVVJMcyBmcm9tIGEKK3NoYXJlZCBxdWV1
ZS4KKworRWFjaCB0aHJlYWQgcnVucyBhIHNlcGFyYXRlIGluc3RhbmNlIG9mIHRoZSB0ZXN0X3No
ZWxsIGJpbmFyeSBhbmQgdmFsaWRhdGVzCit0aGUgb3V0cHV0LiAgV2hlbiB0aGVyZSBhcmUgbm8g
bW9yZSBVUkxzIHRvIHByb2Nlc3MgaW4gdGhlIHNoYXJlZCBxdWV1ZSwgdGhlCit0aHJlYWQgZXhp
dHMuCisiIiIKKworaW1wb3J0IGNvcHkKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9y
dCBRdWV1ZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2lt
cG9ydCB0aHJlYWQKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCBwYXRo
X3V0aWxzCitpbXBvcnQgdGVzdF9mYWlsdXJlcworCisKK2RlZiBwcm9jZXNzX291dHB1dChwcm9j
LCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgdGFyZ2V0LCBvdXRwdXRfZGlyKToK
KyAgICAiIiJSZWNlaXZlcyB0aGUgb3V0cHV0IGZyb20gYSB0ZXN0X3NoZWxsIHByb2Nlc3MsIHN1
YmplY3RzIGl0IHRvIGEgbnVtYmVyCisgICAgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBv
ZiBmYWlsdXJlIHR5cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgorCisgICAgQXJnczoKKyAgICAgIHBy
b2M6IGFuIGFjdGl2ZSB0ZXN0X3NoZWxsIHByb2Nlc3MKKyAgICAgIHRlc3RfaW5mbzogT2JqZWN0
IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAorICAgICAgdGVz
dF90eXBlczogbGlzdCBvZiB0ZXN0IHR5cGVzIHRvIHN1YmplY3QgdGhlIG91dHB1dCB0bworICAg
ICAgdGVzdF9hcmdzOiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGVhY2ggdGVzdAorICAgICAg
dGFyZ2V0OiBEZWJ1ZyBvciBSZWxlYXNlCisgICAgICBvdXRwdXRfZGlyOiBkaXJlY3RvcnkgdG8g
cHV0IGNyYXNoIHN0YWNrIHRyYWNlcyBpbnRvCisKKyAgICBSZXR1cm5zOiBhIGxpc3Qgb2YgZmFp
bHVyZSBvYmplY3RzIGFuZCB0aW1lcyBmb3IgdGhlIHRlc3QgYmVpbmcgcHJvY2Vzc2VkCisgICAg
IiIiCisgICAgb3V0bGluZXMgPSBbXQorICAgIGV4dHJhX2xpbmVzID0gW10KKyAgICBmYWlsdXJl
cyA9IFtdCisgICAgY3Jhc2ggPSBGYWxzZQorCisgICAgIyBTb21lIHRlc3QgYXJncywgc3VjaCBh
cyB0aGUgaW1hZ2UgaGFzaCwgbWF5IGJlIGFkZGVkIG9yIGNoYW5nZWQgb24gYQorICAgICMgdGVz
dC1ieS10ZXN0IGJhc2lzLgorICAgIGxvY2FsX3Rlc3RfYXJncyA9IGNvcHkuY29weSh0ZXN0X2Fy
Z3MpCisKKyAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKworICAgIGxpbmUgPSBwcm9jLnN0
ZG91dC5yZWFkbGluZSgpCisKKyAgICAjIE9ubHkgc3RhcnQgc2F2aW5nIG91dHB1dCBsaW5lcyBv
bmNlIHdlJ3ZlIGxvYWRlZCB0aGUgVVJMIGZvciB0aGUgdGVzdC4KKyAgICB1cmwgPSBOb25lCisg
ICAgdGVzdF9zdHJpbmcgPSB0ZXN0X2luZm8udXJpLnN0cmlwKCkKKworICAgIHdoaWxlIGxpbmUu
cnN0cmlwKCkgIT0gIiNFT0YiOgorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGNyYXNo
ZWQuCisgICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHByb2MucG9sbCgpIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkp
CisKKyAgICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1
c2VkIGZvciBhYnJ1cHQKKyAgICAgICAgICAgICMgdGVybWluYXRpb24uIFRoaXMgaGFwcGVucyBp
ZiB3ZSBoaXQgY3RybCtjIGZyb20gdGhlIHByb21wdCBhbmQKKyAgICAgICAgICAgICMgd2UgaGFw
cGVuIHRvIGJlIHdhaXRpbmcgb24gdGhlIHRlc3Rfc2hlbGwuCisgICAgICAgICAgICAjIHNkb3lv
bjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlCisg
ICAgICAgICAgICAjIGFib3ZlIGNvZGUgaXMgdmFsaWQuIFdoYXQgd29ya3MgZm9yIG1lIHVuZGVy
IExpbnV4IHRvIGRldGVjdAorICAgICAgICAgICAgIyBjdHJsK2MgaXMgZm9yIHRoZSBzdWJwcm9j
ZXNzIHJldHVybmNvZGUgdG8gYmUgbmVnYXRpdmUgU0lHSU5ULgorICAgICAgICAgICAgIyBBbmQg
dGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uLgorICAgICAgICAg
ICAgaWYgKC0xMDczNzQxNTEwID09IHByb2MucmV0dXJuY29kZSBvcgorICAgICAgICAgICAgICAg
IC0gc2lnbmFsLlNJR0lOVCA9PSBwcm9jLnJldHVybmNvZGUpOgorICAgICAgICAgICAgICAgIHJh
aXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgICAgICBjcmFzaCA9IFRydWUKKyAgICAgICAg
ICAgIGJyZWFrCisKKyAgICAgICAgIyBEb24ndCBpbmNsdWRlICNVUkwgbGluZXMgaW4gb3VyIG91
dHB1dAorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiNVUkw6Iik6CisgICAgICAgICAgICB1
cmwgPSBsaW5lLnJzdHJpcCgpWzU6XQorICAgICAgICAgICAgaWYgdXJsICE9IHRlc3Rfc3RyaW5n
OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZmF0YWwoIlRlc3QgZ290IG91dCBvZiBzeW5jOlxu
fCVzfFxufCVzfCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVybCwgdGVzdF9z
dHJpbmcpKQorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ0ZXN0IG91dCBv
ZiBzeW5jIikKKyAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIiNNRDU6Iik6CisgICAgICAg
ICAgICBsb2NhbF90ZXN0X2FyZ3MuaGFzaCA9IGxpbmUucnN0cmlwKClbNTpdCisgICAgICAgIGVs
aWYgbGluZS5zdGFydHN3aXRoKCIjVEVTVF9USU1FRF9PVVQiKToKKyAgICAgICAgICAgICMgVGVz
dCB0aW1lZCBvdXQsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHJlYWQgdW50aWwgI0VPRi4KKyAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCisg
ICAgICAgIGVsaWYgdXJsOgorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKGxpbmUpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBleHRyYV9saW5lcy5hcHBlbmQobGluZSkKKworICAgICAg
ICBsaW5lID0gcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorCisgICAgZW5kX3Rlc3RfdGltZSA9IHRp
bWUudGltZSgpCisKKyAgICBpZiBsZW4oZXh0cmFfbGluZXMpOgorICAgICAgICBleHRyYSA9ICIi
LmpvaW4oZXh0cmFfbGluZXMpCisgICAgICAgIGlmIGNyYXNoOgorICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAodGVzdF9zdHJpbmcsIGV4dHJhKSkK
KyAgICAgICAgICAgICMgU3RyaXAgb2ZmICJmaWxlOi8vIiBzaW5jZSBSZWxhdGl2ZVRlc3RGaWxl
bmFtZSBleHBlY3RzCisgICAgICAgICAgICAjIGZpbGVzeXN0ZW0gcGF0aHMuCisgICAgICAgICAg
ICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgIHBh
dGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X3N0cmluZ1s3Ol0pKQorICAgICAg
ICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3RhY2su
dHh0IgorICAgICAgICAgICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRo
LnNwbGl0KGZpbGVuYW1lKVswXSkKKyAgICAgICAgICAgIG9wZW4oZmlsZW5hbWUsICJ3YiIpLndy
aXRlKGV4dHJhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUHJl
dmlvdXMgdGVzdCBvdXRwdXQgZXh0cmEgbGluZXMgYWZ0ZXIgZHVtcDpcbiVzIiAlCisgICAgICAg
ICAgICAgICAgZXh0cmEpCisKKyAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJl
c3VsdHMuCisgICAgdGltZV9mb3JfZGlmZnMgPSB7fQorICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVz
dF90eXBlczoKKyAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAg
bmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHRlc3RfaW5mby5maWxlbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Ms
ICcnLmpvaW4ob3V0bGluZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYWxfdGVzdF9hcmdzLCB0YXJnZXQpCisgICAgICAgICMgRG9uJ3QgYWRk
IGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZSBkb24n
dAorICAgICAgICAjIGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1yZXBv
cnQgZm9yIHRpbWVvdXRzIHNpbmNlCisgICAgICAgICMgd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhl
IHRleHQgYW5kIGltYWdlIG91dHB1dC4KKyAgICAgICAgaWYgbm90IGNyYXNoOgorICAgICAgICAg
ICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWlsdXJlcykKKyAgICAgICAgdGltZV9mb3JfZGlmZnNb
dGVzdF90eXBlLl9fY2xhc3NfXy5fX25hbWVfX10gPSAoCisgICAgICAgICAgICB0aW1lLnRpbWUo
KSAtIHN0YXJ0X2RpZmZfdGltZSkKKworICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRp
bWUudGltZSgpIC0gZW5kX3Rlc3RfdGltZQorICAgIHRlc3RfcnVuX3RpbWUgPSBlbmRfdGVzdF90
aW1lIC0gc3RhcnRfdGltZQorICAgIHJldHVybiBUZXN0U3RhdHModGVzdF9pbmZvLmZpbGVuYW1l
LCBmYWlsdXJlcywgdGVzdF9ydW5fdGltZSwKKyAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2Rp
ZmZzLCB0aW1lX2Zvcl9kaWZmcykKKworCitkZWYgc3RhcnRfdGVzdF9zaGVsbChjb21tYW5kLCBh
cmdzKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwcm9jZXNzIGZvciBhIG5ldyB0ZXN0X3NoZWxsIHN0
YXJ0ZWQgaW4gbGF5b3V0LXRlc3RzIG1vZGUuCisgICAgIiIiCisgICAgY21kID0gW10KKyAgICAj
IEhvb2sgZm9yIGluamVjdGluZyB2YWxncmluZCBvciBvdGhlciBydW50aW1lIGluc3RydW1lbnRh
dGlvbiwKKyAgICAjIHVzZWQgYnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90ZXN0cy5w
eS4KKyAgICB3cmFwcGVyID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUp
CisgICAgaWYgd3JhcHBlciAhPSBOb25lOgorICAgICAgICBjbWQgKz0gW3dyYXBwZXJdCisgICAg
Y21kICs9IGNvbW1hbmQgKyBbJy0tbGF5b3V0LXRlc3RzJ10gKyBhcmdzCisgICAgcmV0dXJuIHN1
YnByb2Nlc3MuUG9wZW4oY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1
YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJv
Y2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNz
LlNURE9VVCkKKworCitjbGFzcyBUZXN0U3RhdHM6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
ZmlsZW5hbWUsIGZhaWx1cmVzLCB0ZXN0X3J1bl90aW1lLAorICAgICAgICAgICAgICAgICB0b3Rh
bF90aW1lX2Zvcl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKToKKyAgICAgICAgc2VsZi5maWxl
bmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBmYWlsdXJlcworICAgICAg
ICBzZWxmLnRlc3RfcnVuX3RpbWUgPSB0ZXN0X3J1bl90aW1lCisgICAgICAgIHNlbGYudG90YWxf
dGltZV9mb3JfYWxsX2RpZmZzID0gdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzCisgICAgICAgIHNl
bGYudGltZV9mb3JfZGlmZnMgPSB0aW1lX2Zvcl9kaWZmcworCisKK2NsYXNzIFNpbmdsZVRlc3RU
aHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiVGhyZWFkIHdyYXBwZXIgZm9yIHJ1bm5p
bmcgYSBzaW5nbGUgdGVzdCBmaWxlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rf
c2hlbGxfY29tbWFuZCwgc2hlbGxfYXJncywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLAorICAgICAg
ICB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBB
cmdzOgorICAgICAgICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmls
ZW5hbWUsIHVyaSBhbmQgdGltZW91dAorICAgICAgICAgIG91dHB1dF9kaXI6IERpcmVjdG9yeSB0
byBwdXQgY3Jhc2ggc3RhY2tzIGludG8uCisgICAgICAgICAgU2VlIFRlc3RTaGVsbFRocmVhZCBm
b3IgZG9jdW1lbnRhdGlvbiBvZiB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKyAgICAgICAgIiIi
CisKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxm
Ll9jb21tYW5kID0gdGVzdF9zaGVsbF9jb21tYW5kCisgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3Mg
PSBzaGVsbF9hcmdzCisgICAgICAgIHNlbGYuX3Rlc3RfaW5mbyA9IHRlc3RfaW5mbworICAgICAg
ICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcworICAgICAgICBzZWxmLl90ZXN0X2FyZ3Mg
PSB0ZXN0X2FyZ3MKKyAgICAgICAgc2VsZi5fdGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgIHNlbGYu
X291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBw
cm9jID0gc3RhcnRfdGVzdF9zaGVsbChzZWxmLl9jb21tYW5kLCBzZWxmLl9zaGVsbF9hcmdzICsK
KyAgICAgICAgICAgIFsiLS10aW1lLW91dC1tcz0iICsgc2VsZi5fdGVzdF9pbmZvLnRpbWVvdXQs
IHNlbGYuX3Rlc3RfaW5mby51cmldKQorICAgICAgICBzZWxmLl90ZXN0X3N0YXRzID0gcHJvY2Vz
c19vdXRwdXQocHJvYywgc2VsZi5fdGVzdF9pbmZvLAorICAgICAgICAgICAgc2VsZi5fdGVzdF90
eXBlcywgc2VsZi5fdGVzdF9hcmdzLCBzZWxmLl90YXJnZXQsIHNlbGYuX291dHB1dF9kaXIpCisK
KyAgICBkZWYgZ2V0X3Rlc3Rfc3RhdHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0
X3N0YXRzCisKKworY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSwg
dGVzdF9zaGVsbF9jb21tYW5kLAorICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2Fy
Z3MsIHNoZWxsX2FyZ3MsIG9wdGlvbnMpOgorICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUg
bG9jYWwgc3RhdGUgZm9yIHRoaXMgdGVzdCBzaGVsbCB0aHJlYWQuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNz
IHRoYXQgY29udGFpbnMgbGlzdHMKKyAgICAgICAgICAgICAgb2YgdHVwbGVzIG9mIChmaWxlbmFt
ZSwgdXJpKSBwYWlycy4KKyAgICAgICAgICByZXN1bHRfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVl
dWUgY2xhc3MgdGhhdCB3aWxsIGNvbnRhaW4gdHVwbGVzIG9mCisgICAgICAgICAgICAgICh0ZXN0
LCBmYWlsdXJlIGxpc3RzKSBmb3IgdGhlIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgICB0ZXN0X3No
ZWxsX2NvbW1hbmQ6IEEgbGlzdCBzcGVjaWZ5aW5nIHRoZSBjb21tYW5kK2FyZ3MgZm9yCisgICAg
ICAgICAgICAgIHRlc3Rfc2hlbGwKKyAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVz
dFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgIGFnYWlu
c3QuCisgICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3Mg
dG8gZWFjaCBUZXN0VHlwZS4KKyAgICAgICAgICBzaGVsbF9hcmdzOiBBbnkgZXh0cmEgYXJndW1l
bnRzIHRvIGJlIHBhc3NlZCB0byB0ZXN0X3NoZWxsLmV4ZS4KKyAgICAgICAgICBvcHRpb25zOiBB
IHByb3BlcnR5IGRpY3Rpb25hcnkgYXMgcHJvZHVjZWQgYnkgb3B0cGFyc2UuIFRoZQorICAgICAg
ICAgICAgICBjb21tYW5kLWxpbmUgb3B0aW9ucyBzaG91bGQgbWF0Y2ggdGhvc2UgZXhwZWN0ZWQg
YnkKKyAgICAgICAgICAgICAgcnVuX3dlYmtpdF90ZXN0czsgdGhleSBhcmUgdHlwaWNhbGx5IHBh
c3NlZCB2aWEgdGhlCisgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciBj
bGFzcy4iIiIKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAg
ICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1ZQorICAgICAg
ICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKKyAgICAgICAgc2VsZi5fZmlsZW5h
bWVfbGlzdCA9IFtdCisgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCA9IHRlc3Rfc2hl
bGxfY29tbWFuZAorICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcworICAgICAg
ICBzZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKKyAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9w
cm9jID0gTm9uZQorICAgICAgICBzZWxmLl9zaGVsbF9hcmdzID0gc2hlbGxfYXJncworICAgICAg
ICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNl
CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQorICAgICAgICBzZWxmLl9kaXJl
Y3RvcnlfdGltaW5nX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fdGVzdF9zdGF0cyA9IFtdCisg
ICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IDAK
KyAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAorCisgICAgICAgICMgQ3VycmVudCBkaXJlY3Rv
cnkgb2YgdGVzdHMgd2UncmUgcnVubmluZy4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBO
b25lCisgICAgICAgICMgTnVtYmVyIG9mIHRlc3RzIGluIHNlbGYuX2N1cnJlbnRfZGlyLgorICAg
ICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9kaXIgPSBOb25lCisgICAgICAgICMgVGlt
ZSBhdCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcgdGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2Rp
ci4KKyAgICAgICAgc2VsZi5fY3VycmVudF9kaXJfc3RhcnRfdGltZSA9IE5vbmUKKworICAgIGRl
ZiBnZXRfZGlyZWN0b3J5X3RpbWluZ19zdGF0cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBh
IGRpY3Rpb25hcnkgbWFwcGluZyB0ZXN0IGRpcmVjdG9yeSB0byBhIHR1cGxlIG9mCisgICAgICAg
IChudW1iZXIgb2YgdGVzdHMgaW4gdGhhdCBkaXJlY3RvcnksIHRpbWUgdG8gcnVuIHRoZSB0ZXN0
cykiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RpcmVjdG9yeV90aW1pbmdfc3RhdHMKKworICAg
IGRlZiBnZXRfaW5kaXZpZHVhbF90ZXN0X3N0YXRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5z
IGEgbGlzdCBvZiAodGVzdF9maWxlbmFtZSwgdGltZV90b19ydW5fdGVzdCwKKyAgICAgICAgdG90
YWxfdGltZV9mb3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykgdHVwbGVzLiIiIgorICAgICAg
ICByZXR1cm4gc2VsZi5fdGVzdF9zdGF0cworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAg
ICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCisgICAgICAg
IHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorCisgICAgZGVmIGdldF9leGNlcHRpb25faW5mbyhzZWxm
KToKKyAgICAgICAgIiIiSWYgcnVuKCkgdGVybWluYXRlZCBvbiBhbiB1bmNhdWdodCBleGNlcHRp
b24sIHJldHVybiBpdCBoZXJlCisgICAgICAgICgodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgdHVw
bGUpLgorICAgICAgICBSZXR1cm5zIE5vbmUgaWYgcnVuKCkgdGVybWluYXRlZCBub3JtYWxseS4g
TWVhbnQgdG8gYmUgY2FsbGVkIGFmdGVyCisgICAgICAgIGpvaW5pbmcgdGhpcyB0aHJlYWQuIiIi
CisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbworCisgICAgZGVmIGdldF90b3Rh
bF90aW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gbWF4KHNlbGYuX3N0b3BfdGltZSAtIHNlbGYu
X3N0YXJ0X3RpbWUsIDAuMCkKKworICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fbnVtX3Rlc3RzCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAi
IiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5j
YXVnaHQKKyAgICAgICAgZXhjZXB0aW9ucy4iIiIKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgp
KSkKKyAgICAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFy
eT1Ob25lKQorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAl
IChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfbnVt
X3Rlc3RzKCkpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIFNhdmUgdGhlIGV4Y2Vw
dGlvbiBmb3Igb3VyIGNhbGxlciB0byBzZWUuCisgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25f
aW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1l
LnRpbWUoKQorICAgICAgICAgICAgIyBSZS1yYWlzZSBpdCBhbmQgZGllLgorICAgICAgICAgICAg
bG9nZ2luZy5lcnJvcignJXMgZHlpbmc6ICVzJyAlIChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8pKQorICAgICAgICAgICAgcmFp
c2UKKyAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKKworICAgIGRlZiBydW5f
aW5fbWFpbl90aHJlYWQoc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAg
ICAgIiIiVGhpcyBob29rIGFsbG93cyB1cyB0byBydW4gdGhlIHRlc3RzIGZyb20gdGhlIG1haW4g
dGhyZWFkIGlmCisgICAgICAgIC0tbnVtLXRlc3Qtc2hlbGxzPT0xLCBpbnN0ZWFkIG9mIGhhdmlu
ZyB0byBhbHdheXMgcnVuIHR3byBvciBtb3JlCisgICAgICAgIHRocmVhZHMuIFRoaXMgYWxsb3dz
IHVzIHRvIGRlYnVnIHRoZSB0ZXN0IGhhcm5lc3Mgd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICAg
ZG8gbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nLiIiIgorICAgICAgICBzZWxmLl9ydW4odGVzdF9y
dW5uZXIsIHJlc3VsdF9zdW1tYXJ5KQorCisgICAgZGVmIF9ydW4oc2VsZiwgdGVzdF9ydW5uZXIs
IHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgIiIiTWFpbiB3b3JrIGVudHJ5IHBvaW50IG9mIHRo
ZSB0aHJlYWQuIEJhc2ljYWxseSB3ZSBwdWxsIHVybHMgZnJvbSB0aGUKKyAgICAgICAgZmlsZW5h
bWUgcXVldWUgYW5kIHJ1biB0aGUgdGVzdHMgdW50aWwgd2UgcnVuIG91dCBvZiB1cmxzLgorCisg
ICAgICAgIElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9ydW5u
ZXIuVXBkYXRlU3VtbWFyeSgpCisgICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0ZXN0
LiIiIgorICAgICAgICBiYXRjaF9zaXplID0gMAorICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIGJhdGNoX3NpemUgPSBpbnQoc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplKQor
ICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiSWdub3Jp
bmcgaW52YWxpZCBiYXRjaCBzaXplICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplKQorCisgICAgICAgICMgQXBwZW5kIHRlc3RzIHdl
J3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4KKyAgICAgICAg
IyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJlcGFyZUxpc3RzQW5k
UHJpbnRPdXRwdXQuCisgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRlc3RzX3J1bi50eHQiKQorICAgICAgICB0ZXN0c19ydW5fZmls
ZSA9IG9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToK
KyAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcu
aW5mbygnVGVzdGluZyBjYW5jZWxlZCcpCisgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUu
Y2xvc2UoKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBsZW4oc2Vs
Zi5fZmlsZW5hbWVfbGlzdCkgaXMgMDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50
X2RpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGlyZWN0b3J5X3Rp
bWluZ19zdGF0c1tzZWxmLl9jdXJyZW50X2Rpcl0gPSBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZGlyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWUudGltZSgpIC0gc2VsZi5fY3VycmVudF9kaXJfc3RhcnRfdGltZSkKKworICAgICAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIsIHNl
bGYuX2ZpbGVuYW1lX2xpc3QgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxl
bmFtZV9saXN0X3F1ZXVlLmdldF9ub3dhaXQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1
ZS5FbXB0eToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF90ZXN0X3NoZWxsKCkKKyAg
ICAgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50
X2RpciA9IGxlbihzZWxmLl9maWxlbmFtZV9saXN0KQorICAgICAgICAgICAgICAgIHNlbGYuX2N1
cnJlbnRfZGlyX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgICAgICAgICB0ZXN0X2lu
Zm8gPSBzZWxmLl9maWxlbmFtZV9saXN0LnBvcCgpCisKKyAgICAgICAgICAgICMgV2UgaGF2ZSBh
IHVybCwgcnVuIHRlc3RzLgorICAgICAgICAgICAgYmF0Y2hfY291bnQgKz0gMQorICAgICAgICAg
ICAgc2VsZi5fbnVtX3Rlc3RzICs9IDEKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVu
X3NpbmdseToKKyAgICAgICAgICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX3J1bl90ZXN0X3Npbmds
eSh0ZXN0X2luZm8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWx1cmVz
ID0gc2VsZi5fcnVuX3Rlc3QodGVzdF9pbmZvKQorCisgICAgICAgICAgICBmaWxlbmFtZSA9IHRl
c3RfaW5mby5maWxlbmFtZQorICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUud3JpdGUoZmlsZW5h
bWUgKyAiXG4iKQorICAgICAgICAgICAgaWYgZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgIyBD
aGVjayBhbmQga2lsbCB0ZXN0IHNoZWxsIGlmIHdlIG5lZWQgdG9vLgorICAgICAgICAgICAgICAg
IGlmIGxlbihbMSBmb3IgZiBpbiBmYWlsdXJlcyBpZiBmLnNob3VsZF9raWxsX3Rlc3Rfc2hlbGwo
KV0pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9raWxsX3Rlc3Rfc2hlbGwoKQorICAgICAg
ICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVz
dCBib3VuY2VkLgorICAgICAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAg
ICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAgICAgIGVy
cm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYubWVzc2FnZSgpIGZvciBmIGluIGZhaWx1cmVz
XSkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAo
c2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxz
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3Jfc3RyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShm
aWxlbmFtZSkpKQorICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dCgoZmlsZW5hbWUs
IGZhaWx1cmVzKSkKKworICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2Nv
dW50ID4gYmF0Y2hfc2l6ZToKKyAgICAgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5k
IHJlc2V0IGNvdW50LgorICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfdGVzdF9zaGVsbCgpCisg
ICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAgICAgIGlmIHRlc3RfcnVu
bmVyOgorICAgICAgICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9z
dW1tYXJ5KQorCisgICAgZGVmIF9ydW5fdGVzdF9zaW5nbHkoc2VsZiwgdGVzdF9pbmZvKToKKyAg
ICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3JjaW5nIGEgaGFy
ZCB0aW1lIGxpbWl0LgorCisgICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVjdCB0aGUgdGVy
bWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKKyAgICAgICAgc3RhdGUgb3Ig
cHJvZ3Jlc3MsIHdlIGNhbiBvbmx5IHJ1biBwZXItdGVzdCB0aW1lb3V0cyB3aGVuIHJ1bm5pbmcg
dGVzdAorICAgICAgICBmaWxlcyBzaW5nbHkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0
ZXN0X2luZm86IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRp
bWVvdXQKKworICAgICAgICBSZXR1cm46CisgICAgICAgICAgQSBsaXN0IG9mIFRlc3RGYWlsdXJl
IG9iamVjdHMgZGVzY3JpYmluZyB0aGUgZXJyb3IuCisgICAgICAgICIiIgorICAgICAgICB3b3Jr
ZXIgPSBTaW5nbGVUZXN0VGhyZWFkKHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbF9hcmdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgICAgIHdvcmtlci5zdGFy
dCgpCisKKyAgICAgICAgIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgb25lIHRlc3QgcGVyIHRlc3Rfc2hl
bGwgcHJvY2Vzcywgd2UgY2FuIGVuZm9yY2UKKyAgICAgICAgIyBhIGhhcmQgdGltZW91dC4gdGhl
IHRlc3Rfc2hlbGwgd2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0CisgICAgICAgICMgV2Ug
d2FudCB0byBiZSBsYXJnZXIgdGhhbiB0aGF0LgorICAgICAgICB3b3JrZXIuam9pbihpbnQodGVz
dF9pbmZvLnRpbWVvdXQpICogMy4wIC8gMTAwMC4wKQorICAgICAgICBpZiB3b3JrZXIuaXNBbGl2
ZSgpOgorICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0
aWxsIHJ1bm5pbmcsIHRoZQorICAgICAgICAgICAgIyB0ZXN0X3NoZWxsLmV4ZSBpcyBjb21wbGV0
ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGluZworICAgICAgICAgICAgIyBtb3JlIHdlIGNhbiBk
byB3aXRoIGl0LiAgV2UgaGF2ZSB0byBraWxsIGFsbCB0aGUKKyAgICAgICAgICAgICMgdGVzdF9z
aGVsbHMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAgICAg
ICAgICMgb25lIHRlc3Rfc2hlbGwgdGhyZWFkLCB3ZSdsbCBlbmQgdXAga2lsbGluZyB0aGUgb3Ro
ZXIKKyAgICAgICAgICAgICMgdGVzdF9zaGVsbHMgdG9vLCBpbnRyb2R1Y2luZyBzcHVyaW91cyBj
cmFzaGVzLiBXZSBhY2NlcHQgdGhhdAorICAgICAgICAgICAgIyB0cmFkZW9mZiBpbiBvcmRlciB0
byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcyB0aHJlYWQncworICAgICAgICAgICAgIyBy
ZXN1bHRzLgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2ls
bGluZyBhbGwgdGVzdF9zaGVsbHMnKQorICAgICAgICAgICAgcGF0aF91dGlscy5raWxsX2FsbF90
ZXN0X3NoZWxscygpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RhdHMgPSB3b3JrZXIu
Z2V0X3Rlc3Rfc3RhdHMoKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9zdGF0cy5hcHBlbmQoc3Rh
dHMpCisgICAgICAgICAgICBmYWlsdXJlcyA9IHN0YXRzLmZhaWx1cmVzCisgICAgICAgIGV4Y2Vw
dCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoJ0Nhbm5vdCBnZXQgcmVzdWx0cyBvZiB0ZXN0OiAlcycgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpCisKKyAgICAgICAgcmV0
dXJuIGZhaWx1cmVzCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5mbyk6CisgICAg
ICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgdGVzdF9zaGVsbCBw
cm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29u
dGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisKKyAgICAgICAgUmV0
dXJuOgorICAgICAgICAgIEEgbGlzdCBvZiBUZXN0RmFpbHVyZSBvYmplY3RzIGRlc2NyaWJpbmcg
dGhlIGVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZW5zdXJlX3Rlc3Rfc2hlbGxf
aXNfcnVubmluZygpCisgICAgICAgICMgQXJncyB0byB0ZXN0X3NoZWxsIGlzIGEgc3BhY2Utc2Vw
YXJhdGVkIGxpc3Qgb2YKKyAgICAgICAgIyAidXJpIHRpbWVvdXQgcGl4ZWxfaGFzaCIKKyAgICAg
ICAgIyBUaGUgdGltZW91dCBhbmQgcGl4ZWxfaGFzaCBhcmUgb3B0aW9uYWwuICBUaGUgdGltZW91
dCBpcyB1c2VkIGlmIHRoaXMKKyAgICAgICAgIyB0ZXN0IGhhcyBhIGN1c3RvbSB0aW1lb3V0LiBU
aGUgcGl4ZWxfaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuCisgICAgICAgICMgaW1hZ2Ug
ZHVtcCBpZiB0aGUgY2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxh
bmsKKyAgICAgICAgIyB2YWx1ZSBpZiB3ZSBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4K
KyAgICAgICAgIyAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEgcHJldmlvdXMgcnVuIHdpbGwg
YmUgY29waWVkIGludG8KKyAgICAgICAgIyB0aGUgYmFzZWxpbmUuKQorICAgICAgICBpbWFnZV9o
YXNoID0gdGVzdF9pbmZvLmltYWdlX2hhc2gKKyAgICAgICAgaWYgaW1hZ2VfaGFzaCBhbmQgc2Vs
Zi5fdGVzdF9hcmdzLm5ld19iYXNlbGluZToKKyAgICAgICAgICAgIGltYWdlX2hhc2ggPSAiIgor
ICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkaW4ud3JpdGUoKCIlcyAlcyAlc1xuIiAl
CisgICAgICAgICAgICAodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hh
c2gpKSkKKworICAgICAgICAjIElmIHRoZSB0ZXN0IHNoZWxsIGlzIGRlYWQsIHRoZSBhYm92ZSBt
YXkgY2F1c2UgYW4gSU9FcnJvciBhcyB3ZQorICAgICAgICAjIHRyeSB0byB3cml0ZSBvbnRvIHRo
ZSBicm9rZW4gcGlwZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGVzdCBmb3IKKyAgICAgICAgIyB0
aGlzIHRlc3Qgc2hlbGwgcHJvY2VzcywgdGhhbiB0aGUgdGVzdCBzaGVsbCBkaWQgbm90CisgICAg
ICAgICMgc3VjY2Vzc2Z1bGx5IHN0YXJ0LiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgdGVzdCwg
dGhlbiB0aGUKKyAgICAgICAgIyBwcmV2aW91cyB0ZXN0cyBoYXZlIGNhdXNlZCBzb21lIGtpbmQg
b2YgZGVsYXllZCBjcmFzaC4gV2UgZG9uJ3QKKyAgICAgICAgIyB0cnkgdG8gcmVjb3ZlciBoZXJl
LgorICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkaW4uZmx1c2goKQorCisgICAgICAg
IHN0YXRzID0gcHJvY2Vzc19vdXRwdXQoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLCB0ZXN0X2luZm8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5f
dGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
dGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkpCisKKyAgICAgICAgc2VsZi5fdGVzdF9zdGF0cy5hcHBlbmQoc3RhdHMp
CisgICAgICAgIHJldHVybiBzdGF0cy5mYWlsdXJlcworCisgICAgZGVmIF9lbnN1cmVfdGVzdF9z
aGVsbF9pc19ydW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJTdGFydCB0aGUgc2hhcmVkIHRlc3Qg
c2hlbGwsIGlmIGl0J3Mgbm90IHJ1bm5pbmcuICBOb3QgZm9yIHVzZSB3aGVuCisgICAgICAgIHJ1
bm5pbmcgdGVzdHMgc2luZ2x5LCBzaW5jZSB0aG9zZSBlYWNoIHN0YXJ0IGEgc2VwYXJhdGUgdGVz
dCBzaGVsbCBpbgorICAgICAgICB0aGVpciBvd24gdGhyZWFkLgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgKG5vdCBzZWxmLl90ZXN0X3NoZWxsX3Byb2Mgb3IKKyAgICAgICAgICAgIHNlbGYuX3Rl
c3Rfc2hlbGxfcHJvYy5wb2xsKCkgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgc2VsZi5fdGVz
dF9zaGVsbF9wcm9jID0gc3RhcnRfdGVzdF9zaGVsbChzZWxmLl90ZXN0X3NoZWxsX2NvbW1hbmQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3NoZWxsX2FyZ3MpCisKKyAgICBkZWYgX2tpbGxfdGVzdF9zaGVsbChzZWxmKToKKyAgICAg
ICAgIiIiS2lsbCB0aGUgdGVzdCBzaGVsbCBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKKyAg
ICAgICAgaWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9z
aGVsbF9wcm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJv
Yy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0
ZGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkZXJyLmNsb3Nl
KCkKKyAgICAgICAgICAgIGlmIChzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2lu
JykgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5wb2xsKCkp
OgorICAgICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNv
bWV0aW1lcyBvbiBPUyBYLgorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGws
ICJ3IikKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fdGVzdF9zaGVsbF9wcm9j
LnBpZCldLCBzdGRlcnI9bnVsbCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3Rfc2hlbGxfdGhyZWFkLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd2Vic29ja2V0
X3NlcnZlci5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzE2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiQSBjbGFzcyB0byBoZWxwIHN0YXJ0L3N0b3AgdGhlIFB5V2ViU29ja2V0
IHNlcnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIKKworCitpbXBvcnQgbG9nZ2luZworaW1w
b3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitp
bXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCisKK2ltcG9ydCBwYXRo
X3V0aWxzCitpbXBvcnQgcGxhdGZvcm1fdXRpbHMKK2ltcG9ydCBodHRwX3NlcnZlcgorCitfV1Nf
TE9HX1BSRUZJWCA9ICdweXdlYnNvY2tldC53cy5sb2ctJworX1dTU19MT0dfUFJFRklYID0gJ3B5
d2Vic29ja2V0Lndzcy5sb2ctJworCitfREVGQVVMVF9XU19QT1JUID0gODg4MAorX0RFRkFVTFRf
V1NTX1BPUlQgPSA5MzIzCisKKworZGVmIHVybF9pc19hbGl2ZSh1cmwpOgorICAiIiJDaGVja3Mg
dG8gc2VlIGlmIHdlIGdldCBhbiBodHRwIHJlc3BvbnNlIGZyb20gfHVybHwuCisgIFdlIHBvbGwg
dGhlIHVybCA1IHRpbWVzIHdpdGggYSAxIHNlY29uZCBkZWxheS4gIElmIHdlIGRvbid0CisgIGdl
dCBhIHJlcGx5IGluIHRoYXQgdGltZSwgd2UgZ2l2ZSB1cCBhbmQgYXNzdW1lIHRoZSBodHRwZAor
ICBkaWRuJ3Qgc3RhcnQgcHJvcGVybHkuCisKKyAgQXJnczoKKyAgICB1cmw6IFRoZSBVUkwgdG8g
Y2hlY2suCisgIFJldHVybjoKKyAgICBUcnVlIGlmIHRoZSB1cmwgaXMgYWxpdmUuCisgICIiIgor
ICB3YWl0X3RpbWUgPSA1CisgIHdoaWxlIHdhaXRfdGltZSA+IDA6CisgICAgdHJ5OgorICAgICAg
cmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgICAjIFNlcnZlciBpcyB1cCBhbmQg
cmVzcG9uZGluZy4KKyAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAg
ICBwYXNzCisgICAgd2FpdF90aW1lIC09IDEKKyAgICAjIFdhaXQgYSBzZWNvbmQgYW5kIHRyeSBh
Z2Fpbi4KKyAgICB0aW1lLnNsZWVwKDEpCisKKyAgcmV0dXJuIEZhbHNlCisKKworZGVmIHJlbW92
ZV9sb2dfZmlsZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6CisgICAgZmlsZXMgPSBvcy5saXN0ZGly
KGZvbGRlcikKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgZmlsZS5zdGFydHN3
aXRoKHN0YXJ0c193aXRoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihm
b2xkZXIsIGZpbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQorCisKK2NsYXNz
IFB5V2ViU29ja2V0Tm90U3RhcnRlZChFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBQ
eVdlYlNvY2tldE5vdEZvdW5kKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFB5V2Vi
U29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
dXRwdXRfZGlyLCBwb3J0PV9ERUZBVUxUX1dTX1BPUlQsCisgICAgICAgICAgICAgICAgIHJvb3Q9
Tm9uZSwKKyAgICAgICAgICAgICAgICAgdXNlX3Rscz1GYWxzZSwKKyAgICAgICAgICAgICAgICAg
cHJpdmF0ZV9rZXk9aHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX3BlbV9maWxlLAorICAgICAgICAgICAg
ICAgICBjZXJ0aWZpY2F0ZT1odHRwX3NlcnZlci5MaWdodHRwZC5fcGVtX2ZpbGUsCisgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1Ob25lLAorICAgICAgICAgICAgICAgICBwaWRmaWxl
PU5vbmUpOgorICAgICAgICAiIiJBcmdzOgorICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNv
bHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgICIi
IgorICAgICAgICBodHRwX3NlcnZlci5MaWdodHRwZC5fX2luaXRfXyhzZWxmLCBvdXRwdXRfZGly
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PXBvcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q9cm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfY3lnd2luPXJlZ2lzdGVyX2N5Z3dp
bikKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5f
cHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5f
cm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5fdXNlX3RscyA9IHVzZV90bHMKKyAgICAgICAgc2Vs
Zi5fcHJpdmF0ZV9rZXkgPSBwcml2YXRlX2tleQorICAgICAgICBzZWxmLl9jZXJ0aWZpY2F0ZSA9
IGNlcnRpZmljYXRlCisgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAgICAgICBzZWxmLl9w
b3J0ID0gaW50KHNlbGYuX3BvcnQpCisgICAgICAgIGlmIHNlbGYuX3VzZV90bHM6CisgICAgICAg
ICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSA9ICdQeVdlYlNvY2tldChTZWN1cmUpJworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQnCisgICAg
ICAgIHNlbGYuX3BpZGZpbGUgPSBwaWRmaWxlCisgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQor
CisgICAgICAgICMgV2Via2l0IHRlc3RzCisgICAgICAgIGlmIHNlbGYuX3Jvb3Q6CisgICAgICAg
ICAgICBzZWxmLl9sYXlvdXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5fcm9vdCkKKyAg
ICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoCisgICAg
ICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuX3Jvb3QsICd3ZWJzb2NrZXQnLCAndGVzdHMn
KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxm
Ll93ZWJfc29ja2V0X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKKyAgICAgICAg
ICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycsICd3ZWJz
b2NrZXQnLAorICAgICAgICAgICAgICAgICAgICAndGVzdHMnKQorICAgICAgICAgICAgICAgIHNl
bGYuX2xheW91dF90ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAgICAg
ICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnKQorICAgICAg
ICAgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICAgICAgICAgIHNl
bGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBOb25lCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAg
ICAgIGlmIG5vdCBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzOgorICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCdObyBuZWVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAg
ICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoJyVzIGlzIGFscmVhZHkgcnVubmluZy4n
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJf
bmFtZSkKKworICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMn
KQorICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgorICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9X
U1NfTE9HX1BSRUZJWAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9X
U19MT0dfUFJFRklYCisgICAgICAgIGxvZ19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGltZV9z
dHIKKworICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2Vl
cCB0aGUgbGFzdCBvbmVzLgorICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9k
aXIsIGxvZ19wcmVmaXgpCisKKyAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYu
X291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAiLWVyci50eHQiKQorCisgICAgICAgIG91dHB1
dF9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICIt
b3V0LnR4dCIpCisgICAgICAgIHNlbGYuX3dzb3V0ID0gb3BlbihvdXRwdXRfbG9nLCAidyIpCisK
KyAgICAgICAgcHl0aG9uX2ludGVycCA9IHN5cy5leGVjdXRhYmxlCisgICAgICAgIHB5d2Vic29j
a2V0X2Jhc2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAorICAgICAgICAgICAgJ3RoaXJk
X3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29scycsICdweXdlYnNvY2tldCcpCisgICAgICAg
IHB5d2Vic29ja2V0X3NjcmlwdCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAg
ICAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ1dlYktpdFRvb2xzJywgJ3B5d2Vic29ja2V0
JywKKyAgICAgICAgICAgICdtb2RfcHl3ZWJzb2NrZXQnLCAnc3RhbmRhbG9uZS5weScpCisgICAg
ICAgIHN0YXJ0X2NtZCA9IFsKKyAgICAgICAgICAgIHB5dGhvbl9pbnRlcnAsIHB5d2Vic29ja2V0
X3NjcmlwdCwKKyAgICAgICAgICAgICctcCcsIHN0cihzZWxmLl9wb3J0KSwKKyAgICAgICAgICAg
ICctZCcsIHNlbGYuX2xheW91dF90ZXN0cywKKyAgICAgICAgICAgICctcycsIHNlbGYuX3dlYl9z
b2NrZXRfdGVzdHMsCisgICAgICAgICAgICAnLWwnLCBlcnJvcl9sb2csCisgICAgICAgIF0KKwor
ICAgICAgICBoYW5kbGVyX21hcF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3dlYl9zb2NrZXRf
dGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXJf
bWFwLnR4dCcpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGhhbmRsZXJfbWFwX2ZpbGUpOgor
ICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgaGFuZGxlcl9tYXBfZmlsZTogJXMnICUg
aGFuZGxlcl9tYXBfZmlsZSkKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoJy1tJykKKyAg
ICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoaGFuZGxlcl9tYXBfZmlsZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnTm8gaGFuZGxlcl9tYXBfZmlsZSBmb3Vu
ZCcpCisKKyAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5l
eHRlbmQoWyctdCcsICctaycsIHNlbGYuX3ByaXZhdGVfa2V5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJy1jJywgc2VsZi5fY2VydGlmaWNhdGVdKQorCisgICAgICAgICMgUHV0IHRo
ZSBjeWd3aW4gZGlyZWN0b3J5IGZpcnN0IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwK
KyAgICAgICAgZW52ID0gb3MuZW52aXJvbgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdj
eWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgK
KyAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScs
ICdjeWd3aW4nLCAnYmluJyksCisgICAgICAgICAgICAgICAgZW52WydQQVRIJ10pCisKKyAgICAg
ICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoK
KyAgICAgICAgICAgIHNldHVwX21vdW50ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhp
cmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykK
KyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQorCisgICAg
ICAgIGVudlsnUFlUSE9OUEFUSCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhz
ZXAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywg
JycpKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciBvbiAlZC4n
ICUgKAorICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQorICAgICAg
ICBsb2dnaW5nLmRlYnVnKCdjbWRsaW5lOiAlcycgJSAnICcuam9pbihzdGFydF9jbWQpKQorICAg
ICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIHN0ZG91dD1z
ZWxmLl93c291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbnY9ZW52KQorCisgICAgICAgICMgV2FpdCBhIGJpdCBiZWZvcmUgY2hlY2tpbmcg
dGhlIGxpdmVuZXNzIG9mIHRoZSBzZXJ2ZXIuCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorCisg
ICAgICAgIGlmIHNlbGYuX3VzZV90bHM6CisgICAgICAgICAgICB1cmwgPSAnaHR0cHMnCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAnaHR0cCcKKyAgICAgICAgdXJsID0gdXJsICsg
JzovLzEyNy4wLjAuMTolZC8nICUgc2VsZi5fcG9ydAorICAgICAgICBpZiBub3QgdXJsX2lzX2Fs
aXZlKHVybCk6CisgICAgICAgICAgICBmcCA9IG9wZW4ob3V0cHV0X2xvZykKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICAg
ICAgbG9nZ2luZy5lcnJvcihsaW5lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
ICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQo
CisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4n
ICUKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkK
KworICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQorICAgICAgICBpZiBz
ZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFB5V2Vi
U29ja2V0Tm90U3RhcnRlZCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHN0YXJ0ICVzIHNl
cnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCisgICAgICAgIGlmIHNlbGYuX3BpZGZpbGU6Cisg
ICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRmaWxlLCAndycpCisgICAgICAgICAgICBmLndy
aXRlKCIlZCIgJSBzZWxmLl9wcm9jZXNzLnBpZCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisg
ICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgZm9yY2UgYW5k
IG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlm
IHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAg
ICAgICBlbGlmIHNlbGYuX3BpZGZpbGU6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRm
aWxlKQorICAgICAgICAgICAgcGlkID0gaW50KGYucmVhZCgpLnN0cmlwKCkpCisgICAgICAgICAg
ICBmLmNsb3NlKCkKKworICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgcmFpc2UgUHlX
ZWJTb2NrZXROb3RGb3VuZCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2Vy
dmVyIHBpZC4nICUgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zygn
U2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkK
KyAgICAgICAgcGxhdGZvcm1fdXRpbHMua2lsbF9wcm9jZXNzKHBpZCkKKworICAgICAgICBpZiBz
ZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkKKyAgICAgICAg
ICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAg
ICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93c291dCA9IE5v
bmUKKworCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgICMgUHJvdmlkZSBzb21lIGNv
bW1hbmQgbGluZSBwYXJhbXMgZm9yIHN0YXJ0aW5nIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIKKyAg
ICAjIG1hbnVhbGx5LgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIo
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1zZXJ2ZXInLCB0eXBlPSdjaG9pY2Un
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnc3RhcnQnLCAnc3RvcCdd
LCBkZWZhdWx0PSdzdGFydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nl
cnZlciBhY3Rpb24gKHN0YXJ0fHN0b3ApJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24o
Jy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PU5vbmUsIGhlbHA9J1BvcnQgdG8gbGlzdGVuIG9uJykKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcm9vdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J0Fic29sdXRlIHBhdGggdG8gRG9jdW1lbnRSb290ICcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cyknKQorICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ndXNlIFRMUyAod3Nz
Oi8vKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctaycsICctLXByaXZhdGVfa2V5
JywgZGVzdD0ncHJpdmF0ZV9rZXknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PScnLCBoZWxwPSdUTFMgcHJpdmF0ZSBrZXkgZmlsZS4nKQorICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbignLWMnLCAnLS1jZXJ0aWZpY2F0ZScsIGRlc3Q9J2NlcnRpZmljYXRlJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmlj
YXRlIGZpbGUuJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJfY3ln
d2luJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdD0icmVnaXN0ZXJfY3lnd2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhzIChvbiBXaW4gdHJ5IGJvdHMpJykKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oJy0tcGlkZmlsZScsIGhlbHA9J3BhdGggdG8gcGlkIGZpbGUuJykK
KyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlm
IG5vdCBvcHRpb25zLnBvcnQ6CisgICAgICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAg
ICAgIG9wdGlvbnMucG9ydCA9IF9ERUZBVUxUX1dTU19QT1JUCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBvcHRpb25zLnBvcnQgPSBfREVGQVVMVF9XU19QT1JUCisKKyAgICBrd2RzID0geydw
b3J0Jzogb3B0aW9ucy5wb3J0LCAndXNlX3Rscyc6IG9wdGlvbnMudXNlX3Rsc30KKyAgICBpZiBv
cHRpb25zLnJvb3Q6CisgICAgICAgIGt3ZHNbJ3Jvb3QnXSA9IG9wdGlvbnMucm9vdAorICAgIGlm
IG9wdGlvbnMucHJpdmF0ZV9rZXk6CisgICAgICAgIGt3ZHNbJ3ByaXZhdGVfa2V5J10gPSBvcHRp
b25zLnByaXZhdGVfa2V5CisgICAgaWYgb3B0aW9ucy5jZXJ0aWZpY2F0ZToKKyAgICAgICAga3dk
c1snY2VydGlmaWNhdGUnXSA9IG9wdGlvbnMuY2VydGlmaWNhdGUKKyAgICBrd2RzWydyZWdpc3Rl
cl9jeWd3aW4nXSA9IG9wdGlvbnMucmVnaXN0ZXJfY3lnd2luCisgICAgaWYgb3B0aW9ucy5waWRm
aWxlOgorICAgICAgICBrd2RzWydwaWRmaWxlJ10gPSBvcHRpb25zLnBpZGZpbGUKKworICAgIHB5
d2Vic29ja2V0ID0gUHlXZWJTb2NrZXQodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAqKmt3ZHMpCisK
KyAgICBpZiAnc3RhcnQnID09IG9wdGlvbnMuc2VydmVyOgorICAgICAgICBweXdlYnNvY2tldC5z
dGFydCgpCisgICAgZWxzZToKKyAgICAgICAgcHl3ZWJzb2NrZXQuc3RvcChmb3JjZT1UcnVlKQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2Uvd2Vic29ja2V0X3NlcnZlci5weQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47747</attachid>
            <date>2010-01-29 17:13:16 -0800</date>
            <delta_ts>2010-01-29 17:21:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31498-20100129171314.patch</filename>
            <type>text/plain</type>
            <size>31366</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0MDkxKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDEtMjkgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGluIHRoZSBzZWNvbmQgYmxvY2sgb2YgcHl0aG9uIGNvZGUgZm9yIHRo
ZSBDaHJvbWl1bSBwb3J0CisgICAgICAgIG9mIHJ1bi13ZWJraXQtdGVzdHMuIFRoZXNlIGZpbGVz
IGV4ZWN1dGUgZGlmZmVyZW50IGRpZmZzIHRvIGNsYXNzaWZ5CisgICAgICAgIHRoZSB2YXJpb3Vz
IHR5cGVzIG9mIGZhaWx1cmVzIGZyb20gYSB0ZXN0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRfXy5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFn
ZV9kaWZmLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9k
aWZmLnB5OiBBZGRlZC4KKwogMjAxMC0wMS0yOSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNpZWRlbC4KSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9fX2luaXRfXy5weQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMg
Q29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29tcGFyZXMgdGhlIGltYWdlIG91dHB1dCBvZiBhIHRl
c3QgdG8gdGhlIGV4cGVjdGVkIGltYWdlIG91dHB1dCB1c2luZworZnV6enkgbWF0Y2hpbmcuCisi
IiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2h1
dGlsCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRo
X3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIHRl
c3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCisKKworY2xhc3MgRnV6enlJbWFnZURpZmYo
dGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKKworICAgIGRlZiBjb21wYXJlX291dHB1dChz
ZWxmLCBmaWxlbmFtZSwgcHJvYywgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CisgICAgICAg
ICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1
dCBpbWFnZSBhbmQKKyAgICAgICAgY2hlY2tzdW0gYWdhaW5zdCB0aGUgZXhwZWN0ZWQgZmlsZXMg
ZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAgICBmYWls
dXJlcyA9IFtdCisKKyAgICAgICAgIyBJZiB3ZSBkaWRuJ3QgcHJvZHVjZSBhIGhhc2ggZmlsZSwg
dGhpcyB0ZXN0IG11c3QgYmUgdGV4dC1vbmx5LgorICAgICAgICBpZiB0ZXN0X2FyZ3MuaGFzaCBp
cyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICAgICAgZXhwZWN0ZWRf
cG5nX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycp
CisKKyAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKKyAgICAgICAgICAgIGxvZ2dp
bmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxlKQorCisgICAgICAgICMgQWxz
byByZXBvcnQgYSBtaXNzaW5nIGV4cGVjdGVkIFBORyBmaWxlLgorICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5pc2ZpbGUoZXhwZWN0ZWRfcG5nX2ZpbGUpOgorICAgICAgICAgICAgZmFpbHVyZXMuYXBw
ZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZShzZWxmKSkKKworICAgICAgICAj
IFJ1biB0aGUgZnV6enltYXRjaGVyCisgICAgICAgIHIgPSBzdWJwcm9jZXNzLmNhbGwoW3BhdGhf
dXRpbHMuZnV6enlfbWF0Y2hfcGF0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfYXJncy5wbmdfcGF0aCwgZXhwZWN0ZWRfcG5nX2ZpbGVdKQorICAgICAgICBpZiByICE9IDA6
CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlRnV6enlG
YWlsdXJlKHNlbGYpKQorCisgICAgICAgIHJldHVybiBmYWlsdXJlcwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy9mdXp6eV9pbWFnZV9kaWZmLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvaW1hZ2VfZGlmZi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkJKHJldmlzaW9u
IDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL2ltYWdlX2RpZmYucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI0IEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBu
YW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29tcGFyZXMgdGhlIGlt
YWdlIG91dHB1dCBvZiBhIHRlc3QgdG8gdGhlIGV4cGVjdGVkIGltYWdlIG91dHB1dC4KKworQ29t
cGFyZXMgaGFzaGVzIGZvciB0aGUgZ2VuZXJhdGVkIGFuZCBleHBlY3RlZCBpbWFnZXMuIElmIHRo
ZSBvdXRwdXQgZG9lc24ndAorbWF0Y2gsIHJldHVybnMgRmFpbHVyZUltYWdlSGFzaE1pc21hdGNo
IGFuZCBvdXRwdXRzIGJvdGggaGFzaGVzIGludG8gdGhlIGxheW91dAordGVzdCByZXN1bHRzIGRp
cmVjdG9yeS4KKyIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MK
K2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVy
ZXMKK2Zyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKKworIyBDYWNoZSB3aGV0
aGVyIHdlIGhhdmUgdGhlIGltYWdlX2RpZmYgZXhlY3V0YWJsZSBhdmFpbGFibGUuCitfY29tcGFy
ZV9hdmFpbGFibGUgPSBUcnVlCitfY29tcGFyZV9tc2dfcHJpbnRlZCA9IEZhbHNlCisKKworY2xh
c3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CisKKyAgICBkZWYgX2Nv
cHlfb3V0cHV0X3BuZyhzZWxmLCB0ZXN0X2ZpbGVuYW1lLCBzb3VyY2VfaW1hZ2UsIGV4dGVuc2lv
bik6CisgICAgICAgICIiIkNvcGllcyByZXN1bHQgZmlsZXMgaW50byB0aGUgb3V0cHV0IGRpcmVj
dG9yeSB3aXRoIGFwcHJvcHJpYXRlCisgICAgICAgIG5hbWVzLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgdGVzdF9maWxlbmFtZTogdGhlIHRlc3QgZmlsZW5hbWUKKyAgICAgICAgICBzb3Vy
Y2VfZmlsZTogcGF0aCB0byB0aGUgaW1hZ2UgZmlsZSAoZWl0aGVyIGFjdHVhbCBvciBleHBlY3Rl
ZCkKKyAgICAgICAgICBleHRlbnNpb246IGV4dGVuc2lvbiB0byBpbmRpY2F0ZSAtYWN0dWFsLnBu
ZyBvciAtZXhwZWN0ZWQucG5nCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9tYWtlX291dHB1
dF9kaXJlY3RvcnkodGVzdF9maWxlbmFtZSkKKyAgICAgICAgZGVzdF9pbWFnZSA9IHNlbGYub3V0
cHV0X2ZpbGVuYW1lKHRlc3RfZmlsZW5hbWUsIGV4dGVuc2lvbikKKworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc291cmNlX2ltYWdlLCBkZXN0X2ltYWdlKQorICAg
ICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICMgQSBtaXNzaW5nIGV4cGVjdGVk
IFBORyBoYXMgYWxyZWFkeSBiZWVuIHJlY29yZGVkIGFzIGFuIGVycm9yLgorICAgICAgICAgICAg
aWYgZXJybm8uRU5PRU5UICE9IGUuZXJybm86CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAg
IGRlZiBfc2F2ZV9iYXNlbGluZV9maWxlcyhzZWxmLCBmaWxlbmFtZSwgcG5nX3BhdGgsIGNoZWNr
c3VtKToKKyAgICAgICAgIiIiU2F2ZXMgbmV3IGJhc2VsaW5lcyBmb3IgdGhlIFBORyBhbmQgY2hl
Y2tzdW0uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogdGVzdCBmaWxlbmFt
ZQorICAgICAgICAgIHBuZ19wYXRoOiBwYXRoIHRvIHRoZSBhY3R1YWwgUE5HIHJlc3VsdCBmaWxl
CisgICAgICAgICAgY2hlY2tzdW06IHZhbHVlIG9mIHRoZSBhY3R1YWwgY2hlY2tzdW0gcmVzdWx0
CisgICAgICAgICIiIgorICAgICAgICBwbmdfZmlsZSA9IG9wZW4ocG5nX3BhdGgsICJyYiIpCisg
ICAgICAgIHBuZ19kYXRhID0gcG5nX2ZpbGUucmVhZCgpCisgICAgICAgIHBuZ19maWxlLmNsb3Nl
KCkKKyAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBwbmdfZGF0YSwg
Ii5wbmciKQorICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIGNoZWNr
c3VtLCAiLmNoZWNrc3VtIikKKworICAgIGRlZiBfY3JlYXRlX2ltYWdlX2RpZmYoc2VsZiwgZmls
ZW5hbWUsIHRhcmdldCk6CisgICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRo
ZSBleHBlY3RlZC9hY3R1YWwgUE5Hcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGZpbGVu
YW1lOiB0aGUgbmFtZSBvZiB0aGUgdGVzdAorICAgICAgICAgIHRhcmdldDogRGVidWcgb3IgUmVs
ZWFzZQorICAgICAgICAiIiIKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2Zp
bGVuYW1lKGZpbGVuYW1lLAorICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0NPTVBBUkUp
CisgICAgICAgIGFjdHVhbF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1l
LAorICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0FDVFVBTCArICcucG5nJykKKyAgICAg
ICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKKyAg
ICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArICcucG5nJykKKworICAgICAg
ICBnbG9iYWwgX2NvbXBhcmVfYXZhaWxhYmxlCisgICAgICAgIGNtZCA9ICcnCisKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2VfZGlmZl9wYXRo
KHRhcmdldCkKKyAgICAgICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLCAnLS1kaWZmJywgYWN0dWFs
X2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBkaWZmX2Zp
bGVuYW1lXQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgX2NvbXBh
cmVfYXZhaWxhYmxlID0gRmFsc2UKKworICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIGlmIF9j
b21wYXJlX2F2YWlsYWJsZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6
CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9
PSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9
IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
ZQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3b3Jr
IGFyb3VuZCBhIHJhY2UgY29uZGl0aW9uIGluIFB5dGhvbiAyLjQncyBpbXBsZW1lbnRhdGlvbgor
ICAgICAgICAgICAgICAgICMgb2Ygc3VicHJvY2Vzcy5Qb3BlbgorICAgICAgICAgICAgICAgIHBh
c3MKKworICAgICAgICBnbG9iYWwgX2NvbXBhcmVfbXNnX3ByaW50ZWQKKworICAgICAgICBpZiBu
b3QgX2NvbXBhcmVfYXZhaWxhYmxlIGFuZCBub3QgX2NvbXBhcmVfbXNnX3ByaW50ZWQ6CisgICAg
ICAgICAgICBfY29tcGFyZV9tc2dfcHJpbnRlZCA9IFRydWUKKyAgICAgICAgICAgIHByaW50KCdp
bWFnZV9kaWZmIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHlvdSBoYXZlIGEgJyArIHRhcmdldCArCisg
ICAgICAgICAgICAgICAgICAnIGJ1aWxkIG9mIHRoZSBpbWFnZV9kaWZmIGV4ZWN1dGFibGUuJykK
KworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwg
ZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgICAgICAiIiJJ
bXBsZW1lbnRhdGlvbiBvZiBDb21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1h
Z2UgYW5kCisgICAgICAgIGNoZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20g
dGhlIExheW91dFRlc3QgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgZmFpbHVyZXMg
PSBbXQorCisgICAgICAgICMgSWYgd2UgZGlkbid0IHByb2R1Y2UgYSBoYXNoIGZpbGUsIHRoaXMg
dGVzdCBtdXN0IGJlIHRleHQtb25seS4KKyAgICAgICAgaWYgdGVzdF9hcmdzLmhhc2ggaXMgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgICAgICMgSWYgd2UncmUgZ2Vu
ZXJhdGluZyBhIG5ldyBiYXNlbGluZSwgd2UgcGFzcy4KKyAgICAgICAgaWYgdGVzdF9hcmdzLm5l
d19iYXNlbGluZToKKyAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZmlsZXMoZmlsZW5h
bWUsIHRlc3RfYXJncy5wbmdfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RfYXJncy5oYXNoKQorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICAg
ICAgIyBDb21wYXJlIGhhc2hlcy4KKyAgICAgICAgZXhwZWN0ZWRfaGFzaF9maWxlID0gcGF0aF91
dGlscy5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmNoZWNrc3VtJykKKyAgICAgICAg
ZXhwZWN0ZWRfcG5nX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1l
LCAnLnBuZycpCisKKyAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKKyAgICAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX2hhc2hfZmlsZSkKKyAgICAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxlKQorCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGVjdGVkX2hhc2ggPSBvcGVuKGV4cGVjdGVkX2hh
c2hfZmlsZSwgInIiKS5yZWFkKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAg
ICAgICBpZiBlcnJuby5FTk9FTlQgIT0gZS5lcnJubzoKKyAgICAgICAgICAgICAgICByYWlzZQor
ICAgICAgICAgICAgZXhwZWN0ZWRfaGFzaCA9ICcnCisKKworICAgICAgICBpZiBub3Qgb3MucGF0
aC5pc2ZpbGUoZXhwZWN0ZWRfcG5nX2ZpbGUpOgorICAgICAgICAgICAgIyBSZXBvcnQgYSBtaXNz
aW5nIGV4cGVjdGVkIFBORyBmaWxlLgorICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmls
ZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywgdGVzdF9hcmdzLmhhc2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9oYXNoLCBkaWZmPUZhbHNlLCB3ZGlm
Zj1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgdGVz
dF9hcmdzLnBuZ19wYXRoLCAnLWFjdHVhbC5wbmcnKQorICAgICAgICAgICAgZmFpbHVyZXMuYXBw
ZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZShzZWxmKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWlsdXJlcworICAgICAgICBlbGlmIHRlc3RfYXJncy5oYXNoID09IGV4cGVjdGVk
X2hhc2g6CisgICAgICAgICAgICAjIEhhc2ggbWF0Y2hlZCAobm8gZGlmZiBuZWVkZWQsIG9rYXkg
dG8gcmV0dXJuKS4KKyAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcworCisKKyAgICAgICAgc2Vs
Zi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywgdGVzdF9hcmdz
Lmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2hhc2gsIGRp
ZmY9RmFsc2UsIHdkaWZmPUZhbHNlKQorICAgICAgICBzZWxmLl9jb3B5X291dHB1dF9wbmcoZmls
ZW5hbWUsIHRlc3RfYXJncy5wbmdfcGF0aCwgJy1hY3R1YWwucG5nJykKKyAgICAgICAgc2VsZi5f
Y29weV9vdXRwdXRfcG5nKGZpbGVuYW1lLCBleHBlY3RlZF9wbmdfZmlsZSwgJy1leHBlY3RlZC5w
bmcnKQorCisgICAgICAgICMgRXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgcmVzdWx0IGluIG9uZSBj
b2RlcGF0aCBiZWxvdyBidXQgd2UKKyAgICAgICAgIyBzdGlsbCBuZWVkIHRvIGNhbGwgQ3JlYXRl
SW1hZ2VEaWZmIGZvciBvdGhlciBjb2RlcGF0aHMuCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2Ny
ZWF0ZV9pbWFnZV9kaWZmKGZpbGVuYW1lLCB0YXJnZXQpCisgICAgICAgIGlmIGV4cGVjdGVkX2hh
c2ggPT0gJyc6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWls
dXJlTWlzc2luZ0ltYWdlSGFzaChzZWxmKSkKKyAgICAgICAgZWxpZiB0ZXN0X2FyZ3MuaGFzaCAh
PSBleHBlY3RlZF9oYXNoOgorICAgICAgICAgICAgIyBIYXNoZXMgZG9uJ3QgbWF0Y2gsIHNvIHNl
ZSBpZiB0aGUgaW1hZ2VzIG1hdGNoLiBJZiB0aGV5IGRvLCB0aGVuCisgICAgICAgICAgICAjIHRo
ZSBoYXNoIGlzIHdyb25nLgorICAgICAgICAgICAgaWYgcmVzdWx0ID09IDA6CisgICAgICAgICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaEluY29y
cmVjdChzZWxmKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaE1pc21hdGNoKHNlbGYpKQorCisg
ICAgICAgIHJldHVybiBmYWlsdXJlcworCisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwgZmlsZTEs
IGZpbGUyKToKKyAgICAgICAgIiIiRGlmZiB0d28gaW1hZ2UgZmlsZXMuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBmaWxlMSwgZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGZpbGVzIHRvIGNv
bXBhcmUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIHR3byBmaWxlcyBh
cmUgZGlmZmVyZW50LgorICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2Vf
ZGlmZl9wYXRoKCdEZWJ1ZycpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAg
ICAgICBsb2dnaW5nLndhcm4oJ0ZhaWxlZCB0byBmaW5kIGltYWdlIGRpZmYgZXhlY3V0YWJsZS4n
KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwg
ZmlsZTEsIGZpbGUyXQorICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChjbWQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9y
LCBlOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGYWlsZWQgdG8gY29tcGFyZSBpbWFnZSBk
aWZmOiAlcycsIGUpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBy
ZXN1bHQgPT0gMQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy90ZXN0X3R5cGVfYmFzZS5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjY2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIiIiRGVmaW5lcyB0aGUgaW50ZXJmYWNlIFRlc3RUeXBlQmFzZSB3aGlj
aCBvdGhlciB0ZXN0IHR5cGVzIGluaGVyaXQgZnJvbS4KKworQWxzbyBkZWZpbmVzIHRoZSBUZXN0
QXJndW1lbnRzICJzdHJ1Y3QiIHRvIHBhc3MgdGhlbSBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KKyIi
IgorCitpbXBvcnQgY2dpCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGVycm5vCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKKworCitjbGFzcyBUZXN0QXJndW1lbnRzKG9iamVjdCk6
CisgICAgIiIiU3RydWN0LWxpa2Ugd3JhcHBlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgbmVl
ZGVkIGJ5CisgICAgc3BlY2lmaWMgdGVzdHMuIiIiCisgICAgIyBXaGV0aGVyIHRvIHNhdmUgbmV3
IGJhc2VsaW5lIHJlc3VsdHMuCisgICAgbmV3X2Jhc2VsaW5lID0gRmFsc2UKKworICAgICMgUGF0
aCB0byB0aGUgYWN0dWFsIFBORyBmaWxlIGdlbmVyYXRlZCBieSBwaXhlbCB0ZXN0cworICAgIHBu
Z19wYXRoID0gTm9uZQorCisgICAgIyBWYWx1ZSBvZiBjaGVja3N1bSBnZW5lcmF0ZWQgYnkgcGl4
ZWwgdGVzdHMuCisgICAgaGFzaCA9IE5vbmUKKworICAgICMgV2hldGhlciB0byB1c2Ugd2RpZmYg
dG8gZ2VuZXJhdGUgYnktd29yZCBkaWZmcy4KKyAgICB3ZGlmZiA9IEZhbHNlCisKKyAgICAjIFdo
ZXRoZXIgdG8gcmVwb3J0IHRoZSBsb2NhdGlvbnMgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmaWxl
cyB1c2VkLgorICAgIHNob3dfc291cmNlcyA9IEZhbHNlCisKKyMgUHl0aG9uIGJ1ZyB3b3JrYXJv
dW5kLiAgU2VlIHRoZSB3ZGlmZiBjb2RlIGluIFdyaXRlT3V0cHV0RmlsZXMgZm9yIGFuCisjIGV4
cGxhbmF0aW9uLgorX3dkaWZmX2F2YWlsYWJsZSA9IFRydWUKKworCitjbGFzcyBUZXN0VHlwZUJh
c2Uob2JqZWN0KToKKworICAgICMgRmlsZW5hbWUgcGllY2VzIHdoZW4gd3JpdGluZyBmYWlsdXJl
cyB0byB0aGUgdGVzdCByZXN1bHRzIGRpcmVjdG9yeS4KKyAgICBGSUxFTkFNRV9TVUZGSVhfQUNU
VUFMID0gIi1hY3R1YWwiCisgICAgRklMRU5BTUVfU1VGRklYX0VYUEVDVEVEID0gIi1leHBlY3Rl
ZCIKKyAgICBGSUxFTkFNRV9TVUZGSVhfRElGRiA9ICItZGlmZiIKKyAgICBGSUxFTkFNRV9TVUZG
SVhfV0RJRkYgPSAiLXdkaWZmLmh0bWwiCisgICAgRklMRU5BTUVfU1VGRklYX0NPTVBBUkUgPSAi
LWRpZmYucG5nIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtLCByb290X291dHB1
dF9kaXIpOgorICAgICAgICAiIiJJbml0aWFsaXplIGEgVGVzdFR5cGVCYXNlIG9iamVjdC4KKwor
ICAgICAgICBBcmdzOgorICAgICAgICAgIHBsYXRmb3JtOiB0aGUgcGxhdGZvcm0gKGUuZy4sICdj
aHJvbWl1bS1tYWMtbGVvcGFyZCcpCisgICAgICAgICAgICBpZGVudGlmeWluZyB0aGUgcGxhdGZv
cm0tc3BlY2lmaWMgcmVzdWx0cyB0byBiZSB1c2VkLgorICAgICAgICAgIHJvb3Rfb3V0cHV0X2Rp
cjogVGhlIHVuaXggc3R5bGUgcGF0aCB0byB0aGUgb3V0cHV0IGRpci4KKyAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYuX3Jvb3Rfb3V0cHV0X2RpciA9IHJvb3Rfb3V0cHV0X2RpcgorICAgICAgICBz
ZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCisKKyAgICBkZWYgX21ha2Vfb3V0cHV0X2RpcmVjdG9y
eShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZXMgdGhlIG91dHB1dCBkaXJlY3Rv
cnkgKGlmIG5lZWRlZCkgZm9yIGEgZ2l2ZW4gdGVzdAorICAgICAgICBmaWxlbmFtZS4iIiIKKyAg
ICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX3Jvb3Rfb3V0cHV0X2Rp
ciwKKyAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFt
ZSkpCisgICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxp
dChvdXRwdXRfZmlsZW5hbWUpWzBdKQorCisgICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2Vs
ZiwgZmlsZW5hbWUsIGRhdGEsIG1vZGlmaWVyKToKKyAgICAgICAgIiIiU2F2ZXMgYSBuZXcgYmFz
ZWxpbmUgZmlsZSBpbnRvIHRoZSBwbGF0Zm9ybSBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhlIGZp
bGUgd2lsbCBiZSBuYW1lZCBzaW1wbHkgIjx0ZXN0Pi1leHBlY3RlZDxtb2RpZmllcj4iLCBzdWl0
YWJsZSBmb3IKKyAgICAgICAgdXNlIGFzIHRoZSBleHBlY3RlZCByZXN1bHRzIGluIGEgbGF0ZXIg
cnVuLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWU6IHBhdGggdG8gdGhlIHRl
c3QgZmlsZQorICAgICAgICAgIGRhdGE6IHJlc3VsdCB0byBiZSBzYXZlZCBhcyB0aGUgbmV3IGJh
c2VsaW5lCisgICAgICAgICAgbW9kaWZpZXI6IHR5cGUgb2YgdGhlIHJlc3VsdCBmaWxlLCBlLmcu
ICIudHh0IiBvciAiLnBuZyIKKyAgICAgICAgIiIiCisgICAgICAgIHJlbGF0aXZlX2RpciA9IG9z
LnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxl
bmFtZShmaWxlbmFtZSkpCisgICAgICAgIG91dHB1dF9kaXIgPSBvcy5wYXRoLmpvaW4oCisgICAg
ICAgICAgICBwYXRoX3V0aWxzLmNocm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZi5fcGxhdGZvcm0p
LCByZWxhdGl2ZV9kaXIpCisgICAgICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5iYXNlbmFtZShv
cy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArCisgICAgICAgICAgICBzZWxmLkZJTEVOQU1F
X1NVRkZJWF9FWFBFQ1RFRCArIG1vZGlmaWVyKQorCisgICAgICAgIHBhdGhfdXRpbHMubWF5YmVf
bWFrZV9kaXJlY3Rvcnkob3V0cHV0X2RpcikKKyAgICAgICAgb3V0cHV0X3BhdGggPSBvcy5wYXRo
LmpvaW4ob3V0cHV0X2Rpciwgb3V0cHV0X2ZpbGUpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ3dy
aXRpbmcgbmV3IGJhc2VsaW5lIHRvICIlcyInICUgKG91dHB1dF9wYXRoKSkKKyAgICAgICAgb3Bl
bihvdXRwdXRfcGF0aCwgIndiIikud3JpdGUoZGF0YSkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5h
bWUoc2VsZiwgZmlsZW5hbWUsIG1vZGlmaWVyKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGZpbGVu
YW1lIGluc2lkZSB0aGUgb3V0cHV0IGRpciB0aGF0IGNvbnRhaW5zIG1vZGlmaWVyLgorCisgICAg
ICAgIEZvciBleGFtcGxlLCBpZiBmaWxlbmFtZSBpcyBjOi8uLi4vZmFzdC9kb20vZm9vLmh0bWwg
YW5kIG1vZGlmaWVyIGlzCisgICAgICAgICItZXhwZWN0ZWQudHh0IiwgdGhlIHJldHVybiB2YWx1
ZSBpcworICAgICAgICBjOi9jeWd3aW4vdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9kb20v
Zm9vLWV4cGVjdGVkLnR4dAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZW5hbWU6IGFi
c29sdXRlIGZpbGVuYW1lIHRvIHRlc3QgZmlsZQorICAgICAgICAgIG1vZGlmaWVyOiBhIHN0cmlu
ZyB0byByZXBsYWNlIHRoZSBleHRlbnNpb24gb2YgZmlsZW5hbWUgd2l0aAorCisgICAgICAgIFJl
dHVybjoKKyAgICAgICAgICBUaGUgYWJzb2x1dGUgd2luZG93cyBwYXRoIHRvIHRoZSBvdXRwdXQg
ZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGgu
am9pbihzZWxmLl9yb290X291dHB1dF9kaXIsCisgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxp
dGV4dChvdXRwdXRfZmlsZW5hbWUpWzBdICsgbW9kaWZpZXIKKworICAgIGRlZiBjb21wYXJlX291
dHB1dChzZWxmLCBmaWxlbmFtZSwgcHJvYywgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6Cisg
ICAgICAgICIiIk1ldGhvZCB0aGF0IGNvbXBhcmVzIHRoZSBvdXRwdXQgZnJvbSB0aGUgdGVzdCB3
aXRoIHRoZQorICAgICAgICBleHBlY3RlZCB2YWx1ZS4KKworICAgICAgICBUaGlzIGlzIGFuIGFi
c3RyYWN0IG1ldGhvZCB0byBiZSBpbXBsZW1lbnRlZCBieSBhbGwgc3ViIGNsYXNzZXMuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVz
dCBmaWxlCisgICAgICAgICAgcHJvYzogYSByZWZlcmVuY2UgdG8gdGhlIHRlc3Rfc2hlbGwgcHJv
Y2VzcworICAgICAgICAgIG91dHB1dDogYSBzdHJpbmcgY29udGFpbmluZyB0aGUgb3V0cHV0IG9m
IHRoZSB0ZXN0CisgICAgICAgICAgdGVzdF9hcmdzOiBhIFRlc3RBcmd1bWVudHMgb2JqZWN0IGhv
bGRpbmcgb3B0aW9uYWwgYWRkaXRpb25hbAorICAgICAgICAgICAgICBhcmd1bWVudHMKKyAgICAg
ICAgICB0YXJnZXQ6IERlYnVnIG9yIFJlbGVhc2UKKworICAgICAgICBSZXR1cm46CisgICAgICAg
ICAgYSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMsIGVtcHR5IGlmIHRoZSB0ZXN0IHBhc3Nl
cworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiB3
cml0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgZmlsZW5hbWUsIHRlc3RfdHlwZSwgZmlsZV90eXBlLCBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3
ZGlmZj1GYWxzZSk6CisgICAgICAgICIiIldyaXRlcyB0aGUgdGVzdCBvdXRwdXQsIHRoZSBleHBl
Y3RlZCBvdXRwdXQgYW5kIG9wdGlvbmFsbHkgdGhlIGRpZmYKKyAgICAgICAgYmV0d2VlbiB0aGUg
dHdvIHRvIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeS4KKworICAgICAgICBUaGUgZnVs
bCBvdXRwdXQgZmlsZW5hbWUgb2YgdGhlIGFjdHVhbCwgZm9yIGV4YW1wbGUsIHdpbGwgYmUKKyAg
ICAgICAgICA8ZmlsZW5hbWU+PHRlc3RfdHlwZT4tYWN0dWFsPGZpbGVfdHlwZT4KKyAgICAgICAg
Rm9yIGluc3RhbmNlLAorICAgICAgICAgIG15X3Rlc3Qtc2ltcC1hY3R1YWwudHh0CisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogVGhlIHRlc3QgZmlsZW5hbWUKKyAgICAgICAg
ICB0ZXN0X3R5cGU6IEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3QgdHlwZSwgZS5nLiAic2lt
cCIKKyAgICAgICAgICBmaWxlX3R5cGU6IEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3Qgb3V0
cHV0IGZpbGUgdHlwZSwgZS5nLiAiLnR4dCIKKyAgICAgICAgICBvdXRwdXQ6IEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIHRlc3Qgb3V0cHV0CisgICAgICAgICAgZXhwZWN0ZWQ6IEEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIGV4cGVjdGVkIHRlc3Qgb3V0cHV0CisgICAgICAgICAgZGlmZjogaWYgVHJ1
ZSwgd3JpdGUgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRpZmZzIHRvby4gVGhpcyBzaG91bGQgYmUK
KyAgICAgICAgICAgICAgRmFsc2UgZm9yIHJlc3VsdHMgdGhhdCBhcmUgbm90IHRleHQKKyAgICAg
ICAgICB3ZGlmZjogaWYgVHJ1ZSwgd3JpdGUgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgd29yZC1i
eS13b3JkIGRpZmZzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9tYWtlX291dHB1dF9kaXJl
Y3RvcnkoZmlsZW5hbWUpCisgICAgICAgIGFjdHVhbF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2Zp
bGVuYW1lKGZpbGVuYW1lLAorICAgICAgICAgICAgdGVzdF90eXBlICsgc2VsZi5GSUxFTkFNRV9T
VUZGSVhfQUNUVUFMICsgZmlsZV90eXBlKQorICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNl
bGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAorICAgICAgICAgICAgdGVzdF90eXBlICsgc2Vs
Zi5GSUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgKyBmaWxlX3R5cGUpCisgICAgICAgIGlmIG91dHB1
dDoKKyAgICAgICAgICAgIG9wZW4oYWN0dWFsX2ZpbGVuYW1lLCAid2IiKS53cml0ZShvdXRwdXQp
CisgICAgICAgIGlmIGV4cGVjdGVkOgorICAgICAgICAgICAgb3BlbihleHBlY3RlZF9maWxlbmFt
ZSwgIndiIikud3JpdGUoZXhwZWN0ZWQpCisKKyAgICAgICAgaWYgbm90IG91dHB1dCBvciBub3Qg
ZXhwZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBkaWZmOgorICAgICAg
ICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGV4cGVjdGVkLnNwbGl0bGluZXMoVHJ1
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnNwbGl0
bGluZXMoVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWN0dWFsX2ZpbGVuYW1lKQorCisgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRw
dXRfZmlsZW5hbWUoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgdGVzdF90eXBlICsgc2VsZi5G
SUxFTkFNRV9TVUZGSVhfRElGRiArIGZpbGVfdHlwZSkKKyAgICAgICAgICAgIG9wZW4oZGlmZl9m
aWxlbmFtZSwgIndiIikud3JpdGUoJycuam9pbihkaWZmKSkKKworICAgICAgICBpZiB3ZGlmZjoK
KyAgICAgICAgICAgICMgU2hlbGwgb3V0IHRvIHdkaWZmIHRvIGdldCBjb2xvcmVkIGlubGluZSBk
aWZmcy4KKyAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLndkaWZmX3BhdGgoKQor
ICAgICAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgJy0tc3Rh
cnQtZGVsZXRlPSMjV0RJRkZfREVMIyMnLAorICAgICAgICAgICAgICAgICAgICctLWVuZC1kZWxl
dGU9IyNXRElGRl9FTkQjIycsCisgICAgICAgICAgICAgICAgICAgJy0tc3RhcnQtaW5zZXJ0PSMj
V0RJRkZfQUREIyMnLAorICAgICAgICAgICAgICAgICAgICctLWVuZC1pbnNlcnQ9IyNXRElGRl9F
TkQjIycsCisgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAg
ICAgICAgICAgYWN0dWFsX2ZpbGVuYW1lXQorICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm91
dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X3R5cGUgKyBzZWxmLkZJTEVOQU1FX1NVRkZJWF9XRElGRikKKworICAgICAgICAgICAgZ2xvYmFs
IF93ZGlmZl9hdmFpbGFibGUKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMg
UHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGFueSBwaXBlcyBvcGVuZWQgdG8g
YQorICAgICAgICAgICAgICAgICMgcHJvY2VzcyB0aGF0IGNhbid0IGJlIGV4ZWN1dGVkIHRvIGJl
IGxlYWtlZC4gIFNpbmNlIHRoaXMKKyAgICAgICAgICAgICAgICAjIGNvZGUgaXMgc3BlY2lmaWNh
bGx5IGRlc2lnbmVkIHRvIHRvbGVyYXRlIGV4ZWMgZmFpbHVyZXMKKyAgICAgICAgICAgICAgICAj
IHRvIGdyYWNlZnVsbHkgaGFuZGxlIGNhc2VzIHdoZXJlIHdkaWZmIGlzIG5vdCBpbnN0YWxsZWQs
CisgICAgICAgICAgICAgICAgIyB0aGUgYnVnIHJlc3VsdHMgaW4gYSBtYXNzaXZlIGZpbGUgZGVz
Y3JpcHRvciBsZWFrLiBBcyBhCisgICAgICAgICAgICAgICAgIyB3b3JrYXJvdW5kLCBpZiBhbiBl
eGVjIGZhaWx1cmUgaXMgZXZlciBleHBlcmllbmNlZCBmb3IKKyAgICAgICAgICAgICAgICAjIHdk
aWZmLCBhc3N1bWUgaXQncyBub3QgYXZhaWxhYmxlLiAgVGhpcyB3aWxsIGxlYWsgb25lCisgICAg
ICAgICAgICAgICAgIyBmaWxlIGRlc2NyaXB0b3IgYnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBsZWFr
aW5nIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICMgd2RpZmYgd291bGQgYmUgcnVuLgorICAg
ICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcv
cGlwZXJtYWlsL3B5dGhvbi1saXN0LworICAgICAgICAgICAgICAgICMgICAgMjAwOC1BdWd1c3Qv
NTA1NzUzLmh0bWwKKyAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNz
dWUzMjEwCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSXQgYWxzbyBoYXMg
YSB0aHJlYWRpbmcgYnVnLCBzbyB3ZSBkb24ndCBvdXRwdXQgd2RpZmYgaWYKKyAgICAgICAgICAg
ICAgICAjIHRoZSBQb3BlbiByYWlzZXMgYSBWYWx1ZUVycm9yLgorICAgICAgICAgICAgICAgICMg
aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEyMzYKKyAgICAgICAgICAgICAgICBpZiBfd2Rp
ZmZfYXZhaWxhYmxlOgorICAgICAgICAgICAgICAgICAgICB3ZGlmZiA9IHN1YnByb2Nlc3MuUG9w
ZW4oCisgICAgICAgICAgICAgICAgICAgICAgICBjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUp
LmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgICAgICAgICAgd2RpZmZfZmFpbGVkID0gRmFs
c2UKKworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgaWYg
KGUuZXJybm8gPT0gZXJybm8uRU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTIG9yCisg
ICAgICAgICAgICAgICAgICAgIGUuZXJybm8gPT0gZXJybm8uRUNISUxEKToKKyAgICAgICAgICAg
ICAgICAgICAgX3dkaWZmX2F2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJy
b3IsIGU6CisgICAgICAgICAgICAgICAgd2RpZmZfZmFpbGVkID0gVHJ1ZQorCisgICAgICAgICAg
ICBvdXQgPSBvcGVuKGZpbGVuYW1lLCAnd2InKQorCisgICAgICAgICAgICBpZiBub3QgX3dkaWZm
X2F2YWlsYWJsZToKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoCisgICAgICAgICAgICAgICAg
ICAgICJ3ZGlmZiBub3QgaW5zdGFsbGVkLjxici8+ICIKKyAgICAgICAgICAgICAgICAgICAgIklm
IHlvdSdyZSBydW5uaW5nIE9TIFgsIHlvdSBjYW4gaW5zdGFsbCB2aWEgbWFjcG9ydHMuIgorICAg
ICAgICAgICAgICAgICAgICAiPGJyLz4iCisgICAgICAgICAgICAgICAgICAgICJJZiBydW5uaW5n
IFVidW50dSBsaW51eCwgeW91IGNhbiBydW4gIgorICAgICAgICAgICAgICAgICAgICAiJ3N1ZG8g
YXB0LWdldCBpbnN0YWxsIHdkaWZmJy4iKQorICAgICAgICAgICAgZWxpZiB3ZGlmZl9mYWlsZWQ6
CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCd3ZGlmZiBmYWlsZWQgZHVlIHRvIHJ1bm5pbmcg
d2l0aCBtdWx0aXBsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X3NoZWxscyBp
biBwYXJhbGxlbC4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3ZGlmZiA9
IGNnaS5lc2NhcGUod2RpZmYpCisgICAgICAgICAgICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNl
KCcjI1dESUZGX0RFTCMjJywgJzxzcGFuIGNsYXNzPWRlbD4nKQorICAgICAgICAgICAgICAgIHdk
aWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9BREQjIycsICc8c3BhbiBjbGFzcz1hZGQ+JykK
KyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZfRU5EIyMnLCAn
PC9zcGFuPicpCisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCc8aGVhZD48c3R5bGU+LmRlbCB7
IGJhY2tncm91bmQ6ICNmYWE7IH0gJykKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJy5hZGQg
eyBiYWNrZ3JvdW5kOiAjYWZhOyB9PC9zdHlsZT48L2hlYWQ+JykKKyAgICAgICAgICAgICAgICBv
dXQud3JpdGUoJzxwcmU+JyArIHdkaWZmICsgJzwvcHJlPicpCisKKyAgICAgICAgICAgIG91dC5j
bG9zZSgpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4
dF9kaWZmLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiQ29tcGFyZXMgdGhlIHRleHQgb3V0cHV0IG9mIGEgdGVzdCB0byB0aGUgZXhwZWN0ZWQgdGV4
dCBvdXRwdXQuCisKK0lmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCwgcmV0dXJucyBGYWlsdXJl
VGV4dE1pc21hdGNoIGFuZCBvdXRwdXRzIHRoZSBkaWZmCitmaWxlcyBpbnRvIHRoZSBsYXlvdXQg
dGVzdCByZXN1bHRzIGRpcmVjdG9yeS4KKyIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MucGF0aAorCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0
aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCitmcm9tIHRlc3Rf
dHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCisKKworZGVmIGlzX3JlbmRlcl90cmVlX2R1bXAo
ZGF0YSk6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmIGRhdGEgYXBwZWFycyB0byBiZSBhIHJlbmRl
ciB0cmVlIGR1bXAgYXMgb3Bwb3NlZCB0byBhCisgICAgcGxhaW4gdGV4dCBkdW1wLiIiIgorICAg
IHJldHVybiBkYXRhLmZpbmQoIlJlbmRlclZpZXcgYXQgKDAsMCkiKSAhPSAtMQorCisKK2NsYXNz
IFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgorCisgICAgZGVmIGdl
dF9ub3JtYWxpemVkX291dHB1dF90ZXh0KHNlbGYsIG91dHB1dCk6CisgICAgICAgICMgU29tZSB0
ZXN0cyBwcm9kdWNlICJcclxuIiBleHBsaWNpdGx5LiAgT3VyIHN5c3RlbSAoUHl0aG9uL0N5Z3dp
bikKKyAgICAgICAgIyBoZWxwZnVsbHkgY2hhbmdlcyB0aGUgIlxuIiB0byAiXHJcbiIsIHJlc3Vs
dGluZyBpbiAiXHJcclxuIi4KKyAgICAgICAgbm9ybSA9IG91dHB1dC5yZXBsYWNlKCJcclxyXG4i
LCAiXHJcbiIpLnN0cmlwKCJcclxuIikucmVwbGFjZSgKKyAgICAgICAgICAgICAiXHJcbiIsICJc
biIpCisgICAgICAgIHJldHVybiBub3JtICsgIlxuIgorCisgICAgZGVmIGdldF9ub3JtYWxpemVk
X2V4cGVjdGVkX3RleHQoc2VsZiwgZmlsZW5hbWUsIHNob3dfc291cmNlcyk6CisgICAgICAgICIi
IkdpdmVuIHRoZSBmaWxlbmFtZSBvZiB0aGUgdGVzdCwgcmVhZCB0aGUgZXhwZWN0ZWQgb3V0cHV0
IGZyb20gYSBmaWxlCisgICAgICAgIGFuZCBub3JtYWxpemUgdGhlIHRleHQuICBSZXR1cm5zIGEg
c3RyaW5nIHdpdGggdGhlIGV4cGVjdGVkIHRleHQsIG9yICcnCisgICAgICAgIGlmIHRoZSBleHBl
Y3RlZCBvdXRwdXQgZmlsZSB3YXMgbm90IGZvdW5kLiIiIgorICAgICAgICAjIFJlYWQgdGhlIHBs
YXRmb3JtLXNwZWNpZmljIGV4cGVjdGVkIHRleHQuCisgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1l
ID0gcGF0aF91dGlscy5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy50eHQnKQorICAgICAg
ICBpZiBzaG93X3NvdXJjZXM6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCdVc2luZyAlcycg
JSBleHBlY3RlZF9maWxlbmFtZSkKKworICAgICAgICByZXR1cm4gc2VsZi5nZXRfbm9ybWFsaXpl
ZF90ZXh0KGV4cGVjdGVkX2ZpbGVuYW1lKQorCisgICAgZGVmIGdldF9ub3JtYWxpemVkX3RleHQo
c2VsZiwgZmlsZW5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gb3Blbihm
aWxlbmFtZSkucmVhZCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAg
aWYgZXJybm8uRU5PRU5UICE9IGUuZXJybm86CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAg
ICAgICAgIHJldHVybiAnJworCisgICAgICAgICMgTm9ybWFsaXplIGxpbmUgZW5kaW5ncworICAg
ICAgICByZXR1cm4gdGV4dC5zdHJpcCgiXHJcbiIpLnJlcGxhY2UoIlxyXG4iLCAiXG4iKSArICJc
biIKKworICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxlbmFtZSwgcHJvYywgb3V0cHV0
LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CisgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBh
cmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCB0ZXh0IGFnYWluc3QKKyAgICAgICAgdGhl
IGV4cGVjdGVkIHRleHQgZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuIiIiCisgICAgICAg
IGZhaWx1cmVzID0gW10KKworICAgICAgICAjIElmIHdlJ3JlIGdlbmVyYXRpbmcgYSBuZXcgYmFz
ZWxpbmUsIHdlIHBhc3MuCisgICAgICAgIGlmIHRlc3RfYXJncy5uZXdfYmFzZWxpbmU6CisgICAg
ICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIG91dHB1dCwgIi50eHQi
KQorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICAgICAgIyBOb3JtYWxpemUgdGV4
dCB0byBkaWZmCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ2V0X25vcm1hbGl6ZWRfb3V0cHV0X3Rl
eHQob3V0cHV0KQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZ2V0X25vcm1hbGl6ZWRfZXhwZWN0
ZWRfdGV4dChmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9hcmdzLnNob3dfc291cmNlcykKKworICAgICAgICAjIFdyaXRl
IG91dHB1dCBmaWxlcyBmb3IgbmV3IHRlc3RzLCB0b28uCisgICAgICAgIGlmIG91dHB1dCAhPSBl
eHBlY3RlZDoKKyAgICAgICAgICAgICMgVGV4dCBkb2Vzbid0IG1hdGNoLCB3cml0ZSBvdXRwdXQg
ZmlsZXMuCisgICAgICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgIiIs
ICIudHh0Iiwgb3V0cHV0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZmY9VHJ1ZSwgd2RpZmY9VHJ1ZSkKKworICAgICAgICAgICAgaWYgZXhwZWN0ZWQg
PT0gJyc6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFp
bHVyZU1pc3NpbmdSZXN1bHQoc2VsZikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUZXh0TWlzbWF0Y2goc2Vs
ZiwgVHJ1ZSkpCisKKyAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICBkZWYgZGlmZl9maWxl
cyhzZWxmLCBmaWxlMSwgZmlsZTIpOgorICAgICAgICAiIiJEaWZmIHR3byB0ZXh0IGZpbGVzLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZTEsIGZpbGUyOiBmdWxsIHBhdGhzIG9mIHRo
ZSBmaWxlcyB0byBjb21wYXJlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgVHJ1ZSBp
ZiB0d28gZmlsZXMgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCisg
ICAgICAgICIiIgorCisgICAgICAgIHJldHVybiAoc2VsZi5nZXRfbm9ybWFsaXplZF90ZXh0KGZp
bGUxKSAhPQorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChmaWxlMikp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47749</attachid>
            <date>2010-01-29 17:21:56 -0800</date>
            <delta_ts>2010-01-29 17:29:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31498-20100129172154.patch</filename>
            <type>text/plain</type>
            <size>122098</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0MDkzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDEtMjkgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVG9wLWxldmVsIHRlc3QgZHJpdmVycyBmb3IgcnVubmluZyB0aGUgQ2hyb21p
dW0gcG9ydCBvZiBydW4td2Via2l0LXRlc3RzCisgICAgICAgIGFuZCBiZWluZyBhYmxlIHRvIHJl
YmFzZWxpbmUgdGVzdCByZXN1bHRzIGZyb20gdGhlIHRlc3QgYm90cy4gIFRoZQorICAgICAgICBm
aWxlcyBpbiB0aGUgU2NyaXB0cyBkaXJlY3RvcnkgYXJlIHNpbXBseSB3cmFwcGVycyBhcm91bmQg
dGhlIGZpbGVzCisgICAgICAgIGluIHdlYmtpdHB5L2xheW91dF90ZXN0cyBmb3IgY29udmVuaWVu
Y2UuCisgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTQ5OAorCisgICAgICAgICogU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0
czogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzOiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weTogQWRkZWQuCisK
IDIwMTAtMDEtMjkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTaWVkZWwuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3Jl
YmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMJKHJldmlzaW9uIDApCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiV3JhcHBlciBhcm91bmQgd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3JlYmFzZWxpbmUucHkiIiIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBl
bmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3Zb
MF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdHB5IiwgImxheW91dF90
ZXN0cyIpKQorCitpbXBvcnQgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMKKworaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90
ZXN0cy5tYWluKCkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvcmVi
YXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Vi
a2l0LXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVt
LXdlYmtpdC10ZXN0cwkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNo
cm9taXVtLXdlYmtpdC10ZXN0cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0g
bmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgYXJvdW5k
IHdlYmtpdHB5L2xheW91dF90ZXN0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzLnB5IiIiCitp
bXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguam9pbihvcy5w
YXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ3ZWJraXRweSIsICJsYXlvdXRfdGVzdHMiKSkKK2ltcG9ydCBydW5f
Y2hyb21pdW1fd2Via2l0X3Rlc3RzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
b3B0aW9ucywgYXJncyA9IHJ1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucGFyc2VfYXJncygpCisg
ICAgcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5tYWluKG9wdGlvbnMsIGFyZ3MpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVz
dHMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkJKHJldmlz
aW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJh
c2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MDI4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
UmViYXNlbGluaW5nIHRvb2wgdGhhdCBhdXRvbWF0aWNhbGx5IHByb2R1Y2VzIGJhc2VsaW5lcyBm
b3IgYWxsIHBsYXRmb3Jtcy4KKworVGhlIHNjcmlwdCBkb2VzIHRoZSBmb2xsb3dpbmcgZm9yIGVh
Y2ggcGxhdGZvcm0gc3BlY2lmaWVkOgorICAxLiBDb21waWxlIGEgbGlzdCBvZiB0ZXN0cyB0aGF0
IG5lZWQgcmViYXNlbGluaW5nLgorICAyLiBEb3dubG9hZCB0ZXN0IHJlc3VsdCBhcmNoaXZlIGZy
b20gYnVpbGRib3QgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgMy4gRXh0cmFjdCBiYXNlbGluZXMgZnJv
bSB0aGUgYXJjaGl2ZSBmaWxlIGZvciBhbGwgaWRlbnRpZmllZCBmaWxlcy4KKyAgNC4gQWRkIG5l
dyBiYXNlbGluZXMgdG8gU1ZOIHJlcG9zaXRvcnkuCisgIDUuIEZvciBlYWNoIHRlc3QgdGhhdCBo
YXMgYmVlbiByZWJhc2VsaW5lZCwgcmVtb3ZlIHRoaXMgcGxhdGZvcm0gb3B0aW9uIGZyb20KKyAg
ICAgdGhlIHRlc3QgaW4gdGVzdF9leHBlY3RhdGlvbi50eHQuIElmIG5vIG90aGVyIHBsYXRmb3Jt
cyByZW1haW4gYWZ0ZXIKKyAgICAgcmVtb3ZhbCwgZGVsZXRlIHRoZSByZWJhc2VsaW5lZCB0ZXN0
IGZyb20gdGhlIGZpbGUuCisKK0F0IHRoZSBlbmQsIHRoZSBzY3JpcHQgZ2VuZXJhdGVzIGEgaHRt
bCB0aGF0IGNvbXBhcmVzIG9sZCBhbmQgbmV3IGJhc2VsaW5lcy4KKyIiIgorCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRp
bAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0
IHRpbWUKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB3ZWJicm93c2VyCitpbXBvcnQgemlwZmlsZQor
Citmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBpbWFn
ZV9kaWZmCitmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlmZgorCisjIFJlcG9zaXRvcnkg
dHlwZSBjb25zdGFudHMuCitSRVBPX1NWTiwgUkVQT19VTktOT1dOID0gcmFuZ2UoMikKKworQkFT
RUxJTkVfU1VGRklYRVMgPSBbJy50eHQnLCAnLnBuZycsICcuY2hlY2tzdW0nXQorUkVCQVNFTElO
RV9QTEFURk9STV9PUkRFUiA9IFsnbWFjJywgJ3dpbicsICd3aW4teHAnLCAnd2luLXZpc3RhJywg
J2xpbnV4J10KK0FSQ0hJVkVfRElSX05BTUVfRElDVCA9IHsnd2luJzogJ3dlYmtpdC1yZWwnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICd3aW4tdmlzdGEnOiAnd2Via2l0LWRiZy12aXN0YScs
CisgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbi14cCc6ICd3ZWJraXQtcmVsJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAnbWFjJzogJ3dlYmtpdC1yZWwtbWFjNScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2xpbnV4JzogJ3dlYmtpdC1yZWwtbGludXgnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICd3aW4tY2FuYXJ5JzogJ3dlYmtpdC1yZWwtd2Via2l0LW9yZycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3dpbi12aXN0YS1jYW5hcnknOiAnd2Via2l0LWRiZy12aXN0
YScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbi14cC1jYW5hcnknOiAnd2Via2l0LXJl
bC13ZWJraXQtb3JnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWFjLWNhbmFyeSc6ICd3
ZWJraXQtcmVsLW1hYy13ZWJraXQtb3JnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbGlu
dXgtY2FuYXJ5JzogJ3dlYmtpdC1yZWwtbGludXgtd2Via2l0LW9yZyd9CisKKworZGVmIHJ1bl9z
aGVsbF93aXRoX3JldHVybl9jb2RlKGNvbW1hbmQsIHByaW50X291dHB1dD1GYWxzZSk6CisgICAg
IiIiRXhlY3V0ZXMgYSBjb21tYW5kIGFuZCByZXR1cm5zIHRoZSBvdXRwdXQgYW5kIHByb2Nlc3Mg
cmV0dXJuIGNvZGUuCisKKyAgICBBcmdzOgorICAgICAgY29tbWFuZDogcHJvZ3JhbSBhbmQgYXJn
dW1lbnRzLgorICAgICAgcHJpbnRfb3V0cHV0OiBpZiB0cnVlLCBwcmludCB0aGUgY29tbWFuZCBy
ZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dC4KKworICAgIFJldHVybnM6CisgICAgICBjb21tYW5k
IG91dHB1dCwgcmV0dXJuIGNvZGUKKyAgICAiIiIKKworICAgICMgVXNlIGEgc2hlbGwgZm9yIHN1
YmNvbW1hbmRzIG9uIFdpbmRvd3MgdG8gZ2V0IGEgUEFUSCBzZWFyY2guCisgICAgdXNlX3NoZWxs
ID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisgICAgcCA9IHN1YnByb2Nlc3MuUG9w
ZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPXVzZV9zaGVsbCkKKyAgICBpZiBw
cmludF9vdXRwdXQ6CisgICAgICAgIG91dHB1dF9hcnJheSA9IFtdCisgICAgICAgIHdoaWxlIFRy
dWU6CisgICAgICAgICAgICBsaW5lID0gcC5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICAgICAg
aWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHByaW50
X291dHB1dDoKKyAgICAgICAgICAgICAgICBwcmludCBsaW5lLnN0cmlwKCdcbicpCisgICAgICAg
ICAgICBvdXRwdXRfYXJyYXkuYXBwZW5kKGxpbmUpCisgICAgICAgIG91dHB1dCA9ICcnLmpvaW4o
b3V0cHV0X2FycmF5KQorICAgIGVsc2U6CisgICAgICAgIG91dHB1dCA9IHAuc3Rkb3V0LnJlYWQo
KQorICAgIHAud2FpdCgpCisgICAgcC5zdGRvdXQuY2xvc2UoKQorCisgICAgcmV0dXJuIG91dHB1
dCwgcC5yZXR1cm5jb2RlCisKKworZGVmIHJ1bl9zaGVsbChjb21tYW5kLCBwcmludF9vdXRwdXQ9
RmFsc2UpOgorICAgICIiIkV4ZWN1dGVzIGEgY29tbWFuZCBhbmQgcmV0dXJucyB0aGUgb3V0cHV0
LgorCisgICAgQXJnczoKKyAgICAgIGNvbW1hbmQ6IHByb2dyYW0gYW5kIGFyZ3VtZW50cy4KKyAg
ICAgIHByaW50X291dHB1dDogaWYgdHJ1ZSwgcHJpbnQgdGhlIGNvbW1hbmQgcmVzdWx0cyB0byBz
dGFuZGFyZCBvdXRwdXQuCisKKyAgICBSZXR1cm5zOgorICAgICAgY29tbWFuZCBvdXRwdXQKKyAg
ICAiIiIKKworICAgIG91dHB1dCwgcmV0dXJuX2NvZGUgPSBydW5fc2hlbGxfd2l0aF9yZXR1cm5f
Y29kZShjb21tYW5kLCBwcmludF9vdXRwdXQpCisgICAgcmV0dXJuIG91dHB1dAorCisKK2RlZiBs
b2dfZGFzaGVkX3N0cmluZyh0ZXh0LCBwbGF0Zm9ybSwgbG9nZ2luZ19sZXZlbD1sb2dnaW5nLklO
Rk8pOgorICAgICIiIkxvZyB0ZXh0IG1lc3NhZ2Ugd2l0aCBkYXNoZXMgb24gYm90aCBzaWRlcy4i
IiIKKworICAgIG1zZyA9IHRleHQKKyAgICBpZiBwbGF0Zm9ybToKKyAgICAgICAgbXNnICs9ICc6
ICcgKyBwbGF0Zm9ybQorICAgIGlmIGxlbihtc2cpIDwgNzg6CisgICAgICAgIGRhc2hlcyA9ICct
JyAqICgoNzggLSBsZW4obXNnKSkgLyAyKQorICAgICAgICBtc2cgPSAnJXMgJXMgJXMnICUgKGRh
c2hlcywgbXNnLCBkYXNoZXMpCisKKyAgICBpZiBsb2dnaW5nX2xldmVsID09IGxvZ2dpbmcuRVJS
T1I6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IobXNnKQorICAgIGVsaWYgbG9nZ2luZ19sZXZlbCA9
PSBsb2dnaW5nLldBUk5JTkc6CisgICAgICAgIGxvZ2dpbmcud2Fybihtc2cpCisgICAgZWxzZToK
KyAgICAgICAgbG9nZ2luZy5pbmZvKG1zZykKKworCitkZWYgc2V0dXBfaHRtbF9kaXJlY3Rvcnko
aHRtbF9kaXJlY3RvcnkpOgorICAgICIiIlNldHVwIHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgaHRt
bCByZXN1bHRzLgorCisgICAgICAgQWxsIGh0bWwgcmVsYXRlZCBmaWxlcyBhcmUgc3RvcmVkIGlu
IHRoZSAicmViYXNlbGluZV9odG1sIiBzdWJkaXJlY3RvcnkuCisKKyAgICBBcmdzOgorICAgICAg
aHRtbF9kaXJlY3Rvcnk6IHBhcmVudCBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgdGhlIHJlYmFzZWxp
bmluZyByZXN1bHRzLgorICAgICAgICAgICAgICAgICAgICAgIElmIE5vbmUsIGEgdGVtcCBkaXJl
Y3RvcnkgaXMgY3JlYXRlZC4KKworICAgIFJldHVybnM6CisgICAgICB0aGUgZGlyZWN0b3J5IHRo
YXQgc3RvcmVzIHRoZSBodG1sIHJlbGF0ZWQgcmViYXNlbGluaW5nIHJlc3VsdHMuCisgICAgIiIi
CisKKyAgICBpZiBub3QgaHRtbF9kaXJlY3Rvcnk6CisgICAgICAgIGh0bWxfZGlyZWN0b3J5ID0g
dGVtcGZpbGUubWtkdGVtcCgpCisgICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMoaHRtbF9kaXJl
Y3RvcnkpOgorICAgICAgICBvcy5ta2RpcihodG1sX2RpcmVjdG9yeSkKKworICAgIGh0bWxfZGly
ZWN0b3J5ID0gb3MucGF0aC5qb2luKGh0bWxfZGlyZWN0b3J5LCAncmViYXNlbGluZV9odG1sJykK
KyAgICBsb2dnaW5nLmluZm8oJ0h0bWwgZGlyZWN0b3J5OiAiJXMiJywgaHRtbF9kaXJlY3Rvcnkp
CisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhodG1sX2RpcmVjdG9yeSk6CisgICAgICAgIHNodXRp
bC5ybXRyZWUoaHRtbF9kaXJlY3RvcnksIFRydWUpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnRGVs
ZXRlZCBmaWxlIGF0IGh0bWwgZGlyZWN0b3J5OiAiJXMiJywgaHRtbF9kaXJlY3RvcnkpCisKKyAg
ICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaHRtbF9kaXJlY3RvcnkpOgorICAgICAgICBvcy5ta2Rp
cihodG1sX2RpcmVjdG9yeSkKKyAgICByZXR1cm4gaHRtbF9kaXJlY3RvcnkKKworCitkZWYgZ2V0
X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKGh0bWxfZGlyZWN0b3J5LCBiYXNlbGluZV9maWxlbmFtZSwg
cGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlKToKKyAg
ICAiIiJHZXQgZnVsbCBwYXRoIG9mIHRoZSBiYXNlbGluZSByZXN1bHQgZmlsZS4KKworICAgIEFy
Z3M6CisgICAgICBodG1sX2RpcmVjdG9yeTogZGlyZWN0b3J5IHRoYXQgc3RvcmVzIHRoZSBodG1s
IHJlbGF0ZWQgZmlsZXMuCisgICAgICBiYXNlbGluZV9maWxlbmFtZTogbmFtZSBvZiB0aGUgYmFz
ZWxpbmUgZmlsZS4KKyAgICAgIHBsYXRmb3JtOiB3aW4sIGxpbnV4IG9yIG1hYworICAgICAgcmVz
dWx0X3R5cGU6IHR5cGUgb2YgdGhlIGJhc2VsaW5lIHJlc3VsdDogJy50eHQnLCAnLnBuZycuCisK
KyAgICBSZXR1cm5zOgorICAgICAgRnVsbCBwYXRoIG9mIHRoZSBiYXNlbGluZSBmaWxlIGZvciBy
ZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24uCisgICAgIiIiCisKKyAgICBiYXNlLCBleHQg
PSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgIHJlc3VsdF9maWxlbmFt
ZSA9ICclcy0lcy0lcyVzJyAlIChiYXNlLCBwbGF0Zm9ybSwgcmVzdWx0X3R5cGUsIGV4dCkKKyAg
ICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihodG1sX2RpcmVjdG9yeSwgcmVzdWx0X2ZpbGVuYW1l
KQorICAgIGxvZ2dpbmcuZGVidWcoJyAgUmVzdWx0IGZpbGUgZnVsbCBwYXRoOiAiJXMiLicsIGZ1
bGxwYXRoKQorICAgIHJldHVybiBmdWxscGF0aAorCisKK2NsYXNzIFJlYmFzZWxpbmVyKG9iamVj
dCk6CisgICAgIiIiQ2xhc3MgdG8gcHJvZHVjZSBuZXcgYmFzZWxpbmVzIGZvciBhIGdpdmVuIHBs
YXRmb3JtLiIiIgorCisgICAgUkVWSVNJT05fUkVHRVggPSByJzxhIGhyZWY9XCIoXGQrKS9cIj4n
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0sIG9wdGlvbnMpOgorICAgICAgICBz
ZWxmLl9maWxlX2RpciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICd0b29s
cycsCisgICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKKyAgICAgICAgc2VsZi5fcGxhdGZvcm0g
PSBwbGF0Zm9ybQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHMgPSBbXQorICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0
cyA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgdGVzdHMgYW5kIGV4cGVjdGF0aW9ucyBoZWxwZXIg
d2hpY2ggaXMgdXNlZCB0bzoKKyAgICAgICAgIyAgIC0uIGNvbXBpbGUgbGlzdCBvZiB0ZXN0cyB0
aGF0IG5lZWQgcmViYXNlbGluaW5nLgorICAgICAgICAjICAgLS4gdXBkYXRlIHRoZSB0ZXN0cyBp
biB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlIGFmdGVyIHJlYmFzZWxpbmUKKyAgICAgICAgIyAgICAg
IGlzIGRvbmUuCisgICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zID0gXAorICAgICAgICAg
ICAgdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucyhOb25lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2RpciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkKKworICAgICAg
ICBzZWxmLl9yZXBvX3R5cGUgPSBzZWxmLl9nZXRfcmVwb190eXBlKCkKKworICAgIGRlZiBydW4o
c2VsZiwgYmFja3VwKToKKyAgICAgICAgIiIiUnVuIHJlYmFzZWxpbmUgcHJvY2Vzcy4iIiIKKwor
ICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnQ29tcGlsaW5nIHJlYmFzZWxpbmluZyB0ZXN0cycs
IHNlbGYuX3BsYXRmb3JtKQorICAgICAgICBpZiBub3Qgc2VsZi5fY29tcGlsZV9yZWJhc2VsaW5p
bmdfdGVzdHMoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgbG9nX2Rhc2hl
ZF9zdHJpbmcoJ0Rvd25sb2FkaW5nIGFyY2hpdmUnLCBzZWxmLl9wbGF0Zm9ybSkKKyAgICAgICAg
YXJjaGl2ZV9maWxlID0gc2VsZi5fZG93bmxvYWRfYnVpbGRib3RfYXJjaGl2ZSgpCisgICAgICAg
IGxvZ2dpbmcuaW5mbygnJykKKyAgICAgICAgaWYgbm90IGFyY2hpdmVfZmlsZToKKyAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoJ05vIGFyY2hpdmUgZm91bmQuJykKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdFeHRyYWN0aW5nIGFuZCBhZGRp
bmcgbmV3IGJhc2VsaW5lcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRm
b3JtKQorICAgICAgICBpZiBub3Qgc2VsZi5fZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMo
YXJjaGl2ZV9maWxlKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19k
YXNoZWRfc3RyaW5nKCdVcGRhdGluZyByZWJhc2VsaW5lZCB0ZXN0cyBpbiBmaWxlJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0pCisgICAgICAgIHNlbGYuX3VwZGF0
ZV9yZWJhc2VsaW5lZF90ZXN0c19pbl9maWxlKGJhY2t1cCkKKyAgICAgICAgbG9nZ2luZy5pbmZv
KCcnKQorCisgICAgICAgIGlmIGxlbihzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMpICE9IGxlbihz
ZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyk6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ05P
VCBBTEwgVEVTVFMgVEhBVCBORUVEIFJFQkFTRUxJTklORyBIQVZFIEJFRU4gJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdSRUJBU0VMSU5FRC4nKQorICAgICAgICAgICAgbG9nZ2luZy53
YXJuaW5nKCcgIFRvdGFsIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5nOiAlZCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykpCisgICAg
ICAgICAgICBsb2dnaW5nLndhcm5pbmcoJyAgVG90YWwgdGVzdHMgcmViYXNlbGluZWQ6ICVkJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5fcmViYXNlbGluZWRfdGVzdHMp
KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdB
bGwgdGVzdHMgbmVlZGluZyByZWJhc2VsaW5pbmcgd2VyZSBzdWNjZXNzZnVsbHkgJworICAgICAg
ICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmVkLicpCisKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiBnZXRfcmViYXNlbGluaW5nX3Rlc3RzKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzCisKKyAgICBkZWYgX2dldF9yZXBvX3R5cGUoc2VsZik6
CisgICAgICAgICIiIkdldCB0aGUgcmVwb3NpdG9yeSB0eXBlIHRoYXQgY2xpZW50IGlzIHVzaW5n
LiIiIgorICAgICAgICBvdXRwdXQsIHJldHVybl9jb2RlID0gcnVuX3NoZWxsX3dpdGhfcmV0dXJu
X2NvZGUoWydzdm4nLCAnaW5mbyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpCisgICAgICAgIGlmIHJldHVybl9jb2RlID09
IDA6CisgICAgICAgICAgICByZXR1cm4gUkVQT19TVk4KKworICAgICAgICByZXR1cm4gUkVQT19V
TktOT1dOCisKKyAgICBkZWYgX2NvbXBpbGVfcmViYXNlbGluaW5nX3Rlc3RzKHNlbGYpOgorICAg
ICAgICAiIiJDb21waWxlIGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVkIHJlYmFzZWxpbmluZyBmb3Ig
dGhlIHBsYXRmb3JtLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgTGlzdCBvZiB0ZXN0
cyB0aGF0IG5lZWQgcmViYXNlbGluaW5nIG9yCisgICAgICAgICAgTm9uZSBpZiB0aGVyZSBpcyBu
byBzdWNoIHRlc3QuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190
ZXN0cyA9IFwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zLmdldF9yZWJhc2Vs
aW5pbmdfZmFpbHVyZXMoKQorICAgICAgICBpZiBub3Qgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3Rz
OgorICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdObyB0ZXN0cyBmb3VuZCB0aGF0IG5lZWQgcmVi
YXNlbGluaW5nLicpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGxvZ2dpbmcu
aW5mbygnVG90YWwgbnVtYmVyIG9mIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5nICcKKyAgICAg
ICAgICAgICAgICAgICAgICdmb3IgIiVzIjogIiVkIicsIHNlbGYuX3BsYXRmb3JtLAorICAgICAg
ICAgICAgICAgICAgICAgbGVuKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykpCisKKyAgICAgICAg
dGVzdF9ubyA9IDEKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3Rz
OgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgICVkOiAlcycsIHRlc3Rfbm8sIHRlc3QpCisg
ICAgICAgICAgICB0ZXN0X25vICs9IDEKKworICAgICAgICByZXR1cm4gc2VsZi5fcmViYXNlbGlu
aW5nX3Rlc3RzCisKKyAgICBkZWYgX2dldF9sYXRlc3RfcmV2aXNpb24oc2VsZiwgdXJsKToKKyAg
ICAgICAgIiIiR2V0IHRoZSBsYXRlc3QgbGF5b3V0IHRlc3QgcmV2aXNpb24gbnVtYmVyIGZyb20g
YnVpbGRib3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB1cmw6IFVybCB0byByZXRyaWV2
ZSBsYXlvdXQgdGVzdCByZXZpc2lvbiBudW1iZXJzLgorCisgICAgICAgIFJldHVybnM6CisgICAg
ICAgICAgbGF0ZXN0IHJldmlzaW9uIG9yCisgICAgICAgICAgTm9uZSBvbiBmYWlsdXJlLgorICAg
ICAgICAiIiIKKworICAgICAgICBsb2dnaW5nLmRlYnVnKCdVcmwgdG8gcmV0cmlldmUgcmV2aXNp
b246ICIlcyInLCB1cmwpCisKKyAgICAgICAgZiA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICAg
ICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHJldmlz
aW9ucyA9IHJlLmZpbmRhbGwoc2VsZi5SRVZJU0lPTl9SRUdFWCwgY29udGVudCkKKyAgICAgICAg
aWYgbm90IHJldmlzaW9uczoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0ZhaWxlZCB0byBm
aW5kIHJldmlzaW9uLCBjb250ZW50OiAiJXMiJywgY29udGVudCkKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgcmV2aXNpb25zLnNvcnQoa2V5PWludCkKKyAgICAgICAgbG9nZ2lu
Zy5pbmZvKCdMYXRlc3QgcmV2aXNpb246ICIlcyInLCByZXZpc2lvbnNbbGVuKHJldmlzaW9ucykg
LSAxXSkKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uc1tsZW4ocmV2aXNpb25zKSAtIDFdCisKKyAg
ICBkZWYgX2dldF9hcmNoaXZlX2Rpcl9uYW1lKHNlbGYsIHBsYXRmb3JtLCB3ZWJraXRfY2FuYXJ5
KToKKyAgICAgICAgIiIiR2V0IG5hbWUgb2YgdGhlIGxheW91dCB0ZXN0IGFyY2hpdmUgZGlyZWN0
b3J5LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgRGlyZWN0b3J5IG5hbWUgb3IKKyAg
ICAgICAgICBOb25lIG9uIGZhaWx1cmUKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgd2Via2l0
X2NhbmFyeToKKyAgICAgICAgICAgIHBsYXRmb3JtICs9ICctY2FuYXJ5JworCisgICAgICAgIGlm
IHBsYXRmb3JtIGluIEFSQ0hJVkVfRElSX05BTUVfRElDVDoKKyAgICAgICAgICAgIHJldHVybiBB
UkNISVZFX0RJUl9OQU1FX0RJQ1RbcGxhdGZvcm1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBsb2dnaW5nLmVycm9yKCdDYW5ub3QgZmluZCBwbGF0Zm9ybSBrZXkgJXMgaW4gYXJjaGl2ZSAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RvcnkgbmFtZSBkaWN0aW9uYXJ5Jywg
cGxhdGZvcm0pCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9nZXRfYXJjaGl2
ZV91cmwoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSB1cmwgdG8gZG93bmxvYWQgbGF0
ZXN0IGxheW91dCB0ZXN0IGFyY2hpdmUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBV
cmwgdG8gZG93bmxvYWQgYXJjaGl2ZSBvcgorICAgICAgICAgIE5vbmUgb24gZmFpbHVyZQorICAg
ICAgICAiIiIKKworICAgICAgICBkaXJfbmFtZSA9IHNlbGYuX2dldF9hcmNoaXZlX2Rpcl9uYW1l
KHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMud2Via2l0X2NhbmFyeSkKKyAgICAgICAgaWYgbm90IGRpcl9u
YW1lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBsb2dnaW5nLmRlYnVnKCdC
dWlsZGJvdCBwbGF0Zm9ybSBkaXIgbmFtZTogIiVzIicsIGRpcl9uYW1lKQorCisgICAgICAgIHVy
bF9iYXNlID0gJyVzLyVzLycgJSAoc2VsZi5fb3B0aW9ucy5hcmNoaXZlX3VybCwgZGlyX25hbWUp
CisgICAgICAgIGxhdGVzdF9yZXZpc2lvbiA9IHNlbGYuX2dldF9sYXRlc3RfcmV2aXNpb24odXJs
X2Jhc2UpCisgICAgICAgIGlmIGxhdGVzdF9yZXZpc2lvbiBpcyBOb25lIG9yIGxhdGVzdF9yZXZp
c2lvbiA8PSAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBhcmNoaXZlX3Vy
bCA9ICgnJXMlcy9sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCcgJSAodXJsX2Jhc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3Rf
cmV2aXNpb24pKQorICAgICAgICBsb2dnaW5nLmluZm8oJ0FyY2hpdmUgdXJsOiAiJXMiJywgYXJj
aGl2ZV91cmwpCisgICAgICAgIHJldHVybiBhcmNoaXZlX3VybAorCisgICAgZGVmIF9kb3dubG9h
ZF9idWlsZGJvdF9hcmNoaXZlKHNlbGYpOgorICAgICAgICAiIiJEb3dubG9hZCBsYXlvdXQgdGVz
dCBhcmNoaXZlIGZpbGUgZnJvbSBidWlsZGJvdC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAg
ICAgIFRydWUgaWYgZG93bmxvYWQgc3VjY2VlZGVkIG9yCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3
aXNlLgorICAgICAgICAiIiIKKworICAgICAgICB1cmwgPSBzZWxmLl9nZXRfYXJjaGl2ZV91cmwo
KQorICAgICAgICBpZiB1cmwgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICAgICAgZm4gPSB1cmxsaWIudXJscmV0cmlldmUodXJsKVswXQorICAgICAgICBsb2dnaW5nLmlu
Zm8oJ0FyY2hpdmUgZG93bmxvYWRlZCBhbmQgc2F2ZWQgdG8gZmlsZTogIiVzIicsIGZuKQorICAg
ICAgICByZXR1cm4gZm4KKworICAgIGRlZiBfZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMo
c2VsZiwgYXJjaGl2ZV9maWxlKToKKyAgICAgICAgIiIiRXh0cmFjdCBuZXcgYmFzZWxpbmVzIGZy
b20gYXJjaGl2ZSBhbmQgYWRkIHRoZW0gdG8gU1ZOIHJlcG9zaXRvcnkuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBhcmNoaXZlX2ZpbGU6IGZ1bGwgcGF0aCB0byB0aGUgYXJjaGl2ZSBmaWxl
LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgTGlzdCBvZiB0ZXN0cyB0aGF0IGhhdmUg
YmVlbiByZWJhc2VsaW5lZCBvcgorICAgICAgICAgIE5vbmUgb24gZmFpbHVyZS4KKyAgICAgICAg
IiIiCisKKyAgICAgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoYXJjaGl2ZV9maWxlLCAn
cicpCisgICAgICAgIHppcF9uYW1lbGlzdCA9IHppcF9maWxlLm5hbWVsaXN0KCkKKworICAgICAg
ICBsb2dnaW5nLmRlYnVnKCd6aXAgZmlsZSBuYW1lbGlzdDonKQorICAgICAgICBmb3IgbmFtZSBp
biB6aXBfbmFtZWxpc3Q6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcgICcgKyBuYW1lKQor
CisgICAgICAgIHBsYXRmb3JtID0gcGF0aF91dGlscy5wbGF0Zm9ybV9uYW1lKHNlbGYuX3BsYXRm
b3JtKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCdQbGF0Zm9ybSBkaXI6ICIlcyInLCBwbGF0Zm9y
bSkKKworICAgICAgICB0ZXN0X25vID0gMQorICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0
cyA9IFtdCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKKyAg
ICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVGVzdCAlZDogJXMnLCB0ZXN0X25vLCB0ZXN0KQorCisg
ICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBzdm5fZXJyb3IgPSBGYWxzZQor
ICAgICAgICAgICAgdGVzdF9iYXNlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQodGVzdClbMF0KKyAg
ICAgICAgICAgIGZvciBzdWZmaXggaW4gQkFTRUxJTkVfU1VGRklYRVM6CisgICAgICAgICAgICAg
ICAgYXJjaGl2ZV90ZXN0X25hbWUgPSAoJ2xheW91dC10ZXN0LXJlc3VsdHMvJXMtYWN0dWFsJXMn
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9iYXNlbmFtZSwg
c3VmZml4KSkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcgIEFyY2hpdmUgdGVzdCBm
aWxlIG5hbWU6ICIlcyInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV90
ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGFyY2hpdmVfdGVzdF9uYW1lIGluIHpp
cF9uYW1lbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgICVzIGZpbGUg
bm90IGluIGFyY2hpdmUuJywgc3VmZml4KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgbG9nZ2luZy5p
bmZvKCcgICVzIGZpbGUgZm91bmQgaW4gYXJjaGl2ZS4nLCBzdWZmaXgpCisKKyAgICAgICAgICAg
ICAgICAjIEV4dHJhY3QgbmV3IGJhc2VsaW5lIGZyb20gYXJjaGl2ZSBhbmQgc2F2ZSBpdCB0byBh
IHRlbXAgZmlsZS4KKyAgICAgICAgICAgICAgICBkYXRhID0gemlwX2ZpbGUucmVhZChhcmNoaXZl
X3Rlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICB0ZW1wX2ZkLCB0ZW1wX25hbWUgPSB0ZW1wZmls
ZS5ta3N0ZW1wKHN1ZmZpeCkKKyAgICAgICAgICAgICAgICBmID0gb3MuZmRvcGVuKHRlbXBfZmQs
ICd3YicpCisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYu
Y2xvc2UoKQorCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSAnJXMtZXhwZWN0
ZWQlcycgJSAodGVzdF9iYXNlbmFtZSwgc3VmZml4KQorICAgICAgICAgICAgICAgIGV4cGVjdGVk
X2Z1bGxwYXRoID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxz
LmNocm9taXVtX2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pLAorICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZF9maWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9mdWxscGF0aCA9IG9z
LnBhdGgubm9ybXBhdGgoZXhwZWN0ZWRfZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygnICBFeHBlY3RlZCBmaWxlIGZ1bGwgcGF0aDogIiVzIicsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBlY3RlZF9mdWxscGF0aCkKKworICAgICAgICAgICAgICAgICMg
VE9ETyh2aWN0b3J3KTogZm9yIG5vdywgdGhlIHJlYmFzZWxpbmluZyB0b29sIGNoZWNrcyB3aGV0
aGVyCisgICAgICAgICAgICAgICAgIyBvciBub3QgVEhJUyBiYXNlbGluZSBpcyBkdXBsaWNhdGUg
YW5kIHNob3VsZCBiZSBza2lwcGVkLgorICAgICAgICAgICAgICAgICMgV2UgY291bGQgaW1wcm92
ZSB0aGUgdG9vbCB0byBjaGVjayBhbGwgYmFzZWxpbmVzIGluIHVwcGVyCisgICAgICAgICAgICAg
ICAgIyBhbmQgbG93ZXIKKyAgICAgICAgICAgICAgICAjIGxldmVscyBhbmQgcmVtb3ZlIGFsbCBk
dXBsaWNhdGVkIGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9pc19kdXBfYmFz
ZWxpbmUodGVtcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0ZWRfZnVsbHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0pOgor
ICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVtcF9uYW1lKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9kZWxldGVfYmFzZWxpbmUoZXhwZWN0ZWRfZnVsbHBhdGgpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSB0aGUgbmV3IGJh
c2VsaW5lIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkKKyAgICAgICAgICAgICAgICAj
IGV4aXN0LgorICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnko
CisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShleHBlY3RlZF9mdWxscGF0aCkp
CisKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92ZSh0ZW1wX25hbWUsIGV4cGVjdGVkX2Z1bGxw
YXRoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3N2bl9hZGQoZXhwZWN0ZWRfZnVs
bHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBzdm5fZXJyb3IgPSBUcnVlCisgICAgICAgICAg
ICAgICAgZWxpZiBzdWZmaXggIT0gJy5jaGVja3N1bSc6CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuX2NyZWF0ZV9odG1sX2Jhc2VsaW5lX2ZpbGVzKGV4cGVjdGVkX2Z1bGxwYXRoKQorCisgICAg
ICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuKCcgIE5v
IG5ldyBiYXNlbGluZXMgZm91bmQgaW4gYXJjaGl2ZS4nKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBpZiBzdm5fZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcu
d2FybignICBGYWlsZWQgdG8gYWRkIGJhc2VsaW5lcyB0byBTVk4uJykKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgUmViYXNlbGluZSBz
dWNjZWVkZWQuJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMu
YXBwZW5kKHRlc3QpCisKKyAgICAgICAgICAgIHRlc3Rfbm8gKz0gMQorCisgICAgICAgIHppcF9m
aWxlLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKGFyY2hpdmVfZmlsZSkKKworICAgICAgICBy
ZXR1cm4gc2VsZi5fcmViYXNlbGluZWRfdGVzdHMKKworICAgIGRlZiBfaXNfZHVwX2Jhc2VsaW5l
KHNlbGYsIG5ld19iYXNlbGluZSwgYmFzZWxpbmVfcGF0aCwgdGVzdCwgc3VmZml4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtKToKKyAgICAgICAgIiIiQ2hlY2sgd2hldGhlciBh
IGJhc2VsaW5lIGlzIGR1cGxpY2F0ZSBhbmQgY2FuIGZhbGxiYWNrIHRvIHNhbWUKKyAgICAgICAg
ICAgYmFzZWxpbmUgZm9yIGFub3RoZXIgcGxhdGZvcm0uIEZvciBleGFtcGxlLCBpZiBhIHRlc3Qg
aGFzIHNhbWUKKyAgICAgICAgICAgYmFzZWxpbmUgb24gbGludXggYW5kIHdpbmRvd3MsIHRoZW4g
d2Ugb25seSBzdG9yZSB3aW5kb3dzCisgICAgICAgICAgIGJhc2VsaW5lIGFuZCBsaW51eCBiYXNl
bGluZSB3aWxsIGZhbGxiYWNrIHRvIHRoZSB3aW5kb3dzIHZlcnNpb24uCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZTogYmFzZWxpbmUgZXhwZWN0YXRpb24gZmls
ZSBuYW1lLgorICAgICAgICAgIHRlc3Q6IHRlc3QgbmFtZS4KKyAgICAgICAgICBzdWZmaXg6IGZp
bGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90OworICAgICAg
ICAgICAgICAgICAgZS5nLiAnLnR4dCcgb3IgJy5wbmcnLgorICAgICAgICAgIHBsYXRmb3JtOiBi
YXNlbGluZSBwbGF0Zm9ybSAnbWFjJywgJ3dpbicgb3IgJ2xpbnV4Jy4KKworICAgICAgICBSZXR1
cm5zOgorICAgICAgICAgIFRydWUgaWYgdGhlIGJhc2VsaW5lIGlzIHVubmVjZXNzYXJ5LgorICAg
ICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfZmlsZXBh
dGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3QpCisg
ICAgICAgIGFsbF9iYXNlbGluZXMgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2Jhc2VsaW5lcyh0ZXN0
X2ZpbGVwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VmZml4LCBwbGF0Zm9ybSwgVHJ1ZSkKKyAgICAgICAgZm9yIChmYWxsYmFja19k
aXIsIGZhbGxiYWNrX2ZpbGUpIGluIGFsbF9iYXNlbGluZXM6CisgICAgICAgICAgICBpZiBmYWxs
YmFja19kaXIgYW5kIGZhbGxiYWNrX2ZpbGU6CisgICAgICAgICAgICAgICAgZmFsbGJhY2tfZnVs
bHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpv
aW4oZmFsbGJhY2tfZGlyLCBmYWxsYmFja19maWxlKSkKKyAgICAgICAgICAgICAgICBpZiBmYWxs
YmFja19mdWxscGF0aC5sb3dlcigpICE9IGJhc2VsaW5lX3BhdGgubG93ZXIoKToKKyAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IHNlbGYuX2RpZmZfYmFzZWxpbmVzKG5ld19iYXNlbGluZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrX2Z1
bGxwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBGb3VuZCBz
YW1lIGJhc2VsaW5lIGF0ICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxsYmFja19mdWxscGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVl
CisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZGlmZl9iYXNlbGlu
ZXMoc2VsZiwgZmlsZTEsIGZpbGUyKToKKyAgICAgICAgIiIiQ2hlY2sgd2hldGhlciB0d28gYmFz
ZWxpbmVzIGFyZSBkaWZmZXJlbnQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlMSwg
ZmlsZTI6IGZ1bGwgcGF0aHMgb2YgdGhlIGJhc2VsaW5lcyB0byBjb21wYXJlLgorCisgICAgICAg
IFJldHVybnM6CisgICAgICAgICAgVHJ1ZSBpZiB0d28gZmlsZXMgYXJlIGRpZmZlcmVudCBvciBo
YXZlIGRpZmZlcmVudCBleHRlbnNpb25zLgorICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgZXh0MSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZTEpWzFdLnVw
cGVyKCkKKyAgICAgICAgZXh0MiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZTIpWzFdLnVwcGVyKCkK
KyAgICAgICAgaWYgZXh0MSAhPSBleHQyOgorICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGaWxl
cyB0byBjb21wYXJlIGhhdmUgZGlmZmVyZW50IGV4dC4gJworICAgICAgICAgICAgICAgICAgICAg
ICAgICdGaWxlMTogJXM7IEZpbGUyOiAlcycsIGZpbGUxLCBmaWxlMikKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICAgICAgaWYgZXh0MSA9PSAnLlBORyc6CisgICAgICAgICAgICByZXR1
cm4gaW1hZ2VfZGlmZi5JbWFnZURpZmYoc2VsZi5fcGxhdGZvcm0sICcnKS5kaWZmX2ZpbGVzKGZp
bGUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxlMikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJl
dHVybiB0ZXh0X2RpZmYuVGVzdFRleHREaWZmKHNlbGYuX3BsYXRmb3JtLCAnJykuZGlmZl9maWxl
cyhmaWxlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlMikKKworICAgIGRlZiBfZGVsZXRlX2Jhc2Vs
aW5lKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiUmVtb3ZlIHRoZSBmaWxlIGZyb20gcmVw
b3NpdG9yeSBhbmQgZGVsZXRlIGl0IGZyb20gZGlzay4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIGZpbGVuYW1lOiBmdWxsIHBhdGggb2YgdGhlIGZpbGUgdG8gZGVsZXRlLgorICAgICAgICAi
IiIKKworICAgICAgICBpZiBub3QgZmlsZW5hbWUgb3Igbm90IG9zLnBhdGguaXNmaWxlKGZpbGVu
YW1lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX3JlcG9fdHlwZSA9
PSBSRVBPX1NWTjoKKyAgICAgICAgICAgIHBhcmVudF9kaXIsIGJhc2VuYW1lID0gb3MucGF0aC5z
cGxpdChmaWxlbmFtZSkKKyAgICAgICAgICAgIG9yaWdpbmFsX2RpciA9IG9zLmdldGN3ZCgpCisg
ICAgICAgICAgICBvcy5jaGRpcihwYXJlbnRfZGlyKQorICAgICAgICAgICAgcnVuX3NoZWxsKFsn
c3ZuJywgJ2RlbGV0ZScsICctLWZvcmNlJywgYmFzZW5hbWVdLCBGYWxzZSkKKyAgICAgICAgICAg
IG9zLmNoZGlyKG9yaWdpbmFsX2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLnJl
bW92ZShmaWxlbmFtZSkKKworICAgIGRlZiBfdXBkYXRlX3JlYmFzZWxpbmVkX3Rlc3RzX2luX2Zp
bGUoc2VsZiwgYmFja3VwKToKKyAgICAgICAgIiIiVXBkYXRlIHRoZSByZWJhc2VsaW5lZCB0ZXN0
cyBpbiB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
YmFja3VwOiBpZiBUcnVlLCBiYWNrdXAgdGhlIG9yaWdpbmFsIHRlc3QgZXhwZWN0YXRpb25zIGZp
bGUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBubworICAgICAgICAiIiIKKworICAg
ICAgICBpZiBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0czoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
ZXhwZWN0YXRpb25zLnJlbW92ZV9wbGF0Zm9ybV9mcm9tX2ZpbGUoCisgICAgICAgICAgICAgICAg
c2VsZi5fcmViYXNlbGluZWRfdGVzdHMsIHNlbGYuX3BsYXRmb3JtLCBiYWNrdXApCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ05vIHRlc3Qgd2FzIHJlYmFzZWxpbmVk
IHNvIG5vdGhpbmcgdG8gcmVtb3ZlLicpCisKKyAgICBkZWYgX3N2bl9hZGQoc2VsZiwgZmlsZW5h
bWUpOgorICAgICAgICAiIiJBZGQgdGhlIGZpbGUgdG8gU1ZOIHJlcG9zaXRvcnkuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogZnVsbCBwYXRoIG9mIHRoZSBmaWxlIHRvIGFk
ZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgYWxyZWFk
eSBleGlzdHMgaW4gU1ZOIG9yIGlzIHN1Y2Vzc2Z1bGx5IGFkZGVkCisgICAgICAgICAgICAgICB0
byBTVk4uCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKworICAgICAg
ICBpZiBub3QgZmlsZW5hbWU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBw
YXJlbnRfZGlyLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCisgICAgICAgIGlm
IHNlbGYuX3JlcG9fdHlwZSAhPSBSRVBPX1NWTiBvciBwYXJlbnRfZGlyID09IGZpbGVuYW1lOgor
ICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJObyBzdm4gY2hlY2tvdXQgZm91bmQsIHNraXAgc3Zu
IGFkZC4iKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBvcmlnaW5hbF9kaXIg
PSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihwYXJlbnRfZGlyKQorICAgICAgICBzdGF0
dXNfb3V0cHV0ID0gcnVuX3NoZWxsKFsnc3ZuJywgJ3N0YXR1cycsIGJhc2VuYW1lXSwgRmFsc2Up
CisgICAgICAgIG9zLmNoZGlyKG9yaWdpbmFsX2RpcikKKyAgICAgICAgb3V0cHV0ID0gc3RhdHVz
X291dHB1dC51cHBlcigpCisgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdBJykgb3Igb3V0
cHV0LnN0YXJ0c3dpdGgoJ00nKToKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBGaWxlIGFs
cmVhZHkgYWRkZWQgdG8gU1ZOOiAiJXMiJywgZmlsZW5hbWUpCisgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgICAgIGlmIG91dHB1dC5maW5kKCdJUyBOT1QgQSBXT1JLSU5HIENPUFknKSA+
PSAwOgorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEZpbGUgaXMgbm90IGEgd29ya2luZyBj
b3B5LCBhZGQgaXRzIHBhcmVudDogIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50X2RpcikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdm5fYWRkKHBhcmVudF9kaXIpCisK
KyAgICAgICAgb3MuY2hkaXIocGFyZW50X2RpcikKKyAgICAgICAgYWRkX291dHB1dCA9IHJ1bl9z
aGVsbChbJ3N2bicsICdhZGQnLCBiYXNlbmFtZV0sIFRydWUpCisgICAgICAgIG9zLmNoZGlyKG9y
aWdpbmFsX2RpcikKKyAgICAgICAgb3V0cHV0ID0gYWRkX291dHB1dC51cHBlcigpLnJzdHJpcCgp
CisgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdBJykgYW5kIG91dHB1dC5maW5kKGJhc2Vu
YW1lLnVwcGVyKCkpID49IDA6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgQWRkZWQgbmV3
IGZpbGU6ICIlcyInLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3N2bl9wcm9wX3NldChm
aWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgKG5vdCBzdGF0
dXNfb3V0cHV0KSBhbmQgKGFkZF9vdXRwdXQudXBwZXIoKS5maW5kKAorICAgICAgICAgICAgJ0FM
UkVBRFkgVU5ERVIgVkVSU0lPTiBDT05UUk9MJykgPj0gMCk6CisgICAgICAgICAgICBsb2dnaW5n
LmluZm8oJyAgRmlsZSBhbHJlYWR5IHVuZGVyIFNWTiBhbmQgaGFzIG5vIGNoYW5nZTogIiVzIics
CisgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpCisgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgICAgIGxvZ2dpbmcud2FybignICBGYWlsZWQgdG8gYWRkIGZpbGUgdG8gU1ZO
OiAiJXMiJywgZmlsZW5hbWUpCisgICAgICAgIGxvZ2dpbmcud2FybignICBTdm4gc3RhdHVzIG91
dHB1dDogIiVzIicsIHN0YXR1c19vdXRwdXQpCisgICAgICAgIGxvZ2dpbmcud2FybignICBTdm4g
YWRkIG91dHB1dDogIiVzIicsIGFkZF9vdXRwdXQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgZGVmIF9zdm5fcHJvcF9zZXQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJTZXQgdGhl
IGJhc2VsaW5lIHByb3BlcnR5CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTog
ZnVsbCBwYXRoIG9mIHRoZSBmaWxlIHRvIGFkZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAg
ICAgIFRydWUgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gU1ZOIG9yIGlzIHN1Y2Vzc2Z1
bGx5IGFkZGVkCisgICAgICAgICAgICAgICB0byBTVk4uCisgICAgICAgICAgRmFsc2Ugb3RoZXJ3
aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFt
ZSlbMV0udXBwZXIoKQorICAgICAgICBpZiBleHQgIT0gJy5UWFQnIGFuZCBleHQgIT0gJy5QTkcn
IGFuZCBleHQgIT0gJy5DSEVDS1NVTSc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBw
YXJlbnRfZGlyLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCisgICAgICAgIG9y
aWdpbmFsX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHBhcmVudF9kaXIpCisg
ICAgICAgIGlmIGV4dCA9PSAnLlBORyc6CisgICAgICAgICAgICBjbWQgPSBbJ3N2bicsICdwc2V0
JywgJ3N2bjptaW1lLXR5cGUnLCAnaW1hZ2UvcG5nJywgYmFzZW5hbWVdCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBjbWQgPSBbJ3N2bicsICdwc2V0JywgJ3N2bjplb2wtc3R5bGUnLCAnTEYn
LCBiYXNlbmFtZV0KKworICAgICAgICBsb2dnaW5nLmRlYnVnKCcgIFNldCBzdm4gcHJvcDogJXMn
LCAnICcuam9pbihjbWQpKQorICAgICAgICBydW5fc2hlbGwoY21kLCBGYWxzZSkKKyAgICAgICAg
b3MuY2hkaXIob3JpZ2luYWxfZGlyKQorCisgICAgZGVmIF9jcmVhdGVfaHRtbF9iYXNlbGluZV9m
aWxlcyhzZWxmLCBiYXNlbGluZV9mdWxscGF0aCk6CisgICAgICAgICIiIkNyZWF0ZSBiYXNlbGlu
ZSBmaWxlcyAob2xkLCBuZXcgYW5kIGRpZmYpIGluIGh0bWwgZGlyZWN0b3J5LgorCisgICAgICAg
ICAgIFRoZSBmaWxlcyBhcmUgdXNlZCB0byBjb21wYXJlIHRoZSByZWJhc2VsaW5pbmcgcmVzdWx0
cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIGJhc2VsaW5lX2Z1bGxwYXRoOiBmdWxsIHBh
dGggb2YgdGhlIGV4cGVjdGVkIGJhc2VsaW5lIGZpbGUuCisgICAgICAgICIiIgorCisgICAgICAg
IGlmIG5vdCBiYXNlbGluZV9mdWxscGF0aCBvciBub3Qgb3MucGF0aC5leGlzdHMoYmFzZWxpbmVf
ZnVsbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDb3B5IHRoZSBuZXcg
YmFzZWxpbmUgdG8gaHRtbCBkaXJlY3RvcnkgZm9yIHJlc3VsdCBjb21wYXJpc29uLgorICAgICAg
ICBiYXNlbGluZV9maWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoYmFzZWxpbmVfZnVsbHBhdGgp
CisgICAgICAgIG5ld19maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX29wdGlv
bnMuaHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBzZWxmLl9wbGF0Zm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldycpCisgICAgICAgIHNodXRpbC5jb3B5
ZmlsZShiYXNlbGluZV9mdWxscGF0aCwgbmV3X2ZpbGUpCisgICAgICAgIGxvZ2dpbmcuaW5mbygn
ICBIdG1sOiBjb3BpZWQgbmV3IGJhc2VsaW5lIGZpbGUgZnJvbSAiJXMiIHRvICIlcyIuJywKKyAg
ICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2Z1bGxwYXRoLCBuZXdfZmlsZSkKKworICAgICAg
ICAjIEdldCB0aGUgb2xkIGJhc2VsaW5lIGZyb20gU1ZOIGFuZCBzYXZlIHRvIHRoZSBodG1sIGRp
cmVjdG9yeS4KKyAgICAgICAgb3V0cHV0ID0gcnVuX3NoZWxsKFsnc3ZuJywgJ2NhdCcsICctcics
ICdCQVNFJywgYmFzZWxpbmVfZnVsbHBhdGhdKQorICAgICAgICBpZiAobm90IG91dHB1dCkgb3Ig
KG91dHB1dC51cHBlcigpLnJzdHJpcCgpLmVuZHN3aXRoKAorICAgICAgICAgICAgJ05PIFNVQ0gg
RklMRSBPUiBESVJFQ1RPUlknKSk6CisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgTm8gYmFz
ZSBmaWxlOiAiJXMiJywgYmFzZWxpbmVfZnVsbHBhdGgpCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgYmFzZV9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX29wdGlvbnMu
aHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNlbGluZV9maWxlbmFtZSwgc2VsZi5fcGxhdGZvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2xkJykKKyAgICAgICAgZiA9IG9wZW4oYmFz
ZV9maWxlLCAnd2InKQorICAgICAgICBmLndyaXRlKG91dHB1dCkKKyAgICAgICAgZi5jbG9zZSgp
CisgICAgICAgIGxvZ2dpbmcuaW5mbygnICBIdG1sOiBjcmVhdGVkIG9sZCBiYXNlbGluZSBmaWxl
OiAiJXMiLicsCisgICAgICAgICAgICAgICAgICAgICBiYXNlX2ZpbGUpCisKKyAgICAgICAgIyBH
ZXQgdGhlIGRpZmYgYmV0d2VlbiBvbGQgYW5kIG5ldyBiYXNlbGluZXMgYW5kIHNhdmUgdG8gdGhl
IGh0bWwgZGlyLgorICAgICAgICBpZiBiYXNlbGluZV9maWxlbmFtZS51cHBlcigpLmVuZHN3aXRo
KCcuVFhUJyk6CisgICAgICAgICAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhIGN1c3RvbSBk
aWZmIGNvbW1hbmQgaW4gdGhlaXIgc3ZuIGNvbmZpZworICAgICAgICAgICAgIyBmaWxlLCB0aGVu
IGl0J2xsIGJlIHVzZWQgd2hlbiB3ZSBkbyBzdm4gZGlmZiwgd2hpY2ggd2UgZG9uJ3Qgd2FudAor
ICAgICAgICAgICAgIyB0byBoYXBwZW4gc2luY2Ugd2Ugd2FudCB0aGUgdW5pZmllZCBkaWZmLiAg
VXNpbmcgLS1kaWZmLWNtZD1kaWZmCisgICAgICAgICAgICAjIGRvZXNuJ3QgYWx3YXlzIHdvcmss
IHNpbmNlIHRoZXkgY2FuIGhhdmUgYW5vdGhlciBkaWZmIGV4ZWN1dGFibGUKKyAgICAgICAgICAg
ICMgaW4gdGhlaXIgcGF0aCB0aGF0IGdpdmVzIGRpZmZlcmVudCBsaW5lIGVuZGluZ3MuICBTbyB3
ZSB1c2UgYQorICAgICAgICAgICAgIyBib2d1cyB0ZW1wIGRpcmVjdG9yeSBhcyB0aGUgY29uZmln
IGRpcmVjdG9yeSwgd2hpY2ggZ2V0cworICAgICAgICAgICAgIyBhcm91bmQgdGhlc2UgcHJvYmxl
bXMuCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAg
ICAgICAgICAgICAgcGFyZW50X2RpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJlbnRfZGlyID0gc3lzLnBhdGhbMF0gICMgdGVt
cGRpciBpcyBub3Qgc2VjdXJlLgorICAgICAgICAgICAgYm9ndXNfZGlyID0gb3MucGF0aC5qb2lu
KHBhcmVudF9kaXIsICJ0ZW1wX3N2bl9jb25maWciKQorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygnICBIdG1sOiB0ZW1wIGNvbmZpZyBkaXI6ICIlcyIuJywgYm9ndXNfZGlyKQorICAgICAgICAg
ICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJvZ3VzX2Rpcik6CisgICAgICAgICAgICAgICAgb3Mu
bWtkaXIoYm9ndXNfZGlyKQorICAgICAgICAgICAgICAgIGRlbGV0ZV9ib2d1c19kaXIgPSBUcnVl
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbGV0ZV9ib2d1c19kaXIgPSBG
YWxzZQorCisgICAgICAgICAgICBvdXRwdXQgPSBydW5fc2hlbGwoWyJzdm4iLCAiZGlmZiIsICIt
LWNvbmZpZy1kaXIiLCBib2d1c19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZWxpbmVfZnVsbHBhdGhdKQorICAgICAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAg
ICAgIGRpZmZfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aCgKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9yeSwgYmFzZWxpbmVfZmlsZW5hbWUsCisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtLCAnZGlmZicpCisgICAgICAgICAgICAg
ICAgZiA9IG9wZW4oZGlmZl9maWxlLCAnd2InKQorICAgICAgICAgICAgICAgIGYud3JpdGUob3V0
cHV0KQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcu
aW5mbygnICBIdG1sOiBjcmVhdGVkIGJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIi4nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGUpCisKKyAgICAgICAgICAgIGlmIGRlbGV0
ZV9ib2d1c19kaXI6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShib2d1c19kaXIsIFRy
dWUpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICBIdG1sOiByZW1vdmVkIHRlbXAg
Y29uZmlnIGRpcjogIiVzIi4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9ndXNf
ZGlyKQorCisKK2NsYXNzIEh0bWxHZW5lcmF0b3Iob2JqZWN0KToKKyAgICAiIiJDbGFzcyB0byBn
ZW5lcmF0ZSByZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gaHRtbC4iIiIKKworICAgIEhU
TUxfUkVCQVNFTElORSA9ICgnPGh0bWw+JworICAgICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+
JworICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlPicKKyAgICAgICAgICAgICAgICAgICAg
ICAgJ2JvZHkge2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO30nCisgICAgICAgICAgICAgICAgICAg
ICAgICcubWFpblRhYmxlIHtiYWNrZ3JvdW5kOiAjNjY2NjY2O30nCisgICAgICAgICAgICAgICAg
ICAgICAgICcubWFpblRhYmxlIHRkICwgLm1haW5UYWJsZSB0aCB7YmFja2dyb3VuZDogd2hpdGU7
fScKKyAgICAgICAgICAgICAgICAgICAgICAgJy5kZXRhaWwge21hcmdpbi1sZWZ0OiAxMHB4OyBt
YXJnaW4tdG9wOiAzcHg7fScKKyAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+JworICAg
ICAgICAgICAgICAgICAgICAgICAnPHRpdGxlPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFyaXNv
biAoJSh0aW1lKXMpJworICAgICAgICAgICAgICAgICAgICAgICAnPC90aXRsZT4nCisgICAgICAg
ICAgICAgICAgICAgICAgICc8L2hlYWQ+JworICAgICAgICAgICAgICAgICAgICAgICAnPGJvZHk+
JworICAgICAgICAgICAgICAgICAgICAgICAnPGgyPlJlYmFzZWxpbmluZyBSZXN1bHQgQ29tcGFy
aXNvbiAoJSh0aW1lKXMpPC9oMj4nCisgICAgICAgICAgICAgICAgICAgICAgICclKGJvZHkpcycK
KyAgICAgICAgICAgICAgICAgICAgICAgJzwvYm9keT4nCisgICAgICAgICAgICAgICAgICAgICAg
ICc8L2h0bWw+JykKKyAgICBIVE1MX05PX1JFQkFTRUxJTklOR19URVNUUyA9ICgKKyAgICAgICAg
JzxwPk5vIHRlc3RzIGZvdW5kIHRoYXQgbmVlZCByZWJhc2VsaW5pbmcuPC9wPicpCisgICAgSFRN
TF9UQUJMRV9URVNUID0gKCc8dGFibGUgY2xhc3M9Im1haW5UYWJsZSIgY2VsbHNwYWNpbmc9MSBj
ZWxscGFkZGluZz01PicKKyAgICAgICAgICAgICAgICAgICAgICAgJyVzPC90YWJsZT48YnI+JykK
KyAgICBIVE1MX1RSX1RFU1QgPSAoJzx0cj4nCisgICAgICAgICAgICAgICAgICAgICc8dGggc3R5
bGU9ImJhY2tncm91bmQtY29sb3I6ICNDREVDREU7IGJvcmRlci1ib3R0b206ICcKKyAgICAgICAg
ICAgICAgICAgICAgJzFweCBzb2xpZCBibGFjazsgZm9udC1zaXplOiAxOHB0OyBmb250LXdlaWdo
dDogYm9sZCIgJworICAgICAgICAgICAgICAgICAgICAnY29sc3Bhbj0iNSI+JworICAgICAgICAg
ICAgICAgICAgICAnPGEgaHJlZj0iJXMiPiVzPC9hPicKKyAgICAgICAgICAgICAgICAgICAgJzwv
dGg+JworICAgICAgICAgICAgICAgICAgICAnPC90cj4nKQorICAgIEhUTUxfVEVTVF9ERVRBSUwg
PSAoJzxkaXYgY2xhc3M9ImRldGFpbCI+JworICAgICAgICAgICAgICAgICAgICAgICAgJzx0cj4n
CisgICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPkJhc2VsaW5lPC90aD4n
CisgICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIxMDAiPlBsYXRmb3JtPC90aD4n
CisgICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHdpZHRoPSIyMDAiPk9sZDwvdGg+JworICAg
ICAgICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0aD0iMjAwIj5OZXc8L3RoPicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICc8dGggd2lkdGg9IjE1MCI+RGlmZmVyZW5jZTwvdGg+JworICAgICAg
ICAgICAgICAgICAgICAgICAgJzwvdHI+JworICAgICAgICAgICAgICAgICAgICAgICAgJyVzJwor
ICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicpCisgICAgSFRNTF9URF9OT0xJTksgPSAn
PHRkIGFsaWduPWNlbnRlcj48YT4lczwvYT48L3RkPicKKyAgICBIVE1MX1REX0xJTksgPSAnPHRk
IGFsaWduPWNlbnRlcj48YSBocmVmPSIlKHVyaSlzIj4lKG5hbWUpczwvYT48L3RkPicKKyAgICBI
VE1MX1REX0xJTktfSU1HID0gKCc8dGQ+PGEgaHJlZj0iJSh1cmkpcyI+JworICAgICAgICAgICAg
ICAgICAgICAgICAgJzxpbWcgc3R5bGU9IndpZHRoOiAyMDAiIHNyYz0iJSh1cmkpcyIgLz48L2E+
PC90ZD4nKQorICAgIEhUTUxfVFIgPSAnPHRyPiVzPC90cj4nCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgb3B0aW9ucywgcGxhdGZvcm1zLCByZWJhc2VsaW5pbmdfdGVzdHMpOgorICAgICAgICBz
ZWxmLl9odG1sX2RpcmVjdG9yeSA9IG9wdGlvbnMuaHRtbF9kaXJlY3RvcnkKKyAgICAgICAgc2Vs
Zi5fcGxhdGZvcm1zID0gcGxhdGZvcm1zCisgICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0
cyA9IHJlYmFzZWxpbmluZ190ZXN0cworICAgICAgICBzZWxmLl9odG1sX2ZpbGUgPSBvcy5wYXRo
LmpvaW4ob3B0aW9ucy5odG1sX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdyZWJhc2VsaW5lLmh0bWwnKQorCisgICAgZGVmIGdlbmVyYXRlX2h0bWwo
c2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIGh0bWwgZmlsZSBmb3IgcmViYXNlbGluaW5nIHJl
c3VsdCBjb21wYXJpc29uLiIiIgorCisgICAgICAgIGxvZ2dpbmcuaW5mbygnR2VuZXJhdGluZyBo
dG1sIGZpbGUnKQorCisgICAgICAgIGh0bWxfYm9keSA9ICcnCisgICAgICAgIGlmIG5vdCBzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHM6CisgICAgICAgICAgICBodG1sX2JvZHkgKz0gc2VsZi5IVE1M
X05PX1JFQkFTRUxJTklOR19URVNUUworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVzdHMg
PSBsaXN0KHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykKKyAgICAgICAgICAgIHRlc3RzLnNvcnQo
KQorCisgICAgICAgICAgICB0ZXN0X25vID0gMQorICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVz
dHM6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdUZXN0ICVkOiAlcycsIHRlc3Rfbm8s
IHRlc3QpCisgICAgICAgICAgICAgICAgaHRtbF9ib2R5ICs9IHNlbGYuX2dlbmVyYXRlX2h0bWxf
Zm9yX29uZV90ZXN0KHRlc3QpCisKKyAgICAgICAgaHRtbCA9IHNlbGYuSFRNTF9SRUJBU0VMSU5F
ICUgKHsndGltZSc6IHRpbWUuYXNjdGltZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdib2R5JzogaHRtbF9ib2R5fSkKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zyho
dG1sKQorCisgICAgICAgIGYgPSBvcGVuKHNlbGYuX2h0bWxfZmlsZSwgJ3cnKQorICAgICAgICBm
LndyaXRlKGh0bWwpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygn
QmFzZWxpbmUgY29tcGFyaXNvbiBodG1sIGdlbmVyYXRlZCBhdCAiJXMiJywKKyAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2h0bWxfZmlsZSkKKworICAgIGRlZiBzaG93X2h0bWwoc2VsZik6Cisg
ICAgICAgICIiIkxhdW5jaCB0aGUgcmViYXNlbGluaW5nIGh0bWwgaW4gYnJ3b3Nlci4iIiIKKwor
ICAgICAgICBsb2dnaW5nLmluZm8oJ0xhdW5jaGluZyBodG1sOiAiJXMiJywgc2VsZi5faHRtbF9m
aWxlKQorCisgICAgICAgIGh0bWxfdXJpID0gcGF0aF91dGlscy5maWxlbmFtZV90b191cmkoc2Vs
Zi5faHRtbF9maWxlKQorICAgICAgICB3ZWJicm93c2VyLm9wZW4oaHRtbF91cmksIDEpCisKKyAg
ICAgICAgbG9nZ2luZy5pbmZvKCdIdG1sIGxhdW5jaGVkLicpCisKKyAgICBkZWYgX2dlbmVyYXRl
X2Jhc2VsaW5lX2xpbmtzKHNlbGYsIHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCwgcGxhdGZvcm0pOgor
ICAgICAgICAiIiJHZW5lcmF0ZSBsaW5rcyBmb3IgYmFzZWxpbmUgcmVzdWx0cyAob2xkLCBuZXcg
YW5kIGRpZmYpLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgdGVzdF9iYXNlbmFtZTogYmFz
ZSBmaWxlbmFtZSBvZiB0aGUgdGVzdAorICAgICAgICAgIHN1ZmZpeDogYmFzZWxpbmUgZmlsZSBz
dWZmaXhlczogJy50eHQnLCAnLnBuZycKKyAgICAgICAgICBwbGF0Zm9ybTogd2luLCBsaW51eCBv
ciBtYWMKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIGh0bWwgbGlua3MgZm9yIHNob3dp
bmcgYmFzZWxpbmUgcmVzdWx0cyAob2xkLCBuZXcgYW5kIGRpZmYpCisgICAgICAgICIiIgorCisg
ICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0gJyVzLWV4cGVjdGVkJXMnICUgKHRlc3RfYmFzZW5h
bWUsIHN1ZmZpeCkKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICAgIGJhc2VsaW5lIGZpbGVuYW1l
OiAiJXMiJywgYmFzZWxpbmVfZmlsZW5hbWUpCisKKyAgICAgICAgbmV3X2ZpbGUgPSBnZXRfcmVz
dWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5faHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwg
J25ldycpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnICAgIE5ldyBiYXNlbGluZSBmaWxlOiAiJXMi
JywgbmV3X2ZpbGUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfZmlsZSk6Cisg
ICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgICBObyBuZXcgYmFzZWxpbmUgZmlsZTogIiVzIics
IG5ld19maWxlKQorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgb2xkX2ZpbGUgPSBn
ZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5faHRtbF9kaXJlY3RvcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0
Zm9ybSwgJ29sZCcpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnICAgIE9sZCBiYXNlbGluZSBmaWxl
OiAiJXMiJywgb2xkX2ZpbGUpCisgICAgICAgIGlmIHN1ZmZpeCA9PSAnLnBuZyc6CisgICAgICAg
ICAgICBodG1sX3RkX2xpbmsgPSBzZWxmLkhUTUxfVERfTElOS19JTUcKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGh0bWxfdGRfbGluayA9IHNlbGYuSFRNTF9URF9MSU5LCisKKyAgICAgICAg
bGlua3MgPSAnJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvbGRfZmlsZSk6CisgICAgICAg
ICAgICBsaW5rcyArPSBodG1sX3RkX2xpbmsgJSB7CisgICAgICAgICAgICAgICAgJ3VyaSc6IHBh
dGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKG9sZF9maWxlKSwKKyAgICAgICAgICAgICAgICAnbmFt
ZSc6IGJhc2VsaW5lX2ZpbGVuYW1lfQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2lu
Zy5pbmZvKCcgICAgTm8gb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKKyAgICAg
ICAgICAgIGxpbmtzICs9IHNlbGYuSFRNTF9URF9OT0xJTksgJSAnJworCisgICAgICAgIGxpbmtz
ICs9IGh0bWxfdGRfbGluayAlIHsndXJpJzogcGF0aF91dGlscy5maWxlbmFtZV90b191cmkobmV3
X2ZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBiYXNlbGlu
ZV9maWxlbmFtZX0KKworICAgICAgICBkaWZmX2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBh
dGgoc2VsZi5faHRtbF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlmZicpCisgICAgICAgIGxvZ2dpbmcu
aW5mbygnICAgIEJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIicsIGRpZmZfZmlsZSkKKyAgICAgICAg
aWYgb3MucGF0aC5leGlzdHMoZGlmZl9maWxlKToKKyAgICAgICAgICAgIGxpbmtzICs9IGh0bWxf
dGRfbGluayAlIHsndXJpJzogcGF0aF91dGlscy5maWxlbmFtZV90b191cmkoCisgICAgICAgICAg
ICAgICAgZGlmZl9maWxlKSwgJ25hbWUnOiAnRGlmZid9CisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBsb2dnaW5nLmluZm8oJyAgICBObyBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZm
X2ZpbGUpCisgICAgICAgICAgICBsaW5rcyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgJycKKwor
ICAgICAgICByZXR1cm4gbGlua3MKKworICAgIGRlZiBfZ2VuZXJhdGVfaHRtbF9mb3Jfb25lX3Rl
c3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIkdlbmVyYXRlIGh0bWwgZm9yIG9uZSByZWJhc2Vs
aW5pbmcgdGVzdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3Q6IGxheW91dCB0ZXN0
IG5hbWUKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgIGh0bWwgdGhhdCBjb21wYXJlcyBi
YXNlbGluZSByZXN1bHRzIGZvciB0aGUgdGVzdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdGVz
dF9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5zcGxpdGV4dCh0ZXN0KVswXSkK
KyAgICAgICAgbG9nZ2luZy5pbmZvKCcgIGJhc2VuYW1lOiAiJXMiJywgdGVzdF9iYXNlbmFtZSkK
KyAgICAgICAgcm93cyA9IFtdCisgICAgICAgIGZvciBzdWZmaXggaW4gQkFTRUxJTkVfU1VGRklY
RVM6CisgICAgICAgICAgICBpZiBzdWZmaXggPT0gJy5jaGVja3N1bSc6CisgICAgICAgICAgICAg
ICAgY29udGludWUKKworICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIENoZWNraW5nICVzIGZp
bGVzJywgc3VmZml4KQorICAgICAgICAgICAgZm9yIHBsYXRmb3JtIGluIHNlbGYuX3BsYXRmb3Jt
czoKKyAgICAgICAgICAgICAgICBsaW5rcyA9IHNlbGYuX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtz
KHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCwKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisg
ICAgICAgICAgICAgICAgaWYgbGlua3M6CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IHNlbGYu
SFRNTF9URF9OT0xJTksgJSBzZWxmLl9nZXRfYmFzZWxpbmVfcmVzdWx0X3R5cGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdWZmaXgpCisgICAgICAgICAgICAgICAgICAgIHJvdyArPSBzZWxm
LkhUTUxfVERfTk9MSU5LICUgcGxhdGZvcm0KKyAgICAgICAgICAgICAgICAgICAgcm93ICs9IGxp
bmtzCisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJyAgICBodG1sIHJvdzogJXMn
LCByb3cpCisKKyAgICAgICAgICAgICAgICAgICAgcm93cy5hcHBlbmQoc2VsZi5IVE1MX1RSICUg
cm93KQorCisgICAgICAgIGlmIHJvd3M6CisgICAgICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRo
LmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3QpCisgICAgICAgICAgICBo
dG1sID0gc2VsZi5IVE1MX1RSX1RFU1QgJSAocGF0aF91dGlscy5maWxlbmFtZV90b191cmkodGVz
dF9wYXRoKSwKKyAgICAgICAgICAgICAgICB0ZXN0KQorICAgICAgICAgICAgaHRtbCArPSBzZWxm
LkhUTUxfVEVTVF9ERVRBSUwgJSAnICcuam9pbihyb3dzKQorCisgICAgICAgICAgICBsb2dnaW5n
LmRlYnVnKCcgICAgaHRtbCBmb3IgdGVzdDogJXMnLCBodG1sKQorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuSFRNTF9UQUJMRV9URVNUICUgaHRtbAorCisgICAgICAgIHJldHVybiAnJworCisgICAg
ZGVmIF9nZXRfYmFzZWxpbmVfcmVzdWx0X3R5cGUoc2VsZiwgc3VmZml4KToKKyAgICAgICAgIiIi
TmFtZSBvZiB0aGUgYmFzZWxpbmUgcmVzdWx0IHR5cGUuIiIiCisKKyAgICAgICAgaWYgc3VmZml4
ID09ICcucG5nJzoKKyAgICAgICAgICAgIHJldHVybiAnUGl4ZWwnCisgICAgICAgIGVsaWYgc3Vm
Zml4ID09ICcudHh0JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVuZGVyIFRyZWUnCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ090aGVyJworCisKK2RlZiBtYWluKCk6CisgICAg
IiIiTWFpbiBmdW5jdGlvbiB0byBwcm9kdWNlIG5ldyBiYXNlbGluZXMuIiIiCisKKyAgICBvcHRp
b25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2luY2x1ZGUgZGVi
dWctbGV2ZWwgbG9nZ2luZy4nKQorCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcCcs
ICctLXBsYXRmb3JtcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J21h
Yyx3aW4sd2luLXhwLHdpbi12aXN0YSxsaW51eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9KCdDb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBwbGF0Zm9ybXMgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndGhhdCBuZWVkIHJlYmFzZWxpbmluZy4nKSkKKwor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXUnLCAnLS1hcmNoaXZlX3VybCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9KCdodHRwOi8vYnVpbGQuY2hyb21pdW0u
b3JnL2J1aWxkYm90LycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xh
eW91dF90ZXN0X3Jlc3VsdHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0o
J1VybCB0byBmaW5kIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgYXJjaGl2ZScKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyBmaWxlLicpKQorCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCctdycsICctLXdlYmtpdF9jYW5hcnknLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnSWYg
VHJ1ZSwgcHVsbCBiYXNlbGluZXMgZnJvbSB3ZWJraXQub3JnICcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2NhbmFyeSBib3QuJykpCisKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJy1iJywgJy0tYmFja3VwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1doZXRoZXIgb3Ig
bm90IHRvIGJhY2t1cCB0aGUgb3JpZ2luYWwgdGVzdCcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyBleHBlY3RhdGlvbnMgZmlsZSBhZnRlciByZWJhc2VsaW5lLicpKQorCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWh0bWxfZGlyZWN0b3J5JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0oJ1RoZSBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgdGhlIHJlc3VsdHMg
Zm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHJlYmFzZWxpbmluZyBj
b21wYXJpc29uLicpKQorCisgICAgb3B0aW9ucyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygp
WzBdCisKKyAgICAjIFNldCB1cCBvdXIgbG9nZ2luZyBmb3JtYXQuCisgICAgbG9nX2xldmVsID0g
bG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy52ZXJib3NlOgorICAgICAgICBsb2dfbGV2ZWwg
PSBsb2dnaW5nLkRFQlVHCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWws
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9KCclKGFzY3RpbWUpcyAlKGZpbGVuYW1l
KXM6JShsaW5lbm8pLTNkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUobGV2
ZWxuYW1lKXMgJShtZXNzYWdlKXMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9
JyV5JW0lZCAlSDolTTolUycpCisKKyAgICAjIFZlcmlmeSAncGxhdGZvcm1zJyBvcHRpb24gaXMg
dmFsaWQKKyAgICBpZiBub3Qgb3B0aW9ucy5wbGF0Zm9ybXM6CisgICAgICAgIGxvZ2dpbmcuZXJy
b3IoJ0ludmFsaWQgInBsYXRmb3JtcyIgb3B0aW9uLiAtLXBsYXRmb3JtcyBtdXN0IGJlICcKKyAg
ICAgICAgICAgICAgICAgICAgICAnc3BlY2lmaWVkIGluIG9yZGVyIHRvIHJlYmFzZWxpbmUuJykK
KyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwbGF0Zm9ybXMgPSBbcC5zdHJpcCgpLmxvd2VyKCkg
Zm9yIHAgaW4gb3B0aW9ucy5wbGF0Zm9ybXMuc3BsaXQoJywnKV0KKyAgICBmb3IgcGxhdGZvcm0g
aW4gcGxhdGZvcm1zOgorICAgICAgICBpZiBub3QgcGxhdGZvcm0gaW4gUkVCQVNFTElORV9QTEFU
Rk9STV9PUkRFUjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06
ICIlcyInICUgKHBsYXRmb3JtKSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAjIEFk
anVzdCB0aGUgcGxhdGZvcm0gb3JkZXIgc28gcmViYXNlbGluZSB0b29sIGlzIHJ1bm5pbmcgYXQg
dGhlIG9yZGVyIG9mCisgICAgIyAnbWFjJywgJ3dpbicgYW5kICdsaW51eCcuIFRoaXMgaXMgaW4g
c2FtZSBvcmRlciB3aXRoIGxheW91dCB0ZXN0IGJhc2VsaW5lCisgICAgIyBzZWFyY2ggcGF0aHMu
IEl0IHNpbXBsaWZpZXMgaG93IHRoZSByZWJhc2VsaW5lIHRvb2wgZGV0ZWN0cyBkdXBsaWNhdGUK
KyAgICAjIGJhc2VsaW5lcy4gQ2hlY2sgX0lzRHVwQmFzZWxpbmUgbWV0aG9kIGZvciBkZXRhaWxz
LgorICAgIHJlYmFzZWxpbmVfcGxhdGZvcm1zID0gW10KKyAgICBmb3IgcGxhdGZvcm0gaW4gUkVC
QVNFTElORV9QTEFURk9STV9PUkRFUjoKKyAgICAgICAgaWYgcGxhdGZvcm0gaW4gcGxhdGZvcm1z
OgorICAgICAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMuYXBwZW5kKHBsYXRmb3JtKQorCisg
ICAgb3B0aW9ucy5odG1sX2RpcmVjdG9yeSA9IHNldHVwX2h0bWxfZGlyZWN0b3J5KG9wdGlvbnMu
aHRtbF9kaXJlY3RvcnkpCisKKyAgICByZWJhc2VsaW5pbmdfdGVzdHMgPSBzZXQoKQorICAgIGJh
Y2t1cCA9IG9wdGlvbnMuYmFja3VwCisgICAgZm9yIHBsYXRmb3JtIGluIHJlYmFzZWxpbmVfcGxh
dGZvcm1zOgorICAgICAgICByZWJhc2VsaW5lciA9IFJlYmFzZWxpbmVyKHBsYXRmb3JtLCBvcHRp
b25zKQorCisgICAgICAgIGxvZ2dpbmcuaW5mbygnJykKKyAgICAgICAgbG9nX2Rhc2hlZF9zdHJp
bmcoJ1JlYmFzZWxpbmUgc3RhcnRlZCcsIHBsYXRmb3JtKQorICAgICAgICBpZiByZWJhc2VsaW5l
ci5ydW4oYmFja3VwKToKKyAgICAgICAgICAgICMgT25seSBuZWVkIHRvIGJhY2t1cCBvbmUgb3Jp
Z2luYWwgY29weSBvZiB0ZXN0IGV4cGVjdGF0aW9uIGZpbGUuCisgICAgICAgICAgICBiYWNrdXAg
PSBGYWxzZQorICAgICAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1JlYmFzZWxpbmUgZG9uZScs
IHBsYXRmb3JtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmco
J1JlYmFzZWxpbmUgZmFpbGVkJywgcGxhdGZvcm0sIGxvZ2dpbmcuRVJST1IpCisKKyAgICAgICAg
cmViYXNlbGluaW5nX3Rlc3RzIHw9IHNldChyZWJhc2VsaW5lci5nZXRfcmViYXNlbGluaW5nX3Rl
c3RzKCkpCisKKyAgICBsb2dnaW5nLmluZm8oJycpCisgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1Jl
YmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbiBzdGFydGVkJywgTm9uZSkKKyAgICBodG1sX2dl
bmVyYXRvciA9IEh0bWxHZW5lcmF0b3Iob3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlYmFzZWxpbmluZ190ZXN0cykKKyAgICBodG1sX2dlbmVyYXRvci5nZW5l
cmF0ZV9odG1sKCkKKyAgICBodG1sX2dlbmVyYXRvci5zaG93X2h0bWwoKQorICAgIGxvZ19kYXNo
ZWRfc3RyaW5nKCdSZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gZG9uZScsIE5vbmUpCisK
KyAgICBzeXMuZXhpdCgwKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgorICAgIG1haW4o
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hy
b21pdW1fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNjk3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiUnVuIGxheW91dCB0ZXN0cyB1c2luZyB0aGUgdGVzdF9zaGVs
bC4KKworVGhpcyBpcyBhIHBvcnQgb2YgdGhlIGV4aXN0aW5nIHdlYmtpdCB0ZXN0IHNjcmlwdCBy
dW4td2Via2l0LXRlc3RzLgorCitUaGUgVGVzdFJ1bm5lciBjbGFzcyBydW5zIGEgc2VyaWVzIG9m
IHRlc3RzIChUZXN0VHlwZSBpbnRlcmZhY2UpIGFnYWluc3QgYSBzZXQKK29mIHRlc3QgZmlsZXMu
ICBJZiBhIHRlc3QgZmlsZSBmYWlscyBhIFRlc3RUeXBlLCBpdCByZXR1cm5zIGEgbGlzdCBUZXN0
RmFpbHVyZQorb2JqZWN0cyB0byB0aGUgVGVzdFJ1bm5lci4gIFRoZSBUZXN0UnVubmVyIHRoZW4g
YWdncmVnYXRlcyB0aGUgVGVzdEZhaWx1cmVzIHRvCitjcmVhdGUgYSBmaW5hbCByZXBvcnQuCisK
K1RoaXMgc2NyaXB0IHJlYWRzIHNldmVyYWwgZmlsZXMsIGlmIHRoZXkgZXhpc3QgaW4gdGhlIHRl
c3RfbGlzdHMgc3ViZGlyZWN0b3J5CituZXh0IHRvIHRoaXMgc2NyaXB0IGl0c2VsZi4gIEVhY2gg
c2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIHBhdGhzIHRvIGluZGl2aWR1YWwKK3Rlc3RzIG9yIGVu
dGlyZSBzdWJkaXJlY3RvcmllcyBvZiB0ZXN0cywgcmVsYXRpdmUgdG8gdGhlIG91dGVybW9zdCB0
ZXN0CitkaXJlY3RvcnkuICBFbnRpcmUgbGluZXMgc3RhcnRpbmcgd2l0aCAnLy8nIChjb21tZW50
cykgd2lsbCBiZSBpZ25vcmVkLgorCitGb3IgZGV0YWlscyBvZiB0aGUgZmlsZXMnIGNvbnRlbnRz
IGFuZCBwdXJwb3Nlcywgc2VlIHRlc3RfbGlzdHMvUkVBRE1FLgorIiIiCisKK2ltcG9ydCBlcnJu
bworaW1wb3J0IGdsb2IKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbWF0aAoraW1wb3J0IG9wdHBh
cnNlCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHJlCitp
bXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUK
K2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgYXBhY2hlX2h0
dHBfc2VydmVyCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwor
ZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgaHR0cF9zZXJ2ZXIKK2Zyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCitmcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQorZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0
aF91dGlscworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGxhdGZvcm1fdXRpbHMKK2Zyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKK2Zyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHRlc3Rfc2hlbGxfdGhyZWFkCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X2ZpbGVzCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB3ZWJzb2NrZXRfc2VydmVyCitmcm9t
IHRlc3RfdHlwZXMgaW1wb3J0IGZ1enp5X2ltYWdlX2RpZmYKK2Zyb20gdGVzdF90eXBlcyBpbXBv
cnQgaW1hZ2VfZGlmZgorZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQorZnJv
bSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKKworc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JykpCitpbXBvcnQgc2ltcGxlanNvbgorCisj
IEluZGljYXRlcyB0aGF0IHdlIHdhbnQgZGV0YWlsZWQgcHJvZ3Jlc3MgdXBkYXRlcyBpbiB0aGUg
b3V0cHV0IChwcmludHMKKyMgZGlyZWN0b3J5LWJ5LWRpcmVjdG9yeSBmZWVkYmFjaykuCitMT0df
REVUQUlMRURfUFJPR1JFU1MgPSAnZGV0YWlsZWQtcHJvZ3Jlc3MnCisKKyMgTG9nIGFueSB1bmV4
cGVjdGVkIHJlc3VsdHMgd2hpbGUgcnVubmluZyAoaW5zdGVhZCBvZiBqdXN0IGF0IHRoZSBlbmQp
LgorTE9HX1VORVhQRUNURUQgPSAndW5leHBlY3RlZCcKKworIyBCdWlsZGVyIGJhc2UgVVJMIHdo
ZXJlIHdlIGhhdmUgdGhlIGFyY2hpdmVkIHRlc3QgcmVzdWx0cy4KK0JVSUxERVJfQkFTRV9VUkwg
PSAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9idWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRz
LyIKKworVGVzdEV4cGVjdGF0aW9uc0ZpbGUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0
YXRpb25zRmlsZQorCisKK2NsYXNzIFRlc3RJbmZvOgorICAgICIiIkdyb3VwcyBpbmZvcm1hdGlv
biBhYm91dCBhIHRlc3QgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRhLiIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lb3V0KToKKyAgICAgICAgIiIiR2VuZXJhdGVzIHRo
ZSBVUkkgYW5kIHN0b3JlcyB0aGUgZmlsZW5hbWUgYW5kIHRpbWVvdXQgZm9yIHRoaXMgdGVzdC4K
KyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxlbmFtZTogRnVsbCBwYXRoIHRvIHRoZSB0ZXN0
LgorICAgICAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgaW4gVGVz
dFNoZWxsLgorICAgICAgICAgICIiIgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUK
KyAgICAgICAgc2VsZi51cmkgPSBwYXRoX3V0aWxzLmZpbGVuYW1lX3RvX3VyaShmaWxlbmFtZSkK
KyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBleHBlY3RlZF9oYXNoX2Zp
bGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuY2hlY2tzdW0n
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSBvcGVuKGV4cGVj
dGVkX2hhc2hfZmlsZSwgInIiKS5yZWFkKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Cisg
ICAgICAgICAgICBpZiBlcnJuby5FTk9FTlQgIT0gZS5lcnJubzoKKyAgICAgICAgICAgICAgICBy
YWlzZQorICAgICAgICAgICAgc2VsZi5pbWFnZV9oYXNoID0gTm9uZQorCisKK2NsYXNzIFJlc3Vs
dFN1bW1hcnkob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIGZvciBwYXJ0aXRpb25pbmcgdGhlIHRl
c3QgcmVzdWx0cyB3ZSBnZXQgaW50byBidWNrZXRzLgorCisgICAgVGhpcyBjbGFzcyBpcyBiYXNp
Y2FsbHkgYSBnbG9yaWZpZWQgc3RydWN0IGFuZCBpdCdzIHByaXZhdGUgdG8gdGhpcyBmaWxlCisg
ICAgc28gd2UgZG9uJ3QgYm90aGVyIHdpdGggYW55IGluZm9ybWF0aW9uIGhpZGluZy4iIiIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RhdGlvbnMsIHRlc3RfZmlsZXMpOgorICAgICAg
ICBzZWxmLnRvdGFsID0gbGVuKHRlc3RfZmlsZXMpCisgICAgICAgIHNlbGYucmVtYWluaW5nID0g
c2VsZi50b3RhbAorICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucworICAg
ICAgICBzZWxmLmV4cGVjdGVkID0gMAorICAgICAgICBzZWxmLnVuZXhwZWN0ZWQgPSAwCisgICAg
ICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb24gPSB7fQorICAgICAgICBzZWxmLnRlc3RzX2J5
X3RpbWVsaW5lID0ge30KKyAgICAgICAgc2VsZi5yZXN1bHRzID0ge30KKyAgICAgICAgc2VsZi51
bmV4cGVjdGVkX3Jlc3VsdHMgPSB7fQorICAgICAgICBzZWxmLmZhaWx1cmVzID0ge30KKyAgICAg
ICAgc2VsZi50ZXN0c19ieV9leHBlY3RhdGlvblt0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQXSA9IHNl
dCgpCisgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBF
Q1RBVElPTlMudmFsdWVzKCk6CisgICAgICAgICAgICBzZWxmLnRlc3RzX2J5X2V4cGVjdGF0aW9u
W2V4cGVjdGF0aW9uXSA9IHNldCgpCisgICAgICAgIGZvciB0aW1lbGluZSBpbiBUZXN0RXhwZWN0
YXRpb25zRmlsZS5USU1FTElORVMudmFsdWVzKCk6CisgICAgICAgICAgICBzZWxmLnRlc3RzX2J5
X3RpbWVsaW5lW3RpbWVsaW5lXSA9ICgKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuZ2V0
X3Rlc3RzX3dpdGhfdGltZWxpbmUodGltZWxpbmUpKQorCisgICAgZGVmIGFkZChzZWxmLCB0ZXN0
LCBmYWlsdXJlcywgcmVzdWx0LCBleHBlY3RlZCk6CisgICAgICAgICIiIkFkZCBhIHJlc3VsdCBp
bnRvIHRoZSBhcHByb3ByaWF0ZSBiaW4uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0
OiB0ZXN0IGZpbGUgbmFtZQorICAgICAgICAgIGZhaWx1cmVzOiBsaXN0IG9mIGZhaWx1cmUgb2Jq
ZWN0cyBmcm9tIHRlc3QgZXhlY3V0aW9uCisgICAgICAgICAgcmVzdWx0OiByZXN1bHQgb2YgdGVz
dCAoUEFTUywgSU1BR0UsIGV0Yy4pLgorICAgICAgICAgIGV4cGVjdGVkOiB3aGV0aGVyIHRoZSBy
ZXN1bHQgd2FzIHdoYXQgd2UgZXhwZWN0ZWQgaXQgdG8gYmUuCisgICAgICAgICIiIgorCisgICAg
ICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb25bcmVzdWx0XS5hZGQodGVzdCkKKyAgICAgICAg
c2VsZi5yZXN1bHRzW3Rlc3RdID0gcmVzdWx0CisgICAgICAgIHNlbGYucmVtYWluaW5nIC09IDEK
KyAgICAgICAgaWYgbGVuKGZhaWx1cmVzKToKKyAgICAgICAgICAgIHNlbGYuZmFpbHVyZXNbdGVz
dF0gPSBmYWlsdXJlcworICAgICAgICBpZiBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuZXhw
ZWN0ZWQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkX3Jl
c3VsdHNbdGVzdF0gPSByZXN1bHQKKyAgICAgICAgICAgIHNlbGYudW5leHBlY3RlZCArPSAxCisK
KworY2xhc3MgVGVzdFJ1bm5lcjoKKyAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5n
IGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAorICAgIHRlc3QgZmlsZXMu
IiIiCisKKyAgICBIVFRQX1NVQkRJUiA9IG9zLnNlcC5qb2luKFsnJywgJ2h0dHAnLCAnJ10pCisg
ICAgV0VCU09DS0VUX1NVQkRJUiA9IG9zLnNlcC5qb2luKFsnJywgJ3dlYnNvY2tldCcsICcnXSkK
KworICAgICMgVGhlIHBlci10ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBpZiBubyAtLXRp
bWUtb3V0LW1zIG9wdGlvbiB3YXMKKyAgICAjIGdpdmVuIHRvIHJ1bl93ZWJraXRfdGVzdHMuIFRo
aXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIGRlZmF1bHQgdGltZW91dAorICAgICMgaW4gdGVz
dF9zaGVsbC5leGUuCisgICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAorCisg
ICAgTlVNX1JFVFJZX09OX1VORVhQRUNURURfRkFJTFVSRSA9IDEKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBvcHRpb25zLCBtZXRlcik6CisgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5u
ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgb3B0aW9uczog
YSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCisgICAgICAgICAgbWV0ZXI6IGEg
TWV0ZXJlZFN0cmVhbSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICIiIgor
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9tZXRlciA9IG1l
dGVyCisKKyAgICAgICAgaWYgb3B0aW9ucy51c2VfYXBhY2hlOgorICAgICAgICAgICAgc2VsZi5f
aHR0cF9zZXJ2ZXIgPSBhcGFjaGVfaHR0cF9zZXJ2ZXIuTGF5b3V0VGVzdEFwYWNoZUh0dHBkKAor
ICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IGh0dHBfc2VydmVyLkxpZ2h0dHBkKG9w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZl
ciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCisgICAgICAgICAgICBvcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5KQorICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBp
bnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCisgICAgICAgICMgc2VsZi5fd2Vic29ja2V0
X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAorICAgICAgICAj
ICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMy
MykKKworICAgICAgICAjIGEgbGlzdCBvZiBUZXN0VHlwZSBvYmplY3RzCisgICAgICAgIHNlbGYu
X3Rlc3RfdHlwZXMgPSBbXQorCisgICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRo
ZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkK
KyAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQorICAgICAgICBzZWxmLl9maWxl
X2RpciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICd0b29scycsCisgICAg
ICAgICAgICAnbGF5b3V0X3Rlc3RzJykKKyAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVl
dWUuUXVldWUoKQorCisgICAgICAgICMgVGhlc2UgYXJlIHVzZWQgZm9yIC0tbG9nIGRldGFpbGVk
LXByb2dyZXNzIHRvIHRyYWNrIHN0YXR1cyBieQorICAgICAgICAjIGRpcmVjdG9yeS4KKyAgICAg
ICAgc2VsZi5fY3VycmVudF9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jl
c3Nfc3RyID0gIiIKKyAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKKworICAg
IGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJmbHVzaGluZyBzdGRv
dXQiKQorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zygi
Zmx1c2hpbmcgc3RkZXJyIikKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIGxv
Z2dpbmcuZGVidWcoInN0b3BwaW5nIGh0dHAgc2VydmVyIikKKyAgICAgICAgIyBTdG9wIHRoZSBo
dHRwIHNlcnZlci4KKyAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIuc3RvcCgpCisgICAgICAgICMg
U3RvcCB0aGUgV2ViIFNvY2tldCAvIFdlYiBTb2NrZXQgU2VjdXJlIHNlcnZlcnMuCisgICAgICAg
IHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCisgICAgICAgICMgc2VsZi5fd2Vic29ja2V0
X3NlY3VyZV9zZXJ2ZXIuU3RvcCgpCisKKyAgICBkZWYgZ2F0aGVyX2ZpbGVfcGF0aHMoc2VsZiwg
cGF0aHMpOgorICAgICAgICAiIiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIHBhdGhzOiBhIGxpc3Qgb2YgZ2xvYnMgdG8gdXNlIGluc3RlYWQg
b2YgdGhlIGRlZmF1bHRzLiIiIgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gdGVzdF9maWxl
cy5nYXRoZXJfdGVzdF9maWxlcyhwYXRocykKKworICAgIGRlZiBwYXJzZV9leHBlY3RhdGlvbnMo
c2VsZiwgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUpOgorICAgICAgICAiIiJQYXJzZSB0aGUgZXhw
ZWN0YXRpb25zIGZyb20gdGhlIHRlc3RfbGlzdCBmaWxlcyBhbmQgcmV0dXJuIGEgZGF0YQorICAg
ICAgICBzdHJ1Y3R1cmUgaG9sZGluZyB0aGVtLiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHRlc3Rf
bGlzdCBmaWxlcyBoYXZlCisgICAgICAgIGludmFsaWQgc3ludGF4LiIiIgorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9maWxlczoKKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSBO
b25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0X2ZpbGVzID0gc2VsZi5fdGVzdF9m
aWxlcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IHRl
c3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnModGVzdF9maWxlcywKKyAgICAgICAgICAg
ICAgICBzZWxmLl9maWxlX2RpciwgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsCisgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3RfZmlsZXMpCisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZXhwZWN0YXRpb25zCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMubGludF90ZXN0X2ZpbGVzOgorICAgICAgICAgICAgICAg
IHByaW50IHN0cihlcnIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNl
IGVycgorCisgICAgZGVmIHByZXBhcmVfbGlzdHNfYW5kX3ByaW50X291dHB1dChzZWxmLCB3cml0
ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhcHByb3ByaWF0ZSBzdWJzZXRzIG9mIHRlc3QgbGlzdHMg
YW5kIHJldHVybnMgYQorICAgICAgICBSZXN1bHRTdW1tYXJ5IG9iamVjdC4gQWxzbyBwcmludHMg
ZXhwZWN0ZWQgdGVzdCBjb3VudHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTog
QSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisg
ICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBS
ZW1vdmUgc2tpcHBlZCAtIGJvdGggZml4YWJsZSBhbmQgaWdub3JlZCAtIGZpbGVzIGZyb20gdGhl
CisgICAgICAgICMgdG9wLWxldmVsIGxpc3Qgb2YgZmlsZXMgdG8gdGVzdC4KKyAgICAgICAgbnVt
X2FsbF90ZXN0X2ZpbGVzID0gbGVuKHNlbGYuX3Rlc3RfZmlsZXMpCisgICAgICAgIHdyaXRlKCJG
b3VuZDogICVkIHRlc3RzIiAlIChsZW4oc2VsZi5fdGVzdF9maWxlcykpKQorICAgICAgICBza2lw
cGVkID0gc2V0KCkKKyAgICAgICAgaWYgbnVtX2FsbF90ZXN0X2ZpbGVzID4gMSBhbmQgbm90IHNl
bGYuX29wdGlvbnMuZm9yY2U6CisgICAgICAgICAgICBza2lwcGVkID0gc2VsZi5fZXhwZWN0YXRp
b25zLmdldF90ZXN0c193aXRoX3Jlc3VsdF90eXBlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9leHBlY3RhdGlvbnMuU0tJUCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMg
LT0gc2tpcHBlZAorCisgICAgICAgICMgQ3JlYXRlIGEgc29ydGVkIGxpc3Qgb2YgdGVzdCBmaWxl
cyBzbyB0aGUgc3Vic2V0IGNodW5rLAorICAgICAgICAjIGlmIHVzZWQsIGNvbnRhaW5zIGFscGhh
YmV0aWNhbGx5IGNvbnNlY3V0aXZlIHRlc3RzLgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xp
c3QgPSBsaXN0KHNlbGYuX3Rlc3RfZmlsZXMpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmFu
ZG9taXplX29yZGVyOgorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZi5fdGVzdF9maWxl
c19saXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0
LnNvcnQoKQorCisgICAgICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIHRoZXkganVzdCB3YW50
IHRvIHJ1biBhIHN1YnNldCBvZiB0aGUgdGVzdHMsCisgICAgICAgICMganVzdCBncmFiIGEgc3Vi
c2V0IG9mIHRoZSBub24tc2tpcHBlZCB0ZXN0cy4KKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5y
dW5fY2h1bmsgb3Igc2VsZi5fb3B0aW9ucy5ydW5fcGFydDoKKyAgICAgICAgICAgIGNodW5rX3Zh
bHVlID0gc2VsZi5fb3B0aW9ucy5ydW5fY2h1bmsgb3Igc2VsZi5fb3B0aW9ucy5ydW5fcGFydAor
ICAgICAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdAorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIChjaHVua19udW0sIGNodW5rX2xlbikgPSBjaHVua192
YWx1ZS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgY2h1bmtfbnVtID0gaW50KGNodW5rX251
bSkKKyAgICAgICAgICAgICAgICBhc3NlcnQoY2h1bmtfbnVtID49IDApCisgICAgICAgICAgICAg
ICAgdGVzdF9zaXplID0gaW50KGNodW5rX2xlbikKKyAgICAgICAgICAgICAgICBhc3NlcnQodGVz
dF9zaXplID4gMCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnaW5n
LmNyaXRpY2FsKCJpbnZhbGlkIGNodW5rICclcyciICUgY2h1bmtfdmFsdWUpCisgICAgICAgICAg
ICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAgICAgIyBHZXQgdGhlIG51bWJlciBvZiB0ZXN0
cworICAgICAgICAgICAgbnVtX3Rlc3RzID0gbGVuKHRlc3RfZmlsZXMpCisKKyAgICAgICAgICAg
ICMgR2V0IHRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIHNsaWNlLgorICAgICAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5ydW5fY2h1bms6CisgICAgICAgICAgICAgICAgY2h1bmtfbGVuID0gdGVzdF9z
aXplCisgICAgICAgICAgICAgICAgIyBJbiB0aGlzIGNhc2UgY2h1bmtfbnVtIGNhbiBiZSByZWFs
bHkgbGFyZ2UuIFdlIG5lZWQKKyAgICAgICAgICAgICAgICAjIHRvIG1ha2UgdGhlIHNsYXZlIGZp
dCBpbiB0aGUgY3VycmVudCBudW1iZXIgb2YgdGVzdHMuCisgICAgICAgICAgICAgICAgc2xpY2Vf
c3RhcnQgPSAoY2h1bmtfbnVtICogY2h1bmtfbGVuKSAlIG51bV90ZXN0cworICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAjIFZhbGlkYXRlIHRoZSBkYXRhLgorICAgICAgICAgICAg
ICAgIGFzc2VydCh0ZXN0X3NpemUgPD0gbnVtX3Rlc3RzKQorICAgICAgICAgICAgICAgIGFzc2Vy
dChjaHVua19udW0gPD0gdGVzdF9zaXplKQorCisgICAgICAgICAgICAgICAgIyBUbyBjb3VudCB0
aGUgY2h1bmtfbGVuLCBhbmQgbWFrZSBzdXJlIHdlIGRvbid0IHNraXAKKyAgICAgICAgICAgICAg
ICAjIHNvbWUgdGVzdHMsIHdlIHJvdW5kIHRvIHRoZSBuZXh0IHZhbHVlIHRoYXQgZml0cyBleGFj
dGx5CisgICAgICAgICAgICAgICAgIyBhbGwgdGhlIHBhcnRzLgorICAgICAgICAgICAgICAgIHJv
dW5kZWRfdGVzdHMgPSBudW1fdGVzdHMKKyAgICAgICAgICAgICAgICBpZiByb3VuZGVkX3Rlc3Rz
ICUgdGVzdF9zaXplICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRfdGVzdHMgPSAo
bnVtX3Rlc3RzICsgdGVzdF9zaXplIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobnVtX3Rlc3RzICUgdGVzdF9zaXplKSkKKworICAgICAgICAgICAgICAgIGNodW5rX2xl
biA9IHJvdW5kZWRfdGVzdHMgLyB0ZXN0X3NpemUKKyAgICAgICAgICAgICAgICBzbGljZV9zdGFy
dCA9IGNodW5rX2xlbiAqIChjaHVua19udW0gLSAxKQorICAgICAgICAgICAgICAgICMgSXQgZG9l
cyBub3QgbWluZCBpZiB3ZSBnbyBvdmVyIHRlc3Rfc2l6ZS4KKworICAgICAgICAgICAgIyBHZXQg
dGhlIGVuZCBvZmZzZXQgb2YgdGhlIHNsaWNlLgorICAgICAgICAgICAgc2xpY2VfZW5kID0gbWlu
KG51bV90ZXN0cywgc2xpY2Vfc3RhcnQgKyBjaHVua19sZW4pCisKKyAgICAgICAgICAgIGZpbGVz
ID0gdGVzdF9maWxlc1tzbGljZV9zdGFydDpzbGljZV9lbmRdCisKKyAgICAgICAgICAgIHRlc3Rz
X3J1bl9tc2cgPSAnUnVubmluZzogJWQgdGVzdHMgKGNodW5rIHNsaWNlIFslZDolZF0gb2YgJWQp
JyAlICgKKyAgICAgICAgICAgICAgICAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQpLCBzbGljZV9z
dGFydCwgc2xpY2VfZW5kLCBudW1fdGVzdHMpCisgICAgICAgICAgICB3cml0ZSh0ZXN0c19ydW5f
bXNnKQorCisgICAgICAgICAgICAjIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBhbmQgd2UgZG9uJ3Qg
aGF2ZSBlbm91Z2ggdGVzdHMsIHdlIHJ1biBzb21lCisgICAgICAgICAgICAjIGZyb20gdGhlIGJl
Z2lubmluZy4KKyAgICAgICAgICAgIGlmIChzZWxmLl9vcHRpb25zLnJ1bl9jaHVuayBhbmQKKyAg
ICAgICAgICAgICAgICAoc2xpY2VfZW5kIC0gc2xpY2Vfc3RhcnQgPCBjaHVua19sZW4pKToKKyAg
ICAgICAgICAgICAgICBleHRyYSA9IDEgKyBjaHVua19sZW4gLSAoc2xpY2VfZW5kIC0gc2xpY2Vf
c3RhcnQpCisgICAgICAgICAgICAgICAgZXh0cmFfbXNnID0gKCcgICBsYXN0IGNodW5rIGlzIHBh
cnRpYWwsIGFwcGVuZGluZyBbMDolZF0nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHRyYSkKKyAgICAgICAgICAgICAgICB3cml0ZShleHRyYV9tc2cpCisgICAgICAgICAgICAgICAg
dGVzdHNfcnVuX21zZyArPSAiXG4iICsgZXh0cmFfbXNnCisgICAgICAgICAgICAgICAgZmlsZXMu
ZXh0ZW5kKHRlc3RfZmlsZXNbMDpleHRyYV0pCisgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZW5h
bWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIp
CisgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZSA9IG9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAi
dyIpCisgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0c19ydW5fbXNnICsgIlxu
IikKKyAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKKworICAgICAgICAgICAgbGVu
X3NraXBfY2h1bmsgPSBpbnQobGVuKGZpbGVzKSAqIGxlbihza2lwcGVkKSAvCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdChsZW4oc2VsZi5fdGVzdF9maWxlcykpKQorICAg
ICAgICAgICAgc2tpcF9jaHVua19saXN0ID0gbGlzdChza2lwcGVkKVswOmxlbl9za2lwX2NodW5r
XQorICAgICAgICAgICAgc2tpcF9jaHVuayA9IHNldChza2lwX2NodW5rX2xpc3QpCisKKyAgICAg
ICAgICAgICMgVXBkYXRlIGV4cGVjdGF0aW9ucyBzbyB0aGF0IHRoZSBzdGF0cyBhcmUgY2FsY3Vs
YXRlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBhIGxpc3QgdGhh
dCBpbmNsdWRlcyB0aGUgcmlnaHQgIyBvZiBza2lwcGVkIGZpbGVzCisgICAgICAgICAgICAjIHRv
IFBhcnNlRXhwZWN0YXRpb25zIHNvIHRoYXQgUmVzdWx0U3VtbWFyeSgpIHdpbGwgZ2V0IHRoZSBj
b3JyZWN0CisgICAgICAgICAgICAjIHN0YXRzLiBTbywgd2UgYWRkIGluIHRoZSBzdWJzZXQgb2Yg
c2tpcHBlZCBmaWxlcywgYW5kIHRoZW4KKyAgICAgICAgICAgICMgc3VidHJhY3QgdGhlbSBiYWNr
IG91dC4KKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IGZpbGVzICsgc2tpcF9j
aHVua19saXN0CisgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KHNlbGYuX3Rlc3Rf
ZmlsZXNfbGlzdCkKKworICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gc2VsZi5wYXJz
ZV9leHBlY3RhdGlvbnMoCisgICAgICAgICAgICAgICAgcGF0aF91dGlscy5wbGF0Zm9ybV9uYW1l
KCksIHNlbGYuX29wdGlvbnMudGFyZ2V0ID09ICdEZWJ1ZycpCisKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3RfZmlsZXMgPSBzZXQoZmlsZXMpCisgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xp
c3QgPSBmaWxlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2tpcF9jaHVuayA9IHNraXBw
ZWQKKworICAgICAgICByZXN1bHRfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0
YXRpb25zLAorICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyB8IHNraXBfY2h1bmspCisgICAg
ICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVzdWx0X3N1
bW1hcnksCisgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTLCAicGFzc2VzIikKKyAg
ICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCByZXN1bHRf
c3VtbWFyeSwKKyAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLkZBSUwsICJmYWlsdXJlcyIp
CisgICAgICAgIHNlbGYuX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZSh3cml0ZSwgcmVz
dWx0X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5GTEFLWSwgImZsYWt5
IikKKyAgICAgICAgc2VsZi5fcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHdyaXRlLCBy
ZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlNLSVAsICJza2lw
cGVkIikKKworCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZm9yY2U6CisgICAgICAgICAgICB3
cml0ZSgnUnVubmluZyBhbGwgdGVzdHMsIGluY2x1ZGluZyBza2lwcyAoLS1mb3JjZSknKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgcnVu
IHRoZSBza2lwcGVkIHRlc3RzICh0aGV5IHdlcmUKKyAgICAgICAgICAgICMgc3VidHJhY3RlZCBv
dXQgb2Ygc2VsZi5fdGVzdF9maWxlcywgYWJvdmUpLCBidXQgd2Ugc3R1YiBvdXQgdGhlCisgICAg
ICAgICAgICAjIHJlc3VsdHMgaGVyZSBzbyB0aGUgc3RhdGlzdGljcyBjYW4gcmVtYWluIGFjY3Vy
YXRlLgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2tpcF9jaHVuazoKKyAgICAgICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeS5hZGQodGVzdCwgW10sIHRlc3RfZXhwZWN0YXRpb25zLlNLSVAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPVRydWUpCisgICAgICAg
IHdyaXRlKCIiKQorCisgICAgICAgIHJldHVybiByZXN1bHRfc3VtbWFyeQorCisgICAgZGVmIGFk
ZF90ZXN0X3R5cGUoc2VsZiwgdGVzdF90eXBlKToKKyAgICAgICAgIiIiQWRkIGEgVGVzdFR5cGUg
dG8gdGhlIFRlc3RSdW5uZXIuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKHRl
c3RfdHlwZSkKKworICAgIGRlZiBfZ2V0X2Rpcl9mb3JfdGVzdF9maWxlKHNlbGYsIHRlc3RfZmls
ZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGhpZ2hlc3QtbGV2ZWwgZGlyZWN0b3J5IGJ5IHdo
aWNoIHRvIHNoYXJkIHRoZSBnaXZlbgorICAgICAgICB0ZXN0IGZpbGUuIiIiCisgICAgICAgIGlu
ZGV4ID0gdGVzdF9maWxlLnJmaW5kKG9zLnNlcCArICdMYXlvdXRUZXN0cycgKyBvcy5zZXApCisK
KyAgICAgICAgdGVzdF9maWxlID0gdGVzdF9maWxlW2luZGV4ICsgbGVuKCdMYXlvdXRUZXN0cy8n
KTpdCisgICAgICAgIHRlc3RfZmlsZV9wYXJ0cyA9IHRlc3RfZmlsZS5zcGxpdChvcy5zZXAsIDEp
CisgICAgICAgIGRpcmVjdG9yeSA9IHRlc3RfZmlsZV9wYXJ0c1swXQorICAgICAgICB0ZXN0X2Zp
bGUgPSB0ZXN0X2ZpbGVfcGFydHNbMV0KKworICAgICAgICAjIFRoZSBodHRwIHRlc3RzIGFyZSB2
ZXJ5IHN0YWJsZSBvbiBtYWMvbGludXguCisgICAgICAgICMgVE9ETyhvamFuKTogTWFrZSB0aGUg
aHR0cCBzZXJ2ZXIgb24gV2luZG93cyBiZSBhcGFjaGUgc28gd2UgY2FuCisgICAgICAgICMgdHVy
biBzaGFyZCB0aGUgaHR0cCB0ZXN0cyB0aGVyZSBhcyB3ZWxsLiBTd2l0Y2hpbmcgdG8gYXBhY2hl
IGlzCisgICAgICAgICMgd2hhdCBtYWRlIHRoZW0gc3RhYmxlIG9uIGxpbnV4L21hYy4KKyAgICAg
ICAgcmV0dXJuX3ZhbHVlID0gZGlyZWN0b3J5CisgICAgICAgIHdoaWxlICgoZGlyZWN0b3J5ICE9
ICdodHRwJyBvciBzeXMucGxhdGZvcm0gaW4gKCdkYXJ3aW4nLCAnbGludXgyJykpCisgICAgICAg
ICAgICAgICAgYW5kIHRlc3RfZmlsZS5maW5kKG9zLnNlcCkgPj0gMCk6CisgICAgICAgICAgICB0
ZXN0X2ZpbGVfcGFydHMgPSB0ZXN0X2ZpbGUuc3BsaXQob3Muc2VwLCAxKQorICAgICAgICAgICAg
ZGlyZWN0b3J5ID0gdGVzdF9maWxlX3BhcnRzWzBdCisgICAgICAgICAgICByZXR1cm5fdmFsdWUg
PSBvcy5wYXRoLmpvaW4ocmV0dXJuX3ZhbHVlLCBkaXJlY3RvcnkpCisgICAgICAgICAgICB0ZXN0
X2ZpbGUgPSB0ZXN0X2ZpbGVfcGFydHNbMV0KKworICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVl
CisKKyAgICBkZWYgX2dldF90ZXN0X2luZm9fZm9yX2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgVGVzdEluZm8gb2JqZWN0IGZvciB0aGUg
ZmlsZS4gTW9zdGx5IHRoaXMKKyAgICAgICAgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGlt
ZW91dCB2YWx1ZSAoaW4gbXMpIHRvIHVzZSBmb3IgdGhlIGdpdmVuCisgICAgICAgIHRlc3QuIiIi
CisgICAgICAgIGlmIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0
ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKToKKyAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0
X2ZpbGUsIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKKyAgICAgICAgcmV0dXJuIFRl
c3RJbmZvKHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKKworICAgIGRlZiBf
Z2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmLCB0ZXN0X2ZpbGVzKToKKyAgICAgICAgIiIiQ3JlYXRl
IHRoZSB0aHJlYWQgc2FmZSBxdWV1ZSBvZiBsaXN0cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3Qg
VVJJcykKKyAgICAgICAgdHVwbGVzLiBFYWNoIFRlc3RTaGVsbFRocmVhZCBwdWxscyBhIGxpc3Qg
ZnJvbSB0aGlzIHF1ZXVlIGFuZCBydW5zCisgICAgICAgIHRob3NlIHRlc3RzIGluIG9yZGVyIGJl
Zm9yZSBncmFiYmluZyB0aGUgbmV4dCBhdmFpbGFibGUgbGlzdC4KKworICAgICAgICBTaGFyZCB0
aGUgbGlzdHMgYnkgZGlyZWN0b3J5LiBUaGlzIGhlbHBzIGVuc3VyZSB0aGF0IHRlc3RzIHRoYXQg
ZGVwZW5kCisgICAgICAgIG9uIGVhY2ggb3RoZXIgKGFrYSBiYWQgdGVzdHMhKSBjb250aW51ZSB0
byBydW4gdG9nZXRoZXIgYXMgbW9zdAorICAgICAgICBjcm9zcy10ZXN0cyBkZXBlbmRlbmNpZXMg
dGVuZCB0byBvY2N1ciB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorCisgICAgICAgIFJldHVy
bjoKKyAgICAgICAgICBUaGUgUXVldWUgb2YgbGlzdHMgb2YgVGVzdEluZm8gb2JqZWN0cy4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5
X3BhcmFsbGVsIG9yCisgICAgICAgICAgICBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKSk6Cisg
ICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgICAgIGZv
ciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKKyAgICAgICAgICAgICAgICBmaWxlbmFtZV9xdWV1
ZS5wdXQoCisgICAgICAgICAgICAgICAgICAgICgnLicsIFtzZWxmLl9nZXRfdGVzdF9pbmZvX2Zv
cl9maWxlKHRlc3RfZmlsZSldKSkKKyAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZV9xdWV1ZQor
CisgICAgICAgIHRlc3RzX2J5X2RpciA9IHt9CisgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVz
dF9maWxlczoKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IHNlbGYuX2dldF9kaXJfZm9yX3Rlc3Rf
ZmlsZSh0ZXN0X2ZpbGUpCisgICAgICAgICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJl
Y3RvcnksIFtdKQorICAgICAgICAgICAgdGVzdHNfYnlfZGlyW2RpcmVjdG9yeV0uYXBwZW5kKAor
ICAgICAgICAgICAgICAgIHNlbGYuX2dldF90ZXN0X2luZm9fZm9yX2ZpbGUodGVzdF9maWxlKSkK
KworICAgICAgICAjIFNvcnQgYnkgdGhlIG51bWJlciBvZiB0ZXN0cyBpbiB0aGUgZGlyIHNvIHRo
YXQgdGhlIG9uZXMgd2l0aCB0aGUKKyAgICAgICAgIyBtb3N0IHRlc3RzIGdldCBydW4gZmlyc3Qg
aW4gb3JkZXIgdG8gbWF4aW1pemUgcGFyYWxsZWxpemF0aW9uLgorICAgICAgICAjIE51bWJlciBv
ZiB0ZXN0cyBpcyBhIGdvb2QgZW5vdWdoLCBidXQgbm90IHBlcmZlY3QsIGFwcHJveGltYXRpb24K
KyAgICAgICAgIyBvZiBob3cgbG9uZyB0aGF0IHNldCBvZiB0ZXN0cyB3aWxsIHRha2UgdG8gcnVu
LiBXZSBjYW4ndCBqdXN0IHVzZQorICAgICAgICAjIGEgUHJpb3JpdHlRdWV1ZSB1bnRpbCB3ZSBt
b3ZlICMgdG8gUHl0aG9uIDIuNi4KKyAgICAgICAgdGVzdF9saXN0cyA9IFtdCisgICAgICAgIGh0
dHBfdGVzdHMgPSBOb25lCisgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gdGVzdHNfYnlfZGlyOgor
ICAgICAgICAgICAgdGVzdF9saXN0ID0gdGVzdHNfYnlfZGlyW2RpcmVjdG9yeV0KKyAgICAgICAg
ICAgICMgS2VlcCB0aGUgdGVzdHMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorICAgICAgICAgICAg
IyBUT0RPOiBSZW1vdmUgb25jZSB0ZXN0cyBhcmUgZml4ZWQgc28gdGhleSBjYW4gYmUgcnVuIGlu
IGFueQorICAgICAgICAgICAgIyBvcmRlci4KKyAgICAgICAgICAgIHRlc3RfbGlzdC5yZXZlcnNl
KCkKKyAgICAgICAgICAgIHRlc3RfbGlzdF90dXBsZSA9IChkaXJlY3RvcnksIHRlc3RfbGlzdCkK
KyAgICAgICAgICAgIGlmIGRpcmVjdG9yeSA9PSAnTGF5b3V0VGVzdHMnICsgb3Muc2VwICsgJ2h0
dHAnOgorICAgICAgICAgICAgICAgIGh0dHBfdGVzdHMgPSB0ZXN0X2xpc3RfdHVwbGUKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGVzdF9saXN0cy5hcHBlbmQodGVzdF9saXN0
X3R1cGxlKQorICAgICAgICB0ZXN0X2xpc3RzLnNvcnQobGFtYmRhIGEsIGI6IGNtcChsZW4oYlsx
XSksIGxlbihhWzFdKSkpCisKKyAgICAgICAgIyBQdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QuIFRo
ZXJlIGFyZSBvbmx5IGEgY291cGxlIGh1bmRyZWQgb2YgdGhlbSwKKyAgICAgICAgIyBidXQgZWFj
aCBodHRwIHRlc3QgdGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSB0byBydW4sIHNvIHNvcnRpbmcgYnkg
dGhlCisgICAgICAgICMgbnVtYmVyIG9mIHRlc3RzIGRvZXNuJ3QgYWNjdXJhdGVseSBjYXB0dXJl
IGhvdyBsb25nIHRoZXkgdGFrZSB0byBydW4uCisgICAgICAgIGlmIGh0dHBfdGVzdHM6CisgICAg
ICAgICAgICB0ZXN0X2xpc3RzLmluc2VydCgwLCBodHRwX3Rlc3RzKQorCisgICAgICAgIGZpbGVu
YW1lX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Rz
OgorICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUucHV0KGl0ZW0pCisgICAgICAgIHJldHVybiBm
aWxlbmFtZV9xdWV1ZQorCisgICAgZGVmIF9nZXRfdGVzdF9zaGVsbF9hcmdzKHNlbGYsIGluZGV4
KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBh
bmQgZm9yIHRlc3Rfc2hlbGwuIiIiCisgICAgICAgIHNoZWxsX2FyZ3MgPSBbXQorICAgICAgICB0
ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKKyAgICAgICAgaWYgbm90
IHNlbGYuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBwbmdfcGF0aCA9IG9z
LnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUgaW5kZXgpCisgICAg
ICAgICAgICBzaGVsbF9hcmdzLmFwcGVuZCgiLS1waXhlbC10ZXN0cz0iICsgcG5nX3BhdGgpCisg
ICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdfcGF0aAorCisgICAgICAgIHRlc3Rf
YXJncy5uZXdfYmFzZWxpbmUgPSBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZQorCisgICAgICAg
IHRlc3RfYXJncy5zaG93X3NvdXJjZXMgPSBzZWxmLl9vcHRpb25zLnNvdXJjZXMKKworICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnN0YXJ0dXBfZGlhbG9nOgorICAgICAgICAgICAgc2hlbGxfYXJn
cy5hcHBlbmQoJy0tdGVzdHNoZWxsLXN0YXJ0dXAtZGlhbG9nJykKKworICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLmdwX2ZhdWx0X2Vycm9yX2JveDoKKyAgICAgICAgICAgIHNoZWxsX2FyZ3MuYXBw
ZW5kKCctLWdwLWZhdWx0LWVycm9yLWJveCcpCisKKyAgICAgICAgcmV0dXJuICh0ZXN0X2FyZ3Ms
IHNoZWxsX2FyZ3MpCisKKyAgICBkZWYgX2NvbnRhaW5zX3Rlc3RzKHNlbGYsIHN1YmRpcik6Cisg
ICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gc2VsZi5fdGVzdF9maWxlc19saXN0OgorICAgICAgICAg
ICAgaWYgdGVzdF9maWxlLmZpbmQoc3ViZGlyKSA+PSAwOgorICAgICAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9pbnN0YW50aWF0ZV90ZXN0
X3NoZWxsX3RocmVhZHMoc2VsZiwgdGVzdF9zaGVsbF9iaW5hcnksIHRlc3RfZmlsZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgorICAgICAg
ICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFydHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KKwor
ICAgICAgICBSZXR1cm46CisgICAgICAgICAgVGhlIGxpc3Qgb2YgdGhyZWFkcy4KKyAgICAgICAg
IiIiCisgICAgICAgIHRlc3Rfc2hlbGxfY29tbWFuZCA9IFt0ZXN0X3NoZWxsX2JpbmFyeV0KKwor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLndyYXBwZXI6CisgICAgICAgICAgICAjIFRoaXMgc3Bs
aXQoKSBpc24ndCByZWFsbHkgd2hhdCB3ZSB3YW50IC0tIGl0IGluY29ycmVjdGx5IHdpbGwKKyAg
ICAgICAgICAgICMgc3BsaXQgcXVvdGVkIHN0cmluZ3Mgd2l0aGluIHRoZSB3cmFwcGVyIGFyZ3Vt
ZW50IC0tIGJ1dCBpbgorICAgICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1
cCBhbmQgdGhlIC0taGVscCBvdXRwdXQgd2FybnMKKyAgICAgICAgICAgICMgYWJvdXQgaXQgYW55
d2F5LgorICAgICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5kID0gKHNlbGYuX29wdGlvbnMud3Jh
cHBlci5zcGxpdCgpICsKKyAgICAgICAgICAgICAgICB0ZXN0X3NoZWxsX2NvbW1hbmQpCisKKyAg
ICAgICAgZmlsZW5hbWVfcXVldWUgPSBzZWxmLl9nZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmls
ZXMpCisKKyAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0
aGVtLgorICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGludChz
ZWxmLl9vcHRpb25zLm51bV90ZXN0X3NoZWxscykpOgorICAgICAgICAgICAgIyBDcmVhdGUgc2Vw
YXJhdGUgVGVzdFR5cGVzIGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuCisgICAgICAgICAgICB0
ZXN0X3R5cGVzID0gW10KKyAgICAgICAgICAgIGZvciB0IGluIHNlbGYuX3Rlc3RfdHlwZXM6Cisg
ICAgICAgICAgICAgICAgdGVzdF90eXBlcy5hcHBlbmQodChzZWxmLl9vcHRpb25zLnBsYXRmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSkpCisKKyAgICAgICAgICAgIHRlc3RfYXJncywgc2hlbGxfYXJncyA9IHNl
bGYuX2dldF90ZXN0X3NoZWxsX2FyZ3MoaSkKKyAgICAgICAgICAgIHRocmVhZCA9IHRlc3Rfc2hl
bGxfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChmaWxlbmFtZV9xdWV1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVl
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9zaGVsbF9jb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsX2FyZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fb3B0aW9ucykKKyAgICAgICAgICAgIGlmIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgor
ICAgICAgICAgICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2VsZiwgcmVzdWx0X3N1
bW1hcnkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRocmVhZC5zdGFydCgp
CisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWQpCisKKyAgICAgICAgcmV0dXJuIHRo
cmVhZHMKKworICAgIGRlZiBfc3RvcF9sYXlvdXRfdGVzdF9oZWxwZXIoc2VsZiwgcHJvYyk6Cisg
ICAgICAgICIiIlN0b3AgdGhlIGxheW91dCB0ZXN0IGhlbHBlciBhbmQgY2xvc2VzIGl0IGRvd24u
IiIiCisgICAgICAgIGlmIHByb2M6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdG9wcGlu
ZyBsYXlvdXQgdGVzdCBoZWxwZXIiKQorICAgICAgICAgICAgcHJvYy5zdGRpbi53cml0ZSgieFxu
IikKKyAgICAgICAgICAgIHByb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgcHJvYy53YWl0
KCkKKworICAgIGRlZiBfaXNfc2luZ2xlX3RocmVhZGVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1
cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIHJ1biBhbGwgdGhlIHRlc3RzIGluIHRoZSBtYWluIHRocmVh
ZC4iIiIKKyAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25zLm51bV90ZXN0X3NoZWxscykg
PT0gMQorCisgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdF9zaGVsbF9iaW5hcnksIGZpbGVf
bGlzdCwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJSdW5zIHRoZSB0ZXN0cyBpbiB0aGUg
ZmlsZV9saXN0LgorCisgICAgICAgIFJldHVybjogQSB0dXBsZSAoZmFpbHVyZXMsIHRocmVhZF90
aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cykKKyAgICAgICAgICAgIGZhaWx1cmVzIGlzIGEgbWFwIGZyb20gdGVzdCB0byBsaXN0IG9mIGZh
aWx1cmUgdHlwZXMKKyAgICAgICAgICAgIHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0
cyB3aXRoIHRoZSB0b3RhbCBydW50aW1lCisgICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFkIHdp
dGggJ25hbWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKKyAgICAgICAg
ICAgIHRlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1
YmRpcmVjdG9yeQorICAgICAgICAgICAgICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5X25h
bWUsIG51bV90ZXN0c10KKyAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlzIGEg
bGlzdCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVzdAorICAgICAgICAgICAgICBpbiB0aGUgZm9y
bSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KKyAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRo
ZSByZXN1bHRzCisgICAgICAgICIiIgorICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlh
dGVfdGVzdF9zaGVsbF90aHJlYWRzKHRlc3Rfc2hlbGxfYmluYXJ5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eSkKKworICAgICAgICAjIFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29sbGVj
dCB0ZXN0IGZhaWx1cmVzLgorICAgICAgICBmYWlsdXJlcyA9IHt9CisgICAgICAgIHRlc3RfdGlt
aW5ncyA9IHt9CisgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gW10KKyAgICAgICAg
dGhyZWFkX3RpbWluZ3MgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgdGhyZWFk
IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgd2hpbGUgdGhyZWFkLmlzQWxpdmUoKToKKyAg
ICAgICAgICAgICAgICAgICAgIyBMZXQgaXQgdGltZW91dCBvY2Nhc2lvbmFsbHkgc28gaXQgY2Fu
IG5vdGljZSBhCisgICAgICAgICAgICAgICAgICAgICMgS2V5Ym9hcmRJbnRlcnJ1cHQuIEFjdHVh
bGx5LCB0aGUgdGltZW91dCBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgICMgcmVhbGx5IG1h
dHRlcjogYXBwYXJlbnRseSBpdCBzdWZmaWNlcyB0byBub3QgdXNlCisgICAgICAgICAgICAgICAg
ICAgICMgYW4gaW5kZWZpbml0ZSBibG9ja2luZyBqb2luIGZvciBpdCB0bworICAgICAgICAgICAg
ICAgICAgICAjIGJlIGludGVycnVwdGlibGUgYnkgS2V5Ym9hcmRJbnRlcnJ1cHQuCisgICAgICAg
ICAgICAgICAgICAgIHRocmVhZC5qb2luKDAuMSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51
cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgICAgICAgICB0aHJlYWRfdGlt
aW5ncy5hcHBlbmQoeyduYW1lJzogdGhyZWFkLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdudW1fdGVzdHMnOiB0aHJlYWQuZ2V0X251bV90ZXN0cygp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiB0
aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCisgICAgICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVw
ZGF0ZSh0aHJlYWQuZ2V0X2RpcmVjdG9yeV90aW1pbmdfc3RhdHMoKSkKKyAgICAgICAgICAgICAg
ICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQoCisgICAgICAgICAgICAgICAgICAgIHRo
cmVhZC5nZXRfaW5kaXZpZHVhbF90ZXN0X3N0YXRzKCkpCisgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKKyAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKKyAgICAgICAg
ICAgICAgICB0aHJlYWQuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYuX3N0b3BfbGF5b3V0X3Rl
c3RfaGVscGVyKGxheW91dF90ZXN0X2hlbHBlcl9wcm9jKQorICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVy
IGEgVGVzdFNoZWxsVGhyZWFkIGRpZWQgYmVmb3JlIG5vcm1hbCBjb21wbGV0aW9uLgorICAgICAg
ICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZ2V0X2V4Y2VwdGlvbl9pbmZvKCkKKyAgICAg
ICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMg
UmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQgY2xlYXIgdGhh
dAorICAgICAgICAgICAgICAgICMgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLCB0aGUg
dGVzdHMgdGhhdCBkaWQgbm90IHJ1bgorICAgICAgICAgICAgICAgICMgd291bGQgYmUgYXNzdW1l
ZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25faW5mb1sw
XSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZvWzJdCisKKyAgICAgICAgIyBNYWtl
IHN1cmUgd2UgcGljayB1cCBhbnkgcmVtYWluaW5nIHRlc3RzLgorICAgICAgICBzZWxmLnVwZGF0
ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICByZXR1cm4gKHRocmVhZF90aW1pbmdz
LCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorCisgICAgZGVmIHJ1bihz
ZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlJ1biBhbGwgb3VyIHRlc3RzIG9uIGFs
bCBvdXIgdGVzdCBmaWxlcy4KKworICAgICAgICBGb3IgZWFjaCB0ZXN0IGZpbGUsIHdlIHJ1biBl
YWNoIHRlc3QgdHlwZS4gSWYgdGhlcmUgYXJlIGFueSBmYWlsdXJlcywKKyAgICAgICAgd2UgY29s
bGVjdCB0aGVtIGZvciByZXBvcnRpbmcuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZXN1
bHRfc3VtbWFyeTogYSBzdW1tYXJ5IG9iamVjdCB0cmFja2luZyB0aGUgdGVzdCByZXN1bHRzLgor
CisgICAgICAgIFJldHVybjoKKyAgICAgICAgICBXZSByZXR1cm4gbm9uemVybyBpZiB0aGVyZSBh
cmUgcmVncmVzc2lvbnMgY29tcGFyZWQgdG8gdGhlIGxhc3QgcnVuLgorICAgICAgICAiIiIKKyAg
ICAgICAgaWYgbm90IHNlbGYuX3Rlc3RfZmlsZXM6CisgICAgICAgICAgICByZXR1cm4gMAorICAg
ICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnkg
PSBwYXRoX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChzZWxmLl9vcHRpb25zLnRhcmdldCkKKworICAg
ICAgICAjIFN0YXJ0IHVwIGFueSBoZWxwZXIgbmVlZGVkCisgICAgICAgIGxheW91dF90ZXN0X2hl
bHBlcl9wcm9jID0gTm9uZQorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub19waXhlbF90
ZXN0czoKKyAgICAgICAgICAgIGhlbHBlcl9wYXRoID0gcGF0aF91dGlscy5sYXlvdXRfdGVzdF9o
ZWxwZXJfcGF0aCgKKyAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnRhcmdldCkKKyAgICAg
ICAgICAgIGlmIGxlbihoZWxwZXJfcGF0aCk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygiU3RhcnRpbmcgbGF5b3V0IGhlbHBlciAlcyIgJSBoZWxwZXJfcGF0aCkKKyAgICAgICAgICAg
ICAgICBsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAg
ICAgICAgICAgICAgIFtoZWxwZXJfcGF0aF0sIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPU5vbmUpCisgICAg
ICAgICAgICAgICAgaXNfcmVhZHkgPSBsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYy5zdGRvdXQucmVh
ZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19yZWFkeS5zdGFydHN3aXRoKCdyZWFk
eScpOgorICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJsYXlvdXRfdGVzdF9oZWxw
ZXIgZmFpbGVkIHRvIGJlIHJlYWR5IikKKworICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3Rl
bSBkZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCisgICAgICAg
IGlmIG5vdCBzZWxmLl9vcHRpb25zLm5vY2hlY2tfc3lzX2RlcHM6CisgICAgICAgICAgICBwcm9j
ID0gc3VicHJvY2Vzcy5Qb3BlbihbdGVzdF9zaGVsbF9iaW5hcnksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiLS1jaGVjay1sYXlvdXQtdGVzdC1zeXMtZGVwcyJdKQorICAg
ICAgICAgICAgaWYgcHJvYy53YWl0KCkgIT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmlu
Zm8oIkFib3J0aW5nIGJlY2F1c2Ugc3lzdGVtIGRlcGVuZGVuY2llcyBjaGVjayAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuXG4gVG8gb3ZlcnJpZGUsIGludm9rZSB3aXRo
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbm9jaGVjay1zeXMtZGVwcyIpCisg
ICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBzZWxmLl9jb250YWluc190
ZXN0cyhzZWxmLkhUVFBfU1VCRElSKToKKyAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyLnN0
YXJ0KCkKKworICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9T
VUJESVIpOgorICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlci5zdGFydCgpCisgICAg
ICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyLlN0YXJ0KCkKKworICAgICAg
ICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9
ICgKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0cyh0ZXN0X3NoZWxsX2JpbmFyeSwgc2VsZi5f
dGVzdF9maWxlc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkpKQorCisgICAgICAgICMgV2UgZXhjbHVkZSB0aGUgY3Jhc2hlcyBmcm9tIHRoZSBsaXN0IG9m
IHJlc3VsdHMgdG8gcmV0cnksIGJlY2F1c2UKKyAgICAgICAgIyB3ZSB3YW50IHRvIHRyZWF0IGV2
ZW4gYSBwb3RlbnRpYWxseSBmbGFreSBjcmFzaCBhcyBhbiBlcnJvci4KKyAgICAgICAgZmFpbHVy
ZXMgPSBzZWxmLl9nZXRfZmFpbHVyZXMocmVzdWx0X3N1bW1hcnksIGluY2x1ZGVfY3Jhc2hlcz1G
YWxzZSkKKyAgICAgICAgcmV0cmllcyA9IDAKKyAgICAgICAgcmV0cnlfc3VtbWFyeSA9IHJlc3Vs
dF9zdW1tYXJ5CisgICAgICAgIHdoaWxlIChyZXRyaWVzIDwgc2VsZi5OVU1fUkVUUllfT05fVU5F
WFBFQ1RFRF9GQUlMVVJFIGFuZAorICAgICAgICAgICAgICAgbGVuKGZhaWx1cmVzKSk6CisgICAg
ICAgICAgICBsb2dnaW5nLmRlYnVnKCJSZXRyeWluZyAlZCB1bmV4cGVjdGVkIGZhaWx1cmUocyki
ICUgbGVuKGZhaWx1cmVzKSkKKyAgICAgICAgICAgIHJldHJpZXMgKz0gMQorICAgICAgICAgICAg
cmV0cnlfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0YXRpb25zLCBmYWlsdXJl
cy5rZXlzKCkpCisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHModGVzdF9zaGVsbF9iaW5hcnks
IGZhaWx1cmVzLmtleXMoKSwgcmV0cnlfc3VtbWFyeSkKKyAgICAgICAgICAgIGZhaWx1cmVzID0g
c2VsZi5fZ2V0X2ZhaWx1cmVzKHJldHJ5X3N1bW1hcnksIGluY2x1ZGVfY3Jhc2hlcz1UcnVlKQor
CisgICAgICAgIHNlbGYuX3N0b3BfbGF5b3V0X3Rlc3RfaGVscGVyKGxheW91dF90ZXN0X2hlbHBl
cl9wcm9jKQorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCisKKyAgICAgICAgd3JpdGUg
PSBjcmVhdGVfbG9nZ2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ3RpbWluZycpCisgICAgICAg
IHNlbGYuX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKHdyaXRlLCBlbmRfdGltZSAtIHN0YXJ0X3Rp
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncywg
dGVzdF90aW1pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeSkKKworICAgICAgICBzZWxmLl9tZXRlci51cGRhdGUoIiIpCisKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgIyBXZSB3cml0ZSB0aGlz
IGJsb2NrIHRvIHN0ZG91dCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQorICAgICAgICAgICAg
IyBidWlsZGJvdCBsb2cgcGFyc2VyLCB3aGljaCBvbmx5IGxvb2tzIGF0IHN0ZG91dCwgbm90IHN0
ZGVyciA6KAorICAgICAgICAgICAgd3JpdGUgPSBsYW1iZGEgczogc3lzLnN0ZG91dC53cml0ZSgi
JXNcbiIgJSBzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3JpdGUgPSBjcmVhdGVfbG9n
Z2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ2FjdHVhbCcpCisKKyAgICAgICAgc2VsZi5fcHJp
bnRfcmVzdWx0X3N1bW1hcnkod3JpdGUsIHJlc3VsdF9zdW1tYXJ5KQorCisgICAgICAgIHN5cy5z
dGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgICAgICBpZiAo
TE9HX0RFVEFJTEVEX1BST0dSRVNTIGluIHNlbGYuX29wdGlvbnMubG9nIG9yCisgICAgICAgICAg
ICAoTE9HX1VORVhQRUNURUQgaW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCisgICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkudG90YWwgIT0gcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQpKToKKyAgICAg
ICAgICAgIHByaW50CisKKyAgICAgICAgIyBUaGlzIHN1bW1hcnkgZGF0YSBnZXRzIHdyaXR0ZW4g
dG8gc3Rkb3V0IHJlZ2FyZGxlc3Mgb2YgbG9nIGxldmVsCisgICAgICAgIHNlbGYuX3ByaW50X29u
ZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkudG90YWwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWQpCisKKyAgICAgICAgdW5leHBl
Y3RlZF9yZXN1bHRzID0gc2VsZi5fc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhyZXN1bHRf
c3VtbWFyeSwKKyAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkpCisgICAgICAgIHNlbGYuX3ByaW50
X3VuZXhwZWN0ZWRfcmVzdWx0cyh1bmV4cGVjdGVkX3Jlc3VsdHMpCisKKyAgICAgICAgIyBXcml0
ZSB0aGUgc2FtZSBkYXRhIHRvIGxvZyBmaWxlcy4KKyAgICAgICAgc2VsZi5fd3JpdGVfanNvbl9m
aWxlcyh1bmV4cGVjdGVkX3Jlc3VsdHMsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKworICAgICAgICAjIFdyaXRl
IHRoZSBzdW1tYXJ5IHRvIGRpc2sgKHJlc3VsdHMuaHRtbCkgYW5kIG1heWJlIG9wZW4gdGhlCisg
ICAgICAgICMgdGVzdF9zaGVsbCB0byB0aGlzIGZpbGUuCisgICAgICAgIHdyb3RlX3Jlc3VsdHMg
PSBzZWxmLl93cml0ZV9yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAg
aWYgbm90IHNlbGYuX29wdGlvbnMubm9zaG93X3Jlc3VsdHMgYW5kIHdyb3RlX3Jlc3VsdHM6Cisg
ICAgICAgICAgICBzZWxmLl9zaG93X3Jlc3VsdHNfaHRtbF9maWxlKCkKKworICAgICAgICAjIEln
bm9yZSBmbGFreSBmYWlsdXJlcyBhbmQgdW5leHBlY3RlZCBwYXNzZXMgc28gd2UgZG9uJ3QgdHVy
biB0aGUKKyAgICAgICAgIyBib3QgcmVkIGZvciB0aG9zZS4KKyAgICAgICAgcmV0dXJuIHVuZXhw
ZWN0ZWRfcmVzdWx0c1snbnVtX3JlZ3Jlc3Npb25zJ10KKworICAgIGRlZiB1cGRhdGVfc3VtbWFy
eShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgc3VtbWFyeSB3
aGlsZSBydW5uaW5nIHRlc3RzLiIiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgICh0ZXN0LCBmYWlsX2xpc3QpID0gc2VsZi5fcmVzdWx0X3F1
ZXVlLmdldF9ub3dhaXQoKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfZmFpbHVyZXMu
ZGV0ZXJtaW5lX3Jlc3VsdF90eXBlKGZhaWxfbGlzdCkKKyAgICAgICAgICAgICAgICBleHBlY3Rl
ZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVjdGVkX3Jlc3VsdCh0ZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQo
dGVzdCwgZmFpbF9saXN0LCByZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIChM
T0dfREVUQUlMRURfUFJPR1JFU1MgaW4gc2VsZi5fb3B0aW9ucy5sb2cgYW5kCisgICAgICAgICAg
ICAgICAgICAgIChzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgor
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCkpKToKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fZGlzcGxheV9kZXRhaWxlZF9wcm9ncmVzcyhyZXN1bHRfc3Vt
bWFyeSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qg
ZXhwZWN0ZWQgYW5kIExPR19VTkVYUEVDVEVEIGluIHNlbGYuX29wdGlvbnMubG9nOgorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF90ZXN0X3Jlc3VsdCh0ZXN0
LCByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Rpc3BsYXlfb25lX2xpbmVfcHJv
Z3Jlc3MocmVzdWx0X3N1bW1hcnkpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX2Rpc3BsYXlfb25lX2xpbmVfcHJvZ3Jl
c3Moc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJEaXNwbGF5cyB0aGUgcHJvZ3Jl
c3MgdGhyb3VnaCB0aGUgdGVzdCBydW4uIiIiCisgICAgICAgIHNlbGYuX21ldGVyLnVwZGF0ZSgi
VGVzdGluZzogJWQgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3QsICVkIGxlZnQiICUKKyAgICAg
ICAgICAgIChyZXN1bHRfc3VtbWFyeS5leHBlY3RlZCwgcmVzdWx0X3N1bW1hcnkudW5leHBlY3Rl
ZCwKKyAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5yZW1haW5pbmcpKQorCisgICAgZGVmIF9k
aXNwbGF5X2RldGFpbGVkX3Byb2dyZXNzKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAg
IiIiRGlzcGxheSBkZXRhaWxlZCBwcm9ncmVzcyBvdXRwdXQgd2hlcmUgd2UgcHJpbnQgdGhlIGRp
cmVjdG9yeSBuYW1lCisgICAgICAgIGFuZCBvbmUgZG90IGZvciBlYWNoIGNvbXBsZXRlZCB0ZXN0
LiBUaGlzIGlzIHRyaWdnZXJlZCBieQorICAgICAgICAiLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3Mi
LiIiIgorICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90
ZXN0X2ZpbGVzX2xpc3QpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbmV4dF90ZXN0
ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCisgICAg
ICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgcGF0aF91dGlscy5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisgICAgICAgIGlmIHNlbGYuX2N1cnJl
bnRfcHJvZ3Jlc3Nfc3RyID09ICIiOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVz
c19zdHIgPSAiJXM6ICIgJSAobmV4dF9kaXIpCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2Rp
ciA9IG5leHRfZGlyCisKKyAgICAgICAgd2hpbGUgbmV4dF90ZXN0IGluIHJlc3VsdF9zdW1tYXJ5
LnJlc3VsdHM6CisgICAgICAgICAgICBpZiBuZXh0X2RpciAhPSBzZWxmLl9jdXJyZW50X2RpcjoK
KyAgICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSAoc2VsZi5fY3VycmVu
dF9wcm9ncmVzc19zdHIpKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nf
c3RyID0gIiVzOiAuIiAlIChuZXh0X2RpcikKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50
X2RpciA9IG5leHRfZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYu
X2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyICs9ICIuIgorCisgICAgICAgICAgICBpZiAobmV4dF90ZXN0
IGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0cyBhbmQKKyAgICAgICAgICAgICAg
ICBMT0dfVU5FWFBFQ1RFRCBpbiBzZWxmLl9vcHRpb25zLmxvZyk6CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzW25leHRfdGVzdF0KKyAg
ICAgICAgICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiJXNcbiIgJSBzZWxmLl9jdXJyZW50X3By
b2dyZXNzX3N0cikKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludF91bmV4cGVjdGVkX3Rlc3Rf
cmVzdWx0KG5leHRfdGVzdCwgcmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRf
cHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgc2VsZi5fY3VycmVudF9kaXIKKworICAgICAgICAgICAg
c2VsZi5fY3VycmVudF90ZXN0X251bWJlciArPSAxCisgICAgICAgICAgICBpZiBzZWxmLl9jdXJy
ZW50X3Rlc3RfbnVtYmVyID09IGxlbihzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNf
bGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQorICAgICAgICAgICAgbmV4dF9kaXIgPSBv
cy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisKKyAgICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWlu
aW5nOgorICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnku
cmVtYWluaW5nKQorICAgICAgICAgICAgc2VsZi5fbWV0ZXIudXBkYXRlKCIlcyVzIiAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyLCBy
ZW1haW5fc3RyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRl
KCIlc1xuIiAlIChzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0cikpCisKKyAgICBkZWYgX2dldF9m
YWlsdXJlcyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzKToKKyAgICAgICAg
IiIiRmlsdGVycyBhIGRpY3Qgb2YgcmVzdWx0cyBhbmQgcmV0dXJucyBvbmx5IHRoZSBmYWlsdXJl
cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiB0aGUgcmVzdWx0
cyBvZiB0aGUgdGVzdCBydW4KKyAgICAgICAgICBpbmNsdWRlX2NyYXNoZXM6IHdoZXRoZXIgY3Jh
c2hlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4KKyAgICAgICAgICAgIFdlIHVzZSBGYWxz
ZSB3aGVuIGZpbmRpbmcgdGhlIGxpc3Qgb2YgZmFpbHVyZXMgdG8gcmV0cnkKKyAgICAgICAgICAg
IHRvIHNlZSBpZiB0aGUgcmVzdWx0cyB3ZXJlIGZsYWt5LiBBbHRob3VnaCB0aGUgY3Jhc2hlcyBt
YXkgYWxzbyBiZQorICAgICAgICAgICAgZmxha3ksIHdlIHRyZWF0IHRoZW0gYXMgaWYgdGhleSBh
cmVuJ3Qgc28gdGhhdCB0aGV5J3JlIG5vdCBpZ25vcmVkLgorICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgIGEgZGljdCBvZiBmaWxlcyAtPiByZXN1bHRzCisgICAgICAgICIiIgorICAgICAgICBm
YWlsZWRfcmVzdWx0cyA9IHt9CisgICAgICAgIGZvciB0ZXN0LCByZXN1bHQgaW4gcmVzdWx0X3N1
bW1hcnkudW5leHBlY3RlZF9yZXN1bHRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTIG9yCisgICAgICAgICAgICAgICAgcmVzdWx0
ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIIGFuZCBub3QgaW5jbHVkZV9jcmFzaGVzKToKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmFpbGVkX3Jlc3VsdHNbdGVzdF0g
PSByZXN1bHQKKworICAgICAgICByZXR1cm4gZmFpbGVkX3Jlc3VsdHMKKworICAgIGRlZiBfc3Vt
bWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3Vt
bWFyeSk6CisgICAgICAgICIiIlN1bW1hcml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEg
ZGljdC4KKworICAgICAgICBUT0RPKGRwcmFua2UpOiBzcGxpdCB0aGlzIGRhdGEgc3RydWN0dXJl
IGludG8gYSBzZXBhcmF0ZSBjbGFzcz8KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGluaXRpYWwgdGVzdCBydW5zCisgICAgICAg
ICAgcmV0cnlfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBmaW5hbCB0ZXN0IHJ1biBvZiBy
ZXRyaWVkIHRlc3RzCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgQSBkaWN0aW9uYXJ5IGNv
bnRhaW5pbmcgYSBzdW1tYXJ5IG9mIHRoZSB1bmV4cGVjdGVkIHJlc3VsdHMgZnJvbSB0aGUKKyAg
ICAgICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6CisgICAgICAgICAgICAndmVy
c2lvbic6IGEgdmVyc2lvbiBpbmRpY2F0b3IgKDEgaW4gdGhpcyB2ZXJzaW9uKQorICAgICAgICAg
ICAgJ2ZpeGFibGUnOiAjIG9mIGZpeGFibGUgdGVzdHMgKE5PVyAtIFBBU1MpCisgICAgICAgICAg
ICAnc2tpcHBlZCc6ICMgb2Ygc2tpcHBlZCB0ZXN0cyAoTk9XICYgU0tJUFBFRCkKKyAgICAgICAg
ICAgICdudW1fcmVncmVzc2lvbnMnOiAjIG9mIG5vbi1mbGFreSBmYWlsdXJlcworICAgICAgICAg
ICAgJ251bV9mbGFreSc6ICMgb2YgZmxha3kgZmFpbHVyZXMKKyAgICAgICAgICAgICdudW1fcGFz
c2VzJzogIyBvZiB1bmV4cGVjdGVkIHBhc3NlcworICAgICAgICAgICAgJ3Rlc3RzJzogYSBkaWN0
IG9mIHRlc3RzIC0+IHsnZXhwZWN0ZWQnOiAnLi4uJywgJ2FjdHVhbCc6ICcuLi4nfQorICAgICAg
ICAiIiIKKyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIHJlc3VsdHNbJ3ZlcnNpb24nXSA9
IDEKKworICAgICAgICB0YmUgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbgor
ICAgICAgICB0YnQgPSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQorICAgICAgICBy
ZXN1bHRzWydmaXhhYmxlJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25zLk5PV10gLQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1Nd
KQorICAgICAgICByZXN1bHRzWydza2lwcGVkJ10gPSBsZW4odGJ0W3Rlc3RfZXhwZWN0YXRpb25z
Lk5PV10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJlW3Rlc3RfZXhwZWN0
YXRpb25zLlNLSVBdKQorCisgICAgICAgIG51bV9wYXNzZXMgPSAwCisgICAgICAgIG51bV9mbGFr
eSA9IDAKKyAgICAgICAgbnVtX3JlZ3Jlc3Npb25zID0gMAorICAgICAgICBrZXl3b3JkcyA9IHt9
CisgICAgICAgIGZvciBrLCB2IGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OUy5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGtleXdvcmRzW3ZdID0gay51cHBlcigpCisKKyAgICAg
ICAgdGVzdHMgPSB7fQorICAgICAgICBmb3IgZmlsZW5hbWUsIHJlc3VsdCBpbiByZXN1bHRfc3Vt
bWFyeS51bmV4cGVjdGVkX3Jlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAjIE5vdGUg
dGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKKyAg
ICAgICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQg
KGlmIHdlIHJldHJpZWQgaXQpLAorICAgICAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRo
ZSByZXN1bHQgbm90IGZsYWt5LgorICAgICAgICAgICAgdGVzdCA9IHBhdGhfdXRpbHMucmVsYXRp
dmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5f
ZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKQorICAgICAgICAg
ICAgYWN0dWFsID0gW2tleXdvcmRzW3Jlc3VsdF1dCisKKyAgICAgICAgICAgIGlmIHJlc3VsdCA9
PSB0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTOgorICAgICAgICAgICAgICAgIG51bV9wYXNzZXMgKz0g
MQorICAgICAgICAgICAgZWxpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0g6Cisg
ICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIHJldHJ5X3N1bW1hcnkudW5leHBlY3Rl
ZF9yZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICBhY3R1YWwuZXh0ZW5kKAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5n
KAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpLnNwbGl0KCIgIikpCisgICAgICAg
ICAgICAgICAgICAgIG51bV9mbGFreSArPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgcmV0cnlfcmVzdWx0ID0gcmV0cnlfc3VtbWFyeS51bmV4cGVjdGVkX3Jl
c3VsdHNbZmlsZW5hbWVdCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCAhPSByZXRyeV9y
ZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwuYXBwZW5kKGtleXdvcmRzW3Jl
dHJ5X3Jlc3VsdF0pCisgICAgICAgICAgICAgICAgICAgICAgICBudW1fZmxha3kgKz0gMQorICAg
ICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3JlZ3Jl
c3Npb25zICs9IDEKKworICAgICAgICAgICAgdGVzdHNbdGVzdF0gPSB7fQorICAgICAgICAgICAg
dGVzdHNbdGVzdF1bJ2V4cGVjdGVkJ10gPSBleHBlY3RlZAorICAgICAgICAgICAgdGVzdHNbdGVz
dF1bJ2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFsKQorCisgICAgICAgIHJlc3VsdHNbJ3Rlc3Rz
J10gPSB0ZXN0cworICAgICAgICByZXN1bHRzWydudW1fcGFzc2VzJ10gPSBudW1fcGFzc2VzCisg
ICAgICAgIHJlc3VsdHNbJ251bV9mbGFreSddID0gbnVtX2ZsYWt5CisgICAgICAgIHJlc3VsdHNb
J251bV9yZWdyZXNzaW9ucyddID0gbnVtX3JlZ3Jlc3Npb25zCisKKyAgICAgICAgcmV0dXJuIHJl
c3VsdHMKKworICAgIGRlZiBfd3JpdGVfanNvbl9maWxlcyhzZWxmLCB1bmV4cGVjdGVkX3Jlc3Vs
dHMsIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MpOgorICAgICAgICAiIiJXcml0ZXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3Qg
cnVuIGFzIEpTT04gZmlsZXMgaW50byB0aGUgcmVzdWx0cworICAgICAgICBkaXIuCisKKyAgICAg
ICAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBmaWxlcyB3cml0dGVuIGludG8gdGhlIHJlc3Vs
dHMgZGlyOgorICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uOiBBIHNob3J0IGxpc3Qg
b2YgYW55IHVuZXhwZWN0ZWQgcmVzdWx0cy4KKyAgICAgICAgICAgIFRoaXMgaXMgdXNlZCBieSB0
aGUgYnVpbGRib3RzIHRvIGRpc3BsYXkgcmVzdWx0cy4KKyAgICAgICAgICBleHBlY3RhdGlvbnMu
anNvbjogVGhpcyBpcyB1c2VkIGJ5IHRoZSBmbGFraW5lc3MgZGFzaGJvYXJkLgorICAgICAgICAg
IHJlc3VsdHMuanNvbjogQSBmdWxsIGxpc3Qgb2YgdGhlIHJlc3VsdHMgLSB1c2VkIGJ5IHRoZSBm
bGFraW5lc3MKKyAgICAgICAgICAgIGRhc2hib2FyZCBhbmQgdGhlIGFnZ3JlZ2F0ZSByZXN1bHRz
IGRhc2hib2FyZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0
czogZGljdCBvZiB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTog
ZnVsbCBzdW1tYXJ5IG9iamVjdAorICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBs
aXN0IG9mIHRlc3QgdGltZXMgKHVzZWQgYnkgdGhlIGZsYWtpbmVzcworICAgICAgICAgICAgZGFz
aGJvYXJkKS4KKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dpbmcuZGVidWcoIldyaXRpbmcgSlNP
TiBmaWxlcyBpbiAlcy4iICUKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5KQorICAgICAgICB1bmV4cGVjdGVkX2ZpbGUgPSBvcGVuKG9zLnBhdGgu
am9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgInVuZXhw
ZWN0ZWRfcmVzdWx0cy5qc29uIiksICJ3IikKKyAgICAgICAgdW5leHBlY3RlZF9maWxlLndyaXRl
KHNpbXBsZWpzb24uZHVtcHModW5leHBlY3RlZF9yZXN1bHRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc29ydF9rZXlzPVRydWUsIGluZGVudD0yKSkKKyAgICAgICAgdW5leHBlY3Rl
ZF9maWxlLmNsb3NlKCkKKworICAgICAgICAjIFdyaXRlIGEganNvbiBmaWxlIG9mIHRoZSB0ZXN0
X2V4cGVjdGF0aW9ucy50eHQgZmlsZSBmb3IgdGhlIGxheW91dAorICAgICAgICAjIHRlc3RzIGRh
c2hib2FyZC4KKyAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgImV4cGVjdGF0aW9u
cy5qc29uIiksICJ3IikKKyAgICAgICAgZXhwZWN0YXRpb25zX2pzb24gPSBcCisgICAgICAgICAg
ICBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19qc29uX2Zvcl9hbGxfcGxhdGZv
cm1zKCkKKyAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUud3JpdGUoIkFERF9FWFBFQ1RBVElPTlMo
IiArIGV4cGVjdGF0aW9uc19qc29uICsgIik7IikKKyAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUu
Y2xvc2UoKQorCisgICAgICAgIGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05MYXlv
dXRSZXN1bHRzR2VuZXJhdG9yKAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWlsZGVyX25h
bWUsIHNlbGYuX29wdGlvbnMuYnVpbGRfbmFtZSwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
YnVpbGRfbnVtYmVyLCBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAg
ICAgQlVJTERFUl9CQVNFX1VSTCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICAg
ICBzZWxmLl9leHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl90ZXN0X2ZpbGVzX2xp
c3QpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiRmluaXNoZWQgd3JpdGluZyBKU09OIGZpbGVz
LiIpCisKKyAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCB3cml0
ZSwgcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlX3N0cik6CisgICAgICAgICIiIlByaW50IHRoZSBu
dW1iZXIgb2YgdGhlIHRlc3RzIGluIGEgZ2l2ZW4gcmVzdWx0IGNsYXNzLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgd3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwg
YSBMb2dnaW5nV3JpdGVyKSBvcgorICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkgLSB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1
bHRzIHRvIHJlcG9ydCBvbgorICAgICAgICAgIHJlc3VsdF90eXBlIC0gdGhlIHBhcnRpY3VsYXIg
cmVzdWx0IHR5cGUgdG8gcmVwb3J0IGluIHRoZSBzdW1tYXJ5LgorICAgICAgICAgIHJlc3VsdF90
eXBlX3N0ciAtIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSByZXN1bHRfdHlwZS4KKyAgICAg
ICAgIiIiCisgICAgICAgIHRlc3RzID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF90ZXN0c193aXRo
X3Jlc3VsdF90eXBlKHJlc3VsdF90eXBlKQorICAgICAgICBub3cgPSByZXN1bHRfc3VtbWFyeS50
ZXN0c19ieV90aW1lbGluZVt0ZXN0X2V4cGVjdGF0aW9ucy5OT1ddCisgICAgICAgIHdvbnRmaXgg
PSByZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0ZXN0X2V4cGVjdGF0aW9ucy5XT05U
RklYXQorICAgICAgICBkZWZlciA9IHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3Rl
c3RfZXhwZWN0YXRpb25zLkRFRkVSXQorCisgICAgICAgICMgV2UgdXNlIGEgZmFuY3kgZm9ybWF0
IHN0cmluZyBpbiBvcmRlciB0byBwcmludCB0aGUgZGF0YSBvdXQgaW4gYQorICAgICAgICAjIG5p
Y2VseS1hbGlnbmVkIHRhYmxlLgorICAgICAgICBmbXRzdHIgPSAoIkV4cGVjdDogJSU1ZCAlJS04
cyAoJSUlZGQgbm93LCAlJSVkZCBkZWZlciwgJSUlZGQgd29udGZpeCkiCisgICAgICAgICAgICAg
ICAgICAlIChzZWxmLl9udW1fZGlnaXRzKG5vdyksIHNlbGYuX251bV9kaWdpdHMoZGVmZXIpLAor
ICAgICAgICAgICAgICAgICAgc2VsZi5fbnVtX2RpZ2l0cyh3b250Zml4KSkpCisgICAgICAgIHdy
aXRlKGZtdHN0ciAlIChsZW4odGVzdHMpLCByZXN1bHRfdHlwZV9zdHIsIGxlbih0ZXN0cyAmIG5v
dyksCisgICAgICAgICAgICAgIGxlbih0ZXN0cyAmIGRlZmVyKSwgbGVuKHRlc3RzICYgd29udGZp
eCkpKQorCisgICAgZGVmIF9udW1fZGlnaXRzKHNlbGYsIG51bSk6CisgICAgICAgICIiIlJldHVy
bnMgdGhlIG51bWJlciBvZiBkaWdpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgbGVuZ3RoIG9m
IGEKKyAgICAgICAgc2VxdWVuY2UuIiIiCisgICAgICAgIG5kaWdpdHMgPSAxCisgICAgICAgIGlm
IGxlbihudW0pOgorICAgICAgICAgICAgbmRpZ2l0cyA9IGludChtYXRoLmxvZzEwKGxlbihudW0p
KSkgKyAxCisgICAgICAgIHJldHVybiBuZGlnaXRzCisKKyAgICBkZWYgX3ByaW50X3RpbWluZ19z
dGF0aXN0aWNzKHNlbGYsIHdyaXRlLCB0b3RhbF90aW1lLCB0aHJlYWRfdGltaW5ncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzLCBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRf
c3VtbWFyeSk6CisgICAgICAgICIiIlJlY29yZCB0aW1pbmctc3BlY2lmaWMgaW5mb3JtYXRpb24g
Zm9yIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNh
bGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAg
ICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgICB0b3RhbF90aW1lOiB0b3RhbCBl
bGFwc2VkIHRpbWUgKGluIHNlY29uZHMpIGZvciB0aGUgdGVzdCBydW4KKyAgICAgICAgICB0aHJl
YWRfdGltaW5nczogd2FsbCBjbG9jayB0aW1lIGVhY2ggdGhyZWFkIHJhbiBmb3IKKyAgICAgICAg
ICBkaXJlY3RvcnlfdGVzdF90aW1pbmdzOiB0aW1pbmcgYnkgZGlyZWN0b3J5CisgICAgICAgICAg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IHRpbWluZyBieSBmaWxlCisgICAgICAgICAgcmVzdWx0
X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0aGUgdGVzdCBydW4KKyAgICAgICAgIiIiCisg
ICAgICAgIHdyaXRlKCJUZXN0IHRpbWluZzoiKQorICAgICAgICB3cml0ZSgiICAlNi4yZiB0b3Rh
bCB0ZXN0aW5nIHRpbWUiICUgdG90YWxfdGltZSkKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAg
IHdyaXRlKCJUaHJlYWQgdGltaW5nOiIpCisgICAgICAgIGN1bWxfdGltZSA9IDAKKyAgICAgICAg
Zm9yIHQgaW4gdGhyZWFkX3RpbWluZ3M6CisgICAgICAgICAgICB3cml0ZSgiICAgICUxMHM6ICU1
ZCB0ZXN0cywgJTYuMmYgc2VjcyIgJQorICAgICAgICAgICAgICAgICAgKHRbJ25hbWUnXSwgdFsn
bnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUnXSkpCisgICAgICAgICAgICBjdW1sX3RpbWUgKz0g
dFsndG90YWxfdGltZSddCisgICAgICAgIHdyaXRlKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4y
ZiBvcHRpbWFsIiAlCisgICAgICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIGludChz
ZWxmLl9vcHRpb25zLm51bV90ZXN0X3NoZWxscykpKQorICAgICAgICB3cml0ZSgiIikKKworICAg
ICAgICBzZWxmLl9wcmludF9hZ2dyZWdhdGVfdGVzdF9zdGF0aXN0aWNzKHdyaXRlLCBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2VsZi5fcHJpbnRfaW5kaXZpZHVhbF90ZXN0X3Rp
bWVzKHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLl9wcmlu
dF9kaXJlY3RvcnlfdGltaW5ncyh3cml0ZSwgZGlyZWN0b3J5X3Rlc3RfdGltaW5ncykKKworICAg
IGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhzZWxmLCB3cml0ZSwgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MpOgorICAgICAgICAiIiJQcmludHMgYWdncmVnYXRlIHN0YXRpc3Rp
Y3MgKGUuZy4gbWVkaWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRlc3RzLgorICAgICAgICBBcmdz
OgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEg
TG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczogTGlzdCBvZiB0ZXN0X3NoZWxsX3RocmVhZC5U
ZXN0U3RhdHMgZm9yIGFsbAorICAgICAgICAgICAgICB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAg
ICAgIHRlc3RfdHlwZXMgPSBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nc1swXS50aW1lX2Zvcl9kaWZm
cy5rZXlzKCkKKyAgICAgICAgdGltZXNfZm9yX3Rlc3Rfc2hlbGwgPSBbXQorICAgICAgICB0aW1l
c19mb3JfZGlmZl9wcm9jZXNzaW5nID0gW10KKyAgICAgICAgdGltZXNfcGVyX3Rlc3RfdHlwZSA9
IHt9CisgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoKKyAgICAgICAgICAgIHRp
bWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXSA9IFtdCisKKyAgICAgICAgZm9yIHRlc3Rfc3Rh
dHMgaW4gaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6CisgICAgICAgICAgICB0aW1lc19mb3JfdGVz
dF9zaGVsbC5hcHBlbmQodGVzdF9zdGF0cy50ZXN0X3J1bl90aW1lKQorICAgICAgICAgICAgdGlt
ZXNfZm9yX2RpZmZfcHJvY2Vzc2luZy5hcHBlbmQoCisgICAgICAgICAgICAgICAgdGVzdF9zdGF0
cy50b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMpCisgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcyA9
IHRlc3Rfc3RhdHMudGltZV9mb3JfZGlmZnMKKyAgICAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4g
dGVzdF90eXBlczoKKyAgICAgICAgICAgICAgICB0aW1lc19wZXJfdGVzdF90eXBlW3Rlc3RfdHlw
ZV0uYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGVd
KQorCisgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyh3cml0
ZSwKKyAgICAgICAgICAgICJQRVIgVEVTVCBUSU1FIElOIFRFU1RTSEVMTCAoc2Vjb25kcyk6Iiwg
dGltZXNfZm9yX3Rlc3Rfc2hlbGwpCisgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3NfZm9y
X3Rlc3RfdGltaW5ncyh3cml0ZSwKKyAgICAgICAgICAgICJQRVIgVEVTVCBESUZGIFBST0NFU1NJ
TkcgVElNRVMgKHNlY29uZHMpOiIsCisgICAgICAgICAgICB0aW1lc19mb3JfZGlmZl9wcm9jZXNz
aW5nKQorICAgICAgICBmb3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6CisgICAgICAgICAgICBz
ZWxmLl9wcmludF9zdGF0aXN0aWNzX2Zvcl90ZXN0X3RpbWluZ3Mod3JpdGUsCisgICAgICAgICAg
ICAgICAgIlBFUiBURVNUIFRJTUVTIEJZIFRFU1QgVFlQRTogJXMiICUgdGVzdF90eXBlLAorICAg
ICAgICAgICAgICAgIHRpbWVzX3Blcl90ZXN0X3R5cGVbdGVzdF90eXBlXSkKKworICAgIGRlZiBf
cHJpbnRfaW5kaXZpZHVhbF90ZXN0X3RpbWVzKHNlbGYsIHdyaXRlLCBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eSk6CisgICAgICAgICIiIlByaW50cyB0aGUgcnVuIHRpbWVzIGZvciBzbG93LCB0aW1lb3V0IGFu
ZCBjcmFzaCB0ZXN0cy4KKyAgICAgICAgQXJnczoKKyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFj
ayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExvZ2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAg
ICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6
IExpc3Qgb2YgdGVzdF9zaGVsbF90aHJlYWQuVGVzdFN0YXRzIGZvciBhbGwKKyAgICAgICAgICAg
ICAgdGVzdHMuCisgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0
ZXN0IHJ1bgorICAgICAgICAiIiIKKyAgICAgICAgIyBSZXZlcnNlLXNvcnQgYnkgdGhlIHRpbWUg
c3BlbnQgaW4gdGVzdF9zaGVsbC4KKyAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Muc29y
dChsYW1iZGEgYSwgYjoKKyAgICAgICAgICAgIGNtcChiLnRlc3RfcnVuX3RpbWUsIGEudGVzdF9y
dW5fdGltZSkpCisKKyAgICAgICAgbnVtX3ByaW50ZWQgPSAwCisgICAgICAgIHNsb3dfdGVzdHMg
PSBbXQorICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzID0gW10KKyAgICAgICAgdW5leHBl
Y3RlZF9zbG93X3Rlc3RzID0gW10KKyAgICAgICAgZm9yIHRlc3RfdHVwbGUgaW4gaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3M6CisgICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfdHVwbGUuZmlsZW5h
bWUKKyAgICAgICAgICAgIGlzX3RpbWVvdXRfY3Jhc2hfb3Jfc2xvdyA9IEZhbHNlCisgICAgICAg
ICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnMuaGFzX21vZGlmaWVyKGZpbGVuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9u
cy5TTE9XKToKKyAgICAgICAgICAgICAgICBpc190aW1lb3V0X2NyYXNoX29yX3Nsb3cgPSBUcnVl
CisgICAgICAgICAgICAgICAgc2xvd190ZXN0cy5hcHBlbmQodGVzdF90dXBsZSkKKworICAgICAg
ICAgICAgaWYgZmlsZW5hbWUgaW4gcmVzdWx0X3N1bW1hcnkuZmFpbHVyZXM6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gcmVzdWx0X3N1bW1hcnkucmVzdWx0c1tmaWxlbmFtZV0KKyAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLlRJTUVPVVQgb3IKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIKToKKyAgICAg
ICAgICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9vcl9zbG93ID0gVHJ1ZQorICAgICAgICAg
ICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxlKQorCisg
ICAgICAgICAgICBpZiAobm90IGlzX3RpbWVvdXRfY3Jhc2hfb3Jfc2xvdyBhbmQKKyAgICAgICAg
ICAgICAgICBudW1fcHJpbnRlZCA8IHNlbGYuX29wdGlvbnMubnVtX3Nsb3dfdGVzdHNfdG9fbG9n
KToKKyAgICAgICAgICAgICAgICBudW1fcHJpbnRlZCA9IG51bV9wcmludGVkICsgMQorICAgICAg
ICAgICAgICAgIHVuZXhwZWN0ZWRfc2xvd190ZXN0cy5hcHBlbmQodGVzdF90dXBsZSkKKworICAg
ICAgICB3cml0ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfdGVzdF9saXN0X3RpbWluZyh3cml0
ZSwgIiVzIHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90ICIKKyAgICAgICAgICAgICJtYXJrZWQg
YXMgU0xPVyBhbmQgZGlkIG5vdCB0aW1lb3V0L2NyYXNoOiIgJQorICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy5udW1fc2xvd190ZXN0c190b19sb2csIHVuZXhwZWN0ZWRfc2xvd190ZXN0cykKKyAg
ICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcod3Jp
dGUsICJUZXN0cyBtYXJrZWQgYXMgU0xPVzoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3dfdGVzdHMpCisgICAgICAgIHdyaXRlKCIiKQorICAgICAgICBzZWxmLl9w
cmludF90ZXN0X2xpc3RfdGltaW5nKHdyaXRlLCAiVGVzdHMgdGhhdCB0aW1lZCBvdXQgb3IgY3Jh
c2hlZDoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb3Jf
Y3Jhc2hfdGVzdHMpCisgICAgICAgIHdyaXRlKCIiKQorCisgICAgZGVmIF9wcmludF90ZXN0X2xp
c3RfdGltaW5nKHNlbGYsIHdyaXRlLCB0aXRsZSwgdGVzdF9saXN0KToKKyAgICAgICAgIiIiUHJp
bnQgdGltaW5nIGluZm8gZm9yIGVhY2ggdGVzdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
IHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRl
cikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAgICAgICAgICB0aXRsZTog
c2VjdGlvbiBoZWFkaW5nCisgICAgICAgICAgdGVzdF9saXN0OiB0ZXN0cyB0aGF0IGZhbGwgaW4g
dGhpcyBzZWN0aW9uCisgICAgICAgICIiIgorICAgICAgICB3cml0ZSh0aXRsZSkKKyAgICAgICAg
Zm9yIHRlc3RfdHVwbGUgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0
X3R1cGxlLmZpbGVuYW1lW2xlbigKKyAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLmxheW91dF90
ZXN0c19kaXIoKSkgKyAxOl0KKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFj
ZSgnXFwnLCAnLycpCisgICAgICAgICAgICB0ZXN0X3J1bl90aW1lID0gcm91bmQodGVzdF90dXBs
ZS50ZXN0X3J1bl90aW1lLCAxKQorICAgICAgICAgICAgd3JpdGUoIiAgJXMgdG9vayAlcyBzZWNv
bmRzIiAlIChmaWxlbmFtZSwgdGVzdF9ydW5fdGltZSkpCisKKyAgICBkZWYgX3ByaW50X2RpcmVj
dG9yeV90aW1pbmdzKHNlbGYsIHdyaXRlLCBkaXJlY3RvcnlfdGVzdF90aW1pbmdzKToKKyAgICAg
ICAgIiIiUHJpbnQgdGltaW5nIGluZm8gYnkgZGlyZWN0b3J5IGZvciBhbnkgZGlyZWN0b3JpZXMg
dGhhdAorICAgICAgICB0YWtlID4gMTAgc2Vjb25kcyB0byBydW4uCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICB3cml0ZTogQSBjYWxsYmFjayB0byB3cml0ZSBpbmZvIHRvIChlLmcuLCBhIExv
Z2dpbmdXcml0ZXIpIG9yCisgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUuCisgICAgICAg
ICAgZGlyZWN0b3J5X3Rlc3RfdGltaW5nOiB0aW1lIGluZm8gZm9yIGVhY2ggZGlyZWN0b3J5Cisg
ICAgICAgICIiIgorICAgICAgICB0aW1pbmdzID0gW10KKyAgICAgICAgZm9yIGRpcmVjdG9yeSBp
biBkaXJlY3RvcnlfdGVzdF90aW1pbmdzOgorICAgICAgICAgICAgbnVtX3Rlc3RzLCB0aW1lX2Zv
cl9kaXJlY3RvcnkgPSBkaXJlY3RvcnlfdGVzdF90aW1pbmdzW2RpcmVjdG9yeV0KKyAgICAgICAg
ICAgIHRpbWluZ3MuYXBwZW5kKChyb3VuZCh0aW1lX2Zvcl9kaXJlY3RvcnksIDEpLCBkaXJlY3Rv
cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Rlc3RzKSkKKyAgICAgICAgdGlt
aW5ncy5zb3J0KCkKKworICAgICAgICB3cml0ZSgiVGltZSB0byBwcm9jZXNzIHNsb3dlc3Qgc3Vi
ZGlyZWN0b3JpZXM6IikKKyAgICAgICAgbWluX3NlY29uZHNfdG9fcHJpbnQgPSAxMAorICAgICAg
ICBmb3IgdGltaW5nIGluIHRpbWluZ3M6CisgICAgICAgICAgICBpZiB0aW1pbmdbMF0gPiBtaW5f
c2Vjb25kc190b19wcmludDoKKyAgICAgICAgICAgICAgICB3cml0ZSgiICAlcyB0b29rICVzIHNl
Y29uZHMgdG8gcnVuICVzIHRlc3RzLiIgJSAodGltaW5nWzFdLAorICAgICAgICAgICAgICAgICAg
ICAgIHRpbWluZ1swXSwgdGltaW5nWzJdKSkKKyAgICAgICAgd3JpdGUoIiIpCisKKyAgICBkZWYg
X3ByaW50X3N0YXRpc3RpY3NfZm9yX3Rlc3RfdGltaW5ncyhzZWxmLCB3cml0ZSwgdGl0bGUsIHRp
bWluZ3MpOgorICAgICAgICAiIiJQcmludHMgdGhlIG1lZGlhbiwgbWVhbiBhbmQgc3RhbmRhcmQg
ZGV2aWF0aW9uIG9mIHRoZSB2YWx1ZXMgaW4KKyAgICAgICAgdGltaW5ncy4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRlIGluZm8gdG8gKGUuZy4s
IGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZS4KKyAg
ICAgICAgICB0aXRsZTogVGl0bGUgZm9yIHRoZXNlIHRpbWluZ3MuCisgICAgICAgICAgdGltaW5n
czogQSBsaXN0IG9mIGZsb2F0cyByZXByZXNlbnRpbmcgdGltZXMuCisgICAgICAgICIiIgorICAg
ICAgICB3cml0ZSh0aXRsZSkKKyAgICAgICAgdGltaW5ncy5zb3J0KCkKKworICAgICAgICBudW1f
dGVzdHMgPSBsZW4odGltaW5ncykKKyAgICAgICAgcGVyY2VudGlsZTkwID0gdGltaW5nc1tpbnQo
LjkgKiBudW1fdGVzdHMpXQorICAgICAgICBwZXJjZW50aWxlOTkgPSB0aW1pbmdzW2ludCguOTkg
KiBudW1fdGVzdHMpXQorCisgICAgICAgIGlmIG51bV90ZXN0cyAlIDIgPT0gMToKKyAgICAgICAg
ICAgIG1lZGlhbiA9IHRpbWluZ3NbKChudW1fdGVzdHMgLSAxKSAvIDIpIC0gMV0KKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGxvd2VyID0gdGltaW5nc1tudW1fdGVzdHMgLyAyIC0gMV0KKyAg
ICAgICAgICAgIHVwcGVyID0gdGltaW5nc1tudW1fdGVzdHMgLyAyXQorICAgICAgICAgICAgbWVk
aWFuID0gKGZsb2F0KGxvd2VyICsgdXBwZXIpKSAvIDIKKworICAgICAgICBtZWFuID0gc3VtKHRp
bWluZ3MpIC8gbnVtX3Rlc3RzCisKKyAgICAgICAgZm9yIHRpbWUgaW4gdGltaW5nczoKKyAgICAg
ICAgICAgIHN1bV9vZl9kZXZpYXRpb25zID0gbWF0aC5wb3codGltZSAtIG1lYW4sIDIpCisKKyAg
ICAgICAgc3RkX2RldmlhdGlvbiA9IG1hdGguc3FydChzdW1fb2ZfZGV2aWF0aW9ucyAvIG51bV90
ZXN0cykKKyAgICAgICAgd3JpdGUoIiAgTWVkaWFuOiAgICAgICAgICAlNi4zZiIgJSBtZWRpYW4p
CisgICAgICAgIHdyaXRlKCIgIE1lYW46ICAgICAgICAgICAgJTYuM2YiICUgbWVhbikKKyAgICAg
ICAgd3JpdGUoIiAgOTB0aCBwZXJjZW50aWxlOiAlNi4zZiIgJSBwZXJjZW50aWxlOTApCisgICAg
ICAgIHdyaXRlKCIgIDk5dGggcGVyY2VudGlsZTogJTYuM2YiICUgcGVyY2VudGlsZTk5KQorICAg
ICAgICB3cml0ZSgiICBTdGFuZGFyZCBkZXY6ICAgICU2LjNmIiAlIHN0ZF9kZXZpYXRpb24pCisg
ICAgICAgIHdyaXRlKCIiKQorCisgICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeShzZWxmLCB3
cml0ZSwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICAiIiJQcmludCBhIHNob3J0IHN1bW1hcnkg
YWJvdXQgaG93IG1hbnkgdGVzdHMgcGFzc2VkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
d3JpdGU6IEEgY2FsbGJhY2sgdG8gd3JpdGUgaW5mbyB0byAoZS5nLiwgYSBMb2dnaW5nV3JpdGVy
KSBvcgorICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlLgorICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5OiBpbmZvcm1hdGlvbiB0byBsb2cKKyAgICAgICAgIiIiCisgICAgICAgIGZhaWxlZCA9
IGxlbihyZXN1bHRfc3VtbWFyeS5mYWlsdXJlcykKKyAgICAgICAgc2tpcHBlZCA9IGxlbigKKyAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0
YXRpb25zLlNLSVBdKQorICAgICAgICB0b3RhbCA9IHJlc3VsdF9zdW1tYXJ5LnRvdGFsCisgICAg
ICAgIHBhc3NlZCA9IHRvdGFsIC0gZmFpbGVkIC0gc2tpcHBlZAorICAgICAgICBwY3RfcGFzc2Vk
ID0gMC4wCisgICAgICAgIGlmIHRvdGFsID4gMDoKKyAgICAgICAgICAgIHBjdF9wYXNzZWQgPSBm
bG9hdChwYXNzZWQpICogMTAwIC8gdG90YWwKKworICAgICAgICB3cml0ZSgiIikKKyAgICAgICAg
d3JpdGUoIj0+IFJlc3VsdHM6ICVkLyVkIHRlc3RzIHBhc3NlZCAoJS4xZiUlKSIgJQorICAgICAg
ICAgICAgICAgICAgICAgKHBhc3NlZCwgdG90YWwsIHBjdF9wYXNzZWQpKQorICAgICAgICB3cml0
ZSgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkod3JpdGUsIHJl
c3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuTk9XLCAiVGVzdHMg
dG8gYmUgZml4ZWQgZm9yIHRoZSBjdXJyZW50IHJlbGVhc2UiKQorCisgICAgICAgIHdyaXRlKCIi
KQorICAgICAgICBzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeSh3cml0ZSwgcmVzdWx0
X3N1bW1hcnksCisgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5ERUZFUiwKKyAgICAgICAg
ICAgICJUZXN0cyB3ZSdsbCBmaXggaW4gdGhlIGZ1dHVyZSBpZiB0aGV5IGZhaWwgKERFRkVSKSIp
CisKKyAgICAgICAgd3JpdGUoIiIpCisgICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5
X2VudHJ5KHdyaXRlLCByZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRp
b25zLldPTlRGSVgsCisgICAgICAgICAgICAiVGVzdHMgdGhhdCB3aWxsIG9ubHkgYmUgZml4ZWQg
aWYgdGhleSBjcmFzaCAoV09OVEZJWCkiKQorCisgICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFy
eV9lbnRyeShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksIHRpbWVsaW5lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZyk6CisgICAgICAgICIiIlByaW50IGEg
c3VtbWFyeSBibG9jayBvZiByZXN1bHRzIGZvciBhIHBhcnRpY3VsYXIgdGltZWxpbmUgb2YgdGVz
dC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHdyaXRlOiBBIGNhbGxiYWNrIHRvIHdyaXRl
IGluZm8gdG8gKGUuZy4sIGEgTG9nZ2luZ1dyaXRlcikgb3IKKyAgICAgICAgICAgICAgc3lzLnN0
ZG91dC53cml0ZS4KKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSB0byBwcmludCBy
ZXN1bHRzIGZvcgorICAgICAgICAgIHRpbWVsaW5lOiB0aGUgdGltZWxpbmUgdG8gcHJpbnQgcmVz
dWx0cyBmb3IgKE5PVCwgV09OVEZJWCwgZXRjLikKKyAgICAgICAgICBoZWFkaW5nOiBhIHRleHR1
YWwgZGVzY3JpcHRpb24gb2YgdGhlIHRpbWVsaW5lCisgICAgICAgICIiIgorICAgICAgICB0b3Rh
bCA9IGxlbihyZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0aW1lbGluZV0pCisgICAg
ICAgIG5vdF9wYXNzaW5nID0gKHRvdGFsIC0KKyAgICAgICAgICAgbGVuKHJlc3VsdF9zdW1tYXJ5
LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdICYKKyAgICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXSkpCisgICAg
ICAgIHdyaXRlKCI9PiAlcyAoJWQpOiIgJSAoaGVhZGluZywgbm90X3Bhc3NpbmcpKQorCisgICAg
ICAgIGZvciByZXN1bHQgaW4gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fT1JERVI6
CisgICAgICAgICAgICBpZiByZXN1bHQgPT0gdGVzdF9leHBlY3RhdGlvbnMuUEFTUzoKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmVzdWx0cyA9IChyZXN1bHRfc3VtbWFy
eS50ZXN0c19ieV9leHBlY3RhdGlvbltyZXN1bHRdICYKKyAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKQorICAgICAgICAgICAg
ZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1
bHRdCisgICAgICAgICAgICBpZiBub3RfcGFzc2luZyBhbmQgbGVuKHJlc3VsdHMpOgorICAgICAg
ICAgICAgICAgIHBjdCA9IGxlbihyZXN1bHRzKSAqIDEwMC4wIC8gbm90X3Bhc3NpbmcKKyAgICAg
ICAgICAgICAgICB3cml0ZSgiICAlNWQgJS0yNHMgKCU0LjFmJSUpIiAlIChsZW4ocmVzdWx0cyks
CisgICAgICAgICAgICAgICAgICAgICAgZGVzY1tsZW4ocmVzdWx0cykgIT0gMV0sIHBjdCkpCisK
KyAgICBkZWYgX3ByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZiwgdG90YWwsIGV4cGVjdGVkKToK
KyAgICAgICAgIiIiUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRoZSB0ZXN0IHJ1biB0byBz
dGRvdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0b3RhbDogdG90YWwgbnVtYmVyIG9m
IHRlc3RzIHJ1bgorICAgICAgICAgIGV4cGVjdGVkOiBudW1iZXIgb2YgZXhwZWN0ZWQgcmVzdWx0
cworICAgICAgICAiIiIKKyAgICAgICAgdW5leHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0ZWQKKyAg
ICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgorICAgICAgICAgICAgcHJpbnQgIkFsbCAlZCB0ZXN0
cyByYW4gYXMgZXhwZWN0ZWQuIiAlIGV4cGVjdGVkCisgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0g
MToKKyAgICAgICAgICAgIHByaW50ICIxIHRlc3QgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6
IiAlIHVuZXhwZWN0ZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICIlZCB0ZXN0
cyByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoiICUgKGV4cGVjdGVkLAorICAgICAgICAgICAg
ICAgIHVuZXhwZWN0ZWQpCisKKyAgICBkZWYgX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxm
LCB1bmV4cGVjdGVkX3Jlc3VsdHMpOgorICAgICAgICAiIiJQcmludHMgYW55IHVuZXhwZWN0ZWQg
cmVzdWx0cyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm0gdG8gc3Rkb3V0LiIiIgorICAgICAgICBw
YXNzZXMgPSB7fQorICAgICAgICBmbGFreSA9IHt9CisgICAgICAgIHJlZ3Jlc3Npb25zID0ge30K
KworICAgICAgICBpZiBsZW4odW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKToKKyAgICAgICAg
ICAgIHByaW50ICIiCisKKyAgICAgICAgZm9yIHRlc3QsIHJlc3VsdHMgaW4gdW5leHBlY3RlZF9y
ZXN1bHRzWyd0ZXN0cyddLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0
c1snYWN0dWFsJ10uc3BsaXQoIiAiKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydl
eHBlY3RlZCddLnNwbGl0KCIgIikKKyAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToK
KyAgICAgICAgICAgICAgICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAg
ICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRvIGNyYXNoLCBidXQgcGFzc2VkJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QpCisgICAgICAgICAg
ICAgICAgZWxpZiAnVElNRU9VVCcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIF9h
ZGRfdG9fZGljdF9vZl9saXN0cyhwYXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnRXhwZWN0ZWQgdG8gdGltZW91dCwgYnV0IHBhc3NlZCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCkKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHRv
IGZhaWwsIGJ1dCBwYXNzZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdCkKKyAgICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAg
ICAgICAgICMgV2UgZ3JvdXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQg
d2UgZ290LgorICAgICAgICAgICAgICAgIF9hZGRfdG9fZGljdF9vZl9saXN0cyhmbGFreSwgYWN0
dWFsWzBdLCB0ZXN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfYWRkX3Rv
X2RpY3Rfb2ZfbGlzdHMocmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0KQorCisg
ICAgICAgIGlmIGxlbihwYXNzZXMpOgorICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcGFz
c2VzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHByaW50ICIlczogKCVkKSIgJSAoa2V5
LCBsZW4odGVzdHMpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAg
ICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiICAlcyIg
JSB0ZXN0CisgICAgICAgICAgICAgICAgcHJpbnQKKworICAgICAgICBpZiBsZW4oZmxha3kpOgor
ICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJ
T05fREVTQ1JJUFRJT05TCisgICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVy
aXRlbXMoKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5F
WFBFQ1RBVElPTlNba2V5Lmxvd2VyKCldCisgICAgICAgICAgICAgICAgcHJpbnQgIlVuZXhwZWN0
ZWQgZmxha2luZXNzOiAlcyAoJWQpIiAlICgKKyAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
c1tyZXN1bHRdWzFdLCBsZW4odGVzdHMpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQor
CisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHVuZXhwZWN0ZWRfcmVzdWx0c1sndGVzdHMnXVt0ZXN0XQorICAgICAgICAgICAg
ICAgICAgICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikKKyAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNb
a2V5Lmxvd2VyKCldCisgICAgICAgICAgICAgICAgICAgIG5ld19leHBlY3RhdGlvbnNfbGlzdCA9
IGxpc3Qoc2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQorICAgICAgICAgICAgICAgICAgICBw
cmludCAiICAlcyA9ICVzIiAlICh0ZXN0LCAiICIuam9pbihuZXdfZXhwZWN0YXRpb25zX2xpc3Qp
KQorICAgICAgICAgICAgICAgIHByaW50CisKKyAgICAgICAgaWYgbGVuKHJlZ3Jlc3Npb25zKToK
KyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlLkVYUEVDVEFU
SU9OX0RFU0NSSVBUSU9OUworICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcmVncmVzc2lv
bnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9u
c0ZpbGUuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgIHByaW50ICJS
ZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyA6ICglZCkiICUgKAorICAgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb25zW3Jlc3VsdF1bMV0sIGxlbih0ZXN0cykpCisgICAgICAgICAgICAgICAgdGVz
dHMuc29ydCgpCisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAg
ICAgICAgICAgIHByaW50ICIgICVzID0gJXMiICUgKHRlc3QsIGtleSkKKyAgICAgICAgICAgICAg
ICBwcmludAorCisgICAgICAgIGlmIGxlbih1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10pIGFu
ZCBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiLSIgKiA3OAorCisg
ICAgZGVmIF9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHNlbGYsIHRlc3QsIHJlc3VsdCk6
CisgICAgICAgICIiIlByaW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgor
ICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJ
T05TW3Jlc3VsdF1bMF0KKyAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIiAgJXMgLT4gdW5leHBl
Y3RlZCAlc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoX3V0aWxzLnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUodGVzdCksIGRlc2MpKQorCisgICAgZGVmIF93cml0ZV9yZXN1bHRz
X2h0bWxfZmlsZShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgICIiIldyaXRlIHJlc3Vs
dHMuaHRtbCB3aGljaCBpcyBhIHN1bW1hcnkgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICByZXN1bHRfc3VtbWFyeTogYSBzdW1tYXJ5IG9mIHRoZSByZXN1
bHRzIDopCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICBUcnVlIGlmIGFueSByZXN1bHRz
IHdlcmUgd3JpdHRlbiAoc2luY2UgZXhwZWN0ZWQgZmFpbHVyZXMgbWF5IGJlCisgICAgICAgICAg
b21pdHRlZCkKKyAgICAgICAgIiIiCisgICAgICAgICMgdGVzdCBmYWlsdXJlcworICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLmZ1bGxfcmVzdWx0c19odG1sOgorICAgICAgICAgICAgdGVzdF9maWxl
cyA9IHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzLmtleXMoKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgdW5leHBlY3RlZF9mYWlsdXJlcyA9IHNlbGYuX2dldF9mYWlsdXJlcyhyZXN1bHRfc3Vt
bWFyeSwKKyAgICAgICAgICAgICAgICBpbmNsdWRlX2NyYXNoZXM9VHJ1ZSkKKyAgICAgICAgICAg
IHRlc3RfZmlsZXMgPSB1bmV4cGVjdGVkX2ZhaWx1cmVzLmtleXMoKQorICAgICAgICBpZiBub3Qg
bGVuKHRlc3RfZmlsZXMpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgb3V0
X2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3Rvcnks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cy5odG1sIikKKyAg
ICAgICAgb3V0X2ZpbGUgPSBvcGVuKG91dF9maWxlbmFtZSwgJ3cnKQorICAgICAgICAjIGhlYWRl
cgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmZ1bGxfcmVzdWx0c19odG1sOgorICAgICAgICAg
ICAgaDIgPSAiVGVzdCBGYWlsdXJlcyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGgyID0g
IlVuZXhwZWN0ZWQgVGVzdCBGYWlsdXJlcyIKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjxodG1s
PjxoZWFkPjx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzICglKHRpbWUpcykiCisgICAgICAgICAg
ICAgICAgICAgICAgICI8L3RpdGxlPjwvaGVhZD48Ym9keT48aDI+JShoMilzICglKHRpbWUpcyk8
L2gyPlxuIgorICAgICAgICAgICAgICAgICAgICAgICAlIHsnaDInOiBoMiwgJ3RpbWUnOiB0aW1l
LmFzY3RpbWUoKX0pCisKKyAgICAgICAgdGVzdF9maWxlcy5zb3J0KCkKKyAgICAgICAgZm9yIHRl
c3RfZmlsZSBpbiB0ZXN0X2ZpbGVzOgorICAgICAgICAgICAgdGVzdF9mYWlsdXJlcyA9IHJlc3Vs
dF9zdW1tYXJ5LmZhaWx1cmVzLmdldCh0ZXN0X2ZpbGUsIFtdKQorICAgICAgICAgICAgb3V0X2Zp
bGUud3JpdGUoIjxwPjxhIGhyZWY9JyVzJz4lczwvYT48YnIgLz5cbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICUgKHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKHRlc3RfZmlsZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUodGVzdF9maWxlKSkpCisgICAgICAgICAgICBmb3IgZmFpbHVyZSBpbiB0ZXN0X2ZhaWx1
cmVzOgorICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCImbmJzcDsmbmJzcDslczxici8+
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZmFpbHVyZS5yZXN1bHRfaHRtbF9v
dXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9maWxlKSkpCisgICAgICAgICAgICBvdXRfZmlsZS53cml0
ZSgiPC9wPlxuIikKKworICAgICAgICAjIGZvb3RlcgorICAgICAgICBvdXRfZmlsZS53cml0ZSgi
PC9ib2R5PjwvaHRtbD5cbiIpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3Nob3df
cmVzdWx0c19odG1sX2ZpbGUoc2VsZik6CisgICAgICAgICIiIkxhdW5jaGVzIHRoZSB0ZXN0IHNo
ZWxsIG9wZW4gdG8gdGhlIHJlc3VsdHMuaHRtbCBwYWdlLiIiIgorICAgICAgICByZXN1bHRzX2Zp
bGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMuaHRtbCIpCisg
ICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3BhdGhfdXRpbHMudGVzdF9zaGVsbF9wYXRoKHNlbGYu
X29wdGlvbnMudGFyZ2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5m
aWxlbmFtZV90b191cmkocmVzdWx0c19maWxlbmFtZSldKQorCisKK2RlZiBfYWRkX3RvX2RpY3Rf
b2ZfbGlzdHMoZGljdCwga2V5LCB2YWx1ZSk6CisgICAgZGljdC5zZXRkZWZhdWx0KGtleSwgW10p
LmFwcGVuZCh2YWx1ZSkKKworCitkZWYgcmVhZF90ZXN0X2ZpbGVzKGZpbGVzKToKKyAgICB0ZXN0
cyA9IFtdCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGZvciBsaW5lIGluIG9wZW4o
ZmlsZSk6CisgICAgICAgICAgICBsaW5lID0gdGVzdF9leHBlY3RhdGlvbnMuc3RyaXBfY29tbWVu
dHMobGluZSkKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgdGVzdHMuYXBw
ZW5kKGxpbmUpCisgICAgcmV0dXJuIHRlc3RzCisKKworZGVmIGNyZWF0ZV9sb2dnaW5nX3dyaXRl
cihvcHRpb25zLCBsb2dfb3B0aW9uKToKKyAgICAiIiJSZXR1cm5zIGEgd3JpdGUoKSBmdW5jdGlv
biB0aGF0IHdpbGwgd3JpdGUgdGhlIHN0cmluZyB0byBsb2dnaW5nLmluZm8oKQorICAgIGlmIGNv
bXAgd2FzIHNwZWNpZmllZCBpbiAtLWxvZyBvciBpZiAtLXZlcmJvc2UgaXMgdHJ1ZS4gT3RoZXJ3
aXNlIHRoZQorICAgIG1lc3NhZ2UgaXMgZHJvcHBlZC4KKworICAgIEFyZ3M6CisgICAgICBvcHRp
b25zOiBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGZyb20gb3B0cGFyc2UKKyAgICAgIGxv
Z19vcHRpb246IG9wdGlvbiB0byBtYXRjaCBpbiBvcHRpb25zLmxvZyBpbiBvcmRlciBmb3IgdGhl
IG1lc3NhZ2VzCisgICAgICAgICAgdG8gYmUgbG9nZ2VkIChlLmcuLCAnYWN0dWFsJyBvciAnZXhw
ZWN0ZWQnKQorICAgICIiIgorICAgIGlmIG9wdGlvbnMudmVyYm9zZSBvciBsb2dfb3B0aW9uIGlu
IG9wdGlvbnMubG9nLnNwbGl0KCIsIik6CisgICAgICAgIHJldHVybiBsb2dnaW5nLmluZm8KKyAg
ICByZXR1cm4gbGFtYmRhIHN0cjogMQorCisKK2RlZiBtYWluKG9wdGlvbnMsIGFyZ3MpOgorICAg
ICIiIlJ1biB0aGUgdGVzdHMuICBXaWxsIGNhbGwgc3lzLmV4aXQgd2hlbiBjb21wbGV0ZS4KKwor
ICAgIEFyZ3M6CisgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9w
dGlvbnMKKyAgICAgIGFyZ3M6IGEgbGlzdCBvZiBzdWIgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdG8g
dGVzdAorICAgICIiIgorCisgICAgaWYgb3B0aW9ucy5zb3VyY2VzOgorICAgICAgICBvcHRpb25z
LnZlcmJvc2UgPSBUcnVlCisKKyAgICAjIFNldCB1cCBvdXIgbG9nZ2luZyBmb3JtYXQuCisgICAg
bWV0ZXIgPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3RyZWFtKG9wdGlvbnMudmVyYm9zZSwgc3lz
LnN0ZGVycikKKyAgICBsb2dfZm10ID0gJyUobWVzc2FnZSlzJworICAgIGxvZ19kYXRlZm10ID0g
JyV5JW0lZCAlSDolTTolUycKKyAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBv
cHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5h
bWUpczolKGxpbmVubyktNGQgJShsZXZlbG5hbWUpcyAnCisgICAgICAgICAgICAgICAgICAnJSht
ZXNzYWdlKXMnKQorICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgbG9nZ2lu
Zy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm10LCBkYXRlZm10PWxv
Z19kYXRlZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtPW1ldGVyKQorCisgICAg
aWYgbm90IG9wdGlvbnMudGFyZ2V0OgorICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAg
ICAgICAgb3B0aW9ucy50YXJnZXQgPSAiRGVidWciCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBvcHRpb25zLnRhcmdldCA9ICJSZWxlYXNlIgorCisgICAgaWYgbm90IG9wdGlvbnMudXNlX2Fw
YWNoZToKKyAgICAgICAgb3B0aW9ucy51c2VfYXBhY2hlID0gc3lzLnBsYXRmb3JtIGluICgnZGFy
d2luJywgJ2xpbnV4MicpCisKKyAgICBpZiBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LnN0YXJ0
c3dpdGgoIi8iKToKKyAgICAgICAgIyBBc3N1bWUgaXQncyBhbiBhYnNvbHV0ZSBwYXRoIGFuZCBu
b3JtYWxpemUuCisgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkgPSBwYXRoX3V0aWxz
LmdldF9hYnNvbHV0ZV9wYXRoKAorICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9y
eSkKKyAgICBlbHNlOgorICAgICAgICAjIElmIGl0J3MgYSByZWxhdGl2ZSBwYXRoLCBtYWtlIHRo
ZSBvdXRwdXQgZGlyZWN0b3J5IHJlbGF0aXZlIHRvCisgICAgICAgICMgRGVidWcgb3IgUmVsZWFz
ZS4KKyAgICAgICAgYmFzZWRpciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcp
CisgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkgPSBwYXRoX3V0aWxzLmdldF9hYnNv
bHV0ZV9wYXRoKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKGJhc2VkaXIsIG9wdGlvbnMudGFy
Z2V0LCBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKworICAgIGlmIG9wdGlvbnMuY2xvYmJl
cl9vbGRfcmVzdWx0czoKKyAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJl
c3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVyCisgICAgICAgICMgZmlsZXMgaW4gdGhl
IHJlc3VsdHMgZGlyZWN0b3J5IGFyZSBleHBsaWNpdGx5IHVzZWQgZm9yIGNyb3NzLXJ1bgorICAg
ICAgICAjIHRyYWNraW5nLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnksICdMYXlvdXRUZXN0cycpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3Rz
KHBhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorCisgICAgIyBFbnN1cmUg
cGxhdGZvcm0gaXMgdmFsaWQgYW5kIGZvcmNlIGl0IHRvIHRoZSBmb3JtICdjaHJvbWl1bS08cGxh
dGZvcm0+Jy4KKyAgICBvcHRpb25zLnBsYXRmb3JtID0gcGF0aF91dGlscy5wbGF0Zm9ybV9uYW1l
KG9wdGlvbnMucGxhdGZvcm0pCisKKyAgICBpZiBub3Qgb3B0aW9ucy5udW1fdGVzdF9zaGVsbHM6
CisgICAgICAgICMgVE9ETyhvamFuKTogSW52ZXN0aWdhdGUgcGVyZi9mbGFraW5lc3MgaW1wYWN0
IG9mIHVzaW5nIG51bWNvcmVzICsgMS4KKyAgICAgICAgb3B0aW9ucy5udW1fdGVzdF9zaGVsbHMg
PSBwbGF0Zm9ybV91dGlscy5nZXRfbnVtX2NvcmVzKCkKKworICAgIHdyaXRlID0gY3JlYXRlX2xv
Z2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25maWcnKQorICAgIHdyaXRlKCJSdW5uaW5nICVzIHRl
c3Rfc2hlbGxzIGluIHBhcmFsbGVsIiAlIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzKQorCisgICAg
aWYgbm90IG9wdGlvbnMudGltZV9vdXRfbXM6CisgICAgICAgIGlmIG9wdGlvbnMudGFyZ2V0ID09
ICJEZWJ1ZyI6CisgICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0X21zID0gc3RyKDIgKiBUZXN0
UnVubmVyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cihUZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1F
T1VUX01TKQorCisgICAgb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zID0gc3RyKDUgKiBpbnQob3B0
aW9ucy50aW1lX291dF9tcykpCisgICAgd3JpdGUoIlJlZ3VsYXIgdGltZW91dDogJXMsIHNsb3cg
dGVzdCB0aW1lb3V0OiAlcyIgJQorICAgICAgICAgIChvcHRpb25zLnRpbWVfb3V0X21zLCBvcHRp
b25zLnNsb3dfdGltZV9vdXRfbXMpKQorCisgICAgIyBJbmNsdWRlIGFsbCB0ZXN0cyBpZiBub25l
IGFyZSBzcGVjaWZpZWQuCisgICAgbmV3X2FyZ3MgPSBbXQorICAgIGZvciBhcmcgaW4gYXJnczoK
KyAgICAgICAgaWYgYXJnIGFuZCBhcmcgIT0gJyc6CisgICAgICAgICAgICBuZXdfYXJncy5hcHBl
bmQoYXJnKQorCisgICAgcGF0aHMgPSBuZXdfYXJncworICAgIGlmIG5vdCBwYXRoczoKKyAgICAg
ICAgcGF0aHMgPSBbXQorICAgIGlmIG9wdGlvbnMudGVzdF9saXN0OgorICAgICAgICBwYXRocyAr
PSByZWFkX3Rlc3RfZmlsZXMob3B0aW9ucy50ZXN0X2xpc3QpCisKKyAgICAjIENyZWF0ZSB0aGUg
b3V0cHV0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgICAgcGF0aF91
dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAg
IG1ldGVyLnVwZGF0ZSgiR2F0aGVyaW5nIGZpbGVzIC4uLiIpCisKKyAgICB0ZXN0X3J1bm5lciA9
IFRlc3RSdW5uZXIob3B0aW9ucywgbWV0ZXIpCisgICAgdGVzdF9ydW5uZXIuZ2F0aGVyX2ZpbGVf
cGF0aHMocGF0aHMpCisKKyAgICBpZiBvcHRpb25zLmxpbnRfdGVzdF9maWxlczoKKyAgICAgICAg
IyBDcmVhdGluZyB0aGUgZXhwZWNhdGlvbnMgZm9yIGVhY2ggcGxhdGZvcm0vdGFyZ2V0IHBhaXIg
ZG9lcyBhbGwgdGhlCisgICAgICAgICMgdGVzdCBsaXN0IHBhcnNpbmcgYW5kIGVuc3VyZXMgaXQn
cyBjb3JyZWN0IHN5bnRheCAoZS5nLiBubyBkdXBlcykuCisgICAgICAgIGZvciBwbGF0Zm9ybSBp
biBUZXN0RXhwZWN0YXRpb25zRmlsZS5QTEFURk9STVM6CisgICAgICAgICAgICB0ZXN0X3J1bm5l
ci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm0sIGlzX2RlYnVnX21vZGU9VHJ1ZSkKKyAgICAg
ICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0Zm9ybSwgaXNfZGVidWdf
bW9kZT1GYWxzZSkKKyAgICAgICAgcHJpbnQgKCJJZiB0aGVyZSBhcmUgbm8gZmFpbCBtZXNzYWdl
cywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsIHRoZW4gdGhlICIKKyAgICAgICAgICAgICJsaW50IHN1
Y2NlZWRlZC4iKQorICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgdHJ5OgorICAgICAgICB0ZXN0
X3NoZWxsX2JpbmFyeV9wYXRoID0gcGF0aF91dGlscy50ZXN0X3NoZWxsX3BhdGgob3B0aW9ucy50
YXJnZXQpCisgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICBwcmlu
dCAiXG5FUlJPUjogdGVzdF9zaGVsbCBpcyBub3QgZm91bmQuIEJlIHN1cmUgdGhhdCB5b3UgaGF2
ZSBidWlsdCIKKyAgICAgICAgcHJpbnQgIml0IGFuZCB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGNv
cnJlY3QgYnVpbGQuIFRoaXMgc2NyaXB0IgorICAgICAgICBwcmludCAid2lsbCBydW4gdGhlIFJl
bGVhc2Ugb25lIGJ5IGRlZmF1bHQuIFVzZSAtLWRlYnVnIHRvIHVzZSB0aGUiCisgICAgICAgIHBy
aW50ICJEZWJ1ZyBidWlsZC5cbiIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHdyaXRlID0g
Y3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICJjb25maWciKQorICAgIHdyaXRlKCJVc2lu
ZyBwbGF0Zm9ybSAnJXMnIiAlIG9wdGlvbnMucGxhdGZvcm0pCisgICAgd3JpdGUoIlBsYWNpbmcg
dGVzdCByZXN1bHRzIGluICVzIiAlIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgaWYg
b3B0aW9ucy5uZXdfYmFzZWxpbmU6CisgICAgICAgIHdyaXRlKCJQbGFjaW5nIG5ldyBiYXNlbGlu
ZXMgaW4gJXMiICUKKyAgICAgICAgICAgICAgcGF0aF91dGlscy5jaHJvbWl1bV9iYXNlbGluZV9w
YXRoKG9wdGlvbnMucGxhdGZvcm0pKQorICAgIHdyaXRlKCJVc2luZyAlcyBidWlsZCBhdCAlcyIg
JSAob3B0aW9ucy50YXJnZXQsIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGgpKQorICAgIGlmIG9wdGlv
bnMubm9fcGl4ZWxfdGVzdHM6CisgICAgICAgIHdyaXRlKCJOb3QgcnVubmluZyBwaXhlbCB0ZXN0
cyIpCisgICAgd3JpdGUoIiIpCisKKyAgICBtZXRlci51cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRp
b25zIC4uLiIpCisgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKG9wdGlvbnMucGxh
dGZvcm0sIG9wdGlvbnMudGFyZ2V0ID09ICdEZWJ1ZycpCisKKyAgICBtZXRlci51cGRhdGUoIlBy
ZXBhcmluZyB0ZXN0cyAuLi4iKQorICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9w
dGlvbnMsICJleHBlY3RlZCIpCisgICAgcmVzdWx0X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5wcmVw
YXJlX2xpc3RzX2FuZF9wcmludF9vdXRwdXQod3JpdGUpCisKKyAgICBpZiAnY3lnd2luJyA9PSBz
eXMucGxhdGZvcm06CisgICAgICAgIGxvZ2dpbmcud2FybigiIyIgKiA0MCkKKyAgICAgICAgbG9n
Z2luZy53YXJuKCIjIFVORVhQRUNURUQgUFlUSE9OIFZFUlNJT04iKQorICAgICAgICBsb2dnaW5n
Lndhcm4oIiMgVGhpcyBzY3JpcHQgc2hvdWxkIGJlIHJ1biB1c2luZyB0aGUgdmVyc2lvbiBvZiBw
eXRob24iKQorICAgICAgICBsb2dnaW5nLndhcm4oIiMgaW4gdGhpcmRfcGFydHkvcHl0aG9uXzI0
LyIpCisgICAgICAgIGxvZ2dpbmcud2FybigiIyIgKiA0MCkKKyAgICAgICAgc3lzLmV4aXQoMSkK
KworICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hlIGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0
ZXN0IHJ1bi4KKyAgICBjYWNoZWRpciA9IG9zLnBhdGguc3BsaXQodGVzdF9zaGVsbF9iaW5hcnlf
cGF0aClbMF0KKyAgICBjYWNoZWRpciA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgImNhY2hlIikK
KyAgICBpZiBvcy5wYXRoLmV4aXN0cyhjYWNoZWRpcik6CisgICAgICAgIHNodXRpbC5ybXRyZWUo
Y2FjaGVkaXIpCisKKyAgICB0ZXN0X3J1bm5lci5hZGRfdGVzdF90eXBlKHRleHRfZGlmZi5UZXN0
VGV4dERpZmYpCisgICAgaWYgbm90IG9wdGlvbnMubm9fcGl4ZWxfdGVzdHM6CisgICAgICAgIHRl
c3RfcnVubmVyLmFkZF90ZXN0X3R5cGUoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIGlm
IG9wdGlvbnMuZnV6enlfcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICB0ZXN0X3J1bm5lci5hZGRf
dGVzdF90eXBlKGZ1enp5X2ltYWdlX2RpZmYuRnV6enlJbWFnZURpZmYpCisKKyAgICBtZXRlci51
cGRhdGUoIlN0YXJ0aW5nIC4uLiIpCisgICAgaGFzX25ld19mYWlsdXJlcyA9IHRlc3RfcnVubmVy
LnJ1bihyZXN1bHRfc3VtbWFyeSkKKworICAgIGxvZ2dpbmcuZGVidWcoIkV4aXQgc3RhdHVzOiAl
ZCIgJSBoYXNfbmV3X2ZhaWx1cmVzKQorICAgIHN5cy5leGl0KGhhc19uZXdfZmFpbHVyZXMpCisK
KworZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKKyAgICAiIiJQcm92aWRlcyBhIGRlZmF1bHQg
c2V0IG9mIGNvbW1hbmQgbGluZSBhcmdzLgorCisgICAgUmV0dXJucyBhIHR1cGxlIG9mIG9wdGlv
bnMsIGFyZ3MgZnJvbSBvcHRwYXJzZSIiIgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5P
cHRpb25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbm8tcGl4
ZWwtdGVzdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJk
aXNhYmxlIHBpeGVsLXRvLXBpeGVsIFBORyBjb21wYXJpc29ucyIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCIiLCAiLS1mdXp6eS1waXhlbC10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkFsc28gdXNlIGZ1enp5IG1hdGNoaW5nIHRvIGNv
bXBhcmUgcGl4ZWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IG91
dHB1dHMuIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJlc3VsdHMtZGly
ZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ibGF5b3V0LXRl
c3QtcmVzdWx0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik91dHB1dCBy
ZXN1bHRzIGRpcmVjdG9yeSBzb3VyY2UgZGlyLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiIHJlbGF0aXZlIHRvIERlYnVnIG9yIFJlbGVhc2UiKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiIiwgIi0tbmV3LWJhc2VsaW5lIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0ic2F2ZSBhbGwgZ2VuZXJhdGVkIHJlc3VsdHMgYXMgbmV3
IGJhc2VsaW5lcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGludG8gdGhl
IHBsYXRmb3JtIGRpcmVjdG9yeSwgb3ZlcndyaXRpbmcgIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ3aGF0ZXZlcidzIGFscmVhZHkgdGhlcmUuIikKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oIiIsICItLW5vc2hvdy1yZXN1bHRzIiwgYWN0aW9uPSJzdG9yZV90cnVl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0iZG9u
J3QgbGF1bmNoIHRoZSB0ZXN0X3NoZWxsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IHdpdGggcmVzdWx0cyBhZnRlciB0aGUgdGVzdHMgYXJlIGRvbmUiKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiIiwgIi0tZnVsbC1yZXN1bHRzLWh0bWwiLCBhY3Rpb249InN0b3JlX3Ry
dWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJz
aG93IGFsbCBmYWlsdXJlcyBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1
bHRzLmh0bWwsIHJhdGhlciB0aGFuIG9ubHkgcmVncmVzc2lvbnMiKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbigiIiwgIi0tY2xvYmJlci1vbGQtcmVzdWx0cyIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9
IkNsb2JiZXJzIHRlc3QgcmVzdWx0cyBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInByZXZpb3VzIHJ1bnMuIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICIt
LWxpbnQtdGVzdC1maWxlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik1ha2VzIHN1cmUgdGhlIHRlc3QgZmls
ZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyc2UgZm9yIGFsbCBjb25maWd1
cmF0aW9ucy4gRG9lcyBub3QgcnVuIGFueSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0ZXN0cy4iKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tZm9yY2UiLCBh
Y3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSdW4gYWxsIHRlc3Rz
LCBldmVuIHRob3NlIG1hcmtlZCBTS0lQICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW4gdGhlIHRlc3QgbGlzdCIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIi
LCAiLS1udW0tdGVzdC1zaGVsbHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJOdW1iZXIgb2YgdGVzdHNoZWxscyB0byBydW4gaW4gcGFyYWxsZWwuIikKKyAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXVzZS1hcGFjaGUiLCBhY3Rpb249InN0b3JlX3RydWUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSJXaGV0aGVyIHRvIHVzZSBhcGFjaGUgaW5zdGVhZCBv
ZiBsaWdodHRwZC4iKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdGltZS1v
dXQtbXMiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
IlNldCB0aGUgdGltZW91dCBmb3IgZWFjaCB0ZXN0IikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oIiIsICItLXJ1bi1zaW5nbHkiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSJydW4gYSBzZXBhcmF0ZSB0ZXN0X3NoZWxsIGZvciBlYWNoIHRlc3QiKQor
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tZGVidWciLCBhY3Rpb249InN0b3Jl
X3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJ1c2UgdGhlIGRlYnVnIGJpbmFyeSBpbnN0ZWFkIG9mIHRoZSByZWxlYXNlIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgYmluYXJ5IikKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oIiIsICItLW51bS1zbG93LXRlc3RzLXRvLWxvZyIsIGRlZmF1bHQ9NTAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBzbG93IHRlc3RzIHdob3Nl
IHRpbWluZ3MgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBwcmludC4i
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcGxhdGZvcm0iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJPdmVycmlkZSB0aGUgcGxhdGZvcm0gZm9yIGV4
cGVjdGVkIHJlc3VsdHMiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdGFy
Z2V0IiwgZGVmYXVsdD0iIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2V0
IHRoZSBidWlsZCB0YXJnZXQgY29uZmlndXJhdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIihvdmVycmlkZXMgLS1kZWJ1ZykiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRk
X29wdGlvbigiIiwgIi0tbG9nIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9ImRldGFpbGVkLXByb2dyZXNzLHVuZXhwZWN0ZWQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJsb2cgdmFyaW91cyB0eXBlcyBvZiBkYXRhLiBU
aGUgcGFyYW0gc2hvdWxkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGJlIGEgY29t
bWEtc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIGZyb206ICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImFjdHVhbCxjb25maWcsIiArIExPR19ERVRBSUxFRF9QUk9HUkVTUyArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIsZXhwZWN0ZWQsdGltaW5nLCIgKyBMT0dfVU5FWFBF
Q1RFRCArICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGRlZmF1bHRzIHRvICIg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3Ms
dW5leHBlY3RlZCkiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJi
b3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwgaGVscD0iaW5jbHVkZSBkZWJ1Zy1sZXZlbCBsb2dnaW5nIikKKyAgICBv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXNvdXJjZXMiLCBhY3Rpb249InN0b3JlX3Ry
dWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzaG93IGV4cGVjdGVkIHJl
c3VsdCBmaWxlIHBhdGggZm9yIGVhY2ggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXN0IChpbXBsaWVzIC0tdmVyYm9zZSkiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29w
dGlvbigiIiwgIi0tc3RhcnR1cC1kaWFsb2ciLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSJjcmVhdGUgYSBkaWFsb2cgb24gdGVzdF9zaGVsbC5leGUgc3RhcnR1
cCIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1ncC1mYXVsdC1lcnJvci1i
b3giLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJlbmFibGUg
V2luZG93cyBHUCBmYXVsdCBlcnJvciBib3giKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bigiIiwgIi0td3JhcHBlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Indy
YXBwZXIgY29tbWFuZCB0byBpbnNlcnQgYmVmb3JlICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW52b2NhdGlvbnMgb2YgdGVzdF9zaGVsbDsgb3B0aW9uIGlzIHNwbGl0ICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gd2hpdGVzcGFjZSBiZWZvcmUg
cnVubmluZy4gKEV4YW1wbGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
LS13cmFwcGVyPSd2YWxncmluZCAtLXNtYy1jaGVjaz1hbGwnKSIpCisgICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCIiLCAiLS10ZXN0LWxpc3QiLCBhY3Rpb249ImFwcGVuZCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJlYWQgbGlzdCBvZiB0ZXN0cyB0byBydW4gZnJv
bSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0iRklMRSIpCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1ub2NoZWNrLXN5cy1kZXBzIiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRG9uJ3QgY2hlY2sgdGhl
IHN5c3RlbSBkZXBlbmRlbmNpZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIodGhlbWVzKSIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1yYW5kb21p
emUtb3JkZXIiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgi
UnVuIHRlc3RzIGluIHJhbmRvbSBvcmRlciAodXNlZnVsIGZvciAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0cmFja2luZyBkb3duIGNvcnJ1cHRpb24pIikpCisgICAgb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1ydW4tY2h1bmsiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9KCJSdW4gYSBzcGVjaWZpZWQgY2h1bmsgKG46bCksIHRoZSAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJudGggb2YgbGVuIGwsIG9mIHRoZSBsYXlvdXQgdGVzdHMi
KSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJ1bi1wYXJ0IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSgiUnVuIGEgc3BlY2lmaWVkIHBhcnQgKG46bSksIHRoZSBudGggb2Yg
bSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwYXJ0cywgb2YgdGhlIGxh
eW91dCB0ZXN0cyIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tYmF0Y2gt
c2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIlJ1biBhIHRoZSB0ZXN0cyBpbiBiYXRjaGVz
IChuKSwgYWZ0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlcnkg
biB0ZXN0cywgdGhlIHRlc3Qgc2hlbGwgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVsYXVuY2hlZC4iKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIiIs
ICItLWJ1aWxkZXItbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
IkRVTU1ZX0JVSUxERVJfTkFNRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
KCJUaGUgbmFtZSBvZiB0aGUgYnVpbGRlciBzaG93biBvbiB0aGUgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAid2F0ZXJmYWxsIHJ1bm5pbmcgdGhpcyBzY3JpcHQgZS5nLiAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJLaXQuIikpCisgICAgb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZC1uYW1lIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD0iRFVNTVlfQlVJTERfTkFNRSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9KCJUaGUgbmFtZSBvZiB0aGUgYnVpbGRlciB1c2VkIGluIGl0
cyBwYXRoLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlLmcuIHdlYmtp
dC1yZWwuIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1idWlsZC1udW1i
ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJEVU1NWV9CVUlMRF9O
VU1CRVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiVGhlIGJ1aWxkIG51
bWJlciBvZiB0aGUgYnVpbGRlciBydW5uaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGhpcyBzY3JpcHQuIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIi
LCAiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJydW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIikKKyAgICBy
ZXR1cm4gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKK2lmICdfX21haW5fXycgPT0g
X19uYW1lX186CisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQorICAgIG1haW4ob3B0
aW9ucywgYXJncykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
TEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47750</attachid>
            <date>2010-01-29 17:29:46 -0800</date>
            <delta_ts>2010-01-29 17:33:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31498-20100129172945.patch</filename>
            <type>text/plain</type>
            <size>76128</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0MDk0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDEtMjkgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTGFzdCBiaXQgb2YgdGhlIHVwc3RyZWFtaW5nIG9mIHRoZSBDaHJvbWl1bSBy
dW4td2Via2l0LXRlc3RzIHBvcnQuCisgICAgICAgIFRoZXNlIHNjcmlwdHMgYXJlIHVzZWQgdG8g
cGFyc2UgZmFpbHVyZXMgZnJvbSB0aGUgYnVpbGQgYm90cyBhbmQKKyAgICAgICAgY29tcGFyZSB0
aGUgZGlmZmVyZW50IHBsYXRmb3JtIHJlc3VsdHMgYW5kIGJhc2VsaW5lcywgcHJvZHVjaW5nCisg
ICAgICAgIGFub3RoZXIgZGFzaGJvYXJkIHRvIGhlbHAgdXMgbWFuYWdlIGZhaWx1cmVzLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTQ5OAorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFp
bHVyZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXIucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1cmVfZmluZGVyX3Rl
c3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKwogMjAxMC0wMS0yOSAgRGly
ayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNpZWRlbC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1cmUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFpbHVyZS5weQko
cmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2ZhaWx1cmUucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI3IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBD
aHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ0hST01JVU1f
V0lOID0gImNocm9taXVtLXdpbiIKK0NIUk9NSVVNX01BQyA9ICJjaHJvbWl1bS1tYWMiCitDSFJP
TUlVTV9MSU5VWCA9ICJjaHJvbWl1bS1saW51eCIKK1dFQktJVF9XSU5fVElUTEUgPSAiV2ViS2l0
IFdpbiIKK1dFQktJVF9NQUNfVElUTEUgPSAiV2ViS2l0IE1hYyIKK1dFQktJVF9USVRMRSA9ICJX
ZWJLaXQiCitVTktOT1dOID0gIlVua25vd24iCisKK0VYUEVDVEVEX0lNQUdFX0ZJTEVfRU5ESU5H
ID0gIi1leHBlY3RlZC5wbmciCitBQ1RVQUxfSU1BR0VfRklMRV9FTkRJTkcgPSAiLWFjdHVhbC5w
bmciCitVUFNUUkVBTV9JTUFHRV9GSUxFX0VORElORyA9ICItZXhwZWN0ZWQtdXBzdHJlYW0ucG5n
IgorRVhQRUNURURfVEVYVF9GSUxFX0VORElORyA9ICItZXhwZWN0ZWQudHh0IgorQUNUVUFMX1RF
WFRfRklMRV9FTkRJTkcgPSAiLWFjdHVhbC50eHQiCitESUZGX0lNQUdFX0ZJTEVfRU5ESU5HID0g
Ii1kaWZmLnBuZyIKK0RJRkZfVEVYVF9GSUxFX0VORElORyA9ICItZGlmZi50eHQiCisKK0NIUk9N
SVVNX1NSQ19IT01FID0gImh0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvdHJ1
bmsvc3JjL3dlYmtpdC8iCitDSFJPTUlVTV9UUkFDX0hPTUUgPSBDSFJPTUlVTV9TUkNfSE9NRSAr
ICJkYXRhL2xheW91dF90ZXN0cy8iCitXRUJLSVRfVFJBQ19IT01FID0gImh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvYnJvd3Nlci90cnVuay9MYXlvdXRUZXN0cy8iCitXRUJLSVRfU1ZOX0hPU1ROQU1F
ID0gInN2bi53ZWJraXQub3JnIgorVEhJUkRfUEFSVFkgPSAidGhpcmRfcGFydHkiCisKK1dFQktJ
VF9QTEFURk9STV9VUkxfQkFTRSA9IFdFQktJVF9UUkFDX0hPTUUgKyAicGxhdGZvcm0iCitXRUJL
SVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwgPSAiaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRv
cnkvd2Via2l0L3RydW5rLyIKK1dFQktJVF9JTUFHRV9CQVNFTElORV9CQVNFX1VSTF9XSU4gPSAo
V0VCS0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkxheW91dFRlc3RzL3BsYXRmb3JtL3dpbi8iKQorV0VCS0lUX0lNQUdFX0JB
U0VMSU5FX0JBU0VfVVJMX01BQyA9IChXRUJLSVRfTEFZT1VUX1RFU1RfQkFTRV9VUkwgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLyIpCitXRUJLSVRfVFJBQ19JTUFHRV9CQVNFTElORV9CQVNFX1VSTF9NQUMgPSBXRUJLSVRf
UExBVEZPUk1fVVJMX0JBU0UgKyAiL21hYy8iCitXRUJLSVRfVFJBQ19JTUFHRV9CQVNFTElORV9C
QVNFX1VSTF9XSU4gPSBXRUJLSVRfUExBVEZPUk1fVVJMX0JBU0UgKyAiL3dpbi8iCisKK0xBWU9V
VF9URVNUX1JFU1VMVFNfRElSID0gImxheW91dC10ZXN0LXJlc3VsdHMiCisKK0ZBSUwgPSAiRkFJ
TCIKK1RJTUVPVVQgPSAiVElNRU9VVCIKK0NSQVNIID0gIkNSQVNIIgorUEFTUyA9ICJQQVNTIgor
V09OVEZJWCA9ICJXT05URklYIgorCisKK2NsYXNzIEZhaWx1cmUob2JqZWN0KToKKyAgICAiIiIK
KyAgICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBmYWlsdXJlIGluIHRoZSB0ZXN0IG91dHB1dCwg
YW5kIGlzCisgICAgaW50ZW5kZWQgYXMgYSBkYXRhIG1vZGVsIG9iamVjdC4KKyAgICAiIiIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9ICIiCisgICAg
ICAgIHNlbGYudGVzdF9wYXRoID0gIiIKKyAgICAgICAgc2VsZi50ZXh0X2RpZmZfbWlzbWF0Y2gg
PSBGYWxzZQorICAgICAgICBzZWxmLmltYWdlX21pc21hdGNoID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi50aW1lb3V0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5jcmFzaGVkID0gRmFsc2UKKyAgICAgICAg
c2VsZi50ZXh0X2Jhc2VsaW5lX3VybCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmFzZWxpbmVf
dXJsID0gIiIKKyAgICAgICAgc2VsZi50ZXh0X2Jhc2VsaW5lX2FnZSA9ICIiCisgICAgICAgIHNl
bGYuaW1hZ2VfYmFzZWxpbmVfYWdlID0gIiIKKyAgICAgICAgc2VsZi50ZXN0X2FnZSA9ICIiCisg
ICAgICAgIHNlbGYudGV4dF9iYXNlbGluZV9sb2NhbCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2Vf
YmFzZWxpbmVfbG9jYWwgPSAiIgorICAgICAgICBzZWxmLnRleHRfYWN0dWFsX2xvY2FsID0gIiIK
KyAgICAgICAgc2VsZi5pbWFnZV9hY3R1YWxfbG9jYWwgPSAiIgorICAgICAgICBzZWxmLmltYWdl
X2Jhc2VsaW5lX3Vwc3RyZWFtX3VybCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmFzZWxpbmVf
dXBzdHJlYW1fbG9jYWwgPSAiIgorICAgICAgICBzZWxmLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUg
PSAiIgorICAgICAgICBzZWxmLmZsYWtpbmVzcyA9IDAKKworICAgIGRlZiBnZXRfZXhwZWN0ZWRf
aW1hZ2VfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZW5hbWVfZW5kX29m
X3Rlc3RfcGF0aChFWFBFQ1RFRF9JTUFHRV9GSUxFX0VORElORykKKworICAgIGRlZiBnZXRfYWN0
dWFsX2ltYWdlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVuYW1lX2Vu
ZF9vZl90ZXN0X3BhdGgoQUNUVUFMX0lNQUdFX0ZJTEVfRU5ESU5HKQorCisgICAgZGVmIGdldF9l
eHBlY3RlZF90ZXh0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVuYW1l
X2VuZF9vZl90ZXN0X3BhdGgoRVhQRUNURURfVEVYVF9GSUxFX0VORElORykKKworICAgIGRlZiBn
ZXRfYWN0dWFsX3RleHRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZW5h
bWVfZW5kX29mX3Rlc3RfcGF0aChBQ1RVQUxfVEVYVF9GSUxFX0VORElORykKKworICAgIGRlZiBn
ZXRfaW1hZ2VfZGlmZl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlbmFt
ZV9lbmRfb2ZfdGVzdF9wYXRoKERJRkZfSU1BR0VfRklMRV9FTkRJTkcpCisKKyAgICBkZWYgZ2V0
X3RleHRfZGlmZl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlbmFtZV9l
bmRfb2ZfdGVzdF9wYXRoKERJRkZfVEVYVF9GSUxFX0VORElORykKKworICAgIGRlZiBnZXRfaW1h
Z2VfdXBzdHJlYW1fZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZW5hbWVf
ZW5kX29mX3Rlc3RfcGF0aChVUFNUUkVBTV9JTUFHRV9GSUxFX0VORElORykKKworICAgIGRlZiBf
cmVuYW1lX2VuZF9vZl90ZXN0X3BhdGgoc2VsZiwgc3VmZml4KToKKyAgICAgICAgbGFzdF9pbmRl
eCA9IHNlbGYudGVzdF9wYXRoLnJmaW5kKCIuIikKKyAgICAgICAgaWYgbGFzdF9pbmRleCA9PSAt
MToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRlc3RfcGF0aAorICAgICAgICByZXR1cm4gc2Vs
Zi50ZXN0X3BhdGhbMDpsYXN0X2luZGV4XSArIHN1ZmZpeAorCisgICAgZGVmIGdldF90ZXN0X2hv
bWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGVzdF9wYXRoLnN0YXJ0c3dpdGgoImNocm9tZSIp
OgorICAgICAgICAgICAgcmV0dXJuIENIUk9NSVVNX1RSQUNfSE9NRSArIHNlbGYudGVzdF9wYXRo
CisgICAgICAgIHJldHVybiBXRUJLSVRfVFJBQ19IT01FICsgc2VsZi50ZXN0X3BhdGgKKworICAg
IGRlZiBnZXRfaW1hZ2VfYmFzZWxpbmVfdHJhY19ob21lKHNlbGYpOgorICAgICAgICBpZiBzZWxm
LmlzX2ltYWdlX2Jhc2VsaW5lX2luX3dlYmtpdCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X2dldF90cmFjX2hvbWUoc2VsZi5pbWFnZV9iYXNlbGluZV91cmwpCisgICAgICAgIHJldHVybiBz
ZWxmLmltYWdlX2Jhc2VsaW5lX3VybAorCisgICAgZGVmIGdldF90ZXh0X2Jhc2VsaW5lX3RyYWNf
aG9tZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXh0X2Jhc2VsaW5lX3VybCBhbmQgc2VsZi5p
c190ZXh0X2Jhc2VsaW5lX2luX3dlYmtpdCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dl
dF90cmFjX2hvbWUoc2VsZi50ZXh0X2Jhc2VsaW5lX3VybCkKKyAgICAgICAgcmV0dXJuIHNlbGYu
dGV4dF9iYXNlbGluZV91cmwKKworICAgIGRlZiBfZ2V0X3RyYWNfaG9tZShzZWxmLCBmaWxlKToK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9UUkFDX0hPTUUgKyBmaWxlW2ZpbGUuZmluZCgiTGF5b3V0
VGVzdHMiKTpdCisKKyAgICBkZWYgZ2V0X3RleHRfYmFzZWxpbmVfbG9jYXRpb24oc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9nZXRfZmlsZV9sb2NhdGlvbihzZWxmLnRleHRfYmFzZWxpbmVf
dXJsKQorCisgICAgZGVmIGdldF9pbWFnZV9iYXNlbGluZV9sb2NhdGlvbihzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2dldF9maWxlX2xvY2F0aW9uKHNlbGYuaW1hZ2VfYmFzZWxpbmVfdXJs
KQorCisgICAgIyBUT0RPKGd3aWxzb24pOiBSZWZhY3RvciB0aGlzIGxvZ2ljIHNvIGl0IGNhbiBi
ZSB1c2VkIGJ5IG11bHRpcGxlIHNjcmlwdHMuCisgICAgIyBUT0RPKGd3aWxzb24pOiBDaGFuZ2Ug
dGhpcyBzbyB0aGF0IGl0IHJlc3BlY3RzIHRoZSBmYWxsYmFjayBvcmRlciBvZgorICAgICMgZGlm
ZmVyZW50IHBsYXRmb3Jtcy4gKElmIHBsYXRmb3JtIGlzIG1hYywgdGhlIGZhbGxiYWNrIHNob3Vs
ZCBiZQorICAgICMgZGlmZmVyZW50LikKKworICAgIGRlZiBfZ2V0X2ZpbGVfbG9jYXRpb24oc2Vs
ZiwgZmlsZSk6CisgICAgICAgIGlmIG5vdCBmaWxlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KyAgICAgICAgaWYgZmlsZS5maW5kKENIUk9NSVVNX1dJTikgPiAtMToKKyAgICAgICAgICAgIHJl
dHVybiBDSFJPTUlVTV9XSU4KKyAgICAgICAgaWYgZmlsZS5maW5kKENIUk9NSVVNX01BQykgPiAt
MToKKyAgICAgICAgICAgIHJldHVybiBDSFJPTUlVTV9NQUMKKyAgICAgICAgaWYgZmlsZS5maW5k
KENIUk9NSVVNX0xJTlVYKSA+IC0xOgorICAgICAgICAgICAgcmV0dXJuIENIUk9NSVVNX0xJTlVY
CisgICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChXRUJLSVRfSU1BR0VfQkFTRUxJTkVfQkFTRV9V
UkxfV0lOKToKKyAgICAgICAgICAgIHJldHVybiBXRUJLSVRfV0lOX1RJVExFCisgICAgICAgIGlm
IGZpbGUuc3RhcnRzd2l0aChXRUJLSVRfSU1BR0VfQkFTRUxJTkVfQkFTRV9VUkxfTUFDKToKKyAg
ICAgICAgICAgIHJldHVybiBXRUJLSVRfTUFDX1RJVExFCisgICAgICAgICMgVE9ETyhnd2lsc29u
KTogQWRkIG1hYy1zbm93bGVvcGFyZCwgbWFjLWxlb3BhcmQsIG1hYy10aWdlciBoZXJlLgorICAg
ICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoV0VCS0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMKToKKyAg
ICAgICAgICAgIHJldHVybiBXRUJLSVRfVElUTEUKKyAgICAgICAgcmV0dXJuIFVOS05PV04KKwor
ICAgIGRlZiBfaXNfZmlsZV9pbl93ZWJraXQoc2VsZiwgZmlsZSk6CisgICAgICAgIHJldHVybiBm
aWxlICE9IE5vbmUgYW5kIChmaWxlLmZpbmQoV0VCS0lUX1NWTl9IT1NUTkFNRSkgPiAtMSBvcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5maW5kKFRISVJEX1BBUlRZKSA+
IC0xKQorCisgICAgZGVmIGlzX2ltYWdlX2Jhc2VsaW5lX2luX2Nocm9taXVtKHNlbGYpOgorICAg
ICAgICByZXR1cm4gbm90IHNlbGYuaXNfaW1hZ2VfYmFzZWxpbmVfaW5fd2Via2l0KCkKKworICAg
IGRlZiBpc19pbWFnZV9iYXNlbGluZV9pbl93ZWJraXQoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9pc19maWxlX2luX3dlYmtpdChzZWxmLmltYWdlX2Jhc2VsaW5lX3VybCkKKworICAgIGRl
ZiBpc190ZXh0X2Jhc2VsaW5lX2luX2Nocm9taXVtKHNlbGYpOgorICAgICAgICByZXR1cm4gbm90
IHNlbGYuaXNfdGV4dF9iYXNlbGluZV9pbl93ZWJraXQoKQorCisgICAgZGVmIGlzX3RleHRfYmFz
ZWxpbmVfaW5fd2Via2l0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faXNfZmlsZV9pbl93
ZWJraXQoc2VsZi50ZXh0X2Jhc2VsaW5lX3VybCkKKworICAgIGRlZiBnZXRfdGV4dF9yZXN1bHRf
bG9jYXRpb25faW5femlwX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZmls
ZV9sb2NhdGlvbl9pbl96aXBfZmlsZSgKKyAgICAgICAgICAgIHNlbGYuZ2V0X2FjdHVhbF90ZXh0
X2ZpbGVuYW1lKCkpCisKKyAgICBkZWYgZ2V0X2ltYWdlX3Jlc3VsdF9sb2NhdGlvbl9pbl96aXBf
ZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9maWxlX2xvY2F0aW9uX2luX3pp
cF9maWxlKAorICAgICAgICAgICAgc2VsZi5nZXRfYWN0dWFsX2ltYWdlX2ZpbGVuYW1lKCkpCisK
KyAgICBkZWYgX2dldF9maWxlX2xvY2F0aW9uX2luX3ppcF9maWxlKHNlbGYsIGZpbGUpOgorICAg
ICAgICByZXR1cm4gIiVzLyVzIiAlIChMQVlPVVRfVEVTVF9SRVNVTFRTX0RJUiwgZmlsZSkKKwor
ICAgICMgVE9ETyhnd2lsc29uKTogaW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIGRlZiBnZXRf
YWxsX2Jhc2VsaW5lX2xvY2F0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICMgVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0ZXN0IGlzIGFjdHVhbGx5IGV4
cGVjdGVkIHRvIGZhaWwsCisgICAgIyBpbiBvcmRlciB0byBrbm93IHdoZXRoZXIgdG8gcmV0cmll
dmUgZXhwZWN0ZWQgdGVzdCByZXN1bHRzIGZvciBpdC4KKyAgICAjICh0ZXN0IHJlc3VsdHMgZG9u
dCBleGlzdCBmb3IgdGVzdHMgZXhwZWN0ZWQgdG8gZmFpbC9jcmFzaC4pCisKKyAgICBkZWYgaXNf
ZXhwZWN0ZWRfdG9fZmFpbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfa2V5d29y
ZF9pbl9leHBlY3RhdGlvbnMoRkFJTCkKKworICAgIGRlZiBpc19leHBlY3RlZF90b190aW1lb3V0
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9u
cyhUSU1FT1VUKQorCisgICAgZGVmIGlzX2V4cGVjdGVkX3RvX2NyYXNoKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZmluZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhDUkFTSCkKKworICAg
IGRlZiBpc19leHBlY3RlZF90b19wYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlu
ZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhQQVNTKQorCisgICAgZGVmIGlzX3dvbnRfZml4KHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9rZXl3b3JkX2luX2V4cGVjdGF0aW9ucyhX
T05URklYKQorCisgICAgZGVmIF9maW5kX2tleXdvcmRfaW5fZXhwZWN0YXRpb25zKHNlbGYsIGtl
eXdvcmQpOgorICAgICAgICBpZiAobm90IHNlbGYudGVzdF9leHBlY3RhdGlvbnNfbGluZSBvcgor
ICAgICAgICAgICAgbGVuKHNlbGYudGVzdF9leHBlY3RhdGlvbnNfbGluZSkgPT0gMCk6CisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19s
aW5lLmZpbmQoa2V5d29yZCkgPiAtMToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAg
IHJldHVybiBGYWxzZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFpbHVyZS5weQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRlci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9mYWlsdXJlX2ZpbmRlci5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2ZhaWx1cmVf
ZmluZGVyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyMiBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVE9ETyhnd2lsc29uKTogMS4gIENoYW5n
ZSB0ZXh0IGRpZmZlcnMgdG8gdXNlIGV4dGVybmFsIHV0aWxzLgorIyAgICAgICAgICAgICAgICAy
LiAgQ2hhbmdlIHRleHRfZXhwZWN0YXRpb25zIHBhcnNpbmcgdG8gZXhpc3RpbmcKKyMgICAgICAg
ICAgICAgICAgICAgIGxvZ2ljIGluIGxheW91dF9wYWdja2FnZS50ZXN0X2V4cGVjdGF0aW9ucy4K
KworaW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgcGF0aF91
dGlscworaW1wb3J0IHBsYXRmb3JtX3V0aWxzCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2lt
cG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHppcGZp
bGUKKworZnJvbSBmYWlsdXJlIGltcG9ydCBGYWlsdXJlCisKK1dFQktJVF9UUkFDX0hPU1ROQU1F
ID0gInRyYWMud2Via2l0Lm9yZyIKK1dFQktJVF9MQVlPVVRfVEVTVF9CQVNFX1VSTCA9ICgiaHR0
cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ3ZWJraXQvdHJ1bmsvTGF5b3V0VGVzdHMvIikKK1dFQktJVF9QTEFURk9STV9CQVNF
TElORV9VUkwgPSAoV0VCS0lUX0xBWU9VVF9URVNUX0JBU0VfVVJMICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInBsYXRmb3JtLyVzLyIpCisKK0JVSUxEQk9UX0JBU0UgPSAiaHR0
cDovL2J1aWxkLmNocm9taXVtLm9yZy9idWlsZGJvdC8iCitXRUJLSVRfQlVJTERFUl9CQVNFID0g
QlVJTERCT1RfQkFTRSArICJ3YXRlcmZhbGwvYnVpbGRlcnMvJXMiCitGWUlfQlVJTERFUl9CQVNF
ID0gQlVJTERCT1RfQkFTRSArICJ3YXRlcmZhbGwuZnlpL2J1aWxkZXJzLyVzIgorUkVTVUxUU19V
UkxfQkFTRSA9ICIvYnVpbGRzLyVzL3N0ZXBzL3dlYmtpdF90ZXN0cy9sb2dzL3N0ZGlvIgorQVJD
SElWRV9VUkxfQkFTRSA9ICIvYnVpbGRzLyVzL3N0ZXBzL2FyY2hpdmVfd2Via2l0X3Rlc3RzX3Jl
c3VsdHMvbG9ncy9zdGRpbyIKK1pJUF9GSUxFX1VSTF9CQVNFID0gKEJVSUxEQk9UX0JBU0UgKwor
ICAgICAgICAgICAgICAgICAgICAgImxheW91dF90ZXN0X3Jlc3VsdHMvJXMvJXMvbGF5b3V0LXRl
c3QtcmVzdWx0cy56aXAiKQorQ0hST01JVU1fU1JDX0hPTUUgPSAiaHR0cDovL3NyYy5jaHJvbWl1
bS5vcmcvdmlld3ZjL2Nocm9tZS90cnVuay9zcmMvd2Via2l0LyIKK0xBWU9VVF9URVNUX1JFUE9f
QkFTRV9VUkwgPSBDSFJPTUlVTV9TUkNfSE9NRSArICJkYXRhL2xheW91dF90ZXN0cy8iCisKKyMg
VE9ETyhnd2lsc29uKTogUHV0IGZsYWt5IHRlc3QgZGFzaGJvYXJkIFVSTCBoZXJlIHdoZW4gcmVh
ZHkuCitGTEFLWV9URVNUX1VSTCA9ICIiCitGTEFLWV9URVNUX1JFR0VYID0gIiVzPC9hPjwvdGQ+
PHRkIGFsaWduPXJpZ2h0PihcZCspPC90ZD4iCisKK1RFU1RfRVhQRUNUQVRJT05TX1VSTCA9IChD
SFJPTUlVTV9TUkNfSE9NRSArCisgICAgICAgICAgICAgICAgICAgICAgICAgInRvb2xzL2xheW91
dF90ZXN0cy90ZXN0X2V4cGVjdGF0aW9ucy50eHQiKQorCisjIEZhaWx1cmUgdHlwZXMgYXMgZm91
bmQgaW4gYnVpbGRlciBzdGRpby4KK1RFWFRfRElGRl9NSVNNQVRDSCA9ICJUZXh0IGRpZmYgbWlz
bWF0Y2giCitJTUFHRV9NSVNNQVRDSCA9ICJJbWFnZSBtaXNtYXRjaCIKK1RFU1RfVElNRURfT1VU
ID0gIlRlc3QgdGltZWQgb3V0IgorVEVTVF9TSEVMTF9DUkFTSEVEID0gIlRlc3Qgc2hlbGwgY3Jh
c2hlZCIKKworQ0hST01JVU1fV0lOID0gImNocm9taXVtLXdpbiIKK0NIUk9NSVVNX1dJTl9YUCA9
ICJjaHJvbWl1bS13aW4teHAiCitDSFJPTUlVTV9XSU5fVklTVEEgPSAiY2hyb21pdW0td2luLXZp
c3RhIgorQ0hST01JVU1fV0lOXzcgPSAiY2hyb21pdW0td2luLTciCitDSFJPTUlVTV9NQUMgPSAi
Y2hyb21pdW0tbWFjIgorQ0hST01JVU1fTElOVVggPSAiY2hyb21pdW0tbGludXgiCitQTEFURk9S
TSA9ICJwbGF0Zm9ybSIKK0xBWU9VVFRFU1RTID0gIkxheW91dFRlc3RzIgorCisjIFRoZXNlIHBs
YXRmb3JtIGRpcnMgbXVzdCBiZSBpbiBvcmRlciBvZiB0aGVpciBwcmVjZWRlbmNlLgorIyBUT0RP
KGd3aWxzb24pOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBmYWxsYmFjayBvcmRlciBhcyB0ZXN0X3No
ZWxsLiAgVGhpcyBsaXN0CisjIHNob3VsZCBiZSByZXZlcnNlZCwgYW5kIHdlIG5lZWQgdG8gYWRk
IGRldGVjdGlvbiBmb3IgdGhlIHR5cGUgb2YgT1MgdGhhdAorIyB0aGUgZ2l2ZW4gYnVpbGRlciBp
cyBydW5uaW5nLgorV0VCS0lUX01BQ19QTEFURk9STV9ESVJTID0gWyJtYWMtbGVvcGFyZCIsICJt
YWMtc25vd2xlb3BhcmQiLCAibWFjIl0KK1dFQktJVF9XSU5fUExBVEZPUk1fRElSUyA9IFsid2lu
IiwgIm1hYyJdCitDSFJPTUlVTV9NQUNfUExBVEZPUk1fRElSUyA9IFtDSFJPTUlVTV9NQUNdCitD
SFJPTUlVTV9XSU5fUExBVEZPUk1fRElSUyA9IFtDSFJPTUlVTV9XSU5fWFAsIENIUk9NSVVNX1dJ
Tl9WSVNUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dJTl83LCBD
SFJPTUlVTV9XSU5dCitDSFJPTUlVTV9MSU5VWF9QTEFURk9STV9ESVJTID0gW0NIUk9NSVVNX0xJ
TlVYLCBDSFJPTUlVTV9XSU5dCisKK0FSQ0hJVkVfVVJMX1JFR0VYID0gImxhc3QuKmNoYW5nZTog
KFxkKykiCitCVUlMRF9OQU1FX1JFR0VYID0gImJ1aWxkIG5hbWU6IChbXlxzXSopIgorQ0hST01J
VU1fRklMRV9BR0VfUkVHRVggPSAnPGJyIC8+XHMqTW9kaWZpZWRccyo8ZW0+Lio8L2VtPiBcKCgu
KilcKSBieScKK1RIUkVBRF9OQU1FX1JFR0VYID0gIltcU10rPyIKK1RFU1RfUEFUSF9SRUdFWCA9
ICJbXFNdKz8iCitGQUlMRURfUkVHRVggPSAoIkRFQlVHICIgKyBUSFJFQURfTkFNRV9SRUdFWCAr
ICIgIiArCisgICAgICAgICAgICAgICAgIigiICsgVEVTVF9QQVRIX1JFR0VYICsgIikgZmFpbGVk
OlxzKiIKKyAgICAgICAgICAgICAgICAiKCIgKyBURVhUX0RJRkZfTUlTTUFUQ0ggKyAiKT9ccyoi
CisgICAgICAgICAgICAgICAgIigiICsgSU1BR0VfTUlTTUFUQ0ggKyAiKT9ccyoiCisgICAgICAg
ICAgICAgICAgIigiICsgVEVTVF9USU1FRF9PVVQgKyAiKT9ccyoiCisgICAgICAgICAgICAgICAg
IigiICsgVEVTVF9TSEVMTF9DUkFTSEVEICsgIik/IikKK0ZBSUxFRF9VTkVYUEVDVEVEX1JFR0VY
ID0gIiAgW15cc10rKD86ID0gLio/KT9cbiIKK0xBU1RfQlVJTERfUkVHRVggPSAoIjxoMj5SZWNl
bnQgQnVpbGRzOjwvaDI+IgorICAgICAgICAgICAgICAgICAgICAiW1xzXFNdKj88YSBocmVmPVwi
Li4vYnVpbGRlcnMvLio/L2J1aWxkcy8oXGQrKVwiPiIpCisjIFNvbWV0aW1lcyB0aGUgbGluZXMg
b2YgaHlwaGVucyBnZXRzIGludGVycnVwdGVkIHdpdGggbXVsdGlwbGUgcHJvY2Vzc2VzCisjIG91
dHB1dHRpbmcgdG8gc3RkaW8sIHNvIGRvbid0IHJlbHkgb24gdGhlbSBiZWluZyBjb250aWd1b3Vz
LgorU1VNTUFSWV9SRUdFWCA9ICgiXGQrIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgIgorICAgICAg
ICAgICAgICAgICAiXGQrIGRpZG4ndDooLio/KS17Nzh9IikgICMgLXs3OH0gLS0+IDc4IGRhc2hl
cyBpbiBhIHJvdy4KK1NVTU1BUllfUkVHUkVTU0lPTlMgPSAiUmVncmVzc2lvbnM6Lio/XG4oKD86
ICBbXlxzXSsoPzogPSAuKj8pP1xuKSspIgorVEVTVF9FWFBFQ1RBVElPTlNfUExBVEZPUk1fUkVH
RVggPSAiKChXT05URklYIHxCVUcuKiApKy4qICVzLiogOiAlcyA9IFteXG5dKikiCitURVNUX0VY
UEVDVEFUSU9OU19OT19QTEFURk9STV9SRUdFWCA9ICgiKChXT05URklYIHxCVUcuKiApKy4qIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIig/IVdJTikoPyFMSU5VWCko
PyFNQUMpLiogOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXMg
PSBbXlxuXSopIikKKworV0VCS0lUX0ZJTEVfQUdFX1JFR0VYID0gKCc8YSBjbGFzcz0iZmlsZSIg
dGl0bGU9IlZpZXcgRmlsZSIgaHJlZj0iJXMiPi4qPzwvYT4uJworICAgJyo/PHRkIGNsYXNzPSJh
Z2UiIC4qPz5ccyonCisgICAnPGEgY2xhc3M9InRpbWVsaW5lIiBocmVmPSIuKj8iIHRpdGxlPSIu
Kj8iPiguKj8pPC9hPicpCisKK0xPQ0FMX0JBU0VMSU5FX1JFR0VYRVMgPSBbCisgICIuKi90aGly
ZF9wYXJ0eS9XZWJraXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vLio/KC8uKikiLAorICAiLiovdGhp
cmRfcGFydHkvV2Via2l0L0xheW91dFRlc3RzKC8uKikiLAorICAiLiovd2Via2l0L2RhdGEvbGF5
b3V0X3Rlc3RzL3BsYXRmb3JtLy4qPy9MYXlvdXRUZXN0cygvLiopIiwKKyAgIi4qL3dlYmtpdC9k
YXRhL2xheW91dF90ZXN0cy9wbGF0Zm9ybS8uKj8oLy4qKSIsCisgICIuKi93ZWJraXQvZGF0YS9s
YXlvdXRfdGVzdHMoLy4qKSIsCisgICIoLy4qKSJdCisKK1VQU1RSRUFNX0lNQUdFX0ZJTEVfRU5E
SU5HID0gIi11cHN0cmVhbS5wbmciCisKK1RFU1RfRVhQRUNUQVRJT05TX1dPTlRGSVggPSAiV09O
VEZJWCIKKworVEVNUF9aSVBfRElSID0gInRlbXAtemlwLWRpciIKKworVEFSR0VUUyA9IFsiUmVs
ZWFzZSIsICJEZWJ1ZyJdCisKKworZGVmIGdldF91cmxfYmFzZSh1c2VfZnlpKToKKyAgICBpZiB1
c2VfZnlpOgorICAgICAgICByZXR1cm4gRllJX0JVSUxERVJfQkFTRQorICAgIHJldHVybiBXRUJL
SVRfQlVJTERFUl9CQVNFCisKKworZGVmIGdldF9yZXN1bHRzX3VybChidWlsZCwgcGxhdGZvcm0s
IHVzZV9meWk9RmFsc2UpOgorICAgIHJldHVybiAoZ2V0X3VybF9iYXNlKHVzZV9meWkpICsgUkVT
VUxUU19VUkxfQkFTRSkgJSAocGxhdGZvcm0sIGJ1aWxkKQorCisKK2RlZiBnZXRfYXJjaGl2ZV91
cmwoYnVpbGQsIHBsYXRmb3JtLCB1c2VfZnlpPUZhbHNlKToKKyAgICByZXR1cm4gKGdldF91cmxf
YmFzZSh1c2VfZnlpKSArIEFSQ0hJVkVfVVJMX0JBU0UpICUgKHBsYXRmb3JtLCBidWlsZCkKKwor
CitkZWYgZ2V0X3ppcF9maWxlX3VybChidWlsZCwgcGxhdGZvcm0pOgorICAgIHJldHVybiBaSVBf
RklMRV9VUkxfQkFTRSAlIChwbGF0Zm9ybSwgYnVpbGQpCisKKworZGVmIGdldF9idWlsZGVyX3Vy
bChwbGF0Zm9ybSwgdXNlX2Z5aT1GYWxzZSk6CisgICAgcmV0dXJuIGdldF91cmxfYmFzZSh1c2Vf
ZnlpKSAlIHBsYXRmb3JtCisKKworIyBUT0RPKGd3aWxzb24pOiBPbmNlIHRoZSBuZXcgZmxha2lu
ZXNzIGRhc2hib2FyZCBpcyBkb25lLCBjb25uZWN0IGl0IGhlcmUuCitkZWYgZ2V0X2ZsYWt5X3Rl
c3RfdXJsKHBsYXRmb3JtKToKKyAgICByZXR1cm4gIiIKKworCisjIFRPRE8oZ3dpbHNvbik6IGNh
biB3ZSByZWZhY3RvciB0aGVzZSBpbnRvIHRoZSByZXNvdXJjZWdhdGhlcmVyPworZGVmIGlzX2xp
bnV4X3BsYXRmb3JtKHBsYXRmb3JtKToKKyAgICByZXR1cm4gKHBsYXRmb3JtIGFuZCBwbGF0Zm9y
bS5maW5kKCJMaW51eCIpID4gLTEpCisKKworZGVmIGlzX21hY19wbGF0Zm9ybShwbGF0Zm9ybSk6
CisgICAgcmV0dXJuIChwbGF0Zm9ybSBhbmQgcGxhdGZvcm0uZmluZCgiTWFjIikgPiAtMSkKKwor
CitkZWYgY3JlYXRlX2RpcmVjdG9yeShkaXIpOgorICAgICIiIgorICAgIE1ldGhvZCB0aGF0IGNy
ZWF0ZXMgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZ2l2ZW4uCisgICAgVGhpcyB3aWxsIGNyZWF0
ZSBkaXJlY3RvcmllcyByZWN1cnNpdmVseSB1bnRpbCB0aGUgZ2l2ZW4gZGlyIGV4aXN0cy4KKyAg
ICAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgb3MubWFrZWRp
cnMoZGlyLCAwNzc3KQorCisKK2RlZiBleHRyYWN0X2ZpcnN0X3ZhbHVlKHN0cmluZywgcmVnZXgp
OgorICAgIG0gPSByZS5zZWFyY2gocmVnZXgsIHN0cmluZykKKyAgICBpZiBtIGFuZCBtLmdyb3Vw
KDEpOgorICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKworZGVm
IGV4dHJhY3Rfc2luZ2xlX3JlZ2V4X2F0X3VybCh1cmwsIHJlZ2V4KToKKyAgICBjb250ZW50ID0g
c2NyYXBlX3VybCh1cmwpCisgICAgbSA9IHJlLnNlYXJjaChyZWdleCwgY29udGVudCwgcmUuRE9U
QUxMKQorICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSk6CisgICAgICAgIHJldHVybiBtLmdyb3VwKDEp
CisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgc2NyYXBlX3VybCh1cmwpOgorICAgIHJldHVybiB1
cmxsaWIyLnVybG9wZW4odXJsbGliMi5SZXF1ZXN0KHVybCkpLnJlYWQoKQorCisKK2RlZiBnZXRf
aW1hZ2VfZGlmZl9leGVjdXRhYmxlKCk6CisgICAgZm9yIHRhcmdldCBpbiBUQVJHRVRTOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcGF0aF91dGlscy5pbWFnZV9kaWZmX3BhdGgo
dGFyZ2V0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgY29udGlu
dWUKKyAgICAgICAgICAgICMgVGhpcyBidWlsZCB0YXJnZXQgZGlkIG5vdCBleGlzdCwgdHJ5IHRo
ZSBuZXh0IG9uZS4KKyAgICByYWlzZSBFeGNlcHRpb24oIk5vIGltYWdlIGRpZmYgZXhlY3V0YWJs
ZSBjb3VsZCBiZSBmb3VuZC4gIFlvdSBtYXkgbmVlZCAiCisgICAgICAgICAgICAgICAgICAgICJ0
byBidWlsZCB0aGUgaW1hZ2UgZGlmZiBwcm9qZWN0IHVuZGVyIGF0IGxlYXN0IG9uZSBidWlsZCAi
CisgICAgICAgICAgICAgICAgICAgICJ0YXJnZXQgdG8gY3JlYXRlIGltYWdlIGRpZmZzLiIpCisK
KworZGVmIGdlbmVyYXRlX3BuZ19kaWZmKGZpbGUxLCBmaWxlMiwgb3V0cHV0X2ZpbGUpOgorICAg
IF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNlCisgICAgdHJ5OgorICAgICAgICBleGVjdXRhYmxl
ID0gZ2V0X2ltYWdlX2RpZmZfZXhlY3V0YWJsZSgpCisgICAgICAgIGNtZCA9IFtleGVjdXRhYmxl
LCAnLS1kaWZmJywgZmlsZTEsIGZpbGUyLCBvdXRwdXRfZmlsZV0KKyAgICAgICAgX2NvbXBhcmVf
YXZhaWxhYmxlID0gVHJ1ZQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIHByaW50
ICJObyBjb21tYW5kIGxpbmUgdG8gY29tcGFyZSAlcyBhbmQgJXMgOiAlcyIgJSAoZmlsZTEsIGZp
bGUyLCBlKQorCisgICAgcmVzdWx0ID0gMQorICAgIGlmIF9jb21wYXJlX2F2YWlsYWJsZToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCkKKyAg
ICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5v
LkVOT0VOVCBvciBlLmVycm5vID09IGVycm5vLkVBQ0NFUzoKKyAgICAgICAgICAgICAgICBfY29t
cGFyZV9hdmFpbGFibGUgPSBGYWxzZQorICAgICAgICAgICAgICAgIHByaW50ICJObyBwb3NzaWJs
ZSBjb21wYXJpc29uIGJldHdlZW4gJXMgYW5kICVzLiIgJSAoCisgICAgICAgICAgICAgICAgICAg
IGZpbGUxLCBmaWxlMikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2Ug
ZQorICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgIHByaW50ICJUaGUgZ2l2ZW4gUE5HIGltYWdl
cyB3ZXJlIHRoZSBzYW1lISIKKyAgICByZXR1cm4gX2NvbXBhcmVfYXZhaWxhYmxlCisKKworIyBU
T0RPKGd3aWxzb24pOiBDaGFuZ2UgdGhpcyB0byB1c2UgdGhlIHByZXR0eSBwcmludCBkaWZmZXJz
LgorZGVmIGdlbmVyYXRlX3RleHRfZGlmZihmaWxlMSwgZmlsZTIsIG91dHB1dF9maWxlKToKKyAg
ICAjIE9wZW4gdXAgZXhwZWN0ZWQgYW5kIGFjdHVhbCB0ZXh0IGZpbGVzIGFuZCB1c2UgZGlmZmxp
YiB0byBjb21wYXJlIHRoZW0uCisgICAgZGF0YUEgPSBvcGVuKGZpbGUxLCAncicpLnJlYWQoKQor
ICAgIGRhdGFCID0gb3BlbihmaWxlMiwgJ3InKS5yZWFkKCkKKyAgICBkID0gZGlmZmxpYi5EaWZm
ZXIoKQorICAgIGRpZmZzID0gbGlzdChkLmNvbXBhcmUoZGF0YUEuc3BsaXQoIlxuIiksIGRhdGFC
LnNwbGl0KCJcbiIpKSkKKyAgICBvdXRwdXQgPSBvcGVuKG91dHB1dF9maWxlLCAndycpCisgICAg
b3V0cHV0LndyaXRlKCJcbiIuam9pbihkaWZmcykpCisgICAgb3V0cHV0LmNsb3NlKCkKKworCitj
bGFzcyBCYXNlbGluZUNhbmRpZGF0ZShvYmplY3QpOgorICAgICIiIlNpbXBsZSBkYXRhIG9iamVj
dCBmb3IgaG9sZGluZyB0aGUgVVJMIGFuZCBsb2NhbCBmaWxlIHBhdGggb2YgYQorICAgIHBvc3Np
YmxlIGJhc2VsaW5lLiAgVGhlIGxvY2FsIGZpbGUgcGF0aCBpcyBtZWFudCB0byByZWZlciB0byB0
aGUgbG9jYWxseS0KKyAgICBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBhdCB0aGUgVVJMLiIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2FsLCB1cmwpOgorICAgICAgICBzZWxmLmxv
Y2FsX2ZpbGUgPSBsb2NhbAorICAgICAgICBzZWxmLmJhc2VsaW5lX3VybCA9IHVybAorCisgICAg
ZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5sb2NhbF9maWxlICE9IE5v
bmUgYW5kIHNlbGYuYmFzZWxpbmVfdXJsICE9IE5vbmUKKworCitjbGFzcyBGYWlsdXJlRmluZGVy
KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgYnVp
bGQsCisgICAgICAgICAgICAgICAgIGJ1aWxkZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgZXhj
bHVkZV9rbm93bl9mYWlsdXJlcywKKyAgICAgICAgICAgICAgICAgdGVzdF9yZWdleCwKKyAgICAg
ICAgICAgICAgICAgb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgbWF4X2ZhaWx1cmVzLAor
ICAgICAgICAgICAgICAgICB2ZXJib3NlLAorICAgICAgICAgICAgICAgICBidWlsZGVyX291dHB1
dF9sb2dfZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICBhcmNoaXZlX3N0ZXBfbG9nX2ZpbGU9
Tm9uZSwKKyAgICAgICAgICAgICAgICAgemlwX2ZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
dGVzdF9leHBlY3RhdGlvbnNfZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5idWlsZCA9IGJ1aWxk
CisgICAgICAgICMgVE9ETyhnd2lsc29uKTogYWRkIGZ1bGwgdXJsLWVuY29kaW5nIGZvciB0aGUg
cGxhdGZvcm0uCisgICAgICAgIHNlbGYuc2V0X3BsYXRmb3JtKGJ1aWxkZXJfbmFtZSkKKyAgICAg
ICAgc2VsZi5leGNsdWRlX2tub3duX2ZhaWx1cmVzID0gZXhjbHVkZV9rbm93bl9mYWlsdXJlcwor
ICAgICAgICBzZWxmLmV4Y2x1ZGVfd29udGZpeCA9IFRydWUKKyAgICAgICAgc2VsZi50ZXN0X3Jl
Z2V4ID0gdGVzdF9yZWdleAorICAgICAgICBzZWxmLm91dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisg
ICAgICAgIHNlbGYubWF4X2ZhaWx1cmVzID0gbWF4X2ZhaWx1cmVzCisgICAgICAgIHNlbGYudmVy
Ym9zZSA9IHZlcmJvc2UKKyAgICAgICAgc2VsZi5meWlfYnVpbGRlciA9IEZhbHNlCisgICAgICAg
IHNlbGYuX2ZsYWt5X3Rlc3RfY2FjaGUgPSB7fQorICAgICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0
aW9uc19jYWNoZSA9IE5vbmUKKyAgICAgICAgIyBJZiB0cnVlLCBzY3JhcGluZyB3aWxsIHN0aWxs
IGhhcHBlbiBidXQgbm8gZmlsZXMgd2lsbCBiZSBkb3dubG9hZGVkLgorICAgICAgICBzZWxmLmRv
bnRfZG93bmxvYWQgPSBGYWxzZQorICAgICAgICAjIExvY2FsIGNhY2hlcyBvZiBsb2cgZmlsZXMu
ICBJZiBzZXQsIHRoZSBmaW5kZXIgd2lsbCB1c2UgdGhlc2UgZmlsZXMKKyAgICAgICAgIyByYXRo
ZXIgdGhhbiBzY3JhcGluZyB0aGVtIGZyb20gdGhlIGJ1aWxkYm90LgorICAgICAgICBzZWxmLmJ1
aWxkZXJfb3V0cHV0X2xvZ19maWxlID0gYnVpbGRlcl9vdXRwdXRfbG9nX2ZpbGUKKyAgICAgICAg
c2VsZi5hcmNoaXZlX3N0ZXBfbG9nX2ZpbGUgPSBhcmNoaXZlX3N0ZXBfbG9nX2ZpbGUKKyAgICAg
ICAgc2VsZi56aXBfZmlsZSA9IHppcF9maWxlCisgICAgICAgIHNlbGYudGVzdF9leHBlY3RhdGlv
bnNfZmlsZSA9IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGUKKyAgICAgICAgc2VsZi5kZWxldGVfemlw
X2ZpbGUgPSBUcnVlCisgICAgICAgICMgRGV0ZXJtaW5lcyBpZiB0aGUgc2NyaXB0IHNob3VsZCBz
Y3JhcGUgdGhlIGJhc2VsaW5lcyBmcm9tIHdlYmtpdC5vcmcKKyAgICAgICAgIyBhbmQgY2hyb21p
dW0ub3JnLCBvciBpZiBpdCBzaG91bGQgdXNlIGxvY2FsIGJhc2VsaW5lcyBpbiB0aGUgY3VycmVu
dAorICAgICAgICAjIGNoZWNrb3V0LgorICAgICAgICBzZWxmLnVzZV9sb2NhbF9iYXNlbGluZXMg
PSBGYWxzZQorCisgICAgZGVmIHNldF9wbGF0Zm9ybShzZWxmLCBwbGF0Zm9ybSk6CisgICAgICAg
IHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCIgIiwgIiUyMCIpCisKKyAgICAjIFRP
RE8oZ3dpbHNvbik6IENoYW5nZSB0aGlzIHRvIGdldCB0aGUgbGFzdCBidWlsZCB0aGF0IGZpbmlz
aGVkCisgICAgIyBzdWNjZXNzZnVsbHkuCisKKyAgICBkZWYgZ2V0X2xhc3RfYnVpbGQoc2VsZik6
CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBsYXN0IGJ1aWxkIG51bWJlciBmb3Ig
dGhpcyBwbGF0Zm9ybS4KKyAgICAgICAgSWYgdXNlX2Z5aSBpcyB0cnVlLCB0aGlzIG9ubHkgbG9v
a3MgYXQgdGhlIGZ5aSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgcmV0dXJuIGV4dHJhY3Rfc2luZ2xlX3JlZ2V4X2F0X3VybChnZXRfYnVpbGRlcl91cmwo
c2VsZi5wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICBzZWxmLmZ5aV9idWlsZGVyKSwgTEFTVF9C
VUlMRF9SRUdFWCkKKyAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yOgorICAgICAgICAg
ICAgaWYgbm90IHNlbGYuZnlpX2J1aWxkZXI6CisgICAgICAgICAgICAgICAgc2VsZi5meWlfYnVp
bGRlciA9IFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfbGFzdF9idWlsZCgp
CisKKyAgICBkZWYgZ2V0X2ZhaWx1cmVzKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5idWls
ZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGQgPSBzZWxmLmdldF9sYXN0X2J1aWxkKCkKKyAgICAg
ICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIlVzaW5nIGJ1aWxkIG51bWJl
ciAlcyIgJSBzZWxmLmJ1aWxkCisKKyAgICAgICAgaWYgc2VsZi51c2VfbG9jYWxfYmFzZWxpbmVz
OgorICAgICAgICAgICAgc2VsZi5fYnVpbGRfYmFzZWxpbmVfaW5kZXhlcygpCisgICAgICAgIHNl
bGYuZmFpbHVyZXMgPSBzZWxmLl9nZXRfZmFpbHVyZXNfZnJvbV9idWlsZGVyKCkKKyAgICAgICAg
aWYgKHNlbGYuZmFpbHVyZXMgYW5kCisgICAgICAgICAgICAoc2VsZi5fZG93bmxvYWRfcmVzdWx0
X3Jlc291cmNlcygpIG9yIHNlbGYuZG9udF9kb3dubG9hZCkpOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuZmFpbHVyZXMKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfZ2V0X2ZhaWx1
cmVzX2Zyb21fYnVpbGRlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgYSBs
aXN0IG9mIGZhaWx1cmVzIGZvciB0aGUgZ2l2ZW4gYnVpbGQgYW5kIHBsYXRmb3JtIGJ5IHNjcmFw
aW5nCisgICAgICAgIHRoZSBidWlsZGJvdHMgYW5kIHBhcnNpbmcgdGhlaXIgcmVzdWx0cy4KKyAg
ICAgICAgVGhlIGxpc3QgcmV0dXJuZWQgY29udGFpbnMgRmFpbHVyZSBjbGFzcyBvYmplY3RzLgor
ICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQg
IkZldGNoaW5nIGZhaWx1cmVzIGZyb20gYnVpbGRib3QuLi4iCisKKyAgICAgICAgY29udGVudCA9
IHNlbGYuX3NjcmFwZV9idWlsZGVyX291dHB1dCgpCisgICAgICAgIGlmIG5vdCBjb250ZW50Ogor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgbWF0Y2hlcyA9IHNlbGYuX2ZpbmRfbWF0
Y2hlc19pbl9idWlsZGVyX291dHB1dChjb250ZW50KQorCisgICAgICAgIGlmIHNlbGYudmVyYm9z
ZToKKyAgICAgICAgICAgIHByaW50ICIlcyBmYWlsdXJlcyBmb3VuZC4iICUgbGVuKG1hdGNoZXMp
CisKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorICAgICAgICBtYXRjaGVzLnNvcnQoKQorICAgICAg
ICBmb3IgbWF0Y2ggaW4gbWF0Y2hlczoKKyAgICAgICAgICAgIGlmIChsZW4oZmFpbHVyZXMpIDwg
c2VsZi5tYXhfZmFpbHVyZXMgYW5kCisgICAgICAgICAgICAgICAgKG5vdCBzZWxmLnRlc3RfcmVn
ZXggb3IgbWF0Y2hbMF0uZmluZChzZWxmLnRlc3RfcmVnZXgpID4gLTEpKToKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlID0gc2VsZi5fY3JlYXRlX2ZhaWx1cmVfZnJvbV9tYXRjaChtYXRjaCkKKyAg
ICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50
IGZhaWx1cmUudGVzdF9wYXRoCisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGZhaWx1
cmUpCisKKyAgICAgICAgcmV0dXJuIGZhaWx1cmVzCisKKyAgICBkZWYgX3NjcmFwZV9idWlsZGVy
X291dHB1dChzZWxmKToKKyAgICAgICAgIyBJZiB0aGUgYnVpbGQgbG9nIGZpbGUgaXMgc3BlY2lm
aWVkLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHNjcmFwaW5nLgorICAgICAgICBpZiBzZWxmLmJ1aWxk
ZXJfb3V0cHV0X2xvZ19maWxlOgorICAgICAgICAgICAgbG9nID0gb3BlbihzZWxmLmJ1aWxkZXJf
b3V0cHV0X2xvZ19maWxlLCAncicpCisgICAgICAgICAgICByZXR1cm4gIiIuam9pbihsb2cucmVh
ZGxpbmVzKCkpCisKKyAgICAgICAgIyBTY3JhcGUgdGhlIGZhaWx1cmVzIGZyb20gdGhlIGJ1aWxk
Ym90IGZvciB0aGlzIHJldmlzaW9uLgorICAgICAgICB0cnk6CisKKyAgICAgICAgICAgIHJldHVy
biBzY3JhcGVfdXJsKGdldF9yZXN1bHRzX3VybChzZWxmLmJ1aWxkLCBzZWxmLnBsYXRmb3JtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnlpX2J1
aWxkZXIpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIElmIHdlIGhpdCBhIHByb2Js
ZW0sIGFuZCB3ZSdyZSBub3Qgb24gdGhlIEZZSSBidWlsZGVyLCB0cnkgaXQKKyAgICAgICAgICAg
ICMgYWdhaW4gb24gdGhlIEZZSSBidWlsZGVyLgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZnlp
X2J1aWxkZXI6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAg
ICAgICAgICBwcmludCAoIkNvdWxkIG5vdCBmaW5kIGJ1aWxkZXIgb24gd2F0ZXJmYWxsLCB0cnlp
bmcgZnlpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIndhdGVyZmFsbC4uLiIpCisgICAg
ICAgICAgICAgICAgc2VsZi5meWlfYnVpbGRlciA9IFRydWUKKyAgICAgICAgICAgICAgICByZXR1
cm4gc2VsZi5fc2NyYXBlX2J1aWxkZXJfb3V0cHV0KCkKKyAgICAgICAgICAgIHByaW50ICJJIGNv
dWxkIG5vdCBmaW5kIHRoYXQgYnVpbGRlciwgb3IgYnVpbGQgZGlkIG5vdCBjb21waWxlLiIKKyAg
ICAgICAgICAgIHByaW50ICJDaGVjayB0aGF0IHRoZSBidWlsZGVyIG5hbWUgbWF0Y2hlcyBleGFj
dGx5ICIKKyAgICAgICAgICAgIHByaW50ICIoY2FzZSBzZW5zaXRpdmUpLCBhbmQgd3JhcCBxdW90
ZXMgYXJvdW5kIGJ1aWxkZXIgbmFtZXMgIgorICAgICAgICAgICAgcHJpbnQgInRoYXQgaGF2ZSBz
cGFjZXMuIgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgVE9ETyhnd2lsc29uKTog
VGhlIHR5cGUgb2YgZmFpbHVyZSBpcyBub3cgb3V0cHV0IGluIHRoZSBzdW1tYXJ5LCBzbyBubwor
ICAgICMgbWF0Y2hpbmcgYmV0d2VlbiB0aGUgc3VtbWFyeSBhbmQgdGhlIGVhcmxpZXIgb3V0cHV0
IGlzIG5lY2Vzc2FyeS4KKyAgICAjIENoYW5nZSB0aGlzIG1ldGhvZCBhbmQgb3RoZXJzIHRvIGRl
cml2ZSBmYWlsdXJlIHR5cGVzIGZyb20gc3VtbWFyeSBvbmx5LgorCisgICAgZGVmIF9maW5kX21h
dGNoZXNfaW5fYnVpbGRlcl9vdXRwdXQoc2VsZiwgb3V0cHV0KToKKyAgICAgICAgbWF0Y2hlcyA9
IFtdCisgICAgICAgIG1hdGNoZXMgPSByZS5maW5kYWxsKEZBSUxFRF9SRUdFWCwgb3V0cHV0LCBy
ZS5NVUxUSUxJTkUpCisgICAgICAgIGlmIHNlbGYuZXhjbHVkZV9rbm93bl9mYWlsdXJlczoKKyAg
ICAgICAgICAgIHN1bW1hcnkgPSByZS5zZWFyY2goU1VNTUFSWV9SRUdFWCwgb3V0cHV0LCByZS5E
T1RBTEwpCisgICAgICAgICAgICByZWdyZXNzaW9ucyA9IFtdCisgICAgICAgICAgICBpZiBzdW1t
YXJ5OgorICAgICAgICAgICAgICAgIHJlZ3Jlc3Npb25zID0gc2VsZi5fZmluZF9yZWdyZXNzaW9u
c19pbl9zdW1tYXJ5KAorICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Lmdyb3VwKDEpKQorICAg
ICAgICAgICAgbWF0Y2hlcyA9IHNlbGYuX21hdGNoX3JlZ3Jlc3Npb25zX3RvX2ZhaWx1cmVzKHJl
Z3Jlc3Npb25zLCBtYXRjaGVzKQorICAgICAgICByZXR1cm4gbWF0Y2hlcworCisgICAgZGVmIF9j
cmVhdGVfZmFpbHVyZV9mcm9tX21hdGNoKHNlbGYsIG1hdGNoKToKKyAgICAgICAgZmFpbHVyZSA9
IEZhaWx1cmUoKQorICAgICAgICBmYWlsdXJlLnRleHRfZGlmZl9taXNtYXRjaCA9IG1hdGNoWzFd
ICE9ICcnCisgICAgICAgIGZhaWx1cmUuaW1hZ2VfbWlzbWF0Y2ggPSBtYXRjaFsyXSAhPSAnJwor
ICAgICAgICBmYWlsdXJlLmNyYXNoZWQgPSBtYXRjaFs0XSAhPSAnJworICAgICAgICBmYWlsdXJl
LnRpbWVvdXQgPSBtYXRjaFszXSAhPSAnJworICAgICAgICBmYWlsdXJlLnRlc3RfcGF0aCA9IG1h
dGNoWzBdCisgICAgICAgIGZhaWx1cmUucGxhdGZvcm0gPSBzZWxmLnBsYXRmb3JtCisgICAgICAg
IHJldHVybiBmYWlsdXJlCisKKyAgICBkZWYgX2ZpbmRfcmVncmVzc2lvbnNfaW5fc3VtbWFyeShz
ZWxmLCBzdW1tYXJ5KToKKyAgICAgICAgcmVncmVzc2lvbnMgPSBbXQorICAgICAgICBpZiBub3Qg
c3VtbWFyeSBvciBub3QgbGVuKHN1bW1hcnkpOgorICAgICAgICAgICAgcmV0dXJuIHJlZ3Jlc3Np
b25zCisgICAgICAgIG1hdGNoZXMgPSByZS5maW5kYWxsKFNVTU1BUllfUkVHUkVTU0lPTlMsIHN1
bW1hcnksIHJlLkRPVEFMTCkKKyAgICAgICAgZm9yIG1hdGNoIGluIG1hdGNoZXM6CisgICAgICAg
ICAgICBsaW5lcyA9IHJlLmZpbmRhbGwoRkFJTEVEX1VORVhQRUNURURfUkVHRVgsIG1hdGNoLCBy
ZS5ET1RBTEwpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAg
ICBjbGlwcGVkID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgY2xpcHBlZC5maW5k
KCI9IikgPiAtMToKKyAgICAgICAgICAgICAgICAgICAgY2xpcHBlZCA9IGNsaXBwZWRbOmNsaXBw
ZWQuZmluZCgiPSIpIC0gMV0KKyAgICAgICAgICAgICAgICByZWdyZXNzaW9ucy5hcHBlbmQoY2xp
cHBlZCkKKyAgICAgICAgcmV0dXJuIHJlZ3Jlc3Npb25zCisKKyAgICBkZWYgX21hdGNoX3JlZ3Jl
c3Npb25zX3RvX2ZhaWx1cmVzKHNlbGYsIHJlZ3Jlc3Npb25zLCBmYWlsdXJlcyk6CisgICAgICAg
IG1hdGNoZXMgPSBbXQorICAgICAgICBmb3IgcmVncmVzc2lvbiBpbiByZWdyZXNzaW9uczoKKyAg
ICAgICAgICAgIGZvciBmYWlsdXJlIGluIGZhaWx1cmVzOgorICAgICAgICAgICAgICAgIGlmIGZh
aWx1cmVbMF0uZmluZChyZWdyZXNzaW9uKSA+IC0xOgorICAgICAgICAgICAgICAgICAgICBtYXRj
aGVzLmFwcGVuZChmYWlsdXJlKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBy
ZXR1cm4gbWF0Y2hlcworCisgICAgIyBUT0RPKGd3aWxzb24pOiBhZGQgc3VwcG9ydCBmb3IgbXVs
dGlwbGUgY29uZmxpY3RpbmcgYnVpbGQgbnVtYmVycyBieQorICAgICMgcmVuYW1pbmcgdGhlIHpp
cCBmaWxlIGFuZCBuYW1pbmcgdGhlIGRpcmVjdG9yeSBhcHByb3ByaWF0ZWx5LgorCisgICAgZGVm
IF9kb3dubG9hZF9yZXN1bHRfcmVzb3VyY2VzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAg
RmluZHMgYW5kIGRvd25sb2Fkcy9leHRyYWN0cyBhbGwgb2YgdGhlIHRlc3QgcmVzdWx0cyAocGl4
ZWwvdGV4dAorICAgICAgICBvdXRwdXQpIGZvciBhbGwgb2YgdGhlIGdpdmVuIGZhaWx1cmVzLgor
ICAgICAgICAiIiIKKworICAgICAgICB0YXJnZXRfemlwID0gIiVzL2xheW91dC10ZXN0LXJlc3Vs
dHMtJXMuemlwIiAlIChzZWxmLm91dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGQpCisgICAgICAgIGlmIHNl
bGYuemlwX2ZpbGU6CisgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuemlwX2ZpbGUKKyAgICAg
ICAgICAgIHNlbGYuZGVsZXRlX3ppcF9maWxlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJldmlzaW9uLCBidWlsZF9uYW1lID0gXAorICAgICAgICAgICAgICAgIHNlbGYuX2dl
dF9yZXZpc2lvbl9hbmRfYnVpbGRfZnJvbV9hcmNoaXZlX3N0ZXAoKQorICAgICAgICAgICAgemlw
X3VybCA9IGdldF96aXBfZmlsZV91cmwocmV2aXNpb24sIGJ1aWxkX25hbWUpCisgICAgICAgICAg
ICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkRvd25sb2FkaW5nIHpp
cCBmaWxlIGZyb20gJXMgdG8gJXMiICUgKHppcF91cmwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF96aXApCisgICAg
ICAgICAgICBmaWxlbmFtZSA9IHNlbGYuX2Rvd25sb2FkX2ZpbGUoemlwX3VybCwgdGFyZ2V0X3pp
cCwgImIiKQorICAgICAgICAgICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGlm
IHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJDb3VsZCBub3QgZG93
bmxvYWQgemlwIGZpbGUgZnJvbSAlcy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRv
ZXMgaXQgZXhpc3Q/IiAlIHppcF91cmwpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICAgICAgaWYgemlwZmlsZS5pc196aXBmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgIHpp
cCA9IHppcGZpbGUuWmlwRmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9z
ZToKKyAgICAgICAgICAgICAgICBwcmludCAnRXh0cmFjdGluZyBmaWxlcy4uLicKKyAgICAgICAg
ICAgIGRpcmVjdG9yeSA9ICIlcy9sYXlvdXQtdGVzdC1yZXN1bHRzLSVzIiAlIChzZWxmLm91dHB1
dF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5idWlsZCkKKyAgICAgICAgICAgIGNyZWF0ZV9kaXJlY3RvcnkoZGlyZWN0b3J5
KQorICAgICAgICAgICAgc2VsZi5fdW56aXBfemlwZmlsZSh6aXAsIFRFTVBfWklQX0RJUikKKwor
ICAgICAgICAgICAgZm9yIGZhaWx1cmUgaW4gc2VsZi5mYWlsdXJlczoKKyAgICAgICAgICAgICAg
ICBmYWlsdXJlLnRlc3RfZXhwZWN0YXRpb25zX2xpbmUgPSAoCisgICAgICAgICAgICAgICAgICBz
ZWxmLl9nZXRfdGVzdF9leHBlY3RhdGlvbnNfbGluZShmYWlsdXJlLnRlc3RfcGF0aCkpCisgICAg
ICAgICAgICAgICAgaWYgc2VsZi5leGNsdWRlX3dvbnRmaXggYW5kIGZhaWx1cmUuaXNfd29udF9m
aXgoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlcy5yZW1vdmUoZmFpbHVyZSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBmYWlsdXJl
LnRleHRfZGlmZl9taXNtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVf
dGV4dF9mYWlsdXJlKGZhaWx1cmUsIGRpcmVjdG9yeSwgemlwKQorICAgICAgICAgICAgICAgIGlm
IGZhaWx1cmUuaW1hZ2VfbWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcHVs
YXRlX2ltYWdlX2ZhaWx1cmUoZmFpbHVyZSwgZGlyZWN0b3J5LCB6aXApCisgICAgICAgICAgICAg
ICAgaWYgbm90IHNlbGYudXNlX2xvY2FsX2Jhc2VsaW5lczoKKyAgICAgICAgICAgICAgICAgICAg
ZmFpbHVyZS50ZXN0X2FnZSA9IHNlbGYuX2dldF9maWxlX2FnZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZhaWx1cmUuZ2V0X3Rlc3RfaG9tZSgpKQorICAgICAgICAgICAgICAgIGZhaWx1cmUu
Zmxha2luZXNzID0gc2VsZi5fZ2V0X2ZsYWtpbmVzcyhmYWlsdXJlLnRlc3RfcGF0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5w
bGF0Zm9ybSkKKyAgICAgICAgICAgIHppcC5jbG9zZSgpCisgICAgICAgICAgICBpZiBzZWxmLnZl
cmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkZpbGVzIGV4dHJhY3RlZC4iCisgICAgICAg
ICAgICBpZiBzZWxmLmRlbGV0ZV96aXBfZmlsZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnZl
cmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJDbGVhbmluZyB1cCB6aXAgZmlsZS4u
LiIKKyAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbW92ZV9kaXJlY3RvcnkoVEVNUF9aSVBf
RElSKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6Cisg
ICAgICAgICAgICAgICAgcHJpbnQgKCJEb3dubG9hZGVkIGZpbGUgJyVzJyBkb2Vzbid0IGxvb2sg
bGlrZSBhIHppcCBmaWxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgJSBmaWxlbmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF91bnppcF96aXBmaWxlKHNlbGYsIHpp
cCwgYmFzZV9kaXIpOgorICAgICAgICBmb3IgaSwgbmFtZSBpbiBlbnVtZXJhdGUoemlwLm5hbWVs
aXN0KCkpOgorICAgICAgICAgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoJy8nKToKKyAgICAgICAg
ICAgICAgICBleHRyYWN0ZWRfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGJhc2VfZGlyLCBuYW1l
KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgKHBhdGgsIGZpbGVu
YW1lKSA9IG9zLnBhdGguc3BsaXQoZXh0cmFjdGVkX2ZpbGVfcGF0aCkKKyAgICAgICAgICAgICAg
ICAgICAgb3MubWFrZWRpcnMocGF0aCwgMDc3NykKKyAgICAgICAgICAgICAgICBleGNlcHQ6Cisg
ICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3Blbihl
eHRyYWN0ZWRfZmlsZV9wYXRoLCAnd2InKQorICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUo
emlwLnJlYWQobmFtZSkpCisgICAgICAgICAgICAgICAgb3V0ZmlsZS5mbHVzaCgpCisgICAgICAg
ICAgICAgICAgb3V0ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgb3MuY2htb2QoZXh0cmFj
dGVkX2ZpbGVfcGF0aCwgMDc3NykKKworICAgIGRlZiBfZ2V0X3JldmlzaW9uX2FuZF9idWlsZF9m
cm9tX2FyY2hpdmVfc3RlcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5hcmNoaXZlX3N0ZXBfbG9n
X2ZpbGU6CisgICAgICAgICAgICBsb2cgPSBvcGVuKHNlbGYuYXJjaGl2ZV9zdGVwX2xvZ19maWxl
LCAncicpCisgICAgICAgICAgICBjb250ZW50ID0gIiIuam9pbihsb2cucmVhZGxpbmVzKCkpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250ZW50ID0gc2NyYXBlX3VybChnZXRfYXJjaGl2
ZV91cmwoc2VsZi5idWlsZCwgc2VsZi5wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZ5aV9idWlsZGVyKSkKKyAgICAgICAgcmV2
aXNpb24gPSBleHRyYWN0X2ZpcnN0X3ZhbHVlKGNvbnRlbnQsIEFSQ0hJVkVfVVJMX1JFR0VYKQor
ICAgICAgICBidWlsZF9uYW1lID0gZXh0cmFjdF9maXJzdF92YWx1ZShjb250ZW50LCBCVUlMRF9O
QU1FX1JFR0VYKQorICAgICAgICByZXR1cm4gKHJldmlzaW9uLCBidWlsZF9uYW1lKQorCisgICAg
ZGVmIF9wb3B1bGF0ZV90ZXh0X2ZhaWx1cmUoc2VsZiwgZmFpbHVyZSwgZGlyZWN0b3J5LCB6aXAp
OgorICAgICAgICBiYXNlbGluZSA9IHNlbGYuX2dldF9iYXNlbGluZShmYWlsdXJlLmdldF9leHBl
Y3RlZF90ZXh0X2ZpbGVuYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpcmVjdG9yeSkKKyAgICAgICAgZmFpbHVyZS50ZXh0X2Jhc2VsaW5lX2xvY2FsID0gYmFz
ZWxpbmUubG9jYWxfZmlsZQorICAgICAgICBmYWlsdXJlLnRleHRfYmFzZWxpbmVfdXJsID0gYmFz
ZWxpbmUuYmFzZWxpbmVfdXJsCisgICAgICAgIGZhaWx1cmUudGV4dF9iYXNlbGluZV9hZ2UgPSAo
CisgICAgICAgICAgICBzZWxmLl9nZXRfZmlsZV9hZ2UoZmFpbHVyZS5nZXRfdGV4dF9iYXNlbGlu
ZV90cmFjX2hvbWUoKSkpCisgICAgICAgIGZhaWx1cmUudGV4dF9hY3R1YWxfbG9jYWwgPSAiJXMv
JXMiICUgKAorICAgICAgICAgICAgZGlyZWN0b3J5LCBmYWlsdXJlLmdldF9hY3R1YWxfdGV4dF9m
aWxlbmFtZSgpKQorICAgICAgICBpZiAoYmFzZWxpbmUgYW5kIGJhc2VsaW5lLmlzX3ZhbGlkKCkg
YW5kIG5vdCBzZWxmLmRvbnRfZG93bmxvYWQpOgorICAgICAgICAgICAgc2VsZi5fY29weV9maWxl
X2Zyb21femlwX2RpcigKKyAgICAgICAgICAgICAgICBmYWlsdXJlLmdldF90ZXh0X3Jlc3VsdF9s
b2NhdGlvbl9pbl96aXBfZmlsZSgpLAorICAgICAgICAgICAgICAgIGZhaWx1cmUudGV4dF9hY3R1
YWxfbG9jYWwpCisgICAgICAgICAgICBnZW5lcmF0ZV90ZXh0X2RpZmYoZmFpbHVyZS50ZXh0X2Jh
c2VsaW5lX2xvY2FsLAorICAgICAgICAgICAgICAgIGZhaWx1cmUudGV4dF9hY3R1YWxfbG9jYWws
CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5ICsgIi8iICsgZmFpbHVyZS5nZXRfdGV4dF9kaWZm
X2ZpbGVuYW1lKCkpCisKKyAgICBkZWYgX3BvcHVsYXRlX2ltYWdlX2ZhaWx1cmUoc2VsZiwgZmFp
bHVyZSwgZGlyZWN0b3J5LCB6aXApOgorICAgICAgICBiYXNlbGluZSA9IHNlbGYuX2dldF9iYXNl
bGluZShmYWlsdXJlLmdldF9leHBlY3RlZF9pbWFnZV9maWxlbmFtZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkpCisgICAgICAgIGZhaWx1cmUuaW1h
Z2VfYmFzZWxpbmVfbG9jYWwgPSBiYXNlbGluZS5sb2NhbF9maWxlCisgICAgICAgIGZhaWx1cmUu
aW1hZ2VfYmFzZWxpbmVfdXJsID0gYmFzZWxpbmUuYmFzZWxpbmVfdXJsCisgICAgICAgIGlmIGJh
c2VsaW5lIGFuZCBiYXNlbGluZS5pc192YWxpZCgpOgorICAgICAgICAgICAgZmFpbHVyZS5pbWFn
ZV9iYXNlbGluZV9hZ2UgPSAoCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2ZpbGVfYWdlKGZh
aWx1cmUuZ2V0X2ltYWdlX2Jhc2VsaW5lX3RyYWNfaG9tZSgpKSkKKyAgICAgICAgICAgIGZhaWx1
cmUuaW1hZ2VfYWN0dWFsX2xvY2FsID0gIiVzLyVzIiAlIChkaXJlY3RvcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0X2FjdHVhbF9pbWFnZV9m
aWxlbmFtZSgpKQorICAgICAgICAgICAgc2VsZi5fY29weV9maWxlX2Zyb21femlwX2RpcigKKyAg
ICAgICAgICAgICAgICBmYWlsdXJlLmdldF9pbWFnZV9yZXN1bHRfbG9jYXRpb25faW5femlwX2Zp
bGUoKSwKKyAgICAgICAgICAgICAgICBmYWlsdXJlLmltYWdlX2FjdHVhbF9sb2NhbCkKKyAgICAg
ICAgICAgIGlmIChub3QgZ2VuZXJhdGVfcG5nX2RpZmYoZmFpbHVyZS5pbWFnZV9iYXNlbGluZV9s
b2NhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS5pbWFn
ZV9hY3R1YWxfbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIl
cy8lcyIgJSAoZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWlsdXJlLmdldF9pbWFnZV9kaWZmX2ZpbGVuYW1lKCkpKQorICAgICAgICAgICAgICAgIGFu
ZCBzZWxmLnZlcmJvc2UpOgorICAgICAgICAgICAgICAgIHByaW50ICJDb3VsZCBub3QgZ2VuZXJh
dGUgUE5HIGRpZmYgZm9yICVzIiAlIGZhaWx1cmUudGVzdF9wYXRoCisgICAgICAgICAgICBpZiAo
ZmFpbHVyZS5pc19pbWFnZV9iYXNlbGluZV9pbl9jaHJvbWl1bSgpIG9yCisgICAgICAgICAgICAg
ICAgc2VsZi51c2VfbG9jYWxfYmFzZWxpbmVzKToKKyAgICAgICAgICAgICAgICB1cHN0cmVhbV9i
YXNlbGluZSA9IChzZWxmLl9nZXRfdXBzdHJlYW1fYmFzZWxpbmUoCisgICAgICAgICAgICAgICAg
ICAgIGZhaWx1cmUuZ2V0X2V4cGVjdGVkX2ltYWdlX2ZpbGVuYW1lKCksIGRpcmVjdG9yeSkpCisg
ICAgICAgICAgICAgICAgZmFpbHVyZS5pbWFnZV9iYXNlbGluZV91cHN0cmVhbV9sb2NhbCA9IFwK
KyAgICAgICAgICAgICAgICAgICAgdXBzdHJlYW1fYmFzZWxpbmUubG9jYWxfZmlsZQorICAgICAg
ICAgICAgICAgIGZhaWx1cmUuaW1hZ2VfYmFzZWxpbmVfdXBzdHJlYW1fdXJsID0gXAorICAgICAg
ICAgICAgICAgICAgICB1cHN0cmVhbV9iYXNlbGluZS5iYXNlbGluZV91cmwKKworICAgIGRlZiBf
Z2V0X2Jhc2VsaW5lKHNlbGYsIGZpbGVuYW1lLCBkaXJlY3RvcnksIHVwc3RyZWFtX29ubHk9RmFs
c2UpOgorICAgICAgICAiIiIgU2VhcmNoIGFuZCBkb3dubG9hZCB0aGUgYmFzZWxpbmUgZm9yIHRo
ZSBnaXZlbiB0ZXN0IChwdXQgaXQgaW4gdGhlCisgICAgICAgIGRpcmVjdG9yeSBnaXZlbi4pIiIi
CisKKyAgICAgICAgbG9jYWxfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBmaWxl
bmFtZSkKKyAgICAgICAgbG9jYWxfZGlyZWN0b3J5ID0gbG9jYWxfZmlsZW5hbWVbOmxvY2FsX2Zp
bGVuYW1lLnJmaW5kKCIvIildCisgICAgICAgIGlmIHVwc3RyZWFtX29ubHk6CisgICAgICAgICAg
ICBsYXN0X2luZGV4ID0gbG9jYWxfZmlsZW5hbWUucmZpbmQoIi4iKQorICAgICAgICAgICAgaWYg
bGFzdF9pbmRleCA+IC0xOgorICAgICAgICAgICAgICAgIGxvY2FsX2ZpbGVuYW1lID0gKGxvY2Fs
X2ZpbGVuYW1lWzpsYXN0X2luZGV4XSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVBTVFJFQU1fSU1BR0VfRklMRV9FTkRJTkcpCisKKyAgICAgICAgZG93bmxvYWRfZmlsZV9t
b2RpZmllcnMgPSAiIgorICAgICAgICBpZiBsb2NhbF9maWxlbmFtZS5lbmRzd2l0aCgiLnBuZyIp
OgorICAgICAgICAgICAgZG93bmxvYWRfZmlsZV9tb2RpZmllcnMgPSAiYiIgICMgYmluYXJ5IGZp
bGUKKworICAgICAgICBpZiBub3Qgc2VsZi5kb250X2Rvd25sb2FkOgorICAgICAgICAgICAgY3Jl
YXRlX2RpcmVjdG9yeShsb2NhbF9kaXJlY3RvcnkpCisKKyAgICAgICAgbG9jYWxfYmFzZWxpbmUg
PSBOb25lCisgICAgICAgIHVybF9vZl9iYXNlbGluZSA9IE5vbmUKKworICAgICAgICBpZiBzZWxm
LnVzZV9sb2NhbF9iYXNlbGluZXM6CisgICAgICAgICAgICB0ZXN0X3BhdGhfa2V5ID0gc2VsZi5f
bm9ybWFsaXplX2Jhc2VsaW5lX2lkZW50aWZpZXIoZmlsZW5hbWUpCisgICAgICAgICAgICBkaWN0
ID0gc2VsZi5iYXNlbGluZV9kaWN0CisgICAgICAgICAgICBpZiB1cHN0cmVhbV9vbmx5OgorICAg
ICAgICAgICAgICAgIGRpY3QgPSBzZWxmLndlYmtpdF9iYXNlbGluZV9kaWN0CisgICAgICAgICAg
ICBpZiB0ZXN0X3BhdGhfa2V5IGluIGRpY3Q6CisgICAgICAgICAgICAgICAgbG9jYWxfYmFzZWxp
bmUgPSBkaWN0W3Rlc3RfcGF0aF9rZXldCisgICAgICAgICAgICAgICAgdXJsX29mX2Jhc2VsaW5l
ID0gbG9jYWxfYmFzZWxpbmUKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShsb2NhbF9iYXNl
bGluZSwgbG9jYWxfZGlyZWN0b3J5KQorICAgICAgICAgICAgZWxpZiBzZWxmLnZlcmJvc2U6Cisg
ICAgICAgICAgICAgICAgcHJpbnQgKCJCYXNlbGluZSAlcyBkb2VzIG5vdCBleGlzdCBpbiB0aGUg
aW5kZXguIiAlCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGF0aF9rZXkpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgICAgIHBvc3NpYmxlX2ZpbGVz
ID0gc2VsZi5fZ2V0X3Bvc3NpYmxlX2ZpbGVfbGlzdChmaWxlbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHN0cmVhbV9vbmx5
KQorICAgICAgICAgICAgIyBEb3dubG9hZCB0aGUgYmFzZWxpbmVzIGZyb20gdGhlIHdlYmtpdC5v
cmcgc2l0ZS4KKyAgICAgICAgICAgIHdoaWxlIGxvY2FsX2Jhc2VsaW5lID09IE5vbmUgYW5kIGlu
ZGV4IDwgbGVuKHBvc3NpYmxlX2ZpbGVzKToKKyAgICAgICAgICAgICAgICBsb2NhbF9iYXNlbGlu
ZSA9IHNlbGYuX2Rvd25sb2FkX2ZpbGUocG9zc2libGVfZmlsZXNbaW5kZXhdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ZpbGVuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
d25sb2FkX2ZpbGVfbW9kaWZpZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgaWYgbG9jYWxfYmFzZWxp
bmU6CisgICAgICAgICAgICAgICAgICAgIHVybF9vZl9iYXNlbGluZSA9IHBvc3NpYmxlX2ZpbGVz
W2luZGV4XQorICAgICAgICAgICAgICAgIGluZGV4ICs9IDEKKworICAgICAgICBpZiBub3QgbG9j
YWxfYmFzZWxpbmU6CisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAg
ICAgcHJpbnQgIkNvdWxkIG5vdCBmaW5kIGFueSBiYXNlbGluZSBmb3IgJXMiICUgZmlsZW5hbWUK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvY2FsX2Jhc2VsaW5lID0gb3MucGF0aC5ub3Jt
cGF0aChsb2NhbF9iYXNlbGluZSkKKyAgICAgICAgaWYgbG9jYWxfYmFzZWxpbmUgYW5kIHNlbGYu
dmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJGb3VuZCBiYXNlbGluZTogJXMiICUgdXJsX29m
X2Jhc2VsaW5lCisKKyAgICAgICAgcmV0dXJuIEJhc2VsaW5lQ2FuZGlkYXRlKGxvY2FsX2Jhc2Vs
aW5lLCB1cmxfb2ZfYmFzZWxpbmUpCisKKyAgICBkZWYgX2FkZF9iYXNlbGluZV9wYXRocyhzZWxm
LCBsaXN0LCBiYXNlX3BhdGgsIGRpcmVjdG9yaWVzKToKKyAgICAgICAgZm9yIGRpciBpbiBkaXJl
Y3RvcmllczoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKG9zLnBhdGguam9pbihiYXNlX3BhdGgs
IGRpcikpCisKKyAgICAjIFRPRE8oZ3dpbHNvbik6IFJlZmFjdG9yIHRoaXMgbWV0aG9kIHRvIHVz
ZQorICAgICMgcGxhdGZvcm1fdXRpbHNfKi5CYXNlbGluZVNlYXJjaFBhdGggaW5zdGVhZCBvZiBj
dXN0b20gbG9naWMuCisKKyAgICBkZWYgX2J1aWxkX2Jhc2VsaW5lX2luZGV4ZXMoc2VsZik6Cisg
ICAgICAgICIiIiBCdWlsZHMgYW4gaW5kZXggb2YgYWxsIHRoZSBrbm93biBsb2NhbCBiYXNlbGlu
ZXMgaW4gYm90aCBjaHJvbWl1bQorICAgICAgICBhbmQgd2Via2l0LiBUd28gYmFzZWxpbmVzIGFy
ZSBjcmVhdGVkLCBhIHdlYmtpdC1zcGVjaWZpYyAobm8gY2hyb21pdW0KKyAgICAgICAgYmFzZWxp
bmUpIGRpY3Rpb25hcnkgYW5kIGFuIG92ZXJhbGwgKGJvdGgpIGRpY3Rpb25hcnkuIEVhY2ggb25l
IGhhcyBhCisgICAgICAgIHN0cnVjdHVyZSBsaWtlOiAiL2Zhc3QvZG9tL29uZS1leHBlY3RlZC50
eHQiIC0+CisgICAgICAgICJDOlxccGF0aFxcdG9cXGZhc3RcXGRvbVxcb25lLWV4cGVjdGVkLnR4
dCIKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHBy
aW50ICJCdWlsZGluZyBpbmRleCBvZiBhbGwgbG9jYWwgYmFzZWxpbmVzLi4uIgorCisgICAgICAg
IHNlbGYuYmFzZWxpbmVfZGljdCA9IHt9CisgICAgICAgIHNlbGYud2Via2l0X2Jhc2VsaW5lX2Rp
Y3QgPSB7fQorCisgICAgICAgIGJhc2UgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5jdXJkaXIp
CisgICAgICAgIHdlYmtpdF9iYXNlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRf
cGFydHknLCAnV2Via2l0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdMYXlvdXRUZXN0cycpCisgICAgICAgIGNocm9taXVtX2Jhc2UgPSBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRfdGVzdHMnKQorICAgICAgICBj
aHJvbWl1bV9iYXNlX3BsYXRmb3JtID0gb3MucGF0aC5qb2luKGNocm9taXVtX2Jhc2UsIFBMQVRG
T1JNKQorICAgICAgICB3ZWJraXRfYmFzZV9wbGF0Zm9ybSA9IG9zLnBhdGguam9pbih3ZWJraXRf
YmFzZSwgUExBVEZPUk0pCisKKyAgICAgICAgcG9zc2libGVfY2hyb21pdW1fZmlsZXMgPSBbXQor
ICAgICAgICBwb3NzaWJsZV93ZWJraXRfZmlsZXMgPSBbXQorCisgICAgICAgIGlmIGlzX21hY19w
bGF0Zm9ybShzZWxmLnBsYXRmb3JtKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9iYXNlbGluZV9w
YXRocyhwb3NzaWJsZV9jaHJvbWl1bV9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaHJvbWl1bV9iYXNlX3BsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENIUk9NSVVNX01BQ19QTEFURk9STV9ESVJTKQorICAgICAgICAgICAg
c2VsZi5fYWRkX2Jhc2VsaW5lX3BhdGhzKHBvc3NpYmxlX2Nocm9taXVtX2ZpbGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9iYXNlX3BsYXRmb3JtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9NQUNfUExBVEZPUk1fRElS
UykKKyAgICAgICAgICAgIHNlbGYuX2FkZF9iYXNlbGluZV9wYXRocyhwb3NzaWJsZV93ZWJraXRf
ZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X2Jhc2Vf
cGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX01B
Q19QTEFURk9STV9ESVJTKQorICAgICAgICBlbGlmIGlzX2xpbnV4X3BsYXRmb3JtKHNlbGYucGxh
dGZvcm0pOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3BhdGhzKHBvc3NpYmxlX2No
cm9taXVtX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9t
aXVtX2Jhc2VfcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0hST01JVU1fTElOVVhfUExBVEZPUk1fRElSUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuX2FkZF9iYXNlbGluZV9wYXRocyhwb3NzaWJsZV9jaHJvbWl1bV9maWxlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9iYXNlX3BsYXRmb3JtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dJTl9QTEFURk9S
TV9ESVJTKQorCisgICAgICAgIGlmIG5vdCBpc19tYWNfcGxhdGZvcm0oc2VsZi5wbGF0Zm9ybSk6
CisgICAgICAgICAgICBzZWxmLl9hZGRfYmFzZWxpbmVfcGF0aHMocG9zc2libGVfd2Via2l0X2Zp
bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9iYXNlX3Bs
YXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9XSU5f
UExBVEZPUk1fRElSUykKKworICAgICAgICBwb3NzaWJsZV93ZWJraXRfZmlsZXMuYXBwZW5kKHdl
YmtpdF9iYXNlKQorCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX2Jhc2VsaW5lX2RpY3QocG9zc2li
bGVfd2Via2l0X2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYud2Via2l0X2Jhc2VsaW5lX2RpY3QpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX2Jhc2VsaW5l
X2RpY3QocG9zc2libGVfY2hyb21pdW1fZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5iYXNlbGluZV9kaWN0KQorICAgICAgICBmb3Iga2V5IGluIHNlbGYu
d2Via2l0X2Jhc2VsaW5lX2RpY3Qua2V5cygpOgorICAgICAgICAgICAgaWYgbm90IGtleSBpbiBz
ZWxmLmJhc2VsaW5lX2RpY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5iYXNlbGluZV9kaWN0W2tl
eV0gPSBzZWxmLndlYmtpdF9iYXNlbGluZV9kaWN0W2tleV0KKworICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgZGVmIF9wb3B1bGF0ZV9iYXNlbGluZV9kaWN0KHNlbGYsIGRpcmVjdG9yaWVzLCBk
aWN0aW9uYXJ5KToKKyAgICAgICAgZm9yIGRpciBpbiBkaXJlY3RvcmllczoKKyAgICAgICAgICAg
IG9zLnBhdGgud2FsayhkaXIsIHNlbGYuX3Zpc2l0X2Jhc2VsaW5lX2RpciwgZGljdGlvbmFyeSkK
KworICAgIGRlZiBfdmlzaXRfYmFzZWxpbmVfZGlyKHNlbGYsIGRpY3QsIGRpcm5hbWUsIG5hbWVz
KToKKyAgICAgICAgIiIiIE1ldGhvZCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgb3MucGF0aC53
YWxrIHRvIGJ1aWxkIHVwIGFuIGluZGV4CisgICAgICAgIG9mIHdoZXJlIGFsbCB0aGUgdGVzdCBi
YXNlbGluZXMgZXhpc3QuICIiIgorICAgICAgICAjIEV4Y2x1ZGUgLnN2biBmcm9tIHRoZSB3YWxr
LCBzaW5jZSB3ZSBkb24ndCBjYXJlIHdoYXQgaXMgaW4gdGhlc2UKKyAgICAgICAgIyBkaXJzLgor
ICAgICAgICBpZiAnLnN2bicgaW4gbmFtZXM6CisgICAgICAgICAgICBuYW1lcy5yZW1vdmUoJy5z
dm4nKQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIG5hbWUuZmlu
ZCgiLWV4cGVjdGVkLiIpID4gLTE6CisgICAgICAgICAgICAgICAgdGVzdF9wYXRoX2tleSA9IG9z
LnBhdGguam9pbihkaXJuYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICMgRml4IHBhdGggc2Vw
YXJhdG9ycyB0byBtYXRjaCB0aGUgc2VwYXJhdG9ycyB1c2VkIG9uCisgICAgICAgICAgICAgICAg
IyB0aGUgYnVpbGRib3RzLgorICAgICAgICAgICAgICAgIHRlc3RfcGF0aF9rZXkgPSB0ZXN0X3Bh
dGhfa2V5LnJlcGxhY2UoIlxcIiwgIi8iKQorICAgICAgICAgICAgICAgIHRlc3RfcGF0aF9rZXkg
PSBzZWxmLl9ub3JtYWxpemVfYmFzZWxpbmVfaWRlbnRpZmllcigKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdF9wYXRoX2tleSkKKyAgICAgICAgICAgICAgICBpZiBub3QgdGVzdF9wYXRoX2tleSBp
biBkaWN0OgorICAgICAgICAgICAgICAgICAgICBkaWN0W3Rlc3RfcGF0aF9rZXldID0gb3MucGF0
aC5qb2luKGRpcm5hbWUsIG5hbWUpCisKKyAgICAjIFRPRE8oZ3dpbHNvbik6IFNpbXBsaWZ5IGlk
ZW50aWZpZXIgY3JlYXRpb24gdG8gbm90IHJlbHkgc28gaGVhdmlseSBvbgorICAgICMgZGlyZWN0
b3J5IGFuZCBwYXRoIG5hbWVzLgorCisgICAgZGVmIF9ub3JtYWxpemVfYmFzZWxpbmVfaWRlbnRp
ZmllcihzZWxmLCB0ZXN0X3BhdGgpOgorICAgICAgICAiIiIgR2l2ZW4gZWl0aGVyIGEgYmFzZWxp
bmUgcGF0aCAoaS5lLiAvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLy4uLikKKyAgICAgICAgb3Ig
YSB0ZXN0IHBhdGggKGkuZS4gL0xheW91dFRlc3RzL2Zhc3QvZG9tLy4uLi4pIHdpbGwgbm9ybWFs
aXplCisgICAgICAgIHRvIGEgdW5pcXVlIGlkZW50aWZpZXIuIFRoaXMgaXMgYmFzaWNhbGx5IGEg
aGFzaGluZyBmdW5jdGlvbiBmb3IKKyAgICAgICAgbGF5b3V0IHRlc3QgcGF0aHMuIiIiCisKKyAg
ICAgICAgZm9yIHJlZ2V4IGluIExPQ0FMX0JBU0VMSU5FX1JFR0VYRVM6CisgICAgICAgICAgICB2
YWx1ZSA9IGV4dHJhY3RfZmlyc3RfdmFsdWUodGVzdF9wYXRoLCByZWdleCkKKyAgICAgICAgICAg
IGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICByZXR1cm4g
dGVzdF9wYXRoCisKKyAgICBkZWYgX2FkZF9iYXNlbGluZV91cl9scyhzZWxmLCBsaXN0LCBiYXNl
X3VybCwgcGxhdGZvcm1zKToKKyAgICAgICAgIyBJZiB0aGUgYmFzZSBVUkwgZG9lc24ndCBjb250
YWluIGFueSBwbGF0Zm9ybSBpbiBpdHMgcGF0aCwgb25seSBhZGQKKyAgICAgICAgIyB0aGUgYmFz
ZSBVUkwgdG8gdGhlIGxpc3QuICBUaGlzIGhhcHBlbnMgd2l0aCB0aGUgY2hyb21lLyBkaXIuCisg
ICAgICAgIGlmIGJhc2VfdXJsLmZpbmQoIiVzIikgPT0gLTE6CisgICAgICAgICAgICBsaXN0LmFw
cGVuZChiYXNlX3VybCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmb3IgcGxhdGZvcm0g
aW4gcGxhdGZvcm1zOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoYmFzZV91cmwgJSBwbGF0Zm9y
bSkKKworICAgICMgVE9ETyhnd2lsc29uKTogUmVmYWN0b3IgdGhpcyBtZXRob2QgdG8gdXNlCisg
ICAgIyBwbGF0Zm9ybV91dGlsc18qLkJhc2VsaW5lU2VhcmNoUGF0aCBpbnN0ZWFkIG9mIGN1c3Rv
bSBsb2dpYy4gIFRoaXMgbWF5CisgICAgIyByZXF1aXJlIHNvbWUga2luZCBvZiB3cmFwcGVyIHNp
bmNlIHRoaXMgbWV0aG9kIGxvb2tzIGZvciBVUkxzIGluc3RlYWQKKyAgICAjIG9mIGxvY2FsIHBh
dGhzLgorCisgICAgZGVmIF9nZXRfcG9zc2libGVfZmlsZV9saXN0KHNlbGYsIGZpbGVuYW1lLCBv
bmx5X3dlYmtpdCk6CisgICAgICAgICIiIiBSZXR1cm5zIGEgbGlzdCBvZiBwb3NzaWJsZSBmaWxl
bmFtZSBsb2NhdGlvbnMgZm9yIHRoZSBnaXZlbiBmaWxlLgorICAgICAgICBVc2VzIHRoZSBwbGF0
Zm9ybSBvZiB0aGUgY2xhc3MgdG8gZGV0ZXJtaW5lIHRoZSBvcmRlci4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgcG9zc2libGVfY2hyb21pdW1fZmlsZXMgPSBbXQorICAgICAgICBwb3NzaWJsZV93
ZWJraXRfZmlsZXMgPSBbXQorCisgICAgICAgIGNocm9taXVtX3BsYXRmb3JtX3VybCA9IExBWU9V
VF9URVNUX1JFUE9fQkFTRV9VUkwKKyAgICAgICAgaWYgbm90IGZpbGVuYW1lLnN0YXJ0c3dpdGgo
ImNocm9tZSIpOgorICAgICAgICAgICAgY2hyb21pdW1fcGxhdGZvcm1fdXJsICs9ICJwbGF0Zm9y
bS8lcy8iCisgICAgICAgIGNocm9taXVtX3BsYXRmb3JtX3VybCArPSBmaWxlbmFtZQorCisgICAg
ICAgIHdlYmtpdF9wbGF0Zm9ybV91cmwgPSBXRUJLSVRfUExBVEZPUk1fQkFTRUxJTkVfVVJMICsg
ZmlsZW5hbWUKKworICAgICAgICBpZiBpc19tYWNfcGxhdGZvcm0oc2VsZi5wbGF0Zm9ybSk6Cisg
ICAgICAgICAgICBzZWxmLl9hZGRfYmFzZWxpbmVfdXJfbHMocG9zc2libGVfY2hyb21pdW1fZmls
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fcGxhdGZvcm1f
dXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX01BQ19QTEFU
Rk9STV9ESVJTKQorICAgICAgICAgICAgc2VsZi5fYWRkX2Jhc2VsaW5lX3VyX2xzKHBvc3NpYmxl
X3dlYmtpdF9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRf
cGxhdGZvcm1fdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9N
QUNfUExBVEZPUk1fRElSUykKKyAgICAgICAgZWxpZiBpc19saW51eF9wbGF0Zm9ybShzZWxmLnBs
YXRmb3JtKToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9iYXNlbGluZV91cl9scyhwb3NzaWJsZV9j
aHJvbWl1bV9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1
bV9wbGF0Zm9ybV91cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hST01J
VU1fTElOVVhfUExBVEZPUk1fRElSUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYu
X2FkZF9iYXNlbGluZV91cl9scyhwb3NzaWJsZV9jaHJvbWl1bV9maWxlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9wbGF0Zm9ybV91cmwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0hST01JVU1fV0lOX1BMQVRGT1JNX0RJUlMpCisKKyAg
ICAgICAgaWYgbm90IGlzX21hY19wbGF0Zm9ybShzZWxmLnBsYXRmb3JtKToKKyAgICAgICAgICAg
IHNlbGYuX2FkZF9iYXNlbGluZV91cl9scyhwb3NzaWJsZV93ZWJraXRfZmlsZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3BsYXRmb3JtX3VybCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfV0lOX1BMQVRGT1JNX0RJUlMpCisgICAg
ICAgIHBvc3NpYmxlX3dlYmtpdF9maWxlcy5hcHBlbmQoV0VCS0lUX0xBWU9VVF9URVNUX0JBU0Vf
VVJMICsgZmlsZW5hbWUpCisKKyAgICAgICAgaWYgb25seV93ZWJraXQ6CisgICAgICAgICAgICBy
ZXR1cm4gcG9zc2libGVfd2Via2l0X2ZpbGVzCisgICAgICAgIHJldHVybiBwb3NzaWJsZV9jaHJv
bWl1bV9maWxlcyArIHBvc3NpYmxlX3dlYmtpdF9maWxlcworCisgICAgIyBMaWtlIF9HZXRCYXNl
bGluZSwgYnV0IG9ubHkgcmV0cmlldmVzIHRoZSBiYXNlbGluZSBmcm9tIHVwc3RyZWFtIChza2lw
CisgICAgIyBsb29raW5nIGluIGNocm9taXVtKS4KKworICAgIGRlZiBfZ2V0X3Vwc3RyZWFtX2Jh
c2VsaW5lKHNlbGYsIGZpbGVuYW1lLCBkaXJlY3RvcnkpOgorICAgICAgICByZXR1cm4gc2VsZi5f
Z2V0X2Jhc2VsaW5lKGZpbGVuYW1lLCBkaXJlY3RvcnksIHVwc3RyZWFtX29ubHk9VHJ1ZSkKKwor
ICAgIGRlZiBfZ2V0X2ZpbGVfYWdlKHNlbGYsIHVybCk6CisgICAgICAgICMgQ2hlY2sgaWYgdGhl
IGdpdmVuIFVSTCBpcyByZWFsbHkgYSBsb2NhbCBmaWxlIHBhdGguCisgICAgICAgIGlmIG5vdCB1
cmwgb3Igbm90IHVybC5zdGFydHN3aXRoKCJodHRwIik6CisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB1cmwuZmluZChXRUJLSVRfVFJBQ19IT1NU
TkFNRSkgPiAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXh0cmFjdF9zaW5nbGVfcmVnZXhf
YXRfdXJsKHVybFs6dXJsLnJmaW5kKCIvIildLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0ZJTEVfQUdFX1JFR0VYICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybFt1cmwuZmluZCgi
L2Jyb3dzZXIiKTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXh0cmFjdF9zaW5nbGVfcmVnZXhfYXRfdXJsKHVybCArICI/dmlldz1sb2ciLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hST01JVU1fRklMRV9B
R0VfUkVHRVgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToK
KyAgICAgICAgICAgICAgICBwcmludCAiQ291bGQgbm90IGZpbmQgYWdlIGZvciAlcy4gRG9lcyB0
aGUgZmlsZSBleGlzdD8iICUgdXJsCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBS
ZXR1cm5zIGEgZmxha2luZXNzIG9uIGEgc2NhbGUgb2YgMS01MC4KKyAgICAjIFRPRE8oZ3dpbHNv
bik6IG1vZGlmeSB0aGlzIHRvIGFsc28gcmV0dXJuIHdoaWNoIG9mIHRoZSBsYXN0IDEwCisgICAg
IyBidWlsZHMgZmFpbGVkIGZvciB0aGlzIHRlc3QuCisKKyAgICBkZWYgX2dldF9mbGFraW5lc3Mo
c2VsZiwgdGVzdF9wYXRoLCB0YXJnZXRfcGxhdGZvcm0pOgorICAgICAgICB1cmwgPSBnZXRfZmxh
a3lfdGVzdF91cmwodGFyZ2V0X3BsYXRmb3JtKQorICAgICAgICBpZiB1cmwgPT0gIiI6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIHVybCBpbiBzZWxmLl9mbGFreV90ZXN0
X2NhY2hlOgorICAgICAgICAgICAgY29udGVudCA9IHNlbGYuX2ZsYWt5X3Rlc3RfY2FjaGVbdXJs
XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGVudCA9IHVybGxpYjIudXJsb3Blbih1
cmxsaWIyLlJlcXVlc3QodXJsKSkucmVhZCgpCisgICAgICAgICAgICBzZWxmLl9mbGFreV90ZXN0
X2NhY2hlW3VybF0gPSBjb250ZW50CisKKyAgICAgICAgZmxha2luZXNzID0gZXh0cmFjdF9maXJz
dF92YWx1ZShjb250ZW50LCBGTEFLWV9URVNUX1JFR0VYICUgdGVzdF9wYXRoKQorICAgICAgICBy
ZXR1cm4gZmxha2luZXNzCisKKyAgICBkZWYgX2dldF90ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToK
KyAgICAgICAgaWYgbm90IHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zX2NhY2hlOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYudGVzdF9leHBlY3RhdGlvbnNfZmlsZToK
KyAgICAgICAgICAgICAgICAgICAgbG9nID0gb3BlbihzZWxmLnRlc3RfZXhwZWN0YXRpb25zX2Zp
bGUsICdyJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9leHBlY3RhdGlvbnNfY2Fj
aGUgPSAiXG4iLmpvaW4obG9nLnJlYWRsaW5lcygpKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zX2NhY2hlID0gc2NyYXBl
X3VybCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfRVhQRUNUQVRJT05TX1VSTCkKKyAg
ICAgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJDb3Vs
ZCBub3QgZmluZCB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgYXQgJXMiICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgVEVTVF9FWFBFQ1RBVElPTlNfVVJMKQorCisgICAgICAgIHJldHVybiBzZWxmLl90
ZXN0X2V4cGVjdGF0aW9uc19jYWNoZQorCisgICAgZGVmIF9nZXRfdGVzdF9leHBlY3RhdGlvbnNf
bGluZShzZWxmLCB0ZXN0X3BhdGgpOgorICAgICAgICBjb250ZW50ID0gc2VsZi5fZ2V0X3Rlc3Rf
ZXhwZWN0YXRpb25zKCkKKworICAgICAgICBpZiBub3QgY29udGVudDoKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICAgICAgZm9yIG1hdGNoIGluIGNvbnRlbnQuc3BsaXRsaW5lcygpOgor
ICAgICAgICAgICAgbGluZSA9IHJlLnNlYXJjaCgiLio/IDogKC4qPykgPSAuKiIsIG1hdGNoKQor
ICAgICAgICAgICAgaWYgbGluZSBhbmQgdGVzdF9wYXRoLmZpbmQobGluZS5ncm91cCgxKSkgPiAt
MToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2gKKworICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgZGVmIF9jb3B5X2ZpbGVfZnJvbV96aXBfZGlyKHNlbGYsIGZpbGVfaW5femlwLCBmaWxl
X3RvX2NyZWF0ZSk6CisgICAgICAgIG1vZGlmaWVycyA9ICIiCisgICAgICAgIGlmIGZpbGVfdG9f
Y3JlYXRlLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBtb2RpZmllcnMgPSAiYiIKKyAg
ICAgICAgZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoZmlsZV90b19jcmVhdGUpWzA6
LTFdKVswXQorICAgICAgICBjcmVhdGVfZGlyZWN0b3J5KGRpcikKKyAgICAgICAgZmlsZSA9IG9z
LnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKFRFTVBfWklQX0RJUiwgZmlsZV9pbl96aXApKQor
ICAgICAgICBzaHV0aWwuY29weShmaWxlLCBkaXIpCisKKyAgICBkZWYgX2V4dHJhY3RfZmlsZV9m
cm9tX3ppcChzZWxmLCB6aXAsIGZpbGVfaW5femlwLCBmaWxlX3RvX2NyZWF0ZSk6CisgICAgICAg
IG1vZGlmaWVycyA9ICIiCisgICAgICAgIGlmIGZpbGVfdG9fY3JlYXRlLmVuZHN3aXRoKCIucG5n
Iik6CisgICAgICAgICAgICBtb2RpZmllcnMgPSAiYiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgY3JlYXRlX2RpcmVjdG9yeShmaWxlX3RvX2NyZWF0ZVswOmZpbGVfdG9fY3JlYXRlLnJmaW5k
KCIvIildKQorICAgICAgICAgICAgbG9jYWxGaWxlID0gb3BlbihmaWxlX3RvX2NyZWF0ZSwgIncl
cyIgJSBtb2RpZmllcnMpCisgICAgICAgICAgICBsb2NhbEZpbGUud3JpdGUoemlwLnJlYWQoZmls
ZV9pbl96aXApKQorICAgICAgICAgICAgbG9jYWxGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG9z
LmNobW9kKGZpbGVfdG9fY3JlYXRlLCAwNzc3KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAg
ICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJpbnQgIkZpbGUgJXMgZG9lcyBu
b3QgZXhpc3QgaW4gemlwIGZpbGUuIiAlIChmaWxlX2luX3ppcCkKKyAgICAgICAgZXhjZXB0IEF0
dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgIkZpbGUgJXMgZG9lcyBub3QgZXhpc3Qg
aW4gemlwIGZpbGUuIiAlIChmaWxlX2luX3ppcCkKKyAgICAgICAgICAgIHByaW50ICJJcyB0aGlz
IHppcCBmaWxlIGFzc2VtYmxlZCBjb3JyZWN0bHk/IgorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBfZG93bmxvYWRfZmlsZShzZWxmLCB1cmwsIGxvY2FsX2ZpbGVuYW1lPU5vbmUsIG1v
ZGlmaWVycz0iIiwKKyAgICAgICAgICAgICAgICAgICAgICBmb3JjZT1GYWxzZSk6CisgICAgICAg
ICIiIgorICAgICAgICBDb3B5IHRoZSBjb250ZW50cyBvZiBhIGZpbGUgZnJvbSBhIGdpdmVuIFVS
TAorICAgICAgICB0byBhIGxvY2FsIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpZiBsb2NhbF9maWxlbmFtZSA9PSBOb25lOgorICAgICAgICAgICAgICAgIGxv
Y2FsX2ZpbGVuYW1lID0gdXJsLnNwbGl0KCcvJylbLTFdCisgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZmlsZShsb2NhbF9maWxlbmFtZSkgYW5kIG5vdCBmb3JjZToKKyAgICAgICAgICAgICAgICBp
ZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJGaWxlIGF0ICVzIGFs
cmVhZHkgZXhpc3RzLiIgJSBsb2NhbF9maWxlbmFtZQorICAgICAgICAgICAgICAgIHJldHVybiBs
b2NhbF9maWxlbmFtZQorICAgICAgICAgICAgaWYgc2VsZi5kb250X2Rvd25sb2FkOgorICAgICAg
ICAgICAgICAgIHJldHVybiBsb2NhbF9maWxlbmFtZQorICAgICAgICAgICAgd2ViRmlsZSA9IHVy
bGxpYjIudXJsb3Blbih1cmwpCisgICAgICAgICAgICBsb2NhbEZpbGUgPSBvcGVuKGxvY2FsX2Zp
bGVuYW1lLCAoInclcyIgJSBtb2RpZmllcnMpKQorICAgICAgICAgICAgbG9jYWxGaWxlLndyaXRl
KHdlYkZpbGUucmVhZCgpKQorICAgICAgICAgICAgd2ViRmlsZS5jbG9zZSgpCisgICAgICAgICAg
ICBsb2NhbEZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2QobG9jYWxfZmlsZW5hbWUs
IDA3NzcpCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvcjoKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yOgorICAgICAgICAgICAg
cHJpbnQgIlRoZSB1cmwgJXMgaXMgbWFsZm9ybWVkLiIgJSB1cmwKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisgICAgICAgIHJldHVybiBsb2NhbEZpbGUubmFtZQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvZmFpbHVyZV9maW5kZXIucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXJfdGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9mYWlsdXJl
X2ZpbmRlcl90ZXN0LnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFpbHVyZV9maW5kZXJfdGVzdC5weQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCB6aXBmaWxlCisKK2Zyb20gZmFp
bHVyZV9maW5kZXIgaW1wb3J0IEZhaWx1cmVGaW5kZXIKKworVEVTVF9CVUlMREVSX09VVFBVVCA9
ICIiIjA5MDcyMyAxMDozODoyMiB0ZXN0X3NoZWxsX3RocmVhZC5weToyODkKKyAgICAgICAgICAg
IEVSUk9SIGNocm9tZS9mYXN0L2Zvcm1zL3RleHRhcmVhLW1ldHJpY3MuaHRtbCBmYWlsZWQ6Cisg
ICAgICAgICAgICAgIFRleHQgZGlmZiBtaXNtYXRjaAorICAgICAgICAgICAgMDkwNzIzIDEwOjM4
OjIxIHRlc3Rfc2hlbGxfdGhyZWFkLnB5OjI4OQorICAgICAgICAgICAgRVJST1IgY2hyb21lL2Zh
c3QvZG9tL3hzcy1ERU5JRUQtamF2YXNjcmlwdC12YXJpYXRpb25zLmh0bWwgZmFpbGVkOgorICAg
ICAgICAgICAgICBUZXh0IGRpZmYgbWlzbWF0Y2gKKyAgICAgICAgICAgIDA5MDcyMyAxMDozNzo1
OCB0ZXN0X3NoZWxsX3RocmVhZC5weToyODkKKyAgICAgICAgICAgIEVSUk9SIExheW91dFRlc3Rz
L3BsdWdpbnMvYmluZGluZ3MtdGVzdC5odG1sIGZhaWxlZDoKKyAgICAgICAgICAgICAgVGV4dCBk
aWZmIG1pc21hdGNoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXhwZWN0ZWQgdG8gY3Jhc2gs
IGJ1dCBwYXNzZWQgKDEpOgorICBjaHJvbWUvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tZXRyaWNzLmh0
bWwKKworUmVncmVzc2lvbnM6IFVuZXhwZWN0ZWQgZmFpbHVyZXMgKDIpOgorICBjaHJvbWUvZmFz
dC9kb20veHNzLURFTklFRC1qYXZhc2NyaXB0LXZhcmlhdGlvbnMuaHRtbCA9IEZBSUwKKyAgTGF5
b3V0VGVzdHMvcGx1Z2lucy9iaW5kaW5ncy10ZXN0Lmh0bWwgPSBGQUlMCistLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyIiIgorCitURVNUX0ZBSUxVUkVfMSA9ICgibGF5b3V0LXRlc3QtcmVzdWx0cy9j
aHJvbWUvZmFzdC9mb3Jtcy8iCisgICAgICAgICAgICAgICAgICAidGV4dGFyZWEtbWV0cmljcy1h
Y3R1YWwudHh0IikKK1RFU1RfRkFJTFVSRV8yID0gKCJsYXlvdXQtdGVzdC1yZXN1bHRzL2Nocm9t
ZS9mYXN0L2RvbS8iCisgICAgICAgICAgICAgICAgICAieHNzLURFTklFRC1qYXZhc2NyaXB0LXZh
cmlhdGlvbnMtYWN0dWFsLnR4dCIpCitURVNUX0ZBSUxVUkVfMyA9ICgibGF5b3V0LXRlc3QtcmVz
dWx0cy9MYXlvdXRUZXN0cy9wbHVnaW5zLyIKKyAgICAgICAgICAgICAgICAgICJiaW5kaW5ncy10
ZXN0LWFjdHVhbC50eHQiKQorCitURVNUX0FSQ0hJVkVfT1VUUFVUID0gIiIiCitBZGRpbmcgbGF5
b3V0LXRlc3QtcmVzdWx0c1xwZW5kaW5nXGZhc3RccmVwYWludFxub3QtcmVhbC1hY3R1YWwuY2hl
Y2tzdW0KK0FkZGluZyBsYXlvdXQtdGVzdC1yZXN1bHRzXHBlbmRpbmdcZmFzdFxyZXBhaW50XG5v
dC1yZWFsLWFjdHVhbC5wbmcKK0FkZGluZyBsYXlvdXQtdGVzdC1yZXN1bHRzXHBlbmRpbmdcZmFz
dFxyZXBhaW50XG5vdC1yZWFsLWFjdHVhbC50eHQKK2xhc3QgY2hhbmdlOiAyMjA1NworYnVpbGQg
bmFtZTogd2Via2l0LXJlbAoraG9zdCBuYW1lOiBjb2RmMTM4CitzYXZpbmcgcmVzdWx0cyB0byBc
XG15XHRlc3RcbG9jYXRpb25cd2Via2l0LXJlbFwyMjA1NworcHJvZ3JhbSBmaW5pc2hlZCB3aXRo
IGV4aXQgY29kZSAwCisiIiIKKworVEVTVF9URVNUX0VYUEVDVEFUSU9OUyA9ICIiIgorQlVHMTIz
NCBjaHJvbWUvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tZXRyaWNzLmh0bWwgPSBDUkFTSAorIiIiCisK
K1RFU1RfQlVJTERFUl9MT0dfRklMRSA9ICJURVNUX2J1aWxkZXIubG9nIgorVEVTVF9BUkNISVZF
X0xPR19GSUxFID0gIlRFU1RfYXJjaGl2ZS5sb2ciCitURVNUX0RVTU1ZX1pJUF9GSUxFID0gIlRF
U1RfemlwZmlsZS56aXAiCitURVNUX0VYUEVDVEFUSU9OU19GSUxFID0gIlRFU1RfZXhwZWN0YXRp
b25zLnR4dCIKKworV0VCS0lUX0JVSUxERVJfTlVNQkVSID0gIjk4MDAiCitXRUJLSVRfRkFJTFVS
RVMgPSAoCisgIFsiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9hbmltYXRlZC1zdmctYXMt
bWFzay5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL2JhY2tncm91bmQt
Y2xpcC10ZXh0Lmh0bWwiLAorICAgIkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvbWFzay1j
b21wb3NpdGUuaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9yZXBlYXQv
bWFzay1uZWdhdGl2ZS1vZmZzZXQtcmVwZWF0Lmh0bWwiLAorICAgIkxheW91dFRlc3RzL2Zhc3Qv
YmFja2dyb3VuZHMvc3ZnLWFzLWJhY2tncm91bmQtMy5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9m
YXN0L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTYuaHRtbCIsCisgICAiTGF5b3V0VGVz
dHMvZmFzdC9iYWNrZ3JvdW5kcy9zdmctYXMtbWFzay5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9m
YXN0L2Jsb2NrL2Zsb2F0LzAxMy5odG1sIiwKKyAgICJMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrL2Zs
b2F0L25lc3RlZC1jbGVhcmFuY2UuaHRtbCIsCisgICAiTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9w
b3NpdGlvbmluZy8wNDcuaHRtbCJdKQorCitDSFJPTUlVTV9CQVNFTElORSA9ICJjaHJvbWUvZmFz
dC9mb3Jtcy9iYXNpYy1idXR0b25zLmh0bWwiCitFWFBFQ1RFRF9DSFJPTUlVTV9MT0NBTF9CQVNF
TElORSA9ICIuL2Nocm9tZS9mYXN0L2Zvcm1zL2Jhc2ljLWJ1dHRvbnMuaHRtbCIKK0VYUEVDVEVE
X0NIUk9NSVVNX1VSTF9CQVNFTElORSA9ICgiaHR0cDovL3NyYy5jaHJvbWl1bS5vcmcvdmlld3Zj
L2Nocm9tZS8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRydW5rL3NyYy93
ZWJraXQvZGF0YS9sYXlvdXRfdGVzdHMvY2hyb21lLyIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZmFzdC9mb3Jtcy9iYXNpYy1idXR0b25zLmh0bWwiKQorCitXRUJLSVRfQkFT
RUxJTkUgPSAiTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy8xMTQyMy5odG1sIgorRVhQRUNURURfV0VC
S0lUX0xPQ0FMX0JBU0VMSU5FID0gIi4vTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy8xMTQyMy5odG1s
IgorRVhQRUNURURfV0VCS0lUX1VSTF9CQVNFTElORSA9ICgKKyAgICAiaHR0cDovL3N2bi53ZWJr
aXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rLyIKKyAgICAiTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy8xMTQyMy5odG1sIikKKworVEVTVF9aSVBfRklMRSA9ICgiaHR0cDovL2J1aWxkLmNocm9t
aXVtLm9yZy9idWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKKyAgICAgICAgICAgICAgICAg
IndlYmtpdC1yZWwvMjE0MzIvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAiKQorCitFWFBFQ1RFRF9S
RVZJU0lPTiA9ICIyMDg2MSIKK0VYUEVDVEVEX0JVSUxEX05BTUUgPSAid2Via2l0LXJlbCIKKwor
U1ZHX1RFU1RfRVhQRUNUQVRJT04gPSAoCisgICAgIkxheW91dFRlc3RzL3N2Zy9jdXN0b20vZm9y
ZWlnbi1vYmplY3Qtc2tldy1leHBlY3RlZC5wbmciKQorU1ZHX1RFU1RfRVhQRUNUQVRJT05fVVBT
VFJFQU0gPSAoIkxheW91dFRlc3RzL3N2Zy9jdXN0b20vIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImZvcmVpZ24tb2JqZWN0LXNrZXctZXhwZWN0ZWQtdXBzdHJlYW0ucG5nIikK
K1dFQkFSQ0hJVkVfVEVTVF9FWFBFQ1RBVElPTiA9ICgiTGF5b3V0VGVzdHMvd2ViYXJjaGl2ZS9h
ZG9wdC1hdHRyaWJ1dGUtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZWQt
Ym9keS13ZWJhcmNoaXZlLWV4cGVjdGVkLndlYmFyY2hpdmUiKQorRE9NX1RFU1RfRVhQRUNUQVRJ
T04gPSAoIkxheW91dFRlc3RzL2Zhc3QvZG9tLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICJh
dHRyaWJ1dGUtZG93bmNhc3QtcmlnaHQtZXhwZWN0ZWQudHh0IikKK0RPTV9URVNUX0VYUEVDVEFU
SU9OX1VQU1RSRUFNID0gKCJMYXlvdXRUZXN0cy9mYXN0L2RvbS8iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiYXR0cmlidXRlLWRvd25jYXN0LXJpZ2h0LSIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZC11cHN0cmVhbS5wbmciKQorCitURVNUX0VY
UEVDVEFUSU9OUyA9ICIiIgorQlVHMTIzNCBXT05URklYIDogTGF5b3V0VGVzdHMvZmFzdC9iYWNr
Z3JvdW5kcy9zdmctYXMtYmFja2dyb3VuZC0zLmh0bWwgPSBGQUlMCitCVUczNDU2IFdJTiA6IExh
eW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvc3ZnLWFzLWJhY2tncm91bmQtNi5odG1sID0gQ1JB
U0gKK0JVRzQ1NjcgOiBMYXlvdXRUZXN0cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1tYXNrLmh0
bWwgPSBQQVNTCitXT05URklYIDogTGF5b3V0VGVzdHMvZmFzdC9ibG9jay8gPSBGQUlMCisiIiIK
KworRVhQRUNUX0VYQUNUX01BVENIID0gIkxheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvc3Zn
LWFzLWJhY2tncm91bmQtNi5odG1sIgorRVhQRUNUX0dFTkVSQUxfTUFUQ0ggPSAiTGF5b3V0VGVz
dHMvZmFzdC9ibG9jay9mbG9hdC8wMTMuaHRtbCIKK0VYUEVDVF9OT19NQVRDSCA9ICJMYXlvdXRU
ZXN0cy9mYXN0L2JhY2tncm91bmRzL3N2Zy1hcy1iYWNrZ3JvdW5kLTk5Lmh0bWwiCisKK1dFQktJ
VF9PUkcgPSAid2Via2l0Lm9yZyIKK0NIUk9NSVVNX09SRyA9ICJjaHJvbWl1bS5vcmciCisKKwor
Y2xhc3MgRmFpbHVyZUZpbmRlclRlc3Qob2JqZWN0KToKKworICAgIGRlZiBydW5UZXN0cyhzZWxm
KToKKyAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKKworICAgICAgICB0ZXN0cyA9IFsi
dGVzdFdoaXRlc3BhY2VJbkJ1aWxkZXJOYW1lIiwKKyAgICAgICAgICAgICAgICAgInRlc3RHZXRM
YXN0QnVpbGQiLAorICAgICAgICAgICAgICAgICAidGVzdEZpbmRNYXRjaGVzSW5CdWlsZGVyT3V0
cHV0IiwKKyAgICAgICAgICAgICAgICAgInRlc3RTY3JhcGVCdWlsZGVyT3V0cHV0IiwKKyAgICAg
ICAgICAgICAgICAgInRlc3RHZXRDaHJvbWl1bUJhc2VsaW5lIiwKKyAgICAgICAgICAgICAgICAg
InRlc3RHZXRXZWJraXRCYXNlbGluZSIsCisgICAgICAgICAgICAgICAgICJ0ZXN0WmlwRG93bmxv
YWQiLAorICAgICAgICAgICAgICAgICAidGVzdFVzZUxvY2FsT3V0cHV0IiwKKyAgICAgICAgICAg
ICAgICAgInRlc3RUcmFuc2xhdGVCdWlsZFRvWmlwIiwKKyAgICAgICAgICAgICAgICAgInRlc3RH
ZXRCYXNlbGluZSIsCisgICAgICAgICAgICAgICAgICJ0ZXN0RmluZFRlc3RFeHBlY3RhdGlvbnMi
LAorICAgICAgICAgICAgICAgICAidGVzdEZ1bGwiXQorCisgICAgICAgIGZvciB0ZXN0IGluIHRl
c3RzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwodGVz
dCArICIoKSIpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgICAgICAg
ICBwcmludCAiWyBPSyAgICAgIF0gJXMiICUgdGVzdAorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICAgICAg
ICAgICAgICBwcmludCAiWyAgICBGQUlMIF0gJXMiICUgdGVzdAorICAgICAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgICAgIHByaW50ICJbICBFUlJPUiAgXSAlcyIgJSB0ZXN0CisgICAgICAg
IHJldHVybiBhbGxfdGVzdHNfcGFzc2VkCisKKworZGVmIF9nZXRfYmFzaWNfZmFpbHVyZV9maW5k
ZXIoKToKKyAgICByZXR1cm4gRmFpbHVyZUZpbmRlcihOb25lLCAiV2Via2l0IiwgRmFsc2UsICIi
LCAiLiIsIDEwLCBGYWxzZSkKKworCitkZWYgX3Rlc3RfbGFzdF9idWlsZChmYWlsdXJlX2ZpbmRl
cik6CisgICAgdHJ5OgorICAgICAgICBsYXN0X2J1aWxkID0gZmFpbHVyZV9maW5kZXIuZ2V0X2xh
c3RfYnVpbGQoKQorICAgICAgICAjIFZlcmlmeSB0aGF0IGxhc3RfYnVpbGQgaXMgbm90IGVtcHR5
IGFuZCBpcyBhIG51bWJlci4KKyAgICAgICAgYnVpbGQgPSBpbnQobGFzdF9idWlsZCkKKyAgICAg
ICAgcmV0dXJuIChidWlsZCA+IDApCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gRmFsc2UK
KworCitkZWYgdGVzdF9nZXRfbGFzdF9idWlsZCgpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2Zh
aWx1cmVfZmluZGVyKCkKKyAgICByZXR1cm4gX3Rlc3RfbGFzdF9idWlsZCh0ZXN0KQorCisKK2Rl
ZiB0ZXN0X3doaXRlc3BhY2VfaW5fYnVpbGRlcl9uYW1lKCk6CisgICAgdGVzdCA9IF9nZXRfYmFz
aWNfZmFpbHVyZV9maW5kZXIoKQorICAgIHRlc3Quc2V0X3BsYXRmb3JtKCJXZWJraXQgKHdlYmtp
dC5vcmcpIikKKyAgICByZXR1cm4gX3Rlc3RfbGFzdF9idWlsZCh0ZXN0KQorCisKK2RlZiB0ZXN0
X3NjcmFwZV9idWlsZGVyX291dHB1dCgpOgorCisgICAgIyBUcnkgb24gdGhlIGRlZmF1bHQgYnVp
bGRlci4KKyAgICB0ZXN0ID0gX2dldF9iYXNpY19mYWlsdXJlX2ZpbmRlcigpCisgICAgdGVzdC5i
dWlsZCA9ICI5ODAwIgorICAgIG91dHB1dCA9IHRlc3QuX3NjcmFwZV9idWlsZGVyX291dHB1dCgp
CisgICAgaWYgbm90IG91dHB1dDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIFRyeSBv
biBhIGNyYXp5IGJ1aWxkZXIgb24gdGhlIEZZSSB3YXRlcmZhbGwuCisgICAgdGVzdCA9IF9nZXRf
YmFzaWNfZmFpbHVyZV9maW5kZXIoKQorICAgIHRlc3QuYnVpbGQgPSAiMTc2NiIKKyAgICB0ZXN0
LnNldF9wbGF0Zm9ybSgiV2Via2l0IExpbnV4ICh3ZWJraXQub3JnKSIpCisgICAgb3V0cHV0ID0g
dGVzdC5fc2NyYXBlX2J1aWxkZXJfb3V0cHV0KCkKKyAgICBpZiBub3Qgb3V0cHV0OgorICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHRlc3RfZmluZF9tYXRj
aGVzX2luX2J1aWxkZXJfb3V0cHV0KCk6CisgICAgdGVzdCA9IF9nZXRfYmFzaWNfZmFpbHVyZV9m
aW5kZXIoKQorICAgIHRlc3QuZXhjbHVkZV9rbm93bl9mYWlsdXJlcyA9IFRydWUKKyAgICBtYXRj
aGVzID0gdGVzdC5fZmluZF9tYXRjaGVzX2luX2J1aWxkZXJfb3V0cHV0KFRFU1RfQlVJTERFUl9P
VVRQVVQpCisgICAgIyBWZXJpZnkgdGhhdCB3ZSBmb3VuZCB4IG1hdGNoZXMuCisgICAgaWYgbGVu
KG1hdGNoZXMpICE9IDI6CisgICAgICAgIHByaW50ICJEaWQgbm90IGZpbmQgYWxsIHVuZXhwZWN0
ZWQgZmFpbHVyZXMuIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHRlc3QuZXhjbHVkZV9r
bm93bl9mYWlsdXJlcyA9IEZhbHNlCisgICAgbWF0Y2hlcyA9IHRlc3QuX2ZpbmRfbWF0Y2hlc19p
bl9idWlsZGVyX291dHB1dChURVNUX0JVSUxERVJfT1VUUFVUKQorICAgIGlmIGxlbihtYXRjaGVz
KSAhPSAzOgorICAgICAgICBwcmludCAiRGlkIG5vdCBmaW5kIGFsbCBmYWlsdXJlcy4iCisgICAg
ICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKworZGVmIF90ZXN0X2Jhc2VsaW5l
KHRlc3RfbmFtZSwgZXhwZWN0ZWRfbG9jYWwsIGV4cGVjdGVkX3VybCk6CisgICAgdGVzdCA9IF9n
ZXRfYmFzaWNfZmFpbHVyZV9maW5kZXIoKQorICAgICMgVGVzdCBiYXNlbGluZSB0aGF0IGlzIG9i
dmlvdXNseSBpbiBDaHJvbWl1bSdzIHRyZWUuCisgICAgYmFzZWxpbmUgPSB0ZXN0Ll9nZXRfYmFz
ZWxpbmUodGVzdF9uYW1lLCAiLiIsIEZhbHNlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3Zl
KGJhc2VsaW5lLmxvY2FsX2ZpbGUpCisgICAgICAgIGlmIChiYXNlbGluZS5sb2NhbF9maWxlICE9
IGV4cGVjdGVkX2xvY2FsIG9yCisgICAgICAgICAgICBiYXNlbGluZS5iYXNlbGluZV91cmwgIT0g
ZXhwZWN0ZWRfdXJsKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV4Y2VwdDoKKyAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgdGVzdF9nZXRfY2hy
b21pdW1fYmFzZWxpbmUoKToKKyAgICByZXR1cm4gX3Rlc3RfYmFzZWxpbmUoQ0hST01JVU1fQkFT
RUxJTkUsIEVYUEVDVEVEX0NIUk9NSVVNX0xPQ0FMX0JBU0VMSU5FLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIEVYUEVDVEVEX0NIUk9NSVVNX1VSTF9CQVNFTElORSkKKworCitkZWYgdGVzdF9n
ZXRfd2Via2l0X2Jhc2VsaW5lKCk6CisgICAgcmV0dXJuIF90ZXN0X2Jhc2VsaW5lKFdFQktJVF9C
QVNFTElORSwgRVhQRUNURURfV0VCS0lUX0xPQ0FMX0JBU0VMSU5FLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIEVYUEVDVEVEX1dFQktJVF9VUkxfQkFTRUxJTkUpCisKKworZGVmIHRlc3RfdXNl
X2xvY2FsX291dHB1dCgpOgorICAgIHRlc3RfcmVzdWx0ID0gVHJ1ZQorICAgIHRyeToKKyAgICAg
ICAgX3dyaXRlX2ZpbGUoVEVTVF9CVUlMREVSX0xPR19GSUxFLCBURVNUX0JVSUxERVJfT1VUUFVU
KQorICAgICAgICBfd3JpdGVfZmlsZShURVNUX0FSQ0hJVkVfTE9HX0ZJTEUsIFRFU1RfQVJDSElW
RV9PVVRQVVQpCisgICAgICAgIF93cml0ZV9maWxlKFRFU1RfRVhQRUNUQVRJT05TX0ZJTEUsIFRF
U1RfVEVTVF9FWFBFQ1RBVElPTlMpCisgICAgICAgIHppcCA9IHppcGZpbGUuWmlwRmlsZShURVNU
X0RVTU1ZX1pJUF9GSUxFLCAndycpCisgICAgICAgIHppcC53cml0ZShURVNUX0JVSUxERVJfTE9H
X0ZJTEUsIFRFU1RfRkFJTFVSRV8xKQorICAgICAgICB6aXAud3JpdGUoVEVTVF9CVUlMREVSX0xP
R19GSUxFLCBURVNUX0ZBSUxVUkVfMikKKyAgICAgICAgemlwLndyaXRlKFRFU1RfQlVJTERFUl9M
T0dfRklMRSwgVEVTVF9GQUlMVVJFXzMpCisgICAgICAgIHppcC5jbG9zZSgpCisgICAgICAgIHRl
c3QgPSBfZ2V0X2Jhc2ljX2ZhaWx1cmVfZmluZGVyKCkKKyAgICAgICAgdGVzdC5hcmNoaXZlX3N0
ZXBfbG9nX2ZpbGUgPSBURVNUX0FSQ0hJVkVfTE9HX0ZJTEUKKyAgICAgICAgdGVzdC5idWlsZGVy
X291dHB1dF9sb2dfZmlsZSA9IFRFU1RfQlVJTERFUl9MT0dfRklMRQorICAgICAgICB0ZXN0LnRl
c3RfZXhwZWN0YXRpb25zX2ZpbGUgPSBURVNUX0VYUEVDVEFUSU9OU19GSUxFCisgICAgICAgIHRl
c3QuemlwX2ZpbGUgPSBURVNUX0RVTU1ZX1pJUF9GSUxFCisgICAgICAgIHRlc3QuZG9udF9kb3du
bG9hZCA9IFRydWUKKyAgICAgICAgdGVzdC5leGNsdWRlX2tub3duX2ZhaWx1cmVzID0gVHJ1ZQor
ICAgICAgICB0ZXN0LmRlbGV0ZV96aXBfZmlsZSA9IEZhbHNlCisgICAgICAgIGZhaWx1cmVzID0g
dGVzdC5nZXRfZmFpbHVyZXMoKQorICAgICAgICBpZiBub3QgZmFpbHVyZXMgb3IgbGVuKGZhaWx1
cmVzKSAhPSAyOgorICAgICAgICAgICAgcHJpbnQgIkRpZCBub3QgZ2V0IGV4cGVjdGVkIG51bWJl
ciBvZiBmYWlsdXJlcyA6IgorICAgICAgICAgICAgZm9yIGZhaWx1cmUgaW4gZmFpbHVyZXM6Cisg
ICAgICAgICAgICAgICAgcHJpbnQgZmFpbHVyZS50ZXN0X3BhdGgKKyAgICAgICAgICAgIHRlc3Rf
cmVzdWx0ID0gRmFsc2UKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5yZW1vdmUoVEVTVF9CVUlM
REVSX0xPR19GSUxFKQorICAgICAgICBvcy5yZW1vdmUoVEVTVF9BUkNISVZFX0xPR19GSUxFKQor
ICAgICAgICBvcy5yZW1vdmUoVEVTVF9FWFBFQ1RBVElPTlNfRklMRSkKKyAgICAgICAgb3MucmVt
b3ZlKFRFU1RfRFVNTVlfWklQX0ZJTEUpCisgICAgcmV0dXJuIHRlc3RfcmVzdWx0CisKKworZGVm
IF93cml0ZV9maWxlKGZpbGVuYW1lLCBjb250ZW50cyk6CisgICAgbXlmaWxlID0gb3BlbihmaWxl
bmFtZSwgJ3cnKQorICAgIG15ZmlsZS53cml0ZShjb250ZW50cykKKyAgICBteWZpbGUuY2xvc2Uo
KQorCisKK2RlZiB0ZXN0X3ppcF9kb3dubG9hZCgpOgorICAgIHRlc3QgPSBfZ2V0X2Jhc2ljX2Zh
aWx1cmVfZmluZGVyKCkKKyAgICB0cnk6CisgICAgICAgIHRlc3QuX2Rvd25sb2FkX2ZpbGUoVEVT
VF9aSVBfRklMRSwgInRlc3QuemlwIiwgImIiKSAjICJiIiAtPiBiaW5hcnkKKyAgICAgICAgb3Mu
cmVtb3ZlKCJ0ZXN0LnppcCIpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0OgorICAg
ICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgdGVzdF90cmFuc2xhdGVfYnVpbGRfdG9femlwKCk6
CisgICAgdGVzdCA9IF9nZXRfYmFzaWNfZmFpbHVyZV9maW5kZXIoKQorICAgIHRlc3QuYnVpbGQg
PSBXRUJLSVRfQlVJTERFUl9OVU1CRVIKKyAgICByZXZpc2lvbiwgYnVpbGRfbmFtZSA9IHRlc3Qu
X2dldF9yZXZpc2lvbl9hbmRfYnVpbGRfZnJvbV9hcmNoaXZlX3N0ZXAoKQorICAgIGlmIHJldmlz
aW9uICE9IEVYUEVDVEVEX1JFVklTSU9OIG9yIGJ1aWxkX25hbWUgIT0gRVhQRUNURURfQlVJTERf
TkFNRToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgdGVz
dF9nZXRfYmFzZWxpbmUoKToKKyAgICB0ZXN0ID0gX2dldF9iYXNpY19mYWlsdXJlX2ZpbmRlcigp
CisgICAgcmVzdWx0ID0gVHJ1ZQorICAgIHRlc3QucGxhdGZvcm0gPSAiY2hyb21pdW0tbWFjIgor
ICAgIGJhc2VsaW5lID0gdGVzdC5fZ2V0X2Jhc2VsaW5lKFdFQkFSQ0hJVkVfVEVTVF9FWFBFQ1RB
VElPTiwgIi4iKQorICAgIGlmIG5vdCBiYXNlbGluZS5sb2NhbF9maWxlIG9yIGJhc2VsaW5lLmJh
c2VsaW5lX3VybC5maW5kKFdFQktJVF9PUkcpID09IC0xOgorICAgICAgICByZXN1bHQgPSBGYWxz
ZQorICAgICAgICBwcmludCAiV2ViYXJjaGl2ZSBsYXlvdXQgdGVzdCBub3QgZm91bmQgYXQgd2Vi
a2l0Lm9yZzogJXMiICUgdXJsCisgICAgdGVzdC5wbGF0Zm9ybSA9ICJjaHJvbWl1bS13aW4iCisg
ICAgYmFzZWxpbmUgPSB0ZXN0Ll9nZXRfYmFzZWxpbmUoU1ZHX1RFU1RfRVhQRUNUQVRJT04sICIu
IikKKyAgICBpZiAobm90IGJhc2VsaW5lLmxvY2FsX2ZpbGUgb3IKKyAgICAgICAgYmFzZWxpbmUu
YmFzZWxpbmVfdXJsLmZpbmQoQ0hST01JVU1fT1JHKSA9PSAtMSk6CisgICAgICAgIHJlc3VsdCA9
IEZhbHNlCisgICAgICAgIHByaW50ICJTVkcgbGF5b3V0IHRlc3QgZm91bmQgYXQgJXMsIG5vdCBj
aHJvbWl1bS5vcmciICUgdXJsCisgICAgYmFzZWxpbmUgPSB0ZXN0Ll9nZXRfYmFzZWxpbmUoU1ZH
X1RFU1RfRVhQRUNUQVRJT04sICIuIiwgVHJ1ZSkKKyAgICBpZiBub3QgYmFzZWxpbmUubG9jYWxf
ZmlsZSBvciBiYXNlbGluZS5iYXNlbGluZV91cmwuZmluZChXRUJLSVRfT1JHKSA9PSAtMToKKyAg
ICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgcHJpbnQgIlVwc3RyZWFtIFNWRyBsYXlvdXQg
dGVzdCBOT1QgZm91bmQgYXQgd2Via2l0Lm9yZyEiCisgICAgYmFzZWxpbmUgPSB0ZXN0Ll9nZXRf
YmFzZWxpbmUoRE9NX1RFU1RfRVhQRUNUQVRJT04sICIuIiwgVHJ1ZSkKKyAgICBpZiAobm90IGJh
c2VsaW5lLmxvY2FsX2ZpbGUgb3IKKyAgICAgICAgYmFzZWxpbmUuYmFzZWxpbmVfdXJsLmZpbmQo
Ii9wbGF0Zm9ybS8iKSA+IC0xKToKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgcHJp
bnQgKCJVcHN0cmVhbSBTVkcgbGF5b3V0IHRlc3QgZm91bmQgaW4gYSAiCisgICAgICAgICAgICAg
ICAicGxhdGZvcm0gZGlyZWN0b3J5OiAlcyIgJSB1cmwpCisgICAgb3MucmVtb3ZlKFdFQkFSQ0hJ
VkVfVEVTVF9FWFBFQ1RBVElPTikKKyAgICBvcy5yZW1vdmUoU1ZHX1RFU1RfRVhQRUNUQVRJT04p
CisgICAgb3MucmVtb3ZlKFNWR19URVNUX0VYUEVDVEFUSU9OX1VQU1RSRUFNKQorICAgIG9zLnJl
bW92ZShET01fVEVTVF9FWFBFQ1RBVElPTl9VUFNUUkVBTSkKKyAgICBkZWxldGVfZGlyKCJMYXlv
dXRUZXN0cyIpCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBkZWxldGVfZGlyKGRpcmVjdG9y
eSk6CisgICAgIiIiIFJlY3Vyc2l2ZWx5IGRlbGV0ZXMgZW1wdHkgZGlyZWN0b3JpZXMgZ2l2ZW4g
YSByb290LgorICAgIFRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZXkg
YXJlIG5vdCBlbXB0eS4gIiIiCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGso
ZGlyZWN0b3J5LCB0b3Bkb3duPUZhbHNlKToKKyAgICAgICAgZm9yIGQgaW4gZGlyczoKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4ocm9vdCwg
ZCkpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgIG9zLnJt
ZGlyKGRpcmVjdG9yeSkKKworCitkZWYgdGVzdF9mdWxsKCk6CisgICAgIiIiIFZlcmlmaWVzIHRo
YXQgdGhlIGVudGlyZSBzeXN0ZW0gd29ya3MgZW5kLXRvLWVuZC4gIiIiCisgICAgdGVzdCA9IF9n
ZXRfYmFzaWNfZmFpbHVyZV9maW5kZXIoKQorICAgIHRlc3QuYnVpbGQgPSBXRUJLSVRfQlVJTERF
Ul9OVU1CRVIKKyAgICB0ZXN0LmRvbnRfZG93bmxvYWQgPSBUcnVlICAjIERyeSBydW4gb25seSwg
bm8gZG93bmxvYWRpbmcgbmVlZGVkLgorICAgIGZhaWx1cmVzID0gdGVzdC5nZXRfZmFpbHVyZXMo
KQorICAgICMgVmVyaWZ5IHRoYXQgdGhlIG1heCBmYWlsdXJlcyBwYXJhbWV0ZXIgd29ya3MuCisg
ICAgaWYgbm90IGZhaWx1cmVzIG9yIGxlbihmYWlsdXJlcykgPiAxMDoKKyAgICAgICAgIkdvdCBu
byBmYWlsdXJlcyBvciB0b28gbWFueSBmYWlsdXJlcy4iCisgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgIyBWZXJpZnkgdGhlIGZhaWx1cmVzIG1hdGNoIHRoZSBsaXN0IG9mIGV4cGVjdGVkIGZh
aWx1cmVzLgorICAgIGZvciBmYWlsdXJlIGluIGZhaWx1cmVzOgorICAgICAgICBpZiBub3QgKGZh
aWx1cmUudGVzdF9wYXRoIGluIFdFQktJVF9GQUlMVVJFUyk6CisgICAgICAgICAgICBwcmludCAi
Rm91bmQgYSBmYWlsdXJlIEkgZGlkIG5vdCBleHBlY3QgdG8gc2VlLiIKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgdGVzdF9maW5kX3Rlc3RfZXhw
ZWN0YXRpb25zKCk6CisgICAgdGVzdCA9IF9nZXRfYmFzaWNfZmFpbHVyZV9maW5kZXIoKQorICAg
IHRlc3QuX3Rlc3RfZXhwZWN0YXRpb25zX2NhY2hlID0gVEVTVF9FWFBFQ1RBVElPTlMKKyAgICBt
YXRjaCA9IHRlc3QuX2dldF90ZXN0X2V4cGVjdGF0aW9uc19saW5lKEVYUEVDVF9FWEFDVF9NQVRD
SCkKKyAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIG1hdGNoID0g
dGVzdC5fZ2V0X3Rlc3RfZXhwZWN0YXRpb25zX2xpbmUoRVhQRUNUX0dFTkVSQUxfTUFUQ0gpCisg
ICAgaWYgbm90IG1hdGNoOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBtYXRjaCA9IHRlc3Qu
X2dldF90ZXN0X2V4cGVjdGF0aW9uc19saW5lKEVYUEVDVF9OT19NQVRDSCkKKyAgICByZXR1cm4g
bm90IG1hdGNoCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBmZnQgPSBGYWls
dXJlRmluZGVyVGVzdCgpCisgICAgcmVzdWx0ID0gZmZ0LnJ1blRlc3RzKCkKKyAgICBpZiByZXN1
bHQ6CisgICAgICAgIHByaW50ICJBbGwgdGVzdHMgcGFzc2VkLiIKKyAgICBlbHNlOgorICAgICAg
ICBwcmludCAiTm90IGFsbCB0ZXN0cyBwYXNzZWQuIgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZmFp
bHVyZV9maW5kZXJfdGVzdC5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
TEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9odG1sX2dlbmVyYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odG1sX2dlbmVyYXRv
ci5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI1NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAx
MCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCByZQorCitmcm9tIGZhaWx1cmUgaW1wb3J0IEZhaWx1cmUKKworQ0hST01JVU1f
QlVHX1VSTCA9ICJodHRwOi8vY3JidWcuY29tLyIKKworCitkZWYgZXh0cmFjdF9maXJzdF92YWx1
ZShzdHJpbmcsIHJlZ2V4KToKKyAgICBtID0gcmUuc2VhcmNoKHJlZ2V4LCBzdHJpbmcpCisgICAg
aWYgbSBhbmQgbS5ncm91cCgxKToKKyAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKKyAgICByZXR1
cm4gTm9uZQorCisjIFRPRE8oZ3dpbHNvbik6IFJlZmFjdG9yIEhUTUwgZ2VuZXJhdGlvbiBpbnRv
IGEgSFRNTCB0ZW1wbGF0aW5nIHN5c3RlbSBsaWtlCisjIERqYW5nbyB0ZW1wbGF0ZXMuCisKKwor
Y2xhc3MgSFRNTEdlbmVyYXRvcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZh
aWx1cmVzLCBvdXRwdXRfZGlyLCBidWlsZCwgcGxhdGZvcm0sCisgICAgICAgICAgICAgICAgIGV4
Y2x1ZGVfa25vd25fZmFpbHVyZXMpOgorICAgICAgICBzZWxmLmZhaWx1cmVzID0gZmFpbHVyZXMK
KyAgICAgICAgc2VsZi5vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgorICAgICAgICBzZWxmLmJ1aWxk
ID0gYnVpbGQKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNlbGYu
ZXhjbHVkZV9rbm93bl9mYWlsdXJlcyA9IGV4Y2x1ZGVfa25vd25fZmFpbHVyZXMKKyAgICAgICAg
c2VsZi5pbWFnZV9zaXplID0gIjIwMHB4IgorCisgICAgZGVmIGdlbmVyYXRlX2h0bWwoc2VsZik6
CisgICAgICAgIGh0bWwgPSAiIgorICAgICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAg
IDxodG1sPgorICAgICAgICAgICAgICAgICAgPGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDxz
dHlsZT4KKyAgICAgICAgICAgICAgICAgICAgICBib2R5IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICBoMiB7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgIC5tYWluVGFibGUgeworICAgICAgICAgICAgICAgICAgICAgICAgYmFj
a2dyb3VuZDogIzY2NjY2NjsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgLm1haW5UYWJsZSB0ZCAsIC5tYWluVGFibGUgdGggeworICAgICAgICAgICAgICAg
ICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgIC50aXRsZWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9udC1zaXplOiAxOHB0OworICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJv
bGQ7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIC5kZXRh
aWwgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAzcHg7CisgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICA8L3N0eWxlPgorICAgICAgICAgICAgICAgICAgPC9oZWFk
PgorICAgICAgICAgICAgICAgICAgPGJvZHk+CisgICAgICAgICAgICAgICAgIiIiCisgICAgICAg
IHRpdGxlID0gIkFsbCBmYWlsdXJlcyIKKyAgICAgICAgaWYgc2VsZi5leGNsdWRlX2tub3duX2Zh
aWx1cmVzOgorICAgICAgICAgICAgdGl0bGUgPSAiUmVncmVzc2lvbnMiCisKKyAgICAgICAgaHRt
bCArPSAiIiIKKyAgICAgICAgICAgICAgICA8aDE+JXMgZm9yIGJ1aWxkICVzICglcyk8L2gxPgor
ICAgICAgICAgICAgICAgICIiIiAlICh0aXRsZSwgc2VsZi5idWlsZCwgc2VsZi5wbGF0Zm9ybSkK
KworICAgICAgICB0ZXN0X251bWJlciA9IDAKKworICAgICAgICAjIFRPRE8oZ3dpbHNvbik6IFJl
ZmFjdG9yIHRoaXMgdG8gZG8gYSBqb2luKCkgb24gYW4gYXJyYXkgb2YgSFRNTCwKKyAgICAgICAg
IyByYXRoZXIgdGhhbiBhcHBlbmRpbmcgc3RyaW5ncyBpbiBhIGxvb3AuCisgICAgICAgIGZvciBm
YWlsdXJlIGluIHNlbGYuZmFpbHVyZXM6CisgICAgICAgICAgICB0ZXN0X251bWJlciArPSAxCisg
ICAgICAgICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iYm9y
ZGVyOiAxcHggc29saWQgYmxhY2s7IHdpZHRoOiAxMjAwcHg7CisgICAgICAgICAgICAgICAgIC13
ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OyIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0
Ij4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxl
PSJiYWNrZ3JvdW5kLWNvbG9yOiAjQ0RFQ0RFOworICAgICAgICAgICAgICAgICAgICAgYm9yZGVy
LWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNs
YXNzPSJ0aXRsZWxpbmsiPiVzLiZuYnNwOyZuYnNwOyVzPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAg
ICAgICAgICAgICAgIDx0cj48dGQ+Jm5ic3A7Jm5ic3A7TGFzdCBtb2RpZmllZDogPGEgaHJlZj0i
JXMiPiVzPC9hPgorICAgICAgICAgICAgICAgICIiIiAlICh0ZXN0X251bWJlciwgZmFpbHVyZS50
ZXN0X3BhdGgsIGZhaWx1cmUuZ2V0X3Rlc3RfaG9tZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICBmYWlsdXJlLnRlc3RfYWdlKQorICAgICAgICAgICAgaHRtbCArPSAiPGRpdiBjbGFzcz0nZGV0
YWlsJz4iCisgICAgICAgICAgICBodG1sICs9ICI8cHJlPiVzPC9wcmU+IiAlIFwKKyAgICAgICAg
ICAgICAgICAgICAgKHNlbGYuX2dlbmVyYXRlX2xpbmtpZmllZF90ZXh0X2V4cGVjdGF0aW9ucyhm
YWlsdXJlKSkKKworICAgICAgICAgICAgaHRtbCArPSBzZWxmLl9nZW5lcmF0ZV9mbGFraW5lc3Nf
aHRtbChmYWlsdXJlKQorCisgICAgICAgICAgICBpZiBmYWlsdXJlLmNyYXNoZWQ6CisgICAgICAg
ICAgICAgICAgaHRtbCArPSAiPGRpdj5UZXN0IDxiPkNSQVNIRUQ8L2I+PC9kaXY+IgorICAgICAg
ICAgICAgZWxpZiBmYWlsdXJlLnRpbWVvdXQ6CisgICAgICAgICAgICAgICAgaHRtbCArPSAiPGRp
dj5UZXN0IDxiPlRJTUVEIE9VVDwvYj48L2Rpdj4iCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xh
c3M9Im1haW5UYWJsZSIgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01PgorICAgICAgICAgICAg
ICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRo
PScyNTAnPiZuYnNwOzwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRo
PScyMDAnPkV4cGVjdGVkPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lk
dGg9JzIwMCc+QWN0dWFsPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lk
dGg9JzIwMCc+RGlmZmVyZW5jZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRo
IHdpZHRoPScyMDAnPlVwc3RyZWFtPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC90
cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICAgICAgaWYgZmFp
bHVyZS50ZXh0X2RpZmZfbWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gc2Vs
Zi5fZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX2h0bWwoZmFpbHVyZSkKKworICAgICAgICAgICAgICAg
IGlmIGZhaWx1cmUuaW1hZ2VfbWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0g
c2VsZi5fZ2VuZXJhdGVfaW1hZ2VfZmFpbHVyZV9odG1sKGZhaWx1cmUpCisKKyAgICAgICAgICAg
ICAgICBodG1sICs9ICI8L3RhYmxlPiIKKyAgICAgICAgICAgIGh0bWwgKz0gIjwvZGl2PjwvdGQ+
PC90cj48L3RhYmxlPjxicj4iCisgICAgICAgIGh0bWwgKz0gIiIiPC9ib2R5PjwvaHRtbD4iIiIK
KworICAgICAgICAjIFRPRE8oZ3dpbHNvbik6IENoYW5nZSB0aGlzIGZpbGVuYW1lIHRvIGJlIHBh
c3NlZCBpbiBhcyBhbiBhcmd1bWVudC4KKyAgICAgICAgaHRtbF9maWxlbmFtZSA9ICIlcy9pbmRl
eC0lcy5odG1sIiAlIChzZWxmLm91dHB1dF9kaXIsIHNlbGYuYnVpbGQpCisgICAgICAgIGh0bWxG
aWxlID0gb3BlbihodG1sX2ZpbGVuYW1lLCAndycpCisgICAgICAgIGh0bWxGaWxlLndyaXRlKGh0
bWwpCisgICAgICAgIGh0bWxGaWxlLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGh0bWxfZmlsZW5h
bWUKKworICAgIGRlZiBfZ2VuZXJhdGVfbGlua2lmaWVkX3RleHRfZXhwZWN0YXRpb25zKHNlbGYs
IGZhaWx1cmUpOgorICAgICAgICBpZiBub3QgZmFpbHVyZS50ZXN0X2V4cGVjdGF0aW9uc19saW5l
OgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIGJ1Z19udW1iZXIgPSBleHRyYWN0X2Zp
cnN0X3ZhbHVlKGZhaWx1cmUudGVzdF9leHBlY3RhdGlvbnNfbGluZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJVRyhcZCspIikKKyAgICAgICAgaWYgbm90IGJ1
Z19udW1iZXIgb3IgYnVnX251bWJlciA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAg
ICAgICByZXR1cm4gZmFpbHVyZS50ZXN0X2V4cGVjdGF0aW9uc19saW5lLnJlcGxhY2UoIkJVRyIg
KyBidWdfbnVtYmVyLAorICAgICAgICAgICAgIjxhIGhyZWY9JyVzJXMnPkJVRyVzPC9hPiIgJSAo
Q0hST01JVU1fQlVHX1VSTCwgYnVnX251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1Z19udW1iZXIpKQorCisgICAgIyBUT0RPKGd3aWxzb24pOiBGaXgg
dGhpcyBzbyB0aGF0IGl0IHNob3dzIHRoZSBsYXN0IHRlbiBydW5zCisgICAgIyBub3QganVzdCBh
ICJtZXRlciIgb2YgZmxha2luZXNzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9mbGFraW5lc3NfaHRt
bChzZWxmLCBmYWlsdXJlKToKKyAgICAgICAgaHRtbCA9ICIiCisgICAgICAgIGlmIG5vdCBmYWls
dXJlLmZsYWtpbmVzczoKKyAgICAgICAgICAgIHJldHVybiBodG1sCisgICAgICAgIGh0bWwgKz0g
IiIiCisgICAgICAgICAgICAgICAgPHRhYmxlPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAg
ICAgICAgICAgICAgICAgICA8dGQ+Rmxha2luZXNzOiAoJXMpPC90ZD4KKyAgICAgICAgICAgICAg
ICAiIiIgJSAoZmFpbHVyZS5mbGFraW5lc3MpCisKKyAgICAgICAgZmxha3lfcmVkID0gaW50KHJv
dW5kKGludChmYWlsdXJlLmZsYWtpbmVzcykgLyA1KSkKKyAgICAgICAgZmxha3lfZ3JlZW4gPSAx
MCAtIGZsYWt5X3JlZAorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBmbGFreV9ncmVlbik6Cisg
ICAgICAgICAgICBodG1sICs9ICIiIgorICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImJh
Y2tncm91bmQ6IGdyZWVuIj4mbmJzcDsmbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAi
IiIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgZmxha3lfcmVkKToKKyAgICAgICAgICAgIGh0
bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iYmFja2dyb3VuZDogcmVk
Ij4mbmJzcDsmbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgaHRt
bCArPSAiIiIKKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90YWJs
ZT48YnI+CisgICAgICAgICAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBodG1sCisKKyAgICBk
ZWYgX2dlbmVyYXRlX3RleHRfZmFpbHVyZV9odG1sKHNlbGYsIGZhaWx1cmUpOgorICAgICAgICBo
dG1sID0gIiIKKyAgICAgICAgaWYgbm90IGZhaWx1cmUuZ2V0X3RleHRfYmFzZWxpbmVfbG9jYXRp
b24oKToKKyAgICAgICAgICAgIHJldHVybiAiIiI8dHI+PHRkIGNvbHNwYW49JzUnPlRoaXMgdGVz
dCBsaWtlbHkgZG9lcyBub3QgaGF2ZSBhbnkKKyAgICAgICAgICAgICAgICAgICAgICBURVhUIGJh
c2VsaW5lIGZvciB0aGlzIHBsYXRmb3JtLCBvciBvbmUgY291bGQgbm90CisgICAgICAgICAgICAg
ICAgICAgICAgYmUgZm91bmQuPC90ZD48L3RyPiIiIgorICAgICAgICBodG1sICs9ICIiIgorICAg
ICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAg
ICAgICAgICAgICAgPGI+PGEgaHJlZj0iJXMiPlJlbmRlciBUcmVlIER1bXA8L2E+PC9iPjxicj4K
KyAgICAgICAgICAgICAgICAgICAgICA8Yj4lczwvYj4gYmFzZWxpbmU8YnI+CisgICAgICAgICAg
ICAgICAgICAgICAgQWdlOiAlczxicj4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAg
ICAgICAgICAgICAiIiIgJSAoZmFpbHVyZS50ZXh0X2Jhc2VsaW5lX3VybCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgZmFpbHVyZS5nZXRfdGV4dF9iYXNlbGluZV9sb2NhdGlvbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICBmYWlsdXJlLnRleHRfYmFzZWxpbmVfYWdlKQorICAgICAgICBodG1s
ICs9IHNlbGYuX2dlbmVyYXRlX3RleHRfZmFpbHVyZV90ZCgKKyAgICAgICAgICAgIGZhaWx1cmUu
Z2V0X2V4cGVjdGVkX3RleHRfZmlsZW5hbWUoKSwgImV4cGVjdGVkIHRleHQiKQorICAgICAgICBo
dG1sICs9IHNlbGYuX2dlbmVyYXRlX3RleHRfZmFpbHVyZV90ZCgKKyAgICAgICAgICAgIGZhaWx1
cmUuZ2V0X2FjdHVhbF90ZXh0X2ZpbGVuYW1lKCksICJhY3R1YWwgdGV4dCIpCisgICAgICAgIGh0
bWwgKz0gc2VsZi5fZ2VuZXJhdGVfdGV4dF9mYWlsdXJlX3RkKAorICAgICAgICAgICAgZmFpbHVy
ZS5nZXRfdGV4dF9kaWZmX2ZpbGVuYW1lKCksICJ0ZXh0IGRpZmYiKQorICAgICAgICBodG1sICs9
ICI8dGQ+Jm5ic3A7PC90ZD4iCisgICAgICAgIGh0bWwgKz0gIjwvdHI+IgorICAgICAgICByZXR1
cm4gaHRtbAorCisgICAgZGVmIF9nZW5lcmF0ZV90ZXh0X2ZhaWx1cmVfdGQoc2VsZiwgZmlsZV9w
YXRoLCBhbmNob3JfdGV4dCk6CisgICAgICAgIHJldHVybiAoIjx0ZCBhbGlnbj1jZW50ZXI+Igor
ICAgICAgICAgICAgICAgICI8YSBocmVmPScuL2xheW91dC10ZXN0LXJlc3VsdHMtJXMvJXMnPiVz
PC9hPjwvdGQ+IikgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5idWlsZCwgZmlsZV9wYXRoLCBh
bmNob3JfdGV4dCkKKworICAgIGRlZiBfZ2VuZXJhdGVfaW1hZ2VfZmFpbHVyZV9odG1sKHNlbGYs
IGZhaWx1cmUpOgorICAgICAgICBpZiBub3QgZmFpbHVyZS5nZXRfaW1hZ2VfYmFzZWxpbmVfbG9j
YXRpb24oKToKKyAgICAgICAgICAgIHJldHVybiAiIiI8dHI+PHRkIGNvbHNwYW49JzUnPlRoaXMg
dGVzdCBsaWtlbHkgZG9lcyBub3QgaGF2ZSBhbnkKKyAgICAgICAgICAgICAgICAgICAgICBJTUFH
RSBiYXNlbGluZSBmb3IgdGhpcyBwbGF0Zm9ybSwgb3Igb25lIGNvdWxkIG5vdCBiZQorICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kLjwvdGQ+PC90cj4iIiIKKyAgICAgICAgaHRtbCA9ICIiIgor
ICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD48Yj48YSBocmVmPSIlcyI+UGl4ZWwgRHVt
cDwvYT48L2I+PGJyPgorICAgICAgICAgICAgPGI+JXM8L2I+IGJhc2VsaW5lPGJyPkFnZTogJXM8
L3RkPgorICAgICAgICAgICIiIiAlIChmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3VybCwKKyAgICAg
ICAgICAgICAgICAgZmFpbHVyZS5nZXRfaW1hZ2VfYmFzZWxpbmVfbG9jYXRpb24oKSwKKyAgICAg
ICAgICAgICAgICAgZmFpbHVyZS5pbWFnZV9iYXNlbGluZV9hZ2UpCisgICAgICAgIGh0bWwgKz0g
c2VsZi5fZ2VuZXJhdGVfaW1hZ2VfZmFpbHVyZV90ZCgKKyAgICAgICAgICAgIGZhaWx1cmUuZ2V0
X2V4cGVjdGVkX2ltYWdlX2ZpbGVuYW1lKCkpCisgICAgICAgIGh0bWwgKz0gc2VsZi5fZ2VuZXJh
dGVfaW1hZ2VfZmFpbHVyZV90ZCgKKyAgICAgICAgICAgIGZhaWx1cmUuZ2V0X2FjdHVhbF9pbWFn
ZV9maWxlbmFtZSgpKQorICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX2ltYWdlX2ZhaWx1
cmVfdGQoCisgICAgICAgICAgICBmYWlsdXJlLmdldF9pbWFnZV9kaWZmX2ZpbGVuYW1lKCkpCisg
ICAgICAgIGlmIChmYWlsdXJlLmltYWdlX2Jhc2VsaW5lX3Vwc3RyZWFtX2xvY2FsIGFuZAorICAg
ICAgICAgICAgZmFpbHVyZS5pbWFnZV9iYXNlbGluZV91cHN0cmVhbV9sb2NhbCAhPSAiIik6Cisg
ICAgICAgICAgICBodG1sICs9IHNlbGYuX2dlbmVyYXRlX2ltYWdlX2ZhaWx1cmVfdGQoCisgICAg
ICAgICAgICAgICAgZmFpbHVyZS5nZXRfaW1hZ2VfdXBzdHJlYW1fZmlsZW5hbWUoKSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGh0bWwgKz0gIiIiCisgICAgICAgICAgICAgICAgICAgIDx0
ZD4mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgaHRtbCArPSAi
PC90cj4iCisgICAgICAgIHJldHVybiBodG1sCisKKyAgICBkZWYgX2dlbmVyYXRlX2ltYWdlX2Zh
aWx1cmVfdGQoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gKCI8dGQ+PGEgaHJlZj0n
Li9sYXlvdXQtdGVzdC1yZXN1bHRzLSVzLyVzJz4iCisgICAgICAgICAgICAgICAgIjxpbWcgc3R5
bGU9J3dpZHRoOiAlcycgc3JjPScuL2xheW91dC10ZXN0LXJlc3VsdHMtJXMvJXMnIC8+IgorICAg
ICAgICAgICAgICAgICI8L2E+PC90ZD4iKSAlIChzZWxmLmJ1aWxkLCBmaWxlbmFtZSwgc2VsZi5p
bWFnZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkLCBm
aWxlbmFtZSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0bWxfZ2VuZXJhdG9yLnB5Cl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>
<flag name="review"
          id="30285"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>