<?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>35194</bug_id>
          
          <creation_ts>2010-02-20 07:49:49 -0800</creation_ts>
          <short_desc>new-run-webkit-tests: should log to non-root loggers</short_desc>
          <delta_ts>2010-03-05 17:02:45 -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>All</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="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192175</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 07:49:49 -0800</bug_when>
    <thetext>Currently, run-chromium-webkit-tests logs directly to the root logger.  For example--

    def __del__(self):
        logging.debug(&quot;flushing stdout&quot;)
        sys.stdout.flush()
        logging.debug(&quot;flushing stderr&quot;)
        sys.stderr.flush()

This means that logging for run-chromium-webkit-tests can&apos;t be configured independently of other modules (i.e. without also changing the logging behavior of other modules).

A better practice for larger bodies of code is for each module (or at least each application) to log to its own logger.  See this documentation, for example:

&quot;The logging module supports a hierarchy of loggers with different names. An easy way to tell where a specific log message comes from is to use a separate logger object for each of your modules. Each new logger “inherits” the configuration of its parent, and log messages sent to a logger include the name of that logger...&quot;

(from http://docs.python.org/library/logging.html#simple-examples ) 

For example, the autoinstall module does this by writing the following towards the beginning--

_logger = logging.getLogger(__name__)

This automatically gives the logger the hierarchical name of its module, e.g.

webkitpy.autoinstall: INFO     Getting &apos;http://pypi.python.org/packages/source/C/ClientForm/ClientForm-0.2.10.zip&apos; from cache.

With this change, the code at the top would look something like this instead--

    def __del__(self):
        log.debug(&quot;flushing stdout&quot;)
        sys.stdout.flush()
        log.debug(&quot;flushing stderr&quot;)
        sys.stderr.flush()

(I personally prefer log.debug, etc. over logger.debug, etc. since the construct will be used frequently, and it is shorter to read and type.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193971</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-25 18:01:21 -0800</bug_when>
    <thetext>I have a patch for this.  I&apos;ll submit it later tonight probably.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193979</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-25 18:38:43 -0800</bug_when>
    <thetext>The new-run-webkit-tests code is very careful about log output, so if we do change something please ensure that the actual logged text is preserved.

Apart from that, I agree that the patch is good in theory but I&apos;m less clear that it&apos;s needed in practice. What do you expect to gain from this in the short term, if anything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194309</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-26 14:35:00 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; The new-run-webkit-tests code is very careful about log output, so if we do
&gt; change something please ensure that the actual logged text is preserved.

All log output will be identical.  It just changes the logging code from logging to the root logger e.g. logger.info(...) to logging to module-specific loggers e.g. _log.info(...).

I made a similar change to another part of webkitpy here:

https://bugs.webkit.org/show_bug.cgi?id=35391

&gt; Apart from that, I agree that the patch is good in theory but I&apos;m less clear
&gt; that it&apos;s needed in practice. What do you expect to gain from this in the short
&gt; term, if anything?

The original reason was to address issues like the following, so that you could throttle/configure the autoinstall logging independently of the run-chromium-webkit-tests logging:

https://bugs.webkit.org/show_bug.cgi?id=35162#c3

But perhaps this is no longer an issue in practice, since it doesn&apos;t look like run-chromium-webkit-tests executes webkitpy/__init__.py.

However, in general it can only help to use module-specific loggers.  It will be easier to make the switch earlier than later, and it will help to educate other WebKit contributors going forward as to what logging practices we should use throughout our code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194312</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-26 14:40:30 -0800</bug_when>
    <thetext>I do fully understand the desire to log different modules at different levels. I&apos;m never actually looked at what would be necessary to make that work using python&apos;s logging apis. The --log flag to new-run-webkit-tests is a poor man&apos;s attempt at doing something simple along those lines.

I look forward to the patch if it makes this easier to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194328</commentid>
    <comment_count>5</comment_count>
      <attachid>49652</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-26 15:06:17 -0800</bug_when>
    <thetext>Created attachment 49652
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194330</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-26 15:12:12 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=49652) [details]
&gt; Proposed patch

FYI, this is nearly all a search and replace: &quot;logging.&quot; -&gt; &quot;_log.&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194339</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-26 15:32:39 -0800</bug_when>
    <thetext>The change itself looks mostly fine, although I don&apos;t quite understand how logger inheritance works. 

If we make this change, how would I configure the different loggers to log at different levels? Right now in run_chromium_webkit_tests.py, we set the level in the default/root logger using logging.basicConfig(). Is there a call we can use to modify the levels for each child logger programmatically without having references to each variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194450</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-26 21:31:02 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; The change itself looks mostly fine, although I don&apos;t quite understand how
&gt; logger inheritance works.
&gt; 
&gt; If we make this change, how would I configure the different loggers to log at
&gt; different levels? Right now in run_chromium_webkit_tests.py, we set the level
&gt; in the default/root logger using logging.basicConfig(). Is there a call we can
&gt; use to modify the levels for each child logger programmatically without having
&gt; references to each variable?

Here&apos;s a quick tutorial.

logging.basicConfig() is a short-cut way of configuring the root (i.e. default) logger.

A more flexible and powerful way to configure a logger is to configure the logger explicitly using code like the following.  You can use this technique to configure both root and non-root loggers:

formatter = logging.Formatter(&apos;%(name)s: [%(levelname)s] %(message)s&apos;)

console_log_handler = logging.StreamHandler(sys.stderr)
console_log_handler.setFormatter(formatter)

logger = logging.getLogger(&quot;webkitpy.layout_tests&quot;)
logger.setLevel(logging.INFO)
logger.addHandler(console_log_handler)

Logger inheritance works as follows:

If you log to a logger with a particular name, that log message will also get passed along to all parents of the logger.  A parent is a logger with a name that matches an initial substring.  For example, if you log to a logger with name &quot;webkitpy.layout_tests&quot;, that log message will also get passed to the &quot;webkitpy&quot; logger and the root logger (if they exist).

You can prevent messages from getting passed along by setting the logger.propagate data attribute on a logger to False.

There is a lot more than this that you can do.  The logging module also supports things like setting a logging level on handlers and also defining filters.  The Python logging documentation has more info:

http://docs.python.org/library/logging.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196422</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-05 07:44:44 -0800</bug_when>
    <thetext>Any volunteers? :)  Dirk said it looks mostly fine in comment 7, but he doesn&apos;t have r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196423</commentid>
    <comment_count>10</comment_count>
      <attachid>49652</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-05 07:45:28 -0800</bug_when>
    <thetext>Comment on attachment 49652
Proposed patch

cq- in case this needs to be updated/rebased (it&apos;s been a week).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196696</commentid>
    <comment_count>11</comment_count>
      <attachid>49652</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-05 14:49:02 -0800</bug_when>
    <thetext>Comment on attachment 49652
Proposed patch

OK. Seems we should have a slicker way of getting these per-file loggers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196767</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-05 16:10:49 -0800</bug_when>
    <thetext>(In reply to comment #11)

 Thanks for the review, Eric!

&gt; (From update of attachment 49652 [details])
&gt; OK. Seems we should have a slicker way of getting these per-file loggers.

Great idea -- agreed.  I&apos;ll file a report once I land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196811</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-05 16:54:20 -0800</bug_when>
    <thetext>Manually committed:

http://trac.webkit.org/changeset/55603</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196816</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-05 17:02:45 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; 
&gt;  Thanks for the review, Eric!
&gt; 
&gt; &gt; (From update of attachment 49652 [details] [details])
&gt; &gt; OK. Seems we should have a slicker way of getting these per-file loggers.
&gt; 
&gt; Great idea -- agreed.  I&apos;ll file a report once I land this.

Bug filed here: https://bugs.webkit.org/show_bug.cgi?id=35821</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49652</attachid>
            <date>2010-02-26 15:06:17 -0800</date>
            <delta_ts>2010-03-05 14:49:02 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-35194-2.diff</filename>
            <type>text/plain</type>
            <size>65911</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjMWU2OTQ3Li5mNTMwNmM4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTAtMDIt
MjYgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCB0aGUgcnVuLWNocm9t
aXVtLXdlYmtpdC10ZXN0cyBsb2dnaW5nIGNvZGUgdG8gdXNlCisgICAgICAgIG1vZHVsZS1zcGVj
aWZpYyBsb2dnZXJzIHJhdGhlciB0aGFuIHRoZSByb290IGxvZ2dlci4gVGhpcyBpcworICAgICAg
ICBhIHN0YW5kYXJkIHByYWN0aWNlIHRoYXQgYWxsb3dzIGxvZ2dpbmcgc3BlY2lmaWMgdG8gYSBw
YWNrYWdlCisgICAgICAgIHRvIGJlIGJlIGNvbmZpZ3VyZWQgaW5kZXBlbmRlbnRseSBvZiBvdGhl
ciBtb2R1bGVzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTE5NAorCisgICAgICAgIEFkZGVkIGEgbGluZSBvZiB0aGUgZm9ybSAiX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKDxtb2R1bGU+KSIKKyAgICAgICAgdG8gZWFjaCBtb2R1bGUgYmVsb3cs
IHdoZXJlIDxtb2R1bGU+IGlzIHRoZSBmdWxseS1xdWFsaWZpZWQKKyAgICAgICAgbmFtZSBvZiB0
aGUgbW9kdWxlLCBhbmQgdXBkYXRlZCB0aGUgbG9nIGxpbmVzIHRvIHVzZSB0aGUgbmV3CisgICAg
ICAgIF9sb2cgbG9nZ2VyLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0
aW9ucy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93
aW4ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2h0dHBfc2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9p
bWFnZV9kaWZmLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvaW1hZ2VfZGlmZi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5OgorCiAyMDEwLTAy
LTI0ICBDaHJpcyBKZXJkb25layAgPGNqZXJkb25la0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVy
YXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKaW5kZXggOTgzMGY2Ni4uYzczZTlm
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3Vs
dHNfZ2VuZXJhdG9yLnB5CkBAIC0zOCw2ICszOCw5IEBAIGltcG9ydCB4bWwuZG9tLm1pbmlkb20K
IAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIAorX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Uu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICJqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yIikKKwog
CiBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgogCkBAIC0xNTQsOCArMTU3LDgg
QEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKICAgICAgICAgICAgICMgQ2hl
Y2sgaWYgd2UgaGF2ZSB0aGUgYXJjaGl2ZWQgSlNPTiBmaWxlIG9uIHRoZSBidWlsZGJvdCBzZXJ2
ZXIuCiAgICAgICAgICAgICByZXN1bHRzX2ZpbGVfdXJsID0gKHNlbGYuX2J1aWxkZXJfYmFzZV91
cmwgKwogICAgICAgICAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgKyAiLyIgKyBzZWxmLlJFU1VM
VFNfRklMRU5BTUUpCi0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJMb2NhbCByZXN1bHRzLmpz
b24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJpbmcgIgotICAgICAgICAgICAgICAgICJpdCBv
ZmYgdGhlIGFyY2hpdmUgYXQgIiArIHJlc3VsdHNfZmlsZV91cmwpCisgICAgICAgICAgICBfbG9n
LmVycm9yKCJMb2NhbCByZXN1bHRzLmpzb24gZmlsZSBkb2VzIG5vdCBleGlzdC4gR3JhYmJpbmcg
IgorICAgICAgICAgICAgICAgICAgICAgICAiaXQgb2ZmIHRoZSBhcmNoaXZlIGF0ICIgKyByZXN1
bHRzX2ZpbGVfdXJsKQogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmVzdWx0
c19maWxlID0gdXJsbGliMi51cmxvcGVuKHJlc3VsdHNfZmlsZV91cmwpCkBAIC0xNzcsMTEgKzE4
MCwxMSBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgogICAgICAgICAgICAg
dHJ5OgogICAgICAgICAgICAgICAgIHJlc3VsdHNfanNvbiA9IHNpbXBsZWpzb24ubG9hZHMob2xk
X3Jlc3VsdHMpCiAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygicmVzdWx0cy5qc29uIHdhcyBub3QgdmFsaWQgSlNPTi4gQ2xvYmJlcmluZy4iKQorICAg
ICAgICAgICAgICAgIF9sb2cuZGVidWcoInJlc3VsdHMuanNvbiB3YXMgbm90IHZhbGlkIEpTT04u
IENsb2JiZXJpbmcuIikKICAgICAgICAgICAgICAgICAjIFRoZSBKU09OIGZpbGUgaXMgbm90IHZh
bGlkIEpTT04uIEp1c3QgY2xvYmJlciB0aGUgcmVzdWx0cy4KICAgICAgICAgICAgICAgICByZXN1
bHRzX2pzb24gPSB7fQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1Zygn
T2xkIEpTT04gcmVzdWx0cyBkbyBub3QgZXhpc3QuIFN0YXJ0aW5nIGZyZXNoLicpCisgICAgICAg
ICAgICBfbG9nLmRlYnVnKCdPbGQgSlNPTiByZXN1bHRzIGRvIG5vdCBleGlzdC4gU3RhcnRpbmcg
ZnJlc2guJykKICAgICAgICAgICAgIHJlc3VsdHNfanNvbiA9IHt9CiAKICAgICAgICAgcmV0dXJu
IHJlc3VsdHNfanNvbiwgZXJyb3IKQEAgLTE5MiwxNCArMTk1LDE0IEBAIGNsYXNzIEpTT05SZXN1
bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAgIGlmIGVycm9yOgogICAgICAgICAgICAgIyBJ
ZiB0aGVyZSB3YXMgYW4gZXJyb3IgZG9uJ3Qgd3JpdGUgYSByZXN1bHRzLmpzb24KICAgICAgICAg
ICAgICMgZmlsZSBhdCBhbGwgYXMgaXQgd291bGQgbG9zZSBhbGwgdGhlIGluZm9ybWF0aW9uIG9u
IHRoZSBib3QuCi0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJBcmNoaXZlIGRpcmVjdG9yeSBp
cyBpbmFjY2Vzc2libGUuIE5vdCBtb2RpZnlpbmcgIgotICAgICAgICAgICAgICAgICJvciBjbG9i
YmVyaW5nIHRoZSByZXN1bHRzLmpzb24gZmlsZTogIiArIHN0cihlcnJvcikpCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCJBcmNoaXZlIGRpcmVjdG9yeSBpcyBpbmFjY2Vzc2libGUuIE5vdCBtb2Rp
ZnlpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAib3IgY2xvYmJlcmluZyB0aGUgcmVzdWx0
cy5qc29uIGZpbGU6ICIgKyBzdHIoZXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAog
ICAgICAgICBidWlsZGVyX25hbWUgPSBzZWxmLl9idWlsZGVyX25hbWUKICAgICAgICAgaWYgcmVz
dWx0c19qc29uIGFuZCBidWlsZGVyX25hbWUgbm90IGluIHJlc3VsdHNfanNvbjoKLSAgICAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoIkJ1aWxkZXIgbmFtZSAoJXMpIGlzIG5vdCBpbiB0aGUgcmVzdWx0
cy5qc29uIGZpbGUuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAlIGJ1aWxkZXJfbmFtZSkK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoIkJ1aWxkZXIgbmFtZSAoJXMpIGlzIG5vdCBpbiB0aGUg
cmVzdWx0cy5qc29uIGZpbGUuIgorICAgICAgICAgICAgICAgICAgICAgICAlIGJ1aWxkZXJfbmFt
ZSkKIAogICAgICAgICBzZWxmLl9jb252ZXJ0X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3Vs
dHNfanNvbikKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVj
dGF0aW9ucy5weQppbmRleCAwMWFkZDYyLi5iNTZjYjI5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVj
dGF0aW9ucy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQpAQCAtMzgsNiArMzgsOSBAQCBp
bXBvcnQgc3lzCiAKIGltcG9ydCBzaW1wbGVqc29uCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAidGVzdF9leHBlY3RhdGlvbnMiKQorCiAjIFRlc3QgZXhwZWN0YXRpb24gYW5k
IG1vZGlmaWVyIGNvbnN0YW50cy4KIChQQVNTLCBGQUlMLCBURVhULCBJTUFHRSwgSU1BR0VfUExV
U19URVhULCBUSU1FT1VULCBDUkFTSCwgU0tJUCwgV09OVEZJWCwKICBERUZFUiwgU0xPVywgUkVC
QVNFTElORSwgTUlTU0lORywgRkxBS1ksIE5PVywgTk9ORSkgPSByYW5nZSgxNikKQEAgLTQwMCwy
MCArNDAzLDIwIEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCiAgICAgICAg
ICAgICBpZiBhY3Rpb24gPT0gTk9fQ0hBTkdFOgogICAgICAgICAgICAgICAgICMgU2F2ZSB0aGUg
b3JpZ2luYWwgbGluZSBiYWNrIHRvIHRoZSBmaWxlCi0gICAgICAgICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnTm8gY2hhbmdlIHRvIHRlc3Q6ICVzJywgbGluZSkKKyAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCdObyBjaGFuZ2UgdG8gdGVzdDogJXMnLCBsaW5lKQogICAgICAgICAgICAgICAgIGZf
bmV3LmFwcGVuZChsaW5lKQogICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gUkVNT1ZFX1RFU1Q6
CiAgICAgICAgICAgICAgICAgdGVzdHNfcmVtb3ZlZCArPSAxCi0gICAgICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCdUZXN0IHJlbW92ZWQ6ICVzJywgbGluZSkKKyAgICAgICAgICAgICAgICBfbG9n
LmluZm8oJ1Rlc3QgcmVtb3ZlZDogJXMnLCBsaW5lKQogICAgICAgICAgICAgZWxpZiBhY3Rpb24g
PT0gUkVNT1ZFX1BMQVRGT1JNOgogICAgICAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgn
OicpCiAgICAgICAgICAgICAgICAgbmV3X29wdGlvbnMgPSBwYXJ0c1swXS5yZXBsYWNlKHBsYXRm
b3JtLnVwcGVyKCkgKyAnICcsICcnLCAxKQogICAgICAgICAgICAgICAgIG5ld19saW5lID0gKCcl
czolcycgJSAobmV3X29wdGlvbnMsIHBhcnRzWzFdKSkKICAgICAgICAgICAgICAgICBmX25ldy5h
cHBlbmQobmV3X2xpbmUpCiAgICAgICAgICAgICAgICAgdGVzdHNfdXBkYXRlZCArPSAxCi0gICAg
ICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdUZXN0IHVwZGF0ZWQ6ICcpCi0gICAgICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCcgIG9sZDogJXMnLCBsaW5lKQotICAgICAgICAgICAgICAgIGxvZ2dp
bmcuaW5mbygnICBuZXc6ICVzJywgbmV3X2xpbmUpCisgICAgICAgICAgICAgICAgX2xvZy5pbmZv
KCdUZXN0IHVwZGF0ZWQ6ICcpCisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIG9sZDogJXMn
LCBsaW5lKQorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICBuZXc6ICVzJywgbmV3X2xpbmUp
CiAgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSBBRERfUExBVEZPUk1TX0VYQ0VQVF9USElTOgog
ICAgICAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgnOicpCiAgICAgICAgICAgICAgICAg
bmV3X29wdGlvbnMgPSBwYXJ0c1swXQpAQCAtNDMwLDE1ICs0MzMsMTUgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgICAgICAgICAgbmV3X2xpbmUgPSAoJyVzOiVzJyAlIChu
ZXdfb3B0aW9ucywgcGFydHNbMV0pKQogICAgICAgICAgICAgICAgIGZfbmV3LmFwcGVuZChuZXdf
bGluZSkKICAgICAgICAgICAgICAgICB0ZXN0c191cGRhdGVkICs9IDEKLSAgICAgICAgICAgICAg
ICBsb2dnaW5nLmluZm8oJ1Rlc3QgdXBkYXRlZDogJykKLSAgICAgICAgICAgICAgICBsb2dnaW5n
LmluZm8oJyAgb2xkOiAlcycsIGxpbmUpCi0gICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcg
IG5ldzogJXMnLCBuZXdfbGluZSkKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ1Rlc3QgdXBk
YXRlZDogJykKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJyAgb2xkOiAlcycsIGxpbmUpCisg
ICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIG5ldzogJXMnLCBuZXdfbGluZSkKICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignVW5rbm93biB1cGRhdGUg
YWN0aW9uOiAlZDsgbGluZTogJXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0
aW9uLCBsaW5lKQorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1Vua25vd24gdXBkYXRlIGFj
dGlvbjogJWQ7IGxpbmU6ICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwg
bGluZSkKIAotICAgICAgICBsb2dnaW5nLmluZm8oJ1RvdGFsIHRlc3RzIHJlbW92ZWQ6ICVkJywg
dGVzdHNfcmVtb3ZlZCkKLSAgICAgICAgbG9nZ2luZy5pbmZvKCdUb3RhbCB0ZXN0cyB1cGRhdGVk
OiAlZCcsIHRlc3RzX3VwZGF0ZWQpCisgICAgICAgIF9sb2cuaW5mbygnVG90YWwgdGVzdHMgcmVt
b3ZlZDogJWQnLCB0ZXN0c19yZW1vdmVkKQorICAgICAgICBfbG9nLmluZm8oJ1RvdGFsIHRlc3Rz
IHVwZGF0ZWQ6ICVkJywgdGVzdHNfdXBkYXRlZCkKIAogICAgICAgICByZXR1cm4gIiIuam9pbihm
X25ldykKIApAQCAtNjM3LDcgKzY0MCw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgog
ICAgICAgICAgICAgICAgICUgKHNlbGYuX3Rlc3RfcGxhdGZvcm1fbmFtZS51cHBlcigpLCBidWls
ZF90eXBlKQogCiAgICAgICAgICAgICBmb3IgZXJyb3IgaW4gc2VsZi5fbm9uX2ZhdGFsX2Vycm9y
czoKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKGVycm9yKQorICAgICAgICAgICAgICAg
IF9sb2cuZXJyb3IoZXJyb3IpCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZXJyb3JzKToKICAg
ICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcignXG4nLmpvaW4obWFwKHN0ciwgc2VsZi5f
ZXJyb3JzKSkpCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVs
bF90aHJlYWQucHkKaW5kZXggMzQ1MjAzNS4uYThmNDFmMyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVs
bF90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkKQEAgLTQ3LDYgKzQ3LDkgQEAg
aW1wb3J0IHRpbWUKIAogaW1wb3J0IHRlc3RfZmFpbHVyZXMKIAorX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0ZXN0X3NoZWxsX3RocmVhZCIpCisKIAogZGVmIHByb2Nlc3Nfb3V0
cHV0KHBvcnQsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1
dF9kaXIsCiAgICAgICAgICAgICAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIHRlc3RfcnVuX3RpbWUs
IGFjdHVhbF9jaGVja3N1bSwKQEAgLTc5LDcgKzgyLDcgQEAgZGVmIHByb2Nlc3Nfb3V0cHV0KHBv
cnQsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIs
CiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkp
CiAKICAgICBpZiBjcmFzaDoKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3Ig
JXM6XG4lcyIgJSAodGVzdF9pbmZvLmZpbGVuYW1lLCBlcnJvcikpCisgICAgICAgIF9sb2cuZGVi
dWcoIlN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHRlc3RfaW5mby5maWxlbmFtZSwgZXJyb3Ip
KQogICAgICAgICAjIFN0cmlwIG9mZiAiZmlsZTovLyIgc2luY2UgUmVsYXRpdmVUZXN0RmlsZW5h
bWUgZXhwZWN0cwogICAgICAgICAjIGZpbGVzeXN0ZW0gcGF0aHMuCiAgICAgICAgIGZpbGVuYW1l
ID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsIHRlc3RfaW5mby5maWxlbmFtZSkKQEAgLTg3LDgg
KzkwLDggQEAgZGVmIHByb2Nlc3Nfb3V0cHV0KHBvcnQsIHRlc3RfaW5mbywgdGVzdF90eXBlcywg
dGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIsCiAgICAgICAgIHBvcnQubWF5YmVfbWFrZV9k
aXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCiAgICAgICAgIG9wZW4oZmlsZW5h
bWUsICJ3YiIpLndyaXRlKGVycm9yKQogICAgIGVsaWYgZXJyb3I6Ci0gICAgICAgIGxvZ2dpbmcu
ZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0IGV4dHJhIGxpbmVzIGFmdGVyIGR1bXA6XG4lcyIg
JQotICAgICAgICAgICAgZXJyb3IpCisgICAgICAgIF9sb2cuZGVidWcoIlByZXZpb3VzIHRlc3Qg
b3V0cHV0IGV4dHJhIGxpbmVzIGFmdGVyIGR1bXA6XG4lcyIgJQorICAgICAgICAgICAgICAgICAg
IGVycm9yKQogCiAgICAgIyBDaGVjayB0aGUgb3V0cHV0IGFuZCBzYXZlIHRoZSByZXN1bHRzLgog
ICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQpAQCAtMjQyLDE3ICsyNDUsMTcgQEAgY2xhc3Mg
VGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBzZWxmLl9zdGFydF90
aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAogICAgICAgICB0
cnk6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCclcyBzdGFydGluZycgJSAoc2VsZi5nZXRO
YW1lKCkpKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgKHNlbGYuZ2V0
TmFtZSgpKSkKICAgICAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRf
c3VtbWFyeT1Ob25lKQotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVz
dHMpJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5n
ZXRfbnVtX3Rlc3RzKCkpKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVz
dHMpJyAlIChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRf
bnVtX3Rlc3RzKCkpKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAjIFNhdmUgdGhlIGV4
Y2VwdGlvbiBmb3Igb3VyIGNhbGxlciB0byBzZWUuCiAgICAgICAgICAgICBzZWxmLl9leGNlcHRp
b25faW5mbyA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0
aW1lLnRpbWUoKQogICAgICAgICAgICAgIyBSZS1yYWlzZSBpdCBhbmQgZGllLgotICAgICAgICAg
ICAgbG9nZ2luZy5lcnJvcignJXMgZHlpbmc6ICVzJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8pKQorICAgICAgICAgICAg
X2xvZy5lcnJvcignJXMgZHlpbmc6ICVzJyAlIChzZWxmLmdldE5hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8pKQogICAgICAgICAgICAgcmFpc2UKICAg
ICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKIApAQCAtMjc1LDggKzI3OCw4IEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgICAgIHRy
eToKICAgICAgICAgICAgICAgICBiYXRjaF9zaXplID0gaW50KHNlbGYuX29wdGlvbnMuYmF0Y2hf
c2l6ZSkKICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8o
Iklnbm9yaW5nIGludmFsaWQgYmF0Y2ggc2l6ZSAnJXMnIiAlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZSkKKyAgICAgICAgICAgICAgICBfbG9n
LmluZm8oIklnbm9yaW5nIGludmFsaWQgYmF0Y2ggc2l6ZSAnJXMnIiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZSkKIAogICAgICAgICAjIEFwcGVu
ZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUu
CiAgICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBh
cmVMaXN0c0FuZFByaW50T3V0cHV0LgpAQCAtMjg2LDcgKzI4OSw3IEBAIGNsYXNzIFRlc3RTaGVs
bFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKIAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAg
ICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdU
ZXN0aW5nIGNhbmNlbGVkJykKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ1Rlc3RpbmcgY2Fu
Y2VsZWQnKQogICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKICAgICAgICAg
ICAgICAgICByZXR1cm4KIApAQCAtMzI3LDEyICszMzAsMTIgQEAgY2xhc3MgVGVzdFNoZWxsVGhy
ZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9
IDAKICAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgogICAgICAg
ICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYubWVzc2FnZSgpIGZvciBm
IGluIGZhaWx1cmVzXSkKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCIlcyAlcyBmYWls
ZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKKyAgICAgICAgICAgICAgICBfbG9nLmRl
YnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKICAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxm
LmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpKQorICAgICAgICAgICAgICAgIF9sb2cuZGVi
dWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKICAg
ICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQoKGZpbGVuYW1lLCBmYWlsdXJlcykpCiAK
ICAgICAgICAgICAgIGlmIGJhdGNoX3NpemUgPiAwIGFuZCBiYXRjaF9jb3VudCA+IGJhdGNoX3Np
emU6CkBAIC0zNzksNyArMzgyLDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5U
aHJlYWQpOgogICAgICAgICAgICAgIyB0ZXN0X3NoZWxscyB0b28sIGludHJvZHVjaW5nIHNwdXJp
b3VzIGNyYXNoZXMuIFdlIGFjY2VwdCB0aGF0CiAgICAgICAgICAgICAjIHRyYWRlb2ZmIGluIG9y
ZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzIHRocmVhZCdzCiAgICAgICAgICAg
ICAjIHJlc3VsdHMuCi0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdUZXN0IHRocmVhZCBodW5n
OiBraWxsaW5nIGFsbCB0ZXN0X3NoZWxscycpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0
IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCB0ZXN0X3NoZWxscycpCiAgICAgICAgICAgICB3b3Jr
ZXIuX2RyaXZlci5zdG9wKCkKIAogICAgICAgICB0cnk6CkBAIC0zODgsOCArMzkxLDggQEAgY2xh
c3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAgICAgZmFpbHVy
ZXMgPSBzdGF0cy5mYWlsdXJlcwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CiAg
ICAgICAgICAgICBmYWlsdXJlcyA9IFtdCi0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdDYW5u
b3QgZ2V0IHJlc3VsdHMgb2YgdGVzdDogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IGdldCBy
ZXN1bHRzIG9mIHRlc3Q6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5m
aWxlbmFtZSkKIAogICAgICAgICByZXR1cm4gZmFpbHVyZXMKIApkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2
ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Fw
YWNoZV9odHRwX3NlcnZlci5weQppbmRleCA5ZmYzNjcxLi4zY2YwZjViIDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRw
X3NlcnZlci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQpAQCAtMzgsNiArMzgsOCBAQCBpbXBvcnQgc3lz
CiAKIGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigi
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuYXBhY2hlX2h0dHBfc2VydmVyIikKKwogCiBjbGFz
cyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6
CiAKQEAgLTE4OCw3ICsxOTAsNyBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9z
ZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgICAgICBzaGVsbD1UcnVlKQogICAg
ICAgICBlcnIgPSBzZWxmLl9odHRwZF9wcm9jLnN0ZGVyci5yZWFkKCkKICAgICAgICAgaWYgbGVu
KGVycik6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGVycikKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoZXJyKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVl
CiAKQEAgLTE5NywyMSArMTk5LDIxIEBAIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRw
X3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgIyBTdG9wIGFueSBjdXJyZW50
bHkgcnVubmluZyBzZXJ2ZXJzLgogICAgICAgICBzZWxmLnN0b3AoKQogCi0gICAgICAgIGxvZ2dp
bmcuZGVidWcoIlN0YXJ0aW5nIGFwYWNoZSBodHRwIHNlcnZlciIpCisgICAgICAgIF9sb2cuZGVi
dWcoIlN0YXJ0aW5nIGFwYWNoZSBodHRwIHNlcnZlciIpCiAgICAgICAgIHNlcnZlcl9zdGFydGVk
ID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRfcHJvY2VzcykKICAgICAg
ICAgaWYgc2VydmVyX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJBcGFjaGUg
c3RhcnRlZC4gVGVzdGluZyBwb3J0cyIpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCJBcGFjaGUg
c3RhcnRlZC4gVGVzdGluZyBwb3J0cyIpCiAgICAgICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNl
bGYud2FpdF9mb3JfYWN0aW9uKAogICAgICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5p
bmdfb25fYWxsX3BvcnRzKQogCiAgICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgotICAgICAgICAg
ICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoIlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCIpCiAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBzdGFydCBodHRwIHNl
cnZlcicpCiAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgIiIiU3RvcHMgdGhlIGFwYWNo
ZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBh
bnkgcnVubmluZyBodHRwIHNlcnZlcnMiKQorICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBk
b3duIGFueSBydW5uaW5nIGh0dHAgc2VydmVycyIpCiAgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUK
ICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgogICAgICAgICAgICAg
aHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5lKCkpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bS5weQppbmRleCBjODFkMGE3Li42ZDYyMjAzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkK
QEAgLTQxLDExICs0MSwxMyBAQCBpbXBvcnQgYmFzZQogaW1wb3J0IGh0dHBfc2VydmVyCiBpbXBv
cnQgd2Vic29ja2V0X3NlcnZlcgogCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5
LmxheW91dF90ZXN0cy5wb3J0LmNocm9taXVtIikKKwogCiBkZWYgY2hlY2tfZmlsZV9leGlzdHMo
cGF0aF90b19maWxlLCBzdHIpOgogICAgICIiIlZlcmlmeSB0aGUgZXhlY3V0YWJsZSBpcyBwcmVz
ZW50IHdoZXJlIGV4cGVjdGVkIG9yIGxvZyBhbiBlcnJvci4iIiIKICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHMocGF0aF90b19maWxlKToKLSAgICAgICAgbG9nZ2luZy5lcnJvcignVW5hYmxlIHRv
IGZpbmQgJXMgYXQgJXMnICUgKHN0ciwgcGF0aF90b19maWxlKSkKKyAgICAgICAgX2xvZy5lcnJv
cignVW5hYmxlIHRvIGZpbmQgJXMgYXQgJXMnICUgKHN0ciwgcGF0aF90b19maWxlKSkKICAgICAg
ICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIApAQCAtNzIsMjAgKzc0LDIwIEBAIGNs
YXNzIENocm9taXVtUG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nl
c3MuUG9wZW4oW3Rlc3Rfc2hlbGxfYmluYXJ5X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJy0tY2hlY2stbGF5b3V0LXRlc3Qtc3lzLWRlcHMnXSkKICAgICAgICAg
ICAgIGlmIHByb2Mud2FpdCgpICE9IDA6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcign
U3lzdGVtIGRlcGVuZGVuY2llcyBjaGVjayBmYWlsZWQuJykKLSAgICAgICAgICAgICAgICBsb2dn
aW5nLmVycm9yKCdUbyBvdmVycmlkZSwgaW52b2tlIHdpdGggLS1ub2NoZWNrLXN5cy1kZXBzJykK
LSAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCcnKQorICAgICAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJ1N5c3RlbSBkZXBlbmRlbmNpZXMgY2hlY2sgZmFpbGVkLicpCisgICAgICAgICAgICAg
ICAgX2xvZy5lcnJvcignVG8gb3ZlcnJpZGUsIGludm9rZSB3aXRoIC0tbm9jaGVjay1zeXMtZGVw
cycpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBGYWxzZQogCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKCcn
KQorICAgICAgICAgICAgX2xvZy5lcnJvcignJykKIAogCiAgICAgICAgIGlmIG5vdCBzZWxmLl9v
cHRpb25zLm5vX3BpeGVsX3Rlc3RzOgogICAgICAgICAgICAgaW1hZ2VfZGlmZl9wYXRoID0gc2Vs
Zi5fcGF0aF90b19pbWFnZV9kaWZmKCkKICAgICAgICAgICAgIGlmIG5vdCBjaGVja19maWxlX2V4
aXN0cyhpbWFnZV9kaWZmX3BhdGgsICdpbWFnZSBkaWZmIGV4ZScpOgotICAgICAgICAgICAgICAg
IGxvZ2dpbmcuZXJyb3IoJ1RvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAtLW5vLXBpeGVsLXRlc3Rz
JykKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCcnKQorICAgICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ1RvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAtLW5vLXBpeGVsLXRlc3RzJykKKyAg
ICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZh
bHNlCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdApAQCAtMTI4LDE2ICsxMzAsMTYgQEAgY2xhc3Mg
Q2hyb21pdW1Qb3J0KGJhc2UuUG9ydCk6CiAgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKICAg
ICAgICAgaGVscGVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2hlbHBlcigpCiAgICAgICAgIGlmIGhl
bHBlcl9wYXRoOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgbGF5b3V0IGhl
bHBlciAlcyIgJSBoZWxwZXJfcGF0aCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIlN0YXJ0aW5n
IGxheW91dCBoZWxwZXIgJXMiICUgaGVscGVyX3BhdGgpCiAgICAgICAgICAgICBzZWxmLl9oZWxw
ZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtoZWxwZXJfcGF0aF0sCiAgICAgICAgICAgICAgICAgc3Rk
aW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9Tm9uZSkK
ICAgICAgICAgICAgIGlzX3JlYWR5ID0gc2VsZi5faGVscGVyLnN0ZG91dC5yZWFkbGluZSgpCiAg
ICAgICAgICAgICBpZiBub3QgaXNfcmVhZHkuc3RhcnRzd2l0aCgncmVhZHknKToKLSAgICAgICAg
ICAgICAgICBsb2dnaW5nLmVycm9yKCJsYXlvdXRfdGVzdF9oZWxwZXIgZmFpbGVkIHRvIGJlIHJl
YWR5IikKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJsYXlvdXRfdGVzdF9oZWxwZXIgZmFp
bGVkIHRvIGJlIHJlYWR5IikKIAogICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKICAgICAgICAg
aWYgc2VsZi5faGVscGVyOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RvcHBpbmcgbGF5
b3V0IHRlc3QgaGVscGVyIikKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIlN0b3BwaW5nIGxheW91
dCB0ZXN0IGhlbHBlciIpCiAgICAgICAgICAgICBzZWxmLl9oZWxwZXIuc3RkaW4ud3JpdGUoInhc
biIpCiAgICAgICAgICAgICBzZWxmLl9oZWxwZXIuc3RkaW4uY2xvc2UoKQogICAgICAgICAgICAg
c2VsZi5faGVscGVyLndhaXQoKQpAQCAtMTc1LDExICsxNzcsMTEgQEAgY2xhc3MgQ2hyb21pdW1Q
b3J0KGJhc2UuUG9ydCk6CiAKICAgICAgICAgICAgICAgICBpZiAoZGVidWdfbXRpbWUgPiByZWxl
YXNlX210aW1lIGFuZCB0YXJnZXQgPT0gJ1JlbGVhc2UnIG9yCiAgICAgICAgICAgICAgICAgICAg
IHJlbGVhc2VfbXRpbWUgPiBkZWJ1Z19tdGltZSBhbmQgdGFyZ2V0ID09ICdEZWJ1ZycpOgotICAg
ICAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ1lvdSBhcmUgbm90IHJ1bm5pbmcgdGhl
IG1vc3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY2VudCB0ZXN0
X3NoZWxsIGJpbmFyeS4gWW91IG5lZWQgdG8gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Bhc3MgLS1kZWJ1ZyBvciBub3QgdG8gc2VsZWN0IGJldHdlZW4gJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RlYnVnIGFuZCBSZWxlYXNlLicpCi0gICAg
ICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnJykKKyAgICAgICAgICAgICAgICAgICAg
X2xvZy53YXJuaW5nKCdZb3UgYXJlIG5vdCBydW5uaW5nIHRoZSBtb3N0ICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdyZWNlbnQgdGVzdF9zaGVsbCBiaW5hcnkuIFlvdSBuZWVk
IHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzIC0tZGVidWcgb3Ig
bm90IHRvIHNlbGVjdCBiZXR3ZWVuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdEZWJ1ZyBhbmQgUmVsZWFzZS4nKQorICAgICAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmco
JycpCiAgICAgICAgICAgICAjIFRoaXMgd2lsbCBmYWlsIGlmIHdlIGRvbid0IGhhdmUgYm90aCBh
IGRlYnVnIGFuZCByZWxlYXNlIGJpbmFyeS4KICAgICAgICAgICAgICMgVGhhdCdzIGZpbmUgYmVj
YXVzZSwgaW4gdGhpcyBjYXNlLCB3ZSBtdXN0IGFscmVhZHkgYmUgcnVubmluZyB0aGUKICAgICAg
ICAgICAgICMgbW9zdCB1cC10by1kYXRlIG9uZS4KQEAgLTI2Niw4ICsyNjgsOCBAQCBjbGFzcyBD
aHJvbWl1bURyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dp
dGgoIiNVUkw6Iik6CiAgICAgICAgICAgICAgICAgYWN0dWFsX3VyaSA9IGxpbmUucnN0cmlwKClb
NTpdCiAgICAgICAgICAgICAgICAgaWYgdXJpICE9IGFjdHVhbF91cmk6Ci0gICAgICAgICAgICAg
ICAgICAgIGxvZ2dpbmcuZmF0YWwoIlRlc3QgZ290IG91dCBvZiBzeW5jOlxufCVzfFxufCVzfCIg
JQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJpLCBhY3R1YWxfdXJpKSkKKyAg
ICAgICAgICAgICAgICAgICAgX2xvZy5mYXRhbCgiVGVzdCBnb3Qgb3V0IG9mIHN5bmM6XG58JXN8
XG58JXN8IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSwgYWN0dWFsX3Vy
aSkpCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ0ZXN0IG91dCBv
ZiBzeW5jIikKICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCIjTUQ1OiIpOgogICAg
ICAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IGxpbmUucnN0cmlwKClbNTpdCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtX2xpbnV4LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9saW51eC5weQppbmRleCA3NDk1NTcyLi5jYzA3MWI1IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X2xpbnV4LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fbGludXgucHkKQEAgLTM3LDYgKzM3LDggQEAgaW1wb3J0IHN1YnByb2Nl
c3MKIAogaW1wb3J0IGNocm9taXVtCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0
cHkubGF5b3V0X3Rlc3RzLnBvcnQuY2hyb21pdW1fbGludXgiKQorCiAKIGNsYXNzIENocm9taXVt
TGludXhQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgIiIiQ2hyb21pdW0gTGludXgg
aW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCkBAIC02NCwxMCArNjYsMTAgQEAg
Y2xhc3MgQ2hyb21pdW1MaW51eFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAg
cmVzdWx0ID0gc2VsZi5fY2hlY2tfd2RpZmZfaW5zdGFsbCgpIGFuZCByZXN1bHQKIAogICAgICAg
ICBpZiBub3QgcmVzdWx0OgotICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignRm9yIGNvbXBsZXRl
IExpbnV4IGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonKQotICAgICAgICAgICAgbG9n
Z2luZy5lcnJvcignJykKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJyAgICBodHRwOi8vY29k
ZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS8nCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICdMaW51eEJ1aWxkSW5zdHJ1Y3Rpb25zJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZvciBj
b21wbGV0ZSBMaW51eCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JykKKyAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICBfbG9nLmVycm9yKCcgICAgaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvJworICAgICAgICAgICAgICAgICAgICAgICAn
TGludXhCdWlsZEluc3RydWN0aW9ucycpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRl
ZiBudW1fY29yZXMoc2VsZik6CkBAIC0xMDEsOSArMTAzLDkgQEAgY2xhc3MgQ2hyb21pdW1MaW51
eFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgcmVzdWx0ID0gY2hyb21pdW0u
Y2hlY2tfZmlsZV9leGlzdHMoc2VsZi5fcGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUoKSwKICAg
ICAgICAgICAgICJhcGFjaGUyIGNvbmZpZyBmaWxlIikgYW5kIHJlc3VsdAogICAgICAgICBpZiBu
b3QgcmVzdWx0OgotICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignUGxlYXNlIGluc3RhbGwgdXNp
bmc6ICJzdWRvIGFwdC1nZXQgaW5zdGFsbCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdh
cGFjaGUyIGxpYmFwYWNoZTItbW9kLXBocDUiJykKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Io
JycpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdQbGVhc2UgaW5zdGFsbCB1c2luZzogInN1ZG8g
YXB0LWdldCBpbnN0YWxsICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ2FwYWNoZTIgbGliYXBh
Y2hlMi1tb2QtcGhwNSInKQorICAgICAgICAgICAgX2xvZy5lcnJvcignJykKICAgICAgICAgcmV0
dXJuIHJlc3VsdAogCiAgICAgZGVmIF9jaGVja19saWdodHRwZF9pbnN0YWxsKHNlbGYpOgpAQCAt
MTE0LDE3ICsxMTYsMTcgQEAgY2xhc3MgQ2hyb21pdW1MaW51eFBvcnQoY2hyb21pdW0uQ2hyb21p
dW1Qb3J0KToKICAgICAgICAgcmVzdWx0ID0gY2hyb21pdW0uY2hlY2tfZmlsZV9leGlzdHMoc2Vs
Zi5fcGF0aF90b19saWdodHRwZF9tb2R1bGVzKCksCiAgICAgICAgICAgICAiTGlnSFRUUGQgbW9k
dWxlcyIpIGFuZCByZXN1bHQKICAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIGxv
Z2dpbmcuZXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0IGluc3RhbGwg
JwotICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlnaHR0cGQgcGhwNS1jZ2kiJykKLSAgICAg
ICAgICAgIGxvZ2dpbmcuZXJyb3IoJycpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdQbGVhc2Ug
aW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsICcKKyAgICAgICAgICAgICAgICAg
ICAgICAgJ2xpZ2h0dHBkIHBocDUtY2dpIicpCisgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQog
ICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgX2NoZWNrX3dkaWZmX2luc3RhbGwoc2Vs
Zik6CiAgICAgICAgIHJlc3VsdCA9IGNocm9taXVtLmNoZWNrX2ZpbGVfZXhpc3RzKHNlbGYuX3Bh
dGhfdG9fd2RpZmYoKSwgJ3dkaWZmJykKICAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0IGlu
c3RhbGwgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAnd2RpZmYiJykKLSAgICAgICAgICAg
IGxvZ2dpbmcuZXJyb3IoJycpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdQbGVhc2UgaW5zdGFs
bCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsICcKKyAgICAgICAgICAgICAgICAgICAgICAg
J3dkaWZmIicpCisgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQogICAgICAgICByZXR1cm4gcmVz
dWx0CiAKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQppbmRleCBlY2UxMGIwLi43NWE5MDgw
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtX21hYy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpAQCAtMzcsNiArMzcsOCBAQCBpbXBvcnQg
c3VicHJvY2VzcwogCiBpbXBvcnQgY2hyb21pdW0KIAorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5jaHJvbWl1bV9tYWMiKQorCiAKIGNsYXNzIENo
cm9taXVtTWFjUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICIiIkNocm9taXVtIE1h
YyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBjbGFzcy4iIiIKQEAgLTU3LDEwICs1OSwxMCBA
QCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAg
cmVzdWx0ID0gY2hyb21pdW0uQ2hyb21pdW1Qb3J0LmNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRz
X2h0dHApCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NoZWNrX3dkaWZmX2luc3RhbGwoKSBhbmQg
cmVzdWx0CiAgICAgICAgIGlmIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBsb2dnaW5nLmVycm9y
KCdGb3IgY29tcGxldGUgTWFjIGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonKQotICAg
ICAgICAgICAgbG9nZ2luZy5lcnJvcignJykKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJyAg
ICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS8nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICdNYWNCdWlsZEluc3RydWN0aW9ucycpCisgICAgICAgICAgICBfbG9nLmVy
cm9yKCdGb3IgY29tcGxldGUgTWFjIGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonKQor
ICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgICBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS8nCisgICAgICAgICAgICAgICAg
ICAgICAgICdNYWNCdWlsZEluc3RydWN0aW9ucycpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAog
ICAgIGRlZiBudW1fY29yZXMoc2VsZik6CkBAIC05Niw4ICs5OCw4IEBAIGNsYXNzIENocm9taXVt
TWFjUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAg
ICByY29kZSA9IHN1YnByb2Nlc3MuY2FsbChbJ3dkaWZmJ10sIHN0ZGVycj1mKQogICAgICAgICBl
eGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnd2RpZmYgbm90IGZv
dW5kLiBJbnN0YWxsIHVzaW5nIE1hY1BvcnRzIG9yIHNvbWUgJwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdvdGhlciBtZWFucycpCisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3dkaWZm
IG5vdCBmb3VuZC4gSW5zdGFsbCB1c2luZyBNYWNQb3J0cyBvciBzb21lICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAnb3RoZXIgbWVhbnMnKQogICAgICAgICAgICAgcGFzcwogICAgICAgICBm
LmNsb3NlKCkKICAgICAgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkK
aW5kZXggMjViMWEyYS4uNDA1NDA2NSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKQEAg
LTM4LDYgKzM4LDggQEAgaW1wb3J0IHN5cwogCiBpbXBvcnQgY2hyb21pdW0KIAorX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5jaHJvbWl1bV93aW4i
KQorCiAKIGNsYXNzIENocm9taXVtV2luUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAg
ICIiIkNocm9taXVtIFdpbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBjbGFzcy4iIiIKQEAg
LTYzLDExICs2NSwxMSBAQCBjbGFzcyBDaHJvbWl1bVdpblBvcnQoY2hyb21pdW0uQ2hyb21pdW1Q
b3J0KToKICAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAg
IHJlc3VsdCA9IGNocm9taXVtLkNocm9taXVtUG9ydC5jaGVja19zeXNfZGVwcyhzZWxmLCBuZWVk
c19odHRwKQogICAgICAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cignRm9yIGNvbXBsZXRlIFdpbmRvd3MgYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2UgJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAnc2VlOicpCi0gICAgICAgICAgICBsb2dnaW5nLmVycm9y
KCcnKQotICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignICAgIGh0dHA6Ly9kZXYuY2hyb21pdW0u
b3JnL2RldmVsb3BlcnMvaG93LXRvcy8nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdidWls
ZC1pbnN0cnVjdGlvbnMtd2luZG93cycpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdGb3IgY29t
cGxldGUgV2luZG93cyBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSAnCisgICAgICAgICAgICAg
ICAgICAgICAgICdzZWU6JykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCcgICAgaHR0cDovL2Rldi5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy9ob3ct
dG9zLycKKyAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkLWluc3RydWN0aW9ucy13aW5kb3dz
JykKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIGdldF9hYnNvbHV0ZV9wYXRoKHNl
bGYsIGZpbGVuYW1lKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CmluZGV4IGU1NjA0MGMuLjRl
MTk2YTcgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQpAQCAtNDMsNiArNDMsOCBAQCBpbXBv
cnQgdXJsbGliCiBpbXBvcnQgZmFjdG9yeQogaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKIAorX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3Nl
cnZlciIpCisKIAogY2xhc3MgSHR0cGROb3RTdGFydGVkKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpA
QCAtMjA1LDcgKzIwNyw3IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNl
cnZlckJhc2UpOgogICAgICAgICAgICAgICAgICdjeWd3aW4nLCAnc2V0dXBfbW91bnQuYmF0JykK
ICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQogCi0gICAg
ICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVyJykKKyAgICAgICAgX2xvZy5k
ZWJ1ZygnU3RhcnRpbmcgaHR0cCBzZXJ2ZXInKQogICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3Vi
cHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIGVudj1lbnYpCiAKICAgICAgICAgIyBXYWl0IGZvciBz
ZXJ2ZXIgdG8gc3RhcnQuCkBAIC0yMTcsNyArMjE5LDcgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9z
ZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgIGlmIG5vdCBzZXJ2ZXJfc3RhcnRl
ZCBvciBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKICAgICAgICAgICAgIHJhaXNl
IGdvb2dsZS5odHRwZF91dGlscy5IdHRwZE5vdFN0YXJ0ZWQoJ0ZhaWxlZCB0byBzdGFydCBodHRw
ZC4nKQogCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRl
ZCIpCisgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCIpCiAK
ICAgICAjIFRPRE8oZGVhbm0pOiBGaW5kIGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFubHku
ICBPdXIgbG9nIGZpbGVzIGFyZQogICAgICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQsIGV0
Yy4uLiB3aHkgZG9lc24ndCBvdXIgcHl0aG9uIGhhdmUgb3Mua2lsbCA/CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVy
X2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2h0dHBfc2VydmVyX2Jhc2UucHkKaW5kZXggZTgyOTQzZS4uMzg3MzkwZiAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
cl9iYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQpAQCAtMzQsNiArMzQsOCBAQCBpbXBvcnQgb3MKIGlt
cG9ydCB0aW1lCiBpbXBvcnQgdXJsbGliCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuaHR0cF9zZXJ2ZXJfYmFzZSIpCisKIAogY2xhc3MgSHR0
cFNlcnZlckJhc2Uob2JqZWN0KToKIApAQCAtNjMsOSArNjUsOSBAQCBjbGFzcyBIdHRwU2VydmVy
QmFzZShvYmplY3QpOgogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmVzcG9u
c2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCi0gICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1Zygi
U2VydmVyIHJ1bm5pbmcgYXQgJXMiICUgdXJsKQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWco
IlNlcnZlciBydW5uaW5nIGF0ICVzIiAlIHVybCkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9y
OgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBOT1QgcnVubmluZyBhdCAl
cyIgJSB1cmwpCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIE5PVCBydW5uaW5n
IGF0ICVzIiAlIHVybCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBy
ZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L21hYy5weQppbmRleCA5YjcwY2I3Li5kMDUyMTA4IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQpA
QCAtNDYsNiArNDYsOSBAQCBpbXBvcnQgYmFzZQogaW1wb3J0IHdlYmtpdHB5CiBmcm9tIHdlYmtp
dHB5IGltcG9ydCBleGVjdXRpdmUKIAorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydC5tYWMiKQorCisKIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToK
ICAgICAiIiJXZWJLaXQgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGNsYXNzLiIiIgog
CkBAIC03Miw3ICs3NSw3IEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKIAogICAgICAgICBk
cml2ZXJfcGF0aCA9IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkKICAgICAgICAgaWYgbm90IG9zLnBh
dGguZXhpc3RzKGRyaXZlcl9wYXRoKToKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkR1bXBS
ZW5kZXJUcmVlIHdhcyBub3QgZm91bmQgYXQgJXMiICUgZHJpdmVyX3BhdGgpCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCJEdW1wUmVuZGVyVHJlZSB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIGRyaXZl
cl9wYXRoKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgIyBUaGlzIHNob3Vs
ZCBhbHNvIHZhbGlkYXRlIHRoYXQgdGhlIEltYWdlRGlmZiBwYXRoIGlzIHZhbGlkIChvbmNlIHRo
aXMgc2NyaXB0IGtub3dzIGhvdyB0byB1c2UgSW1hZ2VEaWZmKS4KQEAgLTE2NCw3ICsxNjcsNyBA
QCBjbGFzcyBNYWNQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIHRlc3RzX3RvX3NraXAgPSBbXQog
ICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fc2tpcHBlZF9maWxlX3BhdGhzKCk6CiAgICAg
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgotICAgICAgICAgICAgICAg
IGxvZ2dpbmcud2FybigiRmFpbGVkIHRvIG9wZW4gU2tpcHBlZCBmaWxlOiAlcyIgJSBmaWxlbmFt
ZSkKKyAgICAgICAgICAgICAgICBfbG9nLndhcm4oIkZhaWxlZCB0byBvcGVuIFNraXBwZWQgZmls
ZTogJXMiICUgZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAg
IHNraXBwZWRfZmlsZSA9IGZpbGUoZmlsZW5hbWUpCiAgICAgICAgICAgICB0ZXN0c190b19za2lw
LmV4dGVuZChzZWxmLl90ZXN0c19mcm9tX3NraXBwZWRfZmlsZShza2lwcGVkX2ZpbGUpKQpAQCAt
MzEwLDcgKzMxMyw3IEBAIGNsYXNzIE1hY0RyaXZlcihiYXNlLkRyaXZlcik6CiAKICAgICAgICAg
IyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgYXJvdW5kIG91ciBsYWNrIG9mIEltYWdlRGlmZiBzdXBw
b3J0IGZvciBub3cuCiAgICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0Ll9vcHRpb25zLm5vX3BpeGVs
X3Rlc3RzOgotICAgICAgICAgICAgbG9nZ2luZy53YXJuKCJUaGlzIHBvcnQgZG9lcyBub3QgeWV0
IHN1cHBvcnQgcGl4ZWwgdGVzdHMuIikKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBwb3J0
IGRvZXMgbm90IHlldCBzdXBwb3J0IHBpeGVsIHRlc3RzLiIpCiAgICAgICAgICAgICBzZWxmLl9w
b3J0Ll9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzID0gVHJ1ZQogICAgICAgICAgICAgI2NtZC5hcHBl
bmQoJy0tcGl4ZWwtdGVzdHMnKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkK
aW5kZXggMGM0MTQ2ZS4uYjRiM2Q5NyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZl
ci5weQpAQCAtNDIsNiArNDIsOCBAQCBpbXBvcnQgdXJsbGliCiBpbXBvcnQgZmFjdG9yeQogaW1w
b3J0IGh0dHBfc2VydmVyCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQud2Vic29ja2V0X3NlcnZlciIpCisKIF9XU19MT0dfUFJFRklYID0gJ3B5
d2Vic29ja2V0LndzLmxvZy0nCiBfV1NTX0xPR19QUkVGSVggPSAncHl3ZWJzb2NrZXQud3NzLmxv
Zy0nCiAKQEAgLTEyNyw3ICsxMjksNyBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5M
aWdodHRwZCk6CiAKICAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl93
ZWJfc29ja2V0X3Rlc3RzOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdObyBuZWVkIHRvIHN0
YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCisgICAgICAgICAgICBfbG9nLmlu
Zm8oJ05vIG5lZWQgdG8gc3RhcnQgJXMgc2VydmVyLicgJSBzZWxmLl9zZXJ2ZXJfbmFtZSkKICAg
ICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKICAgICAgICAg
ICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3RhcnRlZCgnJXMgaXMgYWxyZWFkeSBydW5uaW5nLicg
JQpAQCAtMTY2LDExICsxNjgsMTEgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGln
aHR0cGQpOgogICAgICAgICBoYW5kbGVyX21hcF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3dl
Yl9zb2NrZXRfdGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2hhbmRsZXJfbWFwLnR4dCcpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGhhbmRsZXJfbWFw
X2ZpbGUpOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgaGFuZGxlcl9tYXBfZmls
ZTogJXMnICUgaGFuZGxlcl9tYXBfZmlsZSkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1VzaW5n
IGhhbmRsZXJfbWFwX2ZpbGU6ICVzJyAlIGhhbmRsZXJfbWFwX2ZpbGUpCiAgICAgICAgICAgICBz
dGFydF9jbWQuYXBwZW5kKCctbScpCiAgICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKGhhbmRs
ZXJfbWFwX2ZpbGUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dnaW5nLndhcm5pbmco
J05vIGhhbmRsZXJfbWFwX2ZpbGUgZm91bmQnKQorICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdO
byBoYW5kbGVyX21hcF9maWxlIGZvdW5kJykKIAogICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgog
ICAgICAgICAgICAgc3RhcnRfY21kLmV4dGVuZChbJy10JywgJy1rJywgc2VsZi5fcHJpdmF0ZV9r
ZXksCkBAIC0xOTIsOSArMTk0LDkgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGln
aHR0cGQpOgogICAgICAgICBlbnZbJ1BZVEhPTlBBVEgnXSA9IChweXdlYnNvY2tldF9iYXNlICsg
b3MucGF0aC5wYXRoc2VwICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LmdldCgn
UFlUSE9OUEFUSCcsICcnKSkKIAotICAgICAgICBsb2dnaW5nLmRlYnVnKCdTdGFydGluZyAlcyBz
ZXJ2ZXIgb24gJWQuJyAlICgKLSAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9w
b3J0KSkKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygnY21kbGluZTogJXMnICUgJyAnLmpvaW4oc3Rh
cnRfY21kKSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgJXMgc2VydmVyIG9uICVkLicg
JSAoCisgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQor
ICAgICAgICBfbG9nLmRlYnVnKCdjbWRsaW5lOiAlcycgJSAnICcuam9pbihzdGFydF9jbWQpKQog
ICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIHN0ZG91
dD1zZWxmLl93c291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbnY9ZW52KQpAQCAtMjExLDcgKzIxMyw3IEBAIGNsYXNzIFB5V2ViU29ja2V0
KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgIGZwID0gb3BlbihvdXRwdXRfbG9n
KQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZwOgotICAg
ICAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKGxpbmUpCisgICAgICAgICAgICAgICAgICAg
IF9sb2cuZXJyb3IobGluZSkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAg
ZnAuY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RTdGFydGVkKApAQCAt
MjQyLDcgKzI0NCw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToK
ICAgICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90Rm91bmQoCiAgICAgICAgICAgICAgICAg
J0ZhaWxlZCB0byBmaW5kICVzIHNlcnZlciBwaWQuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQogCi0g
ICAgICAgIGxvZ2dpbmcuZGVidWcoJ1NodXR0aW5nIGRvd24gJXMgc2VydmVyICVkLicgJSAoc2Vs
Zi5fc2VydmVyX25hbWUsIHBpZCkpCisgICAgICAgIF9sb2cuZGVidWcoJ1NodXR0aW5nIGRvd24g
JXMgc2VydmVyICVkLicgJSAoc2VsZi5fc2VydmVyX25hbWUsIHBpZCkpCiAgICAgICAgIHNlbGYu
X3BvcnRfb2JqLl9raWxsX3Byb2Nlc3MocGlkKQogCiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
ZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5
CmluZGV4IDQ2MDRhMWEuLjhiZWVlM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxp
bmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CkBAIC01OSw2ICs1OSw5IEBAIGZyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0
IGltYWdlX2RpZmYKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCiAKK19sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAicmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMiKQorCiAjIFJlcG9z
aXRvcnkgdHlwZSBjb25zdGFudHMuCiBSRVBPX1NWTiwgUkVQT19VTktOT1dOID0gcmFuZ2UoMikK
IApAQCAtMTM3LDExICsxNDAsMTEgQEAgZGVmIGxvZ19kYXNoZWRfc3RyaW5nKHRleHQsIHBsYXRm
b3JtLCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuSU5GTyk6CiAgICAgICAgIG1zZyA9ICclcyAlcyAl
cycgJSAoZGFzaGVzLCBtc2csIGRhc2hlcykKIAogICAgIGlmIGxvZ2dpbmdfbGV2ZWwgPT0gbG9n
Z2luZy5FUlJPUjoKLSAgICAgICAgbG9nZ2luZy5lcnJvcihtc2cpCisgICAgICAgIF9sb2cuZXJy
b3IobXNnKQogICAgIGVsaWYgbG9nZ2luZ19sZXZlbCA9PSBsb2dnaW5nLldBUk5JTkc6Ci0gICAg
ICAgIGxvZ2dpbmcud2Fybihtc2cpCisgICAgICAgIF9sb2cud2Fybihtc2cpCiAgICAgZWxzZToK
LSAgICAgICAgbG9nZ2luZy5pbmZvKG1zZykKKyAgICAgICAgX2xvZy5pbmZvKG1zZykKIAogCiBk
ZWYgc2V0dXBfaHRtbF9kaXJlY3RvcnkoaHRtbF9kaXJlY3RvcnkpOgpAQCAtMTYzLDExICsxNjYs
MTEgQEAgZGVmIHNldHVwX2h0bWxfZGlyZWN0b3J5KGh0bWxfZGlyZWN0b3J5KToKICAgICAgICAg
b3MubWtkaXIoaHRtbF9kaXJlY3RvcnkpCiAKICAgICBodG1sX2RpcmVjdG9yeSA9IG9zLnBhdGgu
am9pbihodG1sX2RpcmVjdG9yeSwgJ3JlYmFzZWxpbmVfaHRtbCcpCi0gICAgbG9nZ2luZy5pbmZv
KCdIdG1sIGRpcmVjdG9yeTogIiVzIicsIGh0bWxfZGlyZWN0b3J5KQorICAgIF9sb2cuaW5mbygn
SHRtbCBkaXJlY3Rvcnk6ICIlcyInLCBodG1sX2RpcmVjdG9yeSkKIAogICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKGh0bWxfZGlyZWN0b3J5KToKICAgICAgICAgc2h1dGlsLnJtdHJlZShodG1sX2RpcmVj
dG9yeSwgVHJ1ZSkKLSAgICAgICAgbG9nZ2luZy5pbmZvKCdEZWxldGVkIGZpbGUgYXQgaHRtbCBk
aXJlY3Rvcnk6ICIlcyInLCBodG1sX2RpcmVjdG9yeSkKKyAgICAgICAgX2xvZy5pbmZvKCdEZWxl
dGVkIGZpbGUgYXQgaHRtbCBkaXJlY3Rvcnk6ICIlcyInLCBodG1sX2RpcmVjdG9yeSkKIAogICAg
IGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhodG1sX2RpcmVjdG9yeSk6CiAgICAgICAgIG9zLm1rZGly
KGh0bWxfZGlyZWN0b3J5KQpAQCAtMTkxLDcgKzE5NCw3IEBAIGRlZiBnZXRfcmVzdWx0X2ZpbGVf
ZnVsbHBhdGgoaHRtbF9kaXJlY3RvcnksIGJhc2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwKICAg
ICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2VsaW5lX2ZpbGVuYW1lKQogICAgIHJl
c3VsdF9maWxlbmFtZSA9ICclcy0lcy0lcyVzJyAlIChiYXNlLCBwbGF0Zm9ybSwgcmVzdWx0X3R5
cGUsIGV4dCkKICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihodG1sX2RpcmVjdG9yeSwgcmVz
dWx0X2ZpbGVuYW1lKQotICAgIGxvZ2dpbmcuZGVidWcoJyAgUmVzdWx0IGZpbGUgZnVsbCBwYXRo
OiAiJXMiLicsIGZ1bGxwYXRoKQorICAgIF9sb2cuZGVidWcoJyAgUmVzdWx0IGZpbGUgZnVsbCBw
YXRoOiAiJXMiLicsIGZ1bGxwYXRoKQogICAgIHJldHVybiBmdWxscGF0aAogCiAKQEAgLTIzMyw5
ICsyMzYsOSBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogCiAgICAgICAgIGxvZ19kYXNo
ZWRfc3RyaW5nKCdEb3dubG9hZGluZyBhcmNoaXZlJywgc2VsZi5fcGxhdGZvcm0pCiAgICAgICAg
IGFyY2hpdmVfZmlsZSA9IHNlbGYuX2Rvd25sb2FkX2J1aWxkYm90X2FyY2hpdmUoKQotICAgICAg
ICBsb2dnaW5nLmluZm8oJycpCisgICAgICAgIF9sb2cuaW5mbygnJykKICAgICAgICAgaWYgbm90
IGFyY2hpdmVfZmlsZToKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ05vIGFyY2hpdmUgZm91
bmQuJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ05vIGFyY2hpdmUgZm91bmQuJykKICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdFeHRyYWN0
aW5nIGFuZCBhZGRpbmcgbmV3IGJhc2VsaW5lcycsCkBAIC0yNDYsMTkgKzI0OSwxOSBAQCBjbGFz
cyBSZWJhc2VsaW5lcihvYmplY3QpOgogICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnVXBkYXRp
bmcgcmViYXNlbGluZWQgdGVzdHMgaW4gZmlsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3BsYXRmb3JtKQogICAgICAgICBzZWxmLl91cGRhdGVfcmViYXNlbGluZWRfdGVzdHNf
aW5fZmlsZShiYWNrdXApCi0gICAgICAgIGxvZ2dpbmcuaW5mbygnJykKKyAgICAgICAgX2xvZy5p
bmZvKCcnKQogCiAgICAgICAgIGlmIGxlbihzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMpICE9IGxl
bihzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyk6Ci0gICAgICAgICAgICBsb2dnaW5nLndhcm5pbmco
J05PVCBBTEwgVEVTVFMgVEhBVCBORUVEIFJFQkFTRUxJTklORyBIQVZFIEJFRU4gJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdSRUJBU0VMSU5FRC4nKQotICAgICAgICAgICAgbG9nZ2lu
Zy53YXJuaW5nKCcgIFRvdGFsIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5nOiAlZCcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykpCi0g
ICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJyAgVG90YWwgdGVzdHMgcmViYXNlbGluZWQ6ICVk
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5fcmViYXNlbGluZWRfdGVz
dHMpKQorICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdOT1QgQUxMIFRFU1RTIFRIQVQgTkVFRCBS
RUJBU0VMSU5JTkcgSEFWRSBCRUVOICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnUkVCQVNF
TElORUQuJykKKyAgICAgICAgICAgIF9sb2cud2FybmluZygnICBUb3RhbCB0ZXN0cyBuZWVkaW5n
IHJlYmFzZWxpbmluZzogJWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLl9y
ZWJhc2VsaW5pbmdfdGVzdHMpKQorICAgICAgICAgICAgX2xvZy53YXJuaW5nKCcgIFRvdGFsIHRl
c3RzIHJlYmFzZWxpbmVkOiAlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYu
X3JlYmFzZWxpbmVkX3Rlc3RzKSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAg
IGxvZ2dpbmcud2FybmluZygnQWxsIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5nIHdlcmUgc3Vj
Y2Vzc2Z1bGx5ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICdyZWJhc2VsaW5lZC4nKQorICAg
ICAgICBfbG9nLndhcm5pbmcoJ0FsbCB0ZXN0cyBuZWVkaW5nIHJlYmFzZWxpbmluZyB3ZXJlIHN1
Y2Nlc3NmdWxseSAnCisgICAgICAgICAgICAgICAgICAgICAncmViYXNlbGluZWQuJykKIAogICAg
ICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yODUsMTYgKzI4OCwxNiBAQCBjbGFzcyBSZWJhc2VsaW5l
cihvYmplY3QpOgogICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMgPSBcCiAgICAgICAg
ICAgICBzZWxmLl90ZXN0X2V4cGVjdGF0aW9ucy5nZXRfcmViYXNlbGluaW5nX2ZhaWx1cmVzKCkK
ICAgICAgICAgaWYgbm90IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKLSAgICAgICAgICAgIGxv
Z2dpbmcud2FybignTm8gdGVzdHMgZm91bmQgdGhhdCBuZWVkIHJlYmFzZWxpbmluZy4nKQorICAg
ICAgICAgICAgX2xvZy53YXJuKCdObyB0ZXN0cyBmb3VuZCB0aGF0IG5lZWQgcmViYXNlbGluaW5n
LicpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGxvZ2dpbmcuaW5mbygnVG90
YWwgbnVtYmVyIG9mIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5nICcKLSAgICAgICAgICAgICAg
ICAgICAgICdmb3IgIiVzIjogIiVkIicsIHNlbGYuX3BsYXRmb3JtLAotICAgICAgICAgICAgICAg
ICAgICAgbGVuKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykpCisgICAgICAgIF9sb2cuaW5mbygn
VG90YWwgbnVtYmVyIG9mIHRlc3RzIG5lZWRpbmcgcmViYXNlbGluaW5nICcKKyAgICAgICAgICAg
ICAgICAgICdmb3IgIiVzIjogIiVkIicsIHNlbGYuX3BsYXRmb3JtLAorICAgICAgICAgICAgICAg
ICAgbGVuKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykpCiAKICAgICAgICAgdGVzdF9ubyA9IDEK
ICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fcmViYXNlbGluaW5nX3Rlc3RzOgotICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCcgICVkOiAlcycsIHRlc3Rfbm8sIHRlc3QpCisgICAgICAgICAgICBf
bG9nLmluZm8oJyAgJWQ6ICVzJywgdGVzdF9ubywgdGVzdCkKICAgICAgICAgICAgIHRlc3Rfbm8g
Kz0gMQogCiAgICAgICAgIHJldHVybiBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMKQEAgLTMxMCw3
ICszMTMsNyBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogICAgICAgICAgIE5vbmUgb24g
ZmFpbHVyZS4KICAgICAgICAgIiIiCiAKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXJsIHRvIHJl
dHJpZXZlIHJldmlzaW9uOiAiJXMiJywgdXJsKQorICAgICAgICBfbG9nLmRlYnVnKCdVcmwgdG8g
cmV0cmlldmUgcmV2aXNpb246ICIlcyInLCB1cmwpCiAKICAgICAgICAgZiA9IHVybGxpYi51cmxv
cGVuKHVybCkKICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCkBAIC0zMTgsMTEgKzMyMSwxMSBA
QCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogCiAgICAgICAgIHJldmlzaW9ucyA9IHJlLmZp
bmRhbGwoc2VsZi5SRVZJU0lPTl9SRUdFWCwgY29udGVudCkKICAgICAgICAgaWYgbm90IHJldmlz
aW9uczoKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0ZhaWxlZCB0byBmaW5kIHJldmlzaW9u
LCBjb250ZW50OiAiJXMiJywgY29udGVudCkKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxl
ZCB0byBmaW5kIHJldmlzaW9uLCBjb250ZW50OiAiJXMiJywgY29udGVudCkKICAgICAgICAgICAg
IHJldHVybiBOb25lCiAKICAgICAgICAgcmV2aXNpb25zLnNvcnQoa2V5PWludCkKLSAgICAgICAg
bG9nZ2luZy5pbmZvKCdMYXRlc3QgcmV2aXNpb246ICIlcyInLCByZXZpc2lvbnNbbGVuKHJldmlz
aW9ucykgLSAxXSkKKyAgICAgICAgX2xvZy5pbmZvKCdMYXRlc3QgcmV2aXNpb246ICIlcyInLCBy
ZXZpc2lvbnNbbGVuKHJldmlzaW9ucykgLSAxXSkKICAgICAgICAgcmV0dXJuIHJldmlzaW9uc1ts
ZW4ocmV2aXNpb25zKSAtIDFdCiAKICAgICBkZWYgX2dldF9hcmNoaXZlX2Rpcl9uYW1lKHNlbGYs
IHBsYXRmb3JtLCB3ZWJraXRfY2FuYXJ5KToKQEAgLTMzOSw4ICszNDIsOCBAQCBjbGFzcyBSZWJh
c2VsaW5lcihvYmplY3QpOgogICAgICAgICBpZiBwbGF0Zm9ybSBpbiBBUkNISVZFX0RJUl9OQU1F
X0RJQ1Q6CiAgICAgICAgICAgICByZXR1cm4gQVJDSElWRV9ESVJfTkFNRV9ESUNUW3BsYXRmb3Jt
XQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignQ2Fubm90IGZpbmQg
cGxhdGZvcm0ga2V5ICVzIGluIGFyY2hpdmUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAn
ZGlyZWN0b3J5IG5hbWUgZGljdGlvbmFyeScsIHBsYXRmb3JtKQorICAgICAgICAgICAgX2xvZy5l
cnJvcignQ2Fubm90IGZpbmQgcGxhdGZvcm0ga2V5ICVzIGluIGFyY2hpdmUgJworICAgICAgICAg
ICAgICAgICAgICAgICAnZGlyZWN0b3J5IG5hbWUgZGljdGlvbmFyeScsIHBsYXRmb3JtKQogICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfZ2V0X2FyY2hpdmVfdXJsKHNlbGYpOgpA
QCAtMzU2LDcgKzM1OSw3IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAgICAgICAgIGlm
IG5vdCBkaXJfbmFtZToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygnQnVpbGRib3QgcGxhdGZvcm0gZGlyIG5hbWU6ICIlcyInLCBkaXJfbmFtZSkKKyAg
ICAgICAgX2xvZy5kZWJ1ZygnQnVpbGRib3QgcGxhdGZvcm0gZGlyIG5hbWU6ICIlcyInLCBkaXJf
bmFtZSkKIAogICAgICAgICB1cmxfYmFzZSA9ICclcy8lcy8nICUgKHNlbGYuX29wdGlvbnMuYXJj
aGl2ZV91cmwsIGRpcl9uYW1lKQogICAgICAgICBsYXRlc3RfcmV2aXNpb24gPSBzZWxmLl9nZXRf
bGF0ZXN0X3JldmlzaW9uKHVybF9iYXNlKQpAQCAtMzY0LDcgKzM2Nyw3IEBAIGNsYXNzIFJlYmFz
ZWxpbmVyKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBhcmNoaXZl
X3VybCA9ICgnJXMlcy9sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCcgJSAodXJsX2Jhc2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRl
c3RfcmV2aXNpb24pKQotICAgICAgICBsb2dnaW5nLmluZm8oJ0FyY2hpdmUgdXJsOiAiJXMiJywg
YXJjaGl2ZV91cmwpCisgICAgICAgIF9sb2cuaW5mbygnQXJjaGl2ZSB1cmw6ICIlcyInLCBhcmNo
aXZlX3VybCkKICAgICAgICAgcmV0dXJuIGFyY2hpdmVfdXJsCiAKICAgICBkZWYgX2Rvd25sb2Fk
X2J1aWxkYm90X2FyY2hpdmUoc2VsZik6CkBAIC0zODAsNyArMzgzLDcgQEAgY2xhc3MgUmViYXNl
bGluZXIob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgZm4gPSB1
cmxsaWIudXJscmV0cmlldmUodXJsKVswXQotICAgICAgICBsb2dnaW5nLmluZm8oJ0FyY2hpdmUg
ZG93bmxvYWRlZCBhbmQgc2F2ZWQgdG8gZmlsZTogIiVzIicsIGZuKQorICAgICAgICBfbG9nLmlu
Zm8oJ0FyY2hpdmUgZG93bmxvYWRlZCBhbmQgc2F2ZWQgdG8gZmlsZTogIiVzIicsIGZuKQogICAg
ICAgICByZXR1cm4gZm4KIAogICAgIGRlZiBfZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMo
c2VsZiwgYXJjaGl2ZV9maWxlKToKQEAgLTM5NywxNyArNDAwLDE3IEBAIGNsYXNzIFJlYmFzZWxp
bmVyKG9iamVjdCk6CiAgICAgICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKGFyY2hpdmVf
ZmlsZSwgJ3InKQogICAgICAgICB6aXBfbmFtZWxpc3QgPSB6aXBfZmlsZS5uYW1lbGlzdCgpCiAK
LSAgICAgICAgbG9nZ2luZy5kZWJ1ZygnemlwIGZpbGUgbmFtZWxpc3Q6JykKKyAgICAgICAgX2xv
Zy5kZWJ1ZygnemlwIGZpbGUgbmFtZWxpc3Q6JykKICAgICAgICAgZm9yIG5hbWUgaW4gemlwX25h
bWVsaXN0OgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICAnICsgbmFtZSkKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoJyAgJyArIG5hbWUpCiAKICAgICAgICAgcGxhdGZvcm0gPSBzZWxmLl9w
b3J0Lm5hbWUoKQotICAgICAgICBsb2dnaW5nLmRlYnVnKCdQbGF0Zm9ybSBkaXI6ICIlcyInLCBw
bGF0Zm9ybSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnUGxhdGZvcm0gZGlyOiAiJXMiJywgcGxhdGZv
cm0pCiAKICAgICAgICAgdGVzdF9ubyA9IDEKICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVz
dHMgPSBbXQogICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6Ci0g
ICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1Rlc3QgJWQ6ICVzJywgdGVzdF9ubywgdGVzdCkKKyAg
ICAgICAgICAgIF9sb2cuaW5mbygnVGVzdCAlZDogJXMnLCB0ZXN0X25vLCB0ZXN0KQogCiAgICAg
ICAgICAgICBmb3VuZCA9IEZhbHNlCiAgICAgICAgICAgICBzdm5fZXJyb3IgPSBGYWxzZQpAQCAt
NDE1LDE0ICs0MTgsMTQgQEAgY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKICAgICAgICAgICAg
IGZvciBzdWZmaXggaW4gQkFTRUxJTkVfU1VGRklYRVM6CiAgICAgICAgICAgICAgICAgYXJjaGl2
ZV90ZXN0X25hbWUgPSAoJ2xheW91dC10ZXN0LXJlc3VsdHMvJXMtYWN0dWFsJXMnICUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCkp
Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICBBcmNoaXZlIHRlc3QgZmlsZSBuYW1l
OiAiJXMiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfdGVzdF9uYW1l
KQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgQXJjaGl2ZSB0ZXN0IGZpbGUgbmFtZTog
IiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlX3Rlc3RfbmFtZSkKICAg
ICAgICAgICAgICAgICBpZiBub3QgYXJjaGl2ZV90ZXN0X25hbWUgaW4gemlwX25hbWVsaXN0Ogot
ICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgJXMgZmlsZSBub3QgaW4gYXJjaGl2
ZS4nLCBzdWZmaXgpCisgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICAlcyBmaWxlIG5v
dCBpbiBhcmNoaXZlLicsIHN1ZmZpeCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAog
ICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQotICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5m
bygnICAlcyBmaWxlIGZvdW5kIGluIGFyY2hpdmUuJywgc3VmZml4KQorICAgICAgICAgICAgICAg
IF9sb2cuaW5mbygnICAlcyBmaWxlIGZvdW5kIGluIGFyY2hpdmUuJywgc3VmZml4KQogCiAgICAg
ICAgICAgICAgICAgIyBFeHRyYWN0IG5ldyBiYXNlbGluZSBmcm9tIGFyY2hpdmUgYW5kIHNhdmUg
aXQgdG8gYSB0ZW1wIGZpbGUuCiAgICAgICAgICAgICAgICAgZGF0YSA9IHppcF9maWxlLnJlYWQo
YXJjaGl2ZV90ZXN0X25hbWUpCkBAIC00MzYsOCArNDM5LDggQEAgY2xhc3MgUmViYXNlbGluZXIo
b2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5fY2hyb21pdW1fYmFzZWxp
bmVfcGF0aChwbGF0Zm9ybSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1l
KQogICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Z1bGxwYXRoID0gb3MucGF0aC5ub3JtcGF0aChl
eHBlY3RlZF9mdWxscGF0aCkKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcgIEV4cGVj
dGVkIGZpbGUgZnVsbCBwYXRoOiAiJXMiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkX2Z1bGxwYXRoKQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgRXhwZWN0
ZWQgZmlsZSBmdWxsIHBhdGg6ICIlcyInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfZnVsbHBhdGgpCiAKICAgICAgICAgICAgICAgICAjIFRPRE8odmljdG9ydyk6IGZvciBu
b3csIHRoZSByZWJhc2VsaW5pbmcgdG9vbCBjaGVja3Mgd2hldGhlcgogICAgICAgICAgICAgICAg
ICMgb3Igbm90IFRISVMgYmFzZWxpbmUgaXMgZHVwbGljYXRlIGFuZCBzaG91bGQgYmUgc2tpcHBl
ZC4KQEAgLTQ2NiwxMiArNDY5LDEyIEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9odG1sX2Jhc2VsaW5lX2ZpbGVzKGV4cGVjdGVk
X2Z1bGxwYXRoKQogCiAgICAgICAgICAgICBpZiBub3QgZm91bmQ6Ci0gICAgICAgICAgICAgICAg
bG9nZ2luZy53YXJuKCcgIE5vIG5ldyBiYXNlbGluZXMgZm91bmQgaW4gYXJjaGl2ZS4nKQorICAg
ICAgICAgICAgICAgIF9sb2cud2FybignICBObyBuZXcgYmFzZWxpbmVzIGZvdW5kIGluIGFyY2hp
dmUuJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgc3ZuX2Vycm9yOgot
ICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oJyAgRmFpbGVkIHRvIGFkZCBiYXNlbGlu
ZXMgdG8gU1ZOLicpCisgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybignICBGYWlsZWQgdG8g
YWRkIGJhc2VsaW5lcyB0byBTVk4uJykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgUmViYXNlbGluZSBzdWNjZWVkZWQuJykKKyAgICAg
ICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIFJlYmFzZWxpbmUgc3VjY2VlZGVkLicpCiAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzLmFwcGVuZCh0ZXN0KQogCiAg
ICAgICAgICAgICB0ZXN0X25vICs9IDEKQEAgLTUwOSw4ICs1MTIsOCBAQCBjbGFzcyBSZWJhc2Vs
aW5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIGZhbGxiYWNrX2Z1bGxwYXRoLmxvd2Vy
KCkgIT0gYmFzZWxpbmVfcGF0aC5sb3dlcigpOgogICAgICAgICAgICAgICAgICAgICBpZiBub3Qg
c2VsZi5fZGlmZl9iYXNlbGluZXMobmV3X2Jhc2VsaW5lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tfZnVsbHBhdGgpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIEZvdW5kIHNhbWUgYmFzZWxpbmUgYXQgJXMn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrX2Z1bGxwYXRo
KQorICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIEZvdW5kIHNhbWUgYmFzZWxp
bmUgYXQgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrX2Z1
bGxwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAg
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAt
NTMxLDggKzUzNCw4IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAgICAgICAgIGV4dDEg
PSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGUxKVsxXS51cHBlcigpCiAgICAgICAgIGV4dDIgPSBvcy5w
YXRoLnNwbGl0ZXh0KGZpbGUyKVsxXS51cHBlcigpCiAgICAgICAgIGlmIGV4dDEgIT0gZXh0MjoK
LSAgICAgICAgICAgIGxvZ2dpbmcud2FybignRmlsZXMgdG8gY29tcGFyZSBoYXZlIGRpZmZlcmVu
dCBleHQuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRmlsZTE6ICVzOyBGaWxlMjogJXMn
LCBmaWxlMSwgZmlsZTIpCisgICAgICAgICAgICBfbG9nLndhcm4oJ0ZpbGVzIHRvIGNvbXBhcmUg
aGF2ZSBkaWZmZXJlbnQgZXh0LiAnCisgICAgICAgICAgICAgICAgICAgICAgJ0ZpbGUxOiAlczsg
RmlsZTI6ICVzJywgZmlsZTEsIGZpbGUyKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAg
ICAgICBpZiBleHQxID09ICcuUE5HJzoKQEAgLTU4MiwxMyArNTg1LDEzIEBAIGNsYXNzIFJlYmFz
ZWxpbmVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgYmFja3VwX2ZpbGUgPSAoJyVzLm9yaWcu
JXMnICUgKHBhdGgsIGRhdGVfc3VmZml4KSkKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4
aXN0cyhiYWNrdXBfZmlsZSk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShiYWNrdXBf
ZmlsZSkKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1NhdmluZyBvcmlnaW5hbCBmaWxl
IHRvICIlcyInLCBiYWNrdXBfZmlsZSkKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ1Nhdmlu
ZyBvcmlnaW5hbCBmaWxlIHRvICIlcyInLCBiYWNrdXBfZmlsZSkKICAgICAgICAgICAgICAgICBv
cy5yZW5hbWUocGF0aCwgYmFja3VwX2ZpbGUpCiAgICAgICAgICAgICBmID0gb3BlbihwYXRoLCAi
dyIpCiAgICAgICAgICAgICBmLndyaXRlKG5ld19leHBlY3RhdGlvbnMpCiAgICAgICAgICAgICBm
LmNsb3NlKCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnTm8gdGVz
dCB3YXMgcmViYXNlbGluZWQgc28gbm90aGluZyB0byByZW1vdmUuJykKKyAgICAgICAgICAgIF9s
b2cuaW5mbygnTm8gdGVzdCB3YXMgcmViYXNlbGluZWQgc28gbm90aGluZyB0byByZW1vdmUuJykK
IAogICAgIGRlZiBfc3ZuX2FkZChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkFkZCB0aGUg
ZmlsZSB0byBTVk4gcmVwb3NpdG9yeS4KQEAgLTYwNyw3ICs2MTAsNyBAQCBjbGFzcyBSZWJhc2Vs
aW5lcihvYmplY3QpOgogCiAgICAgICAgIHBhcmVudF9kaXIsIGJhc2VuYW1lID0gb3MucGF0aC5z
cGxpdChmaWxlbmFtZSkKICAgICAgICAgaWYgc2VsZi5fcmVwb190eXBlICE9IFJFUE9fU1ZOIG9y
IHBhcmVudF9kaXIgPT0gZmlsZW5hbWU6Ci0gICAgICAgICAgICBsb2dnaW5nLmluZm8oIk5vIHN2
biBjaGVja291dCBmb3VuZCwgc2tpcCBzdm4gYWRkLiIpCisgICAgICAgICAgICBfbG9nLmluZm8o
Ik5vIHN2biBjaGVja291dCBmb3VuZCwgc2tpcCBzdm4gYWRkLiIpCiAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQogCiAgICAgICAgIG9yaWdpbmFsX2RpciA9IG9zLmdldGN3ZCgpCkBAIC02MTYsMTIg
KzYxOSwxMiBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogICAgICAgICBvcy5jaGRpcihv
cmlnaW5hbF9kaXIpCiAgICAgICAgIG91dHB1dCA9IHN0YXR1c19vdXRwdXQudXBwZXIoKQogICAg
ICAgICBpZiBvdXRwdXQuc3RhcnRzd2l0aCgnQScpIG9yIG91dHB1dC5zdGFydHN3aXRoKCdNJyk6
Ci0gICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgRmlsZSBhbHJlYWR5IGFkZGVkIHRvIFNWTjog
IiVzIicsIGZpbGVuYW1lKQorICAgICAgICAgICAgX2xvZy5pbmZvKCcgIEZpbGUgYWxyZWFkeSBh
ZGRlZCB0byBTVk46ICIlcyInLCBmaWxlbmFtZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAK
ICAgICAgICAgaWYgb3V0cHV0LmZpbmQoJ0lTIE5PVCBBIFdPUktJTkcgQ09QWScpID49IDA6Ci0g
ICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgRmlsZSBpcyBub3QgYSB3b3JraW5nIGNvcHksIGFk
ZCBpdHMgcGFyZW50OiAiJXMiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfZGly
KQorICAgICAgICAgICAgX2xvZy5pbmZvKCcgIEZpbGUgaXMgbm90IGEgd29ya2luZyBjb3B5LCBh
ZGQgaXRzIHBhcmVudDogIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X2RpcikK
ICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdm5fYWRkKHBhcmVudF9kaXIpCiAKICAgICAgICAg
b3MuY2hkaXIocGFyZW50X2RpcikKQEAgLTYyOSwxOSArNjMyLDE5IEBAIGNsYXNzIFJlYmFzZWxp
bmVyKG9iamVjdCk6CiAgICAgICAgIG9zLmNoZGlyKG9yaWdpbmFsX2RpcikKICAgICAgICAgb3V0
cHV0ID0gYWRkX291dHB1dC51cHBlcigpLnJzdHJpcCgpCiAgICAgICAgIGlmIG91dHB1dC5zdGFy
dHN3aXRoKCdBJykgYW5kIG91dHB1dC5maW5kKGJhc2VuYW1lLnVwcGVyKCkpID49IDA6Ci0gICAg
ICAgICAgICBsb2dnaW5nLmluZm8oJyAgQWRkZWQgbmV3IGZpbGU6ICIlcyInLCBmaWxlbmFtZSkK
KyAgICAgICAgICAgIF9sb2cuaW5mbygnICBBZGRlZCBuZXcgZmlsZTogIiVzIicsIGZpbGVuYW1l
KQogICAgICAgICAgICAgc2VsZi5fc3ZuX3Byb3Bfc2V0KGZpbGVuYW1lKQogICAgICAgICAgICAg
cmV0dXJuIFRydWUKIAogICAgICAgICBpZiAobm90IHN0YXR1c19vdXRwdXQpIGFuZCAoYWRkX291
dHB1dC51cHBlcigpLmZpbmQoCiAgICAgICAgICAgICAnQUxSRUFEWSBVTkRFUiBWRVJTSU9OIENP
TlRST0wnKSA+PSAwKToKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBGaWxlIGFscmVhZHkg
dW5kZXIgU1ZOIGFuZCBoYXMgbm8gY2hhbmdlOiAiJXMiJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWxlbmFtZSkKKyAgICAgICAgICAgIF9sb2cuaW5mbygnICBGaWxlIGFscmVhZHkgdW5k
ZXIgU1ZOIGFuZCBoYXMgbm8gY2hhbmdlOiAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICBm
aWxlbmFtZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICAgICAgbG9nZ2luZy53YXJu
KCcgIEZhaWxlZCB0byBhZGQgZmlsZSB0byBTVk46ICIlcyInLCBmaWxlbmFtZSkKLSAgICAgICAg
bG9nZ2luZy53YXJuKCcgIFN2biBzdGF0dXMgb3V0cHV0OiAiJXMiJywgc3RhdHVzX291dHB1dCkK
LSAgICAgICAgbG9nZ2luZy53YXJuKCcgIFN2biBhZGQgb3V0cHV0OiAiJXMiJywgYWRkX291dHB1
dCkKKyAgICAgICAgX2xvZy53YXJuKCcgIEZhaWxlZCB0byBhZGQgZmlsZSB0byBTVk46ICIlcyIn
LCBmaWxlbmFtZSkKKyAgICAgICAgX2xvZy53YXJuKCcgIFN2biBzdGF0dXMgb3V0cHV0OiAiJXMi
Jywgc3RhdHVzX291dHB1dCkKKyAgICAgICAgX2xvZy53YXJuKCcgIFN2biBhZGQgb3V0cHV0OiAi
JXMiJywgYWRkX291dHB1dCkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgX3N2bl9w
cm9wX3NldChzZWxmLCBmaWxlbmFtZSk6CkBAIC02NjcsNyArNjcwLDcgQEAgY2xhc3MgUmViYXNl
bGluZXIob2JqZWN0KToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNtZCA9IFsnc3ZuJywg
J3BzZXQnLCAnc3ZuOmVvbC1zdHlsZScsICdMRicsIGJhc2VuYW1lXQogCi0gICAgICAgIGxvZ2dp
bmcuZGVidWcoJyAgU2V0IHN2biBwcm9wOiAlcycsICcgJy5qb2luKGNtZCkpCisgICAgICAgIF9s
b2cuZGVidWcoJyAgU2V0IHN2biBwcm9wOiAlcycsICcgJy5qb2luKGNtZCkpCiAgICAgICAgIHJ1
bl9zaGVsbChjbWQsIEZhbHNlKQogICAgICAgICBvcy5jaGRpcihvcmlnaW5hbF9kaXIpCiAKQEAg
LTY4OSwxNCArNjkyLDE0IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLCBzZWxm
Ll9wbGF0Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J25ldycpCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShiYXNlbGluZV9mdWxscGF0aCwgbmV3X2Zp
bGUpCi0gICAgICAgIGxvZ2dpbmcuaW5mbygnICBIdG1sOiBjb3BpZWQgbmV3IGJhc2VsaW5lIGZp
bGUgZnJvbSAiJXMiIHRvICIlcyIuJywKLSAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lX2Z1
bGxwYXRoLCBuZXdfZmlsZSkKKyAgICAgICAgX2xvZy5pbmZvKCcgIEh0bWw6IGNvcGllZCBuZXcg
YmFzZWxpbmUgZmlsZSBmcm9tICIlcyIgdG8gIiVzIi4nLAorICAgICAgICAgICAgICAgICAgYmFz
ZWxpbmVfZnVsbHBhdGgsIG5ld19maWxlKQogCiAgICAgICAgICMgR2V0IHRoZSBvbGQgYmFzZWxp
bmUgZnJvbSBTVk4gYW5kIHNhdmUgdG8gdGhlIGh0bWwgZGlyZWN0b3J5LgogICAgICAgICBvdXRw
dXQgPSBydW5fc2hlbGwoWydzdm4nLCAnY2F0JywgJy1yJywgJ0JBU0UnLCBiYXNlbGluZV9mdWxs
cGF0aF0pCiAgICAgICAgIGlmIChub3Qgb3V0cHV0KSBvciAob3V0cHV0LnVwcGVyKCkucnN0cmlw
KCkuZW5kc3dpdGgoCiAgICAgICAgICAgICAnTk8gU1VDSCBGSUxFIE9SIERJUkVDVE9SWScpKToK
LSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICBObyBiYXNlIGZpbGU6ICIlcyInLCBiYXNlbGlu
ZV9mdWxscGF0aCkKKyAgICAgICAgICAgIF9sb2cuaW5mbygnICBObyBiYXNlIGZpbGU6ICIlcyIn
LCBiYXNlbGluZV9mdWxscGF0aCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBiYXNlX2Zp
bGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5fb3B0aW9ucy5odG1sX2RpcmVjdG9y
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5l
X2ZpbGVuYW1lLCBzZWxmLl9wbGF0Zm9ybSwKQEAgLTcwNCw4ICs3MDcsOCBAQCBjbGFzcyBSZWJh
c2VsaW5lcihvYmplY3QpOgogICAgICAgICBmID0gb3BlbihiYXNlX2ZpbGUsICd3YicpCiAgICAg
ICAgIGYud3JpdGUob3V0cHV0KQogICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgbG9nZ2luZy5p
bmZvKCcgIEh0bWw6IGNyZWF0ZWQgb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyIuJywKLSAgICAgICAg
ICAgICAgICAgICAgIGJhc2VfZmlsZSkKKyAgICAgICAgX2xvZy5pbmZvKCcgIEh0bWw6IGNyZWF0
ZWQgb2xkIGJhc2VsaW5lIGZpbGU6ICIlcyIuJywKKyAgICAgICAgICAgICAgICAgIGJhc2VfZmls
ZSkKIAogICAgICAgICAjIEdldCB0aGUgZGlmZiBiZXR3ZWVuIG9sZCBhbmQgbmV3IGJhc2VsaW5l
cyBhbmQgc2F2ZSB0byB0aGUgaHRtbCBkaXIuCiAgICAgICAgIGlmIGJhc2VsaW5lX2ZpbGVuYW1l
LnVwcGVyKCkuZW5kc3dpdGgoJy5UWFQnKToKQEAgLTcyMSw3ICs3MjQsNyBAQCBjbGFzcyBSZWJh
c2VsaW5lcihvYmplY3QpOgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXJl
bnRfZGlyID0gc3lzLnBhdGhbMF0gICMgdGVtcGRpciBpcyBub3Qgc2VjdXJlLgogICAgICAgICAg
ICAgYm9ndXNfZGlyID0gb3MucGF0aC5qb2luKHBhcmVudF9kaXIsICJ0ZW1wX3N2bl9jb25maWci
KQotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnICBIdG1sOiB0ZW1wIGNvbmZpZyBkaXI6ICIl
cyIuJywgYm9ndXNfZGlyKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBIdG1sOiB0ZW1wIGNv
bmZpZyBkaXI6ICIlcyIuJywgYm9ndXNfZGlyKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgu
ZXhpc3RzKGJvZ3VzX2Rpcik6CiAgICAgICAgICAgICAgICAgb3MubWtkaXIoYm9ndXNfZGlyKQog
ICAgICAgICAgICAgICAgIGRlbGV0ZV9ib2d1c19kaXIgPSBUcnVlCkBAIC03MzcsMTMgKzc0MCwx
MyBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGYgPSBvcGVu
KGRpZmZfZmlsZSwgJ3diJykKICAgICAgICAgICAgICAgICBmLndyaXRlKG91dHB1dCkKICAgICAg
ICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJyAgSHRt
bDogY3JlYXRlZCBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyIuJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlmZl9maWxlKQorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnICBIdG1s
OiBjcmVhdGVkIGJhc2VsaW5lIGRpZmYgZmlsZTogIiVzIi4nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaWZmX2ZpbGUpCiAKICAgICAgICAgICAgIGlmIGRlbGV0ZV9ib2d1c19kaXI6CiAg
ICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShib2d1c19kaXIsIFRydWUpCi0gICAgICAgICAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygnICBIdG1sOiByZW1vdmVkIHRlbXAgY29uZmlnIGRpcjogIiVz
Ii4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9ndXNfZGlyKQorICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoJyAgSHRtbDogcmVtb3ZlZCB0ZW1wIGNvbmZpZyBkaXI6ICIlcyIu
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZ3VzX2RpcikKIAogCiBjbGFzcyBIdG1s
R2VuZXJhdG9yKG9iamVjdCk6CkBAIC04MDMsNyArODA2LDcgQEAgY2xhc3MgSHRtbEdlbmVyYXRv
cihvYmplY3QpOgogICAgIGRlZiBnZW5lcmF0ZV9odG1sKHNlbGYpOgogICAgICAgICAiIiJHZW5l
cmF0ZSBodG1sIGZpbGUgZm9yIHJlYmFzZWxpbmluZyByZXN1bHQgY29tcGFyaXNvbi4iIiIKIAot
ICAgICAgICBsb2dnaW5nLmluZm8oJ0dlbmVyYXRpbmcgaHRtbCBmaWxlJykKKyAgICAgICAgX2xv
Zy5pbmZvKCdHZW5lcmF0aW5nIGh0bWwgZmlsZScpCiAKICAgICAgICAgaHRtbF9ib2R5ID0gJycK
ICAgICAgICAgaWYgbm90IHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKQEAgLTgxNCwyOSArODE3
LDI5IEBAIGNsYXNzIEh0bWxHZW5lcmF0b3Iob2JqZWN0KToKIAogICAgICAgICAgICAgdGVzdF9u
byA9IDEKICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgICAgIGxv
Z2dpbmcuaW5mbygnVGVzdCAlZDogJXMnLCB0ZXN0X25vLCB0ZXN0KQorICAgICAgICAgICAgICAg
IF9sb2cuaW5mbygnVGVzdCAlZDogJXMnLCB0ZXN0X25vLCB0ZXN0KQogICAgICAgICAgICAgICAg
IGh0bWxfYm9keSArPSBzZWxmLl9nZW5lcmF0ZV9odG1sX2Zvcl9vbmVfdGVzdCh0ZXN0KQogCiAg
ICAgICAgIGh0bWwgPSBzZWxmLkhUTUxfUkVCQVNFTElORSAlICh7J3RpbWUnOiB0aW1lLmFzY3Rp
bWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9keSc6IGh0
bWxfYm9keX0pCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoaHRtbCkKKyAgICAgICAgX2xvZy5kZWJ1
ZyhodG1sKQogCiAgICAgICAgIGYgPSBvcGVuKHNlbGYuX2h0bWxfZmlsZSwgJ3cnKQogICAgICAg
ICBmLndyaXRlKGh0bWwpCiAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIGxvZ2dpbmcuaW5m
bygnQmFzZWxpbmUgY29tcGFyaXNvbiBodG1sIGdlbmVyYXRlZCBhdCAiJXMiJywKLSAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2h0bWxfZmlsZSkKKyAgICAgICAgX2xvZy5pbmZvKCdCYXNlbGlu
ZSBjb21wYXJpc29uIGh0bWwgZ2VuZXJhdGVkIGF0ICIlcyInLAorICAgICAgICAgICAgICAgICAg
c2VsZi5faHRtbF9maWxlKQogCiAgICAgZGVmIHNob3dfaHRtbChzZWxmKToKICAgICAgICAgIiIi
TGF1bmNoIHRoZSByZWJhc2VsaW5pbmcgaHRtbCBpbiBicndvc2VyLiIiIgogCi0gICAgICAgIGxv
Z2dpbmcuaW5mbygnTGF1bmNoaW5nIGh0bWw6ICIlcyInLCBzZWxmLl9odG1sX2ZpbGUpCisgICAg
ICAgIF9sb2cuaW5mbygnTGF1bmNoaW5nIGh0bWw6ICIlcyInLCBzZWxmLl9odG1sX2ZpbGUpCiAK
ICAgICAgICAgaHRtbF91cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaShzZWxmLl9odG1s
X2ZpbGUpCiAgICAgICAgIHdlYmJyb3dzZXIub3BlbihodG1sX3VyaSwgMSkKIAotICAgICAgICBs
b2dnaW5nLmluZm8oJ0h0bWwgbGF1bmNoZWQuJykKKyAgICAgICAgX2xvZy5pbmZvKCdIdG1sIGxh
dW5jaGVkLicpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHNlbGYsIHRlc3Rf
YmFzZW5hbWUsIHN1ZmZpeCwgcGxhdGZvcm0pOgogICAgICAgICAiIiJHZW5lcmF0ZSBsaW5rcyBm
b3IgYmFzZWxpbmUgcmVzdWx0cyAob2xkLCBuZXcgYW5kIGRpZmYpLgpAQCAtODUxLDE4ICs4NTQs
MTggQEAgY2xhc3MgSHRtbEdlbmVyYXRvcihvYmplY3QpOgogICAgICAgICAiIiIKIAogICAgICAg
ICBiYXNlbGluZV9maWxlbmFtZSA9ICclcy1leHBlY3RlZCVzJyAlICh0ZXN0X2Jhc2VuYW1lLCBz
dWZmaXgpCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoJyAgICBiYXNlbGluZSBmaWxlbmFtZTogIiVz
IicsIGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgICAgICBfbG9nLmRlYnVnKCcgICAgYmFzZWxpbmUg
ZmlsZW5hbWU6ICIlcyInLCBiYXNlbGluZV9maWxlbmFtZSkKIAogICAgICAgICBuZXdfZmlsZSA9
IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9odG1sX2RpcmVjdG9yeSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBs
YXRmb3JtLCAnbmV3JykKLSAgICAgICAgbG9nZ2luZy5pbmZvKCcgICAgTmV3IGJhc2VsaW5lIGZp
bGU6ICIlcyInLCBuZXdfZmlsZSkKKyAgICAgICAgX2xvZy5pbmZvKCcgICAgTmV3IGJhc2VsaW5l
IGZpbGU6ICIlcyInLCBuZXdfZmlsZSkKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5l
d19maWxlKToKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnICAgIE5vIG5ldyBiYXNlbGluZSBm
aWxlOiAiJXMiJywgbmV3X2ZpbGUpCisgICAgICAgICAgICBfbG9nLmluZm8oJyAgICBObyBuZXcg
YmFzZWxpbmUgZmlsZTogIiVzIicsIG5ld19maWxlKQogICAgICAgICAgICAgcmV0dXJuICcnCiAK
ICAgICAgICAgb2xkX2ZpbGUgPSBnZXRfcmVzdWx0X2ZpbGVfZnVsbHBhdGgoc2VsZi5faHRtbF9k
aXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2VsaW5lX2ZpbGVuYW1lLCBwbGF0Zm9ybSwgJ29sZCcpCi0gICAgICAgIGxvZ2dpbmcuaW5mbygn
ICAgIE9sZCBiYXNlbGluZSBmaWxlOiAiJXMiJywgb2xkX2ZpbGUpCisgICAgICAgIF9sb2cuaW5m
bygnICAgIE9sZCBiYXNlbGluZSBmaWxlOiAiJXMiJywgb2xkX2ZpbGUpCiAgICAgICAgIGlmIHN1
ZmZpeCA9PSAnLnBuZyc6CiAgICAgICAgICAgICBodG1sX3RkX2xpbmsgPSBzZWxmLkhUTUxfVERf
TElOS19JTUcKICAgICAgICAgZWxzZToKQEAgLTg3NCw3ICs4NzcsNyBAQCBjbGFzcyBIdG1sR2Vu
ZXJhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgJ3VyaSc6IHNlbGYuX3BvcnQuZmlsZW5h
bWVfdG9fdXJpKG9sZF9maWxlKSwKICAgICAgICAgICAgICAgICAnbmFtZSc6IGJhc2VsaW5lX2Zp
bGVuYW1lfQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCcgICAgTm8g
b2xkIGJhc2VsaW5lIGZpbGU6ICIlcyInLCBvbGRfZmlsZSkKKyAgICAgICAgICAgIF9sb2cuaW5m
bygnICAgIE5vIG9sZCBiYXNlbGluZSBmaWxlOiAiJXMiJywgb2xkX2ZpbGUpCiAgICAgICAgICAg
ICBsaW5rcyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgJycKIAogICAgICAgICBsaW5rcyArPSBo
dG1sX3RkX2xpbmsgJSB7J3VyaSc6IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKG5ld19maWxl
KSwKQEAgLTg4MywxMiArODg2LDEyIEBAIGNsYXNzIEh0bWxHZW5lcmF0b3Iob2JqZWN0KToKICAg
ICAgICAgZGlmZl9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2h0bWxfZGly
ZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZWxpbmVfZmlsZW5hbWUsIHBsYXRmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2RpZmYnKQotICAgICAgICBsb2dnaW5nLmluZm8oJyAgICBCYXNlbGlu
ZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZmX2ZpbGUpCisgICAgICAgIF9sb2cuaW5mbygnICAgIEJh
c2VsaW5lIGRpZmYgZmlsZTogIiVzIicsIGRpZmZfZmlsZSkKICAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMoZGlmZl9maWxlKToKICAgICAgICAgICAgIGxpbmtzICs9IGh0bWxfdGRfbGluayAlIHsn
dXJpJzogc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkoCiAgICAgICAgICAgICAgICAgZGlmZl9m
aWxlKSwgJ25hbWUnOiAnRGlmZid9CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dnaW5n
LmluZm8oJyAgICBObyBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZmX2ZpbGUpCisgICAg
ICAgICAgICBfbG9nLmluZm8oJyAgICBObyBiYXNlbGluZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZm
X2ZpbGUpCiAgICAgICAgICAgICBsaW5rcyArPSBzZWxmLkhUTUxfVERfTk9MSU5LICUgJycKIAog
ICAgICAgICByZXR1cm4gbGlua3MKQEAgLTkwNCwxMyArOTA3LDEzIEBAIGNsYXNzIEh0bWxHZW5l
cmF0b3Iob2JqZWN0KToKICAgICAgICAgIiIiCiAKICAgICAgICAgdGVzdF9iYXNlbmFtZSA9IG9z
LnBhdGguYmFzZW5hbWUob3MucGF0aC5zcGxpdGV4dCh0ZXN0KVswXSkKLSAgICAgICAgbG9nZ2lu
Zy5pbmZvKCcgIGJhc2VuYW1lOiAiJXMiJywgdGVzdF9iYXNlbmFtZSkKKyAgICAgICAgX2xvZy5p
bmZvKCcgIGJhc2VuYW1lOiAiJXMiJywgdGVzdF9iYXNlbmFtZSkKICAgICAgICAgcm93cyA9IFtd
CiAgICAgICAgIGZvciBzdWZmaXggaW4gQkFTRUxJTkVfU1VGRklYRVM6CiAgICAgICAgICAgICBp
ZiBzdWZmaXggPT0gJy5jaGVja3N1bSc6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAg
ICAgICAgICAgbG9nZ2luZy5pbmZvKCcgIENoZWNraW5nICVzIGZpbGVzJywgc3VmZml4KQorICAg
ICAgICAgICAgX2xvZy5pbmZvKCcgIENoZWNraW5nICVzIGZpbGVzJywgc3VmZml4KQogICAgICAg
ICAgICAgZm9yIHBsYXRmb3JtIGluIHNlbGYuX3BsYXRmb3JtczoKICAgICAgICAgICAgICAgICBs
aW5rcyA9IHNlbGYuX2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHRlc3RfYmFzZW5hbWUsIHN1ZmZp
eCwKICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCkBAIC05MTksNyArOTIyLDcgQEAgY2xh
c3MgSHRtbEdlbmVyYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4
KQogICAgICAgICAgICAgICAgICAgICByb3cgKz0gc2VsZi5IVE1MX1REX05PTElOSyAlIHBsYXRm
b3JtCiAgICAgICAgICAgICAgICAgICAgIHJvdyArPSBsaW5rcwotICAgICAgICAgICAgICAgICAg
ICBsb2dnaW5nLmRlYnVnKCcgICAgaHRtbCByb3c6ICVzJywgcm93KQorICAgICAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCcgICAgaHRtbCByb3c6ICVzJywgcm93KQogCiAgICAgICAgICAgICAg
ICAgICAgIHJvd3MuYXBwZW5kKHNlbGYuSFRNTF9UUiAlIHJvdykKIApAQCAtOTI5LDcgKzkzMiw3
IEBAIGNsYXNzIEh0bWxHZW5lcmF0b3Iob2JqZWN0KToKICAgICAgICAgICAgICAgICB0ZXN0KQog
ICAgICAgICAgICAgaHRtbCArPSBzZWxmLkhUTUxfVEVTVF9ERVRBSUwgJSAnICcuam9pbihyb3dz
KQogCi0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCcgICAgaHRtbCBmb3IgdGVzdDogJXMnLCBo
dG1sKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAgIGh0bWwgZm9yIHRlc3Q6ICVzJywgaHRt
bCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLkhUTUxfVEFCTEVfVEVTVCAlIGh0bWwKIAogICAg
ICAgICByZXR1cm4gJycKQEAgLTk5NiwxMyArOTk5LDEzIEBAIGRlZiBtYWluKCk6CiAKICAgICAj
IFZlcmlmeSAncGxhdGZvcm1zJyBvcHRpb24gaXMgdmFsaWQKICAgICBpZiBub3Qgb3B0aW9ucy5w
bGF0Zm9ybXM6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0ludmFsaWQgInBsYXRmb3JtcyIgb3B0
aW9uLiAtLXBsYXRmb3JtcyBtdXN0IGJlICcKLSAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lm
aWVkIGluIG9yZGVyIHRvIHJlYmFzZWxpbmUuJykKKyAgICAgICAgX2xvZy5lcnJvcignSW52YWxp
ZCAicGxhdGZvcm1zIiBvcHRpb24uIC0tcGxhdGZvcm1zIG11c3QgYmUgJworICAgICAgICAgICAg
ICAgICAgICdzcGVjaWZpZWQgaW4gb3JkZXIgdG8gcmViYXNlbGluZS4nKQogICAgICAgICBzeXMu
ZXhpdCgxKQogICAgIHBsYXRmb3JtcyA9IFtwLnN0cmlwKCkubG93ZXIoKSBmb3IgcCBpbiBvcHRp
b25zLnBsYXRmb3Jtcy5zcGxpdCgnLCcpXQogICAgIGZvciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6
CiAgICAgICAgIGlmIG5vdCBwbGF0Zm9ybSBpbiBSRUJBU0VMSU5FX1BMQVRGT1JNX09SREVSOgot
ICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignSW52YWxpZCBwbGF0Zm9ybTogIiVzIicgJSAocGxh
dGZvcm0pKQorICAgICAgICAgICAgX2xvZy5lcnJvcignSW52YWxpZCBwbGF0Zm9ybTogIiVzIicg
JSAocGxhdGZvcm0pKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICMgQWRqdXN0IHRo
ZSBwbGF0Zm9ybSBvcmRlciBzbyByZWJhc2VsaW5lIHRvb2wgaXMgcnVubmluZyBhdCB0aGUgb3Jk
ZXIgb2YKQEAgLTEwMjEsNyArMTAyNCw3IEBAIGRlZiBtYWluKCk6CiAgICAgZm9yIHBsYXRmb3Jt
IGluIHJlYmFzZWxpbmVfcGxhdGZvcm1zOgogICAgICAgICByZWJhc2VsaW5lciA9IFJlYmFzZWxp
bmVyKHBvcnRfb2JqLCBwbGF0Zm9ybSwgb3B0aW9ucykKIAotICAgICAgICBsb2dnaW5nLmluZm8o
JycpCisgICAgICAgIF9sb2cuaW5mbygnJykKICAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ1Jl
YmFzZWxpbmUgc3RhcnRlZCcsIHBsYXRmb3JtKQogICAgICAgICBpZiByZWJhc2VsaW5lci5ydW4o
YmFja3VwKToKICAgICAgICAgICAgICMgT25seSBuZWVkIHRvIGJhY2t1cCBvbmUgb3JpZ2luYWwg
Y29weSBvZiB0ZXN0IGV4cGVjdGF0aW9uIGZpbGUuCkBAIC0xMDMyLDcgKzEwMzUsNyBAQCBkZWYg
bWFpbigpOgogCiAgICAgICAgIHJlYmFzZWxpbmluZ190ZXN0cyB8PSBzZXQocmViYXNlbGluZXIu
Z2V0X3JlYmFzZWxpbmluZ190ZXN0cygpKQogCi0gICAgbG9nZ2luZy5pbmZvKCcnKQorICAgIF9s
b2cuaW5mbygnJykKICAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluaW5nIHJlc3VsdCBj
b21wYXJpc29uIHN0YXJ0ZWQnLCBOb25lKQogICAgIGh0bWxfZ2VuZXJhdG9yID0gSHRtbEdlbmVy
YXRvcihwb3J0X29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cywKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDI5YmNmYzcuLmIyYzUyZTMgMTAwNzU1
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNzMsNiArNzMsOCBAQCBmcm9tIHRlc3RfdHlwZXMg
aW1wb3J0IHRleHRfZGlmZgogCiBpbXBvcnQgcG9ydAogCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5ydW5fd2Via2l0X3Rlc3RzIikKKwogIyBJbmRpY2F0
ZXMgdGhhdCB3ZSB3YW50IGRldGFpbGVkIHByb2dyZXNzIHVwZGF0ZXMgaW4gdGhlIG91dHB1dCAo
cHJpbnRzCiAjIGRpcmVjdG9yeS1ieS1kaXJlY3RvcnkgZmVlZGJhY2spLgogTE9HX0RFVEFJTEVE
X1BST0dSRVNTID0gJ2RldGFpbGVkLXByb2dyZXNzJwpAQCAtMTk4LDEzICsyMDAsMTMgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X251bWJlciA9IDAKIAog
ICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICBsb2dnaW5nLmRlYnVnKCJmbHVzaGluZyBz
dGRvdXQiKQorICAgICAgICBfbG9nLmRlYnVnKCJmbHVzaGluZyBzdGRvdXQiKQogICAgICAgICBz
eXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiZmx1c2hpbmcgc3RkZXJy
IikKKyAgICAgICAgX2xvZy5kZWJ1ZygiZmx1c2hpbmcgc3RkZXJyIikKICAgICAgICAgc3lzLnN0
ZGVyci5mbHVzaCgpCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoInN0b3BwaW5nIGh0dHAgc2VydmVy
IikKKyAgICAgICAgX2xvZy5kZWJ1Zygic3RvcHBpbmcgaHR0cCBzZXJ2ZXIiKQogICAgICAgICBz
ZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICBsb2dnaW5nLmRlYnVnKCJzdG9w
cGluZyB3ZWJzb2NrZXQgc2VydmVyIikKKyAgICAgICAgX2xvZy5kZWJ1Zygic3RvcHBpbmcgd2Vi
c29ja2V0IHNlcnZlciIpCiAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVy
KCkKIAogICAgIGRlZiBnYXRoZXJfZmlsZV9wYXRocyhzZWxmLCBwYXRocyk6CkBAIC0yNzQsNyAr
Mjc2LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICB0ZXN0X3NpemUgPSBp
bnQoY2h1bmtfbGVuKQogICAgICAgICAgICAgICAgIGFzc2VydCh0ZXN0X3NpemUgPiAwKQogICAg
ICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoImludmFs
aWQgY2h1bmsgJyVzJyIgJSBjaHVua192YWx1ZSkKKyAgICAgICAgICAgICAgICBfbG9nLmNyaXRp
Y2FsKCJpbnZhbGlkIGNodW5rICclcyciICUgY2h1bmtfdmFsdWUpCiAgICAgICAgICAgICAgICAg
c3lzLmV4aXQoMSkKIAogICAgICAgICAgICAgIyBHZXQgdGhlIG51bWJlciBvZiB0ZXN0cwpAQCAt
NjMwLDcgKzYzMiw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHJldHJ5X3N1bW1hcnkg
PSByZXN1bHRfc3VtbWFyeQogICAgICAgICB3aGlsZSAocmV0cmllcyA8IHNlbGYuTlVNX1JFVFJZ
X09OX1VORVhQRUNURURfRkFJTFVSRSBhbmQKICAgICAgICAgICAgICAgIGxlbihmYWlsdXJlcykp
OgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUmV0cnlpbmcgJWQgdW5leHBlY3RlZCBmYWls
dXJlKHMpIiAlIGxlbihmYWlsdXJlcykpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCJSZXRyeWlu
ZyAlZCB1bmV4cGVjdGVkIGZhaWx1cmUocykiICUgbGVuKGZhaWx1cmVzKSkKICAgICAgICAgICAg
IHJldHJpZXMgKz0gMQogICAgICAgICAgICAgcmV0cnlfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnko
c2VsZi5fZXhwZWN0YXRpb25zLCBmYWlsdXJlcy5rZXlzKCkpCiAgICAgICAgICAgICBzZWxmLl9y
dW5fdGVzdHMoZmFpbHVyZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5KQpAQCAtODY4LDggKzg3MCw4
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6
IGxpc3Qgb2YgdGVzdCB0aW1lcyAodXNlZCBieSB0aGUgZmxha2luZXNzCiAgICAgICAgICAgICBk
YXNoYm9hcmQpLgogICAgICAgICAiIiIKLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiV3JpdGluZyBK
U09OIGZpbGVzIGluICVzLiIgJQotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIF9sb2cuZGVidWcoIldyaXRpbmcgSlNPTiBmaWxl
cyBpbiAlcy4iICUKKyAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5KQogICAgICAgICB1bmV4cGVjdGVkX2ZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihzZWxm
Ll9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAogICAgICAgICAgICAgInVuZXhwZWN0ZWRfcmVz
dWx0cy5qc29uIiksICJ3IikKICAgICAgICAgdW5leHBlY3RlZF9maWxlLndyaXRlKHNpbXBsZWpz
b24uZHVtcHModW5leHBlY3RlZF9yZXN1bHRzLApAQCAtODkxLDcgKzg5Myw3IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgICAgICBCVUlMREVSX0JBU0VfVVJMLCBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncywKICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnks
IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKIAotICAgICAgICBsb2dnaW5nLmRlYnVnKCJGaW5pc2hl
ZCB3cml0aW5nIEpTT04gZmlsZXMuIikKKyAgICAgICAgX2xvZy5kZWJ1ZygiRmluaXNoZWQgd3Jp
dGluZyBKU09OIGZpbGVzLiIpCiAKICAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2Zf
dHlwZShzZWxmLCB3cml0ZSwgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlX3N0cik6CkBAIC0xMzQz
LDcgKzEzNDUsNyBAQCBkZWYgcmVhZF90ZXN0X2ZpbGVzKGZpbGVzKToKIAogCiBkZWYgY3JlYXRl
X2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsIGxvZ19vcHRpb24pOgotICAgICIiIlJldHVybnMgYSB3
cml0ZSgpIGZ1bmN0aW9uIHRoYXQgd2lsbCB3cml0ZSB0aGUgc3RyaW5nIHRvIGxvZ2dpbmcuaW5m
bygpCisgICAgIiIiUmV0dXJucyBhIHdyaXRlKCkgZnVuY3Rpb24gdGhhdCB3aWxsIHdyaXRlIHRo
ZSBzdHJpbmcgdG8gX2xvZy5pbmZvKCkKICAgICBpZiBjb21wIHdhcyBzcGVjaWZpZWQgaW4gLS1s
b2cgb3IgaWYgLS12ZXJib3NlIGlzIHRydWUuIE90aGVyd2lzZSB0aGUKICAgICBtZXNzYWdlIGlz
IGRyb3BwZWQuCiAKQEAgLTEzNTMsNyArMTM1NSw3IEBAIGRlZiBjcmVhdGVfbG9nZ2luZ193cml0
ZXIob3B0aW9ucywgbG9nX29wdGlvbik6CiAgICAgICAgICAgdG8gYmUgbG9nZ2VkIChlLmcuLCAn
YWN0dWFsJyBvciAnZXhwZWN0ZWQnKQogICAgICIiIgogICAgIGlmIG9wdGlvbnMudmVyYm9zZSBv
ciBsb2dfb3B0aW9uIGluIG9wdGlvbnMubG9nLnNwbGl0KCIsIik6Ci0gICAgICAgIHJldHVybiBs
b2dnaW5nLmluZm8KKyAgICAgICAgcmV0dXJuIF9sb2cuaW5mbwogICAgIHJldHVybiBsYW1iZGEg
c3RyOiAxCiAKIApAQCAtMTM3OSw3ICsxMzgxLDYgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncyk6
CiAgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKICAgICBsb2dnaW5nLmJhc2ljQ29u
ZmlnKGxldmVsPWxvZ19sZXZlbCwgZm9ybWF0PWxvZ19mbXQsIGRhdGVmbXQ9bG9nX2RhdGVmbXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW09bWV0ZXIpCi0KICAgICBpZiBub3Qgb3B0
aW9ucy50YXJnZXQ6CiAgICAgICAgIGlmIG9wdGlvbnMuZGVidWc6CiAgICAgICAgICAgICBvcHRp
b25zLnRhcmdldCA9ICJEZWJ1ZyIKQEAgLTE0OTQsNyArMTQ5NSw3IEBAIGRlZiBtYWluKG9wdGlv
bnMsIGFyZ3MpOgogICAgIGlmIG5vdCBvcHRpb25zLm5vc3RhcnRfaGVscGVyOgogICAgICAgICBw
b3J0X29iai5zdG9wX2hlbHBlcigpCiAKLSAgICBsb2dnaW5nLmRlYnVnKCJFeGl0IHN0YXR1czog
JWQiICUgaGFzX25ld19mYWlsdXJlcykKKyAgICBfbG9nLmRlYnVnKCJFeGl0IHN0YXR1czogJWQi
ICUgaGFzX25ld19mYWlsdXJlcykKICAgICBzeXMuZXhpdChoYXNfbmV3X2ZhaWx1cmVzKQogCiAK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weQppbmRleCA4OWRk
MTkyLi5mMjMyZDIzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHkKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9k
aWZmLnB5CkBAIC0zOSw2ICszOSw4IEBAIGltcG9ydCBzaHV0aWwKIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBl
X2Jhc2UKIAorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMu
dGVzdF90eXBlcy5mdXp6eV9pbWFnZV9kaWZmIikKKwogCiBjbGFzcyBGdXp6eUltYWdlRGlmZih0
ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogCkBAIC01NSw3ICs1Nyw3IEBAIGNsYXNzIEZ1
enp5SW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgIGV4cGVj
dGVkX3BuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy5w
bmcnKQogCiAgICAgICAgIGlmIHRlc3RfYXJncy5zaG93X3NvdXJjZXM6Ci0gICAgICAgICAgICBs
b2dnaW5nLmRlYnVnKCdVc2luZyAlcycgJSBleHBlY3RlZF9wbmdfZmlsZSkKKyAgICAgICAgICAg
IF9sb2cuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxlKQogCiAgICAgICAgICMg
QWxzbyByZXBvcnQgYSBtaXNzaW5nIGV4cGVjdGVkIFBORyBmaWxlLgogICAgICAgICBpZiBub3Qg
b3MucGF0aC5pc2ZpbGUoZXhwZWN0ZWRfcG5nX2ZpbGUpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9p
bWFnZV9kaWZmLnB5CmluZGV4IDFkZjdjYTMuLjE5NzIyMDkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL2ltYWdlX2RpZmYucHkKQEAgLTQ2LDYgKzQ2LDggQEAgZnJvbSB0ZXN0X3R5cGVzIGltcG9y
dCB0ZXN0X3R5cGVfYmFzZQogX2NvbXBhcmVfYXZhaWxhYmxlID0gVHJ1ZQogX2NvbXBhcmVfbXNn
X3ByaW50ZWQgPSBGYWxzZQogCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5Lmxh
eW91dF90ZXN0cy50ZXN0X3R5cGVzLmltYWdlX2RpZmYiKQorCiAKIGNsYXNzIEltYWdlRGlmZih0
ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogCkBAIC0xMzMsOCArMTM1LDggQEAgY2xhc3Mg
SW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgIGV4cGVjdGVk
X3BuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy5wbmcn
KQogCiAgICAgICAgIGlmIHRlc3RfYXJncy5zaG93X3NvdXJjZXM6Ci0gICAgICAgICAgICBsb2dn
aW5nLmRlYnVnKCdVc2luZyAlcycgJSBleHBlY3RlZF9oYXNoX2ZpbGUpCi0gICAgICAgICAgICBs
b2dnaW5nLmRlYnVnKCdVc2luZyAlcycgJSBleHBlY3RlZF9wbmdfZmlsZSkKKyAgICAgICAgICAg
IF9sb2cuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX2hhc2hfZmlsZSkKKyAgICAgICAgICAg
IF9sb2cuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxlKQogCiAgICAgICAgIHRy
eToKICAgICAgICAgICAgIGV4cGVjdGVkX2hhc2ggPSBvcGVuKGV4cGVjdGVkX2hhc2hfZmlsZSwg
InIiKS5yZWFkKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5Cmlu
ZGV4IGVmYTJlOGMuLjYwZjUwYTMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5
cGVfYmFzZS5weQpAQCAtMzcsNiArMzcsOCBAQCBpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgb3MucGF0aAogCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5Lmxh
eW91dF90ZXN0cy50ZXN0X3R5cGVzLnRlc3RfdHlwZV9iYXNlIikKKwogCiBjbGFzcyBUZXN0QXJn
dW1lbnRzKG9iamVjdCk6CiAgICAgIiIiU3RydWN0LWxpa2Ugd3JhcHBlciBmb3IgYWRkaXRpb25h
bCBhcmd1bWVudHMgbmVlZGVkIGJ5CkBAIC0xMDksNyArMTExLDcgQEAgY2xhc3MgVGVzdFR5cGVC
YXNlKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShv
dXRwdXRfZGlyKQogICAgICAgICBvdXRwdXRfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGly
LCBvdXRwdXRfZmlsZSkKLSAgICAgICAgbG9nZ2luZy5kZWJ1Zygnd3JpdGluZyBuZXcgYmFzZWxp
bmUgdG8gIiVzIicgJSAob3V0cHV0X3BhdGgpKQorICAgICAgICBfbG9nLmRlYnVnKCd3cml0aW5n
IG5ldyBiYXNlbGluZSB0byAiJXMiJyAlIChvdXRwdXRfcGF0aCkpCiAgICAgICAgIG9wZW4ob3V0
cHV0X3BhdGgsICJ3YiIpLndyaXRlKGRhdGEpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYsIGZpbGVuYW1lLCBtb2RpZmllcik6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5
CmluZGV4IDU0YjMzMmIuLjBlYWJjNWMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZm
LnB5CkBAIC00MCw2ICs0MCw4IEBAIGltcG9ydCBvcy5wYXRoCiBmcm9tIGxheW91dF9wYWNrYWdl
IGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9i
YXNlCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnRl
c3RfdHlwZXMudGV4dF9kaWZmIikKKwogCiBkZWYgaXNfcmVuZGVyX3RyZWVfZHVtcChkYXRhKToK
ICAgICAiIiJSZXR1cm5zIHRydWUgaWYgZGF0YSBhcHBlYXJzIHRvIGJlIGEgcmVuZGVyIHRyZWUg
ZHVtcCBhcyBvcHBvc2VkIHRvIGEKQEAgLTYzLDcgKzY1LDcgQEAgY2xhc3MgVGVzdFRleHREaWZm
KHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgICMgUmVhZCB0aGUgcG9ydC1z
cGVjaWZpYyBleHBlY3RlZCB0ZXh0LgogICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYu
X3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykKICAgICAgICAgaWYgc2hv
d19zb3VyY2VzOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgJXMnICUgZXhwZWN0
ZWRfZmlsZW5hbWUpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdVc2luZyAlcycgJSBleHBlY3Rl
ZF9maWxlbmFtZSkKIAogICAgICAgICByZXR1cm4gc2VsZi5nZXRfbm9ybWFsaXplZF90ZXh0KGV4
cGVjdGVkX2ZpbGVuYW1lKQogCg==
</data>
<flag name="review"
          id="32580"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="32581"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>