<?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>46776</bug_id>
          
          <creation_ts>2010-09-28 19:24:57 -0700</creation_ts>
          <short_desc>new-run-webkit-tests - clean up port/factory, add abstraction for the source tree</short_desc>
          <delta_ts>2010-10-11 13:58:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rgabor</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>286705</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-28 19:24:57 -0700</bug_when>
    <thetext>new-run-webkit-tests - clean up port/factory, add abstraction for the sourc e tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286708</commentid>
    <comment_count>1</comment_count>
      <attachid>69154</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-28 19:34:06 -0700</bug_when>
    <thetext>Created attachment 69154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286714</commentid>
    <comment_count>2</comment_count>
      <attachid>69156</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-28 19:58:29 -0700</bug_when>
    <thetext>Created attachment 69156
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286715</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-09-28 20:00:29 -0700</bug_when>
    <thetext>Note that this patch contains the &quot;better&quot; fixes for the default configuration bug listed in bug 46278 (that had patches landed in r68268 and r68365.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289045</commentid>
    <comment_count>4</comment_count>
      <attachid>69156</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-04 12:00:53 -0700</bug_when>
    <thetext>Comment on attachment 69156
Patch

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

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/options.py:38
&gt; +    def __init__(self, **kwargs):

Is it possible to subclass the options class in optparse?  What&apos;s wrong with just keeping a reference to the original optparse result?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289047</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-04 12:01:42 -0700</bug_when>
    <thetext>Hit the wrong button:

I was going to add:
This patch is large and hard to review.  Can you put the PortOptions changes into a stand alone patch first?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289131</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-04 14:11:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 69156 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69156&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/options.py:38
&gt; &gt; +    def __init__(self, **kwargs):
&gt; 
&gt; Is it possible to subclass the options class in optparse?  What&apos;s wrong with just keeping a reference to the original optparse result?

1) I wanted a generic &quot;options&quot; class that didn&apos;t depend on the optparse.Values definition specifically, but provided similar functionality for readers. It&apos;s almost like a mock fixture, while was still easy to construct. There also didn&apos;t seem to be any real value to subclassing that class. 

That said, I&apos;m not all that familiar with the optparse.Values class, so maybe it&apos;s a good idea. I&apos;ll take another look.

2) I&apos;m not sure I fully understand your second question (just keeping a reference to the original result), but if I do understand it, in the normal case (run_webkit_tests), we do keep the reference. All of this other code is for cases where we didn&apos;t actually call optparse to get a Values object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289132</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-04 14:12:21 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Hit the wrong button:
&gt; 
&gt; I was going to add:
&gt; This patch is large and hard to review.  Can you put the PortOptions changes into a stand alone patch first?

I was afraid this might be the case. I will see if I can break it up into some more manageable chunks. Thanks for giving it a shot first!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289134</commentid>
    <comment_count>8</comment_count>
      <attachid>69156</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-10-04 14:14:07 -0700</bug_when>
    <thetext>Comment on attachment 69156
Patch

r- per comment #7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289155</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-04 14:42:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; 2) I&apos;m not sure I fully understand your second question (just keeping a reference to the original result), but if I do understand it, in the normal case (run_webkit_tests), we do keep the reference. All of this other code is for cases where we didn&apos;t actually call optparse to get a Values object.

Does that mean PortOptions is only used in unittests?  Should it be called MockOptions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289158</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-04 14:46:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #6)
&gt; &gt; 2) I&apos;m not sure I fully understand your second question (just keeping a reference to the original result), but if I do understand it, in the normal case (run_webkit_tests), we do keep the reference. All of this other code is for cases where we didn&apos;t actually call optparse to get a Values object.
&gt; 
&gt; Does that mean PortOptions is only used in unittests?  

Well, sort of. The &quot;options&quot; argument is part of the Port public interface. Python doesn&apos;t have a good way AFAIK to express the concept of  &quot;some object implementing interface X&quot; for me to indicate this.

&gt; Should it be called MockOptions?

As per above, I&apos;m not 100% comfortable with this. I&apos;d be happy for the implementation to be called MockOptions, but I need some name for the actual interface object. Maybe optparse.Values and MockValues would be the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292638</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-11 13:58:05 -0700</bug_when>
    <thetext>yeesh, getting back to this after two weeks, even I can&apos;t follow this patch. Gives me a whole new level of sympathy for trying to follow large patches. 

Closing this; I&apos;ll break it up into multiple separate changes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69154</attachid>
            <date>2010-09-28 19:34:06 -0700</date>
            <delta_ts>2010-09-28 19:58:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46776-20100928193405.patch</filename>
            <type>text/plain</type>
            <size>94959</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3OWVkMWU5MWRiZTNhMTZhNWFiNTE1YzVjYWYzZmM5YTgyM2VlMjhhLi5iYmYwNTdm
YjM1YjRkMjIwM2I4NWRmYjAzNzU0N2Y1N2ViMGI4MjQ5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAK
KzIwMTAtMDktMjggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQt
dGVzdHM6IHRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRoZSB3YXkgd2UgY29uc3RydWN0CisgICAgICAg
IFBvcnQgb2JqZWN0cywgYW5kIGludHJvZHVjZXMgYSBUcmVlIGFic3RyYWN0aW9uIHRvIGhpZGUg
dGhlIHNvdXJjZS10cmVlCisgICAgICAgIGRlcGVuZGVuY2llcyB0aGF0IE5SV1QgaGFzLgorCisg
ICAgICAgIFRoZSBUcmVlIGFic3RyYWN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIHNjbSBhbmQgY2hl
Y2tvdXQgbW9kdWxlcywKKyAgICAgICAgYnV0IGRvZXNuJ3QgcmVxdWlyZSBhbiBhY3R1YWwgc291
cmNlIGNvZGUgY2hlY2tvdXQgKHNpbmNlIHdlIG1heQorICAgICAgICBub3QgYWx3YXlzIGhhdmUg
cmVwb3NpdG9yaWVzIHdoZXJlIHdlIGFyZSBydW5uaW5nIHRlc3RzKS4gSW4gYWRkaXRpb24sCisg
ICAgICAgIHRoZSBUcmVlIG9iamVjdCBoYW5kbGVzIHZhbHVlcyBkZXRlcm1pbmVkIGJ5IHRoaW5n
cyBkeW5hbWljYWxseSBzZXQKKyAgICAgICAgaW4gdGhlIHRyZWUsIGxpa2UgdGhlIGRlZmF1bHRf
Y29uZmlndXJhdGlvbiBzZXQgd2l0aAorICAgICAgICBzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24g
YW5kIHRoZSBidWlsZCBkaXJlY3Rvcmllcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIGEgY29t
cGxldGVseSBpbi1tZW1vcnkgdmVyc2lvbiBjYWxsZWQgTW9ja1RyZWUgd2hpY2gKKyAgICAgICAg
Y2FuIGJlIHVzZWQgZm9yIHVuaXQgdGVzdGluZyBhbmQgb3RoZXIgc2l0dWF0aW9ucy4gQSBmb2xs
b3ctb24gcGF0Y2gKKyAgICAgICAgd2lsbCB1c2UgdGhpcyB0byByZXdyaXRlIHRoZSBwb3J0L3Rl
c3QucHkgdW5pdCB0ZXN0cyB0byBiZSBjbGVhcmVyIHRvCisgICAgICAgIG1haW50YWluIGFuZCB0
byByZWR1Y2UgZHVwbGljYXRlZCB0ZXN0IGNvZGUuCisKKyAgICAgICAgVGhlIGZhY3RvcnkgbWV0
aG9kcyBhcmUgY29uc3RydWN0b3JzIGFyZSBhbGwgY2hhbmdlZCB0byBjb25zaXN0ZW50bHkKKyAg
ICAgICAgdXNlIG9ubHkga2V5d29yZCBhcmd1bWVudHMgYW5kIHRvIHRyZWF0IGRlZmF1bHRfY29u
ZmlndXJhdGlvbiBhbmQKKyAgICAgICAgcG9ydCBuYW1lcyBjb25zaXN0ZW50bHkuIEEgZm9sbG93
LW9uIHBhdGNoIHdpbGwgdXNlIHRoaXMgdG8KKyAgICAgICAgc2ltcGxpZnkgdGhlIGZhY3Rvcnkg
bG9naWMgYW5kIGltcGxlbWVudCBwb3J0LmdldF9hbGxfcG9ydHMoKQorICAgICAgICBjb3JyZWN0
bHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBQb3J0T3B0aW9ucygp
IGNsYXNzIHdoaWNoIGhhcyB0aGUgc2FtZQorICAgICAgICBzZW1hbnRpY3MgYXMgdGhlIG9wdGlv
bnMgY2xhc3MgZnJvbSBvcHRwYXJzZSwgd2hpY2ggYWxsb3dzIHVzIHRvIGRvCisgICAgICAgIGFs
d2F5cyBoYXZlIGFuIG9wdGlvbnMgb2JqZWN0IGhhbmdpbmcgb2ZmIG9mIHRoZSBwb3J0IG9iamVj
dCB3aXRob3V0CisgICAgICAgIGludHJvZHVjaW5nIGEgZGVwZW5kZW5jeSBvbiBvcHRwYXJzZS4K
KworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCBhIGxvdCBvZiBib2lsZXJwbGF0ZSB0ZXN0
aW5nIGNvZGUgYW5kIHNjYWZmb2xkaW5nLAorICAgICAgICBpbmNyZWFzZXMgdGVzdCBjb3ZlcmFn
ZSwgYW5kIHNob3VsZCBlYXNlIG1haW50ZW5hbmNlIGRvd24gdGhlIGxpbmUuCisgCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Njc3NgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1X3Vu
aXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fbGludXgucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZS5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWVf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tYWNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9vcHRpb25zLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L29wdGlvbnNfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0X2ZpbGVzX3VuaXR0ZXN0
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdHJlZS5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90
cmVlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3dpbl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5Ogor
CiAyMDEwLTA5LTI0ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDk3MGRlNjBj
YzYxYzBmZDMzYWQ5YzJkYmNmZmYxNDM2OGVhZjU2MjUuLmUwOWJiMmY1MmI0MmEyOTVmNTgwNDZl
MWU5Y2MxNDVmYjkxOWUyMTggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC0xMjIsNyArMTIyLDcgQEAgZGVm
IF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRl
c3RfYXJncywKICAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAg
bmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHBvcnQsIHRlc3RfaW5mby5m
aWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dCwgbG9jYWxfdGVzdF9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5jb25maWd1cmF0aW9uKCkpCiAg
ICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBh
IGNyYXNoLCBzbyB3ZSBkb24ndAogICAgICAgICAjIGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMu
IFdlIGRvIGRvdWJsZS1yZXBvcnQgZm9yIHRpbWVvdXRzIHNpbmNlCiAgICAgICAgICMgd2Ugc3Rp
bGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdlIG91dHB1dC4KZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3By
aW50aW5nX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHkKaW5kZXggMDM0NGFhN2Fj
NDA4YWViMDgyNDFhYTNiMGQ5ZjcxMjBkYzQxYmE3MC4uOWIzODk1ZmNlNjc2ZGFlOGZmNDAxNDIx
MzgyMDI2MjMyMTViNTAyYyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cHJpbnRpbmdfdW5pdHRlc3QucHkKQEAgLTExNyw3ICsxMTcsNyBAQCBjbGFzcyBUZXN0VXRpbGl0
eUZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKIAogY2xhc3MgIFRlc3RwcmludGVyKHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgZ2V0X3ByaW50ZXIoc2VsZiwgYXJncz1Ob25lLCBz
aW5nbGVfdGhyZWFkZWQ9RmFsc2UsCisgICAgZGVmIGdldF9wcmludGVyKHNlbGYsIGFyZ3M9W10s
IHNpbmdsZV90aHJlYWRlZD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICBpc19mdWxseV9wYXJh
bGxlbD1GYWxzZSk6CiAgICAgICAgIHByaW50aW5nX29wdGlvbnMgPSBwcmludGluZy5wcmludF9v
cHRpb25zKCkKICAgICAgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihv
cHRpb25fbGlzdD1wcmludGluZ19vcHRpb25zKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IDMyYTRlMTcyOTY1
MDE2MGVhNGQ3N2JlNjk2YTRiMTM5ZjE1ZjI2N2MuLjU0MmI4NDFiYzBjMWZmMTMxZWI2MTA1ZDEx
NmYxMTk4MGQxMTY2MDIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTMzLDcgKzMzLDYgQEAgdGVzdCBpbmZy
YXN0cnVjdHVyZSAodGhlIFBvcnQgYW5kIERyaXZlciBjbGFzc2VzKS4iIiIKIGZyb20gX19mdXR1
cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAogaW1wb3J0IGNnaQotaW1wb3J0IGNvZGVjcwog
aW1wb3J0IGRpZmZsaWIKIGltcG9ydCBlcnJubwogaW1wb3J0IG9zCkBAIC00Miw4ICs0MSwxMCBA
QCBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBpbXBvcnQgYXBhY2hlX2h0dHBfc2VydmVyCi1p
bXBvcnQgdGVzdF9maWxlcwogaW1wb3J0IGh0dHBfc2VydmVyCitpbXBvcnQgb3B0aW9ucworaW1w
b3J0IHRlc3RfZmlsZXMKK2ltcG9ydCB0cmVlCiBpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgogCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGxvZ3V0aWxzCkBAIC03NSwyMyArNzYs
NDIgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICIiIkFic3RyYWN0IGNsYXNzIGZvciBQb3J0
LXNwZWNpZmljIGhvb2tzIGZvciB0aGUgbGF5b3V0X3Rlc3QgcGFja2FnZS4KICAgICAiIiIKIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZmxhZ19mcm9tX2NvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbik6Ci0gICAgICAgIGZsYWdzX2J5X2NvbmZpZ3VyYXRpb24gPSB7Ci0gICAgICAgICAg
ICAiRGVidWciOiAiLS1kZWJ1ZyIsCi0gICAgICAgICAgICAiUmVsZWFzZSI6ICItLXJlbGVhc2Ui
LAotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmbGFnc19ieV9jb25maWd1cmF0aW9uW2NvbmZp
Z3VyYXRpb25dCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBz
ZWxmLl9uYW1lID0ga3dhcmdzLmdldCgncG9ydF9uYW1lJywgTm9uZSkKLSAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IGt3YXJncy5nZXQoJ29wdGlvbnMnLCBOb25lKQorICAgICAgICAiIiJpbml0aWFs
aXplcyBhIFBvcnQgY2xhc3MuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBvcnRfbmFt
ZTogbWFuZGF0b3J5IG5hbWUgb2YgcG9ydCB0byB1c2UKKyAgICAgICAgICAgIG9wdGlvbnM6IG9w
dGlvbmFsIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lm9wdGlvbnMuUG9ydE9wdGlvbnMoKQor
ICAgICAgICAgICAgICBjbGFzcyAob3Igb3B0aW9ucyBmcm9tIG9wdHBhcnNlKS4gRGVmYXVsdHMg
dG8gUG9ydE9wdGlvbnMoKS4KKyAgICAgICAgICAgIGV4ZWN1dGl2ZTogb3B0aW9uYWwgd2Via2l0
cHkuc3lzdGVtLmV4ZWN1dGl2ZS5FeGVjdXRpdmUoKSBvYmplY3QuCisgICAgICAgICAgICAgIERl
ZmF1bHRzIHRvIEV4ZWN1dGl2ZSgpLgorICAgICAgICAgICAgdHJlZTogb3B0aW9uYWwgcG9ydC5U
cmVlIG9iamVjdC4gRGVmYXVsdHMgdG8gVHJlZSgpLgorICAgICAgICAgICAgdXNlcjogb3B0aW9u
cyB3ZWJraXRweS5zeXN0ZW0udXNlci5Vc2VyIG9iamVjdC4gRGVmYXVsdHMgdG8gVXNlcigpLgor
CisgICAgICAgICIiIgorICAgICAgICAjIFBST1RFQ1RFRCBNRU1CRVJTCisgICAgICAgIHNlbGYu
X25hbWUgPSBrd2FyZ3NbJ3BvcnRfbmFtZSddCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBrd2Fy
Z3MuZ2V0KCdvcHRpb25zJywgb3B0aW9ucy5Qb3J0T3B0aW9ucygpKQogICAgICAgICBzZWxmLl9l
eGVjdXRpdmUgPSBrd2FyZ3MuZ2V0KCdleGVjdXRpdmUnLCBFeGVjdXRpdmUoKSkKKyAgICAgICAg
c2VsZi5fdHJlZSA9IGt3YXJncy5nZXQoJ3RyZWUnLCB0cmVlLlRyZWUoc2VsZi5fZXhlY3V0aXZl
KSkKICAgICAgICAgc2VsZi5fdXNlciA9IGt3YXJncy5nZXQoJ3VzZXInLCBVc2VyKCkpCi0gICAg
ICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX29wdGlvbnMKKyAg
ICAgICAgYXNzZXJ0IHNlbGYuX2V4ZWN1dGl2ZQorICAgICAgICBhc3NlcnQgc2VsZi5fdHJlZQor
ICAgICAgICBhc3NlcnQgc2VsZi5fdXNlcgorCisKKyAgICAgICAgIyBQUklWQVRFIE1FTUJFUlMK
ICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3dlYmtpdF9i
YXNlX2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fY29uZmlndXJhdGlvbiA9IHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkK
KyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBzZWxmLl9jb25maWd1cmF0aW9uID0gc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNvbmZpZ3Vy
YXRpb24gPSBzZWxmLl9jb25maWd1cmF0aW9uCisKKyAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0
aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJlZS5kZWZhdWx0X2NvbmZpZ3VyYXRp
b24oKQogCiAgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICAi
IiJSZXR1cm4gdGhlIG51bWJlciBvZiBEdW1wUmVuZGVyVHJlZSBpbnN0YW5jZXMgdG8gdXNlIGZv
ciB0aGlzCkBAIC0xMzMsNiArMTUzLDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAg
aW50ZXJmYWNlIHNvIHRoYXQgaXQgY2FuIGJlIG92ZXJyaWRlbiBmb3IgdGVzdGluZyBwdXJwb3Nl
cy4iIiIKICAgICAgICAgcmV0dXJuIGV4cGVjdGVkX3RleHQgIT0gYWN0dWFsX3RleHQKIAorICAg
IGRlZiBjb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjb25maWd1
cmF0aW9uIHRoaXMgcG9ydCBpcyB1c2luZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZp
Z3VyYXRpb24KKwogICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBh
Y3R1YWxfY29udGVudHMsCiAgICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZT1Ob25lLCB0
b2xlcmFuY2U9MCk6CiAgICAgICAgICIiIkNvbXBhcmUgdHdvIGltYWdlcyBhbmQgcHJvZHVjZSBh
IGRlbHRhIGltYWdlIGZpbGUuCkBAIC0yNTksOCArMjgzLDcgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogICAgICAgICBwYXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCBleHRlbnNpb24p
CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICAgICAgIHJldHVy
biBOb25lCi0gICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3InLCBlbmNvZGluZykgYXMg
ZmlsZToKLSAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fdHJlZS5yZWFkX2ZpbGUocGF0aCwgZW5jb2RpbmcpCiAKICAgICBkZWYgZXhwZWN0ZWRfY2hl
Y2tzdW0oc2VsZiwgdGVzdCk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGNoZWNrc3VtIG9mIHRo
ZSBpbWFnZSB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gcHJvZHVjZSwgb3IgTm9uZSBpZiBpdCBpcyBh
IHRleHQtb25seSB0ZXN0LiIiIgpAQCAtMzQ5LDggKzM3Miw3IEBAIGNsYXNzIFBvcnQob2JqZWN0
KToKICAgICAgICAgICAgIGRhdGE6IGNvbnRlbnRzIG9mIHRoZSBiYXNlbGluZS4KICAgICAgICAg
ICAgIGVuY29kaW5nOiBmaWxlIGVuY29kaW5nIHRvIHVzZSBmb3IgdGhlIGJhc2VsaW5lLgogICAg
ICAgICAiIiIKLSAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCAidyIsIGVuY29kaW5nPWVu
Y29kaW5nKSBhcyBmaWxlOgotICAgICAgICAgICAgZmlsZS53cml0ZShkYXRhKQorICAgICAgICBz
ZWxmLl90cmVlLndyaXRlX2ZpbGUocGF0aCwgY29udGVudHM9ZGF0YSwgZW5jb2Rpbmc9ZW5jb2Rp
bmcpCiAKICAgICBkZWYgdXJpX3RvX3Rlc3RfbmFtZShzZWxmLCB1cmkpOgogICAgICAgICAiIiJS
ZXR1cm4gdGhlIGJhc2UgbGF5b3V0IHRlc3QgbmFtZSBmb3IgYSBnaXZlbiBVUkkuCkBAIC0zODks
NiArNDExLDEyIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgY2FuIGNvbnZlcnQgYWNj
b3JkaW5nbHkuIiIiCiAgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpCiAK
KyAgICBkZWYgZ2V0X29wdGlvbihzZWxmLCBuYW1lLCBkZWZhdWx0X3ZhbHVlPU5vbmUpOgorICAg
ICAgICBpZiBoYXNhdHRyKHNlbGYuX29wdGlvbnMsIG5hbWUpOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX29wdGlvbnMuX19kaWN0X19bbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiBkZWZhdWx0X3ZhbHVlCisKICAgICBkZWYgbGF5b3V0X3Rlc3RzX2RpcihzZWxmKToK
ICAgICAgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIExh
eW91dFRlc3RzIGRpcmVjdG9yeS4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dl
YmtpdF9iYXNlKCdMYXlvdXRUZXN0cycpCkBAIC00MjAsMTkgKzQ0OCwxMyBAQCBjbGFzcyBQb3J0
KG9iamVjdCk6CiAgICAgICAgIG1heSBiZSBkaWZmZXJlbnQgKGUuZy4sICd3aW4teHAnIGluc3Rl
YWQgb2YgJ2Nocm9taXVtLXdpbi14cCcuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAK
LSAgICAjIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGZ1bmN0aW9ucyBpbiB3ZWJr
aXRweS5jb21tb24uY2hlY2tvdXQuc2NtLgorICAgIGRlZiBvcHRpb25zKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fb3B0aW9ucworCiAgICAgZGVmIHBhdGhfZnJvbV93ZWJraXRfYmFzZShz
ZWxmLCAqY29tcHMpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gcGF0aCBt
YWRlIGJ5IGpvaW5pbmcgdGhlIHRvcCBvZiB0aGUKICAgICAgICAgV2ViS2l0IHNvdXJjZSB0cmVl
IGFuZCB0aGUgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHMgaW4gfCpjb21wc3wuIiIiCi0gICAgICAg
IGlmIG5vdCBzZWxmLl93ZWJraXRfYmFzZV9kaXI6Ci0gICAgICAgICAgICBhYnNwYXRoID0gb3Mu
cGF0aC5hYnNwYXRoKF9fZmlsZV9fKQotICAgICAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGly
ID0gYWJzcGF0aFswOmFic3BhdGguZmluZCgnV2ViS2l0VG9vbHMnKV0KLQotICAgICAgICByZXR1
cm4gb3MucGF0aC5qb2luKHNlbGYuX3dlYmtpdF9iYXNlX2RpciwgKmNvbXBzKQotCi0gICAgIyBG
SVhNRTogQ2FsbGVycyBzaG91bGQgZXZlbnR1YWxseSBtb3ZlIHRvIHNjbS5zY3JpcHRfcGF0aC4K
LSAgICBkZWYgc2NyaXB0X3BhdGgoc2VsZiwgc2NyaXB0X25hbWUpOgotICAgICAgICByZXR1cm4g
c2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIldlYktpdFRvb2xzIiwgIlNjcmlwdHMiLCBzY3Jp
cHRfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyZWUucGF0aF9mcm9tX3dlYmtpdF9iYXNl
KCpjb21wcykKIAogICAgIGRlZiBwYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6
CiAgICAgICAgICIiIlVwZGF0ZSB0aGUgdGVzdCBleHBlY3RhdGlvbnMgdG8gdGhlIHBhc3NlZC1p
biBzdHJpbmcuCkBAIC02NjYsMzkgKzY4OCw2IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBydW4gUHJldHR5UGF0Y2ggKCVzKTpcbiVzIiAl
IChjb21tYW5kLCBlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQoKSkpCiAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fcHJldHR5X3BhdGNoX2Vycm9yX2h0bWwKIAotICAgIGRlZiBfd2Via2l0X2J1aWxkX2Rp
cmVjdG9yeShzZWxmLCBhcmdzKToKLSAgICAgICAgYXJncyA9IFsicGVybCIsIHNlbGYuc2NyaXB0
X3BhdGgoIndlYmtpdC1idWlsZC1kaXJlY3RvcnkiKV0gKyBhcmdzCi0gICAgICAgIHJldHVybiBz
ZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoYXJncykucnN0cmlwKCkKLQotICAgIGRlZiBfY29u
ZmlndXJhdGlvbl9maWxlX3BhdGgoc2VsZik6Ci0gICAgICAgIGJ1aWxkX3Jvb3QgPSBzZWxmLl93
ZWJraXRfYnVpbGRfZGlyZWN0b3J5KFsiLS10b3AtbGV2ZWwiXSkKLSAgICAgICAgcmV0dXJuIG9z
LnBhdGguam9pbihidWlsZF9yb290LCAiQ29uZmlndXJhdGlvbiIpCi0KLSAgICAjIEVhc3kgb3Zl
cnJpZGUgZm9yIHVuaXQgdGVzdHMKLSAgICBkZWYgX29wZW5fY29uZmlndXJhdGlvbl9maWxlKHNl
bGYpOgotICAgICAgICBjb25maWd1cmF0aW9uX3BhdGggPSBzZWxmLl9jb25maWd1cmF0aW9uX2Zp
bGVfcGF0aCgpCi0gICAgICAgIHJldHVybiBjb2RlY3Mub3Blbihjb25maWd1cmF0aW9uX3BhdGgs
ICJyIiwgInV0Zi04IikKLQotICAgIGRlZiBfcmVhZF9jb25maWd1cmF0aW9uKHNlbGYpOgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuX29wZW5fY29uZmlndXJhdGlvbl9maWxl
KCkgYXMgZmlsZToKLSAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS5yZWFkbGluZSgpLnJzdHJp
cCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUK
LQotICAgICMgRklYTUU6IFRoaXMgbGlzdCBtYXkgYmUgaW5jb21wbGV0ZSBhcyBBcHBsZSBoYXMg
c29tZSBzZWtyZXQgY29uZmlncy4KLSAgICBfUkVDT0dOSVpFRF9DT05GSUdVUkFUSU9OUyA9ICgi
RGVidWciLCAiUmVsZWFzZSIpCi0KLSAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYp
OgotICAgICAgICAjIEZJWE1FOiBVbmlmeSB0aGlzIHdpdGggd2Via2l0ZGlyLnBtIGNvbmZpZ3Vy
YXRpb24gcmVhZGluZyBjb2RlLgotICAgICAgICBjb25maWd1cmF0aW9uID0gc2VsZi5fcmVhZF9j
b25maWd1cmF0aW9uKCkKLSAgICAgICAgaWYgbm90IGNvbmZpZ3VyYXRpb246Ci0gICAgICAgICAg
ICBjb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCi0gICAgICAgIGlmIGNvbmZpZ3VyYXRpb24gbm90
IGluIHNlbGYuX1JFQ09HTklaRURfQ09ORklHVVJBVElPTlM6Ci0gICAgICAgICAgICBfbG9nLndh
cm4oIkNvbmZpZ3VyYXRpb24gXCIlc1wiIGZvdW5kIGluICVzIGlzIG5vdCBhIHJlY29nbml6ZWQg
dmFsdWUuXG4iICUgKGNvbmZpZ3VyYXRpb24sIHNlbGYuX2NvbmZpZ3VyYXRpb25fZmlsZV9wYXRo
KCkpKQotICAgICAgICAgICAgX2xvZy53YXJuKCJTY3JpcHRzIG1heSBmYWlsLiAgU2VlICdzZXQt
d2Via2l0LWNvbmZpZ3VyYXRpb24gLS1oZWxwJy4iKQotICAgICAgICByZXR1cm4gY29uZmlndXJh
dGlvbgotCiAgICAgIwogICAgICMgUFJPVEVDVEVEIFJPVVRJTkVTCiAgICAgIwpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3Vu
aXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9iYXNlX3VuaXR0ZXN0LnB5CmluZGV4IDFhNmU0MTAwMzhkOWIxYzU2ODAzYjg0OWJkODYzMTFh
Y2UwNzJlNjIuLmQ5NDE5YzllYzljYTNiZjA4YzZhOTM1NmFjNzU0OGJiZjI5YWI1ZmQgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKQEAgLTI3LDU3ICsyNywyNCBAQAogIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogCiBpbXBvcnQgYmFzZQotaW1wb3J0IG9zCi1pbXBvcnQgU3RyaW5nSU8KLWltcG9ydCBz
eXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIGZyb20g
d2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiAKLQotIyBGSVhNRTogVGhpcyBt
YWtlcyBTdHJpbmdJTyBvYmplY3RzIHdvcmsgd2l0aCAid2l0aCIuIFJlbW92ZQotIyB3aGVuIHdl
IHVwZ3JhZGUgdG8gMi42LgotY2xhc3MgTmV3U3RyaW5nSU8oU3RyaW5nSU8uU3RyaW5nSU8pOgot
ICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYg
X19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6Ci0gICAgICAgIHBhc3MKLQot
Ci1jbGFzcyBNb2NrRXhlY3V0aXZlKCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y2VwdGlv
bik6Ci0gICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbgotCi0gICAgZGVmIHJ1bl9j
b21tYW5kKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHJhaXNlIHNlbGYuX2V4Y2Vw
dGlvbgotCi0KLWNsYXNzIFVuaXRUZXN0UG9ydChiYXNlLlBvcnQpOgotICAgICIiIlN1YmNsYXNz
IG9mIGJhc2UuUG9ydCB1c2VkIGZvciB1bml0IHRlc3RpbmcuIiIiCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGNvbmZpZ3VyYXRpb25fY29udGVudHM9Tm9uZSwgZXhlY3V0aXZlX2V4Y2VwdGlvbj1O
b25lKToKLSAgICAgICAgYmFzZS5Qb3J0Ll9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX2Nv
bmZpZ3VyYXRpb25fY29udGVudHMgPSBjb25maWd1cmF0aW9uX2NvbnRlbnRzCi0gICAgICAgIGlm
IGV4ZWN1dGl2ZV9leGNlcHRpb246Ci0gICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBNb2Nr
RXhlY3V0aXZlKGV4ZWN1dGl2ZV9leGNlcHRpb24pCi0KLSAgICBkZWYgX29wZW5fY29uZmlndXJh
dGlvbl9maWxlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9jb25maWd1cmF0aW9uX2NvbnRlbnRz
OgotICAgICAgICAgICAgcmV0dXJuIE5ld1N0cmluZ0lPKHNlbGYuX2NvbmZpZ3VyYXRpb25fY29u
dGVudHMpCi0gICAgICAgIHJhaXNlIElPRXJyb3IKLQoraW1wb3J0IG9wdGlvbnMKK2ltcG9ydCB0
cmVlCiAKIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9m
b3JtYXRfd2RpZmZfb3V0cHV0X2FzX2h0bWwoc2VsZik6CiAgICAgICAgIG91dHB1dCA9ICJPVVRQ
VVQgJXMgJXMgJXMiICUgKGJhc2UuUG9ydC5fV0RJRkZfREVMLCBiYXNlLlBvcnQuX1dESUZGX0FE
RCwgYmFzZS5Qb3J0Ll9XRElGRl9FTkQpCi0gICAgICAgIGh0bWwgPSBiYXNlLlBvcnQoKS5fZm9y
bWF0X3dkaWZmX291dHB1dF9hc19odG1sKG91dHB1dCkKKyAgICAgICAgaHRtbCA9IGJhc2UuUG9y
dChwb3J0X25hbWU9J3VuaXQtdGVzdCcpLl9mb3JtYXRfd2RpZmZfb3V0cHV0X2FzX2h0bWwob3V0
cHV0KQogICAgICAgICBleHBlY3RlZF9odG1sID0gIjxoZWFkPjxzdHlsZT4uZGVsIHsgYmFja2dy
b3VuZDogI2ZhYTsgfSAuYWRkIHsgYmFja2dyb3VuZDogI2FmYTsgfTwvc3R5bGU+PC9oZWFkPjxw
cmU+T1VUUFVUIDxzcGFuIGNsYXNzPWRlbD4gPHNwYW4gY2xhc3M9YWRkPiA8L3NwYW4+PC9wcmU+
IgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwsIGV4cGVjdGVkX2h0bWwpCiAKICAgICBk
ZWYgdGVzdF93ZGlmZl9jb21tYW5kKHNlbGYpOgotICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkK
KyAgICAgICAgcG9ydCA9IGJhc2UuUG9ydChwb3J0X25hbWU9J3VuaXQtdGVzdCcpCiAgICAgICAg
IHBvcnQuX3BhdGhfdG9fd2RpZmYgPSBsYW1iZGE6ICIvcGF0aC90by93ZGlmZiIKICAgICAgICAg
Y29tbWFuZCA9IHBvcnQuX3dkaWZmX2NvbW1hbmQoIi9hY3R1YWwvcGF0aCIsICIvZXhwZWN0ZWQv
cGF0aCIpCiAgICAgICAgIGV4cGVjdGVkX2NvbW1hbmQgPSBbCkBAIC05OCw3ICs2NSw4IEBAIGNs
YXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV0dXJuIG5ld19maWxl
CiAKICAgICBkZWYgdGVzdF9wcmV0dHlfcGF0Y2hfb3NfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHBv
cnQgPSBVbml0VGVzdFBvcnQoZXhlY3V0aXZlX2V4Y2VwdGlvbj1PU0Vycm9yKQorICAgICAgICBw
b3J0ID0gYmFzZS5Qb3J0KHBvcnRfbmFtZT0ndW5pdC10ZXN0JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBleGVjdXRpdmU9dHJlZS5Nb2NrRXhlY3V0aXZlKGV4Y2VwdGlvbj1PU0Vycm9yKSkK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnByZXR0eV9wYXRjaF90ZXh0KCJwYXRjaC50
eHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ll9wcmV0dHlfcGF0Y2hfZXJyb3Jf
aHRtbCkKIApAQCAtMTA5LDcgKzc3LDggQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgIGRlZiB0ZXN0X3ByZXR0eV9wYXRjaF9zY3JpcHRfZXJyb3Ioc2VsZik6CiAgICAg
ICAgICMgRklYTUU6IFRoaXMgaXMgc29tZSB1Z2x5IHdoaXRlLWJveCB0ZXN0IGhhY2tpbmcgLi4u
CiAgICAgICAgIGJhc2UuX3ByZXR0eV9wYXRjaF9hdmFpbGFibGUgPSBUcnVlCi0gICAgICAgIHBv
cnQgPSBVbml0VGVzdFBvcnQoZXhlY3V0aXZlX2V4Y2VwdGlvbj1TY3JpcHRFcnJvcikKKyAgICAg
ICAgcG9ydCA9IGJhc2UuUG9ydChwb3J0X25hbWU9J3VuaXQtdGVzdCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhlY3V0aXZlPXRyZWUuTW9ja0V4ZWN1dGl2ZShleGNlcHRpb249U2NyaXB0
RXJyb3IpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQucHJldHR5X3BhdGNoX3RleHQo
InBhdGNoLnR4dCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX3ByZXR0eV9wYXRj
aF9lcnJvcl9odG1sKQogCkBAIC0xMjcsNyArOTYsNyBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CiAgICAgICAgICAgICB3
ZGlmZl9wYXRoID0gTm9uZQogCi0gICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBw
b3J0ID0gYmFzZS5Qb3J0KHBvcnRfbmFtZT0ndW5pdC10ZXN0JykKICAgICAgICAgcG9ydC5fcGF0
aF90b193ZGlmZiA9IGxhbWJkYTogd2RpZmZfcGF0aAogCiAgICAgICAgIGlmIHdkaWZmX3BhdGg6
CkBAIC0xNjQsNyArMTMzLDcgQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICBiYXNlLl93ZGlmZl9hdmFpbGFibGUgPSBUcnVlCiAKICAgICBkZWYgdGVzdF9kaWZm
X3RleHQoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0g
YmFzZS5Qb3J0KHBvcnRfbmFtZT0ndW5pdC10ZXN0JykKICAgICAgICAgIyBNYWtlIHN1cmUgdGhh
dCB3ZSBkb24ndCBydW4gaW50byBkZWNvZGluZyBleGNlcHRpb25zIHdoZW4gdGhlCiAgICAgICAg
ICMgZmlsZW5hbWVzIGFyZSB1bmljb2RlLCB3aXRoIHJlZ3VsYXIgb3IgbWFsZm9ybWVkIGlucHV0
IChleHBlY3RlZCBvcgogICAgICAgICAjIGFjdHVhbCBpbnB1dCBpcyBhbHdheXMgcmF3IGJ5dGVz
LCBub3QgdW5pY29kZSkuCkBAIC0xOTAsNDMgKzE1OSw0MiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWN0LnR4dCcgaW4gZGlm
ZikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnbm9zdWNodGhpbmcnIGluIGRpZmYpCiAKLSAg
ICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb25fbm90Zm91bmQoc2VsZik6Ci0gICAgICAg
IHBvcnQgPSBVbml0VGVzdFBvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVm
YXVsdF9jb25maWd1cmF0aW9uKCksICJSZWxlYXNlIikKLQogICAgIGRlZiB0ZXN0X2xheW91dF90
ZXN0c19za2lwcGluZyhzZWxmKToKLSAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCisgICAgICAg
IHBvcnQgPSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3QnKQogICAgICAgICBwb3J0LnNr
aXBwZWRfbGF5b3V0X3Rlc3RzID0gbGFtYmRhOiBbJ2Zvby9iYXIuaHRtbCcsICdtZWRpYSddCiAg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnNraXBzX2xheW91dF90ZXN0KCdmb28vYmFyLmh0
bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ21l
ZGlhL3ZpZGVvLXpvb20uaHRtbCcpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuc2tp
cHNfbGF5b3V0X3Rlc3QoJ2Zvby9mb28uaHRtbCcpKQogCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9j
b25maWd1cmF0aW9uX2ZvdW5kKHNlbGYpOgotICAgICAgICBwb3J0ID0gVW5pdFRlc3RQb3J0KGNv
bmZpZ3VyYXRpb25fY29udGVudHM9IkRlYnVnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChw
b3J0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiRGVidWciKQotCi0gICAgZGVmIHRlc3RfZGVm
YXVsdF9jb25maWd1cmF0aW9uX3Vua25vd24oc2VsZik6Ci0gICAgICAgIHBvcnQgPSBVbml0VGVz
dFBvcnQoY29uZmlndXJhdGlvbl9jb250ZW50cz0id2VpcmRfdmFsdWUiKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJ3ZWlyZF92YWx1ZSIp
Ci0KICAgICBkZWYgdGVzdF9zZXR1cF90ZXN0X3J1bihzZWxmKToKLSAgICAgICAgcG9ydCA9IGJh
c2UuUG9ydCgpCisgICAgICAgIHBvcnQgPSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3Qn
KQogICAgICAgICAjIFRoaXMgcm91dGluZSBpcyBhIG5vLW9wLiBXZSBqdXN0IHRlc3QgaXQgZm9y
IGNvdmVyYWdlLgogICAgICAgICBwb3J0LnNldHVwX3Rlc3RfcnVuKCkKIAogICAgIGRlZiB0ZXN0
X3Rlc3RfZGlycyhzZWxmKToKLSAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCisgICAgICAgIHBv
cnQgPSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3QnKQogICAgICAgICBkaXJzID0gcG9y
dC50ZXN0X2RpcnMoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2NhbnZhcycgaW4gZGlycykK
ICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdjc3MyLjEnIGluIGRpcnMpCiAKKyAgICBkZWYgdGVz
dF91cmlfdG9fdGVzdF9uYW1lX191bmtub3duX3Byb3RvKHNlbGYpOgorICAgICAgICBwb3J0ID0g
YmFzZS5Qb3J0KHBvcnRfbmFtZT0ndW5pdC10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9ydC51cmlfdG9fdGVzdF9uYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZnRwOi8vZm9vL2Jhci5odG1sIikKKworICAgIGRlZiB0ZXN0X29w
dGlvbnMoc2VsZik6CisgICAgICAgIG9wdHMgPSBvcHRpb25zLlBvcnRPcHRpb25zKCkKKyAgICAg
ICAgcG9ydCA9IGJhc2UuUG9ydChwb3J0X25hbWU9J3VuaXQtdGVzdCcsIG9wdGlvbnM9b3B0cykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Lm9wdGlvbnMoKSwgb3B0cykKKworCiBjbGFz
cyBWaXJ0dWFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgdGhhdCB2YXJp
b3VzIG1ldGhvZHMgZXhwZWN0ZWQgdG8gYmUgdmlydHVhbCBhcmUuIiIiCiAgICAgZGVmIGFzc2Vy
dFZpcnR1YWwoc2VsZiwgbWV0aG9kLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtZXRob2QsICphcmdzLCAqKmt3YXJncykK
IAogICAgIGRlZiB0ZXN0X3ZpcnR1YWxfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgcG9ydCA9IGJh
c2UuUG9ydCgpCisgICAgICAgIHBvcnQgPSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3Qn
KQogICAgICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC5iYXNlbGluZV9wYXRoKQogICAgICAg
ICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCkKICAgICAgICAg
c2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuY2hlY2tfYnVpbGQsIE5vbmUpCkBAIC0yNTEsMTAgKzIx
OSwxMSBAQCBjbGFzcyBWaXJ0dWFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNl
bGYuYXNzZXJ0VmlydHVhbChwb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMpCiAgICAgICAg
IHNlbGYuYXNzZXJ0VmlydHVhbChwb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkX3BocCkKICAgICAgICAg
c2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuX3BhdGhfdG9fd2RpZmYpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VmlydHVhbChwb3J0Ll9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeSkKICAgICAgICAgc2VsZi5h
c3NlcnRWaXJ0dWFsKHBvcnQuX3NodXRfZG93bl9odHRwX3NlcnZlciwgTm9uZSkKIAogICAgIGRl
ZiB0ZXN0X3ZpcnR1YWxfZHJpdmVyX21ldGhvZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgYmFzZS5Ecml2ZXIsIGJhc2UuUG9ydCgpLAorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBiYXNlLkRyaXZlciwg
YmFzZS5Qb3J0KHBvcnRfbmFtZT0ndW5pdC10ZXN0JyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIiLCBOb25lLCBOb25lKQogCiAgICAgZGVmIHRlc3RfdmlydHVhbF9kcml2ZXJfbWV0aG9k
cyhzZWxmKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGE3MjYyN2ExNmE3ZmE1NGM0ODgzYzQz
OTI5NWE3MDNlOTVmM2I4ZDcuLjUyMjhiNmRiZTczYTBmZDRlZWYwZmZkNTAxOWZmNjEyYWNiMDBk
YWUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW0ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpAQCAtMzEsNyArMzEsNiBAQAogCiBmcm9tIF9fZnV0
dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKLWltcG9ydCBjb2RlY3MKIGltcG9ydCBsb2dn
aW5nCiBpbXBvcnQgb3MKIGltcG9ydCByZQpAQCAtODQsMTIgKzgzLDggQEAgY2xhc3MgQ2hyb21p
dW1Qb3J0KGJhc2UuUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgog
ICAgICAgICBiYXNlLlBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCi0gICAgICAgIGlmICdv
cHRpb25zJyBpbiBrd2FyZ3M6Ci0gICAgICAgICAgICBvcHRpb25zID0ga3dhcmdzWydvcHRpb25z
J10KLSAgICAgICAgICAgIGlmIChvcHRpb25zIGFuZCAobm90IGhhc2F0dHIob3B0aW9ucywgJ2Nv
bmZpZ3VyYXRpb24nKSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNv
bmZpZ3VyYXRpb24gaXMgTm9uZSkpOgotICAgICAgICAgICAgICAgIG9wdGlvbnMuY29uZmlndXJh
dGlvbiA9IHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgc2VsZi5fY2hyb21p
dW1fYmFzZV9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKIAogICAgIGRl
ZiBiYXNlbGluZV9wYXRoKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgoc2VsZi5fbmFtZSkKQEAgLTEwMiw3ICs5Nyw3IEBAIGNsYXNzIENocm9taXVtUG9y
dChiYXNlLlBvcnQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qg
ZHJpdmVyJykgYW5kIHJlc3VsdAogICAgICAgICBpZiByZXN1bHQgYW5kIHNlbGYuX29wdGlvbnMu
YnVpbGQ6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19kcml2ZXJfYnVpbGRfdXBf
dG9fZGF0ZSgKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24pCisg
ICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uKCkpCiAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICBfbG9nLmVycm9yKCcnKQogCkBAIC0xODIsOSArMTc3LDkgQEAgY2xhc3MgQ2hyb21p
dW1Qb3J0KGJhc2UuUG9ydCk6CiAgICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAg
ICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFz
ZSgnd2Via2l0JywKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24s
IHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgc2VsZi5j
b25maWd1cmF0aW9uKCksIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAgICAgICAg
IGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9w
YXRoKHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9idWlsZF9wYXRoKHNlbGYuY29uZmlndXJhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKIAogICAgIGRl
ZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKQEAgLTIzMiwxOSArMjI3LDE3IEBAIGNsYXNzIENocm9t
aXVtUG9ydChiYXNlLlBvcnQpOgogICAgICAgICBCYXNpY2FsbHkgdGhpcyBzdHJpbmcgc2hvdWxk
IGNvbnRhaW4gdGhlIGVxdWl2YWxlbnQgb2YgYQogICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucyBm
aWxlLiBTZWUgdGVzdF9leHBlY3RhdGlvbnMucHkgZm9yIG1vcmUgZGV0YWlscy4iIiIKICAgICAg
ICAgZXhwZWN0YXRpb25zX3BhdGggPSBzZWxmLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmls
ZSgpCi0gICAgICAgIHdpdGggY29kZWNzLm9wZW4oZXhwZWN0YXRpb25zX3BhdGgsICJyIiwgInV0
Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKQorICAgICAgICBy
ZXR1cm4gc2VsZi5fdHJlZS5maWxlX3JlYWQoZXhwZWN0YXRpb25zX3BhdGgsICJ1dGYtOCIpCiAK
ICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3ZlcnJpZGVzKHNlbGYpOgogICAgICAgICAjIEZJ
WE1FOiBUaGlzIGRydF9vdmVycmlkZXMgaGFuZGxpbmcgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB3
ZSBzd2l0Y2gKICAgICAgICAgIyBmcm9tIHRlc19zaGVsbCB0byBEUlQuCiAgICAgICAgIGRydF9v
dmVycmlkZXMgPSAnJwotICAgICAgICBpZiBzZWxmLl9vcHRpb25zIGFuZCBzZWxmLl9vcHRpb25z
LnVzZV9kcnQ6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudXNlX2RydDoKICAgICAgICAgICAg
IGRydF9vdmVycmlkZXNfcGF0aCA9IHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRU
ZXN0cycsCiAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgJ2Nocm9taXVtJywgJ2RydF9leHBl
Y3RhdGlvbnMudHh0JykKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRydF9vdmVycmlk
ZXNfcGF0aCk6Ci0gICAgICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihkcnRfb3ZlcnJpZGVz
X3BhdGgsICJyIiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgZHJ0X292
ZXJyaWRlcyA9IGZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RyZWUu
ZmlsZV9yZWFkKGRydF9vdmVycmlkZXNfcGF0aCwgInV0Zi04IikKIAogICAgICAgICB0cnk6CiAg
ICAgICAgICAgICBvdmVycmlkZXNfcGF0aCA9IHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2Uo
J3dlYmtpdCcsICd0b29scycsCkBAIC0yNTMsOCArMjQ2LDcgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0
KGJhc2UuUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5leGlzdHMob3ZlcnJpZGVzX3BhdGgpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAg
ICAgICAgd2l0aCBjb2RlY3Mub3BlbihvdmVycmlkZXNfcGF0aCwgInIiLCAidXRmLTgiKSBhcyBm
aWxlOgotICAgICAgICAgICAgcmV0dXJuIGZpbGUucmVhZCgpICsgZHJ0X292ZXJyaWRlcworICAg
ICAgICByZXR1cm4gc2VsZi5fdHJlZS5yZWFkKG92ZXJyaWRlc19wYXRoLCAidXRmLTgiKSArIGRy
dF9vdmVycmlkZXMKIAogICAgIGRlZiBza2lwcGVkX2xheW91dF90ZXN0cyhzZWxmLCBleHRyYV90
ZXN0X2ZpbGVzPU5vbmUpOgogICAgICAgICBleHBlY3RhdGlvbnNfc3RyID0gc2VsZi50ZXN0X2V4
cGVjdGF0aW9ucygpCkBAIC0zMjksNyArMzIxLDcgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2Uu
UG9ydCk6CiAgICAgICAgIGJpbmFyeV9uYW1lID0gJ2ltYWdlX2RpZmYnCiAgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMudXNlX2RydDoKICAgICAgICAgICAgIGJpbmFyeV9uYW1lID0gJ0ltYWdlRGlm
ZicKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uLCBiaW5hcnlfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoc2Vs
Zi5jb25maWd1cmF0aW9uKCksIGJpbmFyeV9uYW1lKQogCiAKIGNsYXNzIENocm9taXVtRHJpdmVy
KGJhc2UuRHJpdmVyKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHUucHkKaW5kZXggODA2MDJkOWE3
YmE0NzhhNjkzNjI0ODliNWZiODM5ZmQzNjI0Mjk4NC4uNDdlY2JiMmY3NmVkMWRkM2JkOTVmZTQx
NWY1YzU3Mzg1ODMzOTk4NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHUucHkKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHUucHkKQEAgLTYzLDc1
ICs2Myw1OSBAQCBkZWYgZ2V0KCoqa3dhcmdzKToKICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yKCd1bnN1cHBvcnRlZCBwb3J0OiAlcycgJSBwb3J0X25hbWUpCiAKIAotZGVmIF9zZXRfZ3B1
X29wdGlvbnMob3B0aW9ucyk6Ci0gICAgaWYgb3B0aW9uczoKLSAgICAgICAgaWYgb3B0aW9ucy5h
Y2NlbGVyYXRlZF9jb21wb3NpdGluZyBpcyBOb25lOgotICAgICAgICAgICAgb3B0aW9ucy5hY2Nl
bGVyYXRlZF9jb21wb3N0aW5nID0gVHJ1ZQotICAgICAgICBpZiBvcHRpb25zLmFjY2VsZXJhdGVk
XzJkX2NhbnZhcyBpcyBOb25lOgotICAgICAgICAgICAgb3B0aW9ucy5hY2NlbGVyYXRlZF8yZF9j
YW52YXMgPSBUcnVlCi0KLQotZGVmIF9ncHVfb3ZlcnJpZGVzKHBvcnQpOgotICAgIHRyeToKLSAg
ICAgICAgb3ZlcnJpZGVzX3BhdGggPSBwb3J0LnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJr
aXQnLCAndG9vbHMnLAotICAgICAgICAgICAgJ2xheW91dF90ZXN0cycsICd0ZXN0X2V4cGVjdGF0
aW9uc19ncHUudHh0JykKLSAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgIHJldHVy
biBOb25lCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG92ZXJyaWRlc19wYXRoKToKLSAgICAg
ICAgcmV0dXJuIE5vbmUKLSAgICB3aXRoIGNvZGVjcy5vcGVuKG92ZXJyaWRlc19wYXRoLCAiciIs
ICJ1dGYtOCIpIGFzIGZpbGU6Ci0gICAgICAgIHJldHVybiBmaWxlLnJlYWQoKQotCi0KLWNsYXNz
IENocm9taXVtR3B1TGludXhQb3J0KGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBrd2FyZ3Muc2V0ZGVm
YXVsdCgncG9ydF9uYW1lJywgJ2Nocm9taXVtLWdwdS1saW51eCcpCi0gICAgICAgIF9zZXRfZ3B1
X29wdGlvbnMoa3dhcmdzLmdldCgnb3B0aW9ucycpKQotICAgICAgICBjaHJvbWl1bV9saW51eC5D
aHJvbWl1bUxpbnV4UG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKLQotICAgIGRlZiBiYXNl
bGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIChbc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgoJ2Nocm9taXVtLWdwdS1saW51eCcpXSArCi0gICAgICAgICAgICAgICAgY2hy
b21pdW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZikp
Ci0KLSAgICBkZWYgcGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYpOgorIyBUaGlz
IHJvdXRpbmUgcGVyZm9ybXMgYSBjbHVtc3kgZm9ybSBvZiBtdWx0aXBsZS1pbmhlcml0YW5jZSAv
IG1peGluCisjIGZvciB0aGUgR1BVIHBvcnRzLCB3aGljaCBhbGwgaGF2ZSB0aGUgc2FtZSBiYXNp
YyB0ZW1wbGF0ZS4KK2RlZiBfaW5pdChzZWxmLCBwb3J0X25hbWUsIHN1cGVyLCBrd2FyZ3MpOgor
ICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aCgpOgorICAgICAgICByZXR1cm4gKFtzZWxmLl93
ZWJraXRfYmFzZWxpbmVfcGF0aChwb3J0X25hbWUpXSArCisgICAgICAgICAgICAgICAgc3VwZXIu
YmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZikpCisKKyAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNf
b3ZlcnJpZGVzKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG92ZXJyaWRlc19wYXRoID0g
c2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnd2Via2l0JywgJ3Rvb2xzJywKKyAgICAgICAg
ICAgICAgICAnbGF5b3V0X3Rlc3RzJywgJ3Rlc3RfZXhwZWN0YXRpb25zX2dwdS50eHQnKQorICAg
ICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgICAgICAjIFRoaXMgZmlyZXMgaWYg
d2UncmUgbm90IGluIGEgY2hyb21pdW0gY2hlY2tvdXQKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIGlmIG5vdCBzZWxmLl90cmVlLmV4aXN0cyhvdmVycmlkZXNfcGF0aCk6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fdHJlZS5yZWFkX2ZpbGUo
b3ZlcnJpZGVzX3BhdGgsICJ1dGYtOCIpCisKKyAgICBkZWYgcGF0aF90b190ZXN0X2V4cGVjdGF0
aW9uc19maWxlKCk6CiAgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
TGF5b3V0VGVzdHMnLCAncGxhdGZvcm0nLAogICAgICAgICAgICAgJ2Nocm9taXVtLWdwdScsICd0
ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQorICAgIGlmIChub3QgJ3BvcnRfbmFtZScgaW4ga3dhcmdz
IG9yIGt3YXJnc1sncG9ydF9uYW1lJ10gaXMgTm9uZSBvcgorICAgICAgICBrd2FyZ3NbJ3BvcnRf
bmFtZSddID09ICdjaHJvbWl1bS1ncHUnKToKKyAgICAgICAga3dhcmdzWydwb3J0X25hbWUnXSA9
IHBvcnRfbmFtZQogCi0gICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zX292ZXJyaWRlcyhzZWxmKToK
LSAgICAgICAgcmV0dXJuIF9ncHVfb3ZlcnJpZGVzKHNlbGYpCisgICAgc3VwZXIuX19pbml0X18o
c2VsZiwgKiprd2FyZ3MpCisgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKKyAgICBpZiAobm90
IGhhc2F0dHIob3B0aW9ucywgJ2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJykgb3IKKyAgICAgICAg
b3B0aW9ucy5hY2NlbGVyYXRlZF9jb21wb3NpdGluZyBpcyBOb25lKToKKyAgICAgICAgb3B0aW9u
cy5hY2NlbGVyYXRlZF9jb21wb3N0aW5nID0gVHJ1ZQorICAgIGlmIChub3QgaGFzYXR0cihvcHRp
b25zLCAnYWNjZWxlcmF0ZWRfMmRfY2FudmFzJykgb3IKKyAgICAgICAgb3B0aW9ucy5hY2NlbGVy
YXRlZF8yZF9jYW52YXMgaXMgTm9uZSk6CisgICAgICAgIG9wdGlvbnMuYWNjZWxlcmF0ZWRfMmRf
Y2FudmFzID0gVHJ1ZQogCisgICAgc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCA9IGJhc2VsaW5l
X3NlYXJjaF9wYXRoCisgICAgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMgPSB0ZXN0
X2V4cGVjdGF0aW9uc19vdmVycmlkZXMKKyAgICBzZWxmLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlv
bnNfZmlsZSA9IHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZQogCi1jbGFzcyBDaHJvbWl1
bUdwdU1hY1BvcnQoY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydCk6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ3BvcnRfbmFt
ZScsICdjaHJvbWl1bS1ncHUtbWFjJykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhrd2FyZ3Mu
Z2V0KCdvcHRpb25zJykpCi0gICAgICAgIGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQuX19p
bml0X18oc2VsZiwgKiprd2FyZ3MpCiAKLSAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiAoW3NlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCdjaHJvbWl1
bS1ncHUtbWFjJyldICsKLSAgICAgICAgICAgICAgICBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQ
b3J0LmJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpKQorY2xhc3MgQ2hyb21pdW1HcHVMaW51eFBv
cnQoY2hyb21pdW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCAqKmt3YXJncyk6CisgICAgICAgIF9pbml0KHNlbGYsICdjaHJvbWl1bS1ncHUtbGludXgn
LCBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCwKKyAgICAgICAgICAgICAga3dhcmdz
KQogCi0gICAgZGVmIHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsICdwbGF0
Zm9ybScsCi0gICAgICAgICAgICAnY2hyb21pdW0tZ3B1JywgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4
dCcpCiAKLSAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3ZlcnJpZGVzKHNlbGYpOgotICAgICAg
ICByZXR1cm4gX2dwdV9vdmVycmlkZXMoc2VsZikKK2NsYXNzIENocm9taXVtR3B1TWFjUG9ydChj
aHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipr
d2FyZ3MpOgorICAgICAgICBfaW5pdChzZWxmLCAnY2hyb21pdW0tZ3B1LW1hYycsIGNocm9taXVt
X21hYy5DaHJvbWl1bU1hY1BvcnQsCisgICAgICAgICAgICAgIGt3YXJncykKIAogCiBjbGFzcyBD
aHJvbWl1bUdwdVdpblBvcnQoY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCk6CiAgICAgZGVm
IF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ3Bv
cnRfbmFtZScsICdjaHJvbWl1bS1ncHUtd2luJyArIHNlbGYudmVyc2lvbigpKQotICAgICAgICBf
c2V0X2dwdV9vcHRpb25zKGt3YXJncy5nZXQoJ29wdGlvbnMnKSkKLSAgICAgICAgY2hyb21pdW1f
d2luLkNocm9taXVtV2luUG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKLQotICAgIGRlZiBi
YXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIChbc2VsZi5fd2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLWdwdS13aW4nKV0gKwotICAgICAgICAgICAgICAgIGNo
cm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZikpCi0K
LSAgICBkZWYgcGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRlc3RzJywgJ3BsYXRmb3Jt
JywKLSAgICAgICAgICAgICdjaHJvbWl1bS1ncHUnLCAndGVzdF9leHBlY3RhdGlvbnMudHh0JykK
KyAgICAgICAgX2luaXQoc2VsZiwgJ2Nocm9taXVtLWdwdS13aW4nLCBjaHJvbWl1bV93aW4uQ2hy
b21pdW1XaW5Qb3J0LAorICAgICAgICAgICAgICBrd2FyZ3MpCiAKLSAgICBkZWYgdGVzdF9leHBl
Y3RhdGlvbnNfb3ZlcnJpZGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gX2dwdV9vdmVycmlkZXMo
c2VsZikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fZ3B1X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHkKaW5kZXgg
NWM3OWEzZmViOGYwYTFiMjkyN2IxMWJlNjBlNjc0YjExODAxMzEyNC4uMmFlZjNhN2JjNjljMDk5
NWQ0YTc3ZWQ3ZmRiZTZlYTZhMjFjM2ZjMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9ncHVfdW5pdHRlc3QucHkKQEAgLTI2LDcgKzI2LDkgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQg
dW5pdHRlc3QKKwogaW1wb3J0IGNocm9taXVtX2dwdQoraW1wb3J0IHRyZWUKIAogCiBjbGFzcyBD
aHJvbWl1bUdwdVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDEsNyArNDMsNyBAQCBjbGFz
cyBDaHJvbWl1bUdwdVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGFzc2VydE92
ZXJyaWRlc1dvcmtlZChzZWxmLCBwb3J0X25hbWUpOgogICAgICAgICAjIHRlc3QgdGhhdCB3ZSBn
b3QgdGhlIHJpZ2h0IHBvcnQKLSAgICAgICAgcG9ydCA9IGNocm9taXVtX2dwdS5nZXQocG9ydF9u
YW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1Ob25lKQorICAgICAgICBwb3J0ID0gY2hyb21pdW1fZ3B1
LmdldChwb3J0X25hbWU9cG9ydF9uYW1lKQogCiAgICAgICAgICMgd2UgdXNlIHN0YXJ0c3dpdGgo
KSBpbnN0ZWFkIG9mIEVxdWFsIHRvIGdsb3NzIG92ZXIgcGxhdGZvcm0gdmVyc2lvbnMuCiAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Lm5hbWUoKS5zdGFydHN3aXRoKHBvcnRfbmFtZSkpCkBA
IC01NCw1ICs1NiwzNyBAQCBjbGFzcyBDaHJvbWl1bUdwdVRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Nocm9taXVtLWdwdScgaW4KICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvcnQucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkpCiAKKyAg
ICAgICAgIyB0ZXN0IHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgb3ZlcnJpZGVzIGZpbGUgKG1vc3Rs
eSB0aGF0IHdlIGRvbid0CisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uIGhlcmUpLgorICAg
ICAgICBwb3J0LnRlc3RfZXhwZWN0YXRpb25zX292ZXJyaWRlcygpCisKKyAgICBkZWYgdGVzdF9u
b3RfaW5fY2hyb21pdW1fY2hlY2tvdXQoc2VsZik6CisgICAgICAgIGRlZiBtb2NrX3BhdGgoc2Vs
ZiwgKmNvbXBzKToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgICAgIHBv
cnQgPSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRfbmFtZT0nY2hyb21pdW0tZ3B1JykKKyAgICAgICAg
cG9ydC5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSA9IG1vY2tfcGF0aAorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocG9ydC50ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoKSwgTm9uZSkKKwor
ICAgIGRlZiB0ZXN0X21pc3Npbmdfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBwb3J0MSA9IGNo
cm9taXVtX2dwdS5nZXQocG9ydF9uYW1lPSdjaHJvbWl1bS1ncHUnKQorICAgICAgICBvdmVycmlk
ZXNfcGF0aCA9IHBvcnQxLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJraXQnLCAndG9vbHMn
LAorICAgICAgICAgICAgJ2xheW91dF90ZXN0cycsICd0ZXN0X2V4cGVjdGF0aW9uc19ncHUudHh0
JykKKyAgICAgICAgcG9ydDIgPSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRfbmFtZT0nY2hyb21pdW0t
Z3B1JywKKyAgICAgICAgICAgIHRyZWU9dHJlZS5Nb2NrVHJlZShleGVjdXRpdmU9Tm9uZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcz17b3ZlcnJpZGVzX3BhdGg6IE5vbmV9
KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQyLnRlc3RfZXhwZWN0YXRpb25zX292
ZXJyaWRlcygpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAg
ICBwb3J0MSA9IGNocm9taXVtX2dwdS5nZXQocG9ydF9uYW1lPSdjaHJvbWl1bS1ncHUnKQorICAg
ICAgICBvdmVycmlkZXNfcGF0aCA9IHBvcnQxLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJr
aXQnLCAndG9vbHMnLAorICAgICAgICAgICAgJ2xheW91dF90ZXN0cycsICd0ZXN0X2V4cGVjdGF0
aW9uc19ncHUudHh0JykKKyAgICAgICAgcG9ydDIgPSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRfbmFt
ZT0nY2hyb21pdW0tZ3B1JywKKyAgICAgICAgICAgIHRyZWU9dHJlZS5Nb2NrVHJlZShleGVjdXRp
dmU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcz17b3ZlcnJpZGVz
X3BhdGg6ICIvLyBncHUifSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydDIudGVzdF9l
eHBlY3RhdGlvbnNfb3ZlcnJpZGVzKCksICIvLyBncHUiKQorCisKIGlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51
eC5weQppbmRleCAxNzY5OTFiN2Y2YTY4ZGY3NzlmNzFkNTExMDQ0MTMyODY5ZTFlMTg5Li4zMjY4
MDU1ZTIzOGNlNGIzODQzZGIyN2Q1ODM0YjM5NDBhODYwNWMyIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fbGludXgucHkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBjbGFzcyBDaHJvbWl1bUxpbnV4UG9y
dChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogCiAgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxm
LCBjb25maWd1cmF0aW9uPU5vbmUpOgogICAgICAgICBpZiBub3QgY29uZmlndXJhdGlvbjoKLSAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24KKyAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBzZWxmLmNvbmZpZ3VyYXRpb24oKQogICAgICAgICBi
aW5hcnlfbmFtZSA9ICd0ZXN0X3NoZWxsJwogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV9k
cnQ6CiAgICAgICAgICAgICBiaW5hcnlfbmFtZSA9ICdEdW1wUmVuZGVyVHJlZScKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9jaHJvbWl1bV9tYWMucHkKaW5kZXggNjQwMTZhYjA0MmNhZThhOGUyN2JkY2FhYjQ2MWNmNWNh
ZTNhMmY4MS4uNTAzYjAxYmVlMjZkMTUwYzhmMDFiYzA0NjkyNjk3ZDkwMjI5ZjNiNSAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKQEAgLTEzOCw3ICsxMzgsNyBAQCBjbGFzcyBDaHJvbWl1
bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgIyBGSVhNRTogbWFrZSB8
Y29uZmlndXJhdGlvbnwgaGFwcHkgd2l0aCBjYXNlLXNlbnNpdGl2ZSBmaWxlCiAgICAgICAgICMg
c3lzdGVtcy4KICAgICAgICAgaWYgbm90IGNvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBjb25m
aWd1cmF0aW9uID0gc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uCisgICAgICAgICAgICBjb25m
aWd1cmF0aW9uID0gc2VsZi5jb25maWd1cmF0aW9uKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1
aWxkX3BhdGgoY29uZmlndXJhdGlvbiwgc2VsZi5kcml2ZXJfbmFtZSgpICsgJy5hcHAnLAogICAg
ICAgICAgICAgJ0NvbnRlbnRzJywgJ01hY09TJywgc2VsZi5kcml2ZXJfbmFtZSgpKQogCkBAIC0x
NDYsNyArMTQ2LDcgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9y
dCk6CiAgICAgICAgIGJpbmFyeV9uYW1lID0gJ2xheW91dF90ZXN0X2hlbHBlcicKICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy51c2VfZHJ0OgogICAgICAgICAgICAgYmluYXJ5X25hbWUgPSAnTGF5
b3V0VGVzdEhlbHBlcicKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5fb3B0
aW9ucy5jb25maWd1cmF0aW9uLCBiaW5hcnlfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1
aWxkX3BhdGgoc2VsZi5jb25maWd1cmF0aW9uKCksIGJpbmFyeV9uYW1lKQogCiAgICAgZGVmIF9w
YXRoX3RvX3dkaWZmKHNlbGYpOgogICAgICAgICByZXR1cm4gJ3dkaWZmJwpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91
bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW1fdW5pdHRlc3QucHkKaW5kZXggYTRhOWVhNjA2NmM2ZmEzMDUxOTQ2ZmUyYWRi
NmI2N2Q1YzNjYjAxNy4uNjY4Mjk0MjAzYzBmYzFiZThlMWYxNTc0NzZiZTE4NWZhMjNjZGY2MCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9jaHJvbWl1bV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0ZXN0LnB5CkBAIC0yNiwxMyArMjYsMTYg
QEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBvcworaW1wb3J0IHVu
aXR0ZXN0CitpbXBvcnQgU3RyaW5nSU8KKwogaW1wb3J0IGNocm9taXVtCiBpbXBvcnQgY2hyb21p
dW1fbGludXgKIGltcG9ydCBjaHJvbWl1bV9tYWMKIGltcG9ydCBjaHJvbWl1bV93aW4KLWltcG9y
dCB1bml0dGVzdAotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgb3MKKworZnJvbSBvcHRpb25zIGlt
cG9ydCBQb3J0T3B0aW9ucwogCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQg
TW9jawogCkBAIC04NSw0NiArODgsMjIgQEAgY2xhc3MgQ2hyb21pdW1Ecml2ZXJUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKIAogCiBjbGFzcyBDaHJvbWl1bVBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKLSAgICBjbGFzcyBUZXN0TWFjUG9ydChjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0
KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgotICAgICAgICAgICAgY2hy
b21pdW1fbWFjLkNocm9taXVtTWFjUG9ydC5fX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X25hbWU9J3Rlc3QtcG9ydCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnM9b3B0aW9ucykKLQotICAgICAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgot
ICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb25fY2FsbGVkID0gVHJ1ZQotICAg
ICAgICAgICAgcmV0dXJuICdkZWZhdWx0JwotCi0gICAgY2xhc3MgVGVzdExpbnV4UG9ydChjaHJv
bWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBvcHRpb25zKToKLSAgICAgICAgICAgIGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0
Ll9faW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3J0X25hbWU9J3Rlc3QtcG9ydCcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMpCi0KLSAg
ICAgICAgZGVmIGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgICAgIHNlbGYu
ZGVmYXVsdF9jb25maWd1cmF0aW9uX2NhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHJldHVybiAn
ZGVmYXVsdCcKIAogICAgIGRlZiB0ZXN0X3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKLSAgICAg
ICAgY2xhc3MgTW9ja09wdGlvbnM6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0g
ICAgICAgICAgICAgICAgc2VsZi51c2VfZHJ0ID0gVHJ1ZQotCi0gICAgICAgIHBvcnQgPSBDaHJv
bWl1bVBvcnRUZXN0LlRlc3RMaW51eFBvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucygpKQorICAgICAg
ICBvcHRpb25zID0gUG9ydE9wdGlvbnModXNlX2RydD1UcnVlLCBjb25maWd1cmF0aW9uPSdkZWZh
dWx0JykKKyAgICAgICAgcG9ydCA9IGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KG9w
dGlvbnM9b3B0aW9ucykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuX3BhdGhfdG9faW1h
Z2VfZGlmZigpLmVuZHN3aXRoKAogICAgICAgICAgICAgJy9vdXQvZGVmYXVsdC9JbWFnZURpZmYn
KSwgbXNnPXBvcnQuX3BhdGhfdG9faW1hZ2VfZGlmZigpKQotICAgICAgICBwb3J0ID0gQ2hyb21p
dW1Qb3J0VGVzdC5UZXN0TWFjUG9ydChvcHRpb25zPU1vY2tPcHRpb25zKCkpCisKKyAgICAgICAg
cG9ydCA9IGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQob3B0aW9ucz1vcHRpb25zKQogICAg
ICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5fcGF0aF90b19pbWFnZV9kaWZmKCkuZW5kc3dpdGgo
CiAgICAgICAgICAgICAnL3hjb2RlYnVpbGQvZGVmYXVsdC9JbWFnZURpZmYnKSkKICAgICAgICAg
IyBGSVhNRTogRmlndXJlIG91dCBob3cgdGhpcyBpcyBnb2luZyB0byB3b3JrIG9uIFdpbmRvd3Mu
CiAgICAgICAgICNwb3J0ID0gY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCgndGVzdC1wb3J0
Jywgb3B0aW9ucz1Nb2NrT3B0aW9ucygpKQogCiAgICAgZGVmIHRlc3Rfc2tpcHBlZF9sYXlvdXRf
dGVzdHMoc2VsZik6Ci0gICAgICAgIGNsYXNzIE1vY2tPcHRpb25zOgotICAgICAgICAgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYudXNlX2RydCA9IFRydWUKLQot
ICAgICAgICBwb3J0ID0gQ2hyb21pdW1Qb3J0VGVzdC5UZXN0TGludXhQb3J0KG9wdGlvbnM9TW9j
a09wdGlvbnMoKSkKKyAgICAgICAgb3B0aW9ucyA9IFBvcnRPcHRpb25zKHVzZV9kcnQ9VHJ1ZSkK
KyAgICAgICAgcG9ydCA9IGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KG9wdGlvbnM9
b3B0aW9ucykKIAogICAgICAgICBmYWtlX3Rlc3QgPSBvcy5wYXRoLmpvaW4ocG9ydC5sYXlvdXRf
dGVzdHNfZGlyKCksICJmYXN0L2pzL25vdC1nb29kLmpzIikKIApAQCAtMTM3LDI0ICsxMTYsNiBA
QCBERUZFUiBMSU5VWCBXSU4gOiBmYXN0L2pzL3ZlcnktZ29vZC5qcyA9IFRJTUVPVVQgUEFTUyIi
IgogICAgICAgICBza2lwcGVkX3Rlc3RzID0gcG9ydC5za2lwcGVkX2xheW91dF90ZXN0cyhleHRy
YV90ZXN0X2ZpbGVzPVtmYWtlX3Rlc3QsIF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZmFz
dC9qcy9ub3QtZ29vZC5qcyIgaW4gc2tpcHBlZF90ZXN0cykKIAotICAgIGRlZiB0ZXN0X2RlZmF1
bHRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgY2xhc3MgRW1wdHlPcHRpb25zOgotICAg
ICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICBvcHRpb25zID0gRW1wdHlPcHRpb25zKCkKLSAgICAgICAgcG9ydCA9IENocm9taXVtUG9y
dFRlc3QuVGVzdExpbnV4UG9ydChvcHRpb25zKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhv
cHRpb25zLmNvbmZpZ3VyYXRpb24sICdkZWZhdWx0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uX2NhbGxlZCkKLQotICAgICAgICBjbGFzcyBPcHRp
b25zV2l0aFVuc2V0Q29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKLSAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBOb25lCi0KLSAgICAgICAg
b3B0aW9ucyA9IE9wdGlvbnNXaXRoVW5zZXRDb25maWd1cmF0aW9uKCkKLSAgICAgICAgcG9ydCA9
IENocm9taXVtUG9ydFRlc3QuVGVzdExpbnV4UG9ydChvcHRpb25zKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhvcHRpb25zLmNvbmZpZ3VyYXRpb24sICdkZWZhdWx0JykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uX2NhbGxlZCkKIAogaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5w
eQppbmRleCA2OTM1NzQ0MmFlYmUzMWUwYTE0NWQzYzlhM2UxNTkwNzdiMTA0NTYwLi45OThiYTMy
YTg3NDRkZTU0NjcwNWJhMzBkNjM2MWQxOTA2ZGIxYjNlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CkBA
IC0zMiwxMSArMzIsMTMgQEAKIAogaW1wb3J0IHN5cwogCi1BTExfUE9SVF9OQU1FUyA9IFsndGVz
dCcsICdkcnlydW4nLCAnbWFjJywgJ3dpbicsICdndGsnLCAncXQnLCAnY2hyb21pdW0tbWFjJywK
K0FMTF9QT1JUX05BTUVTID0gWydtYWMnLCAnd2luJywgJ2d0aycsICdxdCcsICdjaHJvbWl1bS1t
YWMnLAogICAgICAgICAgICAgICAgICAgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbics
ICdnb29nbGUtY2hyb21lLXdpbicsCiAgICAgICAgICAgICAgICAgICAnZ29vZ2xlLWNocm9tZS1t
YWMnLCAnZ29vZ2xlLWNocm9tZS1saW51eDMyJywgJ2dvb2dsZS1jaHJvbWUtbGludXg2NCddCiAK
IAorIyBGSVhNRTogVGhlcmUgc2hvdWxkIGJlIHNvbWUgd2F5IG9mIGZpZ3VyaW5nIG91dCB3aGlj
aCBvcHRpb25zIGFyZQorIyBuZWVkZWQgYnkgd2hpY2ggcG9ydHMgc28gd2UgY2FuIGRvIHNvbWUg
ZXJyb3IgY2hlY2tpbmcuCiBkZWYgZ2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsICoq
a3dhcmdzKToKICAgICAiIiJSZXR1cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIFBvcnQg
aW50ZXJmYWNlLiBJZgogICAgIHBvcnRfbmFtZSBpcyBOb25lLCB0aGlzIHJvdXRpbmUgYXR0ZW1w
dHMgdG8gZ3Vlc3MgYXQgdGhlIG1vc3QKQEAgLTEwMiw3ICsxMDQsNyBAQCBkZWYgX2dldF9rd2Fy
Z3MoKiprd2FyZ3MpOgogICAgICAgICBtYWtlciA9IGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBv
cnQKICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2dvb2dsZS1jaHJvbWUnKToKICAg
ICAgICAgaW1wb3J0IGdvb2dsZV9jaHJvbWUKLSAgICAgICAgbWFrZXIgPSBnb29nbGVfY2hyb21l
LkdldEdvb2dsZUNocm9tZVBvcnQKKyAgICAgICAgbWFrZXIgPSBnb29nbGVfY2hyb21lLmdldAog
ICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vuc3VwcG9ydGVk
IHBvcnQ6ICVzJyAlIHBvcnRfdG9fdXNlKQogICAgIHJldHVybiBtYWtlcigqKmt3YXJncykKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQppbmRleCA4MWMzNzMyN2EyMDk5MmVlMGM0
YzNjZDllODRkMzExZDZlYTQ1OThiLi5kY2NhNDIyZDAyYjQ2NjAyMTZjYWVhYjFkYjViYmNiNGJm
N2MyZTA4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CkBAIC0yOSwxOCAr
MjksOSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBjaHJvbWl1bV9n
cHUKLWltcG9ydCBjaHJvbWl1bV9saW51eAotaW1wb3J0IGNocm9taXVtX21hYwotaW1wb3J0IGNo
cm9taXVtX3dpbgotaW1wb3J0IGRyeXJ1bgogaW1wb3J0IGZhY3RvcnkKLWltcG9ydCBnb29nbGVf
Y2hyb21lCi1pbXBvcnQgZ3RrCi1pbXBvcnQgbWFjCi1pbXBvcnQgcXQKLWltcG9ydCB0ZXN0Ci1p
bXBvcnQgd2luCitpbXBvcnQgb3B0aW9ucworaW1wb3J0IHRyZWUKIAogCiBjbGFzcyBGYWN0b3J5
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00OSwxMzQgKzQwLDE0NSBAQCBjbGFzcyBGYWN0
b3J5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgVGFyZ2V0IGlzIHNwZWNpZmllZCBieSBw
b3J0X25hbWUsIHN5cy5wbGF0Zm9ybSBhbmQgb3B0aW9ucy4KIAogICAgICIiIgotICAgICMgRklY
TUU6IFRoZSBwb3J0cyB0aGVtc2VsdmVzIHNob3VsZCBleHBvc2Ugd2hhdCBvcHRpb25zIHRoZXkg
cmVxdWlyZSwKLSAgICAjIGluc3RlYWQgb2YgcGFzc2luZyBnZW5lcmljICJvcHRpb25zIi4KLQot
ICAgIGNsYXNzIFdlYktpdE9wdGlvbnMob2JqZWN0KToKLSAgICAgICAgIiIiUmVwcmVzZW50cyB0
aGUgbWluaW11bSBvcHRpb25zIGZvciBXZWJLaXQgcG9ydC4iIiIKLSAgICAgICAgZGVmIF9faW5p
dF9fKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5waXhlbF90ZXN0cyA9IEZhbHNlCi0KLSAgICBj
bGFzcyBDaHJvbWl1bU9wdGlvbnMoV2ViS2l0T3B0aW9ucyk6Ci0gICAgICAgICIiIlJlcHJlc2Vu
dHMgbWluaW11bSBvcHRpb25zIGZvciBDaHJvbWl1bSBwb3J0LiIiIgotICAgICAgICBkZWYgX19p
bml0X18oc2VsZik6Ci0gICAgICAgICAgICBGYWN0b3J5VGVzdC5XZWJLaXRPcHRpb25zLl9faW5p
dF9fKHNlbGYpCi0gICAgICAgICAgICBzZWxmLmNocm9taXVtID0gVHJ1ZQotCiAgICAgZGVmIHNl
dFVwKHNlbGYpOgogICAgICAgICBzZWxmLnJlYWxfc3lzX3BsYXRmb3JtID0gc3lzLnBsYXRmb3Jt
Ci0gICAgICAgIHNlbGYud2Via2l0X29wdGlvbnMgPSBGYWN0b3J5VGVzdC5XZWJLaXRPcHRpb25z
KCkKLSAgICAgICAgc2VsZi5jaHJvbWl1bV9vcHRpb25zID0gRmFjdG9yeVRlc3QuQ2hyb21pdW1P
cHRpb25zKCkKKyAgICAgICAgc2VsZi53ZWJraXRfb3B0aW9ucyA9IG9wdGlvbnMuUG9ydE9wdGlv
bnMocGl4ZWxfdGVzdHM9RmFsc2UpCisgICAgICAgIHNlbGYuY2hyb21pdW1fb3B0aW9ucyA9IG9w
dGlvbnMuUG9ydE9wdGlvbnMocGl4ZWxfdGVzdHM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW09VHJ1ZSkKKyAgICAgICAg
c2VsZi5ncHVfb3B0aW9ucyA9IG9wdGlvbnMuUG9ydE9wdGlvbnMocG9ydF9uYW1lPSJjaHJvbWl1
bS1ncHUiKQorICAgICAgICBzZWxmLnRyZWUgPSB0cmVlLk1vY2tUcmVlKGV4ZWN1dGl2ZT10cmVl
Lk1vY2tFeGVjdXRpdmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPSdkZWZhdWx0JykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAg
c3lzLnBsYXRmb3JtID0gc2VsZi5yZWFsX3N5c19wbGF0Zm9ybQogCi0gICAgZGVmIGFzc2VydF9w
b3J0KHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfcG9ydCwgcG9ydF9vYmo9Tm9uZSk6CisgICAg
ZGVmIGFzc2VydF9wb3J0KHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBwbGF0Zm9ybT1Ob25lLCBvcHRp
b25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU9Tm9uZSk6CiAgICAg
ICAgICIiIkhlbHBlciBhc3NlcnQgZm9yIHBvcnRfbmFtZS4KIAogICAgICAgICBBcmdzOgogICAg
ICAgICAgIHBvcnRfbmFtZTogcG9ydCBuYW1lIHRvIGdldCBwb3J0IG9iamVjdC4KLSAgICAgICAg
ICBleHBlY3RlZF9wb3J0OiBjbGFzcyBvZiBleHBlY3RlZCBwb3J0IG9iamVjdC4KLSAgICAgICAg
ICBwb3J0X29iajogb3B0aW9uYWwgcG9ydCBvYmplY3QKKyAgICAgICAgICBleHBlY3RlZF9uYW1l
OiAocHJlZml4IG9mKSBuYW1lIG9mIGV4cGVjdGVkIHBvcnQgb2JqZWN0LgogICAgICAgICAiIiIK
LSAgICAgICAgcG9ydF9vYmogPSBwb3J0X29iaiBvciBmYWN0b3J5LmdldChwb3J0X25hbWU9cG9y
dF9uYW1lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3J0X29iaiwgZXhw
ZWN0ZWRfcG9ydCkpCi0KLSAgICBkZWYgYXNzZXJ0X3BsYXRmb3JtX3BvcnQoc2VsZiwgcGxhdGZv
cm0sIG9wdGlvbnMsIGV4cGVjdGVkX3BvcnQpOgotICAgICAgICAiIiJIZWxwZXIgYXNzZXJ0IGZv
ciBwbGF0Zm9ybSBhbmQgb3B0aW9ucy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHBsYXRm
b3JtOiBzeXMucGxhdGZvcm0uCi0gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyB0byBnZXQgcG9y
dCBvYmplY3QuCi0gICAgICAgICAgZXhwZWN0ZWRfcG9ydDogY2xhc3Mgb2YgZXhwZWN0ZWQgcG9y
dCBvYmplY3QuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIG9yaWdfcGxhdGZvcm0gPSBzeXMucGxh
dGZvcm0KLSAgICAgICAgc3lzLnBsYXRmb3JtID0gcGxhdGZvcm0KLSAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGlzaW5zdGFuY2UoZmFjdG9yeS5nZXQob3B0aW9ucz1vcHRpb25zKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcG9ydCkpCi0gICAgICAgIHN5cy5w
bGF0Zm9ybSA9IG9yaWdfcGxhdGZvcm0KKyAgICAgICAgaWYgcGxhdGZvcm06CisgICAgICAgICAg
ICBvcmlnX3BsYXRmb3JtID0gc3lzLnBsYXRmb3JtCisgICAgICAgICAgICBzeXMucGxhdGZvcm0g
PSBwbGF0Zm9ybQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3J0X29iaiA9IGZhY3Rvcnku
Z2V0KHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJlZT1zZWxmLnRyZWUpCisgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUocG9ydF9vYmoubmFtZSgpLnN0YXJ0c3dpdGgoZXhwZWN0ZWRfbmFtZSkpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3J0X29iai5kZWZhdWx0X2NvbmZpZ3VyYXRpb24o
KSwgJ2RlZmF1bHQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgcGxhdGZvcm06
CisgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtID0gb3JpZ19wbGF0Zm9ybQogCiAgICAgZGVm
IHRlc3RfdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgidGVzdCIsIHRlc3Qu
VGVzdFBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJ0ZXN0IiwgZXhw
ZWN0ZWRfbmFtZT0idGVzdCIpCiAKICAgICBkZWYgdGVzdF9kcnlydW4oc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0X3BvcnQoImRyeXJ1bi10ZXN0IiwgZHJ5cnVuLkRyeVJ1blBvcnQpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X3BvcnQoImRyeXJ1bi1tYWMiLCBkcnlydW4uRHJ5UnVuUG9ydCkKKyAg
ICAgICAgIyBOb3RlIHRoYXQgeW91IGNhbid0IHRlbGwgaWYgdGhpcyBpcyBhIGRyeXJ1biBwb3J0
IG9yIG5vdC4KKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9ImRyeXJ1bi10ZXN0
IiwgZXhwZWN0ZWRfbmFtZT0idGVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9u
YW1lPSJkcnlydW4tbWFjIiwgZXhwZWN0ZWRfbmFtZT0ibWFjIikKIAogICAgIGRlZiB0ZXN0X21h
YyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgibWFjIiwgbWFjLk1hY1BvcnQpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImRhcndpbiIsIE5vbmUsIG1hYy5NYWNQ
b3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9ybV9wb3J0KCJkYXJ3aW4iLCBzZWxmLndl
YmtpdF9vcHRpb25zLCBtYWMuTWFjUG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0
X25hbWU9Im1hYyIsIGV4cGVjdGVkX25hbWU9Im1hYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3Bv
cnQocGxhdGZvcm09ImRhcndpbiIsIGV4cGVjdGVkX25hbWU9Im1hYyIpCiAKICAgICBkZWYgdGVz
dF93aW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoIndpbiIsIHdpbi5XaW5Qb3J0
KQotICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9ybV9wb3J0KCJ3aW4zMiIsIE5vbmUsIHdpbi5X
aW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9ybV9wb3J0KCJ3aW4zMiIsIHNlbGYu
d2Via2l0X29wdGlvbnMsIHdpbi5XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9y
bV9wb3J0KCJjeWd3aW4iLCBOb25lLCB3aW4uV2luUG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRf
cGxhdGZvcm1fcG9ydCgiY3lnd2luIiwgc2VsZi53ZWJraXRfb3B0aW9ucywgd2luLldpblBvcnQp
CisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJ3aW4iLCBleHBlY3RlZF9uYW1l
PSJ3aW4iKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBsYXRmb3JtPSJ3aW4zMiIsIGV4cGVj
dGVkX25hbWU9IndpbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocGxhdGZvcm09ImN5Z3dp
biIsIGV4cGVjdGVkX25hbWU9IndpbiIpCiAKICAgICBkZWYgdGVzdF9nb29nbGVfY2hyb21lKHNl
bGYpOgotICAgICAgICAjIFRoZSBhY3R1YWwgQ2hyb21lIGNsYXNzIG5hbWVzIGFyZW4ndCBhdmFp
bGFibGUgc28gd2UgdGVzdCB0aGF0IHRoZQotICAgICAgICAjIG9iamVjdHMgd2UgZ2V0IGFyZSBh
dCBsZWFzdCBzdWJjbGFzc2VzIG9mIHRoZSBDaHJvbWl1bSB2ZXJzaW9ucy4KLSAgICAgICAgc2Vs
Zi5hc3NlcnRfcG9ydCgiZ29vZ2xlLWNocm9tZS1saW51eDMyIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCkKLSAgICAgICAgc2VsZi5h
c3NlcnRfcG9ydCgiZ29vZ2xlLWNocm9tZS1saW51eDY0IiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydCgiZ29vZ2xlLWNocm9tZS13aW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNo
cm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImdv
b2dsZS1jaHJvbWUtbWFjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9tYWMu
Q2hyb21pdW1NYWNQb3J0KQorICAgICAgICAjIE5vdGUgdGhhdCB5b3UgY2FuJ3QgdGVsbCBpZiB0
aGlzIGlzIGEgQ2hyb21lIGNsYXNzIG9yIG5vdCAtCisgICAgICAgICMgQ2hyb21lIGNsYXNzZXMg
Y2xhaW0gdG8gYmUgQ2hyb21pdW0gY2xhc3Nlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChw
b3J0X25hbWU9Imdvb2dsZS1jaHJvbWUtbGludXgzMiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0tbGludXgiKQorICAgICAgICBzZWxmLmFzc2VydF9w
b3J0KHBvcnRfbmFtZT0iZ29vZ2xlLWNocm9tZS1saW51eDY0IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1saW51eCIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0X3BvcnQocG9ydF9uYW1lPSJnb29nbGUtY2hyb21lLXdpbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0td2luIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydChwb3J0X25hbWU9Imdvb2dsZS1jaHJvbWUtbWFjIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1tYWMiKQorCisgICAgZGVmIHRlc3RfZ29v
Z2xlX2Nocm9tZV91bmtub3duKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJ
bXBsZW1lbnRlZEVycm9yLCBmYWN0b3J5LmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9ydF9uYW1lPSJnb29nbGUtY2hyb21lLXVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS11bmtub3duIikKIAogICAgIGRlZiB0ZXN0X2d0
ayhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiZ3RrIiwgZ3RrLkd0a1BvcnQpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJndGsiLCBleHBlY3RlZF9uYW1lPSJn
dGsiKQogCiAgICAgZGVmIHRlc3RfcXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQo
InF0IiwgcXQuUXRQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0icXQi
LCBleHBlY3RlZF9uYW1lPSJxdCIpCiAKICAgICBkZWYgdGVzdF9jaHJvbWl1bV9ncHVfbGludXgo
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLWdwdS1saW51eCIsIGNo
cm9taXVtX2dwdS5DaHJvbWl1bUdwdUxpbnV4UG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9y
dChwb3J0X25hbWU9ImNocm9taXVtLWdwdS1saW51eCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0tZ3B1LWxpbnV4IikKKyAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydChwbGF0Zm9ybT0ibGludXgyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0
X25hbWU9ImNocm9taXVtLWdwdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
bmFtZT0iY2hyb21pdW0tZ3B1LWxpbnV4IikKIAogICAgIGRlZiB0ZXN0X2Nocm9taXVtX2dwdV9t
YWMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLWdwdS1tYWMiLCBj
aHJvbWl1bV9ncHUuQ2hyb21pdW1HcHVNYWNQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0
KHBvcnRfbmFtZT0iY2hyb21pdW0tZ3B1LW1hYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0tZ3B1LW1hYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3Bv
cnQocGxhdGZvcm09ImRhcndpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9uYW1l
PSJjaHJvbWl1bS1ncHUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU9
ImNocm9taXVtLWdwdS1tYWMiKQogCiAgICAgZGVmIHRlc3RfY2hyb21pdW1fZ3B1X3dpbihzZWxm
KToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tZ3B1LXdpbiIsIGNocm9taXVt
X2dwdS5DaHJvbWl1bUdwdVdpblBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9u
YW1lPSJjaHJvbWl1bS1ncHUtd2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZF9uYW1lPSJjaHJvbWl1bS1ncHUtd2luIikKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwbGF0
Zm9ybT0id2luMzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfbmFtZT0iY2hyb21p
dW0tZ3B1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1
bS1ncHUtd2luIikKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwbGF0Zm9ybT0iY3lnd2luIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X25hbWU9ImNocm9taXVtLWdwdSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0tZ3B1LXdpbiIpCisK
KyAgICBkZWYgdGVzdF9jaHJvbWl1bV9ncHVfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgZmFjdG9yeS5nZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvcnRfbmFtZT0iY2hyb21pdW0tZ3B1LXVua25vd24iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1ncHUtdW5rbm93biIp
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYuYXNz
ZXJ0X3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtPSJ1bmtub3duIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9uYW1lPSJjaHJvbWl1bS1ncHUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1ncHUtdW5rbm93
biIpCiAKICAgICBkZWYgdGVzdF9jaHJvbWl1bV9tYWMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0X3BvcnQoImNocm9taXVtLW1hYyIsIGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImRhcndpbiIsIHNlbGYuY2hyb21pdW1f
b3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9tYWMu
Q2hyb21pdW1NYWNQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0iY2hy
b21pdW0tbWFjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJv
bWl1bS1tYWMiKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBsYXRmb3JtPSJkYXJ3aW4iLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9b3B0aW9ucy5Qb3J0T3B0aW9ucyhjaHJv
bWl1bT1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJv
bWl1bS1tYWMiKQogCiAgICAgZGVmIHRlc3RfY2hyb21pdW1fbGludXgoc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLWxpbnV4IiwgY2hyb21pdW1fbGludXguQ2hyb21p
dW1MaW51eFBvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImxpbnV4MiIs
IHNlbGYuY2hyb21pdW1fb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydChwb3J0X25hbWU9ImNocm9taXVtLWxpbnV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1saW51eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3Bv
cnQocGxhdGZvcm09ImxpbnV4MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz1v
cHRpb25zLlBvcnRPcHRpb25zKGNocm9taXVtPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX25hbWU9ImNocm9taXVtLWxpbnV4IikKIAogICAgIGRlZiB0ZXN0X2Nocm9t
aXVtX3dpbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0td2luIiwg
Y2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcGxhdGZv
cm1fcG9ydCgid2luMzIiLCBzZWxmLmNocm9taXVtX29wdGlvbnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCkKLSAgICAgICAg
c2VsZi5hc3NlcnRfcGxhdGZvcm1fcG9ydCgiY3lnd2luIiwgc2VsZi5jaHJvbWl1bV9vcHRpb25z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1
bVdpblBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJjaHJvbWl1bS13
aW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU9ImNocm9taXVtLXdp
biIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocGxhdGZvcm09IndpbjMyIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMuUG9ydE9wdGlvbnMoY2hyb21pdW09VHJ1
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0td2lu
IikKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwbGF0Zm9ybT0iY3lnd2luIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMuUG9ydE9wdGlvbnMoY2hyb21pdW09VHJ1
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0td2lu
IikKKworICAgIGRlZiB0ZXN0X2Nocm9taXVtX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGZhY3RvcnkuZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3J0X25hbWU9ImNocm9taXVtLXVua25vd24iKQogCiAgICAgZGVm
IHRlc3RfZ2V0X2FsbF9wb3J0cyhzZWxmKToKICAgICAgICAgcG9ydHMgPSBmYWN0b3J5LmdldF9h
bGwoKQogICAgICAgICBmb3IgbmFtZSBpbiBmYWN0b3J5LkFMTF9QT1JUX05BTUVTOgogICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgaW4gcG9ydHMua2V5cygpKQotICAgICAgICBzZWxm
LmFzc2VydF9wb3J0KCJ0ZXN0IiwgdGVzdC5UZXN0UG9ydCwgcG9ydHNbInRlc3QiXSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRfcG9ydCgiZHJ5cnVuLXRlc3QiLCBkcnlydW4uRHJ5UnVuUG9ydCwgcG9y
dHNbImRyeXJ1biJdKQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJkcnlydW4tbWFjIiwgZHJ5
cnVuLkRyeVJ1blBvcnQsIHBvcnRzWyJkcnlydW4iXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9y
dCgibWFjIiwgbWFjLk1hY1BvcnQsIHBvcnRzWyJtYWMiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydCgid2luIiwgd2luLldpblBvcnQsIHBvcnRzWyJ3aW4iXSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydCgiZ3RrIiwgZ3RrLkd0a1BvcnQsIHBvcnRzWyJndGsiXSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfcG9ydCgicXQiLCBxdC5RdFBvcnQsIHBvcnRzWyJxdCJdKQotICAgICAgICBzZWxmLmFz
c2VydF9wb3J0KCJjaHJvbWl1bS1tYWMiLCBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzWyJjaHJvbWl1bS1tYWMiXSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tbGludXgiLCBjaHJvbWl1bV9saW51eC5DaHJvbWl1
bUxpbnV4UG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21pdW0tbGlu
dXgiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0td2luIiwgY2hyb21pdW1f
d2luLkNocm9taXVtV2luUG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hy
b21pdW0td2luIl0pCisgICAgICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCdnb29nbGUt
Y2hyb21lJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnRzW25hbWVdLm5h
bWUoKS5zdGFydHN3aXRoKG5hbWUpKQogCiAgICAgZGVmIHRlc3RfdW5rbm93bl9zcGVjaWZpZWQo
c2VsZik6CiAgICAgICAgICMgVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB5b3Ugc3BlY2lmeSBhbiB1
bmtub3duIHBvcnQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWUucHkKaW5kZXggYmZmYzg2MGUy
MmE4NzllNmExNzQ0OTliMjM5OWM2Y2ZiZDQ5YmEyYS4uMjk5MmJlYmRhN2RjOTIxODgzZTk0NGRk
NjRmNDkxYzlkYWQ3ZWQ1YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9nb29nbGVfY2hyb21lLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZS5weQpAQCAtMjUs
NTQgKzI1LDM4IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIAotZGVmIEdldEdvb2dsZUNocm9tZVBvcnQo
Kiprd2FyZ3MpOgorZGVmIGdldCgqKmt3YXJncyk6CiAgICAgIiIiU29tZSB0ZXN0cyBoYXZlIHNs
aWdodGx5IGRpZmZlcmVudCByZXN1bHRzIHdoZW4gY29tcGlsZWQgYXMgR29vZ2xlCiAgICAgQ2hy
b21lIHZzIENocm9taXVtLiAgSW4gdGhvc2UgY2FzZXMsIHdlIHByZXBlbmQgYW4gYWRkaXRpb25h
bCBkaXJlY3RvcnkgdG8KICAgICB0byB0aGUgYmFzZWxpbmUgcGF0aHMuIiIiCiAgICAgcG9ydF9u
YW1lID0ga3dhcmdzWydwb3J0X25hbWUnXQogICAgIGRlbCBrd2FyZ3NbJ3BvcnRfbmFtZSddCi0g
ICAgaWYgcG9ydF9uYW1lID09ICdnb29nbGUtY2hyb21lLWxpbnV4MzInOgotICAgICAgICBpbXBv
cnQgY2hyb21pdW1fbGludXgKIAotICAgICAgICBjbGFzcyBHb29nbGVDaHJvbWVMaW51eDMyUG9y
dChjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCk6Ci0gICAgICAgICAgICBkZWYgYmFz
ZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGF0aHMgPSBjaHJvbWl1
bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZikKLSAgICAgICAgICAgICAgICBwYXRocy5pbnNlcnQoMCwgc2VsZi5f
d2Via2l0X2Jhc2VsaW5lX3BhdGgoCi0gICAgICAgICAgICAgICAgICAgICdnb29nbGUtY2hyb21l
LWxpbnV4MzInKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcGF0aHMKLSAgICAgICAgcmV0dXJu
IEdvb2dsZUNocm9tZUxpbnV4MzJQb3J0KCoqa3dhcmdzKQotICAgIGVsaWYgcG9ydF9uYW1lID09
ICdnb29nbGUtY2hyb21lLWxpbnV4NjQnOgorICAgIGlmIHBvcnRfbmFtZSBpbiAoJ2dvb2dsZS1j
aHJvbWUtbGludXgzMicsICdnb29nbGUtY2hyb21lLWxpbnV4NjQnKToKICAgICAgICAgaW1wb3J0
IGNocm9taXVtX2xpbnV4Ci0KLSAgICAgICAgY2xhc3MgR29vZ2xlQ2hyb21lTGludXg2NFBvcnQo
Y2hyb21pdW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQpOgotICAgICAgICAgICAgZGVmIGJhc2Vs
aW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhdGhzID0gY2hyb21pdW1f
bGludXguQ2hyb21pdW1MaW51eFBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoCi0gICAgICAgICAg
ICAgICAgICAgIHNlbGYpCi0gICAgICAgICAgICAgICAgcGF0aHMuaW5zZXJ0KDAsIHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoKAotICAgICAgICAgICAgICAgICAgICAnZ29vZ2xlLWNocm9tZS1s
aW51eDY0JykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhzCi0gICAgICAgIHJldHVybiBH
b29nbGVDaHJvbWVMaW51eDY0UG9ydCgqKmt3YXJncykKKyAgICAgICAgc3VwZXIgPSBjaHJvbWl1
bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydAorICAgICAgICBiYXNlbGluZV9kaXJfbmFtZSA9IHBv
cnRfbmFtZQogICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2dvb2dsZS1jaHJvbWUtbWFj
Jyk6CiAgICAgICAgIGltcG9ydCBjaHJvbWl1bV9tYWMKLQotICAgICAgICBjbGFzcyBHb29nbGVD
aHJvbWVNYWNQb3J0KGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQpOgotICAgICAgICAgICAg
ZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhdGhzID0g
Y2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZikKLSAgICAgICAgICAgICAgICBwYXRocy5pbnNlcnQoMCwgc2Vs
Zi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoCi0gICAgICAgICAgICAgICAgICAgICdnb29nbGUtY2hy
b21lLW1hYycpKQotICAgICAgICAgICAgICAgIHJldHVybiBwYXRocwotICAgICAgICByZXR1cm4g
R29vZ2xlQ2hyb21lTWFjUG9ydCgqKmt3YXJncykKKyAgICAgICAgc3VwZXIgPSBjaHJvbWl1bV9t
YWMuQ2hyb21pdW1NYWNQb3J0CisgICAgICAgIGJhc2VsaW5lX2Rpcl9uYW1lID0gJ2dvb2dsZS1j
aHJvbWUtbWFjJwogICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2dvb2dsZS1jaHJvbWUt
d2luJyk6CiAgICAgICAgIGltcG9ydCBjaHJvbWl1bV93aW4KKyAgICAgICAgc3VwZXIgPSBjaHJv
bWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0CisgICAgICAgIGJhc2VsaW5lX2Rpcl9uYW1lID0gJ2dv
b2dsZS1jaHJvbWUtd2luJworICAgIGVsc2U6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IoJ3Vuc3VwcG9ydGVkIHBvcnQ6ICVzJyAlIHBvcnRfbmFtZSkKKworICAgIHJldHVybiBf
bWFrZShzdXBlciwgYmFzZWxpbmVfZGlyX25hbWUsICoqa3dhcmdzKQorCisKK2RlZiBfbWFrZShz
dXBlciwgYmFzZWxpbmVfZGlyX25hbWUsICoqa3dhcmdzKToKKyAgICBvYmplY3QgPSBzdXBlcigq
Kmt3YXJncykKKworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aCgpOgorICAgICAgICBwYXRo
cyA9IHN1cGVyLmJhc2VsaW5lX3NlYXJjaF9wYXRoKG9iamVjdCkKKyAgICAgICAgcGF0aHMuaW5z
ZXJ0KDAsIG9iamVjdC5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoYmFzZWxpbmVfZGlyX25hbWUpKQor
ICAgICAgICByZXR1cm4gcGF0aHMKIAotICAgICAgICBjbGFzcyBHb29nbGVDaHJvbWVXaW5Qb3J0
KGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpOgotICAgICAgICAgICAgZGVmIGJhc2VsaW5l
X3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhdGhzID0gY2hyb21pdW1fd2lu
LkNocm9taXVtV2luUG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgKLSAgICAgICAgICAgICAgICAg
ICAgc2VsZikKLSAgICAgICAgICAgICAgICBwYXRocy5pbnNlcnQoMCwgc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgoCi0gICAgICAgICAgICAgICAgICAgICdnb29nbGUtY2hyb21lLXdpbicpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBwYXRocwotICAgICAgICByZXR1cm4gR29vZ2xlQ2hyb21l
V2luUG9ydCgqKmt3YXJncykKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1bnN1cHBv
cnRlZCBwb3J0OiAlcycgJSBwb3J0X25hbWUpCisgICAgb2JqZWN0LmJhc2VsaW5lX3NlYXJjaF9w
YXRoID0gYmFzZWxpbmVfc2VhcmNoX3BhdGgKKyAgICByZXR1cm4gb2JqZWN0CmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9j
aHJvbWVfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWVfdW5pdHRlc3QucHkKaW5kZXggODVlOTMzODcyMmFmNjg3
ZGU3YTFlYzMzYjZiMjI0ZGM2ZjllYmU1NC4uZjU2OTg1ODEyZDJkYzJmMmFkYzFjN2VhNGQxOGQy
ZjJkYjUwYTcwNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9nb29nbGVfY2hyb21lX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZV91bml0dGVz
dC5weQpAQCAtNDEsNyArNDEsOSBAQCBjbGFzcyBHZXRHb29nbGVDaHJvbWVQb3J0VGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuX3ZlcmlmeV9iYXNlbGluZV9wYXRoKCdnb29n
bGUtY2hyb21lLXdpbicsICdnb29nbGUtY2hyb21lLXdpbi12aXN0YScpCiAKICAgICBkZWYgX3Zl
cmlmeV9iYXNlbGluZV9wYXRoKHNlbGYsIGV4cGVjdGVkX3BhdGgsIHBvcnRfbmFtZSk6Ci0gICAg
ICAgIHBvcnQgPSBnb29nbGVfY2hyb21lLkdldEdvb2dsZUNocm9tZVBvcnQocG9ydF9uYW1lPXBv
cnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zPU5vbmUpCisgICAgICAgIHBvcnQgPSBnb29nbGVfY2hyb21lLmdldChwb3J0X25h
bWU9cG9ydF9uYW1lKQogICAgICAgICBwYXRoID0gcG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgp
WzBdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcGF0aCwgb3MucGF0aC5zcGxp
dChwYXRoKVsxXSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5t
YWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKaW5kZXggMzI3YjE5ZWU1ZmE1NDUwM2I0
YWZjMjliNzFlMDBlNzliZGE1NmYxYi4uNGVlMzYxZWViMmM1Nzk3ZTczYWJlZWVlOTdlZDhkZGI4
N2QwNDI0OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKQEAgLTM1LDEyICszNSwxMSBA
QCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQogCiAKIGNsYXNzIE1hY1Rlc3QocG9ydF90ZXN0Y2FzZS5Q
b3J0VGVzdENhc2UpOgotICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgb3B0aW9ucz1wb3J0X3Rlc3Rj
YXNlLk1vY2tPcHRpb25zKCkpOgorICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgb3B0aW9ucz1wb3J0
X3Rlc3RjYXNlLm1vY2tfb3B0aW9ucyk6CiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFy
d2luJzoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHBvcnRfb2JqID0gbWFjLk1h
Y1BvcnQob3B0aW9ucz1vcHRpb25zKQogICAgICAgICBwb3J0X29iai5fb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSA9IHBvcnRfb2JqLnJlc3VsdHNfZGlyZWN0b3J5KCkKLSAgICAgICAgcG9ydF9v
YmouX29wdGlvbnMuY29uZmlndXJhdGlvbiA9ICdSZWxlYXNlJwogICAgICAgICByZXR1cm4gcG9y
dF9vYmoKIAogICAgIGRlZiB0ZXN0X3NraXBwZWRfZmlsZV9wYXRocyhzZWxmKToKQEAgLTczLDgg
KzcyLDggQEAgc3ZnL2JhdGlrL3RleHQvc21hbGxGb250cy5zdmcKICAgICAgICAgcG9ydCA9IHNl
bGYubWFrZV9wb3J0KCkKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgc2tpcHBlZF9maWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oc2VsZi5leGFtcGxlX3Nr
aXBwZWRfZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll90ZXN0c19mcm9tX3Nr
aXBwZWRfZmlsZShza2lwcGVkX2ZpbGUpLCBzZWxmLmV4YW1wbGVfc2tpcHBlZF90ZXN0cykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll90ZXN0c19mcm9tX3NraXBwZWRfZmlsZShzZWxm
LmV4YW1wbGVfc2tpcHBlZF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4
YW1wbGVfc2tpcHBlZF90ZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9v
cHRpb25zLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9vcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3YTVkNTczZmFkNDE0ODNiZGNmMmNmYjBiNzRkYzRk
NjZhZmMxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L29wdGlvbnMucHkKQEAgLTAsMCArMSw2NiBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworY2xhc3MgUG9ydE9wdGlvbnMob2JqZWN0KToKKyAg
ICAiIiJBIHN1YnNldCBvZiB0aGUgb3B0aW9ucyBjbGFzcyByZXR1cm5lZCBmcm9tIG9wdHBhcnNl
LgorCisgICAgSXQgY2FuIGJlIHVzZWQgdG8gTW9jayBvdXQgcGFzc2luZyBvcHRpb25zIHRvIHRo
ZSBQb3J0cy4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToK
KyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgICAgICBz
ZWxmLl9fZGljdF9fW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvMik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fID09IG8yLl9fZGljdF9fCisKKyAgICBkZWYgX19p
dGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fLl9faXRlcl9fKCkKKwor
ICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKQorCisgICAgZGVmIF9f
c3RyX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBrZXlzID0gc2VsZi5fX2Rp
Y3RfXy5rZXlzKCkKKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgZm9yIGtleSBpbiBrZXlz
OgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIiVzPSVzIiAlIChrZXksIHJlcHIoc2VsZi5fX2Rp
Y3RfX1trZXldKSkpCisgICAgICAgIHJldHVybiAiUG9ydE9wdGlvbnMoIiArICcsICcuam9pbihh
cmdzKSArICIpIgorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9f
ZGljdF9fLmtleXMoKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBs
ZW4oc2VsZi5fX2RpY3RfXykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvb3B0aW9uc191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvb3B0aW9uc191bml0dGVzdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mNTZmODY5YzkyOGM3OTZjOGNkZGE4MWNlNDgyNTg4ZjU4N2Q3OGE0Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9vcHRpb25zX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsODYgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgdW5pdHRlc3QKK2Zyb20gb3B0aW9ucyBpbXBvcnQgUG9ydE9wdGlvbnMKKworCitjbGFz
cyBQb3J0T3B0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldChz
ZWxmKToKKyAgICAgICAgbyA9IFBvcnRPcHRpb25zKGZvbz0nYmFyJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvLmZvbywgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfa2V5X21pc3Npbmco
c2VsZik6CisgICAgICAgIG8gPSBQb3J0T3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKEF0dHJpYnV0ZUVycm9yLCBsYW1iZGEgeDogeC5mb28sIG8pCisKKyAgICBkZWYgdGVzdF9u
b256ZXJvKHNlbGYpOgorICAgICAgICBvID0gUG9ydE9wdGlvbnMoKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUobykKKworICAgIGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAgbyA9IFBvcnRP
cHRpb25zKCkKKyAgICAgICAgby5mb28gPSAnYmFyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG8uZm9vLCAnYmFyJykKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgbyA9IFBv
cnRPcHRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobyksICJQb3J0T3B0aW9u
cygpIikKKyAgICAgICAgby5mb28gPSAnYmFyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0
cihvKSwgIlBvcnRPcHRpb25zKGZvbz0nYmFyJykiKQorICAgICAgICBvLmJhciA9ICdiYXoiIicK
KyAgICAgICAgby5iYXogPSAiYmFyJyciCisgICAgICAgIHMxID0gIlBvcnRPcHRpb25zKGJhcj0n
YmF6XCJcIicsIGJhej1cImJhcicnXCIsIGZvbz0nYmFyJykiCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3RyKG8pLCBzMSkKKyAgICAgICAgbzEgPSBldmFsKHJlcHIobykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobywgbzEpCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAg
IG8gPSBQb3J0T3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG8pLCAwKQor
CisgICAgICAgIG8uZm9vID0gJ2JhcicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obyks
IDEpCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgbyA9IFBvcnRPcHRp
b25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnZm9vJyBpbiBvKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGhhc2F0dHIobywgJ2ZvbycpKQorCisgICAgICAgIG8uZm9vID0gJ2JhcicK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmb28nIGluIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShoYXNhdHRyKG8sICdmb28nKSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAg
ICAgIG8gPSBQb3J0T3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5rZXlzKCks
IFtdKQorICAgICAgICBvLmZvbyA9ICdiYXInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5r
ZXlzKCksIFsnZm9vJ10pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKaW5kZXggNDc1OTdkNjdjYzI1
YTYzOGE5ZjY0NWE3YjVlMGJlMjlkNjU2MTU1Zi4uOWQ2M2ViNDgzZmNmMzRiZjQzOWU0N2EzMjQw
NDE4ZDU1MzkzNmU5OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQpAQCAtMzIsMjAg
KzMyLDE1IEBAIGltcG9ydCBvcwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAor
aW1wb3J0IG9wdGlvbnMKIAotY2xhc3MgTW9ja09wdGlvbnMob2JqZWN0KToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwKLSAgICAgICAgICAgICAgICAgcmVzdWx0c19kaXJlY3Rvcnk9J2xheW91dC10
ZXN0LXJlc3VsdHMnLAotICAgICAgICAgICAgICAgICB1c2VfYXBhY2hlPVRydWUsCi0gICAgICAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnKToKLSAgICAgICAgc2VsZi5yZXN1bHRz
X2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5Ci0gICAgICAgIHNlbGYudXNlX2FwYWNoZSA9
IHVzZV9hcGFjaGUKLSAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgot
Cittb2NrX29wdGlvbnMgPSBvcHRpb25zLlBvcnRPcHRpb25zKHJlc3VsdHNfZGlyZWN0b3J5PSds
YXlvdXQtdGVzdC1yZXN1bHRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXNlX2FwYWNoZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPSdSZWxlYXNlJykKIAogY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAiIiJUZXN0cyB0aGUgV2ViS2l0IHBvcnQgaW1wbGVtZW50YXRpb24uIiIiCi0g
ICAgZGVmIG1ha2VfcG9ydChzZWxmLCBvcHRpb25zPU1vY2tPcHRpb25zKCkpOgorICAgIGRlZiBt
YWtlX3BvcnQoc2VsZiwgb3B0aW9ucz1tb2NrX29wdGlvbnMpOgogICAgICAgICAiIiJPdmVycmlk
ZSBpbiBzdWJjbGFzcy4iIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAK
QEAgLTYxLDEwICs1Niw3IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgIyBG
SVhNRTogbm90IHN1cmUgd2h5IHRoaXMgc2hvdWxkbid0IGFsd2F5cyBiZSBUcnVlCi0gICAgICAg
ICNzZWxmLmFzc2VydFRydWUocG9ydC5jaGVja19pbWFnZV9kaWZmKCkpCi0gICAgICAgIGlmIG5v
dCBwb3J0LmNoZWNrX2ltYWdlX2RpZmYoKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBz
ZWxmLmFzc2VydFRydWUocG9ydC5jaGVja19pbWFnZV9kaWZmKCkpCiAKICAgICAgICAgZGlyID0g
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAgZmlsZTEgPSBvcy5wYXRoLmpvaW4oZGly
LCAnZmFzdCcsICdjc3MnLCAnYnV0dG9uX2NlbnRlci5wbmcnKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDNi
ODExNjc5OWFmM2NkNGVlYTZlYjFkZmRiOGRhOTA0Y2Q1Zjk4MDAuLmU3OThlMWIxMjExOWE1NTJk
YjVkOTA2MTEyNzg4Mjc0YjEwMTc3NWIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTMwLDcgKzMwLDYgQEAK
ICIiIkR1bW15IFBvcnQgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgdGVzdGluZy4iIiIKIGZyb20g
X19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAotaW1wb3J0IGNvZGVjcwogaW1wb3J0
IGZubWF0Y2gKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtMTQwLDkgKzEzOSwxMCBAQCBjbGFz
cyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgICAgICAgIGRpZmZfZmlsZW5hbWU9
Tm9uZSwgdG9sZXJhbmNlPTApOgogICAgICAgICBkaWZmZWQgPSBhY3R1YWxfY29udGVudHMgIT0g
ZXhwZWN0ZWRfY29udGVudHMKICAgICAgICAgaWYgZGlmZmVkIGFuZCBkaWZmX2ZpbGVuYW1lOgot
ICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihkaWZmX2ZpbGVuYW1lLCAidyIsICJ1dGYtOCIp
IGFzIGRpZmZfZmg6Ci0gICAgICAgICAgICAgICAgZGlmZl9maC53cml0ZSgiPCAlc1xuLS0tXG4+
ICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9jb250ZW50
cywgYWN0dWFsX2NvbnRlbnRzKSkKKyAgICAgICAgICAgIHNlbGYuX3RyZWUud3JpdGVfZmlsZShk
aWZmX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRz
PSI8ICVzXG4tLS1cbj4gJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICAgcmV0dXJuIGRp
ZmZlZAogCiAgICAgZGVmIGV4cGVjdGVkX2NoZWNrc3VtKHNlbGYsIHRlc3QpOgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0X2Zp
bGVzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC90ZXN0X2ZpbGVzX3VuaXR0ZXN0LnB5CmluZGV4IGMzN2ViOTI5MjZlOGRmNTQyMmI3
MDliOGMxMjUyM2ZiNTEyOWIzZjUuLmM4NDZjNzRkMTY0MWIyMWM4MGNlZWMzNjY4OTNhZjA0ODMw
YmEwMDEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvdGVzdF9maWxlc191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3RfZmlsZXNfdW5pdHRlc3QucHkKQEAgLTM1
LDcgKzM1LDcgQEAgaW1wb3J0IHRlc3RfZmlsZXMKIAogY2xhc3MgVGVzdEZpbGVzVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF9ub19wYXRoc19zcGVjaWZpZWQoc2Vs
Zik6Ci0gICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0
KHBvcnRfbmFtZT0ndGVzdC1maWxlcycpCiAgICAgICAgIGxheW91dF90ZXN0c19kaXIgPSBwb3J0
LmxheW91dF90ZXN0c19kaXIoKQogICAgICAgICBwb3J0LmxheW91dF90ZXN0c19kaXIgPSBsYW1i
ZGE6IG9zLnBhdGguam9pbihsYXlvdXRfdGVzdHNfZGlyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdCcsICdodG1sJykKQEAgLTQzLDIz
ICs0MywyMyBAQCBjbGFzcyBUZXN0RmlsZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0ZXN0cywgMCkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfb25l
X3Rlc3Qoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0g
YmFzZS5Qb3J0KHBvcnRfbmFtZT0ndGVzdC1maWxlcycpCiAgICAgICAgICMgVGhpcyBpcyBqdXN0
IGEgdGVzdCBwaWNrZWQgYXQgcmFuZG9tIGJ1dCBrbm93biB0byBleGlzdC4KICAgICAgICAgdGVz
dHMgPSB0ZXN0X2ZpbGVzLmZpbmQocG9ydCwgWydmYXN0L2h0bWwva2V5Z2VuLmh0bWwnXSkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAxKQogCiAgICAgZGVmIHRlc3RfZmlu
ZF9nbG9iKHNlbGYpOgotICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkKKyAgICAgICAgcG9ydCA9
IGJhc2UuUG9ydChwb3J0X25hbWU9J3Rlc3QtZmlsZXMnKQogICAgICAgICB0ZXN0cyA9IHRlc3Rf
ZmlsZXMuZmluZChwb3J0LCBbJ2Zhc3QvaHRtbC9rZXkqJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKHRlc3RzKSwgMSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfd2l0aF9za2lwcGVkX2Rp
cmVjdG9yaWVzKHNlbGYpOgotICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkKKyAgICAgICAgcG9y
dCA9IGJhc2UuUG9ydChwb3J0X25hbWU9J3Rlc3QtZmlsZXMnKQogICAgICAgICB0ZXN0cyA9IHBv
cnQudGVzdHMoJ3VzZXJzY3JpcHRzJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd1c2Vyc2Ny
aXB0cy9yZXNvdXJjZXMvZnJhbWUxLmh0bWwnIG5vdCBpbiB0ZXN0cykKIAogICAgIGRlZiB0ZXN0
X2ZpbmRfd2l0aF9za2lwcGVkX2RpcmVjdG9yaWVzXzIoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBi
YXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KHBvcnRfbmFtZT0ndGVzdC1maWxl
cycpCiAgICAgICAgIHRlc3RzID0gdGVzdF9maWxlcy5maW5kKHBvcnQsIFsndXNlcnNjcmlwdHMv
cmVzb3VyY2VzJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIHNldChbXSkpCiAK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvdHJlZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvdHJlZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTc2MjQ1MTRjYTBjYmYzMmE5OGNmZGEzOTJkNThlY2Rl
N2NkMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90cmVlLnB5CkBAIC0wLDAgKzEsMjI3IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJXcmFwcGVyIG9iamVjdHMgZm9yIHRoZSBz
b3VyY2UgdHJlZSBhbmQgdXRpbGl0eSByb3V0aW5lcy4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGlt
cG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgb3MKK2ltcG9ydCBz
eXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d1dGlscworCisKK19s
b2cgPSBsb2d1dGlscy5nZXRfbG9nZ2VyKF9fZmlsZV9fKQorCisjCisjIFRoaXMgaXMgdXNlZCB0
byByZWNvcmQgaWYgd2UndmUgYWxyZWFkeSBoaXQgdGhlIGZpbGVzeXN0ZW0gdG8gbG9vaworIyBm
b3IgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIFdlIGNhY2hlIHRoaXMgdG8gc3BlZWQgdXAgdGhl
IHVuaXQgdGVzdHMsCisjIGJ1dCB0aGlzIGNhbiBiZSByZXNldCB3aXRoIGNsZWFyX2NhY2hlZF9j
b25maWd1cmF0aW9uKCkuCisjCitfZGV0ZXJtaW5lZF9jb25maWd1cmF0aW9uID0gTm9uZQorCisK
K2RlZiBjbGVhcl9jYWNoZWRfY29uZmlndXJhdGlvbigpOgorICAgIGdsb2JhbCBfZGV0ZXJtaW5l
ZF9jb25maWd1cmF0aW9uCisgICAgX2RldGVybWluZWRfY29uZmlndXJhdGlvbiA9IC0xCisKKwor
Y2xhc3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRw
dXQ9JycsIGV4aXRfY29kZT0wLCBleGNlcHRpb249Tm9uZSk6CisgICAgICAgIHNlbGYuX291dHB1
dCA9IG91dHB1dAorICAgICAgICBzZWxmLl9leGl0X2NvZGUgPSBleGl0X2NvZGUKKyAgICAgICAg
c2VsZi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCisKKyAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwg
YXJnX2xpc3QsIHJldHVybl9leGl0X2NvZGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGRl
Y29kZV9vdXRwdXQ9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb246CisgICAgICAg
ICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29kZToK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9leGl0X2NvZGUKKyAgICAgICAgcmV0dXJuIHNlbGYu
X291dHB1dAorCisKK2NsYXNzIFRyZWUob2JqZWN0KToKKyAgICBfRkxBR1NfRlJPTV9DT05GSUdV
UkFUSU9OUyA9IHsKKyAgICAgICAgIkRlYnVnIjogIi0tZGVidWciLAorICAgICAgICAiUmVsZWFz
ZSI6ICItLXJlbGVhc2UiLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRp
dmUpOgorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBleGVjdXRpdmUKKyAgICAgICAgc2VsZi5f
d2Via2l0X2Jhc2VfZGlyID0gTm9uZQorICAgICAgICBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRp
b24gPSBOb25lCisgICAgICAgIHNlbGYuX2J1aWxkX2RpcmVjdG9yaWVzID0ge30KKworICAgIGRl
ZiBidWlsZF9kaXJlY3Rvcnkoc2VsZiwgY29uZmlndXJhdGlvbik6CisgICAgICAgICIiIlJldHVy
bnMgdGhlIHBhdGggdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgZ2l2ZW4gY29uZmlndXJhdGlv
bi4iIiIKKyAgICAgICAgaWYgY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgIGZsYWdzID0gWyIt
LWNvbmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fRkxBR1NfRlJPTV9D
T05GSUdVUkFUSU9OU1tjb25maWd1cmF0aW9uXV0KKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24g
PSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9ICIiCisgICAg
ICAgICAgICBmbGFncyA9IFsiLS10b3AtbGV2ZWwiXQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9i
dWlsZF9kaXJlY3Rvcmllcy5nZXQoY29uZmlndXJhdGlvbik6CisgICAgICAgICAgICBhcmdzID0g
WyJwZXJsIiwgc2VsZi5fc2NyaXB0X3BhdGgoIndlYmtpdC1idWlsZC1kaXJlY3RvcnkiKV0gKyBm
bGFncworICAgICAgICAgICAgc2VsZi5fYnVpbGRfZGlyZWN0b3JpZXNbY29uZmlndXJhdGlvbl0g
PSAoCisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGFyZ3MpLnJz
dHJpcCgpKQorCisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9kaXJlY3Rvcmllc1tjb25maWd1
cmF0aW9uXQorCisgICAgZGVmIGJ1aWxkX2R1bXByZW5kZXJ0cmVlKHNlbGYsIGNvbmZpZ3VyYXRp
b24pOgorICAgICAgICAiIiJCdWlsZHMgRFJUIGluIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLgor
CisgICAgICAgIFJldHVybnMgd2hldGhlciBidWlsZCB3YXMgc3VjY2Vzc2Z1bCBvciBpcyB1cC10
by1kYXRlLgorCisgICAgICAgICIiIgorICAgICAgICBmbGFnID0gc2VsZi5fRkxBR1NfRlJPTV9D
T05GSUdVUkFUSU9OU1tjb25maWd1cmF0aW9uXQorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICBzZWxmLl9zY3JpcHRfcGF0aCgiYnVp
bGQtZHVtcHJlbmRlcnRyZWUiKSwgZmxhZ10sCisgICAgICAgICAgICByZXR1cm5fZXhpdF9jb2Rl
PVRydWUpCisKKyAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0cmVlLgorCisgICAg
ICAgIFJldHVybnMgdGhlIHZhbHVlIHNldCBieSAnc2V0LXdlYmtpdC1jb25maWd1cmF0aW9uJywg
b3IgIlJlbGVhc2UiCisgICAgICAgIGlmIHRoYXQgaGFzIG5vdCBiZWVuIHNldC4gVGhpcyBtaXJy
b3JzIHRoZSBsb2dpYyBpbiB3ZWJraXRkaXJzLnBtLgorCisgICAgICAgICIiIgorICAgICAgICBp
ZiBub3Qgc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uOgorICAgICAgICAgICAgc2VsZi5fZGVm
YXVsdF9jb25maWd1cmF0aW9uID0gc2VsZi5fZGV0ZXJtaW5lX2NvbmZpZ3VyYXRpb24oKQorICAg
ICAgICAgICAgaWYgKHNlbGYuX2RlZmF1bHRfY29uZmlndXJhdGlvbiBub3QgaW4KKyAgICAgICAg
ICAgICAgICBzZWxmLl9GTEFHU19GUk9NX0NPTkZJR1VSQVRJT05TKToKKyAgICAgICAgICAgICAg
ICBfbG9nLndhcm4oIkNvbmZpZ3VyYXRpb24gXCIlc1wiIGlzIG5vdCBhIHJlY29nbml6ZWQgdmFs
dWUuXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9jb25maWd1
cmF0aW9uKQorICAgICAgICAgICAgICAgIF9sb2cud2FybigiU2NyaXB0cyBtYXkgZmFpbC4gICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSAnc2V0LXdlYmtpdC1jb25maWd1cmF0aW9u
IC0taGVscCcuIikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRp
b246CisgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9uID0gIlJlbGVh
c2UiCisgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb24KKworICAgIGRl
ZiB3ZWJraXRfYmFzZV9kaXIoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGFic29sdXRl
IHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgV2ViS2l0IHRyZWUuCisKKyAgICAgICAgUmFpc2VzIGFu
IEFzc2VydGlvbkVycm9yIGlmIHRoZSB0b3AgZGlyIGNhbid0IGJlIGRldGVybWluZWQuCisKKyAg
ICAgICAgIiIiCisgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvbid0IHVzZSBjb21tb24vY2hlY2tv
dXQvc2NtIGZvciB0aGlzIGluIG9yZGVyIHRvCisgICAgICAgICMgYWxsb3cgdGhlIGxheW91dCB0
ZXN0cyB0byBiZSBydW4gd2l0aG91dCBiZWluZyBpbiBhbiBhY3R1YWwgY2hlY2tvdXQuCisgICAg
ICAgIGlmIG5vdCBzZWxmLl93ZWJraXRfYmFzZV9kaXI6CisgICAgICAgICAgICB0aGlzX2RpciA9
IG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkKKyAgICAgICAgICAgIGluZGV4ID0gdGhpc19k
aXIuZmluZCgiV2ViS2l0VG9vbHMiKQorICAgICAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGly
ID0gdGhpc19kaXJbMDppbmRleF0KKyAgICAgICAgcmV0dXJuIHNlbGYuX3dlYmtpdF9iYXNlX2Rp
cgorCisgICAgZGVmIHBhdGhfZnJvbV93ZWJraXRfYmFzZShzZWxmLCAqY29tcHMpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB3ZWJraXRfYmFzZV9kaXIgKyBjb21w
cy4iIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLndlYmtpdF9iYXNlX2Rpcigp
LCAqY29tcHMpCisKKyAgICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJSZXR1
cm5zIHdoZXRoZXIgdGhlIHBhdGggZXhpc3RzIG9yIG5vdC4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgcGF0aDogY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLgorCisgICAgICAgIFRo
aXMgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIG9zLnBhdGguZXhpc3RzKCkuCisKKyAgICAgICAg
IiIiCisgICAgICAgICMgRklYTUU6IGFzc2VydCB0aGF0IHRoZSBmaWxlcyBhcmUgdW5kZXIgdGhl
IHRvcCBvZiB0aGUgdHJlZT8KKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHBhdGgpCisK
KyAgICBkZWYgcmVhZF9maWxlKHNlbGYsIGZpbGVuYW1lLCBlbmNvZGluZz1Ob25lKToKKyAgICAg
ICAgIiIiUmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIGxvY2F0
aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWxlbmFtZTogY2FuIGJlIGFic29s
dXRlIG9yIHJlbGF0aXZlLgorICAgICAgICAgICAgZW5jb2Rpbmc6IHBhc3NlZCB0byBjb2RlYy5v
cGVuIChkZWZhdWx0cyB0byBOb25lKQorICAgICAgICBSYWlzZXMgSU9FcnJvciBpZiB0aGUgZmls
ZSBkb2Vzbid0IGV4aXN0IG9yIGFub3RoZXIgZXJyb3Igb2NjdXJzLgorCisgICAgICAgICIiIgor
ICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCBlbmNvZGluZz1lbmNvZGluZykgYXMg
ZjoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorCisgICAgZGVmIHdyaXRlX2ZpbGUoc2Vs
ZiwgZmlsZW5hbWUsIGNvbnRlbnRzLCBlbmNvZGluZz1Ob25lKToKKyAgICAgICAgIiIiV3JpdGUg
dGhlIGNvbnRlbnRzIHRvIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgZmlsZW5hbWU6IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2
ZS4KKyAgICAgICAgICAgIGNvbnRlbnRzOiBzdHVmZiB0byB3cml0ZQorICAgICAgICAgICAgZW5j
b2Rpbmc6IHBhc3NlZCB0byBjb2RlYy5vcGVuIChkZWZhdWx0cyB0byBOb25lKQorICAgICAgICBS
YWlzZXMgSU9FcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGFub3RoZXIgZXJyb3Ig
b2NjdXJzLgorCisgICAgICAgICIiIgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1l
LCAidyIsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjb250
ZW50cykKKworICAgIGRlZiBfc2NyaXB0X3BhdGgoc2VsZiwgc2NyaXB0X25hbWUpOgorICAgICAg
ICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYud2Via2l0X2Jhc2VfZGlyKCksICJXZWJLaXRUb29s
cyIsICJTY3JpcHRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSkK
KworICAgIGRlZiBfZGV0ZXJtaW5lX2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgICMgVGhp
cyBtaXJyb3JzIHRoZSBsb2dpYyBpbiB3ZWJraXRkaXJzLnBtOmRldGVybWluZUNvbmZpZ3VyYXRp
b24oKS4KKyAgICAgICAgZ2xvYmFsIF9kZXRlcm1pbmVkX2NvbmZpZ3VyYXRpb24KKyAgICAgICAg
aWYgX2RldGVybWluZWRfY29uZmlndXJhdGlvbiA9PSAtMToKKyAgICAgICAgICAgIGNvbnRlbnRz
ID0gTm9uZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbl9wYXRoID0gb3MucGF0aC5qb2luKHNl
bGYuYnVpbGRfZGlyZWN0b3J5KE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJDb25maWd1cmF0aW9uIikKKyAgICAgICAgICAgIGlmIHNlbGYuZXhp
c3RzKGNvbmZpZ3VyYXRpb25fcGF0aCk6CisgICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxm
LnJlYWRfZmlsZShjb25maWd1cmF0aW9uX3BhdGgsICJ1dGYtOCIpLnJzdHJpcCgpCisgICAgICAg
ICAgICAgICAgaWYgY29udGVudHMgPT0gIkRlcGxveW1lbnQiOgorICAgICAgICAgICAgICAgICAg
ICBjb250ZW50cyA9ICJSZWxlYXNlIgorICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRzID09ICJE
ZXZlbG9wbWVudCI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gIkRlYnVnIgorICAg
ICAgICAgICAgX2RldGVybWluZWRfY29uZmlndXJhdGlvbiA9IGNvbnRlbnRzCisgICAgICAgIHJl
dHVybiBfZGV0ZXJtaW5lZF9jb25maWd1cmF0aW9uCisKKworY2xhc3MgTW9ja1RyZWUoVHJlZSk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dGl2ZSwgZmlsZXM9e30sIGNvbmZpZ3VyYXRp
b249Tm9uZSk6CisgICAgICAgIFRyZWUuX19pbml0X18oc2VsZiwgZXhlY3V0aXZlKQorICAgICAg
ICBzZWxmLl9maWxlcyA9IGZpbGVzCisgICAgICAgIGlmIGNvbmZpZ3VyYXRpb246CisgICAgICAg
ICAgICBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisKKyAgICBk
ZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoIGluIHNlbGYuX2ZpbGVzOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzW3BhdGhdIGlzIG5vdCBOb25lCisgICAgICAg
IHJldHVybiBUcmVlLmV4aXN0cyhzZWxmLCBwYXRoKQorCisgICAgZGVmIHJlYWRfZmlsZShzZWxm
LCBwYXRoLCBlbmNvZGluZz1Ob25lKToKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLl9maWxlczoK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maWxlc1twYXRoXQorICAgICAgICByZXR1cm4gVHJl
ZS5yZWFkX2ZpbGUoc2VsZiwgcGF0aCwgZW5jb2RpbmcpCisKKyAgICBkZWYgd3JpdGVfZmlsZShz
ZWxmLCBwYXRoLCBjb250ZW50cywgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgIGlmIHBhdGggaW4g
c2VsZi5fZmlsZXM6CisgICAgICAgICAgICBzZWxmLl9maWxlc1twYXRoXSA9IGNvbnRlbnRzCisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdHJlZV91
bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvdHJlZV91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOGY4MDk0ZWJjZDYxNDg4YTEyZDVjNzcx
YTJkYzllNDYzNzc4ZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90cmVlX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTYy
IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdHJlZSBpbXBvcnQgTW9ja0V4ZWN1dGl2
ZSwgTW9ja1RyZWUsIFRyZWUsIGNsZWFyX2NhY2hlZF9jb25maWd1cmF0aW9uCisKKworY2xhc3Mg
VHJlZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2J1aWxkX2RpcmVjdG9y
eV90b3BsZXZlbChzZWxmKToKKyAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUob3V0cHV0PSJ0b3Bs
ZXZlbCIpCisgICAgICAgIHQgPSBNb2NrVHJlZShlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHQuYnVpbGRfZGlyZWN0b3J5KE5vbmUpLCAndG9wbGV2ZWwnKQorCisgICAgICAgICMgVGVzdCBh
Z2FpbiB0byBjaGVjayBjYWNoaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5idWlsZF9k
aXJlY3RvcnkoTm9uZSksICd0b3BsZXZlbCcpCisKKyAgICBkZWYgdGVzdF9idWlsZF9kaXJlY3Rv
cnlfX3JlbGVhc2Uoc2VsZik6CisgICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0icmVs
ZWFzZSIpCisgICAgICAgIHQgPSBNb2NrVHJlZShlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHQuYnVpbGRfZGlyZWN0b3J5KCdSZWxlYXNlJyksICdyZWxlYXNlJykKKworICAgIGRlZiB0ZXN0
X2J1aWxkX2RpcmVjdG9yeV9fZGVidWcoc2VsZik6CisgICAgICAgIGUgPSBNb2NrRXhlY3V0aXZl
KG91dHB1dD0iZGVidWciKQorICAgICAgICB0ID0gTW9ja1RyZWUoZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCh0LmJ1aWxkX2RpcmVjdG9yeSgnRGVidWcnKSwgJ2RlYnVnJykKKworICAgIGRl
ZiB0ZXN0X2J1aWxkX2RpcmVjdG9yeV9fdW5rbm93bihzZWxmKToKKyAgICAgICAgZSA9IE1vY2tF
eGVjdXRpdmUob3V0cHV0PSJ1bmtub3duIikKKyAgICAgICAgdCA9IE1vY2tUcmVlKGUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB0LmJ1aWxkX2RpcmVjdG9yeSwgJ1Vua25v
d24nKQorCisgICAgZGVmIHRlc3RfYnVpbGRfZHVtcHJlbmRlcnRyZWUoc2VsZik6CisgICAgICAg
IGUgPSBNb2NrRXhlY3V0aXZlKGV4aXRfY29kZT0wKQorICAgICAgICB0ID0gTW9ja1RyZWUoZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuYnVpbGRfZHVtcHJlbmRlcnRyZWUoIkRlYnVnIikp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmJ1aWxkX2R1bXByZW5kZXJ0cmVlKCJSZWxlYXNl
IikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB0LmJ1aWxkX2R1bXByZW5k
ZXJ0cmVlLCAiVW5rbm93biIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbmZpZ3VyYXRpb24o
c2VsZik6CisgICAgICAgIGUgPSBNb2NrRXhlY3V0aXZlKG91dHB1dD0nZm9vJykKKyAgICAgICAg
Y29uZl9wYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnQ29uZmlndXJhdGlvbicpCisKKyAgICAg
ICAgdCA9IE1vY2tUcmVlKGUsIGZpbGVzPXtjb25mX3BhdGg6IE5vbmV9KQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJSZWxlYXNlIikKKworICAg
ICAgICB0ID0gTW9ja1RyZWUoZSwgZmlsZXM9e2NvbmZfcGF0aDogIlJlbGVhc2UifSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiUmVsZWFzZSIp
CisKKyAgICAgICAgY2xlYXJfY2FjaGVkX2NvbmZpZ3VyYXRpb24oKQorICAgICAgICB0ID0gTW9j
a1RyZWUoZSwgZmlsZXM9e2NvbmZfcGF0aDogIkRlYnVnIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwodC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgIkRlYnVnIikKKworICAgICAgICBjbGVh
cl9jYWNoZWRfY29uZmlndXJhdGlvbigpCisgICAgICAgIHQgPSBNb2NrVHJlZShlLCBmaWxlcz17
Y29uZl9wYXRoOiAiVW5rbm93biJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZGVmYXVs
dF9jb25maWd1cmF0aW9uKCksICJVbmtub3duIikKKworICAgICAgICBjbGVhcl9jYWNoZWRfY29u
ZmlndXJhdGlvbigpCisgICAgICAgIHQgPSBNb2NrVHJlZShlLCBmaWxlcz17Y29uZl9wYXRoOiAi
RGV2ZWxvcG1lbnQifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmRlZmF1bHRfY29uZmln
dXJhdGlvbigpLCAiRGVidWciKQorCisgICAgICAgIGNsZWFyX2NhY2hlZF9jb25maWd1cmF0aW9u
KCkKKyAgICAgICAgdCA9IE1vY2tUcmVlKGUsIGZpbGVzPXtjb25mX3BhdGg6ICJEZXBsb3ltZW50
In0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwg
IlJlbGVhc2UiKQorCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICAjIFRlY2hu
aWNhbGx5IHRoaXMgY291bGQgYmUgYSByZWd1bGFyIFRyZWUoKSwgYnV0IHdlIHVzZSB0aGlzCisg
ICAgICAgICMgdG8gaGl0IHRoZSBjb3ZlcmFnZSBvbiBNb2NrVHJlZSgpIGFzIHdlbGwuCisgICAg
ICAgIHQgPSBNb2NrVHJlZShOb25lKQorICAgICAgICBwYXRoID0gdC5wYXRoX2Zyb21fd2Via2l0
X2Jhc2UoJ1dlYktpdFRvb2xzJywgJ1NjcmlwdHMnLCAnd2Via2l0cHknLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dF90ZXN0cycsICdwb3J0JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmVlX3VuaXR0ZXN0LnB5JykKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZXhpc3RzKHBhdGgpKQorCisgICAgICAgIHBhdGggPSB0
LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRw
eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0X3Rlc3Rz
JywgJ3BvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3Np
bmcnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuZXhpc3RzKHBhdGgpKQorCisgICAgZGVm
IHRlc3RfcmVhZF9maWxlKHNlbGYpOgorICAgICAgICAjIFRlY2huaWNhbGx5IHRoaXMgY291bGQg
YmUgYSByZWd1bGFyIFRyZWUoKSwgYnV0IHdlIHVzZSB0aGlzCisgICAgICAgICMgdG8gaGl0IHRo
ZSBjb3ZlcmFnZSBvbiBNb2NrVHJlZSgpIGFzIHdlbGwuCisgICAgICAgIHQgPSBNb2NrVHJlZShO
b25lKQorICAgICAgICBwYXRoID0gdC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYktpdFRvb2xz
JywgJ1NjcmlwdHMnLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2xheW91dF90ZXN0cycsICdwb3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0cmVlX3VuaXR0ZXN0LnB5JykKKyAgICAgICAgY29udGVudHMgPSB0
LnJlYWRfZmlsZShwYXRoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1NPTUVfUkVBTExZX1VO
TElLRUxZX1NUUklORycgaW4gY29udGVudHMpCisKKyAgICAgICAgY29udGVudHMgPSB0LnJlYWRf
ZmlsZShwYXRoLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1NP
TUVfUkVBTExZX1VOTElLRUxZX1NUUklORycgaW4gY29udGVudHMpCisKKyAgICAgICAgcGF0aCA9
IHQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJLaXRUb29scycsICdTY3JpcHRzJywgJ3dlYmtp
dHB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRfdGVz
dHMnLCAncG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlz
c2luZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHQucmVhZF9maWxlLCBw
YXRoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbW9ja2VkX2ZpbGUoc2VsZik6CisgICAgICAgICMg
VGVzdCBmb3IgYSBmaWxlIGxpc3RlZCBpbiB0aGUgTW9jayBmaWxlIHNldC4KKyAgICAgICAgIyBN
YWtlIHN1cmUgaXQgZG9lc24ndCByZWFsbHkgZXhpc3QuCisgICAgICAgIHJlYWxfdHJlZSA9IFRy
ZWUoZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUoKSkKKyAgICAgICAgcGF0aCA9IHJlYWxfdHJlZS5w
YXRoX2Zyb21fd2Via2l0X2Jhc2UoInRyZWVfdW5pdHRlc3QudHh0IikKKyAgICAgICAgdCA9IE1v
Y2tUcmVlKGV4ZWN1dGl2ZT1Nb2NrRXhlY3V0aXZlKCksCisgICAgICAgICAgICAgICAgICAgICBm
aWxlcz17cGF0aDogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlz
dHMocGF0aCkpCisKKyAgICAgICAgdC53cml0ZV9maWxlKHBhdGgsICJoZWxsbyIpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodC5yZWFkX2ZpbGUocGF0aCksICJoZWxsbyIpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocGF0aCkpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHQud3JpdGVfZmlsZSwgIm1pc3NpbmdfZmlsZSIsICJo
ZWxsbyIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9hY3R1YWxfZmlsZShzZWxmKToKKyAgICAgICAg
dCA9IFRyZWUoZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUoKSkKKworICAgICAgICB0cnk6CisgICAg
ICAgICAgICBmbmFtZSA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3RyZWVfdW5pdHRlc3RfJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcj10LnBhdGhfZnJvbV93ZWJr
aXRfYmFzZSgpKQorICAgICAgICAgICAgdC53cml0ZV9maWxlKGZuYW1lLCAnaGVsbG8nKQorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlYWRfZmlsZShmbmFtZSksICdoZWxsbycpCisg
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm5hbWUpKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorCisgICAgZGVmIHRlc3Rf
d2Via2l0X2Jhc2VfZGlyKHNlbGYpOgorICAgICAgICB0ID0gVHJlZShOb25lKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUodC53ZWJraXRfYmFzZV9kaXIoKSkKKworICAgIGRlZiB0ZXN0X3BhdGhf
ZnJvbV93ZWJraXRfYmFzZShzZWxmKToKKyAgICAgICAgdCA9IFRyZWUoTm9uZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdmb28nKSkKKworaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkK
aW5kZXggN2VjODE1YThlY2YwZDYwZGJkZDcxNGQ5ZGZhYWZmNWNlOGI5NDU1Zi4uZjk5ZTRiZjFm
ZDc0M2YzNmQ4MzUwYjJlZWFmNTUwY2U0ZjM1MjkyYyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKQEAgLTMz
LDcgKzMzLDYgQEAKIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCi1p
bXBvcnQgY29kZWNzCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKQEAgLTQ2
LDExICs0NSwxMyBAQCBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHNo
dXRpbAogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUKIAotaW1wb3J0IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3NwYXRoIGFzIG9zcGF0aAot
aW1wb3J0IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmJhc2UgYXMgYmFzZQotaW1wb3J0IHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnNlcnZlcl9wcm9jZXNzIGFzIHNlcnZlcl9wcm9jZXNz
CitpbXBvcnQgYmFzZQoraW1wb3J0IHNlcnZlcl9wcm9jZXNzCitmcm9tIHRyZWUgaW1wb3J0IFRy
ZWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0
aXZlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG9zcGF0aAogCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LndlYmtpdCIpCiAK
QEAgLTg0LDEwICs4NSw3IEBAIGNsYXNzIFdlYktpdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAg
cmV0dXJuICcnCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcihzZWxmKToKLSAgICAgICAgcmV0dXJu
IG5vdCBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgc2VsZi5zY3Jp
cHRfcGF0aCgiYnVpbGQtZHVtcHJlbmRlcnRyZWUiKSwKLSAgICAgICAgICAgIHNlbGYuZmxhZ19m
cm9tX2NvbmZpZ3VyYXRpb24oc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uKSwKLSAgICAgICAg
XSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJlZS5idWls
ZF9kdW1wcmVuZGVydHJlZSgpCiAKICAgICBkZWYgX2NoZWNrX2RyaXZlcihzZWxmKToKICAgICAg
ICAgZHJpdmVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2RyaXZlcigpCkBAIC0yOTQsOSArMjkyLDEw
IEBAIGNsYXNzIFdlYktpdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgdW5zdXBwb3J0ZWRfZmVh
dHVyZV90ZXN0cyA9IHNlbGYuX3NraXBwZWRfdGVzdHNfZm9yX3Vuc3VwcG9ydGVkX2ZlYXR1cmVz
KCkKICAgICAgICAgcmV0dXJuIGRpc2FibGVkX2ZlYXR1cmVfdGVzdHMgKyB3ZWJhcmNoaXZlX3Rl
c3RzICsgdW5zdXBwb3J0ZWRfZmVhdHVyZV90ZXN0cwogCi0gICAgZGVmIF90ZXN0c19mcm9tX3Nr
aXBwZWRfZmlsZShzZWxmLCBza2lwcGVkX2ZpbGUpOgorICAgIGRlZiBfdGVzdHNfZnJvbV9za2lw
cGVkX2ZpbGUoc2VsZiwgY29udGVudHMpOgogICAgICAgICB0ZXN0c190b19za2lwID0gW10KLSAg
ICAgICAgZm9yIGxpbmUgaW4gc2tpcHBlZF9maWxlLnJlYWRsaW5lcygpOgorICAgICAgICAjIEZJ
WE1FOiBkb2VzIHRoaXMgbmVlZCB0byBoYW5kbGUgQ1JMRiBhcyB3ZWxsPworICAgICAgICBmb3Ig
bGluZSBpbiBjb250ZW50cy5zcGxpdCgnXG4nKToKICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0
cmlwKCkKICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpIG9yIG5vdCBsZW4obGlu
ZSk6CiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTMxMywxNiArMzEyLDE1IEBAIGNsYXNz
IFdlYktpdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0
cyhmaWxlbmFtZSk6CiAgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJGYWlsZWQgdG8gb3BlbiBT
a2lwcGVkIGZpbGU6ICVzIiAlIGZpbGVuYW1lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0g
ICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCAiciIsICJ1dGYtOCIpIGFzIHNr
aXBwZWRfZmlsZToKLSAgICAgICAgICAgICAgICB0ZXN0c190b19za2lwLmV4dGVuZChzZWxmLl90
ZXN0c19mcm9tX3NraXBwZWRfZmlsZShza2lwcGVkX2ZpbGUpKQorICAgICAgICAgICAgY29udGVu
dHMgPSBzZWxmLl90cmVlLnJlYWRfZmlsZShmaWxlbmFtZSwgInV0Zi04IikKKyAgICAgICAgICAg
IHRlc3RzX3RvX3NraXAuZXh0ZW5kKHNlbGYuX3Rlc3RzX2Zyb21fc2tpcHBlZF9maWxlKGNvbnRl
bnRzKSkKICAgICAgICAgcmV0dXJuIHRlc3RzX3RvX3NraXAKIAogICAgIGRlZiB0ZXN0X2V4cGVj
dGF0aW9ucyhzZWxmKToKICAgICAgICAgIyBUaGUgV2ViS2l0IG1hYyBwb3J0IHVzZXMgYSBjb21i
aW5hdGlvbiBvZiBhIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUKICAgICAgICAgIyBhbmQgJ1NraXBw
ZWQnIGZpbGVzLgogICAgICAgICBleHBlY3RhdGlvbnNfcGF0aCA9IHNlbGYucGF0aF90b190ZXN0
X2V4cGVjdGF0aW9uc19maWxlKCkKLSAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihleHBlY3RhdGlv
bnNfcGF0aCwgInIiLCAidXRmLTgiKSBhcyBmaWxlOgotICAgICAgICAgICAgcmV0dXJuIGZpbGUu
cmVhZCgpICsgc2VsZi5fc2tpcHMoKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJlZS5yZWFkX2Zp
bGUoZXhwZWN0YXRpb25zX3BhdGgsICJ1dGYtOCIpICsgc2VsZi5fc2tpcHMoKQogCiAgICAgZGVm
IF9za2lwcyhzZWxmKToKICAgICAgICAgIyBFYWNoIFNraXBwZWQgZmlsZSBjb250YWlucyBhIGxp
c3Qgb2YgZmlsZXMKQEAgLTM1NCwxMCArMzUyLDggQEAgY2xhc3MgV2ViS2l0UG9ydChiYXNlLlBv
cnQpOgogCiAgICAgZGVmIF9idWlsZF9wYXRoKHNlbGYsICpjb21wcyk6CiAgICAgICAgIGlmIG5v
dCBzZWxmLl9jYWNoZWRfYnVpbGRfcm9vdDoKLSAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9idWls
ZF9yb290ID0gc2VsZi5fd2Via2l0X2J1aWxkX2RpcmVjdG9yeShbCi0gICAgICAgICAgICAgICAg
Ii0tY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICAgICAgc2VsZi5mbGFnX2Zyb21fY29uZmln
dXJhdGlvbihzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24pLAotICAgICAgICAgICAgXSkKKyAg
ICAgICAgICAgIHNlbGYuX2NhY2hlZF9idWlsZF9yb290ID0gc2VsZi5fdHJlZS5idWlsZF9kaXJl
Y3RvcnkoCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBvcy5wYXRoLmpvaW4oc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QsICpjb21wcykKIAogICAg
IGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dpbl91bml0dGVzdC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2luX3VuaXR0ZXN0LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5MjcxMGQyNTMyMWQ5MzRhNGQ3OWFjYmMyOGQ3ZGRmNTkzODIzZTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dpbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCB3aW4KK2ltcG9ydCBwb3J0X3Rlc3Rj
YXNlCisKKworY2xhc3MgV2luVGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6CisgICAg
ZGVmIG1ha2VfcG9ydChzZWxmLCBvcHRpb25zPXBvcnRfdGVzdGNhc2UubW9ja19vcHRpb25zKToK
KyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcG9ydF9vYmogPSB3aW4uV2luUG9ydChvcHRp
b25zPW9wdGlvbnMpCisgICAgICAgIHBvcnRfb2JqLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
ID0gcG9ydF9vYmoucmVzdWx0c19kaXJlY3RvcnkoKQorICAgICAgICByZXR1cm4gcG9ydF9vYmoK
KworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggOWEwZDI0Yzg2NmFlMWNiOGEyMzZjNDgwYjViNTNl
NTU5OTlkZDE2NS4uZDFjZjgwOGYwNzFiMGYzMTRiZTIzZDdiZjVhNmRiMTNiNzgzZWY2OCAxMDA3
NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC00MzAsNyArNDMwLDcgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKIAogICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gc2VsZi5wYXJzZV9leHBl
Y3RhdGlvbnMoCiAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC50ZXN0X3BsYXRmb3JtX25hbWUo
KSwKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0gJ0RlYnVn
JykKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmNvbmZpZ3VyYXRpb24oKSA9PSAnRGVidWcn
KQogCiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KGZpbGVzKQogICAgICAgICAg
ICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gZmlsZXMKQEAgLTk2Niw3ICs5NjYsNyBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZToKICAg
ICAgICAgICAgIHAucHJpbnRfY29uZmlnKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuYmFzZWxpbmVfcGF0aCgpKQot
ICAgICAgICBwLnByaW50X2NvbmZpZygiVXNpbmcgJXMgYnVpbGQiICUgc2VsZi5fb3B0aW9ucy5j
b25maWd1cmF0aW9uKQorICAgICAgICBwLnByaW50X2NvbmZpZygiVXNpbmcgJXMgYnVpbGQiICUg
c2VsZi5fcG9ydC5jb25maWd1cmF0aW9uKCkpCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4
ZWxfdGVzdHM6CiAgICAgICAgICAgICBwLnByaW50X2NvbmZpZygiUGl4ZWwgdGVzdHMgZW5hYmxl
ZCIpCiAgICAgICAgIGVsc2U6CkBAIC0xMzk3LDcgKzEzOTcsNyBAQCBkZWYgcnVuKHBvcnQsIG9w
dGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgIGlmIG9wdGlv
bnMubGludF90ZXN0X2ZpbGVzOgogICAgICAgICAgICAgcmV0dXJuIHRlc3RfcnVubmVyLmxpbnQo
KQogICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocG9ydC50ZXN0X3BsYXRm
b3JtX25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMuY29uZmlndXJhdGlvbiA9PSAnRGVidWcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9ydC5jb25maWd1cmF0aW9uKCkgPT0gJ0RlYnVnJykKIAogICAgICAgICBw
cmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKICAgICAgICAgaWYgbm90
IHBvcnQuY2hlY2tfYnVpbGQodGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKQEAgLTE0MjIsOSAr
MTQyMiw2IEBAIGRlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6
CiAgICAgICAgICMgRklYTUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1
c2luZyBjcHVfY291bnQgKyAxLgogICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IHN0
cihwb3J0X29iai5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKQogCi0gICAgaWYgbm90IG9wdGlv
bnMuY29uZmlndXJhdGlvbjoKLSAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gcG9ydF9v
YmouZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKLQogICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHMg
aXMgTm9uZToKICAgICAgICAgb3B0aW9ucy5waXhlbF90ZXN0cyA9IFRydWUKIApAQCAtMTQ0MSw3
ICsxNDM4LDcgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2JqLCBvcHRpb25z
KToKICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSA9IHBvcnRfb2JqLnJlc3VsdHNf
ZGlyZWN0b3J5KCkKIAogICAgIGlmIG5vdCBvcHRpb25zLnRpbWVfb3V0X21zOgotICAgICAgICBp
ZiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0gIkRlYnVnIjoKKyAgICAgICAgaWYgcG9ydF9vYmou
Y29uZmlndXJhdGlvbigpID09ICJEZWJ1ZyI6CiAgICAgICAgICAgICBvcHRpb25zLnRpbWVfb3V0
X21zID0gc3RyKDIgKiBUZXN0UnVubmVyLkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQogICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cihUZXN0UnVubmVy
LkRFRkFVTFRfVEVTVF9USU1FT1VUX01TKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNf
dW5pdHRlc3QucHkKaW5kZXggNmZlOTlkNjI3MDEzNTg5ZmZjZDBhYTU2YmFkNmM4Mjc3YTFhMWZj
OC4uNjAyMDYyMzBhMzhjNWUwMzkwYTUzMjAxODJjNDdmNWMyMTgyMTk5NSAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0yMzQsNyArMjM0LDcgQEAgY2xh
c3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAKIGRlZiBfbW9ja2VkX29wZW4ob3Jp
Z2luYWxfb3BlbiwgZmlsZV9saXN0KToKLSAgICBkZWYgX3dyYXBwZXIobmFtZSwgbW9kZSwgZW5j
b2RpbmcpOgorICAgIGRlZiBfd3JhcHBlcihuYW1lLCBtb2RlPSJyYiIsIGVuY29kaW5nPU5vbmUp
OgogICAgICAgICBpZiBuYW1lLmZpbmQoIi1leHBlY3RlZC4iKSAhPSAtMSBhbmQgbW9kZSA9PSAi
dyI6CiAgICAgICAgICAgICAjIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgd3JpdGUgbmV3IGJh
c2VsaW5lcywgc28gc3R1YiB0aGVzZSBvdXQKICAgICAgICAgICAgIG5hbWUucmVwbGFjZSgnXFwn
LCAnLycpCkBAIC0zMTYsMTkgKzMxNiwxOSBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAKIAogY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0g
ICAgIyBGSVhNRTogaXQncyBoYXJkIHRvIGtub3cgd2hpY2ggcGxhdGZvcm1zIGFyZSBzYWZlIHRv
IHRlc3Q7IHRoZQotICAgICMgY2hyb21pdW0gcGxhdGZvcm1zIHJlcXVpcmUgYSBjaHJvbWl1bSBj
aGVja291dCwgYW5kIHRoZSBtYWMgcGxhdGZvcm0KLSAgICAjIHJlcXVpcmVzIGZjbnRsLCBzbyBp
dCBjYW4ndCBiZSB0ZXN0ZWQgb24gd2luMzIsIGV0Yy4gVGhlcmUgaXMKLSAgICAjIHByb2JhYmx5
IGEgYmV0dGVyIHdheSBvZiBoYW5kbGluZyB0aGlzLgotICAgIGRlZiB0ZXN0X2RhcndpbihzZWxm
KToKKyAgICBkZWYgdGVzdF9kYXJ3aW5fZHJ5cnVuKHNlbGYpOgogICAgICAgICBpZiBzeXMucGxh
dGZvcm0gIT0gImRhcndpbiI6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBzZWxmLmFz
c2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkpCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9kYXJ3aW5fZHJ5cnVuX21hYyhzZWxmKToKKyAgICAgICAg
aWYgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iOgorICAgICAgICAgICAgcmV0dXJuCisKICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICdkcnlydW4tbWFj
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSwgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSkpCiAKICAgICBkZWYgdGVzdF90ZXN0KHNlbGYpOgogICAgICAgICBzZWxm
LmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi10ZXN0JywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69156</attachid>
            <date>2010-09-28 19:58:29 -0700</date>
            <delta_ts>2010-10-04 14:14:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46776-20100928195828.patch</filename>
            <type>text/plain</type>
            <size>95566</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmZDYxMWU5NGY5NDRlM2MyN2UzMjdlOTYxMzQ0YTkwNTBmYzE3MzM5Li5mYjJhNDhm
ZDMxNjU4ZmI5OWVkY2Q2OWM5MTYzYTA0MTU0ODI1YzhmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAK
KzIwMTAtMDktMjggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQt
dGVzdHM6IHRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRoZSB3YXkgd2UgY29uc3RydWN0CisgICAgICAg
IFBvcnQgb2JqZWN0cywgYW5kIGludHJvZHVjZXMgYSBUcmVlIGFic3RyYWN0aW9uIHRvIGhpZGUg
dGhlIHNvdXJjZS10cmVlCisgICAgICAgIGRlcGVuZGVuY2llcyB0aGF0IE5SV1QgaGFzLgorCisg
ICAgICAgIFRoZSBUcmVlIGFic3RyYWN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIHNjbSBhbmQgY2hl
Y2tvdXQgbW9kdWxlcywKKyAgICAgICAgYnV0IGRvZXNuJ3QgcmVxdWlyZSBhbiBhY3R1YWwgc291
cmNlIGNvZGUgY2hlY2tvdXQgKHNpbmNlIHdlIG1heQorICAgICAgICBub3QgYWx3YXlzIGhhdmUg
cmVwb3NpdG9yaWVzIHdoZXJlIHdlIGFyZSBydW5uaW5nIHRlc3RzKS4gSW4gYWRkaXRpb24sCisg
ICAgICAgIHRoZSBUcmVlIG9iamVjdCBoYW5kbGVzIHZhbHVlcyBkZXRlcm1pbmVkIGJ5IHRoaW5n
cyBkeW5hbWljYWxseSBzZXQKKyAgICAgICAgaW4gdGhlIHRyZWUsIGxpa2UgdGhlIGRlZmF1bHRf
Y29uZmlndXJhdGlvbiBzZXQgd2l0aAorICAgICAgICBzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24g
YW5kIHRoZSBidWlsZCBkaXJlY3Rvcmllcy4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIGEgY29t
cGxldGVseSBpbi1tZW1vcnkgdmVyc2lvbiBjYWxsZWQgTW9ja1RyZWUgd2hpY2gKKyAgICAgICAg
Y2FuIGJlIHVzZWQgZm9yIHVuaXQgdGVzdGluZyBhbmQgb3RoZXIgc2l0dWF0aW9ucy4gQSBmb2xs
b3ctb24gcGF0Y2gKKyAgICAgICAgd2lsbCB1c2UgdGhpcyB0byByZXdyaXRlIHRoZSBwb3J0L3Rl
c3QucHkgdW5pdCB0ZXN0cyB0byBiZSBjbGVhcmVyIHRvCisgICAgICAgIG1haW50YWluIGFuZCB0
byByZWR1Y2UgZHVwbGljYXRlZCB0ZXN0IGNvZGUuCisKKyAgICAgICAgVGhlIGZhY3RvcnkgbWV0
aG9kcyBhcmUgY29uc3RydWN0b3JzIGFyZSBhbGwgY2hhbmdlZCB0byBjb25zaXN0ZW50bHkKKyAg
ICAgICAgdXNlIG9ubHkga2V5d29yZCBhcmd1bWVudHMgYW5kIHRvIHRyZWF0IGRlZmF1bHRfY29u
ZmlndXJhdGlvbiBhbmQKKyAgICAgICAgcG9ydCBuYW1lcyBjb25zaXN0ZW50bHkuIEEgZm9sbG93
LW9uIHBhdGNoIHdpbGwgdXNlIHRoaXMgdG8KKyAgICAgICAgc2ltcGxpZnkgdGhlIGZhY3Rvcnkg
bG9naWMgYW5kIGltcGxlbWVudCBwb3J0LmdldF9hbGxfcG9ydHMoKQorICAgICAgICBjb3JyZWN0
bHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBQb3J0T3B0aW9ucygp
IGNsYXNzIHdoaWNoIGhhcyB0aGUgc2FtZQorICAgICAgICBzZW1hbnRpY3MgYXMgdGhlIG9wdGlv
bnMgY2xhc3MgZnJvbSBvcHRwYXJzZSwgd2hpY2ggYWxsb3dzIHVzIHRvIGRvCisgICAgICAgIGFs
d2F5cyBoYXZlIGFuIG9wdGlvbnMgb2JqZWN0IGhhbmdpbmcgb2ZmIG9mIHRoZSBwb3J0IG9iamVj
dCB3aXRob3V0CisgICAgICAgIGludHJvZHVjaW5nIGEgZGVwZW5kZW5jeSBvbiBvcHRwYXJzZS4K
KworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCBhIGxvdCBvZiBib2lsZXJwbGF0ZSB0ZXN0
aW5nIGNvZGUgYW5kIHNjYWZmb2xkaW5nLAorICAgICAgICBpbmNyZWFzZXMgdGVzdCBjb3ZlcmFn
ZSwgYW5kIHNob3VsZCBlYXNlIG1haW50ZW5hbmNlIGRvd24gdGhlIGxpbmUuCisgCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Njc3NgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1X3Vu
aXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fbGludXgucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZS5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWVf
dW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tYWNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9vcHRpb25zLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L29wdGlvbnNfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0X2ZpbGVzX3VuaXR0ZXN0
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdHJlZS5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90
cmVlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3dpbl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5Ogor
CiAyMDEwLTA5LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIE5vIHJldmlldy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKaW5kZXggOTcwZGU2MGNjNjFjMGZkMzNhZDlj
MmRiY2ZmZjE0MzY4ZWFmNTYyNS4uZTA5YmIyZjUyYjQyYTI5NWY1ODA0NmUxZTljYzE0NWZiOTE5
ZTIxOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQucHkKQEAgLTEyMiw3ICsxMjIsNyBAQCBkZWYgX3Byb2Nlc3Nfb3V0
cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAogICAg
ICAgICBzdGFydF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICBuZXdfZmFpbHVyZXMg
PSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQocG9ydCwgdGVzdF9pbmZvLmZpbGVuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBsb2Nh
bF90ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb3J0LmNvbmZpZ3VyYXRpb24oKSkKICAgICAgICAgIyBEb24n
dCBhZGQgYW55IG1vcmUgZmFpbHVyZXMgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jhc2gsIHNvIHdl
IGRvbid0CiAgICAgICAgICMgZG91YmxlLXJlcG9ydCB0aG9zZSB0ZXN0cy4gV2UgZG8gZG91Ymxl
LXJlcG9ydCBmb3IgdGltZW91dHMgc2luY2UKICAgICAgICAgIyB3ZSBzdGlsbCB3YW50IHRvIHNl
ZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRl
c3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQppbmRleCAwMzQ0YWE3YWM0MDhhZWIwODI0MWFh
M2IwZDlmNzEyMGRjNDFiYTcwLi45YjM4OTVmY2U2NzZkYWU4ZmY0MDE0MjEzODIwMjYyMzIxNWI1
MDJjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZ191bml0
dGVzdC5weQpAQCAtMTE3LDcgKzExNyw3IEBAIGNsYXNzIFRlc3RVdGlsaXR5RnVuY3Rpb25zKHVu
aXR0ZXN0LlRlc3RDYXNlKToKIAogCiBjbGFzcyAgVGVzdHByaW50ZXIodW5pdHRlc3QuVGVzdENh
c2UpOgotICAgIGRlZiBnZXRfcHJpbnRlcihzZWxmLCBhcmdzPU5vbmUsIHNpbmdsZV90aHJlYWRl
ZD1GYWxzZSwKKyAgICBkZWYgZ2V0X3ByaW50ZXIoc2VsZiwgYXJncz1bXSwgc2luZ2xlX3RocmVh
ZGVkPUZhbHNlLAogICAgICAgICAgICAgICAgICAgIGlzX2Z1bGx5X3BhcmFsbGVsPUZhbHNlKToK
ICAgICAgICAgcHJpbnRpbmdfb3B0aW9ucyA9IHByaW50aW5nLnByaW50X29wdGlvbnMoKQogICAg
ICAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PXBy
aW50aW5nX29wdGlvbnMpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggNmE1ZDQzYmY5MTE2NmM1MThiNzQ0NTZm
ZTAyZTUzNjMxN2NiNjFjYi4uNTQyYjg0MWJjMGMxZmYxMzFlYjYxMDVkMTE2ZjExOTgwZDExNjYw
MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9iYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvYmFzZS5weQpAQCAtMzMsNyArMzMsNiBAQCB0ZXN0IGluZnJhc3RydWN0dXJlICh0
aGUgUG9ydCBhbmQgRHJpdmVyIGNsYXNzZXMpLiIiIgogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3
aXRoX3N0YXRlbWVudAogCiBpbXBvcnQgY2dpCi1pbXBvcnQgY29kZWNzCiBpbXBvcnQgZGlmZmxp
YgogaW1wb3J0IGVycm5vCiBpbXBvcnQgb3MKQEAgLTQyLDggKzQxLDEwIEBAIGltcG9ydCBzeXMK
IGltcG9ydCB0aW1lCiAKIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKLWltcG9ydCB0ZXN0X2Zp
bGVzCiBpbXBvcnQgaHR0cF9zZXJ2ZXIKK2ltcG9ydCBvcHRpb25zCitpbXBvcnQgdGVzdF9maWxl
cworaW1wb3J0IHRyZWUKIGltcG9ydCB3ZWJzb2NrZXRfc2VydmVyCiAKIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgbG9ndXRpbHMKQEAgLTc1LDIzICs3Niw0MiBAQCBjbGFzcyBQ
b3J0KG9iamVjdCk6CiAgICAgIiIiQWJzdHJhY3QgY2xhc3MgZm9yIFBvcnQtc3BlY2lmaWMgaG9v
a3MgZm9yIHRoZSBsYXlvdXRfdGVzdCBwYWNrYWdlLgogICAgICIiIgogCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBmbGFnX2Zyb21fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKToKLSAg
ICAgICAgZmxhZ3NfYnlfY29uZmlndXJhdGlvbiA9IHsKLSAgICAgICAgICAgICJEZWJ1ZyI6ICIt
LWRlYnVnIiwKLSAgICAgICAgICAgICJSZWxlYXNlIjogIi0tcmVsZWFzZSIsCi0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZsYWdzX2J5X2NvbmZpZ3VyYXRpb25bY29uZmlndXJhdGlvbl0KLQog
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6Ci0gICAgICAgIHNlbGYuX25hbWUgPSBr
d2FyZ3MuZ2V0KCdwb3J0X25hbWUnLCBOb25lKQotICAgICAgICBzZWxmLl9vcHRpb25zID0ga3dh
cmdzLmdldCgnb3B0aW9ucycsIE5vbmUpCisgICAgICAgICIiImluaXRpYWxpemVzIGEgUG9ydCBj
bGFzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcG9ydF9uYW1lOiBtYW5kYXRvcnkg
bmFtZSBvZiBwb3J0IHRvIHVzZQorICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uYWwgd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnBvcnQub3B0aW9ucy5Qb3J0T3B0aW9ucygpCisgICAgICAgICAgICAg
IGNsYXNzIChvciBvcHRpb25zIGZyb20gb3B0cGFyc2UpLiBEZWZhdWx0cyB0byBQb3J0T3B0aW9u
cygpLgorICAgICAgICAgICAgZXhlY3V0aXZlOiBvcHRpb25hbCB3ZWJraXRweS5zeXN0ZW0uZXhl
Y3V0aXZlLkV4ZWN1dGl2ZSgpIG9iamVjdC4KKyAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gRXhl
Y3V0aXZlKCkuCisgICAgICAgICAgICB0cmVlOiBvcHRpb25hbCBwb3J0LlRyZWUgb2JqZWN0LiBE
ZWZhdWx0cyB0byBUcmVlKCkuCisgICAgICAgICAgICB1c2VyOiBvcHRpb25zIHdlYmtpdHB5LnN5
c3RlbS51c2VyLlVzZXIgb2JqZWN0LiBEZWZhdWx0cyB0byBVc2VyKCkuCisKKyAgICAgICAgIiIi
CisgICAgICAgICMgUFJPVEVDVEVEIE1FTUJFUlMKKyAgICAgICAgc2VsZi5fbmFtZSA9IGt3YXJn
c1sncG9ydF9uYW1lJ10KKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IGt3YXJncy5nZXQoJ29wdGlv
bnMnLCBvcHRpb25zLlBvcnRPcHRpb25zKCkpCiAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZSA9IGt3
YXJncy5nZXQoJ2V4ZWN1dGl2ZScsIEV4ZWN1dGl2ZSgpKQorICAgICAgICBzZWxmLl90cmVlID0g
a3dhcmdzLmdldCgndHJlZScsIHRyZWUuVHJlZShzZWxmLl9leGVjdXRpdmUpKQogICAgICAgICBz
ZWxmLl91c2VyID0ga3dhcmdzLmdldCgndXNlcicsIFVzZXIoKSkKLSAgICAgICAgc2VsZi5faGVs
cGVyID0gTm9uZQorICAgICAgICBhc3NlcnQgc2VsZi5fb3B0aW9ucworICAgICAgICBhc3NlcnQg
c2VsZi5fZXhlY3V0aXZlCisgICAgICAgIGFzc2VydCBzZWxmLl90cmVlCisgICAgICAgIGFzc2Vy
dCBzZWxmLl91c2VyCisKKworICAgICAgICAjIFBSSVZBVEUgTUVNQkVSUwogICAgICAgICBzZWxm
Ll9odHRwX3NlcnZlciA9IE5vbmUKLSAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGlyID0gTm9u
ZQogICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gTm9uZQorICAgICAgICBzZWxmLl9j
b25maWd1cmF0aW9uID0gc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQorICAgICAgICBpZiBz
ZWxmLmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuX2NvbmZpZ3VyYXRpb24gPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24KKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbiA9IHNlbGYu
X2NvbmZpZ3VyYXRpb24KKworICAgIGRlZiBkZWZhdWx0X2NvbmZpZ3VyYXRpb24oc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl90cmVlLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAKICAgICBk
ZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUg
bnVtYmVyIG9mIER1bXBSZW5kZXJUcmVlIGluc3RhbmNlcyB0byB1c2UgZm9yIHRoaXMKQEAgLTEz
Myw2ICsxNTMsMTAgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBpbnRlcmZhY2Ugc28g
dGhhdCBpdCBjYW4gYmUgb3ZlcnJpZGVuIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiIiIgogICAgICAg
ICByZXR1cm4gZXhwZWN0ZWRfdGV4dCAhPSBhY3R1YWxfdGV4dAogCisgICAgZGVmIGNvbmZpZ3Vy
YXRpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gdGhpcyBw
b3J0IGlzIHVzaW5nLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlndXJhdGlvbgorCiAg
ICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50
cywKICAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lPU5vbmUsIHRvbGVyYW5jZT0wKToK
ICAgICAgICAgIiIiQ29tcGFyZSB0d28gaW1hZ2VzIGFuZCBwcm9kdWNlIGEgZGVsdGEgaW1hZ2Ug
ZmlsZS4KQEAgLTI1OSw4ICsyODMsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHBh
dGggPSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3QsIGV4dGVuc2lvbikKICAgICAgICAgaWYg
bm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAg
ICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCAncicsIGVuY29kaW5nKSBhcyBmaWxlOgotICAgICAg
ICAgICAgcmV0dXJuIGZpbGUucmVhZCgpCisgICAgICAgIHJldHVybiBzZWxmLl90cmVlLnJlYWRf
ZmlsZShwYXRoLCBlbmNvZGluZykKIAogICAgIGRlZiBleHBlY3RlZF9jaGVja3N1bShzZWxmLCB0
ZXN0KToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgY2hlY2tzdW0gb2YgdGhlIGltYWdlIHdlIGV4
cGVjdCB0aGUgdGVzdCB0byBwcm9kdWNlLCBvciBOb25lIGlmIGl0IGlzIGEgdGV4dC1vbmx5IHRl
c3QuIiIiCkBAIC0zNDksOCArMzcyLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAg
ICAgZGF0YTogY29udGVudHMgb2YgdGhlIGJhc2VsaW5lLgogICAgICAgICAgICAgZW5jb2Rpbmc6
IGZpbGUgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgYmFzZWxpbmUuCiAgICAgICAgICIiIgotICAg
ICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGZp
bGU6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuX3RyZWUud3Jp
dGVfZmlsZShwYXRoLCBjb250ZW50cz1kYXRhLCBlbmNvZGluZz1lbmNvZGluZykKIAogICAgIGRl
ZiB1cmlfdG9fdGVzdF9uYW1lKHNlbGYsIHVyaSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgYmFz
ZSBsYXlvdXQgdGVzdCBuYW1lIGZvciBhIGdpdmVuIFVSSS4KQEAgLTM4OSw2ICs0MTEsMTIgQEAg
Y2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBjYW4gY29udmVydCBhY2NvcmRpbmdseS4iIiIK
ICAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkKIAorICAgIGRlZiBnZXRf
b3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6CisgICAgICAgIGlmIGhhc2F0
dHIoc2VsZi5fb3B0aW9ucywgbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9u
cy5fX2RpY3RfX1tuYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1
bHRfdmFsdWUKKwogICAgIGRlZiBsYXlvdXRfdGVzdHNfZGlyKHNlbGYpOgogICAgICAgICAiIiJS
ZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgTGF5b3V0VGVzdHMgZGly
ZWN0b3J5LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xh
eW91dFRlc3RzJykKQEAgLTQyMCwxOSArNDQ4LDEzIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgbWF5IGJlIGRpZmZlcmVudCAoZS5nLiwgJ3dpbi14cCcgaW5zdGVhZCBvZiAnY2hyb21p
dW0td2luLXhwJy4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAotICAgICMgRklYTUU6
IFRoaXMgY291bGQgYmUgcmVwbGFjZWQgYnkgZnVuY3Rpb25zIGluIHdlYmtpdHB5LmNvbW1vbi5j
aGVja291dC5zY20uCisgICAgZGVmIG9wdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9vcHRpb25zCisKICAgICBkZWYgcGF0aF9mcm9tX3dlYmtpdF9iYXNlKHNlbGYsICpjb21wcyk6
CiAgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byBwYXRoIG1hZGUgYnkgam9pbmlu
ZyB0aGUgdG9wIG9mIHRoZQogICAgICAgICBXZWJLaXQgc291cmNlIHRyZWUgYW5kIHRoZSBsaXN0
IG9mIHBhdGggY29tcG9uZW50cyBpbiB8KmNvbXBzfC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYu
X3dlYmtpdF9iYXNlX2RpcjoKLSAgICAgICAgICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgo
X19maWxlX18pCi0gICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZV9kaXIgPSBhYnNwYXRoWzA6
YWJzcGF0aC5maW5kKCdXZWJLaXRUb29scycpXQotCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpv
aW4oc2VsZi5fd2Via2l0X2Jhc2VfZGlyLCAqY29tcHMpCi0KLSAgICAjIEZJWE1FOiBDYWxsZXJz
IHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8gc2NtLnNjcmlwdF9wYXRoLgotICAgIGRlZiBzY3Jp
cHRfcGF0aChzZWxmLCBzY3JpcHRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJv
bV93ZWJraXRfYmFzZSgiV2ViS2l0VG9vbHMiLCAiU2NyaXB0cyIsIHNjcmlwdF9uYW1lKQorICAg
ICAgICByZXR1cm4gc2VsZi5fdHJlZS5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoKmNvbXBzKQogCiAg
ICAgZGVmIHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKICAgICAgICAgIiIi
VXBkYXRlIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyB0byB0aGUgcGFzc2VkLWluIHN0cmluZy4KQEAg
LTY2NiwzOSArNjg4LDYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgX2xvZy5l
cnJvcigiRmFpbGVkIHRvIHJ1biBQcmV0dHlQYXRjaCAoJXMpOlxuJXMiICUgKGNvbW1hbmQsIGUu
bWVzc2FnZV93aXRoX291dHB1dCgpKSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcmV0dHlf
cGF0Y2hfZXJyb3JfaHRtbAogCi0gICAgZGVmIF93ZWJraXRfYnVpbGRfZGlyZWN0b3J5KHNlbGYs
IGFyZ3MpOgotICAgICAgICBhcmdzID0gWyJwZXJsIiwgc2VsZi5zY3JpcHRfcGF0aCgid2Via2l0
LWJ1aWxkLWRpcmVjdG9yeSIpXSArIGFyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChhcmdzKS5yc3RyaXAoKQotCi0gICAgZGVmIF9jb25maWd1cmF0aW9uX2Zp
bGVfcGF0aChzZWxmKToKLSAgICAgICAgYnVpbGRfcm9vdCA9IHNlbGYuX3dlYmtpdF9idWlsZF9k
aXJlY3RvcnkoWyItLXRvcC1sZXZlbCJdKQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGJ1
aWxkX3Jvb3QsICJDb25maWd1cmF0aW9uIikKLQotICAgICMgRWFzeSBvdmVycmlkZSBmb3IgdW5p
dCB0ZXN0cwotICAgIGRlZiBfb3Blbl9jb25maWd1cmF0aW9uX2ZpbGUoc2VsZik6Ci0gICAgICAg
IGNvbmZpZ3VyYXRpb25fcGF0aCA9IHNlbGYuX2NvbmZpZ3VyYXRpb25fZmlsZV9wYXRoKCkKLSAg
ICAgICAgcmV0dXJuIGNvZGVjcy5vcGVuKGNvbmZpZ3VyYXRpb25fcGF0aCwgInIiLCAidXRmLTgi
KQotCi0gICAgZGVmIF9yZWFkX2NvbmZpZ3VyYXRpb24oc2VsZik6Ci0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHdpdGggc2VsZi5fb3Blbl9jb25maWd1cmF0aW9uX2ZpbGUoKSBhcyBmaWxlOgot
ICAgICAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWRsaW5lKCkucnN0cmlwKCkKLSAgICAgICAg
ZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgRklYTUU6IFRoaXMgbGlz
dCBtYXkgYmUgaW5jb21wbGV0ZSBhcyBBcHBsZSBoYXMgc29tZSBzZWtyZXQgY29uZmlncy4KLSAg
ICBfUkVDT0dOSVpFRF9DT05GSUdVUkFUSU9OUyA9ICgiRGVidWciLCAiUmVsZWFzZSIpCi0KLSAg
ICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBVbmlm
eSB0aGlzIHdpdGggd2Via2l0ZGlyLnBtIGNvbmZpZ3VyYXRpb24gcmVhZGluZyBjb2RlLgotICAg
ICAgICBjb25maWd1cmF0aW9uID0gc2VsZi5fcmVhZF9jb25maWd1cmF0aW9uKCkKLSAgICAgICAg
aWYgbm90IGNvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9uID0gIlJlbGVh
c2UiCi0gICAgICAgIGlmIGNvbmZpZ3VyYXRpb24gbm90IGluIHNlbGYuX1JFQ09HTklaRURfQ09O
RklHVVJBVElPTlM6Ci0gICAgICAgICAgICBfbG9nLndhcm4oIkNvbmZpZ3VyYXRpb24gXCIlc1wi
IGZvdW5kIGluICVzIGlzIG5vdCBhIHJlY29nbml6ZWQgdmFsdWUuXG4iICUgKGNvbmZpZ3VyYXRp
b24sIHNlbGYuX2NvbmZpZ3VyYXRpb25fZmlsZV9wYXRoKCkpKQotICAgICAgICAgICAgX2xvZy53
YXJuKCJTY3JpcHRzIG1heSBmYWlsLiAgU2VlICdzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24gLS1o
ZWxwJy4iKQotICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbgotCiAgICAgIwogICAgICMgUFJP
VEVDVEVEIFJPVVRJTkVTCiAgICAgIwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CmluZGV4
IDcxODc3YjNlMmU0NmRiYTYxODMzYTdlNGY5ZGQ0YjNkYTI5YTQxNmQuLmQ5NDE5YzllYzljYTNi
ZjA4YzZhOTM1NmFjNzU0OGJiZjI5YWI1ZmQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3Qu
cHkKQEAgLTI3LDU4ICsyNywyNCBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgYmFzZQotaW1w
b3J0IG9zCi1pbXBvcnQgU3RyaW5nSU8KLWltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1w
b3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2Nr
IGltcG9ydCBNb2NrCiAKLQotIyBGSVhNRTogVGhpcyBtYWtlcyBTdHJpbmdJTyBvYmplY3RzIHdv
cmsgd2l0aCAid2l0aCIuIFJlbW92ZQotIyB3aGVuIHdlIHVwZ3JhZGUgdG8gMi42LgotY2xhc3Mg
TmV3U3RyaW5nSU8oU3RyaW5nSU8uU3RyaW5nSU8pOgotICAgIGRlZiBfX2VudGVyX18oc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFs
dWUsIHRyYWNlYmFjayk6Ci0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBNb2NrRXhlY3V0aXZlKCk6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y2VwdGlvbik6Ci0gICAgICAgIHNlbGYuX2V4Y2Vw
dGlvbiA9IGV4Y2VwdGlvbgotCi0gICAgZGVmIHJ1bl9jb21tYW5kKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6Ci0gICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgotCi0KLWNsYXNzIFVuaXRUZXN0
UG9ydChiYXNlLlBvcnQpOgotICAgICIiIlN1YmNsYXNzIG9mIGJhc2UuUG9ydCB1c2VkIGZvciB1
bml0IHRlc3RpbmcuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb25fY29u
dGVudHM9Tm9uZSwgY29uZmlndXJhdGlvbl9leGNlcHRpb249SU9FcnJvciwgZXhlY3V0aXZlX2V4
Y2VwdGlvbj1Ob25lKToKLSAgICAgICAgYmFzZS5Qb3J0Ll9faW5pdF9fKHNlbGYpCi0gICAgICAg
IHNlbGYuX2NvbmZpZ3VyYXRpb25fY29udGVudHMgPSBjb25maWd1cmF0aW9uX2NvbnRlbnRzCi0g
ICAgICAgIHNlbGYuX2NvbmZpZ3VyYXRpb25fZXhjZXB0aW9uID0gY29uZmlndXJhdGlvbl9leGNl
cHRpb24KLSAgICAgICAgaWYgZXhlY3V0aXZlX2V4Y2VwdGlvbjoKLSAgICAgICAgICAgIHNlbGYu
X2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoZXhlY3V0aXZlX2V4Y2VwdGlvbikKLQotICAgIGRl
ZiBfb3Blbl9jb25maWd1cmF0aW9uX2ZpbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2NvbmZp
Z3VyYXRpb25fY29udGVudHM6Ci0gICAgICAgICAgICByZXR1cm4gTmV3U3RyaW5nSU8oc2VsZi5f
Y29uZmlndXJhdGlvbl9jb250ZW50cykKLSAgICAgICAgcmFpc2Ugc2VsZi5fY29uZmlndXJhdGlv
bl9leGNlcHRpb24KLQoraW1wb3J0IG9wdGlvbnMKK2ltcG9ydCB0cmVlCiAKIGNsYXNzIFBvcnRU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9mb3JtYXRfd2RpZmZfb3V0cHV0
X2FzX2h0bWwoc2VsZik6CiAgICAgICAgIG91dHB1dCA9ICJPVVRQVVQgJXMgJXMgJXMiICUgKGJh
c2UuUG9ydC5fV0RJRkZfREVMLCBiYXNlLlBvcnQuX1dESUZGX0FERCwgYmFzZS5Qb3J0Ll9XRElG
Rl9FTkQpCi0gICAgICAgIGh0bWwgPSBiYXNlLlBvcnQoKS5fZm9ybWF0X3dkaWZmX291dHB1dF9h
c19odG1sKG91dHB1dCkKKyAgICAgICAgaHRtbCA9IGJhc2UuUG9ydChwb3J0X25hbWU9J3VuaXQt
dGVzdCcpLl9mb3JtYXRfd2RpZmZfb3V0cHV0X2FzX2h0bWwob3V0cHV0KQogICAgICAgICBleHBl
Y3RlZF9odG1sID0gIjxoZWFkPjxzdHlsZT4uZGVsIHsgYmFja2dyb3VuZDogI2ZhYTsgfSAuYWRk
IHsgYmFja2dyb3VuZDogI2FmYTsgfTwvc3R5bGU+PC9oZWFkPjxwcmU+T1VUUFVUIDxzcGFuIGNs
YXNzPWRlbD4gPHNwYW4gY2xhc3M9YWRkPiA8L3NwYW4+PC9wcmU+IgogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGh0bWwsIGV4cGVjdGVkX2h0bWwpCiAKICAgICBkZWYgdGVzdF93ZGlmZl9jb21t
YW5kKHNlbGYpOgotICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkKKyAgICAgICAgcG9ydCA9IGJh
c2UuUG9ydChwb3J0X25hbWU9J3VuaXQtdGVzdCcpCiAgICAgICAgIHBvcnQuX3BhdGhfdG9fd2Rp
ZmYgPSBsYW1iZGE6ICIvcGF0aC90by93ZGlmZiIKICAgICAgICAgY29tbWFuZCA9IHBvcnQuX3dk
aWZmX2NvbW1hbmQoIi9hY3R1YWwvcGF0aCIsICIvZXhwZWN0ZWQvcGF0aCIpCiAgICAgICAgIGV4
cGVjdGVkX2NvbW1hbmQgPSBbCkBAIC05OSw3ICs2NSw4IEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV0dXJuIG5ld19maWxlCiAKICAgICBkZWYgdGVzdF9w
cmV0dHlfcGF0Y2hfb3NfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQo
ZXhlY3V0aXZlX2V4Y2VwdGlvbj1PU0Vycm9yKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KHBv
cnRfbmFtZT0ndW5pdC10ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpdmU9
dHJlZS5Nb2NrRXhlY3V0aXZlKGV4Y2VwdGlvbj1PU0Vycm9yKSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChwb3J0LnByZXR0eV9wYXRjaF90ZXh0KCJwYXRjaC50eHQiKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3J0Ll9wcmV0dHlfcGF0Y2hfZXJyb3JfaHRtbCkKIApAQCAtMTEwLDcg
Kzc3LDggQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0
X3ByZXR0eV9wYXRjaF9zY3JpcHRfZXJyb3Ioc2VsZik6CiAgICAgICAgICMgRklYTUU6IFRoaXMg
aXMgc29tZSB1Z2x5IHdoaXRlLWJveCB0ZXN0IGhhY2tpbmcgLi4uCiAgICAgICAgIGJhc2UuX3By
ZXR0eV9wYXRjaF9hdmFpbGFibGUgPSBUcnVlCi0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBvcnQo
ZXhlY3V0aXZlX2V4Y2VwdGlvbj1TY3JpcHRFcnJvcikKKyAgICAgICAgcG9ydCA9IGJhc2UuUG9y
dChwb3J0X25hbWU9J3VuaXQtdGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0
aXZlPXRyZWUuTW9ja0V4ZWN1dGl2ZShleGNlcHRpb249U2NyaXB0RXJyb3IpKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHBvcnQucHJldHR5X3BhdGNoX3RleHQoInBhdGNoLnR4dCIpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcnQuX3ByZXR0eV9wYXRjaF9lcnJvcl9odG1sKQogCkBA
IC0xMjgsNyArOTYsNyBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CiAgICAgICAgICAgICB3ZGlmZl9wYXRoID0gTm9uZQog
Ci0gICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KHBv
cnRfbmFtZT0ndW5pdC10ZXN0JykKICAgICAgICAgcG9ydC5fcGF0aF90b193ZGlmZiA9IGxhbWJk
YTogd2RpZmZfcGF0aAogCiAgICAgICAgIGlmIHdkaWZmX3BhdGg6CkBAIC0xNjUsNyArMTMzLDcg
QEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBiYXNlLl93ZGlm
Zl9hdmFpbGFibGUgPSBUcnVlCiAKICAgICBkZWYgdGVzdF9kaWZmX3RleHQoc2VsZik6Ci0gICAg
ICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KHBvcnRfbmFt
ZT0ndW5pdC10ZXN0JykKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBydW4gaW50
byBkZWNvZGluZyBleGNlcHRpb25zIHdoZW4gdGhlCiAgICAgICAgICMgZmlsZW5hbWVzIGFyZSB1
bmljb2RlLCB3aXRoIHJlZ3VsYXIgb3IgbWFsZm9ybWVkIGlucHV0IChleHBlY3RlZCBvcgogICAg
ICAgICAjIGFjdHVhbCBpbnB1dCBpcyBhbHdheXMgcmF3IGJ5dGVzLCBub3QgdW5pY29kZSkuCkBA
IC0xOTEsNDggKzE1OSw0MiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWN0LnR4dCcgaW4gZGlmZikKICAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZSgnbm9zdWNodGhpbmcnIGluIGRpZmYpCiAKLSAgICBkZWYgdGVzdF9kZWZhdWx0
X2NvbmZpZ3VyYXRpb25fbm90Zm91bmQoc2VsZik6Ci0gICAgICAgICMgUmVndWxhciBJT0Vycm9y
IHRocm93biB3aGlsZSB0cnlpbmcgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uLgotICAgICAgICBw
b3J0ID0gVW5pdFRlc3RQb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmRlZmF1
bHRfY29uZmlndXJhdGlvbigpLCAiUmVsZWFzZSIpCi0KLSAgICAgICAgIyBNb3JlIGV4b3RpYyBP
U0Vycm9yIHRocm93bi4KLSAgICAgICAgcG9ydCA9IFVuaXRUZXN0UG9ydChjb25maWd1cmF0aW9u
X2V4Y2VwdGlvbj1PU0Vycm9yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGVmYXVs
dF9jb25maWd1cmF0aW9uKCksICJSZWxlYXNlIikKLQogICAgIGRlZiB0ZXN0X2xheW91dF90ZXN0
c19za2lwcGluZyhzZWxmKToKLSAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCisgICAgICAgIHBv
cnQgPSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3QnKQogICAgICAgICBwb3J0LnNraXBw
ZWRfbGF5b3V0X3Rlc3RzID0gbGFtYmRhOiBbJ2Zvby9iYXIuaHRtbCcsICdtZWRpYSddCiAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnNraXBzX2xheW91dF90ZXN0KCdmb28vYmFyLmh0bWwn
KSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuc2tpcHNfbGF5b3V0X3Rlc3QoJ21lZGlh
L3ZpZGVvLXpvb20uaHRtbCcpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuc2tpcHNf
bGF5b3V0X3Rlc3QoJ2Zvby9mb28uaHRtbCcpKQogCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9jb25m
aWd1cmF0aW9uX2ZvdW5kKHNlbGYpOgotICAgICAgICBwb3J0ID0gVW5pdFRlc3RQb3J0KGNvbmZp
Z3VyYXRpb25fY29udGVudHM9IkRlYnVnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0
LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiRGVidWciKQotCi0gICAgZGVmIHRlc3RfZGVmYXVs
dF9jb25maWd1cmF0aW9uX3Vua25vd24oc2VsZik6Ci0gICAgICAgIHBvcnQgPSBVbml0VGVzdFBv
cnQoY29uZmlndXJhdGlvbl9jb250ZW50cz0id2VpcmRfdmFsdWUiKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJ3ZWlyZF92YWx1ZSIpCi0K
ICAgICBkZWYgdGVzdF9zZXR1cF90ZXN0X3J1bihzZWxmKToKLSAgICAgICAgcG9ydCA9IGJhc2Uu
UG9ydCgpCisgICAgICAgIHBvcnQgPSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3QnKQog
ICAgICAgICAjIFRoaXMgcm91dGluZSBpcyBhIG5vLW9wLiBXZSBqdXN0IHRlc3QgaXQgZm9yIGNv
dmVyYWdlLgogICAgICAgICBwb3J0LnNldHVwX3Rlc3RfcnVuKCkKIAogICAgIGRlZiB0ZXN0X3Rl
c3RfZGlycyhzZWxmKToKLSAgICAgICAgcG9ydCA9IGJhc2UuUG9ydCgpCisgICAgICAgIHBvcnQg
PSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3QnKQogICAgICAgICBkaXJzID0gcG9ydC50
ZXN0X2RpcnMoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2NhbnZhcycgaW4gZGlycykKICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKCdjc3MyLjEnIGluIGRpcnMpCiAKKyAgICBkZWYgdGVzdF91
cmlfdG9fdGVzdF9uYW1lX191bmtub3duX3Byb3RvKHNlbGYpOgorICAgICAgICBwb3J0ID0gYmFz
ZS5Qb3J0KHBvcnRfbmFtZT0ndW5pdC10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
Tm90SW1wbGVtZW50ZWRFcnJvciwgcG9ydC51cmlfdG9fdGVzdF9uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZnRwOi8vZm9vL2Jhci5odG1sIikKKworICAgIGRlZiB0ZXN0X29wdGlv
bnMoc2VsZik6CisgICAgICAgIG9wdHMgPSBvcHRpb25zLlBvcnRPcHRpb25zKCkKKyAgICAgICAg
cG9ydCA9IGJhc2UuUG9ydChwb3J0X25hbWU9J3VuaXQtdGVzdCcsIG9wdGlvbnM9b3B0cykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Lm9wdGlvbnMoKSwgb3B0cykKKworCiBjbGFzcyBW
aXJ0dWFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgdGhhdCB2YXJpb3Vz
IG1ldGhvZHMgZXhwZWN0ZWQgdG8gYmUgdmlydHVhbCBhcmUuIiIiCiAgICAgZGVmIGFzc2VydFZp
cnR1YWwoc2VsZiwgbWV0aG9kLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtZXRob2QsICphcmdzLCAqKmt3YXJncykKIAog
ICAgIGRlZiB0ZXN0X3ZpcnR1YWxfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgcG9ydCA9IGJhc2Uu
UG9ydCgpCisgICAgICAgIHBvcnQgPSBiYXNlLlBvcnQocG9ydF9uYW1lPSd1bml0LXRlc3QnKQog
ICAgICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC5iYXNlbGluZV9wYXRoKQogICAgICAgICBz
ZWxmLmFzc2VydFZpcnR1YWwocG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRWaXJ0dWFsKHBvcnQuY2hlY2tfYnVpbGQsIE5vbmUpCkBAIC0yNTcsMTAgKzIxOSwx
MSBAQCBjbGFzcyBWaXJ0dWFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYu
YXNzZXJ0VmlydHVhbChwb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMpCiAgICAgICAgIHNl
bGYuYXNzZXJ0VmlydHVhbChwb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkX3BocCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRWaXJ0dWFsKHBvcnQuX3BhdGhfdG9fd2RpZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0
VmlydHVhbChwb3J0Ll9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeSkKICAgICAgICAgc2VsZi5hc3Nl
cnRWaXJ0dWFsKHBvcnQuX3NodXRfZG93bl9odHRwX3NlcnZlciwgTm9uZSkKIAogICAgIGRlZiB0
ZXN0X3ZpcnR1YWxfZHJpdmVyX21ldGhvZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgYmFzZS5Ecml2ZXIsIGJhc2UuUG9ydCgpLAorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBiYXNlLkRyaXZlciwgYmFz
ZS5Qb3J0KHBvcnRfbmFtZT0ndW5pdC10ZXN0JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIiLCBOb25lLCBOb25lKQogCiAgICAgZGVmIHRlc3RfdmlydHVhbF9kcml2ZXJfbWV0aG9kcyhz
ZWxmKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGE3MjYyN2ExNmE3ZmE1NGM0ODgzYzQzOTI5
NWE3MDNlOTVmM2I4ZDcuLjUyMjhiNmRiZTczYTBmZDRlZWYwZmZkNTAxOWZmNjEyYWNiMDBkYWUg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bS5weQpAQCAtMzEsNyArMzEsNiBAQAogCiBmcm9tIF9fZnV0dXJl
X18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CiAKLWltcG9ydCBjb2RlY3MKIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgb3MKIGltcG9ydCByZQpAQCAtODQsMTIgKzgzLDggQEAgY2xhc3MgQ2hyb21pdW1Q
b3J0KGJhc2UuUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAg
ICAgICBiYXNlLlBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCi0gICAgICAgIGlmICdvcHRp
b25zJyBpbiBrd2FyZ3M6Ci0gICAgICAgICAgICBvcHRpb25zID0ga3dhcmdzWydvcHRpb25zJ10K
LSAgICAgICAgICAgIGlmIChvcHRpb25zIGFuZCAobm90IGhhc2F0dHIob3B0aW9ucywgJ2NvbmZp
Z3VyYXRpb24nKSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbmZp
Z3VyYXRpb24gaXMgTm9uZSkpOgotICAgICAgICAgICAgICAgIG9wdGlvbnMuY29uZmlndXJhdGlv
biA9IHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgc2VsZi5fY2hyb21pdW1f
YmFzZV9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKIAogICAgIGRlZiBi
YXNlbGluZV9wYXRoKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fd2Via2l0X2Jhc2VsaW5l
X3BhdGgoc2VsZi5fbmFtZSkKQEAgLTEwMiw3ICs5Nyw3IEBAIGNsYXNzIENocm9taXVtUG9ydChi
YXNlLlBvcnQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgZHJp
dmVyJykgYW5kIHJlc3VsdAogICAgICAgICBpZiByZXN1bHQgYW5kIHNlbGYuX29wdGlvbnMuYnVp
bGQ6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9jaGVja19kcml2ZXJfYnVpbGRfdXBfdG9f
ZGF0ZSgKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24pCisgICAg
ICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uKCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICBfbG9nLmVycm9yKCcnKQogCkBAIC0xODIsOSArMTc3LDkgQEAgY2xhc3MgQ2hyb21pdW1Q
b3J0KGJhc2UuUG9ydCk6CiAgICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgogICAgICAg
ICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgn
d2Via2l0JywKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24sIHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgc2VsZi5jb25m
aWd1cmF0aW9uKCksIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAgICAgICAgIGV4
Y2VwdCBBc3NlcnRpb25FcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRo
KHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9i
dWlsZF9wYXRoKHNlbGYuY29uZmlndXJhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKIAogICAgIGRlZiBz
ZXR1cF90ZXN0X3J1bihzZWxmKToKQEAgLTIzMiwxOSArMjI3LDE3IEBAIGNsYXNzIENocm9taXVt
UG9ydChiYXNlLlBvcnQpOgogICAgICAgICBCYXNpY2FsbHkgdGhpcyBzdHJpbmcgc2hvdWxkIGNv
bnRhaW4gdGhlIGVxdWl2YWxlbnQgb2YgYQogICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxl
LiBTZWUgdGVzdF9leHBlY3RhdGlvbnMucHkgZm9yIG1vcmUgZGV0YWlscy4iIiIKICAgICAgICAg
ZXhwZWN0YXRpb25zX3BhdGggPSBzZWxmLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgp
Ci0gICAgICAgIHdpdGggY29kZWNzLm9wZW4oZXhwZWN0YXRpb25zX3BhdGgsICJyIiwgInV0Zi04
IikgYXMgZmlsZToKLSAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKQorICAgICAgICByZXR1
cm4gc2VsZi5fdHJlZS5maWxlX3JlYWQoZXhwZWN0YXRpb25zX3BhdGgsICJ1dGYtOCIpCiAKICAg
ICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3ZlcnJpZGVzKHNlbGYpOgogICAgICAgICAjIEZJWE1F
OiBUaGlzIGRydF9vdmVycmlkZXMgaGFuZGxpbmcgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB3ZSBz
d2l0Y2gKICAgICAgICAgIyBmcm9tIHRlc19zaGVsbCB0byBEUlQuCiAgICAgICAgIGRydF9vdmVy
cmlkZXMgPSAnJwotICAgICAgICBpZiBzZWxmLl9vcHRpb25zIGFuZCBzZWxmLl9vcHRpb25zLnVz
ZV9kcnQ6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudXNlX2RydDoKICAgICAgICAgICAgIGRy
dF9vdmVycmlkZXNfcGF0aCA9IHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0
cycsCiAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgJ2Nocm9taXVtJywgJ2RydF9leHBlY3Rh
dGlvbnMudHh0JykKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRydF9vdmVycmlkZXNf
cGF0aCk6Ci0gICAgICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihkcnRfb3ZlcnJpZGVzX3Bh
dGgsICJyIiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgZHJ0X292ZXJy
aWRlcyA9IGZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RyZWUuZmls
ZV9yZWFkKGRydF9vdmVycmlkZXNfcGF0aCwgInV0Zi04IikKIAogICAgICAgICB0cnk6CiAgICAg
ICAgICAgICBvdmVycmlkZXNfcGF0aCA9IHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3dl
YmtpdCcsICd0b29scycsCkBAIC0yNTMsOCArMjQ2LDcgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJh
c2UuUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHMob3ZlcnJpZGVzX3BhdGgpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAg
ICAgd2l0aCBjb2RlY3Mub3BlbihvdmVycmlkZXNfcGF0aCwgInIiLCAidXRmLTgiKSBhcyBmaWxl
OgotICAgICAgICAgICAgcmV0dXJuIGZpbGUucmVhZCgpICsgZHJ0X292ZXJyaWRlcworICAgICAg
ICByZXR1cm4gc2VsZi5fdHJlZS5yZWFkKG92ZXJyaWRlc19wYXRoLCAidXRmLTgiKSArIGRydF9v
dmVycmlkZXMKIAogICAgIGRlZiBza2lwcGVkX2xheW91dF90ZXN0cyhzZWxmLCBleHRyYV90ZXN0
X2ZpbGVzPU5vbmUpOgogICAgICAgICBleHBlY3RhdGlvbnNfc3RyID0gc2VsZi50ZXN0X2V4cGVj
dGF0aW9ucygpCkBAIC0zMjksNyArMzIxLDcgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2UuUG9y
dCk6CiAgICAgICAgIGJpbmFyeV9uYW1lID0gJ2ltYWdlX2RpZmYnCiAgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMudXNlX2RydDoKICAgICAgICAgICAgIGJpbmFyeV9uYW1lID0gJ0ltYWdlRGlmZicK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0
aW9uLCBiaW5hcnlfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5j
b25maWd1cmF0aW9uKCksIGJpbmFyeV9uYW1lKQogCiAKIGNsYXNzIENocm9taXVtRHJpdmVyKGJh
c2UuRHJpdmVyKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fZ3B1LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHUucHkKaW5kZXggODA2MDJkOWE3YmE0
NzhhNjkzNjI0ODliNWZiODM5ZmQzNjI0Mjk4NC4uNDdlY2JiMmY3NmVkMWRkM2JkOTVmZTQxNWY1
YzU3Mzg1ODMzOTk4NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHUucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHUucHkKQEAgLTYzLDc1ICs2
Myw1OSBAQCBkZWYgZ2V0KCoqa3dhcmdzKToKICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCd1bnN1cHBvcnRlZCBwb3J0OiAlcycgJSBwb3J0X25hbWUpCiAKIAotZGVmIF9zZXRfZ3B1X29w
dGlvbnMob3B0aW9ucyk6Ci0gICAgaWYgb3B0aW9uczoKLSAgICAgICAgaWYgb3B0aW9ucy5hY2Nl
bGVyYXRlZF9jb21wb3NpdGluZyBpcyBOb25lOgotICAgICAgICAgICAgb3B0aW9ucy5hY2NlbGVy
YXRlZF9jb21wb3N0aW5nID0gVHJ1ZQotICAgICAgICBpZiBvcHRpb25zLmFjY2VsZXJhdGVkXzJk
X2NhbnZhcyBpcyBOb25lOgotICAgICAgICAgICAgb3B0aW9ucy5hY2NlbGVyYXRlZF8yZF9jYW52
YXMgPSBUcnVlCi0KLQotZGVmIF9ncHVfb3ZlcnJpZGVzKHBvcnQpOgotICAgIHRyeToKLSAgICAg
ICAgb3ZlcnJpZGVzX3BhdGggPSBwb3J0LnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJraXQn
LCAndG9vbHMnLAotICAgICAgICAgICAgJ2xheW91dF90ZXN0cycsICd0ZXN0X2V4cGVjdGF0aW9u
c19ncHUudHh0JykKLSAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgIHJldHVybiBO
b25lCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG92ZXJyaWRlc19wYXRoKToKLSAgICAgICAg
cmV0dXJuIE5vbmUKLSAgICB3aXRoIGNvZGVjcy5vcGVuKG92ZXJyaWRlc19wYXRoLCAiciIsICJ1
dGYtOCIpIGFzIGZpbGU6Ci0gICAgICAgIHJldHVybiBmaWxlLnJlYWQoKQotCi0KLWNsYXNzIENo
cm9taXVtR3B1TGludXhQb3J0KGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVs
dCgncG9ydF9uYW1lJywgJ2Nocm9taXVtLWdwdS1saW51eCcpCi0gICAgICAgIF9zZXRfZ3B1X29w
dGlvbnMoa3dhcmdzLmdldCgnb3B0aW9ucycpKQotICAgICAgICBjaHJvbWl1bV9saW51eC5DaHJv
bWl1bUxpbnV4UG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKLQotICAgIGRlZiBiYXNlbGlu
ZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIChbc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgoJ2Nocm9taXVtLWdwdS1saW51eCcpXSArCi0gICAgICAgICAgICAgICAgY2hyb21p
dW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZikpCi0K
LSAgICBkZWYgcGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYpOgorIyBUaGlzIHJv
dXRpbmUgcGVyZm9ybXMgYSBjbHVtc3kgZm9ybSBvZiBtdWx0aXBsZS1pbmhlcml0YW5jZSAvIG1p
eGluCisjIGZvciB0aGUgR1BVIHBvcnRzLCB3aGljaCBhbGwgaGF2ZSB0aGUgc2FtZSBiYXNpYyB0
ZW1wbGF0ZS4KK2RlZiBfaW5pdChzZWxmLCBwb3J0X25hbWUsIHN1cGVyLCBrd2FyZ3MpOgorICAg
IGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aCgpOgorICAgICAgICByZXR1cm4gKFtzZWxmLl93ZWJr
aXRfYmFzZWxpbmVfcGF0aChwb3J0X25hbWUpXSArCisgICAgICAgICAgICAgICAgc3VwZXIuYmFz
ZWxpbmVfc2VhcmNoX3BhdGgoc2VsZikpCisKKyAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3Zl
cnJpZGVzKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG92ZXJyaWRlc19wYXRoID0gc2Vs
Zi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnd2Via2l0JywgJ3Rvb2xzJywKKyAgICAgICAgICAg
ICAgICAnbGF5b3V0X3Rlc3RzJywgJ3Rlc3RfZXhwZWN0YXRpb25zX2dwdS50eHQnKQorICAgICAg
ICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgICAgICAjIFRoaXMgZmlyZXMgaWYgd2Un
cmUgbm90IGluIGEgY2hyb21pdW0gY2hlY2tvdXQKKyAgICAgICAgICAgIHJldHVybiBOb25lCisg
ICAgICAgIGlmIG5vdCBzZWxmLl90cmVlLmV4aXN0cyhvdmVycmlkZXNfcGF0aCk6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fdHJlZS5yZWFkX2ZpbGUob3Zl
cnJpZGVzX3BhdGgsICJ1dGYtOCIpCisKKyAgICBkZWYgcGF0aF90b190ZXN0X2V4cGVjdGF0aW9u
c19maWxlKCk6CiAgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5
b3V0VGVzdHMnLCAncGxhdGZvcm0nLAogICAgICAgICAgICAgJ2Nocm9taXVtLWdwdScsICd0ZXN0
X2V4cGVjdGF0aW9ucy50eHQnKQorICAgIGlmIChub3QgJ3BvcnRfbmFtZScgaW4ga3dhcmdzIG9y
IGt3YXJnc1sncG9ydF9uYW1lJ10gaXMgTm9uZSBvcgorICAgICAgICBrd2FyZ3NbJ3BvcnRfbmFt
ZSddID09ICdjaHJvbWl1bS1ncHUnKToKKyAgICAgICAga3dhcmdzWydwb3J0X25hbWUnXSA9IHBv
cnRfbmFtZQogCi0gICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zX292ZXJyaWRlcyhzZWxmKToKLSAg
ICAgICAgcmV0dXJuIF9ncHVfb3ZlcnJpZGVzKHNlbGYpCisgICAgc3VwZXIuX19pbml0X18oc2Vs
ZiwgKiprd2FyZ3MpCisgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKKyAgICBpZiAobm90IGhh
c2F0dHIob3B0aW9ucywgJ2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJykgb3IKKyAgICAgICAgb3B0
aW9ucy5hY2NlbGVyYXRlZF9jb21wb3NpdGluZyBpcyBOb25lKToKKyAgICAgICAgb3B0aW9ucy5h
Y2NlbGVyYXRlZF9jb21wb3N0aW5nID0gVHJ1ZQorICAgIGlmIChub3QgaGFzYXR0cihvcHRpb25z
LCAnYWNjZWxlcmF0ZWRfMmRfY2FudmFzJykgb3IKKyAgICAgICAgb3B0aW9ucy5hY2NlbGVyYXRl
ZF8yZF9jYW52YXMgaXMgTm9uZSk6CisgICAgICAgIG9wdGlvbnMuYWNjZWxlcmF0ZWRfMmRfY2Fu
dmFzID0gVHJ1ZQogCisgICAgc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCA9IGJhc2VsaW5lX3Nl
YXJjaF9wYXRoCisgICAgc2VsZi50ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMgPSB0ZXN0X2V4
cGVjdGF0aW9uc19vdmVycmlkZXMKKyAgICBzZWxmLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNf
ZmlsZSA9IHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZQogCi1jbGFzcyBDaHJvbWl1bUdw
dU1hY1BvcnQoY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydCk6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ3BvcnRfbmFtZScs
ICdjaHJvbWl1bS1ncHUtbWFjJykKLSAgICAgICAgX3NldF9ncHVfb3B0aW9ucyhrd2FyZ3MuZ2V0
KCdvcHRpb25zJykpCi0gICAgICAgIGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQuX19pbml0
X18oc2VsZiwgKiprd2FyZ3MpCiAKLSAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6
Ci0gICAgICAgIHJldHVybiAoW3NlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCdjaHJvbWl1bS1n
cHUtbWFjJyldICsKLSAgICAgICAgICAgICAgICBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0
LmJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpKQorY2xhc3MgQ2hyb21pdW1HcHVMaW51eFBvcnQo
Y2hyb21pdW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqKmt3YXJncyk6CisgICAgICAgIF9pbml0KHNlbGYsICdjaHJvbWl1bS1ncHUtbGludXgnLCBj
aHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCwKKyAgICAgICAgICAgICAga3dhcmdzKQog
Ci0gICAgZGVmIHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycsICdwbGF0Zm9y
bScsCi0gICAgICAgICAgICAnY2hyb21pdW0tZ3B1JywgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcp
CiAKLSAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3ZlcnJpZGVzKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gX2dwdV9vdmVycmlkZXMoc2VsZikKK2NsYXNzIENocm9taXVtR3B1TWFjUG9ydChjaHJv
bWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2Fy
Z3MpOgorICAgICAgICBfaW5pdChzZWxmLCAnY2hyb21pdW0tZ3B1LW1hYycsIGNocm9taXVtX21h
Yy5DaHJvbWl1bU1hY1BvcnQsCisgICAgICAgICAgICAgIGt3YXJncykKIAogCiBjbGFzcyBDaHJv
bWl1bUdwdVdpblBvcnQoY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCk6CiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ3BvcnRf
bmFtZScsICdjaHJvbWl1bS1ncHUtd2luJyArIHNlbGYudmVyc2lvbigpKQotICAgICAgICBfc2V0
X2dwdV9vcHRpb25zKGt3YXJncy5nZXQoJ29wdGlvbnMnKSkKLSAgICAgICAgY2hyb21pdW1fd2lu
LkNocm9taXVtV2luUG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKLQotICAgIGRlZiBiYXNl
bGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgcmV0dXJuIChbc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgoJ2Nocm9taXVtLWdwdS13aW4nKV0gKwotICAgICAgICAgICAgICAgIGNocm9t
aXVtX3dpbi5DaHJvbWl1bVdpblBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZikpCi0KLSAg
ICBkZWYgcGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYpOgotICAgICAgICByZXR1
cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRlc3RzJywgJ3BsYXRmb3JtJywK
LSAgICAgICAgICAgICdjaHJvbWl1bS1ncHUnLCAndGVzdF9leHBlY3RhdGlvbnMudHh0JykKKyAg
ICAgICAgX2luaXQoc2VsZiwgJ2Nocm9taXVtLWdwdS13aW4nLCBjaHJvbWl1bV93aW4uQ2hyb21p
dW1XaW5Qb3J0LAorICAgICAgICAgICAgICBrd2FyZ3MpCiAKLSAgICBkZWYgdGVzdF9leHBlY3Rh
dGlvbnNfb3ZlcnJpZGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gX2dwdV9vdmVycmlkZXMoc2Vs
ZikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fZ3B1X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHkKaW5kZXggNWM3
OWEzZmViOGYwYTFiMjkyN2IxMWJlNjBlNjc0YjExODAxMzEyNC4uMmFlZjNhN2JjNjljMDk5NWQ0
YTc3ZWQ3ZmRiZTZlYTZhMjFjM2ZjMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9ncHVfdW5pdHRlc3QucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9n
cHVfdW5pdHRlc3QucHkKQEAgLTI2LDcgKzI2LDkgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgdW5p
dHRlc3QKKwogaW1wb3J0IGNocm9taXVtX2dwdQoraW1wb3J0IHRyZWUKIAogCiBjbGFzcyBDaHJv
bWl1bUdwdVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDEsNyArNDMsNyBAQCBjbGFzcyBD
aHJvbWl1bUdwdVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGFzc2VydE92ZXJy
aWRlc1dvcmtlZChzZWxmLCBwb3J0X25hbWUpOgogICAgICAgICAjIHRlc3QgdGhhdCB3ZSBnb3Qg
dGhlIHJpZ2h0IHBvcnQKLSAgICAgICAgcG9ydCA9IGNocm9taXVtX2dwdS5nZXQocG9ydF9uYW1l
PXBvcnRfbmFtZSwgb3B0aW9ucz1Ob25lKQorICAgICAgICBwb3J0ID0gY2hyb21pdW1fZ3B1Lmdl
dChwb3J0X25hbWU9cG9ydF9uYW1lKQogCiAgICAgICAgICMgd2UgdXNlIHN0YXJ0c3dpdGgoKSBp
bnN0ZWFkIG9mIEVxdWFsIHRvIGdsb3NzIG92ZXIgcGxhdGZvcm0gdmVyc2lvbnMuCiAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Lm5hbWUoKS5zdGFydHN3aXRoKHBvcnRfbmFtZSkpCkBAIC01
NCw1ICs1NiwzNyBAQCBjbGFzcyBDaHJvbWl1bUdwdVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Nocm9taXVtLWdwdScgaW4KICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvcnQucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkpCiAKKyAgICAg
ICAgIyB0ZXN0IHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgb3ZlcnJpZGVzIGZpbGUgKG1vc3RseSB0
aGF0IHdlIGRvbid0CisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uIGhlcmUpLgorICAgICAg
ICBwb3J0LnRlc3RfZXhwZWN0YXRpb25zX292ZXJyaWRlcygpCisKKyAgICBkZWYgdGVzdF9ub3Rf
aW5fY2hyb21pdW1fY2hlY2tvdXQoc2VsZik6CisgICAgICAgIGRlZiBtb2NrX3BhdGgoc2VsZiwg
KmNvbXBzKToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgICAgIHBvcnQg
PSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRfbmFtZT0nY2hyb21pdW0tZ3B1JykKKyAgICAgICAgcG9y
dC5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSA9IG1vY2tfcGF0aAorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocG9ydC50ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoKSwgTm9uZSkKKworICAg
IGRlZiB0ZXN0X21pc3Npbmdfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBwb3J0MSA9IGNocm9t
aXVtX2dwdS5nZXQocG9ydF9uYW1lPSdjaHJvbWl1bS1ncHUnKQorICAgICAgICBvdmVycmlkZXNf
cGF0aCA9IHBvcnQxLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJraXQnLCAndG9vbHMnLAor
ICAgICAgICAgICAgJ2xheW91dF90ZXN0cycsICd0ZXN0X2V4cGVjdGF0aW9uc19ncHUudHh0JykK
KyAgICAgICAgcG9ydDIgPSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRfbmFtZT0nY2hyb21pdW0tZ3B1
JywKKyAgICAgICAgICAgIHRyZWU9dHJlZS5Nb2NrVHJlZShleGVjdXRpdmU9Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcz17b3ZlcnJpZGVzX3BhdGg6IE5vbmV9KSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQyLnRlc3RfZXhwZWN0YXRpb25zX292ZXJy
aWRlcygpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBw
b3J0MSA9IGNocm9taXVtX2dwdS5nZXQocG9ydF9uYW1lPSdjaHJvbWl1bS1ncHUnKQorICAgICAg
ICBvdmVycmlkZXNfcGF0aCA9IHBvcnQxLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJraXQn
LCAndG9vbHMnLAorICAgICAgICAgICAgJ2xheW91dF90ZXN0cycsICd0ZXN0X2V4cGVjdGF0aW9u
c19ncHUudHh0JykKKyAgICAgICAgcG9ydDIgPSBjaHJvbWl1bV9ncHUuZ2V0KHBvcnRfbmFtZT0n
Y2hyb21pdW0tZ3B1JywKKyAgICAgICAgICAgIHRyZWU9dHJlZS5Nb2NrVHJlZShleGVjdXRpdmU9
Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcz17b3ZlcnJpZGVzX3Bh
dGg6ICIvLyBncHUifSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydDIudGVzdF9leHBl
Y3RhdGlvbnNfb3ZlcnJpZGVzKCksICIvLyBncHUiKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5w
eQppbmRleCAxNzY5OTFiN2Y2YTY4ZGY3NzlmNzFkNTExMDQ0MTMyODY5ZTFlMTg5Li4zMjY4MDU1
ZTIzOGNlNGIzODQzZGIyN2Q1ODM0YjM5NDBhODYwNWMyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbGludXgucHkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBjbGFzcyBDaHJvbWl1bUxpbnV4UG9ydChj
aHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogCiAgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmLCBj
b25maWd1cmF0aW9uPU5vbmUpOgogICAgICAgICBpZiBub3QgY29uZmlndXJhdGlvbjoKLSAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb24gPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24KKyAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb24gPSBzZWxmLmNvbmZpZ3VyYXRpb24oKQogICAgICAgICBiaW5h
cnlfbmFtZSA9ICd0ZXN0X3NoZWxsJwogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV9kcnQ6
CiAgICAgICAgICAgICBiaW5hcnlfbmFtZSA9ICdEdW1wUmVuZGVyVHJlZScKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
bWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9tYWMucHkKaW5kZXggNjQwMTZhYjA0MmNhZThhOGUyN2JkY2FhYjQ2MWNmNWNhZTNh
MmY4MS4uNTAzYjAxYmVlMjZkMTUwYzhmMDFiYzA0NjkyNjk3ZDkwMjI5ZjNiNSAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9tYWMucHkKQEAgLTEzOCw3ICsxMzgsNyBAQCBjbGFzcyBDaHJvbWl1bU1h
Y1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgIyBGSVhNRTogbWFrZSB8Y29u
ZmlndXJhdGlvbnwgaGFwcHkgd2l0aCBjYXNlLXNlbnNpdGl2ZSBmaWxlCiAgICAgICAgICMgc3lz
dGVtcy4KICAgICAgICAgaWYgbm90IGNvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBjb25maWd1
cmF0aW9uID0gc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uCisgICAgICAgICAgICBjb25maWd1
cmF0aW9uID0gc2VsZi5jb25maWd1cmF0aW9uKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxk
X3BhdGgoY29uZmlndXJhdGlvbiwgc2VsZi5kcml2ZXJfbmFtZSgpICsgJy5hcHAnLAogICAgICAg
ICAgICAgJ0NvbnRlbnRzJywgJ01hY09TJywgc2VsZi5kcml2ZXJfbmFtZSgpKQogCkBAIC0xNDYs
NyArMTQ2LDcgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6
CiAgICAgICAgIGJpbmFyeV9uYW1lID0gJ2xheW91dF90ZXN0X2hlbHBlcicKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy51c2VfZHJ0OgogICAgICAgICAgICAgYmluYXJ5X25hbWUgPSAnTGF5b3V0
VGVzdEhlbHBlcicKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5fb3B0aW9u
cy5jb25maWd1cmF0aW9uLCBiaW5hcnlfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxk
X3BhdGgoc2VsZi5jb25maWd1cmF0aW9uKCksIGJpbmFyeV9uYW1lKQogCiAgICAgZGVmIF9wYXRo
X3RvX3dkaWZmKHNlbGYpOgogICAgICAgICByZXR1cm4gJ3dkaWZmJwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV91bml0
dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fdW5pdHRlc3QucHkKaW5kZXggYTRhOWVhNjA2NmM2ZmEzMDUxOTQ2ZmUyYWRiNmI2
N2Q1YzNjYjAxNy4uNjY4Mjk0MjAzYzBmYzFiZThlMWYxNTc0NzZiZTE4NWZhMjNjZGY2MCAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3VuaXR0ZXN0LnB5CkBAIC0yNiwxMyArMjYsMTYgQEAK
ICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0
ZXN0CitpbXBvcnQgU3RyaW5nSU8KKwogaW1wb3J0IGNocm9taXVtCiBpbXBvcnQgY2hyb21pdW1f
bGludXgKIGltcG9ydCBjaHJvbWl1bV9tYWMKIGltcG9ydCBjaHJvbWl1bV93aW4KLWltcG9ydCB1
bml0dGVzdAotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgb3MKKworZnJvbSBvcHRpb25zIGltcG9y
dCBQb3J0T3B0aW9ucwogCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9j
awogCkBAIC04NSw0NiArODgsMjIgQEAgY2xhc3MgQ2hyb21pdW1Ecml2ZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogCiBjbGFzcyBDaHJvbWl1bVBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLSAgICBjbGFzcyBUZXN0TWFjUG9ydChjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0KToK
LSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgotICAgICAgICAgICAgY2hyb21p
dW1fbWFjLkNocm9taXVtTWFjUG9ydC5fX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X25hbWU9J3Rlc3QtcG9ydCcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9
b3B0aW9ucykKLQotICAgICAgICBkZWYgZGVmYXVsdF9jb25maWd1cmF0aW9uKHNlbGYpOgotICAg
ICAgICAgICAgc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb25fY2FsbGVkID0gVHJ1ZQotICAgICAg
ICAgICAgcmV0dXJuICdkZWZhdWx0JwotCi0gICAgY2xhc3MgVGVzdExpbnV4UG9ydChjaHJvbWl1
bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
cHRpb25zKToKLSAgICAgICAgICAgIGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0Ll9f
aW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3J0X25hbWU9J3Rlc3QtcG9ydCcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMpCi0KLSAgICAg
ICAgZGVmIGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZGVm
YXVsdF9jb25maWd1cmF0aW9uX2NhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHJldHVybiAnZGVm
YXVsdCcKIAogICAgIGRlZiB0ZXN0X3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKLSAgICAgICAg
Y2xhc3MgTW9ja09wdGlvbnM6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAg
ICAgICAgICAgICAgc2VsZi51c2VfZHJ0ID0gVHJ1ZQotCi0gICAgICAgIHBvcnQgPSBDaHJvbWl1
bVBvcnRUZXN0LlRlc3RMaW51eFBvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucygpKQorICAgICAgICBv
cHRpb25zID0gUG9ydE9wdGlvbnModXNlX2RydD1UcnVlLCBjb25maWd1cmF0aW9uPSdkZWZhdWx0
JykKKyAgICAgICAgcG9ydCA9IGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KG9wdGlv
bnM9b3B0aW9ucykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuX3BhdGhfdG9faW1hZ2Vf
ZGlmZigpLmVuZHN3aXRoKAogICAgICAgICAgICAgJy9vdXQvZGVmYXVsdC9JbWFnZURpZmYnKSwg
bXNnPXBvcnQuX3BhdGhfdG9faW1hZ2VfZGlmZigpKQotICAgICAgICBwb3J0ID0gQ2hyb21pdW1Q
b3J0VGVzdC5UZXN0TWFjUG9ydChvcHRpb25zPU1vY2tPcHRpb25zKCkpCisKKyAgICAgICAgcG9y
dCA9IGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQob3B0aW9ucz1vcHRpb25zKQogICAgICAg
ICBzZWxmLmFzc2VydFRydWUocG9ydC5fcGF0aF90b19pbWFnZV9kaWZmKCkuZW5kc3dpdGgoCiAg
ICAgICAgICAgICAnL3hjb2RlYnVpbGQvZGVmYXVsdC9JbWFnZURpZmYnKSkKICAgICAgICAgIyBG
SVhNRTogRmlndXJlIG91dCBob3cgdGhpcyBpcyBnb2luZyB0byB3b3JrIG9uIFdpbmRvd3MuCiAg
ICAgICAgICNwb3J0ID0gY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCgndGVzdC1wb3J0Jywg
b3B0aW9ucz1Nb2NrT3B0aW9ucygpKQogCiAgICAgZGVmIHRlc3Rfc2tpcHBlZF9sYXlvdXRfdGVz
dHMoc2VsZik6Ci0gICAgICAgIGNsYXNzIE1vY2tPcHRpb25zOgotICAgICAgICAgICAgZGVmIF9f
aW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYudXNlX2RydCA9IFRydWUKLQotICAg
ICAgICBwb3J0ID0gQ2hyb21pdW1Qb3J0VGVzdC5UZXN0TGludXhQb3J0KG9wdGlvbnM9TW9ja09w
dGlvbnMoKSkKKyAgICAgICAgb3B0aW9ucyA9IFBvcnRPcHRpb25zKHVzZV9kcnQ9VHJ1ZSkKKyAg
ICAgICAgcG9ydCA9IGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KG9wdGlvbnM9b3B0
aW9ucykKIAogICAgICAgICBmYWtlX3Rlc3QgPSBvcy5wYXRoLmpvaW4ocG9ydC5sYXlvdXRfdGVz
dHNfZGlyKCksICJmYXN0L2pzL25vdC1nb29kLmpzIikKIApAQCAtMTM3LDI0ICsxMTYsNiBAQCBE
RUZFUiBMSU5VWCBXSU4gOiBmYXN0L2pzL3ZlcnktZ29vZC5qcyA9IFRJTUVPVVQgUEFTUyIiIgog
ICAgICAgICBza2lwcGVkX3Rlc3RzID0gcG9ydC5za2lwcGVkX2xheW91dF90ZXN0cyhleHRyYV90
ZXN0X2ZpbGVzPVtmYWtlX3Rlc3QsIF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZmFzdC9q
cy9ub3QtZ29vZC5qcyIgaW4gc2tpcHBlZF90ZXN0cykKIAotICAgIGRlZiB0ZXN0X2RlZmF1bHRf
Y29uZmlndXJhdGlvbihzZWxmKToKLSAgICAgICAgY2xhc3MgRW1wdHlPcHRpb25zOgotICAgICAg
ICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAg
ICBvcHRpb25zID0gRW1wdHlPcHRpb25zKCkKLSAgICAgICAgcG9ydCA9IENocm9taXVtUG9ydFRl
c3QuVGVzdExpbnV4UG9ydChvcHRpb25zKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRp
b25zLmNvbmZpZ3VyYXRpb24sICdkZWZhdWx0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBv
cnQuZGVmYXVsdF9jb25maWd1cmF0aW9uX2NhbGxlZCkKLQotICAgICAgICBjbGFzcyBPcHRpb25z
V2l0aFVuc2V0Q29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToK
LSAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBOb25lCi0KLSAgICAgICAgb3B0
aW9ucyA9IE9wdGlvbnNXaXRoVW5zZXRDb25maWd1cmF0aW9uKCkKLSAgICAgICAgcG9ydCA9IENo
cm9taXVtUG9ydFRlc3QuVGVzdExpbnV4UG9ydChvcHRpb25zKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhvcHRpb25zLmNvbmZpZ3VyYXRpb24sICdkZWZhdWx0JykKLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHBvcnQuZGVmYXVsdF9jb25maWd1cmF0aW9uX2NhbGxlZCkKIAogaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpp
bmRleCA2OTM1NzQ0MmFlYmUzMWUwYTE0NWQzYzlhM2UxNTkwNzdiMTA0NTYwLi45OThiYTMyYTg3
NDRkZTU0NjcwNWJhMzBkNjM2MWQxOTA2ZGIxYjNlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CkBAIC0z
MiwxMSArMzIsMTMgQEAKIAogaW1wb3J0IHN5cwogCi1BTExfUE9SVF9OQU1FUyA9IFsndGVzdCcs
ICdkcnlydW4nLCAnbWFjJywgJ3dpbicsICdndGsnLCAncXQnLCAnY2hyb21pdW0tbWFjJywKK0FM
TF9QT1JUX05BTUVTID0gWydtYWMnLCAnd2luJywgJ2d0aycsICdxdCcsICdjaHJvbWl1bS1tYWMn
LAogICAgICAgICAgICAgICAgICAgJ2Nocm9taXVtLWxpbnV4JywgJ2Nocm9taXVtLXdpbicsICdn
b29nbGUtY2hyb21lLXdpbicsCiAgICAgICAgICAgICAgICAgICAnZ29vZ2xlLWNocm9tZS1tYWMn
LCAnZ29vZ2xlLWNocm9tZS1saW51eDMyJywgJ2dvb2dsZS1jaHJvbWUtbGludXg2NCddCiAKIAor
IyBGSVhNRTogVGhlcmUgc2hvdWxkIGJlIHNvbWUgd2F5IG9mIGZpZ3VyaW5nIG91dCB3aGljaCBv
cHRpb25zIGFyZQorIyBuZWVkZWQgYnkgd2hpY2ggcG9ydHMgc28gd2UgY2FuIGRvIHNvbWUgZXJy
b3IgY2hlY2tpbmcuCiBkZWYgZ2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dh
cmdzKToKICAgICAiIiJSZXR1cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIFBvcnQgaW50
ZXJmYWNlLiBJZgogICAgIHBvcnRfbmFtZSBpcyBOb25lLCB0aGlzIHJvdXRpbmUgYXR0ZW1wdHMg
dG8gZ3Vlc3MgYXQgdGhlIG1vc3QKQEAgLTEwMiw3ICsxMDQsNyBAQCBkZWYgX2dldF9rd2FyZ3Mo
Kiprd2FyZ3MpOgogICAgICAgICBtYWtlciA9IGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQK
ICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2dvb2dsZS1jaHJvbWUnKToKICAgICAg
ICAgaW1wb3J0IGdvb2dsZV9jaHJvbWUKLSAgICAgICAgbWFrZXIgPSBnb29nbGVfY2hyb21lLkdl
dEdvb2dsZUNocm9tZVBvcnQKKyAgICAgICAgbWFrZXIgPSBnb29nbGVfY2hyb21lLmdldAogICAg
IGVsc2U6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vuc3VwcG9ydGVkIHBv
cnQ6ICVzJyAlIHBvcnRfdG9fdXNlKQogICAgIHJldHVybiBtYWtlcigqKmt3YXJncykKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFj
dG9yeV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQppbmRleCA4MWMzNzMyN2EyMDk5MmVlMGM0YzNj
ZDllODRkMzExZDZlYTQ1OThiLi5kY2NhNDIyZDAyYjQ2NjAyMTZjYWVhYjFkYjViYmNiNGJmN2My
ZTA4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CkBAIC0yOSwxOCArMjks
OSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBjaHJvbWl1bV9ncHUK
LWltcG9ydCBjaHJvbWl1bV9saW51eAotaW1wb3J0IGNocm9taXVtX21hYwotaW1wb3J0IGNocm9t
aXVtX3dpbgotaW1wb3J0IGRyeXJ1bgogaW1wb3J0IGZhY3RvcnkKLWltcG9ydCBnb29nbGVfY2hy
b21lCi1pbXBvcnQgZ3RrCi1pbXBvcnQgbWFjCi1pbXBvcnQgcXQKLWltcG9ydCB0ZXN0Ci1pbXBv
cnQgd2luCitpbXBvcnQgb3B0aW9ucworaW1wb3J0IHRyZWUKIAogCiBjbGFzcyBGYWN0b3J5VGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00OSwxMzQgKzQwLDE0NSBAQCBjbGFzcyBGYWN0b3J5
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgVGFyZ2V0IGlzIHNwZWNpZmllZCBieSBwb3J0
X25hbWUsIHN5cy5wbGF0Zm9ybSBhbmQgb3B0aW9ucy4KIAogICAgICIiIgotICAgICMgRklYTUU6
IFRoZSBwb3J0cyB0aGVtc2VsdmVzIHNob3VsZCBleHBvc2Ugd2hhdCBvcHRpb25zIHRoZXkgcmVx
dWlyZSwKLSAgICAjIGluc3RlYWQgb2YgcGFzc2luZyBnZW5lcmljICJvcHRpb25zIi4KLQotICAg
IGNsYXNzIFdlYktpdE9wdGlvbnMob2JqZWN0KToKLSAgICAgICAgIiIiUmVwcmVzZW50cyB0aGUg
bWluaW11bSBvcHRpb25zIGZvciBXZWJLaXQgcG9ydC4iIiIKLSAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgotICAgICAgICAgICAgc2VsZi5waXhlbF90ZXN0cyA9IEZhbHNlCi0KLSAgICBjbGFz
cyBDaHJvbWl1bU9wdGlvbnMoV2ViS2l0T3B0aW9ucyk6Ci0gICAgICAgICIiIlJlcHJlc2VudHMg
bWluaW11bSBvcHRpb25zIGZvciBDaHJvbWl1bSBwb3J0LiIiIgotICAgICAgICBkZWYgX19pbml0
X18oc2VsZik6Ci0gICAgICAgICAgICBGYWN0b3J5VGVzdC5XZWJLaXRPcHRpb25zLl9faW5pdF9f
KHNlbGYpCi0gICAgICAgICAgICBzZWxmLmNocm9taXVtID0gVHJ1ZQotCiAgICAgZGVmIHNldFVw
KHNlbGYpOgogICAgICAgICBzZWxmLnJlYWxfc3lzX3BsYXRmb3JtID0gc3lzLnBsYXRmb3JtCi0g
ICAgICAgIHNlbGYud2Via2l0X29wdGlvbnMgPSBGYWN0b3J5VGVzdC5XZWJLaXRPcHRpb25zKCkK
LSAgICAgICAgc2VsZi5jaHJvbWl1bV9vcHRpb25zID0gRmFjdG9yeVRlc3QuQ2hyb21pdW1PcHRp
b25zKCkKKyAgICAgICAgc2VsZi53ZWJraXRfb3B0aW9ucyA9IG9wdGlvbnMuUG9ydE9wdGlvbnMo
cGl4ZWxfdGVzdHM9RmFsc2UpCisgICAgICAgIHNlbGYuY2hyb21pdW1fb3B0aW9ucyA9IG9wdGlv
bnMuUG9ydE9wdGlvbnMocGl4ZWxfdGVzdHM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21pdW09VHJ1ZSkKKyAgICAgICAgc2Vs
Zi5ncHVfb3B0aW9ucyA9IG9wdGlvbnMuUG9ydE9wdGlvbnMocG9ydF9uYW1lPSJjaHJvbWl1bS1n
cHUiKQorICAgICAgICBzZWxmLnRyZWUgPSB0cmVlLk1vY2tUcmVlKGV4ZWN1dGl2ZT10cmVlLk1v
Y2tFeGVjdXRpdmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1
cmF0aW9uPSdkZWZhdWx0JykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc3lz
LnBsYXRmb3JtID0gc2VsZi5yZWFsX3N5c19wbGF0Zm9ybQogCi0gICAgZGVmIGFzc2VydF9wb3J0
KHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfcG9ydCwgcG9ydF9vYmo9Tm9uZSk6CisgICAgZGVm
IGFzc2VydF9wb3J0KHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBwbGF0Zm9ybT1Ob25lLCBvcHRpb25z
PU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU9Tm9uZSk6CiAgICAgICAg
ICIiIkhlbHBlciBhc3NlcnQgZm9yIHBvcnRfbmFtZS4KIAogICAgICAgICBBcmdzOgogICAgICAg
ICAgIHBvcnRfbmFtZTogcG9ydCBuYW1lIHRvIGdldCBwb3J0IG9iamVjdC4KLSAgICAgICAgICBl
eHBlY3RlZF9wb3J0OiBjbGFzcyBvZiBleHBlY3RlZCBwb3J0IG9iamVjdC4KLSAgICAgICAgICBw
b3J0X29iajogb3B0aW9uYWwgcG9ydCBvYmplY3QKKyAgICAgICAgICBleHBlY3RlZF9uYW1lOiAo
cHJlZml4IG9mKSBuYW1lIG9mIGV4cGVjdGVkIHBvcnQgb2JqZWN0LgogICAgICAgICAiIiIKLSAg
ICAgICAgcG9ydF9vYmogPSBwb3J0X29iaiBvciBmYWN0b3J5LmdldChwb3J0X25hbWU9cG9ydF9u
YW1lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3J0X29iaiwgZXhwZWN0
ZWRfcG9ydCkpCi0KLSAgICBkZWYgYXNzZXJ0X3BsYXRmb3JtX3BvcnQoc2VsZiwgcGxhdGZvcm0s
IG9wdGlvbnMsIGV4cGVjdGVkX3BvcnQpOgotICAgICAgICAiIiJIZWxwZXIgYXNzZXJ0IGZvciBw
bGF0Zm9ybSBhbmQgb3B0aW9ucy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHBsYXRmb3Jt
OiBzeXMucGxhdGZvcm0uCi0gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyB0byBnZXQgcG9ydCBv
YmplY3QuCi0gICAgICAgICAgZXhwZWN0ZWRfcG9ydDogY2xhc3Mgb2YgZXhwZWN0ZWQgcG9ydCBv
YmplY3QuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIG9yaWdfcGxhdGZvcm0gPSBzeXMucGxhdGZv
cm0KLSAgICAgICAgc3lzLnBsYXRmb3JtID0gcGxhdGZvcm0KLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGlzaW5zdGFuY2UoZmFjdG9yeS5nZXQob3B0aW9ucz1vcHRpb25zKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcG9ydCkpCi0gICAgICAgIHN5cy5wbGF0
Zm9ybSA9IG9yaWdfcGxhdGZvcm0KKyAgICAgICAgaWYgcGxhdGZvcm06CisgICAgICAgICAgICBv
cmlnX3BsYXRmb3JtID0gc3lzLnBsYXRmb3JtCisgICAgICAgICAgICBzeXMucGxhdGZvcm0gPSBw
bGF0Zm9ybQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3J0X29iaiA9IGZhY3RvcnkuZ2V0
KHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJlZT1zZWxmLnRyZWUpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocG9ydF9vYmoubmFtZSgpLnN0YXJ0c3dpdGgoZXhwZWN0ZWRfbmFtZSkpCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3J0X29iai5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwg
J2RlZmF1bHQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgcGxhdGZvcm06Cisg
ICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtID0gb3JpZ19wbGF0Zm9ybQogCiAgICAgZGVmIHRl
c3RfdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgidGVzdCIsIHRlc3QuVGVz
dFBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJ0ZXN0IiwgZXhwZWN0
ZWRfbmFtZT0idGVzdCIpCiAKICAgICBkZWYgdGVzdF9kcnlydW4oc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0X3BvcnQoImRyeXJ1bi10ZXN0IiwgZHJ5cnVuLkRyeVJ1blBvcnQpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X3BvcnQoImRyeXJ1bi1tYWMiLCBkcnlydW4uRHJ5UnVuUG9ydCkKKyAgICAg
ICAgIyBOb3RlIHRoYXQgeW91IGNhbid0IHRlbGwgaWYgdGhpcyBpcyBhIGRyeXJ1biBwb3J0IG9y
IG5vdC4KKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9ImRyeXJ1bi10ZXN0Iiwg
ZXhwZWN0ZWRfbmFtZT0idGVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1l
PSJkcnlydW4tbWFjIiwgZXhwZWN0ZWRfbmFtZT0ibWFjIikKIAogICAgIGRlZiB0ZXN0X21hYyhz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgibWFjIiwgbWFjLk1hY1BvcnQpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImRhcndpbiIsIE5vbmUsIG1hYy5NYWNQb3J0
KQotICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9ybV9wb3J0KCJkYXJ3aW4iLCBzZWxmLndlYmtp
dF9vcHRpb25zLCBtYWMuTWFjUG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25h
bWU9Im1hYyIsIGV4cGVjdGVkX25hbWU9Im1hYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQo
cGxhdGZvcm09ImRhcndpbiIsIGV4cGVjdGVkX25hbWU9Im1hYyIpCiAKICAgICBkZWYgdGVzdF93
aW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoIndpbiIsIHdpbi5XaW5Qb3J0KQot
ICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9ybV9wb3J0KCJ3aW4zMiIsIE5vbmUsIHdpbi5XaW5Q
b3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9ybV9wb3J0KCJ3aW4zMiIsIHNlbGYud2Vi
a2l0X29wdGlvbnMsIHdpbi5XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wbGF0Zm9ybV9w
b3J0KCJjeWd3aW4iLCBOb25lLCB3aW4uV2luUG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcGxh
dGZvcm1fcG9ydCgiY3lnd2luIiwgc2VsZi53ZWJraXRfb3B0aW9ucywgd2luLldpblBvcnQpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJ3aW4iLCBleHBlY3RlZF9uYW1lPSJ3
aW4iKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBsYXRmb3JtPSJ3aW4zMiIsIGV4cGVjdGVk
X25hbWU9IndpbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocGxhdGZvcm09ImN5Z3dpbiIs
IGV4cGVjdGVkX25hbWU9IndpbiIpCiAKICAgICBkZWYgdGVzdF9nb29nbGVfY2hyb21lKHNlbGYp
OgotICAgICAgICAjIFRoZSBhY3R1YWwgQ2hyb21lIGNsYXNzIG5hbWVzIGFyZW4ndCBhdmFpbGFi
bGUgc28gd2UgdGVzdCB0aGF0IHRoZQotICAgICAgICAjIG9iamVjdHMgd2UgZ2V0IGFyZSBhdCBs
ZWFzdCBzdWJjbGFzc2VzIG9mIHRoZSBDaHJvbWl1bSB2ZXJzaW9ucy4KLSAgICAgICAgc2VsZi5h
c3NlcnRfcG9ydCgiZ29vZ2xlLWNocm9tZS1saW51eDMyIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydCgiZ29vZ2xlLWNocm9tZS1saW51eDY0IiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydCgiZ29vZ2xlLWNocm9tZS13aW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9t
aXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImdvb2ds
ZS1jaHJvbWUtbWFjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9tYWMuQ2hy
b21pdW1NYWNQb3J0KQorICAgICAgICAjIE5vdGUgdGhhdCB5b3UgY2FuJ3QgdGVsbCBpZiB0aGlz
IGlzIGEgQ2hyb21lIGNsYXNzIG9yIG5vdCAtCisgICAgICAgICMgQ2hyb21lIGNsYXNzZXMgY2xh
aW0gdG8gYmUgQ2hyb21pdW0gY2xhc3Nlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0
X25hbWU9Imdvb2dsZS1jaHJvbWUtbGludXgzMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0tbGludXgiKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0
KHBvcnRfbmFtZT0iZ29vZ2xlLWNocm9tZS1saW51eDY0IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1saW51eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0
X3BvcnQocG9ydF9uYW1lPSJnb29nbGUtY2hyb21lLXdpbiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0td2luIikKKyAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydChwb3J0X25hbWU9Imdvb2dsZS1jaHJvbWUtbWFjIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1tYWMiKQorCisgICAgZGVmIHRlc3RfZ29vZ2xl
X2Nocm9tZV91bmtub3duKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBs
ZW1lbnRlZEVycm9yLCBmYWN0b3J5LmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9y
dF9uYW1lPSJnb29nbGUtY2hyb21lLXVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS11bmtub3duIikKIAogICAgIGRlZiB0ZXN0X2d0ayhz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiZ3RrIiwgZ3RrLkd0a1BvcnQpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJndGsiLCBleHBlY3RlZF9uYW1lPSJndGsi
KQogCiAgICAgZGVmIHRlc3RfcXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoInF0
IiwgcXQuUXRQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0icXQiLCBl
eHBlY3RlZF9uYW1lPSJxdCIpCiAKICAgICBkZWYgdGVzdF9jaHJvbWl1bV9ncHVfbGludXgoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLWdwdS1saW51eCIsIGNocm9t
aXVtX2dwdS5DaHJvbWl1bUdwdUxpbnV4UG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChw
b3J0X25hbWU9ImNocm9taXVtLWdwdS1saW51eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0tZ3B1LWxpbnV4IikKKyAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydChwbGF0Zm9ybT0ibGludXgyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X25h
bWU9ImNocm9taXVtLWdwdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFt
ZT0iY2hyb21pdW0tZ3B1LWxpbnV4IikKIAogICAgIGRlZiB0ZXN0X2Nocm9taXVtX2dwdV9tYWMo
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLWdwdS1tYWMiLCBjaHJv
bWl1bV9ncHUuQ2hyb21pdW1HcHVNYWNQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBv
cnRfbmFtZT0iY2hyb21pdW0tZ3B1LW1hYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfbmFtZT0iY2hyb21pdW0tZ3B1LW1hYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQo
cGxhdGZvcm09ImRhcndpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9uYW1lPSJj
aHJvbWl1bS1ncHUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU9ImNo
cm9taXVtLWdwdS1tYWMiKQogCiAgICAgZGVmIHRlc3RfY2hyb21pdW1fZ3B1X3dpbihzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tZ3B1LXdpbiIsIGNocm9taXVtX2dw
dS5DaHJvbWl1bUdwdVdpblBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1l
PSJjaHJvbWl1bS1ncHUtd2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9u
YW1lPSJjaHJvbWl1bS1ncHUtd2luIikKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwbGF0Zm9y
bT0id2luMzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfbmFtZT0iY2hyb21pdW0t
Z3B1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1n
cHUtd2luIikKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwbGF0Zm9ybT0iY3lnd2luIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3J0X25hbWU9ImNocm9taXVtLWdwdSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0tZ3B1LXdpbiIpCisKKyAg
ICBkZWYgdGVzdF9jaHJvbWl1bV9ncHVfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgZmFjdG9yeS5nZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvcnRfbmFtZT0iY2hyb21pdW0tZ3B1LXVua25vd24iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1ncHUtdW5rbm93biIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYuYXNzZXJ0
X3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtPSJ1bmtub3duIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9uYW1lPSJjaHJvbWl1bS1ncHUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1ncHUtdW5rbm93biIp
CiAKICAgICBkZWYgdGVzdF9jaHJvbWl1bV9tYWMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0
X3BvcnQoImNocm9taXVtLW1hYyIsIGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImRhcndpbiIsIHNlbGYuY2hyb21pdW1fb3B0
aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9tYWMuQ2hy
b21pdW1NYWNQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0iY2hyb21p
dW0tbWFjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1
bS1tYWMiKQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBsYXRmb3JtPSJkYXJ3aW4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9b3B0aW9ucy5Qb3J0T3B0aW9ucyhjaHJvbWl1
bT1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lPSJjaHJvbWl1
bS1tYWMiKQogCiAgICAgZGVmIHRlc3RfY2hyb21pdW1fbGludXgoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0X3BvcnQoImNocm9taXVtLWxpbnV4IiwgY2hyb21pdW1fbGludXguQ2hyb21pdW1M
aW51eFBvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BsYXRmb3JtX3BvcnQoImxpbnV4MiIsIHNl
bGYuY2hyb21pdW1fb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9y
dChwb3J0X25hbWU9ImNocm9taXVtLWxpbnV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZF9uYW1lPSJjaHJvbWl1bS1saW51eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQo
cGxhdGZvcm09ImxpbnV4MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz1vcHRp
b25zLlBvcnRPcHRpb25zKGNocm9taXVtPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkX25hbWU9ImNocm9taXVtLWxpbnV4IikKIAogICAgIGRlZiB0ZXN0X2Nocm9taXVt
X3dpbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0td2luIiwgY2hy
b21pdW1fd2luLkNocm9taXVtV2luUG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcGxhdGZvcm1f
cG9ydCgid2luMzIiLCBzZWxmLmNocm9taXVtX29wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfcGxhdGZvcm1fcG9ydCgiY3lnd2luIiwgc2VsZi5jaHJvbWl1bV9vcHRpb25zLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9taXVtX3dpbi5DaHJvbWl1bVdp
blBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSJjaHJvbWl1bS13aW4i
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU9ImNocm9taXVtLXdpbiIp
CisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocGxhdGZvcm09IndpbjMyIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMuUG9ydE9wdGlvbnMoY2hyb21pdW09VHJ1ZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0td2luIikK
KyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwbGF0Zm9ybT0iY3lnd2luIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMuUG9ydE9wdGlvbnMoY2hyb21pdW09VHJ1ZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZT0iY2hyb21pdW0td2luIikK
KworICAgIGRlZiB0ZXN0X2Nocm9taXVtX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGZhY3RvcnkuZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3J0X25hbWU9ImNocm9taXVtLXVua25vd24iKQogCiAgICAgZGVmIHRl
c3RfZ2V0X2FsbF9wb3J0cyhzZWxmKToKICAgICAgICAgcG9ydHMgPSBmYWN0b3J5LmdldF9hbGwo
KQogICAgICAgICBmb3IgbmFtZSBpbiBmYWN0b3J5LkFMTF9QT1JUX05BTUVTOgogICAgICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgaW4gcG9ydHMua2V5cygpKQotICAgICAgICBzZWxmLmFz
c2VydF9wb3J0KCJ0ZXN0IiwgdGVzdC5UZXN0UG9ydCwgcG9ydHNbInRlc3QiXSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydCgiZHJ5cnVuLXRlc3QiLCBkcnlydW4uRHJ5UnVuUG9ydCwgcG9ydHNb
ImRyeXJ1biJdKQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KCJkcnlydW4tbWFjIiwgZHJ5cnVu
LkRyeVJ1blBvcnQsIHBvcnRzWyJkcnlydW4iXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgi
bWFjIiwgbWFjLk1hY1BvcnQsIHBvcnRzWyJtYWMiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9y
dCgid2luIiwgd2luLldpblBvcnQsIHBvcnRzWyJ3aW4iXSkKLSAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydCgiZ3RrIiwgZ3RrLkd0a1BvcnQsIHBvcnRzWyJndGsiXSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydCgicXQiLCBxdC5RdFBvcnQsIHBvcnRzWyJxdCJdKQotICAgICAgICBzZWxmLmFzc2Vy
dF9wb3J0KCJjaHJvbWl1bS1tYWMiLCBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcnRzWyJjaHJvbWl1bS1tYWMiXSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfcG9ydCgiY2hyb21pdW0tbGludXgiLCBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxp
bnV4UG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21pdW0tbGludXgi
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydCgiY2hyb21pdW0td2luIiwgY2hyb21pdW1fd2lu
LkNocm9taXVtV2luUG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0c1siY2hyb21p
dW0td2luIl0pCisgICAgICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCdnb29nbGUtY2hy
b21lJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnRzW25hbWVdLm5hbWUo
KS5zdGFydHN3aXRoKG5hbWUpKQogCiAgICAgZGVmIHRlc3RfdW5rbm93bl9zcGVjaWZpZWQoc2Vs
Zik6CiAgICAgICAgICMgVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB5b3Ugc3BlY2lmeSBhbiB1bmtu
b3duIHBvcnQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJvbWUucHkKaW5kZXggYmZmYzg2MGUyMmE4
NzllNmExNzQ0OTliMjM5OWM2Y2ZiZDQ5YmEyYS4uMjk5MmJlYmRhN2RjOTIxODgzZTk0NGRkNjRm
NDkxYzlkYWQ3ZWQ1YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9nb29nbGVfY2hyb21lLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZS5weQpAQCAtMjUsNTQg
KzI1LDM4IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIAotZGVmIEdldEdvb2dsZUNocm9tZVBvcnQoKipr
d2FyZ3MpOgorZGVmIGdldCgqKmt3YXJncyk6CiAgICAgIiIiU29tZSB0ZXN0cyBoYXZlIHNsaWdo
dGx5IGRpZmZlcmVudCByZXN1bHRzIHdoZW4gY29tcGlsZWQgYXMgR29vZ2xlCiAgICAgQ2hyb21l
IHZzIENocm9taXVtLiAgSW4gdGhvc2UgY2FzZXMsIHdlIHByZXBlbmQgYW4gYWRkaXRpb25hbCBk
aXJlY3RvcnkgdG8KICAgICB0byB0aGUgYmFzZWxpbmUgcGF0aHMuIiIiCiAgICAgcG9ydF9uYW1l
ID0ga3dhcmdzWydwb3J0X25hbWUnXQogICAgIGRlbCBrd2FyZ3NbJ3BvcnRfbmFtZSddCi0gICAg
aWYgcG9ydF9uYW1lID09ICdnb29nbGUtY2hyb21lLWxpbnV4MzInOgotICAgICAgICBpbXBvcnQg
Y2hyb21pdW1fbGludXgKIAotICAgICAgICBjbGFzcyBHb29nbGVDaHJvbWVMaW51eDMyUG9ydChj
aHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydCk6Ci0gICAgICAgICAgICBkZWYgYmFzZWxp
bmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGF0aHMgPSBjaHJvbWl1bV9s
aW51eC5DaHJvbWl1bUxpbnV4UG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZikKLSAgICAgICAgICAgICAgICBwYXRocy5pbnNlcnQoMCwgc2VsZi5fd2Vi
a2l0X2Jhc2VsaW5lX3BhdGgoCi0gICAgICAgICAgICAgICAgICAgICdnb29nbGUtY2hyb21lLWxp
bnV4MzInKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcGF0aHMKLSAgICAgICAgcmV0dXJuIEdv
b2dsZUNocm9tZUxpbnV4MzJQb3J0KCoqa3dhcmdzKQotICAgIGVsaWYgcG9ydF9uYW1lID09ICdn
b29nbGUtY2hyb21lLWxpbnV4NjQnOgorICAgIGlmIHBvcnRfbmFtZSBpbiAoJ2dvb2dsZS1jaHJv
bWUtbGludXgzMicsICdnb29nbGUtY2hyb21lLWxpbnV4NjQnKToKICAgICAgICAgaW1wb3J0IGNo
cm9taXVtX2xpbnV4Ci0KLSAgICAgICAgY2xhc3MgR29vZ2xlQ2hyb21lTGludXg2NFBvcnQoY2hy
b21pdW1fbGludXguQ2hyb21pdW1MaW51eFBvcnQpOgotICAgICAgICAgICAgZGVmIGJhc2VsaW5l
X3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhdGhzID0gY2hyb21pdW1fbGlu
dXguQ2hyb21pdW1MaW51eFBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoCi0gICAgICAgICAgICAg
ICAgICAgIHNlbGYpCi0gICAgICAgICAgICAgICAgcGF0aHMuaW5zZXJ0KDAsIHNlbGYuX3dlYmtp
dF9iYXNlbGluZV9wYXRoKAotICAgICAgICAgICAgICAgICAgICAnZ29vZ2xlLWNocm9tZS1saW51
eDY0JykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhzCi0gICAgICAgIHJldHVybiBHb29n
bGVDaHJvbWVMaW51eDY0UG9ydCgqKmt3YXJncykKKyAgICAgICAgc3VwZXIgPSBjaHJvbWl1bV9s
aW51eC5DaHJvbWl1bUxpbnV4UG9ydAorICAgICAgICBiYXNlbGluZV9kaXJfbmFtZSA9IHBvcnRf
bmFtZQogICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2dvb2dsZS1jaHJvbWUtbWFjJyk6
CiAgICAgICAgIGltcG9ydCBjaHJvbWl1bV9tYWMKLQotICAgICAgICBjbGFzcyBHb29nbGVDaHJv
bWVNYWNQb3J0KGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQpOgotICAgICAgICAgICAgZGVm
IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhdGhzID0gY2hy
b21pdW1fbWFjLkNocm9taXVtTWFjUG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZikKLSAgICAgICAgICAgICAgICBwYXRocy5pbnNlcnQoMCwgc2VsZi5f
d2Via2l0X2Jhc2VsaW5lX3BhdGgoCi0gICAgICAgICAgICAgICAgICAgICdnb29nbGUtY2hyb21l
LW1hYycpKQotICAgICAgICAgICAgICAgIHJldHVybiBwYXRocwotICAgICAgICByZXR1cm4gR29v
Z2xlQ2hyb21lTWFjUG9ydCgqKmt3YXJncykKKyAgICAgICAgc3VwZXIgPSBjaHJvbWl1bV9tYWMu
Q2hyb21pdW1NYWNQb3J0CisgICAgICAgIGJhc2VsaW5lX2Rpcl9uYW1lID0gJ2dvb2dsZS1jaHJv
bWUtbWFjJwogICAgIGVsaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2dvb2dsZS1jaHJvbWUtd2lu
Jyk6CiAgICAgICAgIGltcG9ydCBjaHJvbWl1bV93aW4KKyAgICAgICAgc3VwZXIgPSBjaHJvbWl1
bV93aW4uQ2hyb21pdW1XaW5Qb3J0CisgICAgICAgIGJhc2VsaW5lX2Rpcl9uYW1lID0gJ2dvb2ds
ZS1jaHJvbWUtd2luJworICAgIGVsc2U6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoJ3Vuc3VwcG9ydGVkIHBvcnQ6ICVzJyAlIHBvcnRfbmFtZSkKKworICAgIHJldHVybiBfbWFr
ZShzdXBlciwgYmFzZWxpbmVfZGlyX25hbWUsICoqa3dhcmdzKQorCisKK2RlZiBfbWFrZShzdXBl
ciwgYmFzZWxpbmVfZGlyX25hbWUsICoqa3dhcmdzKToKKyAgICBvYmplY3QgPSBzdXBlcigqKmt3
YXJncykKKworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aCgpOgorICAgICAgICBwYXRocyA9
IHN1cGVyLmJhc2VsaW5lX3NlYXJjaF9wYXRoKG9iamVjdCkKKyAgICAgICAgcGF0aHMuaW5zZXJ0
KDAsIG9iamVjdC5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoYmFzZWxpbmVfZGlyX25hbWUpKQorICAg
ICAgICByZXR1cm4gcGF0aHMKIAotICAgICAgICBjbGFzcyBHb29nbGVDaHJvbWVXaW5Qb3J0KGNo
cm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQpOgotICAgICAgICAgICAgZGVmIGJhc2VsaW5lX3Nl
YXJjaF9wYXRoKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhdGhzID0gY2hyb21pdW1fd2luLkNo
cm9taXVtV2luUG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgKLSAgICAgICAgICAgICAgICAgICAg
c2VsZikKLSAgICAgICAgICAgICAgICBwYXRocy5pbnNlcnQoMCwgc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgoCi0gICAgICAgICAgICAgICAgICAgICdnb29nbGUtY2hyb21lLXdpbicpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXRocwotICAgICAgICByZXR1cm4gR29vZ2xlQ2hyb21lV2lu
UG9ydCgqKmt3YXJncykKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1bnN1cHBvcnRl
ZCBwb3J0OiAlcycgJSBwb3J0X25hbWUpCisgICAgb2JqZWN0LmJhc2VsaW5lX3NlYXJjaF9wYXRo
ID0gYmFzZWxpbmVfc2VhcmNoX3BhdGgKKyAgICByZXR1cm4gb2JqZWN0CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2dvb2dsZV9jaHJv
bWVfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2dvb2dsZV9jaHJvbWVfdW5pdHRlc3QucHkKaW5kZXggODVlOTMzODcyMmFmNjg3ZGU3
YTFlYzMzYjZiMjI0ZGM2ZjllYmU1NC4uZjU2OTg1ODEyZDJkYzJmMmFkYzFjN2VhNGQxOGQyZjJk
YjUwYTcwNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9nb29nbGVfY2hyb21lX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ29vZ2xlX2Nocm9tZV91bml0dGVzdC5w
eQpAQCAtNDEsNyArNDEsOSBAQCBjbGFzcyBHZXRHb29nbGVDaHJvbWVQb3J0VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuX3ZlcmlmeV9iYXNlbGluZV9wYXRoKCdnb29nbGUt
Y2hyb21lLXdpbicsICdnb29nbGUtY2hyb21lLXdpbi12aXN0YScpCiAKICAgICBkZWYgX3Zlcmlm
eV9iYXNlbGluZV9wYXRoKHNlbGYsIGV4cGVjdGVkX3BhdGgsIHBvcnRfbmFtZSk6Ci0gICAgICAg
IHBvcnQgPSBnb29nbGVfY2hyb21lLkdldEdvb2dsZUNocm9tZVBvcnQocG9ydF9uYW1lPXBvcnRf
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cHRpb25zPU5vbmUpCisgICAgICAgIHBvcnQgPSBnb29nbGVfY2hyb21lLmdldChwb3J0X25hbWU9
cG9ydF9uYW1lKQogICAgICAgICBwYXRoID0gcG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgpWzBd
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcGF0aCwgb3MucGF0aC5zcGxpdChw
YXRoKVsxXSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWlu
KCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvbWFjX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKaW5kZXggMzI3YjE5ZWU1ZmE1NDUwM2I0YWZj
MjliNzFlMDBlNzliZGE1NmYxYi4uNGVlMzYxZWViMmM1Nzk3ZTczYWJlZWVlOTdlZDhkZGI4N2Qw
NDI0OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKQEAgLTM1LDEyICszNSwxMSBAQCBp
bXBvcnQgcG9ydF90ZXN0Y2FzZQogCiAKIGNsYXNzIE1hY1Rlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0
VGVzdENhc2UpOgotICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgb3B0aW9ucz1wb3J0X3Rlc3RjYXNl
Lk1vY2tPcHRpb25zKCkpOgorICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgb3B0aW9ucz1wb3J0X3Rl
c3RjYXNlLm1vY2tfb3B0aW9ucyk6CiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2lu
JzoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHBvcnRfb2JqID0gbWFjLk1hY1Bv
cnQob3B0aW9ucz1vcHRpb25zKQogICAgICAgICBwb3J0X29iai5fb3B0aW9ucy5yZXN1bHRzX2Rp
cmVjdG9yeSA9IHBvcnRfb2JqLnJlc3VsdHNfZGlyZWN0b3J5KCkKLSAgICAgICAgcG9ydF9vYmou
X29wdGlvbnMuY29uZmlndXJhdGlvbiA9ICdSZWxlYXNlJwogICAgICAgICByZXR1cm4gcG9ydF9v
YmoKIAogICAgIGRlZiB0ZXN0X3NraXBwZWRfZmlsZV9wYXRocyhzZWxmKToKQEAgLTczLDggKzcy
LDggQEAgc3ZnL2JhdGlrL3RleHQvc21hbGxGb250cy5zdmcKICAgICAgICAgcG9ydCA9IHNlbGYu
bWFrZV9wb3J0KCkKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICByZXR1cm4KLSAg
ICAgICAgc2tpcHBlZF9maWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oc2VsZi5leGFtcGxlX3NraXBw
ZWRfZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll90ZXN0c19mcm9tX3NraXBw
ZWRfZmlsZShza2lwcGVkX2ZpbGUpLCBzZWxmLmV4YW1wbGVfc2tpcHBlZF90ZXN0cykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll90ZXN0c19mcm9tX3NraXBwZWRfZmlsZShzZWxmLmV4
YW1wbGVfc2tpcHBlZF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4YW1w
bGVfc2tpcHBlZF90ZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9vcHRp
b25zLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9v
cHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3YTVkNTczZmFkNDE0ODNiZGNmMmNmYjBiNzRkYzRkNjZh
ZmMxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L29wdGlvbnMucHkKQEAgLTAsMCArMSw2NiBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworY2xhc3MgUG9ydE9wdGlvbnMob2JqZWN0KToKKyAgICAi
IiJBIHN1YnNldCBvZiB0aGUgb3B0aW9ucyBjbGFzcyByZXR1cm5lZCBmcm9tIG9wdHBhcnNlLgor
CisgICAgSXQgY2FuIGJlIHVzZWQgdG8gTW9jayBvdXQgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBQ
b3J0cy4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAg
ICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxm
Ll9fZGljdF9fW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvMik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9fZGljdF9fID09IG8yLl9fZGljdF9fCisKKyAgICBkZWYgX19pdGVy
X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fLl9faXRlcl9fKCkKKworICAg
IGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKQorCisgICAgZGVmIF9fc3Ry
X18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBrZXlzID0gc2VsZi5fX2RpY3Rf
Xy5rZXlzKCkKKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgor
ICAgICAgICAgICAgYXJncy5hcHBlbmQoIiVzPSVzIiAlIChrZXksIHJlcHIoc2VsZi5fX2RpY3Rf
X1trZXldKSkpCisgICAgICAgIHJldHVybiAiUG9ydE9wdGlvbnMoIiArICcsICcuam9pbihhcmdz
KSArICIpIgorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fZGlj
dF9fLmtleXMoKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4o
c2VsZi5fX2RpY3RfXykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvb3B0aW9uc191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvb3B0aW9uc191bml0dGVzdC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNTZmODY5YzkyOGM3OTZjOGNkZGE4MWNlNDgyNTg4ZjU4N2Q3OGE0Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9v
cHRpb25zX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsODYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdW5pdHRlc3QKK2Zyb20gb3B0aW9ucyBpbXBvcnQgUG9ydE9wdGlvbnMKKworCitjbGFzcyBQ
b3J0T3B0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldChzZWxm
KToKKyAgICAgICAgbyA9IFBvcnRPcHRpb25zKGZvbz0nYmFyJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChvLmZvbywgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfa2V5X21pc3Npbmcoc2Vs
Zik6CisgICAgICAgIG8gPSBQb3J0T3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KEF0dHJpYnV0ZUVycm9yLCBsYW1iZGEgeDogeC5mb28sIG8pCisKKyAgICBkZWYgdGVzdF9ub256
ZXJvKHNlbGYpOgorICAgICAgICBvID0gUG9ydE9wdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUobykKKworICAgIGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAgbyA9IFBvcnRPcHRp
b25zKCkKKyAgICAgICAgby5mb28gPSAnYmFyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8u
Zm9vLCAnYmFyJykKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgbyA9IFBvcnRP
cHRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobyksICJQb3J0T3B0aW9ucygp
IikKKyAgICAgICAgby5mb28gPSAnYmFyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihv
KSwgIlBvcnRPcHRpb25zKGZvbz0nYmFyJykiKQorICAgICAgICBvLmJhciA9ICdiYXoiIicKKyAg
ICAgICAgby5iYXogPSAiYmFyJyciCisgICAgICAgIHMxID0gIlBvcnRPcHRpb25zKGJhcj0nYmF6
XCJcIicsIGJhej1cImJhcicnXCIsIGZvbz0nYmFyJykiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc3RyKG8pLCBzMSkKKyAgICAgICAgbzEgPSBldmFsKHJlcHIobykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobywgbzEpCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIG8g
PSBQb3J0T3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG8pLCAwKQorCisg
ICAgICAgIG8uZm9vID0gJ2JhcicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obyksIDEp
CisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgbyA9IFBvcnRPcHRpb25z
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnZm9vJyBpbiBvKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGhhc2F0dHIobywgJ2ZvbycpKQorCisgICAgICAgIG8uZm9vID0gJ2JhcicKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmb28nIGluIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShoYXNhdHRyKG8sICdmb28nKSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAg
IG8gPSBQb3J0T3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5rZXlzKCksIFtd
KQorICAgICAgICBvLmZvbyA9ICdiYXInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5rZXlz
KCksIFsnZm9vJ10pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3Qu
bWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKaW5kZXggNDc1OTdkNjdjYzI1YTYz
OGE5ZjY0NWE3YjVlMGJlMjlkNjU2MTU1Zi4uOWQ2M2ViNDgzZmNmMzRiZjQzOWU0N2EzMjQwNDE4
ZDU1MzkzNmU5OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQpAQCAtMzIsMjAgKzMy
LDE1IEBAIGltcG9ydCBvcwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAoraW1w
b3J0IG9wdGlvbnMKIAotY2xhc3MgTW9ja09wdGlvbnMob2JqZWN0KToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwKLSAgICAgICAgICAgICAgICAgcmVzdWx0c19kaXJlY3Rvcnk9J2xheW91dC10ZXN0
LXJlc3VsdHMnLAotICAgICAgICAgICAgICAgICB1c2VfYXBhY2hlPVRydWUsCi0gICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnKToKLSAgICAgICAgc2VsZi5yZXN1bHRzX2Rp
cmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5Ci0gICAgICAgIHNlbGYudXNlX2FwYWNoZSA9IHVz
ZV9hcGFjaGUKLSAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgotCitt
b2NrX29wdGlvbnMgPSBvcHRpb25zLlBvcnRPcHRpb25zKHJlc3VsdHNfZGlyZWN0b3J5PSdsYXlv
dXQtdGVzdC1yZXN1bHRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
X2FwYWNoZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1
cmF0aW9uPSdSZWxlYXNlJykKIAogY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAiIiJUZXN0cyB0aGUgV2ViS2l0IHBvcnQgaW1wbGVtZW50YXRpb24uIiIiCi0gICAg
ZGVmIG1ha2VfcG9ydChzZWxmLCBvcHRpb25zPU1vY2tPcHRpb25zKCkpOgorICAgIGRlZiBtYWtl
X3BvcnQoc2VsZiwgb3B0aW9ucz1tb2NrX29wdGlvbnMpOgogICAgICAgICAiIiJPdmVycmlkZSBp
biBzdWJjbGFzcy4iIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKQEAg
LTYxLDEwICs1Niw3IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgIyBGSVhN
RTogbm90IHN1cmUgd2h5IHRoaXMgc2hvdWxkbid0IGFsd2F5cyBiZSBUcnVlCi0gICAgICAgICNz
ZWxmLmFzc2VydFRydWUocG9ydC5jaGVja19pbWFnZV9kaWZmKCkpCi0gICAgICAgIGlmIG5vdCBw
b3J0LmNoZWNrX2ltYWdlX2RpZmYoKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxm
LmFzc2VydFRydWUocG9ydC5jaGVja19pbWFnZV9kaWZmKCkpCiAKICAgICAgICAgZGlyID0gcG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAgZmlsZTEgPSBvcy5wYXRoLmpvaW4oZGlyLCAn
ZmFzdCcsICdjc3MnLCAnYnV0dG9uX2NlbnRlci5wbmcnKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDNiODEx
Njc5OWFmM2NkNGVlYTZlYjFkZmRiOGRhOTA0Y2Q1Zjk4MDAuLmU3OThlMWIxMjExOWE1NTJkYjVk
OTA2MTEyNzg4Mjc0YjEwMTc3NWIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTMwLDcgKzMwLDYgQEAKICIi
IkR1bW15IFBvcnQgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgdGVzdGluZy4iIiIKIGZyb20gX19m
dXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAotaW1wb3J0IGNvZGVjcwogaW1wb3J0IGZu
bWF0Y2gKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtMTQwLDkgKzEzOSwxMCBAQCBjbGFzcyBU
ZXN0UG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgICAgICAgIGRpZmZfZmlsZW5hbWU9Tm9u
ZSwgdG9sZXJhbmNlPTApOgogICAgICAgICBkaWZmZWQgPSBhY3R1YWxfY29udGVudHMgIT0gZXhw
ZWN0ZWRfY29udGVudHMKICAgICAgICAgaWYgZGlmZmVkIGFuZCBkaWZmX2ZpbGVuYW1lOgotICAg
ICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihkaWZmX2ZpbGVuYW1lLCAidyIsICJ1dGYtOCIpIGFz
IGRpZmZfZmg6Ci0gICAgICAgICAgICAgICAgZGlmZl9maC53cml0ZSgiPCAlc1xuLS0tXG4+ICVz
XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9jb250ZW50cywg
YWN0dWFsX2NvbnRlbnRzKSkKKyAgICAgICAgICAgIHNlbGYuX3RyZWUud3JpdGVfZmlsZShkaWZm
X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzPSI8
ICVzXG4tLS1cbj4gJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICAgcmV0dXJuIGRpZmZl
ZAogCiAgICAgZGVmIGV4cGVjdGVkX2NoZWNrc3VtKHNlbGYsIHRlc3QpOgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0X2ZpbGVz
X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC90ZXN0X2ZpbGVzX3VuaXR0ZXN0LnB5CmluZGV4IGMzN2ViOTI5MjZlOGRmNTQyMmI3MDli
OGMxMjUyM2ZiNTEyOWIzZjUuLmM4NDZjNzRkMTY0MWIyMWM4MGNlZWMzNjY4OTNhZjA0ODMwYmEw
MDEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvdGVzdF9maWxlc191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3RfZmlsZXNfdW5pdHRlc3QucHkKQEAgLTM1LDcg
KzM1LDcgQEAgaW1wb3J0IHRlc3RfZmlsZXMKIAogY2xhc3MgVGVzdEZpbGVzVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF9ub19wYXRoc19zcGVjaWZpZWQoc2VsZik6
Ci0gICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KHBv
cnRfbmFtZT0ndGVzdC1maWxlcycpCiAgICAgICAgIGxheW91dF90ZXN0c19kaXIgPSBwb3J0Lmxh
eW91dF90ZXN0c19kaXIoKQogICAgICAgICBwb3J0LmxheW91dF90ZXN0c19kaXIgPSBsYW1iZGE6
IG9zLnBhdGguam9pbihsYXlvdXRfdGVzdHNfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdCcsICdodG1sJykKQEAgLTQzLDIzICs0
MywyMyBAQCBjbGFzcyBUZXN0RmlsZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
c2VsZi5hc3NlcnROb3RFcXVhbCh0ZXN0cywgMCkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfb25lX3Rl
c3Qoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBiYXNlLlBvcnQoKQorICAgICAgICBwb3J0ID0gYmFz
ZS5Qb3J0KHBvcnRfbmFtZT0ndGVzdC1maWxlcycpCiAgICAgICAgICMgVGhpcyBpcyBqdXN0IGEg
dGVzdCBwaWNrZWQgYXQgcmFuZG9tIGJ1dCBrbm93biB0byBleGlzdC4KICAgICAgICAgdGVzdHMg
PSB0ZXN0X2ZpbGVzLmZpbmQocG9ydCwgWydmYXN0L2h0bWwva2V5Z2VuLmh0bWwnXSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAxKQogCiAgICAgZGVmIHRlc3RfZmluZF9n
bG9iKHNlbGYpOgotICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkKKyAgICAgICAgcG9ydCA9IGJh
c2UuUG9ydChwb3J0X25hbWU9J3Rlc3QtZmlsZXMnKQogICAgICAgICB0ZXN0cyA9IHRlc3RfZmls
ZXMuZmluZChwb3J0LCBbJ2Zhc3QvaHRtbC9rZXkqJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobGVuKHRlc3RzKSwgMSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfd2l0aF9za2lwcGVkX2RpcmVj
dG9yaWVzKHNlbGYpOgotICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KCkKKyAgICAgICAgcG9ydCA9
IGJhc2UuUG9ydChwb3J0X25hbWU9J3Rlc3QtZmlsZXMnKQogICAgICAgICB0ZXN0cyA9IHBvcnQu
dGVzdHMoJ3VzZXJzY3JpcHRzJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd1c2Vyc2NyaXB0
cy9yZXNvdXJjZXMvZnJhbWUxLmh0bWwnIG5vdCBpbiB0ZXN0cykKIAogICAgIGRlZiB0ZXN0X2Zp
bmRfd2l0aF9za2lwcGVkX2RpcmVjdG9yaWVzXzIoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBiYXNl
LlBvcnQoKQorICAgICAgICBwb3J0ID0gYmFzZS5Qb3J0KHBvcnRfbmFtZT0ndGVzdC1maWxlcycp
CiAgICAgICAgIHRlc3RzID0gdGVzdF9maWxlcy5maW5kKHBvcnQsIFsndXNlcnNjcmlwdHMvcmVz
b3VyY2VzJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIHNldChbXSkpCiAKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
dHJlZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
dHJlZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44NjRlNDFjOTMzMDM0YTAwNDhhYmNmNzQ1ODM4Y2M0ZTM2OGY3
Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90cmVlLnB5CkBAIC0wLDAgKzEsMjMxIEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJXcmFwcGVyIG9iamVjdHMgZm9yIHRoZSBzb3Vy
Y2UgdHJlZSBhbmQgdXRpbGl0eSByb3V0aW5lcy4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9y
dCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMK
KworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBsb2d1dGlscworCisKK19sb2cg
PSBsb2d1dGlscy5nZXRfbG9nZ2VyKF9fZmlsZV9fKQorCisjCisjIFRoaXMgaXMgdXNlZCB0byBy
ZWNvcmQgaWYgd2UndmUgYWxyZWFkeSBoaXQgdGhlIGZpbGVzeXN0ZW0gdG8gbG9vaworIyBmb3Ig
YSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIFdlIGNhY2hlIHRoaXMgdG8gc3BlZWQgdXAgdGhlIHVu
aXQgdGVzdHMsCisjIGJ1dCB0aGlzIGNhbiBiZSByZXNldCB3aXRoIGNsZWFyX2NhY2hlZF9jb25m
aWd1cmF0aW9uKCkuCisjCitfZGV0ZXJtaW5lZF9jb25maWd1cmF0aW9uID0gTm9uZQorCisKK2Rl
ZiBjbGVhcl9jYWNoZWRfY29uZmlndXJhdGlvbigpOgorICAgIGdsb2JhbCBfZGV0ZXJtaW5lZF9j
b25maWd1cmF0aW9uCisgICAgX2RldGVybWluZWRfY29uZmlndXJhdGlvbiA9IC0xCisKKworY2xh
c3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXQ9
JycsIGV4aXRfY29kZT0wLCBleGNlcHRpb249Tm9uZSk6CisgICAgICAgIHNlbGYuX291dHB1dCA9
IG91dHB1dAorICAgICAgICBzZWxmLl9leGl0X2NvZGUgPSBleGl0X2NvZGUKKyAgICAgICAgc2Vs
Zi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCisKKyAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwgYXJn
X2xpc3QsIHJldHVybl9leGl0X2NvZGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGRlY29k
ZV9vdXRwdXQ9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb246CisgICAgICAgICAg
ICByYWlzZSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29kZToKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9leGl0X2NvZGUKKyAgICAgICAgcmV0dXJuIHNlbGYuX291
dHB1dAorCisKK2NsYXNzIFRyZWUob2JqZWN0KToKKyAgICBfRkxBR1NfRlJPTV9DT05GSUdVUkFU
SU9OUyA9IHsKKyAgICAgICAgIkRlYnVnIjogIi0tZGVidWciLAorICAgICAgICAiUmVsZWFzZSI6
ICItLXJlbGVhc2UiLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRpdmUp
OgorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBleGVjdXRpdmUKKyAgICAgICAgc2VsZi5fd2Vi
a2l0X2Jhc2VfZGlyID0gTm9uZQorICAgICAgICBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb24g
PSBOb25lCisgICAgICAgIHNlbGYuX2J1aWxkX2RpcmVjdG9yaWVzID0ge30KKworICAgIGRlZiBi
dWlsZF9kaXJlY3Rvcnkoc2VsZiwgY29uZmlndXJhdGlvbik6CisgICAgICAgICIiIlJldHVybnMg
dGhlIHBhdGggdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgZ2l2ZW4gY29uZmlndXJhdGlvbi4i
IiIKKyAgICAgICAgaWYgY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgIGZsYWdzID0gWyItLWNv
bmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fRkxBR1NfRlJPTV9DT05G
SUdVUkFUSU9OU1tjb25maWd1cmF0aW9uXV0KKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSAi
IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9ICIiCisgICAgICAg
ICAgICBmbGFncyA9IFsiLS10b3AtbGV2ZWwiXQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWls
ZF9kaXJlY3Rvcmllcy5nZXQoY29uZmlndXJhdGlvbik6CisgICAgICAgICAgICBhcmdzID0gWyJw
ZXJsIiwgc2VsZi5fc2NyaXB0X3BhdGgoIndlYmtpdC1idWlsZC1kaXJlY3RvcnkiKV0gKyBmbGFn
cworICAgICAgICAgICAgc2VsZi5fYnVpbGRfZGlyZWN0b3JpZXNbY29uZmlndXJhdGlvbl0gPSAo
CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGFyZ3MpLnJzdHJp
cCgpKQorCisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9kaXJlY3Rvcmllc1tjb25maWd1cmF0
aW9uXQorCisgICAgZGVmIGJ1aWxkX2R1bXByZW5kZXJ0cmVlKHNlbGYsIGNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAiIiJCdWlsZHMgRFJUIGluIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLgorCisg
ICAgICAgIFJldHVybnMgd2hldGhlciBidWlsZCB3YXMgc3VjY2Vzc2Z1bCBvciBpcyB1cC10by1k
YXRlLgorCisgICAgICAgICIiIgorICAgICAgICBmbGFnID0gc2VsZi5fRkxBR1NfRlJPTV9DT05G
SUdVUkFUSU9OU1tjb25maWd1cmF0aW9uXQorICAgICAgICBleGl0X2NvZGUgPSBzZWxmLl9leGVj
dXRpdmUucnVuX2NvbW1hbmQoWworICAgICAgICAgICAgc2VsZi5fc2NyaXB0X3BhdGgoImJ1aWxk
LWR1bXByZW5kZXJ0cmVlIiksIGZsYWddLAorICAgICAgICAgICAgcmV0dXJuX2V4aXRfY29kZT1U
cnVlKQorICAgICAgICBpZiBleGl0X2NvZGUgIT0gMDoKKyAgICAgICAgICAgIF9sb2cuZXJyb3Io
IkZhaWxlZCB0byBidWlsZCBEdW1wUmVuZGVyVHJlZSIpCisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkZWZhdWx0X2NvbmZpZ3VyYXRpb24o
c2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3Ig
dGhlIHRyZWUuCisKKyAgICAgICAgUmV0dXJucyB0aGUgdmFsdWUgc2V0IGJ5ICdzZXQtd2Via2l0
LWNvbmZpZ3VyYXRpb24nLCBvciAiUmVsZWFzZSIKKyAgICAgICAgaWYgdGhhdCBoYXMgbm90IGJl
ZW4gc2V0LiBUaGlzIG1pcnJvcnMgdGhlIGxvZ2ljIGluIHdlYmtpdGRpcnMucG0uCisKKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb246CisgICAg
ICAgICAgICBzZWxmLl9kZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSBzZWxmLl9kZXRlcm1pbmVfY29u
ZmlndXJhdGlvbigpCisgICAgICAgICAgICBpZiAoc2VsZi5fZGVmYXVsdF9jb25maWd1cmF0aW9u
IG5vdCBpbgorICAgICAgICAgICAgICAgIHNlbGYuX0ZMQUdTX0ZST01fQ09ORklHVVJBVElPTlMp
OgorICAgICAgICAgICAgICAgIF9sb2cud2FybigiQ29uZmlndXJhdGlvbiBcIiVzXCIgaXMgbm90
IGEgcmVjb2duaXplZCB2YWx1ZS5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9kZWZhdWx0X2NvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJTY3Jp
cHRzIG1heSBmYWlsLiAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VlICdzZXQtd2Vi
a2l0LWNvbmZpZ3VyYXRpb24gLS1oZWxwJy4iKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Rl
ZmF1bHRfY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWZhdWx0X2NvbmZp
Z3VyYXRpb24gPSAiUmVsZWFzZSIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RlZmF1bHRfY29uZmln
dXJhdGlvbgorCisgICAgZGVmIHdlYmtpdF9iYXNlX2RpcihzZWxmKToKKyAgICAgICAgIiIiUmV0
dXJucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBXZWJLaXQgdHJlZS4KKwor
ICAgICAgICBSYWlzZXMgYW4gQXNzZXJ0aW9uRXJyb3IgaWYgdGhlIHRvcCBkaXIgY2FuJ3QgYmUg
ZGV0ZXJtaW5lZC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3Qg
dXNlIGNvbW1vbi9jaGVja291dC9zY20gZm9yIHRoaXMgaW4gb3JkZXIgdG8KKyAgICAgICAgIyBh
bGxvdyB0aGUgbGF5b3V0IHRlc3RzIHRvIGJlIHJ1biB3aXRob3V0IGJlaW5nIGluIGFuIGFjdHVh
bCBjaGVja291dC4KKyAgICAgICAgaWYgbm90IHNlbGYuX3dlYmtpdF9iYXNlX2RpcjoKKyAgICAg
ICAgICAgIHRoaXNfZGlyID0gb3MucGF0aC5hYnNwYXRoKHN5cy5wYXRoWzBdKQorICAgICAgICAg
ICAgaW5kZXggPSB0aGlzX2Rpci5maW5kKCJXZWJLaXRUb29scyIpCisgICAgICAgICAgICBzZWxm
Ll93ZWJraXRfYmFzZV9kaXIgPSB0aGlzX2RpclswOmluZGV4XQorICAgICAgICByZXR1cm4gc2Vs
Zi5fd2Via2l0X2Jhc2VfZGlyCisKKyAgICBkZWYgcGF0aF9mcm9tX3dlYmtpdF9iYXNlKHNlbGYs
ICpjb21wcyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGFic29sdXRlIHBhdGggZm9yIHdlYmtp
dF9iYXNlX2RpciArIGNvbXBzLiIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYu
d2Via2l0X2Jhc2VfZGlyKCksICpjb21wcykKKworICAgIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6
CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgcGF0aCBleGlzdHMgb3Igbm90LgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwYXRoOiBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRp
dmUuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgb3MucGF0aC5leGlz
dHMoKS4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBGSVhNRTogYXNzZXJ0IHRoYXQgdGhlIGZp
bGVzIGFyZSB1bmRlciB0aGUgdG9wIG9mIHRoZSB0cmVlPworICAgICAgICByZXR1cm4gb3MucGF0
aC5leGlzdHMocGF0aCkKKworICAgIGRlZiByZWFkX2ZpbGUoc2VsZiwgZmlsZW5hbWUsIGVuY29k
aW5nPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBh
dCB0aGUgZ2l2ZW4gbG9jYXRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVu
YW1lOiBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUuCisgICAgICAgICAgICBlbmNvZGluZzog
cGFzc2VkIHRvIGNvZGVjLm9wZW4gKGRlZmF1bHRzIHRvIE5vbmUpCisgICAgICAgIFJhaXNlcyBJ
T0Vycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgYW5vdGhlciBlcnJvciBvY2N1cnMu
CisKKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZW5hbWUsIGVuY29k
aW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisKKyAgICBk
ZWYgd3JpdGVfZmlsZShzZWxmLCBmaWxlbmFtZSwgY29udGVudHMsIGVuY29kaW5nPU5vbmUpOgor
ICAgICAgICAiIiJXcml0ZSB0aGUgY29udGVudHMgdG8gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIGxv
Y2F0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWxlbmFtZTogY2FuIGJlIGFi
c29sdXRlIG9yIHJlbGF0aXZlLgorICAgICAgICAgICAgY29udGVudHM6IHN0dWZmIHRvIHdyaXRl
CisgICAgICAgICAgICBlbmNvZGluZzogcGFzc2VkIHRvIGNvZGVjLm9wZW4gKGRlZmF1bHRzIHRv
IE5vbmUpCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qg
b3IgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggY29k
ZWNzLm9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAg
ICAgICBmLndyaXRlKGNvbnRlbnRzKQorCisgICAgZGVmIF9zY3JpcHRfcGF0aChzZWxmLCBzY3Jp
cHRfbmFtZSk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi53ZWJraXRfYmFzZV9k
aXIoKSwgIldlYktpdFRvb2xzIiwgIlNjcmlwdHMiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmlwdF9uYW1lKQorCisgICAgZGVmIF9kZXRlcm1pbmVfY29uZmlndXJhdGlvbihzZWxm
KToKKyAgICAgICAgIyBUaGlzIG1pcnJvcnMgdGhlIGxvZ2ljIGluIHdlYmtpdGRpcnMucG06ZGV0
ZXJtaW5lQ29uZmlndXJhdGlvbigpLgorICAgICAgICBnbG9iYWwgX2RldGVybWluZWRfY29uZmln
dXJhdGlvbgorICAgICAgICBpZiBfZGV0ZXJtaW5lZF9jb25maWd1cmF0aW9uID09IC0xOgorICAg
ICAgICAgICAgY29udGVudHMgPSBOb25lCisgICAgICAgICAgICBjb25maWd1cmF0aW9uX3BhdGgg
PSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kaXJlY3RvcnkoTm9uZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24iKQorICAgICAg
ICAgICAgaWYgc2VsZi5leGlzdHMoY29uZmlndXJhdGlvbl9wYXRoKToKKyAgICAgICAgICAgICAg
ICBjb250ZW50cyA9IHNlbGYucmVhZF9maWxlKGNvbmZpZ3VyYXRpb25fcGF0aCwgInV0Zi04Iiku
cnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBjb250ZW50cyA9PSAiRGVwbG95bWVudCI6Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gIlJlbGVhc2UiCisgICAgICAgICAgICAgICAg
aWYgY29udGVudHMgPT0gIkRldmVsb3BtZW50IjoKKyAgICAgICAgICAgICAgICAgICAgY29udGVu
dHMgPSAiRGVidWciCisgICAgICAgICAgICBfZGV0ZXJtaW5lZF9jb25maWd1cmF0aW9uID0gY29u
dGVudHMKKyAgICAgICAgcmV0dXJuIF9kZXRlcm1pbmVkX2NvbmZpZ3VyYXRpb24KKworCitjbGFz
cyBNb2NrVHJlZShUcmVlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0aXZlLCBmaWxl
cz17fSwgY29uZmlndXJhdGlvbj1Ob25lKToKKyAgICAgICAgVHJlZS5fX2luaXRfXyhzZWxmLCBl
eGVjdXRpdmUpCisgICAgICAgIHNlbGYuX2ZpbGVzID0gZmlsZXMKKyAgICAgICAgaWYgY29uZmln
dXJhdGlvbjoKKyAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfY29uZmlndXJhdGlvbiA9IGNvbmZp
Z3VyYXRpb24KKworICAgIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGgg
aW4gc2VsZi5fZmlsZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXNbcGF0aF0gaXMg
bm90IE5vbmUKKyAgICAgICAgcmV0dXJuIFRyZWUuZXhpc3RzKHNlbGYsIHBhdGgpCisKKyAgICBk
ZWYgcmVhZF9maWxlKHNlbGYsIHBhdGgsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICBpZiBwYXRo
IGluIHNlbGYuX2ZpbGVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzW3BhdGhdCisg
ICAgICAgIHJldHVybiBUcmVlLnJlYWRfZmlsZShzZWxmLCBwYXRoLCBlbmNvZGluZykKKworICAg
IGRlZiB3cml0ZV9maWxlKHNlbGYsIHBhdGgsIGNvbnRlbnRzLCBlbmNvZGluZz1Ob25lKToKKyAg
ICAgICAgaWYgcGF0aCBpbiBzZWxmLl9maWxlczoKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzW3Bh
dGhdID0gY29udGVudHMKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICByYWlzZSBBc3NlcnRp
b25FcnJvcgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC90cmVlX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC90cmVlX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4ZjgwOTRl
YmNkNjE0ODhhMTJkNWM3NzFhMmRjOWU0NjM3NzhkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3RyZWVfdW5pdHRlc3Qu
cHkKQEAgLTAsMCArMSwxNjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBT
dHJpbmdJTworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0cmVlIGlt
cG9ydCBNb2NrRXhlY3V0aXZlLCBNb2NrVHJlZSwgVHJlZSwgY2xlYXJfY2FjaGVkX2NvbmZpZ3Vy
YXRpb24KKworCitjbGFzcyBUcmVlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRl
c3RfYnVpbGRfZGlyZWN0b3J5X3RvcGxldmVsKHNlbGYpOgorICAgICAgICBlID0gTW9ja0V4ZWN1
dGl2ZShvdXRwdXQ9InRvcGxldmVsIikKKyAgICAgICAgdCA9IE1vY2tUcmVlKGUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodC5idWlsZF9kaXJlY3RvcnkoTm9uZSksICd0b3BsZXZlbCcpCisK
KyAgICAgICAgIyBUZXN0IGFnYWluIHRvIGNoZWNrIGNhY2hpbmcKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh0LmJ1aWxkX2RpcmVjdG9yeShOb25lKSwgJ3RvcGxldmVsJykKKworICAgIGRlZiB0
ZXN0X2J1aWxkX2RpcmVjdG9yeV9fcmVsZWFzZShzZWxmKToKKyAgICAgICAgZSA9IE1vY2tFeGVj
dXRpdmUob3V0cHV0PSJyZWxlYXNlIikKKyAgICAgICAgdCA9IE1vY2tUcmVlKGUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodC5idWlsZF9kaXJlY3RvcnkoJ1JlbGVhc2UnKSwgJ3JlbGVhc2Un
KQorCisgICAgZGVmIHRlc3RfYnVpbGRfZGlyZWN0b3J5X19kZWJ1ZyhzZWxmKToKKyAgICAgICAg
ZSA9IE1vY2tFeGVjdXRpdmUob3V0cHV0PSJkZWJ1ZyIpCisgICAgICAgIHQgPSBNb2NrVHJlZShl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuYnVpbGRfZGlyZWN0b3J5KCdEZWJ1ZycpLCAn
ZGVidWcnKQorCisgICAgZGVmIHRlc3RfYnVpbGRfZGlyZWN0b3J5X191bmtub3duKHNlbGYpOgor
ICAgICAgICBlID0gTW9ja0V4ZWN1dGl2ZShvdXRwdXQ9InVua25vd24iKQorICAgICAgICB0ID0g
TW9ja1RyZWUoZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHQuYnVpbGRf
ZGlyZWN0b3J5LCAnVW5rbm93bicpCisKKyAgICBkZWYgdGVzdF9idWlsZF9kdW1wcmVuZGVydHJl
ZShzZWxmKToKKyAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUoZXhpdF9jb2RlPTApCisgICAgICAg
IHQgPSBNb2NrVHJlZShlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5idWlsZF9kdW1wcmVu
ZGVydHJlZSgiRGVidWciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuYnVpbGRfZHVtcHJl
bmRlcnRyZWUoIlJlbGVhc2UiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3Is
IHQuYnVpbGRfZHVtcHJlbmRlcnRyZWUsICJVbmtub3duIikKKworICAgIGRlZiB0ZXN0X2RlZmF1
bHRfY29uZmlndXJhdGlvbihzZWxmKToKKyAgICAgICAgZSA9IE1vY2tFeGVjdXRpdmUob3V0cHV0
PSdmb28nKQorICAgICAgICBjb25mX3BhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdDb25maWd1
cmF0aW9uJykKKworICAgICAgICB0ID0gTW9ja1RyZWUoZSwgZmlsZXM9e2NvbmZfcGF0aDogTm9u
ZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwg
IlJlbGVhc2UiKQorCisgICAgICAgIHQgPSBNb2NrVHJlZShlLCBmaWxlcz17Y29uZl9wYXRoOiAi
UmVsZWFzZSJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZGVmYXVsdF9jb25maWd1cmF0
aW9uKCksICJSZWxlYXNlIikKKworICAgICAgICBjbGVhcl9jYWNoZWRfY29uZmlndXJhdGlvbigp
CisgICAgICAgIHQgPSBNb2NrVHJlZShlLCBmaWxlcz17Y29uZl9wYXRoOiAiRGVidWcifSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmRlZmF1bHRfY29uZmlndXJhdGlvbigpLCAiRGVidWci
KQorCisgICAgICAgIGNsZWFyX2NhY2hlZF9jb25maWd1cmF0aW9uKCkKKyAgICAgICAgdCA9IE1v
Y2tUcmVlKGUsIGZpbGVzPXtjb25mX3BhdGg6ICJVbmtub3duIn0pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwodC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSwgIlVua25vd24iKQorCisgICAgICAg
IGNsZWFyX2NhY2hlZF9jb25maWd1cmF0aW9uKCkKKyAgICAgICAgdCA9IE1vY2tUcmVlKGUsIGZp
bGVzPXtjb25mX3BhdGg6ICJEZXZlbG9wbWVudCJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHQuZGVmYXVsdF9jb25maWd1cmF0aW9uKCksICJEZWJ1ZyIpCisKKyAgICAgICAgY2xlYXJfY2Fj
aGVkX2NvbmZpZ3VyYXRpb24oKQorICAgICAgICB0ID0gTW9ja1RyZWUoZSwgZmlsZXM9e2NvbmZf
cGF0aDogIkRlcGxveW1lbnQifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmRlZmF1bHRf
Y29uZmlndXJhdGlvbigpLCAiUmVsZWFzZSIpCisKKyAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6
CisgICAgICAgICMgVGVjaG5pY2FsbHkgdGhpcyBjb3VsZCBiZSBhIHJlZ3VsYXIgVHJlZSgpLCBi
dXQgd2UgdXNlIHRoaXMKKyAgICAgICAgIyB0byBoaXQgdGhlIGNvdmVyYWdlIG9uIE1vY2tUcmVl
KCkgYXMgd2VsbC4KKyAgICAgICAgdCA9IE1vY2tUcmVlKE5vbmUpCisgICAgICAgIHBhdGggPSB0
LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRw
eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0X3Rlc3Rz
JywgJ3BvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyZWVf
dW5pdHRlc3QucHknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5leGlzdHMocGF0aCkpCisK
KyAgICAgICAgcGF0aCA9IHQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJLaXRUb29scycsICdT
Y3JpcHRzJywgJ3dlYmtpdHB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdsYXlvdXRfdGVzdHMnLCAncG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnbWlzc2luZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5leGlzdHMo
cGF0aCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ZpbGUoc2VsZik6CisgICAgICAgICMgVGVjaG5p
Y2FsbHkgdGhpcyBjb3VsZCBiZSBhIHJlZ3VsYXIgVHJlZSgpLCBidXQgd2UgdXNlIHRoaXMKKyAg
ICAgICAgIyB0byBoaXQgdGhlIGNvdmVyYWdlIG9uIE1vY2tUcmVlKCkgYXMgd2VsbC4KKyAgICAg
ICAgdCA9IE1vY2tUcmVlKE5vbmUpCisgICAgICAgIHBhdGggPSB0LnBhdGhfZnJvbV93ZWJraXRf
YmFzZSgnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJywgJ3BvcnQnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyZWVfdW5pdHRlc3QucHknKQorICAg
ICAgICBjb250ZW50cyA9IHQucmVhZF9maWxlKHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgnU09NRV9SRUFMTFlfVU5MSUtFTFlfU1RSSU5HJyBpbiBjb250ZW50cykKKworICAgICAgICBj
b250ZW50cyA9IHQucmVhZF9maWxlKHBhdGgsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZSgnU09NRV9SRUFMTFlfVU5MSUtFTFlfU1RSSU5HJyBpbiBjb250ZW50cykK
KworICAgICAgICBwYXRoID0gdC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYktpdFRvb2xzJywg
J1NjcmlwdHMnLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2xheW91dF90ZXN0cycsICdwb3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdtaXNzaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJv
ciwgdC5yZWFkX2ZpbGUsIHBhdGgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9tb2NrZWRfZmlsZShz
ZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBhIGZpbGUgbGlzdGVkIGluIHRoZSBNb2NrIGZpbGUg
c2V0LgorICAgICAgICAjIE1ha2Ugc3VyZSBpdCBkb2Vzbid0IHJlYWxseSBleGlzdC4KKyAgICAg
ICAgcmVhbF90cmVlID0gVHJlZShleGVjdXRpdmU9TW9ja0V4ZWN1dGl2ZSgpKQorICAgICAgICBw
YXRoID0gcmVhbF90cmVlLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgidHJlZV91bml0dGVzdC50eHQi
KQorICAgICAgICB0ID0gTW9ja1RyZWUoZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgIGZpbGVzPXtwYXRoOiBOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShvcy5wYXRoLmV4aXN0cyhwYXRoKSkKKworICAgICAgICB0LndyaXRlX2ZpbGUocGF0aCwg
ImhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlYWRfZmlsZShwYXRoKSwgImhl
bGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhwYXRoKSkKKwor
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdC53cml0ZV9maWxlLCAi
bWlzc2luZ19maWxlIiwgImhlbGxvIikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FjdHVhbF9maWxl
KHNlbGYpOgorICAgICAgICB0ID0gVHJlZShleGVjdXRpdmU9TW9ja0V4ZWN1dGl2ZSgpKQorCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGZuYW1lID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0n
dHJlZV91bml0dGVzdF8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
PXQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCkpCisgICAgICAgICAgICB0LndyaXRlX2ZpbGUoZm5h
bWUsICdoZWxsbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVhZF9maWxlKGZu
YW1lKSwgJ2hlbGxvJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0
cyhmbmFtZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZm5hbWUp
CisKKyAgICBkZWYgdGVzdF93ZWJraXRfYmFzZV9kaXIoc2VsZik6CisgICAgICAgIHQgPSBUcmVl
KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LndlYmtpdF9iYXNlX2RpcigpKQorCisg
ICAgZGVmIHRlc3RfcGF0aF9mcm9tX3dlYmtpdF9iYXNlKHNlbGYpOgorICAgICAgICB0ID0gVHJl
ZShOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5wYXRoX2Zyb21fd2Via2l0X2Jhc2Uo
J2ZvbycpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4o
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJraXQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3dlYmtpdC5weQppbmRleCBlZDE5YzA5YzYyZGFjYmVlN2EzYTY5OGQ3NmFhYTNkODJj
YWViYjdjLi4yYjM2ZTY0MmVkNTA1ZWViOTMzNWNjMDU1ZjdkZjYxOTFlNTBjZGQ5IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3dlYmtpdC5weQpAQCAtMzMsNyArMzMsNiBAQAogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdp
dGhfc3RhdGVtZW50CiAKLWltcG9ydCBjb2RlY3MKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MK
IGltcG9ydCByZQpAQCAtNDYsMTEgKzQ1LDEzIEBAIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHRl
bXBmaWxlCiBpbXBvcnQgc2h1dGlsCiAKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQogCi1pbXBvcnQgd2Via2l0cHkuY29tbW9uLnN5c3RlbS5v
c3BhdGggYXMgb3NwYXRoCi1pbXBvcnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuYmFzZSBh
cyBiYXNlCi1pbXBvcnQgd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuc2VydmVyX3Byb2Nlc3Mg
YXMgc2VydmVyX3Byb2Nlc3MKK2ltcG9ydCBiYXNlCitpbXBvcnQgc2VydmVyX3Byb2Nlc3MKK2Zy
b20gdHJlZSBpbXBvcnQgVHJlZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQg
b3NwYXRoCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQud2Via2l0IikKIApAQCAtODQsMTQgKzg1LDcgQEAgY2xhc3MgV2ViS2l0UG9ydChiYXNl
LlBvcnQpOgogICAgICAgICByZXR1cm4gJycKIAogICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYp
OgotICAgICAgICBleGl0X2NvZGUgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAg
ICAgICAgICAgc2VsZi5zY3JpcHRfcGF0aCgiYnVpbGQtZHVtcHJlbmRlcnRyZWUiKSwKLSAgICAg
ICAgICAgIHNlbGYuZmxhZ19mcm9tX2NvbmZpZ3VyYXRpb24oc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uKSwKLSAgICAgICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQotICAgICAgICBpZiBl
eGl0X2NvZGUgIT0gMDoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBidWlsZCBE
dW1wUmVuZGVyVHJlZSIpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyZWUuYnVpbGRfZHVtcHJlbmRlcnRyZWUoKQog
CiAgICAgZGVmIF9jaGVja19kcml2ZXIoc2VsZik6CiAgICAgICAgIGRyaXZlcl9wYXRoID0gc2Vs
Zi5fcGF0aF90b19kcml2ZXIoKQpAQCAtMjk4LDkgKzI5MiwxMCBAQCBjbGFzcyBXZWJLaXRQb3J0
KGJhc2UuUG9ydCk6CiAgICAgICAgIHVuc3VwcG9ydGVkX2ZlYXR1cmVfdGVzdHMgPSBzZWxmLl9z
a2lwcGVkX3Rlc3RzX2Zvcl91bnN1cHBvcnRlZF9mZWF0dXJlcygpCiAgICAgICAgIHJldHVybiBk
aXNhYmxlZF9mZWF0dXJlX3Rlc3RzICsgd2ViYXJjaGl2ZV90ZXN0cyArIHVuc3VwcG9ydGVkX2Zl
YXR1cmVfdGVzdHMKIAotICAgIGRlZiBfdGVzdHNfZnJvbV9za2lwcGVkX2ZpbGUoc2VsZiwgc2tp
cHBlZF9maWxlKToKKyAgICBkZWYgX3Rlc3RzX2Zyb21fc2tpcHBlZF9maWxlKHNlbGYsIGNvbnRl
bnRzKToKICAgICAgICAgdGVzdHNfdG9fc2tpcCA9IFtdCi0gICAgICAgIGZvciBsaW5lIGluIHNr
aXBwZWRfZmlsZS5yZWFkbGluZXMoKToKKyAgICAgICAgIyBGSVhNRTogZG9lcyB0aGlzIG5lZWQg
dG8gaGFuZGxlIENSTEYgYXMgd2VsbD8KKyAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudHMuc3Bs
aXQoJ1xuJyk6CiAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgICAgICBp
ZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBvciBub3QgbGVuKGxpbmUpOgogICAgICAgICAgICAgICAg
IGNvbnRpbnVlCkBAIC0zMTcsMTYgKzMxMiwxNSBAQCBjbGFzcyBXZWJLaXRQb3J0KGJhc2UuUG9y
dCk6CiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgogICAgICAg
ICAgICAgICAgIF9sb2cud2FybigiRmFpbGVkIHRvIG9wZW4gU2tpcHBlZCBmaWxlOiAlcyIgJSBm
aWxlbmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgd2l0aCBjb2Rl
Y3Mub3BlbihmaWxlbmFtZSwgInIiLCAidXRmLTgiKSBhcyBza2lwcGVkX2ZpbGU6Ci0gICAgICAg
ICAgICAgICAgdGVzdHNfdG9fc2tpcC5leHRlbmQoc2VsZi5fdGVzdHNfZnJvbV9za2lwcGVkX2Zp
bGUoc2tpcHBlZF9maWxlKSkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5fdHJlZS5yZWFk
X2ZpbGUoZmlsZW5hbWUsICJ1dGYtOCIpCisgICAgICAgICAgICB0ZXN0c190b19za2lwLmV4dGVu
ZChzZWxmLl90ZXN0c19mcm9tX3NraXBwZWRfZmlsZShjb250ZW50cykpCiAgICAgICAgIHJldHVy
biB0ZXN0c190b19za2lwCiAKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6CiAgICAg
ICAgICMgVGhlIFdlYktpdCBtYWMgcG9ydCB1c2VzIGEgY29tYmluYXRpb24gb2YgYSB0ZXN0X2V4
cGVjdGF0aW9ucyBmaWxlCiAgICAgICAgICMgYW5kICdTa2lwcGVkJyBmaWxlcy4KICAgICAgICAg
ZXhwZWN0YXRpb25zX3BhdGggPSBzZWxmLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgp
Ci0gICAgICAgIHdpdGggY29kZWNzLm9wZW4oZXhwZWN0YXRpb25zX3BhdGgsICJyIiwgInV0Zi04
IikgYXMgZmlsZToKLSAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKSArIHNlbGYuX3NraXBz
KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyZWUucmVhZF9maWxlKGV4cGVjdGF0aW9uc19wYXRo
LCAidXRmLTgiKSArIHNlbGYuX3NraXBzKCkKIAogICAgIGRlZiBfc2tpcHMoc2VsZik6CiAgICAg
ICAgICMgRWFjaCBTa2lwcGVkIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIGZpbGVzCkBAIC0zNTgs
MTAgKzM1Miw4IEBAIGNsYXNzIFdlYktpdFBvcnQoYmFzZS5Qb3J0KToKIAogICAgIGRlZiBfYnVp
bGRfcGF0aChzZWxmLCAqY29tcHMpOgogICAgICAgICBpZiBub3Qgc2VsZi5fY2FjaGVkX2J1aWxk
X3Jvb3Q6Ci0gICAgICAgICAgICBzZWxmLl9jYWNoZWRfYnVpbGRfcm9vdCA9IHNlbGYuX3dlYmtp
dF9idWlsZF9kaXJlY3RvcnkoWwotICAgICAgICAgICAgICAgICItLWNvbmZpZ3VyYXRpb24iLAot
ICAgICAgICAgICAgICAgIHNlbGYuZmxhZ19mcm9tX2NvbmZpZ3VyYXRpb24oc2VsZi5fb3B0aW9u
cy5jb25maWd1cmF0aW9uKSwKLSAgICAgICAgICAgIF0pCisgICAgICAgICAgICBzZWxmLl9jYWNo
ZWRfYnVpbGRfcm9vdCA9IHNlbGYuX3RyZWUuYnVpbGRfZGlyZWN0b3J5KAorICAgICAgICAgICAg
ICAgIHNlbGYuY29uZmlndXJhdGlvbigpKQogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNl
bGYuX2NhY2hlZF9idWlsZF9yb290LCAqY29tcHMpCiAKICAgICBkZWYgX3BhdGhfdG9fZHJpdmVy
KHNlbGYpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC93aW5fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dpbl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTI3MTBkMjUz
MjFkOTM0YTRkNzlhY2JjMjhkN2RkZjU5MzgyM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93aW5fdW5pdHRlc3QucHkK
QEAgLTAsMCArMSw0NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0
dGVzdAorCitpbXBvcnQgd2luCitpbXBvcnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIFdpblRl
c3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgorICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwg
b3B0aW9ucz1wb3J0X3Rlc3RjYXNlLm1vY2tfb3B0aW9ucyk6CisgICAgICAgIGlmIHN5cy5wbGF0
Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIHBvcnRfb2JqID0gd2luLldpblBvcnQob3B0aW9ucz1vcHRpb25zKQorICAgICAg
ICBwb3J0X29iai5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSA9IHBvcnRfb2JqLnJlc3VsdHNf
ZGlyZWN0b3J5KCkKKyAgICAgICAgcmV0dXJuIHBvcnRfb2JqCisKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5
CmluZGV4IGU5YzZkMmNiODBkZGZiYmU3NTA4NGIzNTMzOGFhNjhjNWEzNmRlYzkuLjBlZTY5MWU5
MzMzNjBiMjViNDIxY2EzODAyZmQ4MGZkNDQyMmI3NWYgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
cy5weQpAQCAtNDMwLDcgKzQzMCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgICAg
IHNlbGYuX2V4cGVjdGF0aW9ucyA9IHNlbGYucGFyc2VfZXhwZWN0YXRpb25zKAogICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lKCksCi0gICAgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uID09ICdEZWJ1ZycpCisgICAgICAgICAgICAgICAg
c2VsZi5fcG9ydC5jb25maWd1cmF0aW9uKCkgPT0gJ0RlYnVnJykKIAogICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9maWxlcyA9IHNldChmaWxlcykKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNf
bGlzdCA9IGZpbGVzCkBAIC05NjYsNyArOTY2LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmU6CiAgICAgICAgICAgICBwLnByaW50X2Nv
bmZpZygiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9wb3J0LmJhc2VsaW5lX3BhdGgoKSkKLSAgICAgICAgcC5wcmludF9jb25m
aWcoIlVzaW5nICVzIGJ1aWxkIiAlIHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbikKKyAgICAg
ICAgcC5wcmludF9jb25maWcoIlVzaW5nICVzIGJ1aWxkIiAlIHNlbGYuX3BvcnQuY29uZmlndXJh
dGlvbigpKQogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgogICAgICAgICAg
ICAgcC5wcmludF9jb25maWcoIlBpeGVsIHRlc3RzIGVuYWJsZWQiKQogICAgICAgICBlbHNlOgpA
QCAtMTM5Nyw3ICsxMzk3LDcgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFy
X291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICBpZiBvcHRpb25zLmxpbnRfdGVzdF9maWxlczoK
ICAgICAgICAgICAgIHJldHVybiB0ZXN0X3J1bm5lci5saW50KCkKICAgICAgICAgdGVzdF9ydW5u
ZXIucGFyc2VfZXhwZWN0YXRpb25zKHBvcnQudGVzdF9wbGF0Zm9ybV9uYW1lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0g
J0RlYnVnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuY29u
ZmlndXJhdGlvbigpID09ICdEZWJ1ZycpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUo
IkNoZWNraW5nIGJ1aWxkIC4uLiIpCiAgICAgICAgIGlmIG5vdCBwb3J0LmNoZWNrX2J1aWxkKHRl
c3RfcnVubmVyLm5lZWRzX2h0dHAoKSk6CkBAIC0xNDIzLDkgKzE0MjMsNiBAQCBkZWYgX3NldF91
cF9kZXJpdmVkX29wdGlvbnMocG9ydF9vYmosIG9wdGlvbnMpOgogICAgICAgICAjIEZJWE1FOiBJ
bnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50ICsgMS4K
ICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBzdHIocG9ydF9vYmouZGVmYXVsdF9j
aGlsZF9wcm9jZXNzZXMoKSkKIAotICAgIGlmIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246Ci0g
ICAgICAgIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9IHBvcnRfb2JqLmRlZmF1bHRfY29uZmlndXJh
dGlvbigpCi0KICAgICBpZiBvcHRpb25zLnBpeGVsX3Rlc3RzIGlzIE5vbmU6CiAgICAgICAgIG9w
dGlvbnMucGl4ZWxfdGVzdHMgPSBUcnVlCiAKQEAgLTE0NDIsNyArMTQzOSw3IEBAIGRlZiBfc2V0
X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6CiAgICAgICAgIG9wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkgPSBwb3J0X29iai5yZXN1bHRzX2RpcmVjdG9yeSgpCiAKICAgICBp
ZiBub3Qgb3B0aW9ucy50aW1lX291dF9tczoKLSAgICAgICAgaWYgb3B0aW9ucy5jb25maWd1cmF0
aW9uID09ICJEZWJ1ZyI6CisgICAgICAgIGlmIHBvcnRfb2JqLmNvbmZpZ3VyYXRpb24oKSA9PSAi
RGVidWciOgogICAgICAgICAgICAgb3B0aW9ucy50aW1lX291dF9tcyA9IHN0cigyICogVGVzdFJ1
bm5lci5ERUZBVUxUX1RFU1RfVElNRU9VVF9NUykKICAgICAgICAgZWxzZToKICAgICAgICAgICAg
IG9wdGlvbnMudGltZV9vdXRfbXMgPSBzdHIoVGVzdFJ1bm5lci5ERUZBVUxUX1RFU1RfVElNRU9V
VF9NUykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDZm
ZTk5ZDYyNzAxMzU4OWZmY2QwYWE1NmJhZDZjODI3N2ExYTFmYzguLjYwMjA2MjMwYTM4YzVlMDM5
MGE1MzIwMTgyYzQ3ZjVjMjE4MjE5OTUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weQpAQCAtMjM0LDcgKzIzNCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogCiBkZWYgX21vY2tlZF9vcGVuKG9yaWdpbmFsX29wZW4sIGZpbGVfbGlz
dCk6Ci0gICAgZGVmIF93cmFwcGVyKG5hbWUsIG1vZGUsIGVuY29kaW5nKToKKyAgICBkZWYgX3dy
YXBwZXIobmFtZSwgbW9kZT0icmIiLCBlbmNvZGluZz1Ob25lKToKICAgICAgICAgaWYgbmFtZS5m
aW5kKCItZXhwZWN0ZWQuIikgIT0gLTEgYW5kIG1vZGUgPT0gInciOgogICAgICAgICAgICAgIyB3
ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IHdyaXRlIG5ldyBiYXNlbGluZXMsIHNvIHN0dWIgdGhl
c2Ugb3V0CiAgICAgICAgICAgICBuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKQpAQCAtMzE2LDE5ICsz
MTYsMTkgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAKIGNs
YXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgRklYTUU6IGl0J3MgaGFy
ZCB0byBrbm93IHdoaWNoIHBsYXRmb3JtcyBhcmUgc2FmZSB0byB0ZXN0OyB0aGUKLSAgICAjIGNo
cm9taXVtIHBsYXRmb3JtcyByZXF1aXJlIGEgY2hyb21pdW0gY2hlY2tvdXQsIGFuZCB0aGUgbWFj
IHBsYXRmb3JtCi0gICAgIyByZXF1aXJlcyBmY250bCwgc28gaXQgY2FuJ3QgYmUgdGVzdGVkIG9u
IHdpbjMyLCBldGMuIFRoZXJlIGlzCi0gICAgIyBwcm9iYWJseSBhIGJldHRlciB3YXkgb2YgaGFu
ZGxpbmcgdGhpcy4KLSAgICBkZWYgdGVzdF9kYXJ3aW4oc2VsZik6CisgICAgZGVmIHRlc3RfZGFy
d2luX2RyeXJ1bihzZWxmKToKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iOgog
ICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVu
KFsnLS1wbGF0Zm9ybScsICd0ZXN0J10pKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2lu
Z19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bicsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnZmFzdC9odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpKQorCisgICAgZGVmIHRl
c3RfZGFyd2luX2RyeXJ1bl9tYWMoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAi
ZGFyd2luIjoKKyAgICAgICAgICAgIHJldHVybgorCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShw
YXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuLW1hYycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpKQogCiAg
ICAgZGVmIHRlc3RfdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1wbGF0Zm9ybScsICdkcnlydW4tdGVzdCcsCg==
</data>
<flag name="review"
          id="58797"
          type_id="1"
          status="-"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>