<?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>64225</bug_id>
          
          <creation_ts>2011-07-08 18:47:56 -0700</creation_ts>
          <short_desc>nrwt: linting fixes</short_desc>
          <delta_ts>2011-07-11 17:10:27 -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>PC</rep_platform>
          <op_sys>All</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>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>434441</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-08 18:47:56 -0700</bug_when>
    <thetext>nrwt: linting fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434454</commentid>
    <comment_count>1</comment_count>
      <attachid>100201</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-08 19:21:38 -0700</bug_when>
    <thetext>Created attachment 100201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434471</commentid>
    <comment_count>2</comment_count>
      <attachid>100201</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-09 03:37:43 -0700</bug_when>
    <thetext>Comment on attachment 100201
Patch

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

Looks good.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:225
&gt;          self.msg = reason

We should have probably just passed reason as msg to the constructor.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:757
&gt; +        for _ in xrange(num_workers):
&gt;              manager_connection.post_message(&apos;stop&apos;)

Huh?  Why do we post the same message num_workers times?  Does that guarentee that each gets the message?  I assume &quot;stop&quot; is the last mesage any worker will grab?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:-127
&gt; -        raise NotImplementedError

Yay!  Throwing NotImplemented from a constructor seems wrong to me. :)  I&apos;m glad pylint agrees.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:55
&gt; +        self._filesystem = None

Huh?  It&apos;s passed a filesystem later?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:70
&gt;          This routine exists so that the mixin can be created and then marshaled
&gt;          across into a child process.&quot;&quot;&quot;
&gt;          self._port = port
&gt; -        self._filesystem = port._filesystem
&gt; +        self._filesystem = port.filesystem

I&apos;m very confused by the existance of this safe_init method.  This smells wrong.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:239
&gt; -        result = getattr(thread, &apos;result&apos;, None)
&gt; +        result = thread.result

Die evil get/has/setattr calls! Die, die!

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:196
&gt; +            _ = self._executive.run_command([&apos;ruby&apos;, &apos;--version&apos;])

Um.  Just remove the _= :)

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:218
&gt; +            _ = self._executive.run_command([self._path_to_wdiff(), &apos;--help&apos;])

Same here.

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:275
&gt; +        def to_raw_bytes(string_value):
&gt; +            if isinstance(string_value, unicode):
&gt; +                return string_value.encode(&apos;utf-8&apos;)
&gt; +            return string_value

Ick.  This smells wrong too.  We should know what type of data we&apos;re passing around...

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:525
&gt; +    def skipped_layout_tests(self):
&gt; +        return []

I wonder what prompted this addition.

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:951
&gt; -        for system in self.all_systems():
&gt; +        for version, architecture in self.all_systems():

much nicer!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434496</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-09 10:18:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 100201 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100201&amp;action=review
&gt; 
&gt; Looks good.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:225
&gt; &gt;          self.msg = reason
&gt; 
&gt; We should have probably just passed reason as msg to the constructor.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:757
&gt; &gt; +        for _ in xrange(num_workers):
&gt; &gt;              manager_connection.post_message(&apos;stop&apos;)
&gt; 
&gt; Huh?  Why do we post the same message num_workers times?  Does that guarentee that each gets the message?  I assume &quot;stop&quot; is the last mesage any worker will grab?
&gt;

Yes, each worker needs a message. When the worker receives that message, it exits the message loop (and the run() method of the thread/process).
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:-127
&gt; &gt; -        raise NotImplementedError
&gt; 
&gt; Yay!  Throwing NotImplemented from a constructor seems wrong to me. :)  I&apos;m glad pylint agrees.
&gt; 

Admittedly it feels a little weird to me, but I couldn&apos;t think of a better way to make the class be pure virtual. I guess that Python/pylint doesn&apos;t even want me to try :).

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:55
&gt; &gt; +        self._filesystem = None
&gt; 
&gt; Huh?  It&apos;s passed a filesystem later?
&gt; 

Yes (see below).

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:70
&gt; &gt;          This routine exists so that the mixin can be created and then marshaled
&gt; &gt;          across into a child process.&quot;&quot;&quot;
&gt; &gt;          self._port = port
&gt; &gt; -        self._filesystem = port._filesystem
&gt; &gt; +        self._filesystem = port.filesystem
&gt; 
&gt; I&apos;m very confused by the existance of this safe_init method.  This smells wrong.
&gt;

This has to do with the way objects are passed across the process boundaries between master and worker processes. The object must be Picklable, and some of the things in the Port and filesystem objects can&apos;t be; this means that we have to re-create some of the objects in the subprocess (which then leads to the port.real_name() method that Adam noticed a week ago).

So, we can only partially initialize the object in the constructor (which is called in the master process), which is then pickled, sent to the child process, and unpickled there, where we then provide the rest of the parameters the worker needs in safe_init() [which, admittedly, isn&apos;t a great name].
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:239
&gt; &gt; -        result = getattr(thread, &apos;result&apos;, None)
&gt; &gt; +        result = thread.result
&gt; 
&gt; Die evil get/has/setattr calls! Die, die!
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:196
&gt; &gt; +            _ = self._executive.run_command([&apos;ruby&apos;, &apos;--version&apos;])
&gt; 
&gt; Um.  Just remove the _= :)
&gt; 

I wonder if pylint would then complain that we were ignoring the return value. I have a long-standing habit of doing things like this to be (IMO) clearer that this is being intentionally ignored (left over from C/C++).

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:218
&gt; &gt; +            _ = self._executive.run_command([self._path_to_wdiff(), &apos;--help&apos;])
&gt; 
&gt; Same here.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:275
&gt; &gt; +        def to_raw_bytes(string_value):
&gt; &gt; +            if isinstance(string_value, unicode):
&gt; &gt; +                return string_value.encode(&apos;utf-8&apos;)
&gt; &gt; +            return string_value
&gt; 
&gt; Ick.  This smells wrong too.  We should know what type of data we&apos;re passing around...
&gt; 

Hm. I wonder if this is a leftover from when we were attempting to make everything unicode, and if I can just delete it.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:525
&gt; &gt; +    def skipped_layout_tests(self):
&gt; &gt; +        return []
&gt; 
&gt; I wonder what prompted this addition.
&gt;

skips_layout_tests(), right below, calls this routine, but it wasn&apos;t defined in the base class.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:951
&gt; &gt; -        for system in self.all_systems():
&gt; &gt; +        for version, architecture in self.all_systems():
&gt; 
&gt; much nicer!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434515</commentid>
    <comment_count>4</comment_count>
      <attachid>100201</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-09 12:22:20 -0700</bug_when>
    <thetext>Comment on attachment 100201
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:70
&gt;&gt;&gt; +        self._filesystem = port.filesystem
&gt;&gt; 
&gt;&gt; I&apos;m very confused by the existance of this safe_init method.  This smells wrong.
&gt; 
&gt; This has to do with the way objects are passed across the process boundaries between master and worker processes. The object must be Picklable, and some of the things in the Port and filesystem objects can&apos;t be; this means that we have to re-create some of the objects in the subprocess (which then leads to the port.real_name() method that Adam noticed a week ago).
&gt; 
&gt; So, we can only partially initialize the object in the constructor (which is called in the master process), which is then pickled, sent to the child process, and unpickled there, where we then provide the rest of the parameters the worker needs in safe_init() [which, admittedly, isn&apos;t a great name].

OK.  So I think we shuld consider renaming safe-init in a separate patch.  Some sort of construct_from_pickle?  I don&apos;t feel like I understand the design well enough to advise here.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:275
&gt;&gt; +            return string_value
&gt; 
&gt; Ick.  This smells wrong too.  We should know what type of data we&apos;re passing around...

All code should know if it&apos;s handling unicode or str (bytes in py3 iirc) objects.  If it ever doesn&apos;t know, then we&apos;re confused.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:525
&gt;&gt;&gt; +        return []
&gt;&gt; 
&gt;&gt; I wonder what prompted this addition.
&gt; 
&gt; skips_layout_tests(), right below, calls this routine, but it wasn&apos;t defined in the base class.

I see.  So it doesn&apos;t need/want to be NotImplemented since empty is the right implementation for chromium, I assume?  (Which reminds me, eventually Chromium should be a subclass of WebKit and base.port will die... but that&apos;s a long ways off)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435317</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-11 17:04:45 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 100201 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100201&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:70
&gt; &gt;&gt;&gt; +        self._filesystem = port.filesystem
&gt; &gt;&gt; 
&gt; &gt;&gt; I&apos;m very confused by the existance of this safe_init method.  This smells wrong.
&gt; &gt; 
&gt; &gt; This has to do with the way objects are passed across the process boundaries between master and worker processes. The object must be Picklable, and some of the things in the Port and filesystem objects can&apos;t be; this means that we have to re-create some of the objects in the subprocess (which then leads to the port.real_name() method that Adam noticed a week ago).
&gt; &gt; 
&gt; &gt; So, we can only partially initialize the object in the constructor (which is called in the master process), which is then pickled, sent to the child process, and unpickled there, where we then provide the rest of the parameters the worker needs in safe_init() [which, admittedly, isn&apos;t a great name].
&gt; 
&gt; OK.  So I think we shuld consider renaming safe-init in a separate patch.  Some sort of construct_from_pickle?  I don&apos;t feel like I understand the design well enough to advise here.
&gt; 

That&apos;s up to you ... 

&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:275
&gt; &gt;&gt; +            return string_value
&gt; &gt; 
&gt; &gt; Ick.  This smells wrong too.  We should know what type of data we&apos;re passing around...
&gt; 
&gt; All code should know if it&apos;s handling unicode or str (bytes in py3 iirc) objects.  If it ever doesn&apos;t know, then we&apos;re confused.
&gt; 

Agreed.

&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:525
&gt; &gt;&gt;&gt; +        return []
&gt; &gt;&gt; 
&gt; &gt;&gt; I wonder what prompted this addition.
&gt; &gt; 
&gt; &gt; skips_layout_tests(), right below, calls this routine, but it wasn&apos;t defined in the base class.
&gt; 
&gt; I see.  So it doesn&apos;t need/want to be NotImplemented since empty is the right implementation for chromium, I assume?  (Which reminds me, eventually Chromium should be a subclass of WebKit and base.port will die... but that&apos;s a long ways off)

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435322</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-11 17:10:27 -0700</bug_when>
    <thetext>Committed r90796: &lt;http://trac.webkit.org/changeset/90796&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100201</attachid>
            <date>2011-07-08 19:21:38 -0700</date>
            <delta_ts>2011-07-09 12:22:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64225-20110708192137.patch</filename>
            <type>text/plain</type>
            <size>32759</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2NjUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmZTM2YTBlNzZmODlmNDQyNDBjYWY0ZWI3MmUzNDE2MGQw
OGRmYmEwLi44NDQ0ZjEyYTMzNTkyOTExN2NiZjM0OTg2MWU3M2MwZDE4NDk0MWM4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTEtMDctMDggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgbnJ3dDogbGludGluZyBmaXhlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjQyMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNaXNjZWxsYW5lb3VzIGxpbnRpbmcgZml4ZXMuIFRoZSBtb3N0IG5v
dGFibGUgY2hhbmdlIGlzIHRoYXQKKyAgICAgICAgd2UgYWRkIHB1YmxpYyBhdHRyaWJ1dGVzIGZv
ciB1c2VyLCBleGVjdXRpdmUsIGZpbGVzeXN0ZW0sIGFuZAorICAgICAgICBvcHRpb25zIG9uIHRo
ZSBQb3J0IG9iamVjdCwgc28gd2UgZG9uJ3QgaGF2ZSB0byByZWZlciB0byB0aGUKKyAgICAgICAg
InByb3RlY3RlZCIgdmVyc2lvbnMgYWxsIG92ZXIgdGhlIHBsYWNlIi4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93
b3JrZXJfYnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2Uu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0cy5weToKKwogMjAxMS0wNy0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFRlc3RSZXN1bHRzU2VydmVyIHNob3VsZCBrZWVwIG9sZCB0ZXN0IHJlc3VsdHMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IGM3MjdjMDM4MWE5MWM1ZTkyNDNkNTc4YWVmMmYzZTBm
MjRjOGZiZDcuLmViODNkMzIzMmE4NGM4MjRmOThhYjBmOTZlZWE1NjBlYjdiMDAzMTIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21h
bmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlci5weQpAQCAtMzcsNyArMzcsNiBAQCBjcmVhdGUgYSBmaW5hbCByZXBvcnQu
CiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIAotaW1wb3J0IGNvcHkK
IGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtYXRoCkBAIC01Myw3ICs1Miw2
IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtYW5hZ2Vy
X3dvcmtlcl9icm9rZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGlt
cG9ydCB3b3JrZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvcgogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHNf
dXBsb2FkZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9l
eHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVz
dF9mYWlsdXJlcwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0
X3Jlc3VsdHMKQEAgLTYxLDcgKzU5LDYgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9k
ZWxzLnRlc3RfaW5wdXQgaW1wb3J0IFRlc3RJbnB1dAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubW9kZWxzLnJlc3VsdF9zdW1tYXJ5IGltcG9ydCBSZXN1bHRTdW1tYXJ5CiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgcHJpbnRpbmcKIAotZnJvbSB3ZWJraXRweS50
aGlyZHBhcnR5IGltcG9ydCBzaW1wbGVqc29uCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdy
YW1tYXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMjIzLDYgKzIy
MCw3IEBAIGRlZiBzdW1tYXJpemVfcmVzdWx0cyhwb3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1
bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSwgdGVzCiBjbGFzcyBUZXN0UnVuSW50ZXJydXB0ZWRF
eGNlcHRpb24oRXhjZXB0aW9uKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIHRlc3QgcnVuIHNob3Vs
ZCBiZSBzdG9wcGVkIGltbWVkaWF0ZWx5LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFz
b24pOgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZikKICAgICAgICAgc2VsZi5yZWFz
b24gPSByZWFzb24KICAgICAgICAgc2VsZi5tc2cgPSByZWFzb24KIApAQCAtMjY5LDEwICsyNjcs
MTEgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAgIHByaW50ZXI6IGEgUHJpbnRl
ciBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCiAgICAgICAgICIiIgogICAgICAgICBzZWxm
Ll9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLl9mcyA9IHBvcnQuX2ZpbGVzeXN0ZW0KKyAgICAg
ICAgc2VsZi5fZnMgPSBwb3J0LmZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9w
dGlvbnMKICAgICAgICAgc2VsZi5fcHJpbnRlciA9IHByaW50ZXIKICAgICAgICAgc2VsZi5fbWVz
c2FnZV9icm9rZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IE5vbmUKIAog
ICAgICAgICBzZWxmLkhUVFBfU1VCRElSID0gcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SICsgJ2h0
dHAnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCiAgICAgICAgIHNlbGYuV0VCU09DS0VUX1NV
QkRJUiA9IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUiArICd3ZWJzb2NrZXQnICsgcG9ydC5URVNU
X1BBVEhfU0VQQVJBVE9SCkBAIC0zMjIsNyArMzIxLDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3Qp
OgogICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZ
ICsgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SKToKICAgICAgICAgICAgIHJldHVybiBw
YXRoW2xlbihzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgKyBzZWxmLl9wb3J0LlRFU1RfUEFU
SF9TRVBBUkFUT1IpOl0KICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKHNlbGYuTEFZT1VUX1RF
U1RTX0RJUkVDVE9SWSArIHNlbGYuX2ZzLnNlcCk6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aFts
ZW4oc2VsZi5MQVlPVVRfVEVTVF9ESVJFQ1RPUlkgKyBzZWxmLl9mcy5zZXApOl0KKyAgICAgICAg
ICAgIHJldHVybiBwYXRoW2xlbihzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgKyBzZWxmLl9m
cy5zZXApOl0KICAgICAgICAgcmV0dXJuIHBhdGgKIAogICAgIGRlZiBsaW50KHNlbGYpOgpAQCAt
NDA4LDcgKzQwNyw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICBh
c3NlcnQoY2h1bmtfbnVtID49IDApCiAgICAgICAgICAgICAgICAgdGVzdF9zaXplID0gaW50KGNo
dW5rX2xlbikKICAgICAgICAgICAgICAgICBhc3NlcnQodGVzdF9zaXplID4gMCkKLSAgICAgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKICAgICAgICAg
ICAgICAgICBfbG9nLmNyaXRpY2FsKCJpbnZhbGlkIGNodW5rICclcyciICUgY2h1bmtfdmFsdWUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKIApAQCAtNzU0LDE1ICs3NTMsMTUgQEAgY2xh
c3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAjIGFyZSBzZW50IGFmdGVyIGFsbCBvZiB0aGUg
dGVzdHMsIGFuZCBiZWNhdXNlIGVhY2ggd29ya2VyIHdpbGwgc3RvcAogICAgICAgICAjIHJlYWRp
bmcgbWVzc3NhZ2VzIGFmdGVyIHJlY2VpdmluZyBhIHN0b3AsIHdlIGNhbiBiZSBzdXJlIGVhY2gK
ICAgICAgICAgIyB3b3JrZXIgd2lsbCBnZXQgYSBzdG9wIG1lc3NhZ2UgYW5kIGhlbmNlIHRoZXkg
d2lsbCBhbGwgc2h1dCBkb3duLgotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMp
OgorICAgICAgICBmb3IgXyBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgogICAgICAgICAgICAgbWFu
YWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RvcCcpCiAKICAgICAgICAgdHJ5OgogICAg
ICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfZG9uZSgpOgogICAgICAgICAgICAgICAgICMgVGVt
cG9yYXJpbHkgZGlzYWJsZWQgdG8gc2VlIGhvdyB0aGlzIGNvZGUgZWZmZWN0IHBlcmZvcm1hbmNl
IG9uIHRoZSBidWlsZGJvdHMuCi0gICAgICAgICAgICAgICAgIyBpZiBzZWxmLl9wb3J0LmV4ZWN1
dGl2ZSgpLnJ1bm5pbmdfcGlkcyhzZWxmLl9wb3J0LmlzX2NyYXNoX3JlcG9ydGVyKToKKyAgICAg
ICAgICAgICAgICAjIGlmIHNlbGYuX3BvcnQuZXhlY3V0aXZlLnJ1bm5pbmdfcGlkcyhzZWxmLl9w
b3J0LmlzX2NyYXNoX3JlcG9ydGVyKToKICAgICAgICAgICAgICAgICAjICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgiV2FpdGluZyBmb3IgY3Jhc2ggcmVwb3J0ZXIgLi4uIikKLSAgICAg
ICAgICAgICAgICAjICAgICBzZWxmLl9wb3J0LmV4ZWN1dGl2ZSgpLndhaXRfbmV3ZXN0KHNlbGYu
X3BvcnQuaXNfY3Jhc2hfcmVwb3J0ZXIpCisgICAgICAgICAgICAgICAgIyAgICAgc2VsZi5fcG9y
dC5leGVjdXRpdmUud2FpdF9uZXdlc3Qoc2VsZi5fcG9ydC5pc19jcmFzaF9yZXBvcnRlcikKICAg
ICAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcChkZWxheV9z
ZWNzPTEuMCkKIAogICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIG9mIHRoZSB3b3JrZXJzIGhh
dmUgc2h1dCBkb3duIChpZiBwb3NzaWJsZSkuCkBAIC0xMDkxLDcgKzEwOTAsNyBAQCBjbGFzcyBN
YW5hZ2VyKG9iamVjdCk6CiAKICAgICAgICAgZ2VuZXJhdG9yLnVwbG9hZF9qc29uX2ZpbGVzKGpz
b25fZmlsZXMpCiAKLSAgICBkZWYgX3ByaW50X2NvbmZpZyhzZWxmKToKKyAgICBkZWYgcHJpbnRf
Y29uZmlnKHNlbGYpOgogICAgICAgICAiIiJQcmludHMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRo
ZSB0ZXN0IHJ1bi4iIiIKICAgICAgICAgcCA9IHNlbGYuX3ByaW50ZXIKICAgICAgICAgcC5wcmlu
dF9jb25maWcoIlVzaW5nIHBvcnQgJyVzJyIgJSBzZWxmLl9wb3J0Lm5hbWUoKSkKQEAgLTEyOTEs
OCArMTI5MCw4IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgICAgICBtZWFuID0gc3Vt
KHRpbWluZ3MpIC8gbnVtX3Rlc3RzCiAKLSAgICAgICAgZm9yIHRpbWUgaW4gdGltaW5nczoKLSAg
ICAgICAgICAgIHN1bV9vZl9kZXZpYXRpb25zID0gbWF0aC5wb3codGltZSAtIG1lYW4sIDIpCisg
ICAgICAgIGZvciB0aW1pbmcgaW4gdGltaW5nczoKKyAgICAgICAgICAgIHN1bV9vZl9kZXZpYXRp
b25zID0gbWF0aC5wb3codGltaW5nIC0gbWVhbiwgMikKIAogICAgICAgICBzdGRfZGV2aWF0aW9u
ID0gbWF0aC5zcXJ0KHN1bV9vZl9kZXZpYXRpb25zIC8gbnVtX3Rlc3RzKQogICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3RpbWluZygiICBNZWRpYW46ICAgICAgICAgICU2LjNmIiAlIG1lZGlh
bikKQEAgLTE0MzcsNyArMTQzNiw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAg
c2VsZi5fdXBkYXRlX3N1bW1hcnlfd2l0aF9yZXN1bHQoc2VsZi5fY3VycmVudF9yZXN1bHRfc3Vt
bWFyeSwgcmVzdWx0KQogCiAgICAgZGVmIF9sb2dfd29ya2VyX3N0YWNrKHNlbGYsIHN0YWNrKToK
LSAgICAgICAgd2Via2l0cHlkaXIgPSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
VG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScpICsgc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5z
ZXAKKyAgICAgICAgd2Via2l0cHlkaXIgPSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFz
ZSgnVG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScpICsgc2VsZi5fcG9ydC5maWxlc3lzdGVt
LnNlcAogICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9uYW1lLCB0
ZXh0IGluIHN0YWNrOgogICAgICAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCh3ZWJraXRw
eWRpcik6CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKHdlYmtp
dHB5ZGlyLCAnJykKQEAgLTE0NDUsMTMgKzE0NDQsMTMgQEAgY2xhc3MgTWFuYWdlcihvYmplY3Qp
OgogICAgICAgICAgICAgX2xvZy5lcnJvcignICAgICVzJyAlIHRleHQpCiAKIAotZGVmIHJlYWRf
dGVzdF9maWxlcyhmcywgZmlsZXMsIHRlc3RfcGF0aF9zZXBhcmF0b3IpOgorZGVmIHJlYWRfdGVz
dF9maWxlcyhmcywgZmlsZW5hbWVzLCB0ZXN0X3BhdGhfc2VwYXJhdG9yKToKICAgICB0ZXN0cyA9
IFtdCi0gICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1l
czoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgdGVzdF9wYXRoX3NlcGFyYXRvciAhPSBm
cy5zZXA6Ci0gICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSh0ZXN0X3BhdGhfc2Vw
YXJhdG9yLCBmcy5zZXApCi0gICAgICAgICAgICBmaWxlX2NvbnRlbnRzID0gZnMucmVhZF90ZXh0
X2ZpbGUoZmlsZSkuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVu
YW1lLnJlcGxhY2UodGVzdF9wYXRoX3NlcGFyYXRvciwgZnMuc2VwKQorICAgICAgICAgICAgZmls
ZV9jb250ZW50cyA9IGZzLnJlYWRfdGV4dF9maWxlKGZpbGVuYW1lKS5zcGxpdCgnXG4nKQogICAg
ICAgICAgICAgZm9yIGxpbmUgaW4gZmlsZV9jb250ZW50czoKICAgICAgICAgICAgICAgICBsaW5l
ID0gdGVzdF9leHBlY3RhdGlvbnMuc3RyaXBfY29tbWVudHMobGluZSkKICAgICAgICAgICAgICAg
ICBpZiBsaW5lOgpAQCAtMTQ4OCw3ICsxNDg3LDcgQEAgZGVmIG5hdHVyYWxfc29ydF9rZXkoc3Ry
aW5nX3RvX3NwbGl0KToKICAgICBkZWYgdHJ5aW50KHZhbCk6CiAgICAgICAgIHRyeToKICAgICAg
ICAgICAgIHJldHVybiBpbnQodmFsKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuIHZhbAogCiAgICAgcmV0dXJuIFt0cnlpbnQo
Y2h1bmspIGZvciBjaHVuayBpbiByZS5zcGxpdCgnKFxkKyknLCBzdHJpbmdfdG9fc3BsaXQpXQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CmluZGV4IDQ2OTIz
N2JjYzhiNjczZDZmNjE1NmE2YWE4ZDkwZTc1ZDQ4MDQ4ZmQuLjkwZjdkYzJkZmE4NTU5OTY3ZTQ1
Yzc0ZDZiZDE0YzM2OTVmYjk3ZGQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dv
cmtlcl9icm9rZXIucHkKQEAgLTQ1LDkgKzQ1LDYgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBv
cHRwYXJzZQogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCi1pbXBvcnQgdGhyZWFkCi1pbXBvcnQg
dGhyZWFkaW5nCi1pbXBvcnQgdGltZQogCiAjIEhhbmRsZSBQeXRob24gPCAyLjYgd2hlcmUgbXVs
dGlwcm9jZXNzaW5nIGlzbid0IGF2YWlsYWJsZS4KIHRyeToKQEAgLTU1LDggKzUyLDcgQEAgdHJ5
OgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IE5vbmUKIAotZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFja191dGlscwotZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHkgaW1wb3J0IGxheW91dF90
ZXN0cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1lc3Nh
Z2VfYnJva2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgcHJpbnRp
bmcKIApAQCAtMTExLDcgKzEwNyw3IEBAIGRlZiBnZXQocG9ydCwgb3B0aW9ucywgY2xpZW50LCB3
b3JrZXJfY2xhc3MpOgogCiAKIGNsYXNzIEFic3RyYWN0V29ya2VyKG1lc3NhZ2VfYnJva2VyLkJy
b2tlckNsaWVudCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlcl9jb25uZWN0aW9uLCB3
b3JrZXJfbnVtYmVyLCBvcHRpb25zKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nv
bm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMpOgogICAgICAgICAiIiJUaGUgY29uc3Ry
dWN0b3Igc2hvdWxkIGJlIHVzZWQgdG8gZG8gYW55IHNpbXBsZSBpbml0aWFsaXphdGlvbgogICAg
ICAgICBuZWNlc3NhcnksIGJ1dCBzaG91bGQgbm90IGRvIGFueXRoaW5nIHRoYXQgY3JlYXRlcyBk
YXRhIHN0cnVjdHVyZXMKICAgICAgICAgdGhhdCBjYW5ub3QgYmUgUGlja2xlZCBvciBzZW50IGFj
cm9zcyBwcm9jZXNzZXMgKGxpa2Ugb3BlbmluZwpAQCAtMTE5LDEyICsxMTUsMTUgQEAgY2xhc3Mg
QWJzdHJhY3RXb3JrZXIobWVzc2FnZV9icm9rZXIuQnJva2VyQ2xpZW50KToKICAgICAgICAgc3Rh
cnQgb2YgdGhlIHJ1bigpIGNhbGwuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGJyb2tl
cl9jb25uZWN0aW9uIC0gaGFuZGxlIHRvIHRoZSBCcm9rZXJDb25uZWN0aW9uIG9iamVjdCBjcmVh
dGluZworICAgICAgICAgICAgd29ya2VyX2Nvbm5lY3Rpb24gLSBoYW5kbGUgdG8gdGhlIEJyb2tl
ckNvbm5lY3Rpb24gb2JqZWN0IGNyZWF0aW5nCiAgICAgICAgICAgICAgICAgdGhlIHdvcmtlciBh
bmQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbWVzc2FnaW5nLgogICAgICAgICAgICAgd29ya2VyX251
bWJlciAtIGlkZW50aWZpZXIgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrZXIKICAgICAgICAgICAg
IG9wdGlvbnMgLSBjb21tYW5kLWxpbmUgYXJndW1lbnQgb2JqZWN0IGZyb20gb3B0cGFyc2UiIiIK
LQotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIG1lc3NhZ2VfYnJv
a2VyLkJyb2tlckNsaWVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfY29u
bmVjdGlvbiA9IHdvcmtlcl9jb25uZWN0aW9uCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRp
b25zCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAg
IHNlbGYuX25hbWUgPSAnd29ya2VyLyVkJyAlIHdvcmtlcl9udW1iZXIKIAogICAgIGRlZiBydW4o
c2VsZiwgcG9ydCk6CiAgICAgICAgICIiIkNhbGxiYWNrIGZvciB0aGUgd29ya2VyIHRvIHN0YXJ0
IGV4ZWN1dGluZy4gVHlwaWNhbGx5IGRvZXMgYW55CkBAIC0yMTMsNyArMjEyLDcgQEAgY2xhc3Mg
X1dvcmtlckNvbm5lY3Rpb24obWVzc2FnZV9icm9rZXIuQnJva2VyQ29ubmVjdGlvbik6CiAKIGNs
YXNzIF9JbmxpbmVXb3JrZXJDb25uZWN0aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKICAgICBkZWYg
X19pbml0X18oc2VsZiwgYnJva2VyLCBwb3J0LCBtYW5hZ2VyX2NsaWVudCwgd29ya2VyX2NsYXNz
LCB3b3JrZXJfbnVtYmVyKToKLSAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2Vs
ZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsIHBvcnQuX29wdGlvbnMpCisg
ICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2Ns
YXNzLCB3b3JrZXJfbnVtYmVyLCBwb3J0Lm9wdGlvbnMpCiAgICAgICAgIHNlbGYuX2FsaXZlID0g
RmFsc2UKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fbWFuYWdlcl9j
bGllbnQgPSBtYW5hZ2VyX2NsaWVudApAQCAtMjQ4LDcgKzI0Nyw3IEBAIGlmIG11bHRpcHJvY2Vz
c2luZzoKIAogICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICAgb3B0aW9ucyA9IHNl
bGYuX29wdGlvbnMKLSAgICAgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQoc2VsZi5fcGxhdGZv
cm1fbmFtZSwgb3B0aW9ucykKKyAgICAgICAgICAgIHBvcnRfb2JqID0gbGF5b3V0X3Rlc3RzLnBv
cnQuZ2V0KHNlbGYuX3BsYXRmb3JtX25hbWUsIG9wdGlvbnMpCiAKICAgICAgICAgICAgICMgVGhl
IHVuaXggbXVsdGlwcm9jZXNzaW5nIGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUKICAgICAgICAg
ICAgICMgbG9nIGhhbmRsZXIgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzZXMs
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tZXNzYWdlX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5CmluZGV4IGVjM2M5NzAxYjk5OGVmZDJj
NzNlNzI5YzBhYzdhYzIwYjBjMmI5NGIuLjhiYjFlZmNhYzJkNGUwMWE0N2YzZTM1MmY4MzY0YWU4
MGQxMjJmOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyLnB5CkBAIC02MSw3ICs2
MSw2IEBAIEJyb2tlckNvbm5lY3Rpb24pLgogaW1wb3J0IGNQaWNrbGUKIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgUXVldWUKLWltcG9ydCB0aW1lCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KF9fbmFtZV9fKQpAQCAtNzgsOSArNzcsNiBAQCBjbGFzcyBCcm9rZXJDbGllbnQob2JqZWN0KToK
ICAgICBzcmMgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIuIElmIHRoZSBtZXNzYWdl
IGNvbnRhaW5zIHZhbHVlcyBpbgogICAgIHRoZSBtZXNzYWdlIGJvZHksIHRob3NlIHdpbGwgYmUg
cHJvdmlkZWQgYXMgb3B0cGFyYW1zLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICpvcHRh
cmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQogICAg
IGRlZiBpc19kb25lKHNlbGYpOgogICAgICAgICAiIiJDYWxsZWQgZnJvbSBpbnNpZGUgcnVuX21l
c3NhZ2VfbG9vcCgpIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gZXhpdC4iIiIKICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgpAQCAtMTUzLDggKzE0OSw4IEBAIGNsYXNzIEJyb2tlcihv
YmplY3QpOgogCiBjbGFzcyBfTWVzc2FnZShvYmplY3QpOgogICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgbG9hZHMoc3RyKToKLSAgICAgICAgb2JqID0gY1BpY2tsZS5sb2FkcyhzdHIpCisgICAg
ZGVmIGxvYWRzKHN0cmluZ192YWx1ZSk6CisgICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3Ry
aW5nX3ZhbHVlKQogICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNzYWdlKSkKICAg
ICAgICAgcmV0dXJuIG9iagogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2Vy
X3VuaXR0ZXN0LnB5CmluZGV4IDYxODQ3MjVmZDU5OTRlYzUyN2ExZDBmMTcyOTM4NjU2NTBjNmI0
ZmIuLmNiOGQ4ZTZmOTdhNmUxM2IxN2UxYmRhMTg2YjdjZDgwYjdjMjQ1NjcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21lc3NhZ2Vf
YnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC02NSwxNiArNjUs
OSBAQCBjbGFzcyBJbnRlcmZhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIHRoYXQg
Y2xhc3NlcyBkbyBpbXBsZW1lbnQgZXZlcnkgYWJzdHJhY3QgbWV0aG9kIGluIGFuIGludGVyZmFj
ZS4KIAogICAgIGRlZiB0ZXN0X2Jyb2tlcmNsaWVudF9pc19hYnN0cmFjdChzZWxmKToKLSAgICAg
ICAgIyBUZXN0IHRoYXQgd2UgY2FuJ3QgY3JlYXRlIGFuIGluc3RhbmNlIGRpcmVjdGx5LgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtZXNzYWdlX2Jyb2tl
ci5Ccm9rZXJDbGllbnQpCi0KLSAgICAgICAgY2xhc3MgVGVzdENsaWVudChtZXNzYWdlX2Jyb2tl
ci5Ccm9rZXJDbGllbnQpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAg
ICAgICAgICAgIHBhc3MKLQogICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3Mg
bWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCiAgICAgICAgICMgc2lnbmF0dXJlIHdl
IGV4cGVjdC4KLSAgICAgICAgb2JqID0gVGVzdENsaWVudCgpCisgICAgICAgIG9iaiA9IG1lc3Nh
Z2VfYnJva2VyLkJyb2tlckNsaWVudCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdElt
cGxlbWVudGVkRXJyb3IsIG9iai5pc19kb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhO
b3RJbXBsZW1lbnRlZEVycm9yLCBvYmoubmFtZSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5CmluZGV4IDY4
MjA3YTJiODdhZjIxZWE0ZGIyYTFhYTRlODk0Y2IyZThmNjg5YTQuLjFkNDM2ZjMzMGMxZmI2ZmNl
NjQwNjVkYTI2OWUxMzZlYWJmZWExZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkKQEAgLTQ2LDEzICs0
NiwxNiBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIGNsYXNzIFdvcmtl
cihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlciwgb3B0aW9ucyk6Ci0gICAg
ICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KLSAgICAgICAg
c2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKLSAgICAgICAgc2VsZi5fb3B0aW9u
cyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29ya2VyX251
bWJlcgorICAgICAgICBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIuX19pbml0
X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIsIG9wdGlvbnMpCiAgICAg
ICAgIHNlbGYuX2RvbmUgPSBGYWxzZQogICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCiAg
ICAgICAgIHNlbGYuX3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSAwCisg
ICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0g
Tm9uZQorICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1
bl9maWxlID0gTm9uZQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZW5hbWUgPSBOb25lCiAK
ICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5jbGVhbnVwKCkKQEAgLTY0LDEw
ICs2Nyw5IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3Jr
ZXIpOgogICAgICAgICBUaGlzIHJvdXRpbmUgZXhpc3RzIHNvIHRoYXQgdGhlIG1peGluIGNhbiBi
ZSBjcmVhdGVkIGFuZCB0aGVuIG1hcnNoYWxlZAogICAgICAgICBhY3Jvc3MgaW50byBhIGNoaWxk
IHByb2Nlc3MuIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBwb3J0Ll9maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBw
b3J0LmZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCiAgICAgICAgIHNl
bGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKLSAgICAgICAgc2VsZi5f
ZHJpdmVyID0gTm9uZQogICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lz
dGVtLmpvaW4ocG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzX3J1biVkLnR4dCIgJSBzZWxmLl93
b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IHNlbGYuX2ZpbGVz
eXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcodGVzdHNfcnVuX2ZpbGVuYW1lKQpAQCAt
MTMzLDcgKzEzNSw3IEBAIGNsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJh
Y3RXb3JrZXIpOgogICAgICAgICAjIHBhcmFsbGVsIHdpdGggUmVwb3J0Q3Jhc2guCiAgICAgICAg
ICMKICAgICAgICAgIyBUZW1wb3JhcmlseSBkaXNhYmxlZCB0byBzZWUgaG93IHRoaXMgY29kZSBl
ZmZlY3QgcGVyZm9ybWFuY2Ugb24gdGhlIGJ1aWxkYm90cy4KLSAgICAgICAgIyBzZWxmLl9wb3J0
LmV4ZWN1dGl2ZSgpLndhaXRfbmV3ZXN0KHNlbGYuX3BvcnQuaXNfY3Jhc2hfcmVwb3J0ZXIpCisg
ICAgICAgICMgc2VsZi5fcG9ydC5leGVjdXRpdmUud2FpdF9uZXdlc3Qoc2VsZi5fcG9ydC5pc19j
cmFzaF9yZXBvcnRlcikKIAogICAgICAgICB0ZXN0X3RpbWVvdXRfc2VjID0gc2VsZi50aW1lb3V0
KHRlc3RfaW5wdXQpCiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKQEAgLTE3Nyw5ICsxNzks
NyBAQCBjbGFzcyBXb3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToK
ICAgICBkZWYgcnVuX3Rlc3Rfd2l0aF90aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQp
OgogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CiAgICAgICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwgdGltZW91dCkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl90aGlz
X3RocmVhZCh0ZXN0X2lucHV0KQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQogCiAgICAgZGVmIGNs
ZWFuX3VwX2FmdGVyX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgcmVzdWx0KToKICAgICAgICAgc2Vs
Zi5fYmF0Y2hfY291bnQgKz0gMQpAQCAtMjIyLDE3ICsyMjIsMjEgQEAgY2xhc3MgV29ya2VyKG1h
bmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CiAgICAgICAgICIiIgogICAgICAg
ICB3b3JrZXIgPSBzZWxmCiAKLSAgICAgICAgZHJpdmVyID0gd29ya2VyLl9wb3J0LmNyZWF0ZV9k
cml2ZXIod29ya2VyLl93b3JrZXJfbnVtYmVyKQorICAgICAgICBkcml2ZXIgPSBzZWxmLl9wb3J0
LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAgZHJpdmVyLnN0YXJ0
KCkKIAogICAgICAgICBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgor
ICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHRocmVhZGlu
Zy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IE5v
bmUKKwogICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLnJl
c3VsdCA9IHdvcmtlci5fcnVuX3NpbmdsZV90ZXN0KGRyaXZlciwgdGVzdF9pbnB1dCkKKyAgICAg
ICAgICAgICAgICBzZWxmLnJlc3VsdCA9IHdvcmtlci5ydW5fc2luZ2xlX3Rlc3QoZHJpdmVyLCB0
ZXN0X2lucHV0KQogCiAgICAgICAgIHRocmVhZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQogICAgICAg
ICB0aHJlYWQuc3RhcnQoKQogICAgICAgICB0aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMp
Ci0gICAgICAgIHJlc3VsdCA9IGdldGF0dHIodGhyZWFkLCAncmVzdWx0JywgTm9uZSkKKyAgICAg
ICAgcmVzdWx0ID0gdGhyZWFkLnJlc3VsdAogICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgog
ICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1
bm5pbmcsIHRoZQogICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21wbGV0ZWx5IGh1
bmcgYW5kIHRoZXJlJ3Mgbm90aGluZwpAQCAtMjYxLDggKzI2NSw4IEBAIGNsYXNzIFdvcmtlciht
YW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgogICAgICAgICBpZiBub3Qgc2Vs
Zi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6CiAgICAgICAgICAg
ICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251
bWJlcikKICAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCi0gICAgICAgIHJldHVybiBz
ZWxmLl9ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQorICAgICAgICBy
ZXR1cm4gc2VsZi5ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQogCi0g
ICAgZGVmIF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZiwgZHJpdmVyLCB0ZXN0X2lucHV0KToKKyAgICBk
ZWYgcnVuX3NpbmdsZV90ZXN0KHNlbGYsIGRyaXZlciwgdGVzdF9pbnB1dCk6CiAgICAgICAgIHJl
dHVybiBzaW5nbGVfdGVzdF9ydW5uZXIucnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYu
X29wdGlvbnMsCiAgICAgICAgICAgICB0ZXN0X2lucHV0LCBkcml2ZXIsIHNlbGYuX25hbWUpCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2Uu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5k
ZXggZGZkYmIwMzM4NzY0ZTU2ZmQ3ZmZjZTJlMTgyOGU1YTJhNjVjNTcxZi4uOWM3ZGY3YWRjMDFl
MGI3ZWE3ZjU5ZjE1NWEyMGUxMWZjZDNlMDIxYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMzYsOCArMzYsNiBAQCBpbXBvcnQg
Y2dpCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IGVycm5vCiBpbXBvcnQgb3MKLWltcG9ydCBzeXMK
LWltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC50ZXN0b3V0cHV0c2V0IGlt
cG9ydCBBZ2dyZWdhdGVUZXN0T3V0cHV0U2V0CiAKQEAgLTQ4LDcgKzQ2LDYgQEAgZXhjZXB0IElt
cG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IE5vbmUKIAogZnJvbSB3ZWJraXRweS5j
b21tb24gaW1wb3J0IHN5c3RlbQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBm
aWxlc3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGxvZ3V0aWxzCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKQEAgLTYz
LDcgKzYwLDYgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgd2Vi
c29ja2V0X3NlcnZlcgogCiBfbG9nID0gbG9ndXRpbHMuZ2V0X2xvZ2dlcihfX2ZpbGVfXykKIAot
CiBjbGFzcyBEdW1teU9wdGlvbnMob2JqZWN0KToKICAgICAiIiJGYWtlIGltcGxlbWVudGF0aW9u
IG9mIG9wdHBhcnNlLlZhbHVlcy4gQ2xvbmVkIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbC5N
b2NrT3B0aW9ucy4iIiIKIApAQCAtMTAzLDEyICs5OSwxOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAgICAgICAgICMgRklYTUU6IElkZWFsbHkgd2UnZCBoYXZlIGEgcGFja2FnZS13aWRlIHdheSB0
byBnZXQgYQogICAgICAgICAjIHdlbGwtZm9ybWVkIG9wdGlvbnMgb2JqZWN0IHRoYXQgaGFkIGFs
bCBvZiB0aGUgbmVjZXNzYXJ5CiAgICAgICAgICMgb3B0aW9ucyBkZWZpbmVkIG9uIGl0LgotICAg
ICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucyBvciBEdW1teU9wdGlvbnMoKQorICAgICAgICBz
ZWxmLm9wdGlvbnMgPSBvcHRpb25zIG9yIER1bW15T3B0aW9ucygpCisKKyAgICAgICAgc2VsZi5l
eGVjdXRpdmUgPSBleGVjdXRpdmUgb3IgRXhlY3V0aXZlKCkKKyAgICAgICAgc2VsZi51c2VyID0g
dXNlciBvciBVc2VyKCkKKyAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gZmlsZXN5c3RlbSBvciBz
eXN0ZW0uZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5jb25maWcgPSBjb25m
aWcgb3IgcG9ydF9jb25maWcuQ29uZmlnKHNlbGYuZXhlY3V0aXZlLCBzZWxmLmZpbGVzeXN0ZW0p
CiAKLSAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhlY3V0aXZlIG9yIEV4ZWN1dGl2ZSgpCi0g
ICAgICAgIHNlbGYuX3VzZXIgPSB1c2VyIG9yIFVzZXIoKQotICAgICAgICBzZWxmLl9maWxlc3lz
dGVtID0gZmlsZXN5c3RlbSBvciBzeXN0ZW0uZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkKLSAgICAg
ICAgc2VsZi5fY29uZmlnID0gY29uZmlnIG9yIHBvcnRfY29uZmlnLkNvbmZpZyhzZWxmLl9leGVj
dXRpdmUsIHNlbGYuX2ZpbGVzeXN0ZW0pCisgICAgICAgICMgRklYTUU6IFJlbW92ZSBhbGwgb2Yg
dGhlIG9sZCAicHJvdGVjdGVkIiB2ZXJzaW9ucyB3aGVuIHdlIGNhbi4KKyAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IHNlbGYub3B0aW9ucworICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBzZWxmLmV4
ZWN1dGl2ZQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gc2VsZi5maWxlc3lzdGVtCisgICAg
ICAgIHNlbGYuX3VzZXIgPSBzZWxmLnVzZXIKKyAgICAgICAgc2VsZi5fY29uZmlnID0gc2VsZi5j
b25maWcKIAogICAgICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2h0dHBf
c2VydmVyID0gTm9uZQpAQCAtMTM5LDkgKzE0Miw2IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgc2VsZi5fbXVsdGlwcm9jZXNzaW5nX2lzX2F2YWlsYWJsZSA9IChtdWx0aXByb2Nlc3Np
bmcgaXMgbm90IE5vbmUpCiAgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gTm9uZQog
Ci0gICAgZGVmIGV4ZWN1dGl2ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2
ZQotCiAgICAgZGVmIHdkaWZmX2F2YWlsYWJsZShzZWxmKToKICAgICAgICAgaWYgc2VsZi5fd2Rp
ZmZfYXZhaWxhYmxlIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLl93ZGlmZl9hdmFpbGFibGUg
PSBzZWxmLmNoZWNrX3dkaWZmKGxvZ2dpbmc9RmFsc2UpCkBAIC0xOTMsNyArMTkzLDcgQEAgY2xh
c3MgUG9ydChvYmplY3QpOgogICAgIGRlZiBjaGVja19wcmV0dHlfcGF0Y2goc2VsZiwgbG9nZ2lu
Zz1UcnVlKToKICAgICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgd2UgY2FuIHVzZSB0aGUgUHJldHR5
UGF0Y2ggcnVieSBzY3JpcHQuIiIiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc3VsdCA9
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3J1YnknLCAnLS12ZXJzaW9uJ10pCisgICAg
ICAgICAgICBfID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsncnVieScsICctLXZlcnNp
b24nXSkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5v
IGluIFtlcnJuby5FTk9FTlQsIGVycm5vLkVBQ0NFUywgZXJybm8uRUNISUxEXToKICAgICAgICAg
ICAgICAgICBpZiBsb2dnaW5nOgpAQCAtMjE1LDcgKzIxNSw3IEBAIGNsYXNzIFBvcnQob2JqZWN0
KToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2VsZi5fcGF0aF90b193ZGlm
ZigpLCAnLS1oZWxwJ10pCisgICAgICAgICAgICBfID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFtzZWxmLl9wYXRoX3RvX3dkaWZmKCksICctLWhlbHAnXSkKICAgICAgICAgZXhjZXB0IE9T
RXJyb3I6CiAgICAgICAgICAgICBpZiBsb2dnaW5nOgogICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3IoIndkaWZmIGlzIG5vdCBpbnN0YWxsZWQuIikKQEAgLTIyNSwxNCArMjI1LDE0IEBAIGNsYXNz
IFBvcnQob2JqZWN0KToKIAogICAgIGRlZiBjaGVja19odHRwZChzZWxmKToKICAgICAgICAgaWYg
c2VsZi5fdXNlc19hcGFjaGUoKToKLSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9wYXRoX3RvX2Fw
YWNoZSgpCisgICAgICAgICAgICBodHRwZF9wYXRoID0gc2VsZi5fcGF0aF90b19hcGFjaGUoKQog
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGF0aCA9IHNlbGYuX3BhdGhfdG9fbGlnaHR0cGQo
KQorICAgICAgICAgICAgaHR0cGRfcGF0aCA9IHNlbGYuX3BhdGhfdG9fbGlnaHR0cGQoKQogCiAg
ICAgICAgIHRyeToKICAgICAgICAgICAgIGVudiA9IHNlbGYuc2V0dXBfZW52aXJvbl9mb3Jfc2Vy
dmVyKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3Bh
dGgsICItdiJdLCBlbnY9ZW52LCByZXR1cm5fZXhpdF9jb2RlPVRydWUpID09IDAKLSAgICAgICAg
ZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1
bl9jb21tYW5kKFtodHRwZF9wYXRoLCAiLXYiXSwgZW52PWVudiwgcmV0dXJuX2V4aXRfY29kZT1U
cnVlKSA9PSAwCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgX2xvZy5lcnJv
cigiTm8gaHR0cGQgZm91bmQuIENhbm5vdCBydW4gaHR0cCB0ZXN0cy4iKQogICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCiAKQEAgLTI2OSwxMCArMjY5LDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0KToK
ICAgICAgICAgIyBUaGUgZmlsZW5hbWVzIHNob3cgdXAgaW4gdGhlIGRpZmYgb3V0cHV0LCBtYWtl
IHN1cmUgdGhleSdyZQogICAgICAgICAjIHJhdyBieXRlcyBhbmQgbm90IHVuaWNvZGUsIHNvIHRo
YXQgdGhleSBkb24ndCB0cmlnZ2VyIGpvaW4oKQogICAgICAgICAjIHRyeWluZyB0byBkZWNvZGUg
dGhlIGlucHV0LgotICAgICAgICBkZWYgdG9fcmF3X2J5dGVzKHN0cik6Ci0gICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKHN0ciwgdW5pY29kZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5l
bmNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIHJldHVybiBzdHIKKyAgICAgICAgZGVmIHRvX3Jh
d19ieXRlcyhzdHJpbmdfdmFsdWUpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzdHJpbmdf
dmFsdWUsIHVuaWNvZGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdfdmFsdWUuZW5j
b2RlKCd1dGYtOCcpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nX3ZhbHVlCiAgICAgICAgIGV4
cGVjdGVkX2ZpbGVuYW1lID0gdG9fcmF3X2J5dGVzKGV4cGVjdGVkX2ZpbGVuYW1lKQogICAgICAg
ICBhY3R1YWxfZmlsZW5hbWUgPSB0b19yYXdfYnl0ZXMoYWN0dWFsX2ZpbGVuYW1lKQogICAgICAg
ICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZXhwZWN0ZWRfdGV4dC5zcGxpdGxpbmVzKFRy
dWUpLApAQCAtMzc3LDE2ICszNzcsMTYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogCiAgICAgZGVm
IGV4cGVjdGVkX2ltYWdlKHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIiIlJldHVybnMgdGhl
IGltYWdlIHdlIGV4cGVjdCB0aGUgdGVzdCB0byBwcm9kdWNlLiIiIgotICAgICAgICBwYXRoID0g
c2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25hbWUsICcucG5nJykKLSAgICAgICAgaWYgbm90
IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpOgorICAgICAgICBiYXNlbGluZV9wYXRoID0g
c2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25hbWUsICcucG5nJykKKyAgICAgICAgaWYgbm90
IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGJhc2VsaW5lX3BhdGgpOgogICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmls
ZShwYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxl
KGJhc2VsaW5lX3BhdGgpCiAKICAgICBkZWYgZXhwZWN0ZWRfYXVkaW8oc2VsZiwgdGVzdF9uYW1l
KToKLSAgICAgICAgcGF0aCA9IHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLndh
dicpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwYXRoKToKKyAgICAg
ICAgYmFzZWxpbmVfcGF0aCA9IHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLndh
dicpCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhiYXNlbGluZV9wYXRo
KToKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lz
dGVtLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0
ZW0ucmVhZF9iaW5hcnlfZmlsZShiYXNlbGluZV9wYXRoKQogCiAgICAgZGVmIGV4cGVjdGVkX3Rl
eHQoc2VsZiwgdGVzdF9uYW1lKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgdGV4dCBvdXRwdXQg
d2UgZXhwZWN0IHRoZSB0ZXN0IHRvIHByb2R1Y2UsIG9yIE5vbmUKQEAgLTM5NSwxMiArMzk1LDEy
IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgIyBGSVhNRTogRFJUIG91dHB1dCBpcyBh
Y3R1YWxseSB1dGYtOCwgYnV0IHNpbmNlIHdlIGRvbid0IGRlY29kZSB0aGUKICAgICAgICAgIyBv
dXRwdXQgZnJvbSBEUlQgKGluc3RlYWQgdHJlYXRpbmcgaXQgYXMgYSBiaW5hcnkgc3RyaW5nKSwg
d2UgcmVhZCB0aGUKICAgICAgICAgIyBiYXNlbGluZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCB0b28u
Ci0gICAgICAgIHBhdGggPSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy50eHQn
KQotICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGF0aCk6Ci0gICAgICAg
ICAgICBwYXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25hbWUsICcud2ViYXJjaGl2
ZScpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGF0aCk6Cisg
ICAgICAgIGJhc2VsaW5lX3BhdGggPSBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwg
Jy50eHQnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoYmFzZWxpbmVf
cGF0aCk6CisgICAgICAgICAgICBiYXNlbGluZV9wYXRoID0gc2VsZi5leHBlY3RlZF9maWxlbmFt
ZSh0ZXN0X25hbWUsICcud2ViYXJjaGl2ZScpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmls
ZXN5c3RlbS5leGlzdHMoYmFzZWxpbmVfcGF0aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
bmUKLSAgICAgICAgdGV4dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShwYXRo
KQorICAgICAgICB0ZXh0ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKGJhc2Vs
aW5lX3BhdGgpCiAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKQogCiAg
ICAgZGVmIHJlZnRlc3RfZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZiwgdGVzdF9uYW1lKToKQEAgLTQx
Nyw3ICs0MTcsNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIExBWU9VVFRFU1RfV0VC
U09DS0VUX0RJUiA9ICJodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy8iCiAKICAgICAgICAgcG9y
dCA9IE5vbmUKLSAgICAgICAgdXNlX3NzbCA9IEZhbHNlCiAKICAgICAgICAgcmVsYXRpdmVfcGF0
aCA9IHRlc3RfbmFtZQogICAgICAgICBpZiAocmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9V
VFRFU1RfV0VCU09DS0VUX0RJUikKQEAgLTQ1MywxNSArNDUyLDE1IEBAIGNsYXNzIFBvcnQob2Jq
ZWN0KToKICAgICBkZWYgdGVzdF9pc2RpcihzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICAiIiJS
ZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuYW1lIHJlZmVycyB0byBhIGRpcmVjdG9yeSBvZiB0ZXN0
cy4iIiIKICAgICAgICAgIyBVc2VkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRvIGFwcGx5IHJ1
bGVzIHRvIHdob2xlIGRpcmVjdG9yaWVzLgotICAgICAgICBwYXRoID0gc2VsZi5hYnNwYXRoX2Zv
cl90ZXN0KHRlc3RfbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uaXNkaXIo
cGF0aCkKKyAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5hYnNwYXRoX2Zvcl90ZXN0KHRlc3RfbmFt
ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uaXNkaXIodGVzdF9wYXRoKQogCiAg
ICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIiIlJldHVybiBU
cnVlIGlmIHRoZSB0ZXN0IG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIHRlc3Qgb3IgYmFzZWxp
bmUuIiIiCiAgICAgICAgICMgVXNlZCBieSB0ZXN0X2V4cGVjdGF0aW9ucy5weSB0byBkZXRlcm1p
bmUgaWYgYW4gZW50cnkgcmVmZXJzIHRvIGEKICAgICAgICAgIyB2YWxpZCB0ZXN0IGFuZCBieSBw
cmludGluZy5weSB0byBkZXRlcm1pbmUgaWYgYmFzZWxpbmVzIGV4aXN0LgotICAgICAgICBwYXRo
ID0gc2VsZi5hYnNwYXRoX2Zvcl90ZXN0KHRlc3RfbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpCisgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuYWJzcGF0
aF9mb3JfdGVzdCh0ZXN0X25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyh0ZXN0X3BhdGgpCiAKICAgICBkZWYgc3BsaXRfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgog
ICAgICAgICAiIiJTcGxpdHMgYSB0ZXN0IG5hbWUgaW50byB0aGUgJ2RpcmVjdG9yeScgcGFydCBh
bmQgdGhlICdiYXNlbmFtZScgcGFydC4iIiIKQEAgLTQ4MSwxNiArNDgwLDE2IEBAIGNsYXNzIFBv
cnQob2JqZWN0KToKICAgICAgICAgZHJpdmVyID0gc2VsZi5jcmVhdGVfZHJpdmVyKDApCiAgICAg
ICAgIHJldHVybiBkcml2ZXIuY21kX2xpbmUoKQogCi0gICAgZGVmIHVwZGF0ZV9iYXNlbGluZShz
ZWxmLCBwYXRoLCBkYXRhKToKKyAgICBkZWYgdXBkYXRlX2Jhc2VsaW5lKHNlbGYsIGJhc2VsaW5l
X3BhdGgsIGRhdGEpOgogICAgICAgICAiIiJVcGRhdGVzIHRoZSBiYXNlbGluZSBmb3IgYSB0ZXN0
LgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBwYXRoOiB0aGUgYWN0dWFsIHBhdGggdG8g
dXNlIGZvciBiYXNlbGluZSwgbm90IHRoZSBwYXRoIHRvCisgICAgICAgICAgICBiYXNlbGluZV9w
YXRoOiB0aGUgYWN0dWFsIHBhdGggdG8gdXNlIGZvciBiYXNlbGluZSwgbm90IHRoZSBwYXRoIHRv
CiAgICAgICAgICAgICAgIHRoZSB0ZXN0LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdXBkYXRl
IGVpdGhlciBnZW5lcmljIG9yCiAgICAgICAgICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGJhc2Vs
aW5lcywgYnV0IHdlIGNhbid0IGluZmVyIHdoaWNoIGhlcmUuCiAgICAgICAgICAgICBkYXRhOiBj
b250ZW50cyBvZiB0aGUgYmFzZWxpbmUuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9maWxl
c3lzdGVtLndyaXRlX2JpbmFyeV9maWxlKHBhdGgsIGRhdGEpCisgICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0ud3JpdGVfYmluYXJ5X2ZpbGUoYmFzZWxpbmVfcGF0aCwgZGF0YSkKIAogICAgIGRlZiB1
cmlfdG9fdGVzdF9uYW1lKHNlbGYsIHVyaSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgYmFzZSBs
YXlvdXQgdGVzdCBuYW1lIGZvciBhIGdpdmVuIFVSSS4KQEAgLTUyMiw2ICs1MjEsOSBAQCBjbGFz
cyBQb3J0KG9iamVjdCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0
aGUgdG9wIG9mIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuIiIiCiAgICAgICAgIHJldHVybiBz
ZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnKQogCisgICAgZGVmIHNraXBw
ZWRfbGF5b3V0X3Rlc3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KKwogICAgIGRlZiBza2lw
c19sYXlvdXRfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICAiIiJGaWd1cmVzIG91dCBp
ZiB0aGUgZ2l2ZW50IHRlc3QgaXMgYmVpbmcgc2tpcHBlZCBvciBub3QuCiAKQEAgLTUzNiw5ICs1
MzgsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUK
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgbWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2Vs
ZiwgKnBhdGgpOgorICAgIGRlZiBtYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLCAqY29tcHMpOgog
ICAgICAgICAiIiJDcmVhdGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3Qg
YWxyZWFkeSBleGlzdC4iIiIKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2Rp
cmVjdG9yeSgqcGF0aCkKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVj
dG9yeSgqY29tcHMpCiAKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyBh
IG5hbWUgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgcGFydGljdWxhciB0eXBlIG9mIHBv
cnQKQEAgLTkyMSw3ICs5MjMsNyBAQCBjbGFzcyBUZXN0Q29uZmlndXJhdGlvbihvYmplY3QpOgog
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0PU5vbmUsIHZlcnNpb249Tm9uZSwgYXJjaGl0ZWN0
dXJlPU5vbmUsIGJ1aWxkX3R5cGU9Tm9uZSwgZ3JhcGhpY3NfdHlwZT1Ob25lKToKICAgICAgICAg
c2VsZi52ZXJzaW9uID0gdmVyc2lvbiBvciBwb3J0LnZlcnNpb24oKQogICAgICAgICBzZWxmLmFy
Y2hpdGVjdHVyZSA9IGFyY2hpdGVjdHVyZSBvciBwb3J0LmFyY2hpdGVjdHVyZSgpCi0gICAgICAg
IHNlbGYuYnVpbGRfdHlwZSA9IGJ1aWxkX3R5cGUgb3IgcG9ydC5fb3B0aW9ucy5jb25maWd1cmF0
aW9uLmxvd2VyKCkKKyAgICAgICAgc2VsZi5idWlsZF90eXBlID0gYnVpbGRfdHlwZSBvciBwb3J0
Lm9wdGlvbnMuY29uZmlndXJhdGlvbi5sb3dlcigpCiAgICAgICAgIHNlbGYuZ3JhcGhpY3NfdHlw
ZSA9IGdyYXBoaWNzX3R5cGUgb3IgcG9ydC5ncmFwaGljc190eXBlKCkKIAogICAgIGRlZiBpdGVt
cyhzZWxmKToKQEAgLTk0NiwxMiArOTQ4LDEyIEBAIGNsYXNzIFRlc3RDb25maWd1cmF0aW9uKG9i
amVjdCk6CiAgICAgICAgICMgQnkgZGVmYXVsdCwgd2UgYXNzdW1lIHdlIHdhbnQgdG8gdGVzdCBl
dmVyeSBncmFwaGljcyB0eXBlIGluCiAgICAgICAgICMgZXZlcnkgY29uZmlndXJhdGlvbiBvbiBl
dmVyeSBzeXN0ZW0uCiAgICAgICAgIHRlc3RfY29uZmlndXJhdGlvbnMgPSBbXQotICAgICAgICBm
b3Igc3lzdGVtIGluIHNlbGYuYWxsX3N5c3RlbXMoKToKKyAgICAgICAgZm9yIHZlcnNpb24sIGFy
Y2hpdGVjdHVyZSBpbiBzZWxmLmFsbF9zeXN0ZW1zKCk6CiAgICAgICAgICAgICBmb3IgYnVpbGRf
dHlwZSBpbiBzZWxmLmFsbF9idWlsZF90eXBlcygpOgogICAgICAgICAgICAgICAgIGZvciBncmFw
aGljc190eXBlIGluIHNlbGYuYWxsX2dyYXBoaWNzX3R5cGVzKCk6CiAgICAgICAgICAgICAgICAg
ICAgIHRlc3RfY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKAotICAgICAg
ICAgICAgICAgICAgICAgICAgdmVyc2lvbj1zeXN0ZW1bMF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhcmNoaXRlY3R1cmU9c3lzdGVtWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgdmVy
c2lvbj12ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPWFyY2hp
dGVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzX3R5cGU9Z3JhcGhpY3NfdHlwZSkpCiAg
ICAgICAgIHJldHVybiB0ZXN0X2NvbmZpZ3VyYXRpb25zCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA4MmEw
ZDBhMjQ3NmIxMDQ2MWU0ZTU2N2RhMTY2YTMxNGMxNzE2ZjA4Li45ZDgzZmZlMmM0ODM1OGEzOTc3
MjZkZmRmMDliNWE3Y2E4NjNjZjdjIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTM4LDE2ICszOCwxMSBA
QCBpbXBvcnQgb3MKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMKIAotZnJvbSB3ZWJraXRweS5j
b21tb24ubmV0IGltcG9ydCByZXN1bHRzanNvbnBhcnNlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMgaW1wb3J0IGxheW91dF9wYWNrYWdlCitmcm9tIHdlYmtpdHB5IGltcG9ydCBsYXlvdXRf
dGVzdHMKKwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubWFuYWdlciBp
bXBvcnQgTWFuYWdlciwgV29ya2VyRXhjZXB0aW9uCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCiAKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgdXNlcgotZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9y
dCBzaW1wbGVqc29uCi0KLWltcG9ydCBwb3J0CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKIApAQCAtODYsNyArODEsNyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3Ms
IHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9
IC0xCiAgICAgdHJ5OgogICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zLCBw
cmludGVyKQotICAgICAgICBtYW5hZ2VyLl9wcmludF9jb25maWcoKQorICAgICAgICBtYW5hZ2Vy
LnByaW50X2NvbmZpZygpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3Rp
bmcgdGVzdHMgLi4uIikKICAgICAgICAgdHJ5OgpAQCAtMTE5LDEzICsxMTQsMTMgQEAgZGVmIHJ1
bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgIHJl
dHVybiBudW1fdW5leHBlY3RlZF9yZXN1bHRzCiAKIAotZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRp
b25zKHBvcnRfb2JqLCBvcHRpb25zKToKK2RlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0
LCBvcHRpb25zKToKICAgICAiIiJTZXRzIHRoZSBvcHRpb25zIHZhbHVlcyB0aGF0IGRlcGVuZCBv
biBvdGhlciBvcHRpb25zIHZhbHVlcy4iIiIKICAgICAjIFdlIHJldHVybiBhIGxpc3Qgb2Ygd2Fy
bmluZ3MgdG8gcHJpbnQgYWZ0ZXIgdGhlIHByaW50ZXIgaXMgaW5pdGlhbGl6ZWQuCiAgICAgd2Fy
bmluZ3MgPSBbXQogCiAgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaXMgTm9uZToKLSAgICAg
ICAgb3B0aW9ucy53b3JrZXJfbW9kZWwgPSBwb3J0X29iai5kZWZhdWx0X3dvcmtlcl9tb2RlbCgp
CisgICAgICAgIG9wdGlvbnMud29ya2VyX21vZGVsID0gcG9ydC5kZWZhdWx0X3dvcmtlcl9tb2Rl
bCgpCiAKICAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCA9PSAnaW5saW5lJzoKICAgICAgICAg
aWYgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgYW5kIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cykgPiAxOgpAQCAtMTMzLDEwICsxMjgsMTAgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25z
KHBvcnRfb2JqLCBvcHRpb25zKToKICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAi
MSIKICAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6CiAgICAgICAgIG9wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzID0gb3MuZW52aXJvbi5nZXQoIldFQktJVF9URVNUX0NISUxEX1BST0NF
U1NFUyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyKHBvcnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihwb3J0LmRlZmF1bHRfY2hpbGRf
cHJvY2Vzc2VzKCkpKQogCiAgICAgaWYgbm90IG9wdGlvbnMuY29uZmlndXJhdGlvbjoKLSAgICAg
ICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gcG9ydF9vYmouZGVmYXVsdF9jb25maWd1cmF0aW9u
KCkKKyAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gcG9ydC5kZWZhdWx0X2NvbmZpZ3Vy
YXRpb24oKQogCiAgICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0cyBpcyBOb25lOgogICAgICAgICBv
cHRpb25zLnBpeGVsX3Rlc3RzID0gVHJ1ZQpAQCAtMTUyLDEwICsxNDcsMTAgQEAgZGVmIF9zZXRf
dXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2JqLCBvcHRpb25zKToKICAgICBpZiBvcHRpb25zLmFk
ZGl0aW9uYWxfcGxhdGZvcm1fZGlyZWN0b3J5OgogICAgICAgICBub3JtYWxpemVkX3BsYXRmb3Jt
X2RpcmVjdG9yaWVzID0gW10KICAgICAgICAgZm9yIHBhdGggaW4gb3B0aW9ucy5hZGRpdGlvbmFs
X3BsYXRmb3JtX2RpcmVjdG9yeToKLSAgICAgICAgICAgIGlmIG5vdCBwb3J0X29iai5fZmlsZXN5
c3RlbS5pc2FicyhwYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBwb3J0LmZpbGVzeXN0ZW0uaXNh
YnMocGF0aCk6CiAgICAgICAgICAgICAgICAgd2FybmluZ3MuYXBwZW5kKCItLWFkZGl0aW9uYWwt
cGxhdGZvcm0tZGlyZWN0b3J5PSVzIGlzIGlnbm9yZWQgc2luY2UgaXQgaXMgbm90IGFic29sdXRl
IiAlIHBhdGgpCiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIG5vcm1hbGl6
ZWRfcGxhdGZvcm1fZGlyZWN0b3JpZXMuYXBwZW5kKHBvcnRfb2JqLl9maWxlc3lzdGVtLm5vcm1w
YXRoKHBhdGgpKQorICAgICAgICAgICAgbm9ybWFsaXplZF9wbGF0Zm9ybV9kaXJlY3Rvcmllcy5h
cHBlbmQocG9ydC5maWxlc3lzdGVtLm5vcm1wYXRoKHBhdGgpKQogICAgICAgICBvcHRpb25zLmFk
ZGl0aW9uYWxfcGxhdGZvcm1fZGlyZWN0b3J5ID0gbm9ybWFsaXplZF9wbGF0Zm9ybV9kaXJlY3Rv
cmllcwogCiAgICAgcmV0dXJuIHdhcm5pbmdzCkBAIC00MjksOCArNDI0LDggQEAgZGVmIHBhcnNl
X2FyZ3MoYXJncz1Ob25lKToKIAogZGVmIG1haW4oKToKICAgICBvcHRpb25zLCBhcmdzID0gcGFy
c2VfYXJncygpCi0gICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRp
b25zKQotICAgIHJldHVybiBydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MpCisgICAgcG9ydCA9
IGxheW91dF90ZXN0cy5wb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorICAgIHJl
dHVybiBydW4ocG9ydCwgb3B0aW9ucywgYXJncykKIAogCiBpZiAnX19tYWluX18nID09IF9fbmFt
ZV9fOgpAQCAtNDQwLDcgKzQzNSw3IEBAIGlmICdfX21haW5fXycgPT0gX19uYW1lX186CiAgICAg
ICAgICMgVGhpcyBtaXJyb3JzIHdoYXQgdGhlIHNoZWxsIG5vcm1hbGx5IGRvZXMuCiAgICAgICAg
IElOVEVSUlVQVEVEX0VYSVRfU1RBVFVTID0gc2lnbmFsLlNJR0lOVCArIDEyOAogICAgICAgICBz
eXMuZXhpdChJTlRFUlJVUFRFRF9FWElUX1NUQVRVUykKLSAgICBleGNlcHQgV29ya2VyRXhjZXB0
aW9uLCBlOgorICAgIGV4Y2VwdCBXb3JrZXJFeGNlcHRpb246CiAgICAgICAgICMgVGhpcyBpcyBh
IHJhbmRvbWx5IGNob3NlbiBleGl0IGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGFnYWluc3QgdG8K
ICAgICAgICAgIyBpbmRpY2F0ZSB0aGF0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIG9jY3VycmVk
LgogICAgICAgICBFWENFUFRJT05BTF9FWElUX1NUQVRVUyA9IDI1NAo=
</data>
<flag name="review"
          id="94852"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="94859"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>