<?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>38616</bug_id>
          
          <creation_ts>2010-05-05 17:35:20 -0700</creation_ts>
          <short_desc>new-run-webkit-tests: clean up newline handling in printing</short_desc>
          <delta_ts>2010-05-07 19:38:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>221378</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-05 17:35:20 -0700</bug_when>
    <thetext>new-run-webkit-tests: clean up newline handling in printing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221380</commentid>
    <comment_count>1</comment_count>
      <attachid>55179</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-05 17:36:36 -0700</bug_when>
    <thetext>Created attachment 55179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221398</commentid>
    <comment_count>2</comment_count>
      <attachid>55179</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 17:58:48 -0700</bug_when>
    <thetext>Comment on attachment 55179
Patch

WebKitTools/Scripts/webkitpy/common/array_stream.py:1
 +  #!/usr/bin/python
No need.

WebKitTools/Scripts/webkitpy/common/array_stream.py:36
 +      This is used primarily by unit test classes to mock output streams.
We should document when clients should use this instead of StringIO.  including how this differs from StringIO.

WebKitTools/Scripts/webkitpy/common/array_stream.py:55
 +          &quot;&quot;&quot;Return whether the stream is empty.&quot;&quot;&quot;
Although I think pep8 suggests these, they&apos;re often completely useless. :)

I&apos;m not sure if is_empty() or empty() is preferred.  I know C++ webkit prefers isEmpty().

WebKitTools/Scripts/webkitpy/common/array_stream.py:46
 +      def get(self):
StringIO calls their equivalent getvalue() which is not pep8 compliant.  But just thought you might want to know.  If they had followed pep8, I guess I would have suggested we change to match.

WebKitTools/Scripts/webkitpy/common/array_stream.py:63
 +          return &apos;&lt;ArrayStream: &apos; + str(self._contents) + &apos;&gt;&apos;
It&apos;s sad that every class has to implement this template.  I&apos;m surprised object doesn&apos;t provide some sort of hook to allow you to fill in the middle.

WebKitTools/Scripts/webkitpy/common/array_stream_unittest.py:41
 +          self.assertTrue(a.empty())
You repeat this empty check enough times, I would have considered adding a def _assert_empty(stream) which did those two asserts.  It would probably only net a couple lines in the end but might make the main test method more clear.  Unsure.

WebKitTools/Scripts/webkitpy/common/array_stream_unittest.py:55
 +          self.assertEquals(a.get(), [&quot;foo&quot;, &quot;bar&quot;])
Actually, you could easily add an assert_value() check which takes the value to assert and could itself figure out whether to assert empty true or false.  That would clean up several checks and make all of these places consistent.

WebKitTools/Scripts/webkitpy/common/array_stream_unittest.py:68
 +  if __name__ == &apos;__main__&apos;:
Won&apos;t work anyway given how we import, so please remove.

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:141
 +          if len(str):
I&apos;m not sure why len() is clearer than just if str:  but I think you and I have had that discussion before. :)

WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:486
 +          # from the logger :(.
I think cjerdonek knows some magic.

WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:674
 +          self._printer.print_update(&quot;All threads started ...&quot;)
Sigh.  You&apos;ll conflict with changes I have locally to this method.  We hang at this message for several seconds for reasons I don&apos;t understand.


If you&apos;re not particularly partial to the log change, you should consider reverting it to not conflict with bug 38561 which moves code around in that file.

Looks OK.  Please consider updating the unit tests before landing.  I don&apos;t need to see this again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221414</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-05 18:20:08 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 55179 [details])
&gt; WebKitTools/Scripts/webkitpy/common/array_stream.py:1
&gt;  +  #!/usr/bin/python
&gt; No need.

Sure, but I think it&apos;s generally good style to include a shebang line. 

&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/array_stream.py:36
&gt;  +      This is used primarily by unit test classes to mock output streams.
&gt; We should document when clients should use this instead of StringIO.  including
&gt; how this differs from StringIO.
&gt; 

Will do.

&gt; WebKitTools/Scripts/webkitpy/common/array_stream.py:55
&gt;  +          &quot;&quot;&quot;Return whether the stream is empty.&quot;&quot;&quot;
&gt; Although I think pep8 suggests these, they&apos;re often completely useless. :)
&gt;

Yeah.
 
&gt; I&apos;m not sure if is_empty() or empty() is preferred.  I know C++ webkit prefers
&gt; isEmpty().
&gt; 

In the absence of a standard, I will leave it as empty().

&gt; WebKitTools/Scripts/webkitpy/common/array_stream.py:46
&gt;  +      def get(self):
&gt; StringIO calls their equivalent getvalue() which is not pep8 compliant.  But
&gt; just thought you might want to know.  If they had followed pep8, I guess I
&gt; would have suggested we change to match.

If I was feeling verbose, I probably would&apos;ve called it get_contents(). But I&apos;m not.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/array_stream.py:63
&gt;  +          return &apos;&lt;ArrayStream: &apos; + str(self._contents) + &apos;&gt;&apos;
&gt; It&apos;s sad that every class has to implement this template.  I&apos;m surprised object
&gt; doesn&apos;t provide some sort of hook to allow you to fill in the middle.
&gt;

Agreed.
 
&gt; WebKitTools/Scripts/webkitpy/common/array_stream_unittest.py:41
&gt;  +          self.assertTrue(a.empty())
&gt; You repeat this empty check enough times, I would have considered adding a def
&gt; _assert_empty(stream) which did those two asserts.  It would probably only net
&gt; a couple lines in the end but might make the main test method more clear. 
&gt; Unsure.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/array_stream_unittest.py:55
&gt;  +          self.assertEquals(a.get(), [&quot;foo&quot;, &quot;bar&quot;])
&gt; Actually, you could easily add an assert_value() check which takes the value to
&gt; assert and could itself figure out whether to assert empty true or false.  That
&gt; would clean up several checks and make all of these places consistent.
&gt;

Okay, I can add this.
 
&gt; WebKitTools/Scripts/webkitpy/common/array_stream_unittest.py:68
&gt;  +  if __name__ == &apos;__main__&apos;:
&gt; Won&apos;t work anyway given how we import, so please remove.

It works fine for me, and I use this mechanism all the time. You just need WebKitTools/Scripts in your PYTHONPATH.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/metered_stream.py:141
&gt;  +          if len(str):
&gt; I&apos;m not sure why len() is clearer than just if str:  but I think you and I have
&gt; had that discussion before. :)

if str is false if str is either None or &quot;&quot;; len(str) will bail out on None, which is probably a good thing.

&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py:486
&gt;  +          # from the logger :(.
&gt; I think cjerdonek knows some magic.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:674
&gt;  +          self._printer.print_update(&quot;All threads started ...&quot;)
&gt; Sigh.  You&apos;ll conflict with changes I have locally to this method.  We hang at
&gt; this message for several seconds for reasons I don&apos;t understand.
&gt;
&gt; 
&gt; If you&apos;re not particularly partial to the log change, you should consider
&gt; reverting it to not conflict with bug 38561 which moves code around in that
&gt; file.
&gt; 
&gt; Looks OK.  Please consider updating the unit tests before landing.  I don&apos;t
&gt; need to see this again.

I will undo this change; see the comment I made while reviewing your bug, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221425</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-05 18:33:43 -0700</bug_when>
    <thetext>Committed r58853: &lt;http://trac.webkit.org/changeset/58853&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55179</attachid>
            <date>2010-05-05 17:36:36 -0700</date>
            <delta_ts>2010-05-07 19:38:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38616-20100505173635.patch</filename>
            <type>text/plain</type>
            <size>29229</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwY2UyNTM1ZWE1ZmUxOWY3ZjAwMmEwYTUwZTc0ZWNhMTc3N2EwZWJiLi40MGMwYTBi
ZWM5N2I0MjEzNTI2MTk1NWM1MTFiODI2NzI3MDljYTIxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDUtMDUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQt
dGVzdHM6IGNsZWFuIHVwIG5ld2xpbmUgaGFuZGxpbmcgaW4gcHJpbnRpbmcKKworICAgICAgICBU
aGUgbmV3IHByaW50aW5nIG1vZHVsZSBzZWVtcyB0byBoYW5kbGUgbmV3bGluZXMgc29tZXdoYXQK
KyAgICAgICAgaW5jb25zaXN0ZW50bHksIGVzcGVjaWFsbHkgaW4gLS12ZXJib3NlIG1vZGUuIFRo
aXMgY2hhbmdlIGNsZWFucyB1cAorICAgICAgICB0aGUgY29kZSB0byBtYWtlIHRoaW5ncyBtb3Jl
IGNvbnNpc3RlbnQgYW5kIGFkZHMgYSBidW5jaCBvZiB1bml0IHRlc3RzLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODYxNgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vYXJyYXlfc3RyZWFtLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9hcnJheV9zdHJlYW1fdW5pdHRlc3QucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21ldGVyZWRfc3RyZWFtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmlu
dGluZy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wcmludGluZ191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAt
MDUtMDQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNoaW5pY2hpcm8gSGFtYWppLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vYXJyYXlfc3RyZWFtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vYXJyYXlfc3RyZWFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmZDE3Zjk2NDIzNjY3NjRj
NDljM2EwYmQ3NzlhNzRmOWNmZjhjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9hcnJheV9zdHJlYW0ucHkKQEAgLTAsMCArMSw2MyBAQAor
IyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJQYWNrYWdlIHRoYXQgcHJp
dmF0ZSBhbiBhcnJheS1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBhIHN0cmVhbS4iIiIKKworCitj
bGFzcyBBcnJheVN0cmVhbShvYmplY3QpOgorICAgICIiIlNpbXBsZSBjbGFzcyB0aGF0IGltcGxt
ZW1lbnRzIGEgc3RyZWFtIGludGVyZmFjZSBvbiB0b3Agb2YgYW4gYXJyYXkuCisKKyAgICBUaGlz
IGlzIHVzZWQgcHJpbWFyaWx5IGJ5IHVuaXQgdGVzdCBjbGFzc2VzIHRvIG1vY2sgb3V0cHV0IHN0
cmVhbXMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYu
X2NvbnRlbnRzID0gW10KKworICAgIGRlZiB3cml0ZShzZWxmLCBtc2cpOgorICAgICAgICAiIiJJ
bXBsZW1lbnQgc3RyZWFtLndyaXRlKCkgYnkgYXBwZW5kaW5nIHRvIHRoZSBzdHJlYW0ncyBjb250
ZW50cy4iIiIKKyAgICAgICAgc2VsZi5fY29udGVudHMuYXBwZW5kKG1zZykKKworICAgIGRlZiBn
ZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgY29udGVudHMgb2YgYSBzdHJlYW0gKGFz
IGFuIGFycmF5KS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRzCisKKyAgICBkZWYg
cmVzZXQoc2VsZik6CisgICAgICAgICIiIkVtcHR5IHRoZSBzdHJlYW0uIiIiCisgICAgICAgIHNl
bGYuX2NvbnRlbnRzID0gW10KKworICAgIGRlZiBlbXB0eShzZWxmKToKKyAgICAgICAgIiIiUmV0
dXJuIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyBlbXB0eS4iIiIKKyAgICAgICAgcmV0dXJuIChsZW4o
c2VsZi5fY29udGVudHMpID09IDApCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICIi
IkZsdXNoIHRoZSBzdHJlYW0gKGEgbm8tb3AgaW1wbGVtZW50ZWQgZm9yIGNvbXBhdGliaWxpdHkp
LiIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAnPEFycmF5U3RyZWFtOiAnICsgc3RyKHNlbGYuX2NvbnRlbnRzKSArICc+JwpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vYXJyYXlfc3RyZWFtX3Vu
aXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vYXJyYXlfc3Ry
ZWFtX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhZGJhZGI3MzZlZDA1NTMwNWRhY2NmYTE4NTlk
NWNhZjY2MWZkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9hcnJheV9zdHJlYW1fdW5pdHRlc3QucHkKQEAgLTAsMCArMSw2OSBAQAorIyEv
dXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RzIGZvciBhcnJh
eV9zdHJlYW0ucHkuIiIiCisKK2ltcG9ydCBwZGIKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5hcnJheV9zdHJlYW0gaW1wb3J0IEFycmF5U3RyZWFtCisKKworY2xhc3Mg
QXJyYXlTdHJlYW1UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpY3Mo
c2VsZik6CisgICAgICAgIGEgPSBBcnJheVN0cmVhbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShhLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCksIFtdKQorCisg
ICAgICAgIGEuZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5lbXB0eSgpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbXSkKKworICAgICAgICBhLndyaXRlKCJm
b28iKQorICAgICAgICBhLndyaXRlKCJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEu
ZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYS5nZXQoKSwgWyJmb28iLCAiYmFy
Il0pCisKKyAgICAgICAgYS5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYS5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbImZvbyIsICJiYXIiXSkK
KworICAgICAgICBhLnJlc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYS5nZXQoKSwgW10pCisKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoc3RyKGEpLCAiPEFycmF5U3RyZWFtOiBbXT4iKQorCisgICAgICAgIGEud3Jp
dGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYS5lbXB0eSgpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbImZvbyJdKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhzdHIoYSksICI8QXJyYXlTdHJlYW06IFsnZm9vJ10+IikKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3Ry
ZWFtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkKaW5kZXggYTMzZmMzYTMzZTQ5OTg4Yjk1MjM1NmYx
OGYxZDAxZDdjMDMyNmU2OC4uOWM0MmQ3MzhkZmI0ZGE4YzE4YWIyZTE1OWNjYWE4MGVlZTNmY2Fi
NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkK
QEAgLTMyLDYgKzMyLDkgQEAgUGFja2FnZSB0aGF0IGltcGxlbWVudHMgYSBzdHJlYW0gd3JhcHBl
ciB0aGF0IGhhcyAnbWV0ZXJzJyBhcyB3ZWxsIGFzCiByZWd1bGFyIG91dHB1dC4gQSAnbWV0ZXIn
IGlzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCB0aGF0IGNhbiBiZSBlcmFzZWQKIGFuZCByZXdyaXR0
ZW4gcmVwZWF0ZWRseSwgd2l0aG91dCBwcm9kdWNpbmcgbXVsdGlwbGUgbGluZXMgb2Ygb3V0cHV0
LiBJdAogY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBlZmZlY3RzIGxpa2UgcHJvZ3Jlc3MgYmFycy4K
KworVGhpcyBwYWNrYWdlIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgcHJpbnRpbmcgbW9k
dWxlIGluIHRoZSBsYXlvdXRfdGVzdHMKK3BhY2thZ2UuCiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcK
QEAgLTQxLDE4ICs0NCwzOCBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5Lmxh
eW91dF90ZXN0cy5tZXRlcmVkX3N0cmVhbSIpCiAKIGNsYXNzIE1ldGVyZWRTdHJlYW06CiAgICAg
IiIiVGhpcyBjbGFzcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgc3RyZWFtIHRoYXQgYWxsb3dzIHlv
dSB0byBpbXBsZW1lbnQKLSAgICBtZXRlcnMuCi0KLSAgICBJdCBjYW4gYmUgdXNlZCBsaWtlIGEg
c3RyZWFtLCBidXQgY2FsbGluZyB1cGRhdGUoKSB3aWxsIHByaW50Ci0gICAgdGhlIHN0cmluZyBm
b2xsb3dlZCBieSBvbmx5IGEgY2FycmlhZ2UgcmV0dXJuIChpbnN0ZWFkIG9mIGEgY2FycmlhZ2UK
LSAgICByZXR1cm4gYW5kIGEgbGluZSBmZWVkKS4gVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1l
bnQgcHJvZ3Jlc3MgYmFycyBhbmQKLSAgICBvdGhlciBzb3J0cyBvZiBtZXRlcnMuIE5vdGUgdGhh
dCBhbnl0aGluZyB3cml0dGVuIGJ5IHVwZGF0ZSgpIHdpbGwgYmUKLSAgICBlcmFzZWQgYnkgYSBz
dWJzZXF1ZW50IHVwZGF0ZSgpLCB3cml0ZSgpLCBvciBmbHVzaCgpLiIiIgorICAgIG1ldGVycyAo
cHJvZ3Jlc3MgYmFycywgZXRjLikuCisKKyAgICBJdCBjYW4gYmUgdXNlZCBkaXJlY3RseSBhcyBh
IHN0cmVhbSwgYnkgY2FsbGluZyB3cml0ZSgpLCBidXQgcHJvdmlkZXMKKyAgICB0d28gb3RoZXIg
bWV0aG9kcyBmb3Igb3V0cHV0LCB1cGRhdGUoKSwgYW5kIHByb2dyZXNzKCkuCisKKyAgICBJbiBu
b3JtYWwgdXNhZ2UsIHVwZGF0ZSgpIHdpbGwgb3ZlcndyaXRlIHRoZSBvdXRwdXQgb2YgdGhlIGlt
bWVkaWF0ZWx5CisgICAgcHJlY2VkaW5nIHVwZGF0ZSgpICh3cml0ZSgpIGFsc28gd2lsbCBvdmVy
d3JpdGUgdXBkYXRlKCkpLiBTbywgY2FsbGluZworICAgIG11bHRpcGxlIHVwZGF0ZSgpcyBpbiBh
IHJvdyBjYW4gcHJvdmlkZSBhbiB1cGRhdGluZyBzdGF0dXMgYmFyIChub3RlIHRoYXQKKyAgICBp
ZiBhbiB1cGRhdGUgc3RyaW5nIGNvbnRhaW5zIG5ld2xpbmVzLCBvbmx5IHRoZSB0ZXh0IGZvbGxv
d2luZyB0aGUgbGFzdAorICAgIG5ld2xpbmUgd2lsbCBiZSBvdmVyd3JpdHRlbi9lcmFzZWQpLgor
CisgICAgSWYgdGhlIE1ldGVyZWRTdHJlYW0gaXMgY29uc3RydWN0ZWQgaW4gInZlcmJvc2UiIG1v
ZGUgKGkuZS4sIGJ5IHBhc3NpbmcKKyAgICB2ZXJib3NlPXRydWUpLCB0aGVuIHVwZGF0ZSgpIG5v
IGxvbmdlciBvdmVyd3JpdGUgYSBwcmV2aW91cyB1cGRhdGUoKSwgYW5kCisgICAgaW5zdGVhZCB0
aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIHdyaXRlKCksIGFsdGhvdWdoIHRoZSB0ZXh0IGlzCisg
ICAgYWN0dWFsbHkgc2VudCB0byB0aGUgbG9nZ2VyIHJhdGhlciB0aGFuIHRvIHRoZSBzdHJlYW0g
cGFzc2VkCisgICAgdG8gdGhlIGNvbnN0cnVjdG9yLgorCisgICAgcHJvZ3Jlc3MoKSBpcyBqdXN0
IGxpa2UgdXBkYXRlKCksIGV4Y2VwdCB0aGF0IGlmIHlvdSBhcmUgaW4gdmVyYm9zZSBtb2RlLAor
ICAgIHByb2dyZXNzIG1lc3NhZ2VzIGFyZSBub3Qgb3V0cHV0IGF0IGFsbCAodGhleSBhcmUgZHJv
cHBlZCkuIFRoaXMgaXMKKyAgICB1c2VkIGZvciB0aGluZ3MgbGlrZSBwcm9ncmVzcyBiYXJzIHdo
aWNoIGFyZSBwcmVzdW1lZCB0byBiZSB1bndhbnRlZCBpbgorICAgIHZlcmJvc2UgbW9kZS4KKwor
ICAgIE5vdGUgdGhhdCB0aGUgdXN1YWwgdXNhZ2UgZm9yIHRoaXMgY2xhc3MgaXMgYXMgYSBkZXN0
aW5hdGlvbiBmb3IKKyAgICBhIGxvZ2dlciB0aGF0IGNhbiBhbHNvIGJlIHdyaXR0ZW4gdG8gZGly
ZWN0bHkgKGkuZS4sIHNvbWUgbWVzc2FnZXMgZ28KKyAgICB0aHJvdWdoIHRoZSBsb2dnZXIsIHNv
bWUgZG9uJ3QpLiBXZSB0aHVzIGhhdmUgdG8gZGFuY2UgYXJvdW5kIGEKKyAgICBsYXllcmluZyBp
bnZlcnNpb24gaW4gdXBkYXRlKCkgZm9yIHRoaW5ncyB0byB3b3JrIGNvcnJlY3RseS4KKyAgICAi
IiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJib3NlLCBzdHJlYW0pOgogICAgICAgICAi
IiIKICAgICAgICAgQXJnczoKLSAgICAgICAgICB2ZXJib3NlOiB3aGV0aGVyIHVwZGF0ZSBpcyBh
IG5vLW9wCisgICAgICAgICAgdmVyYm9zZTogd2hldGhlciBwcm9ncmVzcyBpcyBhIG5vLW9wIGFu
ZCB1cGRhdGVzKCkgYXJlbid0IG92ZXJ3cml0dGVuCiAgICAgICAgICAgc3RyZWFtOiBvdXRwdXQg
c3RyZWFtIHRvIHdyaXRlIHRvCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9kaXJ0eSA9IEZh
bHNlCkBAIC02Myw5ICs4NiwxMSBAQCBjbGFzcyBNZXRlcmVkU3RyZWFtOgogICAgIGRlZiB3cml0
ZShzZWxmLCB0eHQpOgogICAgICAgICAiIiJXcml0ZSB0byB0aGUgc3RyZWFtLCBvdmVyd3JpdGlu
ZyBhbmQgcmVzZXR0aW5nIHRoZSBtZXRlci4iIiIKICAgICAgICAgaWYgc2VsZi5fZGlydHk6Ci0g
ICAgICAgICAgICBzZWxmLnVwZGF0ZSgiIikKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKHR4dCkK
ICAgICAgICAgICAgIHNlbGYuX2RpcnR5ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fc3RyZWFtLndy
aXRlKHR4dCkKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfdXBkYXRlID0gJycKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZSh0eHQpCiAKICAgICBkZWYgZmx1c2go
c2VsZik6CiAgICAgICAgICIiIkZsdXNoIGFueSBidWZmZXJlZCBvdXRwdXQuIiIiCkBAIC0xMTMs
OSArMTM4LDExIEBAIGNsYXNzIE1ldGVyZWRTdHJlYW06CiAgICAgICAgICMgbWVzc2FnZS4KICAg
ICAgICAgaWYgbGVuKHNlbGYuX2xhc3RfdXBkYXRlKToKICAgICAgICAgICAgIHNlbGYuX3N0cmVh
bS53cml0ZSgiXGIiICogbGVuKHNlbGYuX2xhc3RfdXBkYXRlKSkKLSAgICAgICAgc2VsZi5fc3Ry
ZWFtLndyaXRlKHN0cikKKyAgICAgICAgaWYgbGVuKHN0cik6CisgICAgICAgICAgICBzZWxmLl9z
dHJlYW0ud3JpdGUoc3RyKQogICAgICAgICBudW1fcmVtYWluaW5nID0gbGVuKHNlbGYuX2xhc3Rf
dXBkYXRlKSAtIGxlbihzdHIpCiAgICAgICAgIGlmIG51bV9yZW1haW5pbmcgPiAwOgogICAgICAg
ICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKCIgIiAqIG51bV9yZW1haW5pbmcgKyAiXGIiICogbnVt
X3JlbWFpbmluZykKLSAgICAgICAgc2VsZi5fbGFzdF91cGRhdGUgPSBzdHIKKyAgICAgICAgbGFz
dF9uZXdsaW5lID0gc3RyLnJmaW5kKCJcbiIpCisgICAgICAgIHNlbGYuX2xhc3RfdXBkYXRlID0g
c3RyWyhsYXN0X25ld2xpbmUgKyAxKTpdCiAgICAgICAgIHNlbGYuX2RpcnR5ID0gVHJ1ZQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW1fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbV91bml0
dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MjZmOWIzMjVjZjhlOGFhNjVkMzJhODIwNWUxZGUzMDExY2Yw
YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW1fdW5pdHRlc3QucHkKQEAgLTAs
MCArMSwxMDYgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVW5p
dCB0ZXN0cyBmb3IgbWV0ZXJlZF9zdHJlYW0ucHkuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IG9w
dHBhcnNlCitpbXBvcnQgcGRiCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBs
b2dnaW5nCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmFycmF5X3N0cmVhbSBpbXBvcnQgQXJyYXlT
dHJlYW0KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBt
ZXRlcmVkX3N0cmVhbQorCisKK2NsYXNzIFRlc3RNZXRlcmVkU3RyZWFtKHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgdGVzdF9yZWd1bGFyKHNlbGYpOgorICAgICAgICBhID0gQXJyYXlTdHJl
YW0oKQorICAgICAgICBtID0gbWV0ZXJlZF9zdHJlYW0uTWV0ZXJlZFN0cmVhbSh2ZXJib3NlPUZh
bHNlLCBzdHJlYW09YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW1wdHkoKSkKKworICAg
ICAgICAjIGJhc2ljIHRlc3QgLSBub3RlIHRoYXQgdGhlIGZsdXNoKCkgaXMgYSBuby1vcCwgYnV0
IHdlIGluY2x1ZGUgaXQKKyAgICAgICAgIyBmb3IgY292ZXJhZ2UuCisgICAgICAgIG0ud3JpdGUo
ImZvbyIpCisgICAgICAgIG0uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdl
dCgpLCBbJ2ZvbyddKQorCisgICAgICAgICMgbm93IGNoZWNrIHRoYXQgYSBzZWNvbmQgd3JpdGUo
KSBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIGZpcnN0LgorICAgICAgICBtLndyaXRlKCJiYXIiKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbJ2ZvbycsICdiYXInXSkKKworICAg
ICAgICBtLnVwZGF0ZSgiYmF0dGVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYS5nZXQo
KSwgWydmb28nLCAnYmFyJywgJ2JhdHRlciddKQorCisgICAgICAgICMgVGhlIG5leHQgdXBkYXRl
KCkgc2hvdWxkIG92ZXJ3cml0ZSB0aGUgbGFzdGUgdXBkYXRlKCkgYnV0IG5vdCB0aGUKKyAgICAg
ICAgIyBvdGhlciB0ZXh0LiBOb3RlIHRoYXQgdGhlIGN1cnNvciBpcyBlZmZlY3RpdmVseSBwb3Np
dGlvbmVkIGF0IHRoZQorICAgICAgICAjIGVuZCBvZiAnZm9vJywgZXZlbiB0aG91Z2ggd2UgaGFk
IHRvIGVyYXNlIHRocmVlIG1vcmUgY2hhcmFjdGVycy4KKyAgICAgICAgbS51cGRhdGUoImZvbyIp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCksIFsnZm9vJywgJ2JhcicsICdiYXR0
ZXInLCAnXGJcYlxiXGJcYlxiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdmb28nLCAnICAgXGJcYlxiJ10pCisKKyAgICAgICAgbS5wcm9ncmVzcygicHJvZ3Jlc3MiKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbJ2ZvbycsICdiYXInLCAnYmF0dGVy
JywgJ1xiXGJcYlxiXGJcYicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
Zm9vJywgJyAgIFxiXGJcYicsICdcYlxiXGInLCAncHJvZ3Jlc3MnXSkKKworICAgICAgICAjIG5v
dyBjaGVjayB0aGF0IGEgd3JpdGUoKSBkb2VzIG92ZXJ3cml0ZSB0aGUgcHJvZ3Jlc3MgYmFyCisg
ICAgICAgIG0ud3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCks
IFsnZm9vJywgJ2JhcicsICdiYXR0ZXInLCAnXGJcYlxiXGJcYlxiJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdmb28nLCAnICAgXGJcYlxiJywgJ1xiXGJcYicsICdwcm9n
cmVzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXGJcYlxiXGJcYlxi
XGJcYicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJywgJyAgICAg
XGJcYlxiXGJcYiddKQorCisgICAgICAgICMgTm93IHRlc3QgdGhhdCB3ZSBvbmx5IGJhY2sgdXAg
dG8gdGhlIG1vc3QgcmVjZW50IG5ld2xpbmUuCisKKyAgICAgICAgIyBOb3RlIGFsc28gdGhhdCB3
ZSBkbyBub3QgYmFjayB1cCB0byBlcmFzZSB0aGUgbW9zdCByZWNlbnQgd3JpdGUoKSwKKyAgICAg
ICAgIyBpLmUuLCB3cml0ZSgpcyBkbyBub3QgZ2V0IGVyYXNlZC4KKyAgICAgICAgYS5yZXNldCgp
CisgICAgICAgIG0udXBkYXRlKCJmb29cbmJhciIpCisgICAgICAgIG0udXBkYXRlKCJiYXoiKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbJ2Zvb1xuYmFyJywgJ1xiXGJcYics
ICdiYXonXSkKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIGEgPSBBcnJh
eVN0cmVhbSgpCisgICAgICAgIG0gPSBtZXRlcmVkX3N0cmVhbS5NZXRlcmVkU3RyZWFtKHZlcmJv
c2U9VHJ1ZSwgc3RyZWFtPWEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmVtcHR5KCkpCisg
ICAgICAgIG0ud3JpdGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEuZ2V0KCks
IFsnZm9vJ10pCisKKyAgICAgICAgbS51cGRhdGUoImJhciIpCisgICAgICAgICMgRklYTUU6IGZp
Z3VyZSBvdXQgaG93IHRvIHRlc3QgdGhhdCB0aGlzIHdlbnQgdG8gdGhlIGxvZ2dlci4gSXMgdGhp
cworICAgICAgICAjIGdvb2QgZW5vdWdoPworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLmdl
dCgpLCBbJ2ZvbyddKQorCisgICAgICAgIG0ucHJvZ3Jlc3MoImRyb3BwZWQiKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhhLmdldCgpLCBbJ2ZvbyddKQorCisKK2lmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3ByaW50aW5nLnB5CmluZGV4IGUzOWQ0MTA4NzA3N2ZkZWE4ZTI5ZGFjMmQ2ODEwZDIwZTNhZTli
MzMuLjkxZDQ5YzY1NGY4ZjZiNjQ2ZjQ2OWY5NWI0ZDE4MTIyMTU2ZjdmMzcgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3ByaW50aW5nLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CkBAIC0yNzQsMTMgKzI3NCwxMyBAQCBjbGFz
cyBQcmludGVyKG9iamVjdCk6CiAKICAgICAgICAgdW5leHBlY3RlZCA9IHRvdGFsIC0gZXhwZWN0
ZWQKICAgICAgICAgaWYgdW5leHBlY3RlZCA9PSAwOgotICAgICAgICAgICAgc2VsZi5fbWV0ZXIu
d3JpdGUoIkFsbCAlZCB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuXG4iICUgZXhwZWN0ZWQpCisgICAg
ICAgICAgICBzZWxmLl93cml0ZSgiQWxsICVkIHRlc3RzIHJhbiBhcyBleHBlY3RlZC4iICUgZXhw
ZWN0ZWQpCiAgICAgICAgIGVsaWYgZXhwZWN0ZWQgPT0gMToKLSAgICAgICAgICAgIHNlbGYuX21l
dGVyLndyaXRlKCJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDpcblxuIiAlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKQorICAgICAgICAgICAgc2Vs
Zi5fd3JpdGUoIjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsICVkIGRpZG4ndDoiICUgdW5leHBlY3Rl
ZCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKCJcbiVkIHRl
c3RzIHJhbiBhcyBleHBlY3RlZCwgJWQgZGlkbid0OlxuXG4iICUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChleHBlY3RlZCwgdW5leHBlY3RlZCkpCisgICAgICAgICAgICBzZWxmLl93
cml0ZSgiJWQgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLCAlZCBkaWRuJ3Q6IiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAoZXhwZWN0ZWQsIHVuZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLl93cml0
ZSgiIikKIAogICAgIGRlZiBwcmludF90ZXN0X3Jlc3VsdChzZWxmLCByZXN1bHQsIGV4cGVjdGVk
LCBleHBfc3RyLCBnb3Rfc3RyKToKICAgICAgICAgIiIiUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUg
dGVzdCBhcyBkZXRlcm1pbmVkIGJ5IC0tcHJpbnQuIiIiCkBAIC0zMDMsMjAgKzMwMywyMCBAQCBj
bGFzcyBQcmludGVyKG9iamVjdCk6CiAgICAgICAgICIiIgogICAgICAgICBmaWxlbmFtZSA9IHJl
c3VsdC5maWxlbmFtZQogICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuX3dyaXRlKCd0cmFjZTogJXNcbicg
JSB0ZXN0X25hbWUpCi0gICAgICAgIHNlbGYuX3dyaXRlKCcgIHR4dDogJXNcbicgJQorICAgICAg
ICBzZWxmLl93cml0ZSgndHJhY2U6ICVzJyAlIHRlc3RfbmFtZSkKKyAgICAgICAgc2VsZi5fd3Jp
dGUoJyAgdHh0OiAlcycgJQogICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVk
X2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcpKSkKICAgICAgICAgcG5nX2ZpbGUgPSBzZWxmLl9w
b3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCiAgICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKHBuZ19maWxlKToKLSAgICAgICAgICAgIHNlbGYuX3dyaXRlKCcgIHBuZzogJXNc
bicgJQorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJyAgcG5nOiAlcycgJQogICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkK
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3dyaXRlKCcgIHBuZzogPG5vbmU+XG4n
KQotICAgICAgICBzZWxmLl93cml0ZSgnICBleHA6ICVzXG4nICUgZXhwX3N0cikKLSAgICAgICAg
c2VsZi5fd3JpdGUoJyAgZ290OiAlc1xuJyAlIGdvdF9zdHIpCi0gICAgICAgIHNlbGYuX3dyaXRl
KCcgdG9vazogJS0uM2ZcbicgJSByZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgc2VsZi5f
d3JpdGUoJ1xuJykKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKCcgIHBuZzogPG5vbmU+JykKKyAg
ICAgICAgc2VsZi5fd3JpdGUoJyAgZXhwOiAlcycgJSBleHBfc3RyKQorICAgICAgICBzZWxmLl93
cml0ZSgnICBnb3Q6ICVzJyAlIGdvdF9zdHIpCisgICAgICAgIHNlbGYuX3dyaXRlKCcgdG9vazog
JS0uM2YnICUgcmVzdWx0LnRlc3RfcnVuX3RpbWUpCisgICAgICAgIHNlbGYuX3dyaXRlKCcnKQog
CiAgICAgZGVmIF9wcmludF91bmV4cGVjdGVkX3Rlc3RfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CiAg
ICAgICAgICIiIlByaW50cyBvbmUgdW5leHBlY3RlZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgpAQCAt
NDQ5LDcgKzQ0OSw3IEBAIGNsYXNzIFByaW50ZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTlNba2V5Lmxv
d2VyKCldCiAgICAgICAgICAgICAgICAgICAgIG5ld19leHBlY3RhdGlvbnNfbGlzdCA9IGxpc3Qo
c2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0ZWQpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9i
dWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMgPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIiAgJXMgPSAlc1xuIiAlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAodGVzdCwgIiAiLmpvaW4obmV3X2V4cGVjdGF0aW9uc19saXN0KSkpCiAgICAg
ICAgICAgICAgICAgc2VsZi5fYnVpbGRib3Rfc3RyZWFtLndyaXRlKCJcbiIpCiAgICAgICAgICAg
ICBzZWxmLl9idWlsZGJvdF9zdHJlYW0ud3JpdGUoIlxuIikKQEAgLTQ3OCwxMCArNDc4LDE4IEBA
IGNsYXNzIFByaW50ZXIob2JqZWN0KToKICAgICBkZWYgd3JpdGUoc2VsZiwgbXNnLCBvcHRpb249
Im1pc2MiKToKICAgICAgICAgaWYgc2VsZi5kaXNhYmxlZChvcHRpb24pOgogICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgIHNlbGYuX3dyaXRlKCIlc1xuIiAlIG1zZykKKyAgICAgICAgc2VsZi5f
d3JpdGUobXNnKQogCiAgICAgZGVmIF93cml0ZShzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLl9t
ZXRlci51cGRhdGUobXNnKQorICAgICAgICAjIEZJWE1FOiB3ZSBjb3VsZCBwcm9iYWJseSBnZXQg
YXdheSB3aXRoIGNhbGxpbmcgX2xvZy5pbmZvKCkgYWxsIG9mCisgICAgICAgICMgdGhlIHRpbWUs
IGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBnb29kIHdheSB0byB0ZXN0IHRoZSBvdXRw
dXQKKyAgICAgICAgIyBmcm9tIHRoZSBsb2dnZXIgOiguCisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMudmVyYm9zZToKKyAgICAgICAgICAgIF9sb2cuaW5mbyhtc2cpCisgICAgICAgIGVsaWYgbXNn
ID09ICIiOgorICAgICAgICAgICAgc2VsZi5fbWV0ZXIud3JpdGUoIlxuIikKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuX21ldGVyLndyaXRlKG1zZykKIAogIwogIyBVdGlsaXR5IHJv
dXRpbmVzIHVzZWQgYnkgdGhlIENvbnRyb2xsZXIgY2xhc3MKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5n
X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHkKaW5kZXggNjM3MDM0ZTc1ZDA2NjRl
YzJmYmM5ODM3ZjcyNTE5YzJiM2YyNjY0MS4uOGU2YWE4ZmM3MDQzMGY4NmY1MGEyODQ3NmE4ODU5
ODVmN2ZkMmMwYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmdfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRp
bmdfdW5pdHRlc3QucHkKQEAgLTM2LDYgKzM2LDcgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0
ZXN0CiBpbXBvcnQgbG9nZ2luZwogCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgYXJyYXlf
c3RyZWFtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJfdHJl
ZV90aHJlYWQKQEAgLTQ0LDI5ICs0NSw2IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cwogCiAKLWNsYXNzIEFycmF5U3RyZWFtKG9iamVj
dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9jb250ZW50cyA9IFtd
Ci0KLSAgICBkZWYgd3JpdGUoc2VsZiwgbXNnKToKLSAgICAgICAgc2VsZi5fY29udGVudHMuYXBw
ZW5kKG1zZykKLQotICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9jb250
ZW50cwotCi0gICAgZGVmIHJlc2V0KHNlbGYpOgotICAgICAgICBzZWxmLl9jb250ZW50cyA9IFtd
Ci0KLSAgICBkZWYgZW1wdHkoc2VsZik6Ci0gICAgICAgIHJldHVybiAobGVuKHNlbGYuX2NvbnRl
bnRzKSA9PSAwKQotCi0gICAgZGVmIGZsdXNoKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBk
ZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnPEFycmF5U3RyZWFtOiAnICsgc3Ry
KHNlbGYuX2NvbnRlbnRzKSArICc+JwotCi0KIGRlZiBnZXRfb3B0aW9ucyhhcmdzKToKICAgICBw
cmludF9vcHRpb25zID0gcHJpbnRpbmcucHJpbnRfb3B0aW9ucygpCiAgICAgb3B0aW9uX3BhcnNl
ciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1wcmludF9vcHRpb25zKQpAQCAt
MTAxLDcgKzc5LDcgQEAgY2xhc3MgVGVzdFV0aWxpdHlGdW5jdGlvbnModW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAjIEZJWE1FOiB0aGVzZSBjYWxscyBiZWNvbWUgbm8tb3BzIGFuZCB3ZSBj
YW4ndCBjb250cm9sIHRoZQogICAgICAgICAjIEZJWE1FOiBjb25maWd1cmF0aW9uIHRvIHRlc3Qg
dGhpbmdzIHByb3Blcmx5LgogICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0X29wdGlvbnMoW10p
Ci0gICAgICAgIHN0cmVhbSA9IEFycmF5U3RyZWFtKCkKKyAgICAgICAgc3RyZWFtID0gYXJyYXlf
c3RyZWFtLkFycmF5U3RyZWFtKCkKICAgICAgICAgcHJpbnRpbmcuY29uZmlndXJlX2xvZ2dpbmco
b3B0aW9ucywgc3RyZWFtKQogICAgICAgICBsb2dnaW5nLmluZm8oInRoaXMgc2hvdWxkIGJlIGxv
Z2dlZCIpCiAgICAgICAgICMgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uZW1wdHkoKSkKQEAgLTEz
Miw4ICsxMTAsOCBAQCBjbGFzcyAgVGVzdHByaW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBpZiBzaW5nbGVfdGhyZWFkZWQ6CiAgICAgICAgICAgICBucHJvYyA9IDEKIAotICAgICAg
ICByZWd1bGFyX291dHB1dCA9IEFycmF5U3RyZWFtKCkKLSAgICAgICAgYnVpbGRib3Rfb3V0cHV0
ID0gQXJyYXlTdHJlYW0oKQorICAgICAgICByZWd1bGFyX291dHB1dCA9IGFycmF5X3N0cmVhbS5B
cnJheVN0cmVhbSgpCisgICAgICAgIGJ1aWxkYm90X291dHB1dCA9IGFycmF5X3N0cmVhbS5BcnJh
eVN0cmVhbSgpCiAgICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHNlbGYuX3BvcnQs
IG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBidWlsZGJvdF9vdXRwdXQsIHNpbmdsZV90aHJlYWRlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXNfZnVsbHlfcGFyYWxsZWwpCkBAIC0xNjMsMTAgKzE0MSwxMCBA
QCBjbGFzcyAgVGVzdHByaW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgaWYg
ZXhwX2VyciBpcyBOb25lOgogICAgICAgICAgICAgICAgIGV4cF9lcnIgPSBbXQogICAgICAgICAg
ICAgaWYgZXhwX2JvdCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGV4cF9ib3QgPSBbbWVzc2Fn
ZSArICdcbiddCisgICAgICAgICAgICAgICAgZXhwX2JvdCA9IFttZXNzYWdlICsgIlxuIl0KICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGV4cF9lcnIgaXMgTm9uZToKLSAgICAgICAgICAg
ICAgICBleHBfZXJyID0gW21lc3NhZ2UgKyAnXG4nXQorICAgICAgICAgICAgICAgIGV4cF9lcnIg
PSBbbWVzc2FnZV0KICAgICAgICAgICAgIGlmIGV4cF9ib3QgaXMgTm9uZToKICAgICAgICAgICAg
ICAgICBleHBfYm90ID0gW10KICAgICAgICAgZG9faGVscGVyKG1ldGhvZF9uYW1lLCAnbm90aGlu
ZycsICdoZWxsbycsIFtdLCBbXSkKQEAgLTIwNCwyMSArMTgyLDIxIEBAIGNsYXNzICBUZXN0cHJp
bnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBz
ZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdvbmUtbGluZS1zdW1tYXJ5J10pCiAgICAgICAg
IHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhlcnIuZ2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLlxuIl0pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwgWyJBbGwgMSB0ZXN0cyByYW4gYXMg
ZXhwZWN0ZWQuIiwgIlxuIl0pCiAKICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdl
dF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCiAgICAgICAgIHByaW50ZXIucHJp
bnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIu
Z2V0KCksIFsiQWxsIDEgdGVzdHMgcmFuIGFzIGV4cGVjdGVkLlxuIl0pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwgWyJBbGwgMSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQuIiwg
IlxuIl0pCiAKICAgICAgICAgZXJyLnJlc2V0KCkKICAgICAgICAgcHJpbnRlci5wcmludF9vbmVf
bGluZV9zdW1tYXJ5KDIsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5nZXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgWyJcbjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsIDEg
ZGlkbid0OlxuXG4iXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyIxIHRlc3QgcmFuIGFz
IGV4cGVjdGVkLCAxIGRpZG4ndDoiLCAiXG4iXSkKIAogICAgICAgICBlcnIucmVzZXQoKQogICAg
ICAgICBwcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkoMywgMikKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoZXJyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbIlxuMiB0
ZXN0cyByYW4gYXMgZXhwZWN0ZWQsIDEgZGlkbid0OlxuXG4iXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyIyIHRlc3RzIHJhbiBhcyBleHBlY3RlZCwgMSBkaWRuJ3Q6IiwgIlxuIl0pCiAK
ICAgICBkZWYgdGVzdF9wcmludF90ZXN0X3Jlc3VsdChzZWxmKToKICAgICAgICAgcmVzdWx0ID0g
Z2V0X3Jlc3VsdCgnZm9vLmh0bWwnKQpAQCAtMjM0LDcgKzIxMiw3IEBAIGNsYXNzICBUZXN0cHJp
bnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1
bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3Rfc3RyPScnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhl
cnIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBmb28uaHRtbCAtPiB1bmV4
cGVjdGVkIHBhc3NcbiddKQorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgZm9vLmh0bWwg
LT4gdW5leHBlY3RlZCBwYXNzJ10pCiAKICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxm
LmdldF9wcmludGVyKFsnLS1wcmludCcsICdldmVyeXRoaW5nJ10pCiAgICAgICAgIHByaW50ZXIu
cHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1UcnVlLCBleHBfc3RyPScnLApAQCAt
MjQ0LDcgKzIyMiw3IEBAIGNsYXNzICBUZXN0cHJpbnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZD1GYWxzZSwg
ZXhwX3N0cj0nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfc3RyPScn
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuZ2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIFsnICBmb28uaHRtbCAtPiB1bmV4cGVjdGVkIHBhc3NcbiddKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICBbJyAgZm9vLmh0bWwgLT4gdW5leHBlY3RlZCBwYXNzJ10pCiAKICAg
ICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKFsnLS1wcmludCcsICdu
b3RoaW5nJ10pCiAgICAgICAgIHByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBl
Y3RlZD1GYWxzZSwgZXhwX3N0cj0nJywKQEAgLTM0MCw3ICszMTgsNyBAQCBjbGFzcyAgVGVzdHBy
aW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBlcnIucmVzZXQoKQogICAgICAgICBv
dXQucmVzZXQoKQogICAgICAgICBwcmludGVyLnByaW50X3Byb2dyZXNzKHJzLCBUcnVlLCB0ZXN0
X2ZpbGVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5nZXQoKSwgWycnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0KCksIFtdKQogICAgICAgICBzZWxmLmFzc2VydFRy
dWUob3V0LmVtcHR5KCkpCiAKICAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9w
cmludGVyKApAQCAtMzY5LDcgKzM0Nyw3IEBAIGNsYXNzICBUZXN0cHJpbnRlcih1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIGVyci5yZXNldCgpCiAgICAgICAgIG91dC5yZXNldCgpCiAgICAg
ICAgIHByaW50ZXIucHJpbnRfcHJvZ3Jlc3MocnMsIFRydWUsIHRlc3RfZmlsZXMpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldCgpLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGVyci5nZXQoKSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkK
IAogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5k
ZXggNzdmZGE3MmViOTZmYmQ1ZjJmNjRjNDBjY2UyYzAxMmI5NGEyNjE5Ny4uODg3NTFhMDk3ODU0
OGE4NmQ2ODMzYmE0ZWExZWExYmQ1OWU2ZjM0NyAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5
CkBAIC02NzEsNyArNjcxLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKICAg
ICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
cyhmaWxlX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdXBkYXRlKCJBbGwgdGhyZWFkcyBzdGFydGVkIC4uLiIpCiAKICAgICAgICAgIyBX
YWl0IGZvciB0aGUgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGNvbGxlY3QgdGVzdCBmYWlsdXJlcy4K
ICAgICAgICAgZmFpbHVyZXMgPSB7fQpAQCAtMTEzMSw2ICsxMTMxLDcgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1
bW1hcnksCiAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5XT05URklYLAogICAgICAgICAg
ICAgIlRlc3RzIHRoYXQgd2lsbCBvbmx5IGJlIGZpeGVkIGlmIHRoZXkgY3Jhc2ggKFdPTlRGSVgp
IikKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9hY3R1YWwoIiIpCiAKICAgICBkZWYgX3By
aW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCB0aW1lbGluZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRpbmcpOgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggZGZlNjkxZTBlNDI4YzM5NWE1
ZjQxOWQ0MTQ2MDAwZGE5MzdhNWE4OC4uY2Q3MmZhMzY2ZTI0MTdmYjI2NGQwMzdmYjlkZmFiMzdj
ZmRhNzI3MyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBA
IC0zMywzNSArMzMsMTMgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QK
IAorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGlt
cG9ydCBydW5fd2Via2l0X3Rlc3RzCiAKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGlt
cG9ydCBNb2NrCiAKIAotY2xhc3MgQXJyYXlTdHJlYW0ob2JqZWN0KToKLSAgICBkZWYgX19pbml0
X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbnRlbnRzID0gW10KLQotICAgIGRlZiB3cml0ZShz
ZWxmLCBtc2cpOgotICAgICAgICBzZWxmLl9jb250ZW50cy5hcHBlbmQobXNnKQotCi0gICAgZGVm
IGdldChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRzCi0KLSAgICBkZWYgcmVz
ZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbnRlbnRzID0gW10KLQotICAgIGRlZiBlbXB0eShz
ZWxmKToKLSAgICAgICAgcmV0dXJuIChsZW4oc2VsZi5fY29udGVudHMpID09IDApCi0KLSAgICBk
ZWYgZmx1c2goc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToK
LSAgICAgICAgcmV0dXJuICc8QXJyYXlTdHJlYW06ICcgKyBzdHIoc2VsZi5fY29udGVudHMpICsg
Jz4nCi0KLQogZGVmIHBhc3NpbmdfcnVuKGFyZ3MsIHBvcnRfb2JqPU5vbmUsIGxvZ2dpbmdfaW5j
bHVkZWQ9RmFsc2UpOgogICAgIGlmIG5vdCBsb2dnaW5nX2luY2x1ZGVkOgogICAgICAgICBhcmdz
LmV4dGVuZChbJy0tcHJpbnQnLCAnbm90aGluZyddKQpAQCAtNzQsOCArNTIsOCBAQCBkZWYgcGFz
c2luZ19ydW4oYXJncywgcG9ydF9vYmo9Tm9uZSwgbG9nZ2luZ19pbmNsdWRlZD1GYWxzZSk6CiBk
ZWYgbG9nZ2luZ19ydW4oYXJncyk6CiAgICAgb3B0aW9ucywgYXJncyA9IHJ1bl93ZWJraXRfdGVz
dHMucGFyc2VfYXJncyhhcmdzKQogICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0
Zm9ybSwgb3B0aW9ucykKLSAgICBidWlsZGJvdF9vdXRwdXQgPSBBcnJheVN0cmVhbSgpCi0gICAg
cmVndWxhcl9vdXRwdXQgPSBBcnJheVN0cmVhbSgpCisgICAgYnVpbGRib3Rfb3V0cHV0ID0gYXJy
YXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKKyAgICByZWd1bGFyX291dHB1dCA9IGFycmF5X3N0cmVh
bS5BcnJheVN0cmVhbSgpCiAgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmos
IG9wdGlvbnMsIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRib3Rf
b3V0cHV0PWJ1aWxkYm90X291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWd1bGFyX291dHB1dD1yZWd1bGFyX291dHB1dCkKQEAgLTEwMCwxMyArNzgsMTMgQEAgY2xhc3Mg
TWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAocmVzLCBidWlsZGJvdF9vdXRw
dXQsIHJlZ3VsYXJfb3V0cHV0KSA9IGxvZ2dpbmdfcnVuKAogICAgICAgICAgICAgIFsnLS1wbGF0
Zm9ybScsICd0ZXN0JywgJy0tcHJpbnQnLCAnY29uZmlnJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywK
ICAgICAgICAgICAgICAgJzEnLCAnZmFzdC9odG1sJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgnUnVubmluZyBvbmUgRHVtcFJlbmRlclRyZWVcbicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KCdSdW5uaW5nIG9uZSBEdW1wUmVuZGVyVHJlZScKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IHJlZ3VsYXJfb3V0cHV0LmdldCgpKQogCiAgICAgICAgIChyZXMsIGJ1aWxkYm90X291dHB1dCwg
cmVndWxhcl9vdXRwdXQpID0gbG9nZ2luZ19ydW4oCiAgICAgICAgICAgICAgWyctLXBsYXRmb3Jt
JywgJ3Rlc3QnLCAnLS1wcmludCcsICdjb25maWcnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLAogICAg
ICAgICAgICAgICAnMicsICdmYXN0L2h0bWwnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdS
dW5uaW5nIDIgRHVtcFJlbmRlclRyZWVzIGluIHBhcmFsbGVsXG4nCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSgnUnVubmluZyAyIER1bXBSZW5kZXJUcmVlcyBpbiBwYXJhbGxlbCcKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIHJlZ3VsYXJfb3V0cHV0LmdldCgpKQogCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>